]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge branch 'master' into terencehill/vehicles_fixes
authorterencehill <piuntn@gmail.com>
Sat, 4 Jan 2014 18:48:00 +0000 (19:48 +0100)
committerterencehill <piuntn@gmail.com>
Sat, 4 Jan 2014 18:48:00 +0000 (19:48 +0100)
Conflicts:
qcsrc/server/vehicles/bumblebee.qc
qcsrc/server/vehicles/raptor.qc
qcsrc/server/vehicles/spiderbot.qc

297 files changed:
.tx/merge-base
balance25.cfg
balanceFruitieX.cfg
balanceXDF.cfg
balanceXPM.cfg
balanceXonotic.cfg
check-translations.sh
commands.cfg
common.be.po [new file with mode: 0644]
common.de.po
common.el.po
common.es.po
common.fi.po
common.fr.po
common.hu.po
common.it.po
common.nl.po
common.pot
common.pt.po
common.ro.po
common.ru.po
common.sv.po
common.uk.po
defaultXonotic.cfg
gamemodes.cfg
gfx/menu/luminos/gametype_arena.tga [deleted file]
gfx/menu/luminos/skinvalues.txt
gfx/menu/wickedx/gametype_arena.tga [deleted file]
gfx/menu/xaw/gametype_arena.tga [deleted file]
mutator_new_toys.cfg
qcsrc/Makefile
qcsrc/client/Main.qc
qcsrc/client/View.qc
qcsrc/client/announcer.qc
qcsrc/client/autocvars.qh
qcsrc/client/bgmscript.qc
qcsrc/client/command/cl_cmd.qc
qcsrc/client/csqc_constants.qc
qcsrc/client/csqcmodel_hooks.qc
qcsrc/client/damage.qc
qcsrc/client/gibs.qc
qcsrc/client/hook.qc
qcsrc/client/hud.qc
qcsrc/client/hud.qh
qcsrc/client/hud_config.qc
qcsrc/client/laser.qc
qcsrc/client/mapvoting.qc
qcsrc/client/miscfunctions.qc
qcsrc/client/movetypes.qc
qcsrc/client/particles.qc
qcsrc/client/player_skeleton.qc
qcsrc/client/progs.src
qcsrc/client/projectile.qc
qcsrc/client/scoreboard.qc
qcsrc/client/shownames.qc
qcsrc/client/target_music.qc
qcsrc/client/tturrets.qc
qcsrc/client/vehicles/vehicles.qc
qcsrc/client/waypointsprites.qc
qcsrc/common/campaign_file.qc
qcsrc/common/command/generic.qc
qcsrc/common/command/generic.qh
qcsrc/common/command/rpn.qc
qcsrc/common/constants.qh
qcsrc/common/counting.qh
qcsrc/common/csqcmodel_settings.qh
qcsrc/common/deathtypes.qh
qcsrc/common/explosion_equation.qc
qcsrc/common/if-this-file-errors-scroll-up-and-fix-the-warnings.fteqccfail [deleted file]
qcsrc/common/items.qh
qcsrc/common/mapinfo.qc
qcsrc/common/mapinfo.qh
qcsrc/common/net_notice.qc
qcsrc/common/notifications.qc
qcsrc/common/notifications.qh
qcsrc/common/teams.qh
qcsrc/common/test.qc
qcsrc/common/urllib.qc
qcsrc/common/util-pre.qh
qcsrc/common/util.qc
qcsrc/common/util.qh
qcsrc/csqcmodellib/cl_model.qc
qcsrc/csqcmodellib/cl_player.qc
qcsrc/csqcmodellib/common.qh
qcsrc/csqcmodellib/sv_model.qc
qcsrc/dpdefs/csprogsdefs.qc
qcsrc/dpdefs/dpextensions.qc
qcsrc/dpdefs/menudefs.qc
qcsrc/menu/command/menu_cmd.qc
qcsrc/menu/draw.qc
qcsrc/menu/item/button.c
qcsrc/menu/item/container.c
qcsrc/menu/item/dialog.c
qcsrc/menu/item/inputbox.c
qcsrc/menu/item/inputcontainer.c
qcsrc/menu/item/label.c
qcsrc/menu/item/listbox.c
qcsrc/menu/item/nexposee.c
qcsrc/menu/item/tab.c
qcsrc/menu/item/textslider.c
qcsrc/menu/menu.qc
qcsrc/menu/oo/interface.h
qcsrc/menu/progs.src
qcsrc/menu/xonotic/checkbox.c
qcsrc/menu/xonotic/checkbox_slider_invalid.c
qcsrc/menu/xonotic/checkbox_string.c
qcsrc/menu/xonotic/colorbutton.c
qcsrc/menu/xonotic/colorpicker.c
qcsrc/menu/xonotic/colorpicker_string.c
qcsrc/menu/xonotic/crosshairbutton.c
qcsrc/menu/xonotic/cvarlist.c
qcsrc/menu/xonotic/demolist.c
qcsrc/menu/xonotic/dialog_firstrun.c
qcsrc/menu/xonotic/dialog_hudsetup_exit.c
qcsrc/menu/xonotic/dialog_multiplayer_create.c
qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c
qcsrc/menu/xonotic/dialog_multiplayer_demo.c
qcsrc/menu/xonotic/dialog_multiplayer_join.c
qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c
qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c
qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c
qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c
qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hudconfirm.c
qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c
qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c
qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c
qcsrc/menu/xonotic/dialog_settings_audio.c
qcsrc/menu/xonotic/dialog_settings_effects.c
qcsrc/menu/xonotic/dialog_settings_input.c
qcsrc/menu/xonotic/dialog_settings_misc.c
qcsrc/menu/xonotic/dialog_settings_misc_cvars.c
qcsrc/menu/xonotic/dialog_settings_user.c
qcsrc/menu/xonotic/dialog_settings_video.c
qcsrc/menu/xonotic/gametypebutton.c
qcsrc/menu/xonotic/gametypelist.c
qcsrc/menu/xonotic/inputbox.c
qcsrc/menu/xonotic/mainwindow.c
qcsrc/menu/xonotic/maplist.c
qcsrc/menu/xonotic/playerlist.c
qcsrc/menu/xonotic/radiobutton.c
qcsrc/menu/xonotic/serverlist.c
qcsrc/menu/xonotic/skinlist.c
qcsrc/menu/xonotic/slider.c
qcsrc/menu/xonotic/slider_decibels.c
qcsrc/menu/xonotic/slider_resolution.c
qcsrc/menu/xonotic/textslider.c
qcsrc/menu/xonotic/util.qc
qcsrc/menu/xonotic/util.qh
qcsrc/menu/xonotic/weaponslist.c
qcsrc/server-testcase/framework.qc
qcsrc/server/accuracy.qc
qcsrc/server/antilag.qc
qcsrc/server/autocvars.qh
qcsrc/server/bot/aim.qc
qcsrc/server/bot/bot.qc
qcsrc/server/bot/havocbot/havocbot.qc
qcsrc/server/bot/havocbot/role_onslaught.qc
qcsrc/server/bot/navigation.qc
qcsrc/server/bot/scripting.qc
qcsrc/server/bot/waypoints.qc
qcsrc/server/campaign.qc
qcsrc/server/cheats.qc
qcsrc/server/cl_client.qc
qcsrc/server/cl_impulse.qc
qcsrc/server/cl_physics.qc
qcsrc/server/cl_player.qc
qcsrc/server/cl_weapons.qc
qcsrc/server/cl_weaponsystem.qc
qcsrc/server/command/banning.qc
qcsrc/server/command/cmd.qc
qcsrc/server/command/common.qc
qcsrc/server/command/getreplies.qc
qcsrc/server/command/radarmap.qc
qcsrc/server/command/sv_cmd.qc
qcsrc/server/command/vote.qc
qcsrc/server/command/vote.qh
qcsrc/server/csqcprojectile.qc
qcsrc/server/defs.qh
qcsrc/server/ent_cs.qc
qcsrc/server/func_breakable.qc
qcsrc/server/g_damage.qc
qcsrc/server/g_hook.qc
qcsrc/server/g_models.qc
qcsrc/server/g_subs.qc
qcsrc/server/g_tetris.qc
qcsrc/server/g_triggers.qc
qcsrc/server/g_world.qc
qcsrc/server/ipban.qc
qcsrc/server/item_key.qc
qcsrc/server/miscfunctions.qc
qcsrc/server/movelib.qc
qcsrc/server/mutators/base.qc
qcsrc/server/mutators/base.qh
qcsrc/server/mutators/gamemode_arena.qc [deleted file]
qcsrc/server/mutators/gamemode_arena.qh [deleted file]
qcsrc/server/mutators/gamemode_assault.qc
qcsrc/server/mutators/gamemode_ca.qc
qcsrc/server/mutators/gamemode_ctf.qc
qcsrc/server/mutators/gamemode_ctf.qh
qcsrc/server/mutators/gamemode_domination.qc
qcsrc/server/mutators/gamemode_freezetag.qc
qcsrc/server/mutators/gamemode_keepaway.qc
qcsrc/server/mutators/gamemode_keyhunt.qc
qcsrc/server/mutators/gamemode_lms.qc
qcsrc/server/mutators/gamemode_nexball.qc
qcsrc/server/mutators/gamemode_onslaught.qc
qcsrc/server/mutators/mutator_bloodloss.qc
qcsrc/server/mutators/mutator_campcheck.qc
qcsrc/server/mutators/mutator_dodging.qc
qcsrc/server/mutators/mutator_melee_only.qc
qcsrc/server/mutators/mutator_midair.qc
qcsrc/server/mutators/mutator_minstagib.qc
qcsrc/server/mutators/mutator_multijump.qc
qcsrc/server/mutators/mutator_nades.qc
qcsrc/server/mutators/mutator_new_toys.qc
qcsrc/server/mutators/mutator_nix.qc
qcsrc/server/mutators/mutator_physical_items.qc
qcsrc/server/mutators/mutator_pinata.qc
qcsrc/server/mutators/mutator_random_gravity.qc
qcsrc/server/mutators/mutator_superspec.qc
qcsrc/server/mutators/mutator_touchexplode.qc
qcsrc/server/mutators/mutator_vampire.qc
qcsrc/server/mutators/mutators.qh
qcsrc/server/mutators/sandbox.qc
qcsrc/server/pathlib.qc
qcsrc/server/pathlib/debug.qc
qcsrc/server/pathlib/main.qc
qcsrc/server/pathlib/movenode.qc
qcsrc/server/pathlib/path_waypoint.qc
qcsrc/server/pathlib/utility.qc
qcsrc/server/playerstats.qc
qcsrc/server/portals.qc
qcsrc/server/progs.src
qcsrc/server/race.qc
qcsrc/server/scores.qc
qcsrc/server/scores_rules.qc
qcsrc/server/secret.qc
qcsrc/server/spawnpoints.qc
qcsrc/server/sv_main.qc
qcsrc/server/t_halflife.qc
qcsrc/server/t_items.qc
qcsrc/server/t_jumppads.qc
qcsrc/server/t_plats.qc
qcsrc/server/t_quake3.qc
qcsrc/server/t_swamp.qc
qcsrc/server/t_teleporters.qc
qcsrc/server/target_spawn.qc
qcsrc/server/teamplay.qc
qcsrc/server/tturrets/system/system_aimprocs.qc
qcsrc/server/tturrets/system/system_damage.qc
qcsrc/server/tturrets/system/system_main.qc
qcsrc/server/tturrets/system/system_misc.qc
qcsrc/server/tturrets/units/unit_checkpoint.qc
qcsrc/server/tturrets/units/unit_ewheel.qc
qcsrc/server/tturrets/units/unit_flac.qc
qcsrc/server/tturrets/units/unit_fusionreactor.qc
qcsrc/server/tturrets/units/unit_hellion.qc
qcsrc/server/tturrets/units/unit_hk.qc
qcsrc/server/tturrets/units/unit_machinegun.qc
qcsrc/server/tturrets/units/unit_mlrs.qc
qcsrc/server/tturrets/units/unit_plasma.qc
qcsrc/server/tturrets/units/unit_tessla.qc
qcsrc/server/tturrets/units/unit_walker.qc
qcsrc/server/vehicles/bumblebee.qc
qcsrc/server/vehicles/racer.qc
qcsrc/server/vehicles/raptor.qc
qcsrc/server/vehicles/spiderbot.qc
qcsrc/server/vehicles/vehicles.qc
qcsrc/server/w_common.qc
qcsrc/server/w_crylink.qc
qcsrc/server/w_electro.qc
qcsrc/server/w_fireball.qc
qcsrc/server/w_grenadelauncher.qc
qcsrc/server/w_hagar.qc
qcsrc/server/w_hlac.qc
qcsrc/server/w_hook.qc
qcsrc/server/w_laser.qc
qcsrc/server/w_minelayer.qc
qcsrc/server/w_minstanex.qc
qcsrc/server/w_nex.qc
qcsrc/server/w_rifle.qc
qcsrc/server/w_rocketlauncher.qc
qcsrc/server/w_seeker.qc
qcsrc/server/w_shotgun.qc
qcsrc/server/w_tuba.qc
qcsrc/server/w_uzi.qc
qcsrc/server/waypointsprites.qc
qcsrc/uncrusticracy.sh [new file with mode: 0644]
qcsrc/uncrustify.cfg [new file with mode: 0644]
qcsrc/uncrustify.sh [new file with mode: 0755]
qcsrc/warpzonelib/client.qc
qcsrc/warpzonelib/common.qc
qcsrc/warpzonelib/server.qc
tooltips.db.fr
tx.sh
vehicle_spiderbot.cfg
xonotic-credits.txt

index 1defbff2760f7026bc6ffe09a6d253be67bb592c..fd366f8ebd6aadbf77fcdc0748db5b744e8f3518 100644 (file)
@@ -1 +1 @@
-Fri Sep 13 21:26:35 CEST 2013
+Fri Oct  4 13:06:47 CEST 2013
index 9451d377d99757107948b7e805e8b63c2eeacfdc..f0cc7d73b40baa7681349b3f7943015408f09ef0 100644 (file)
@@ -271,8 +271,7 @@ set g_balance_shotgun_primary_spread 0.07
 set g_balance_shotgun_primary_refire 0.5
 set g_balance_shotgun_primary_animtime 0.2
 set g_balance_shotgun_primary_ammo 1
-set g_balance_shotgun_primary_speed 12000
-set g_balance_shotgun_primary_bulletconstant 75 // 3.8qu
+set g_balance_shotgun_primary_solidpenetration 3.8
 set g_balance_shotgun_secondary 1
 set g_balance_shotgun_secondary_melee_delay 0.25 // 0.35 was too slow
 set g_balance_shotgun_secondary_melee_range 120
@@ -320,8 +319,7 @@ set g_balance_uzi_sustained_spread 0.05
 set g_balance_uzi_sustained_refire 0.1
 set g_balance_uzi_sustained_ammo 1
 
-set g_balance_uzi_speed 18000
-set g_balance_uzi_bulletconstant 115 // 13.1qu
+set g_balance_uzi_solidpenetration 13.1
 
 set g_balance_uzi_switchdelay_drop 0.15
 set g_balance_uzi_switchdelay_raise 0.15
index f985659f9c6549ea4c337004c5804e9d7d83e38b..948d7e4b9eb6de3124259bdd18a4134d3a00c6d6 100644 (file)
@@ -271,8 +271,7 @@ set g_balance_shotgun_primary_spread 0.16 // LOG: changed from 0.18 -> 0.16 to c
 set g_balance_shotgun_primary_refire 1
 set g_balance_shotgun_primary_animtime 0.3
 set g_balance_shotgun_primary_ammo 1
-set g_balance_shotgun_primary_speed 12000
-set g_balance_shotgun_primary_bulletconstant 75 // 3.8qu
+set g_balance_shotgun_primary_solidpenetration 3.8
 set g_balance_shotgun_secondary 1
 set g_balance_shotgun_secondary_melee_delay 0.25 // 0.35 was too slow
 set g_balance_shotgun_secondary_melee_range 120
@@ -320,8 +319,7 @@ set g_balance_uzi_sustained_spread 0.06
 set g_balance_uzi_sustained_refire 0.1
 set g_balance_uzi_sustained_ammo 1
 
-set g_balance_uzi_speed 18000
-set g_balance_uzi_bulletconstant 115 // 13.1qu
+set g_balance_uzi_solidpenetration 13.1
 
 set g_balance_uzi_switchdelay_drop 0.15
 set g_balance_uzi_switchdelay_raise 0.15
index 4e0631523882e1ae1a045afef1598862eeba5ad2..b7d3e02656caf0f73c842e6d1d955aace507d0ce 100644 (file)
@@ -271,8 +271,7 @@ set g_balance_shotgun_primary_spread 0.12
 set g_balance_shotgun_primary_refire 0.75
 set g_balance_shotgun_primary_animtime 0.2
 set g_balance_shotgun_primary_ammo 1
-set g_balance_shotgun_primary_speed 8000
-set g_balance_shotgun_primary_bulletconstant 75 // 3.8qu
+set g_balance_shotgun_primary_solidpenetration 3.8
 set g_balance_shotgun_secondary 1
 set g_balance_shotgun_secondary_melee_delay 0.25 // 0.35 was too slow
 set g_balance_shotgun_secondary_melee_range 120
@@ -320,8 +319,7 @@ set g_balance_uzi_sustained_spread 0
 set g_balance_uzi_sustained_refire 0.1
 set g_balance_uzi_sustained_ammo 1
 
-set g_balance_uzi_speed 18000
-set g_balance_uzi_bulletconstant 115 // 13.1qu
+set g_balance_uzi_solidpenetration 13.1
 
 set g_balance_uzi_switchdelay_drop 0
 set g_balance_uzi_switchdelay_raise 0
index 9d27ac66c9988af575a770ec3685fb1e52b22331..843e16a8357fbeae5fbb5a170919cd4e2f154f0c 100644 (file)
@@ -271,8 +271,7 @@ set g_balance_shotgun_primary_spread 0.12
 set g_balance_shotgun_primary_refire 0.75
 set g_balance_shotgun_primary_animtime 0.2
 set g_balance_shotgun_primary_ammo 1
-set g_balance_shotgun_primary_speed 8000
-set g_balance_shotgun_primary_bulletconstant 75 // 3.8qu
+set g_balance_shotgun_primary_solidpenetration 3.8
 set g_balance_shotgun_secondary 1
 set g_balance_shotgun_secondary_melee_delay 0.25 // 0.35 was too slow
 set g_balance_shotgun_secondary_melee_range 120
@@ -320,8 +319,7 @@ set g_balance_uzi_sustained_spread 0.03
 set g_balance_uzi_sustained_refire 0.1
 set g_balance_uzi_sustained_ammo 1
 
-set g_balance_uzi_speed 18000
-set g_balance_uzi_bulletconstant 115 // 13.1qu
+set g_balance_uzi_solidpenetration 13.1
 
 set g_balance_uzi_switchdelay_drop 0.2
 set g_balance_uzi_switchdelay_raise 0.2
@@ -586,21 +584,21 @@ set g_balance_hagar_reload_ammo 0 //default: 25
 set g_balance_hagar_reload_time 2
 // }}}
 // {{{ rocketlauncher
-set g_balance_rocketlauncher_damage 80
-set g_balance_rocketlauncher_edgedamage 40
+set g_balance_rocketlauncher_damage 70
+set g_balance_rocketlauncher_edgedamage 35
 set g_balance_rocketlauncher_force 450
 set g_balance_rocketlauncher_radius 110
 set g_balance_rocketlauncher_speed 1300
 set g_balance_rocketlauncher_speedaccel 1300
 set g_balance_rocketlauncher_speedstart 1000
 set g_balance_rocketlauncher_lifetime 10
-set g_balance_rocketlauncher_refire 1.1
+set g_balance_rocketlauncher_refire 1.2
 set g_balance_rocketlauncher_animtime 0.4
 set g_balance_rocketlauncher_ammo 4
 set g_balance_rocketlauncher_health 30 // 30 // 5 hitpoints above maximum laser value -- this way lasers can't blow it up, but grenadelauncher still can most the time.
 set g_balance_rocketlauncher_damageforcescale 1 // low damage force scale so that it can still be affected by other hits, but not so much that it does a 90 degree turn
 set g_balance_rocketlauncher_detonatedelay 0.02 // positive: timer till detonation is allowed, negative: "security device" that prevents ANY remote detonation if it could hurt its owner, zero: detonatable at any time
-set g_balance_rocketlauncher_guiderate 90 // max degrees per second
+set g_balance_rocketlauncher_guiderate 70 // max degrees per second
 set g_balance_rocketlauncher_guideratedelay 0.01 // immediate
 set g_balance_rocketlauncher_guidegoal 512 // goal distance for (non-laser) guiding (higher = less control, lower = erratic)
 set g_balance_rocketlauncher_guidedelay 0.2 // delay before guiding kicks in
@@ -609,7 +607,7 @@ set g_balance_rocketlauncher_remote_damage 70
 set g_balance_rocketlauncher_remote_edgedamage 35
 set g_balance_rocketlauncher_remote_radius 110
 set g_balance_rocketlauncher_remote_force 400
-set g_balance_rocketlauncher_switchdelay_drop 0.2
+set g_balance_rocketlauncher_switchdelay_drop 0.3
 set g_balance_rocketlauncher_switchdelay_raise 0.2
 set g_balance_rocketlauncher_reload_ammo 0 //default: 25
 set g_balance_rocketlauncher_reload_time 2
index 6deba7604231d0244c560f7d84ae22e5de948f43..de865fa68087ba37804aeaa36aac0b3f0091d80a 100644 (file)
@@ -271,8 +271,7 @@ set g_balance_shotgun_primary_spread 0.12
 set g_balance_shotgun_primary_refire 0.75
 set g_balance_shotgun_primary_animtime 0.2
 set g_balance_shotgun_primary_ammo 1
-set g_balance_shotgun_primary_speed 8000
-set g_balance_shotgun_primary_bulletconstant 75 // 3.8qu
+set g_balance_shotgun_primary_solidpenetration 3.8
 set g_balance_shotgun_secondary 1
 set g_balance_shotgun_secondary_melee_delay 0.25 // 0.35 was too slow
 set g_balance_shotgun_secondary_melee_range 120
@@ -320,8 +319,7 @@ set g_balance_uzi_sustained_spread 0.03
 set g_balance_uzi_sustained_refire 0.1
 set g_balance_uzi_sustained_ammo 1
 
-set g_balance_uzi_speed 18000
-set g_balance_uzi_bulletconstant 115 // 13.1qu
+set g_balance_uzi_solidpenetration 13.1
 
 set g_balance_uzi_switchdelay_drop 0.2
 set g_balance_uzi_switchdelay_raise 0.2
@@ -586,21 +584,21 @@ set g_balance_hagar_reload_ammo 0 //default: 25
 set g_balance_hagar_reload_time 2
 // }}}
 // {{{ rocketlauncher
-set g_balance_rocketlauncher_damage 80
-set g_balance_rocketlauncher_edgedamage 40
+set g_balance_rocketlauncher_damage 70
+set g_balance_rocketlauncher_edgedamage 35
 set g_balance_rocketlauncher_force 450
 set g_balance_rocketlauncher_radius 110
 set g_balance_rocketlauncher_speed 1300
 set g_balance_rocketlauncher_speedaccel 1300
 set g_balance_rocketlauncher_speedstart 1000
 set g_balance_rocketlauncher_lifetime 10
-set g_balance_rocketlauncher_refire 1.1
+set g_balance_rocketlauncher_refire 1.2
 set g_balance_rocketlauncher_animtime 0.4
 set g_balance_rocketlauncher_ammo 4
 set g_balance_rocketlauncher_health 30 // 30 // 5 hitpoints above maximum laser value -- this way lasers can't blow it up, but grenadelauncher still can most the time.
 set g_balance_rocketlauncher_damageforcescale 1 // low damage force scale so that it can still be affected by other hits, but not so much that it does a 90 degree turn
 set g_balance_rocketlauncher_detonatedelay 0.02 // positive: timer till detonation is allowed, negative: "security device" that prevents ANY remote detonation if it could hurt its owner, zero: detonatable at any time
-set g_balance_rocketlauncher_guiderate 90 // max degrees per second
+set g_balance_rocketlauncher_guiderate 70 // max degrees per second
 set g_balance_rocketlauncher_guideratedelay 0.01 // immediate
 set g_balance_rocketlauncher_guidegoal 512 // goal distance for (non-laser) guiding (higher = less control, lower = erratic)
 set g_balance_rocketlauncher_guidedelay 0.2 // delay before guiding kicks in
@@ -609,7 +607,7 @@ set g_balance_rocketlauncher_remote_damage 70
 set g_balance_rocketlauncher_remote_edgedamage 35
 set g_balance_rocketlauncher_remote_radius 110
 set g_balance_rocketlauncher_remote_force 400
-set g_balance_rocketlauncher_switchdelay_drop 0.2
+set g_balance_rocketlauncher_switchdelay_drop 0.3
 set g_balance_rocketlauncher_switchdelay_raise 0.2
 set g_balance_rocketlauncher_reload_ammo 0 //default: 25
 set g_balance_rocketlauncher_reload_time 2
index 654dae4c256c8c8afd2a5061e840781d568e03dd..307c3c2c147822be83d04f39d3b707a0104c4a91 100755 (executable)
@@ -34,11 +34,11 @@ if [ x"$mode" = x"po" ]; then
        for X in common.*.po; do
                [ -f "$X" ] || continue
                if [ -n "$language" ]; then
-                       if [ x"${X#*.dat.}" != x"$language.po" ]; then
+                       if [ x"${X#common.}" != x"$language.po" ]; then
                                continue
                        fi
                else
-                       if [ x"${X#*.dat.}" = x"en.po" ]; then
+                       if [ x"${X#common.}" = x"en.po" ]; then
                                continue
                        fi
                fi
@@ -189,7 +189,7 @@ EOF
        for X in common.*.po.disabled; do
                [ -f "$X" ] || continue
                if [ -n "$language" ]; then
-                       if [ x"${X#*.dat.}" != x"$language.po" ]; then
+                       if [ x"${X#common.}" != x"$language.po" ]; then
                                continue
                        fi
                fi
index dca2334bc745a8a1a0f1cb869aec1b1ede7b5d4c..71e6eb2cb07998b27caf3a1ddebd5680cdf452e1 100644 (file)
@@ -122,6 +122,7 @@ alias hud                  "qc_cmd_cl     hud                  ${* ?}" // Comman
 alias localprint           "qc_cmd_cl     localprint           ${* ?}" // Create your own centerprint sent to yourself
 //alias mv_download        "qc_cmd_cl     mv_download          ${* ?}" // Retrieve mapshot picture from the server
 alias sendcvar             "qc_cmd_cl     sendcvar             ${* ?}" // Send a cvar to the server (like weaponpriority)
+alias exit                 "quit"
 
 // other aliases for local commands
 alias hud_configure "qc_cmd_cl hud configure"
@@ -336,6 +337,7 @@ alias vdomap "vdo gotomap ${1 ?}"
 alias vdokick "vdo kick ${* ?}"
 alias vdokickban "vdo kickban ${* ?}"
 alias vdoend "vdo endmatch"
+alias vext "vcall extendmatchtime"
 
 // ======================
 //  rcon server commands
diff --git a/common.be.po b/common.be.po
new file mode 100644 (file)
index 0000000..9e71827
--- /dev/null
@@ -0,0 +1,6086 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Translators:
+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-10-03 10:08+0000\n"
+"Last-Translator: divVerent <divVerent@xonotic.org>\n"
+"Language-Team: Belarusian (http://www.transifex.com/projects/p/xonotic/"
+"language/be/)\n"
+"Language: be\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: qcsrc/client/Main.qc:21
+msgid "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"
+msgstr ""
+
+#: qcsrc/client/Main.qc:46
+msgid ""
+"^3Your engine build is outdated\n"
+"^3This Server uses a newer QC VM. Please update!\n"
+msgstr ""
+
+#: qcsrc/client/Main.qc:56
+#, c-format
+msgid "^4CSQC Build information: ^1%s\n"
+msgstr ""
+
+#: qcsrc/client/Main.qc:216 qcsrc/client/Main.qc:232
+#, c-format
+msgid "trying to switch to unsupported team %d\n"
+msgstr ""
+
+#: qcsrc/client/Main.qc:835
+#, c-format
+msgid ""
+"Unknown entity type in CSQC_Ent_Update (enttype: %d, edict: %d, classname: "
+"%s)\n"
+msgstr ""
+
+#: qcsrc/client/Main.qc:1295
+#, c-format
+msgid "%s (not bound)"
+msgstr ""
+
+#: 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 ""
+
+#: qcsrc/client/View.qc:1096
+msgid "Revival progress"
+msgstr ""
+
+#: qcsrc/client/hud.qc:186
+#, c-format
+msgid " (-%dL)"
+msgstr ""
+
+#: qcsrc/client/hud.qc:191
+#, c-format
+msgid " (+%dL)"
+msgstr ""
+
+#: qcsrc/client/hud.qc:210
+msgid "Start line"
+msgstr ""
+
+#: qcsrc/client/hud.qc:212 qcsrc/client/hud.qc:216
+msgid "Finish line"
+msgstr ""
+
+#: qcsrc/client/hud.qc:214
+#, c-format
+msgid "Intermediate %d"
+msgstr ""
+
+#: qcsrc/client/hud.qc:223
+#, c-format
+msgid "%s (%s %s)"
+msgstr ""
+
+#: qcsrc/client/hud.qc:829
+msgid "Out of ammo"
+msgstr ""
+
+#: qcsrc/client/hud.qc:833
+msgid "Don't have"
+msgstr ""
+
+#: qcsrc/client/hud.qc:837
+msgid "Unavailable"
+msgstr ""
+
+#: qcsrc/client/hud.qc:1704 qcsrc/client/hud.qc:1705 qcsrc/client/hud.qc:2068
+#, c-format
+msgid "Player %d"
+msgstr ""
+
+#: qcsrc/client/hud.qc:2384
+msgid "^1Intermediate 1 (+15.42)"
+msgstr ""
+
+#: qcsrc/client/hud.qc:2386 qcsrc/client/hud.qc:2428 qcsrc/client/hud.qc:2469
+#, c-format
+msgid "^1PENALTY: %.1f (%s)"
+msgstr ""
+
+#: qcsrc/client/hud.qc:2471
+#, c-format
+msgid "^2PENALTY: %.1f (%s)"
+msgstr ""
+
+#: qcsrc/client/hud.qc:2501
+msgid "^1You must answer before entering hud configure mode\n"
+msgstr ""
+
+#: qcsrc/client/hud.qc:2506
+msgid "^2Name ^7instead of \"^1Anonymous player^7\" in stats"
+msgstr ""
+
+#: qcsrc/client/hud.qc:2586
+msgid "A vote has been called for:"
+msgstr ""
+
+#: qcsrc/client/hud.qc:2588
+msgid "Allow servers to store and display your name?"
+msgstr ""
+
+#: qcsrc/client/hud.qc:2592
+msgid "^1Configure the HUD"
+msgstr ""
+
+#: qcsrc/client/hud.qc:2596
+#, c-format
+msgid "Yes (%s): %d"
+msgstr ""
+
+#: qcsrc/client/hud.qc:2598
+#, c-format
+msgid "No (%s): %d"
+msgstr ""
+
+#: qcsrc/client/hud.qc:3169 qcsrc/client/hud.qc:3172 qcsrc/client/hud.qc:3174
+msgid "Personal best"
+msgstr ""
+
+#: qcsrc/client/hud.qc:3187 qcsrc/client/hud.qc:3190 qcsrc/client/hud.qc:3192
+msgid "Server best"
+msgstr ""
+
+#: qcsrc/client/hud.qc:3552
+msgid "^3Player^7: This is the chat area."
+msgstr ""
+
+#: qcsrc/client/hud.qc:3618
+#, c-format
+msgid "FPS: %.*f"
+msgstr ""
+
+#: qcsrc/client/hud.qc:3683
+msgid "^1Observing"
+msgstr ""
+
+#: qcsrc/client/hud.qc:3686 qcsrc/client/hud.qc:3688
+#, c-format
+msgid "^1Spectating: ^7%s"
+msgstr ""
+
+#: qcsrc/client/hud.qc:3693
+#, c-format
+msgid "^1Press ^3%s^1 to spectate"
+msgstr ""
+
+#: qcsrc/client/hud.qc:3695
+#, c-format
+msgid "^1Press ^3%s^1 or ^3%s^1 for next or previous player"
+msgstr ""
+
+#: qcsrc/client/hud.qc:3699
+#, c-format
+msgid "^1Use ^3%s^1 or ^3%s^1 to change the speed"
+msgstr ""
+
+#: qcsrc/client/hud.qc:3701
+#, c-format
+msgid "^1Press ^3%s^1 to observe"
+msgstr ""
+
+#: qcsrc/client/hud.qc:3704
+#, c-format
+msgid "^1Press ^3%s^1 for gamemode info"
+msgstr ""
+
+#: qcsrc/client/hud.qc:3708
+msgid "^1Wait for your turn to join"
+msgstr ""
+
+#: qcsrc/client/hud.qc:3714
+msgid "^1Match has already begun"
+msgstr ""
+
+#: qcsrc/client/hud.qc:3716
+msgid "^1You have no more lives left"
+msgstr ""
+
+#: qcsrc/client/hud.qc:3718 qcsrc/client/hud.qc:3721
+#, c-format
+msgid "^1Press ^3%s^1 to join"
+msgstr ""
+
+#: qcsrc/client/hud.qc:3729
+#, c-format
+msgid "^1Game starts in ^3%d^1 seconds"
+msgstr ""
+
+#: qcsrc/client/hud.qc:3736
+msgid "^2Currently in ^1warmup^2 stage!"
+msgstr ""
+
+#: qcsrc/client/hud.qc:3751
+#, c-format
+msgid "%sPress ^3%s%s to end warmup"
+msgstr ""
+
+#: qcsrc/client/hud.qc:3753
+#, c-format
+msgid "%sPress ^3%s%s once you are ready"
+msgstr ""
+
+#: qcsrc/client/hud.qc:3758
+msgid "^2Waiting for others to ready up to end warmup..."
+msgstr ""
+
+#: qcsrc/client/hud.qc:3760
+msgid "^2Waiting for others to ready up..."
+msgstr ""
+
+#: qcsrc/client/hud.qc:3766
+#, c-format
+msgid "^2Press ^3%s^2 to end warmup"
+msgstr ""
+
+#: qcsrc/client/hud.qc:3787
+msgid "Teamnumbers are unbalanced!"
+msgstr ""
+
+#: qcsrc/client/hud.qc:3792
+#, c-format
+msgid " Press ^3%s%s to adjust"
+msgstr ""
+
+#: qcsrc/client/hud.qc:3800
+msgid "^7Press ^3ESC ^7to show HUD options."
+msgstr ""
+
+#: qcsrc/client/hud.qc:3802
+msgid "^3Doubleclick ^7a panel for panel-specific options."
+msgstr ""
+
+#: qcsrc/client/hud.qc:3804
+msgid "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"
+msgstr ""
+
+#: qcsrc/client/hud.qc:3806
+msgid "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."
+msgstr ""
+
+#: qcsrc/client/hud.qc:3854
+msgid " qu/s"
+msgstr ""
+
+#: qcsrc/client/hud.qc:3858
+msgid " m/s"
+msgstr ""
+
+#: qcsrc/client/hud.qc:3862
+msgid " km/h"
+msgstr ""
+
+#: qcsrc/client/hud.qc:3866
+msgid " mph"
+msgstr ""
+
+#: qcsrc/client/hud.qc:3870
+msgid " knots"
+msgstr ""
+
+#: qcsrc/client/hud.qc:4547
+msgid "Automatically fixed wrong/missing panel numbers in _hud_panelorder\n"
+msgstr ""
+
+#: qcsrc/client/hud_config.qc:196
+#, c-format
+msgid "^2Successfully exported to %s! (Note: It's saved in data/data/)\n"
+msgstr ""
+
+#: qcsrc/client/hud_config.qc:200
+#, c-format
+msgid "^1Couldn't write to %s\n"
+msgstr ""
+
+#: qcsrc/client/mapvoting.qc:28
+msgid " (1 vote)"
+msgstr ""
+
+#: qcsrc/client/mapvoting.qc:30
+#, c-format
+msgid " (%d votes)"
+msgstr ""
+
+#: qcsrc/client/mapvoting.qc:118
+msgid "Don't care"
+msgstr ""
+
+#: qcsrc/client/mapvoting.qc:203
+msgid "Vote for a map"
+msgstr ""
+
+#: qcsrc/client/mapvoting.qc:209
+#, c-format
+msgid "%d seconds left"
+msgstr ""
+
+#: qcsrc/client/mapvoting.qc:273
+msgid ""
+"mv_mapdownload: ^3You're not supposed to use this command on your own!\n"
+msgstr ""
+
+#: qcsrc/client/mapvoting.qc:283
+msgid "^1Error:^7 Couldn't find pak index.\n"
+msgstr ""
+
+#: qcsrc/client/mapvoting.qc:292
+msgid "Requesting preview...\n"
+msgstr ""
+
+#: qcsrc/client/miscfunctions.qc:98
+msgid "Trying to remove a team which is not in the teamlist!"
+msgstr ""
+
+#: qcsrc/client/movetypes.qc:163
+#, c-format
+msgid "Can't unstick an entity (edict: %d, classname: %s, origin: %s)\n"
+msgstr ""
+
+#: qcsrc/client/movetypes.qc:166
+#, c-format
+msgid "Sucessfully unstuck an entity (edict: %d, classname: %s, origin: %s)\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:19
+msgid "SCO^bckills"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:20
+msgid "SCO^bctime"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:21
+msgid "SCO^caps"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:22
+msgid "SCO^captime"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:23
+msgid "SCO^deaths"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:24
+msgid "SCO^destroyed"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:25
+msgid "SCO^drops"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:26
+msgid "SCO^faults"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:27
+msgid "SCO^fckills"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:28
+msgid "SCO^goals"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:29
+msgid "SCO^kckills"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:30
+msgid "SCO^kdratio"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:31
+msgid "SCO^k/d"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:32
+msgid "SCO^kd"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:33
+msgid "SCO^kdr"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:34
+msgid "SCO^kills"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:35
+msgid "SCO^laps"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:36
+msgid "SCO^lives"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:37
+msgid "SCO^losses"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:38
+msgid "SCO^name"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:39
+msgid "SCO^sum"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:40
+msgid "SCO^nick"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:41
+msgid "SCO^objectives"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:42
+msgid "SCO^pickups"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:43
+msgid "SCO^ping"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:44
+msgid "SCO^pl"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:45
+msgid "SCO^pushes"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:46
+msgid "SCO^rank"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:47
+msgid "SCO^returns"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:48
+msgid "SCO^revivals"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:49
+msgid "SCO^score"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:50
+msgid "SCO^suicides"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:51
+msgid "SCO^takes"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:52
+msgid "SCO^ticks"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:251
+msgid ""
+"You can modify the scoreboard using the ^2scoreboard_columns_set command.\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:252
+msgid "^3|---------------------------------------------------------------|\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:253
+msgid "Usage:\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:254
+msgid "^2scoreboard_columns_set default\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:255
+msgid "^2scoreboard_columns_set ^7field1 field2 ...\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:256
+msgid "The following field names are recognized (case insensitive):\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:257
+msgid ""
+"You can use a ^3|^7 to start the right-aligned fields.\n"
+"\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:259
+msgid "^3name^7 or ^3nick^7             Name of a player\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:260
+msgid "^3ping^7                     Ping time\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:261
+msgid "^3pl^7                       Packet loss\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:262
+msgid "^3kills^7                    Number of kills\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:263
+msgid "^3deaths^7                   Number of deaths\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:264
+msgid "^3suicides^7                 Number of suicides\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:265
+msgid "^3frags^7                    kills - suicides\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:266
+msgid "^3kd^7                       The kill-death ratio\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:267
+msgid "^3sum^7                      frags - deaths\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:268
+msgid ""
+"^3caps^7                     How often a flag (CTF) or a key (KeyHunt) was "
+"captured\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:269
+msgid ""
+"^3pickups^7                  How often a flag (CTF) or a key (KeyHunt) or a "
+"ball (Keepaway) was picked up\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:270
+msgid "^3captime^7                  Time of fastest cap (CTF)\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:271
+msgid "^3fckills^7                  Number of flag carrier kills\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:272
+msgid "^3returns^7                  Number of flag returns\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:273
+msgid "^3drops^7                    Number of flag drops\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:274
+msgid "^3lives^7                    Number of lives (LMS)\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:275
+msgid "^3rank^7                     Player rank\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:276
+msgid "^3pushes^7                   Number of players pushed into void\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:277
+msgid ""
+"^3destroyed^7                Number of keys destroyed by pushing them into "
+"void\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:278
+msgid "^3kckills^7                  Number of keys carrier kills\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:279
+msgid "^3losses^7                   Number of times a key was lost\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:280
+msgid "^3laps^7                     Number of laps finished (race/cts)\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:281
+msgid "^3time^7                     Total time raced (race/cts)\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:282
+msgid "^3fastest^7                  Time of fastest lap (race/cts)\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:283
+msgid "^3ticks^7                    Number of ticks (DOM)\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:284
+msgid "^3takes^7                    Number of domination points taken (DOM)\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:285
+msgid "^3bckills^7                  Number of ball carrier kills\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:286
+msgid ""
+"^3bctime^7                   Total amount of time holding the ball in "
+"Keepaway\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:287
+msgid ""
+"^3score^7                    Total score\n"
+"\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:289
+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"
+"or in all but these game types. You can also specify 'all' as a\n"
+"field to show all fields available for the current game mode.\n"
+"\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:294
+msgid ""
+"The special game type names 'teams' and 'noteams' can be used to\n"
+"include/exclude ALL teams/noteams game modes.\n"
+"\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:297
+msgid "Example: scoreboard_columns_set name ping pl | +ctf/field3 -dm/field4\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:298
+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"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:300
+msgid ""
+"'field3' will only be shown in CTF, and 'field4' will be shown in all\n"
+"other gamemodes except DM.\n"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:534 qcsrc/client/scoreboard.qc:541
+#: 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:235
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:240
+msgid "N/A"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:984
+#, c-format
+msgid "Accuracy stats (average %d%%)"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:1047
+#, c-format
+msgid "%d%%"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:1105
+msgid "Map stats:"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:1121
+msgid "Secrets found:"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:1148
+msgid "Rankings"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:1244
+msgid "Scoreboard"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:1303
+#, c-format
+msgid "Speed award: %d ^7(%s^7)"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:1307
+#, c-format
+msgid "All-time fastest: %d ^7(%s^7)"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:1341
+msgid "Spectators"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:1348
+#, c-format
+msgid "playing on ^2%s^7"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:1355 qcsrc/client/scoreboard.qc:1360
+#, c-format
+msgid " for up to ^1%1.0f minutes^7"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:1364 qcsrc/client/scoreboard.qc:1383
+msgid " or"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:1367 qcsrc/client/scoreboard.qc:1374
+#, c-format
+msgid " until ^3%s %s^7"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:1368 qcsrc/client/scoreboard.qc:1375
+#: qcsrc/client/scoreboard.qc:1387 qcsrc/client/scoreboard.qc:1394
+msgid "SCO^points"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:1369 qcsrc/client/scoreboard.qc:1376
+#: qcsrc/client/scoreboard.qc:1388 qcsrc/client/scoreboard.qc:1395
+msgid "SCO^is beaten"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:1386 qcsrc/client/scoreboard.qc:1393
+#, c-format
+msgid " until a lead of ^3%s %s^7"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:1414
+#, c-format
+msgid "^1Respawning in ^3%s^1..."
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:1424
+#, c-format
+msgid "You are dead, wait ^3%s^7 before respawning"
+msgstr ""
+
+#: qcsrc/client/scoreboard.qc:1433
+#, c-format
+msgid "You are dead, press ^2%s^7 to respawn"
+msgstr ""
+
+#: qcsrc/client/target_music.qc:94 qcsrc/client/target_music.qc:183
+#, c-format
+msgid "Cannot initialize sound %s\n"
+msgstr ""
+
+#: qcsrc/client/tturrets.qc:299 qcsrc/client/waypointsprites.qc:591
+msgid "Spam"
+msgstr ""
+
+#: qcsrc/client/tturrets.qc:308
+#, c-format
+msgid "%s under attack!"
+msgstr ""
+
+#: qcsrc/client/vehicles/vehicles.qc:331 qcsrc/client/vehicles/vehicles.qc:333
+msgid "No right gunner!"
+msgstr ""
+
+#: qcsrc/client/vehicles/vehicles.qc:353 qcsrc/client/vehicles/vehicles.qc:355
+msgid "No left gunner!"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:254
+msgid "Push"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:255
+msgid "Destroy"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:256
+msgid "Defend"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:257
+msgid "Blue base"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:258
+msgid "DANGER"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:259
+msgid "Enemy carrier"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:260
+msgid "Flag carrier"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:261
+msgid "Dropped flag"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:262
+msgid "Help me!"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:263
+msgid "Here"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:264
+msgid "Dropped key"
+msgstr ""
+
+#: 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
+msgid "Key carrier"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:266
+msgid "Run here"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:271
+msgid "Red base"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:272
+msgid "Waypoint"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:273 qcsrc/client/waypointsprites.qc:274
+#: qcsrc/client/waypointsprites.qc:275
+msgid "Generator"
+msgstr ""
+
+#: 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
+msgid "Control point"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:284
+msgid "Checkpoint"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:285 qcsrc/client/waypointsprites.qc:287
+msgid "Finish"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:286 qcsrc/client/waypointsprites.qc:287
+msgid "Start"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:288 qcsrc/client/waypointsprites.qc:289
+msgid "Ball"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:290
+msgid "Ball carrier"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:291 qcsrc/server/w_laser.qc:11
+msgid "Laser"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:292 qcsrc/server/w_shotgun.qc:11
+msgid "Shotgun"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:293 qcsrc/server/w_uzi.qc:11
+msgid "Machine Gun"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:294 qcsrc/server/w_grenadelauncher.qc:11
+msgid "Mortar"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:295 qcsrc/server/w_electro.qc:11
+msgid "Electro"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:296 qcsrc/server/w_crylink.qc:11
+msgid "Crylink"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:297 qcsrc/server/w_nex.qc:11
+msgid "Nex"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:298 qcsrc/server/w_hagar.qc:11
+msgid "Hagar"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:299 qcsrc/server/w_rocketlauncher.qc:11
+msgid "Rocket Launcher"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:300 qcsrc/server/w_porto.qc:11
+msgid "Port-O-Launch"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:301
+msgid "Minstanex"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:302
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:88
+msgid "Hook"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:303 qcsrc/server/w_fireball.qc:11
+msgid "Fireball"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:304
+msgid "HLAC"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:305 qcsrc/server/w_rifle.qc:11
+msgid "Rifle"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:306 qcsrc/server/w_minelayer.qc:11
+msgid "Mine Layer"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:312
+msgid "Invisibility"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:313
+msgid "Extra life"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:314
+msgid "Speed"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:315
+msgid "Strength"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:316
+msgid "Shield"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:317
+msgid "Fuel regen"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:318
+msgid "Jet Pack"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:319
+msgid "Frozen!"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:320
+msgid "Tagged"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:321
+msgid "Vehicle"
+msgstr ""
+
+#: qcsrc/client/waypointsprites.qc:595
+#, c-format
+msgid "%s needing help!"
+msgstr ""
+
+#: qcsrc/common/command/generic.qc:31
+#, c-format
+msgid "error: status is %d\n"
+msgstr ""
+
+#: qcsrc/common/command/generic.qc:159
+msgid "error creating curl handle\n"
+msgstr ""
+
+#: qcsrc/common/command/generic.qc:263
+msgid "Notification dump command only works with cl_cmd and sv_cmd.\n"
+msgstr ""
+
+#: qcsrc/common/command/generic.qc:457
+msgid "Notification restart command only works with cl_cmd and sv_cmd.\n"
+msgstr ""
+
+#: qcsrc/common/counting.qh:5
+#, c-format
+msgid "CI_DEC^%s years"
+msgstr ""
+
+#: qcsrc/common/counting.qh:7
+#, c-format
+msgid "CI_ZER^%d years"
+msgstr ""
+
+#: qcsrc/common/counting.qh:8
+#, c-format
+msgid "CI_FIR^%d year"
+msgstr ""
+
+#: qcsrc/common/counting.qh:9
+#, c-format
+msgid "CI_SEC^%d years"
+msgstr ""
+
+#: qcsrc/common/counting.qh:10
+#, c-format
+msgid "CI_THI^%d years"
+msgstr ""
+
+#: qcsrc/common/counting.qh:11
+#, c-format
+msgid "CI_MUL^%d years"
+msgstr ""
+
+#: qcsrc/common/counting.qh:13
+#, c-format
+msgid "CI_DEC^%s weeks"
+msgstr ""
+
+#: qcsrc/common/counting.qh:15
+#, c-format
+msgid "CI_ZER^%d weeks"
+msgstr ""
+
+#: qcsrc/common/counting.qh:16
+#, c-format
+msgid "CI_FIR^%d week"
+msgstr ""
+
+#: qcsrc/common/counting.qh:17
+#, c-format
+msgid "CI_SEC^%d weeks"
+msgstr ""
+
+#: qcsrc/common/counting.qh:18
+#, c-format
+msgid "CI_THI^%d weeks"
+msgstr ""
+
+#: qcsrc/common/counting.qh:19
+#, c-format
+msgid "CI_MUL^%d weeks"
+msgstr ""
+
+#: qcsrc/common/counting.qh:21
+#, c-format
+msgid "CI_DEC^%s days"
+msgstr ""
+
+#: qcsrc/common/counting.qh:23
+#, c-format
+msgid "CI_ZER^%d days"
+msgstr ""
+
+#: qcsrc/common/counting.qh:24
+#, c-format
+msgid "CI_FIR^%d day"
+msgstr ""
+
+#: qcsrc/common/counting.qh:25
+#, c-format
+msgid "CI_SEC^%d days"
+msgstr ""
+
+#: qcsrc/common/counting.qh:26
+#, c-format
+msgid "CI_THI^%d days"
+msgstr ""
+
+#: qcsrc/common/counting.qh:27
+#, c-format
+msgid "CI_MUL^%d days"
+msgstr ""
+
+#: qcsrc/common/counting.qh:29
+#, c-format
+msgid "CI_DEC^%s hours"
+msgstr ""
+
+#: qcsrc/common/counting.qh:31
+#, c-format
+msgid "CI_ZER^%d hours"
+msgstr ""
+
+#: qcsrc/common/counting.qh:32
+#, c-format
+msgid "CI_FIR^%d hour"
+msgstr ""
+
+#: qcsrc/common/counting.qh:33
+#, c-format
+msgid "CI_SEC^%d hours"
+msgstr ""
+
+#: qcsrc/common/counting.qh:34
+#, c-format
+msgid "CI_THI^%d hours"
+msgstr ""
+
+#: qcsrc/common/counting.qh:35
+#, c-format
+msgid "CI_MUL^%d hours"
+msgstr ""
+
+#: qcsrc/common/counting.qh:38
+#, c-format
+msgid "CI_DEC^%s minutes"
+msgstr ""
+
+#: qcsrc/common/counting.qh:40
+#, c-format
+msgid "CI_ZER^%d minutes"
+msgstr ""
+
+#: qcsrc/common/counting.qh:41
+#, c-format
+msgid "CI_FIR^%d minute"
+msgstr ""
+
+#: qcsrc/common/counting.qh:42
+#, c-format
+msgid "CI_SEC^%d minutes"
+msgstr ""
+
+#: qcsrc/common/counting.qh:43
+#, c-format
+msgid "CI_THI^%d minutes"
+msgstr ""
+
+#: qcsrc/common/counting.qh:44
+#, c-format
+msgid "CI_MUL^%d minutes"
+msgstr ""
+
+#: qcsrc/common/counting.qh:46
+#, c-format
+msgid "CI_DEC^%s seconds"
+msgstr ""
+
+#: qcsrc/common/counting.qh:48
+#, c-format
+msgid "CI_ZER^%d seconds"
+msgstr ""
+
+#: qcsrc/common/counting.qh:49
+#, c-format
+msgid "CI_FIR^%d second"
+msgstr ""
+
+#: qcsrc/common/counting.qh:50
+#, c-format
+msgid "CI_SEC^%d seconds"
+msgstr ""
+
+#: qcsrc/common/counting.qh:51
+#, c-format
+msgid "CI_THI^%d seconds"
+msgstr ""
+
+#: qcsrc/common/counting.qh:52
+#, c-format
+msgid "CI_MUL^%d seconds"
+msgstr ""
+
+#: qcsrc/common/counting.qh:68
+#, c-format
+msgid "%dst"
+msgstr ""
+
+#: qcsrc/common/counting.qh:69
+#, c-format
+msgid "%dnd"
+msgstr ""
+
+#: qcsrc/common/counting.qh:70
+#, c-format
+msgid "%drd"
+msgstr ""
+
+#: qcsrc/common/counting.qh:71 qcsrc/common/counting.qh:74
+#, c-format
+msgid "%dth"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qc:712
+#, no-c-format
+msgid "@!#%'n Tuba Throwing"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qc:1109 qcsrc/menu/xonotic/skinlist.c:166
+#, c-format
+msgid "%s: %s"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:36
+msgid "Deathmatch"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:39
+msgid "Last Man Standing"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:42
+msgid "Arena"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:45
+msgid "Race"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:48
+msgid "Race CTS"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:51
+msgid "Team Deathmatch"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:54
+msgid "Capture the Flag"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:57
+msgid "Clan Arena"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:60
+msgid "Domination"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:63
+msgid "Key Hunt"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:66
+msgid "Assault"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:69
+msgid "Onslaught"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:72
+msgid "Nexball"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:75
+msgid "Freeze Tag"
+msgstr ""
+
+#: qcsrc/common/mapinfo.qh:78
+msgid "Keepaway"
+msgstr ""
+
+#: qcsrc/common/net_notice.qc:89
+msgid "^1Server notices:"
+msgstr ""
+
+#: qcsrc/common/net_notice.qc:95
+#, c-format
+msgid "^7%s (^3%d sec left)"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:342
+#, c-format
+msgid "^BG%s^BG captured the ^TC^TT^BG flag"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:343
+#, c-format
+msgid ""
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
+"%s^BG's previous record of ^F2%s^BG seconds"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:344
+#, c-format
+msgid "^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:345
+#, c-format
+msgid ""
+"^BG%s^BG captured the ^TC^TT^BG flag in ^F2%s^BG seconds, failing to break "
+"^BG%s^BG's previous record of ^F1%s^BG seconds"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:346
+msgid "^BGThe ^TC^TT^BG flag was returned to base by its owner"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:347
+msgid "^BGThe ^TC^TT^BG flag was destroyed and returned to base"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:348
+msgid "^BGThe ^TC^TT^BG flag was dropped in the base and returned itself"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:349
+msgid ""
+"^BGThe ^TC^TT^BG flag fell somewhere it couldn't be reached and returned to "
+"base"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:350
+#, c-format
+msgid ""
+"^BGThe ^TC^TT^BG flag became impatient after ^F1%.2f^BG seconds and returned "
+"itself"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:351
+msgid "^BGThe ^TC^TT^BG flag has returned to the base"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:352
+#, c-format
+msgid "^BG%s^BG lost the ^TC^TT^BG flag"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:353
+#, c-format
+msgid "^BG%s^BG got the ^TC^TT^BG flag"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:354
+#, c-format
+msgid "^BG%s^BG returned the ^TC^TT^BG flag"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:355
+#, c-format
+msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:356
+#, c-format
+msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:357
+#, c-format
+msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:358
+#, c-format
+msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:358
+#, c-format
+msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:359
+#, c-format
+msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:360
+#, c-format
+msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:361
+#, c-format
+msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:362
+#, c-format
+msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:363
+#, c-format
+msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:364
+#, c-format
+msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:364
+#, c-format
+msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:365
+#, c-format
+msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:366
+#, c-format
+msgid ""
+"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:367
+#, c-format
+msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:368
+#, c-format
+msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:369
+#, c-format
+msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:370
+#, c-format
+msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:371
+#, c-format
+msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:372
+#, c-format
+msgid ""
+"^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:373
+#, c-format
+msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:374
+#, c-format
+msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:375
+#, c-format
+msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:376
+#, c-format
+msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:377
+#, c-format
+msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:378
+#, c-format
+msgid "^BG%s%s^K1 was thrown into a world of hurt by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:379
+#, c-format
+msgid "^BG%s^K1 was moved into the %s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:380
+#, c-format
+msgid "^BG%s^K1 became enemies with the Lord of Teamplay%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:381
+#, c-format
+msgid "^BG%s^K1 thought they found a nice camping ground%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:382
+#, c-format
+msgid "^BG%s^K1 unfairly eliminated themself%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:383
+#, c-format
+msgid "^BG%s^K1 %s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:384
+#, c-format
+msgid "^BG%s^K1 couldn't catch their breath%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:384
+#, c-format
+msgid "^BG%s^K1 was in the water for too long%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:385
+#, c-format
+msgid "^BG%s^K1 hit the ground with a bit too much force%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:385
+#, c-format
+msgid "^BG%s^K1 hit the ground with a crunch%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:386
+#, c-format
+msgid "^BG%s^K1 became a bit too crispy%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:386
+#, c-format
+msgid "^BG%s^K1 felt a little hot%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:387
+#, c-format
+msgid "^BG%s^K1 died%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:388
+#, c-format
+msgid "^BG%s^K1 found a hot place%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:388
+#, c-format
+msgid "^BG%s^K1 turned into hot slag%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:389
+#, c-format
+msgid "^BG%s^K1 mastered the art of self-nading%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:390
+#, c-format
+msgid "^BG%s^K1 died%s%s. What's the point of living without ammo?"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:390
+#, c-format
+msgid "^BG%s^K1 ran out of ammo%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:391
+#, c-format
+msgid "^BG%s^K1 rotted away%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:392
+#, c-format
+msgid "^BG%s^K1 became a shooting star%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:393
+#, c-format
+msgid "^BG%s^K1 was slimed%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:394
+#, c-format
+msgid "^BG%s^K1 couldn't take it anymore%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:395
+#, c-format
+msgid "^BG%s^K1 is now preserved for centuries to come%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:396
+#, c-format
+msgid "^BG%s^K1 switched to the %s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:397
+#, c-format
+msgid "^BG%s^K1 died in an accident%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:398
+#, c-format
+msgid "^BG%s^K1 ran into a turret%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:399
+#, c-format
+msgid "^BG%s^K1 was blasted away by an eWheel turret%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:400
+#, c-format
+msgid "^BG%s^K1 got caught up in the FLAC turret fire%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:401
+#, c-format
+msgid "^BG%s^K1 was blasted away by a Hellion turret%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:402
+#, c-format
+msgid "^BG%s^K1 could not hide from the Hunter turret%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:403
+#, c-format
+msgid "^BG%s^K1 was riddled full of holes by a Machinegun turret%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:404
+#, c-format
+msgid "^BG%s^K1 got turned into smoldering gibs by an MLRS turret%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:405
+#, c-format
+msgid "^BG%s^K1 was phased out by a turret%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:406
+#, c-format
+msgid "^BG%s^K1 got served some superheated plasma from a turret%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:407
+#, c-format
+msgid "^BG%s^K1 was electrocuted by a Tesla turret%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:408
+#, c-format
+msgid "^BG%s^K1 got served a lead enrichment by a Walker turret%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:409
+#, c-format
+msgid "^BG%s^K1 was impaled by a Walker turret%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:410
+#, c-format
+msgid "^BG%s^K1 was blasted away by a Walker turret%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:411
+#, c-format
+msgid "^BG%s^K1 got caught in the blast of a Bumblebee explosion%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:412
+#, c-format
+msgid "^BG%s^K1 was crushed by a vehicle%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:413
+#, c-format
+msgid "^BG%s^K1 was caught in a Raptor cluster bomb%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:414
+#, c-format
+msgid "^BG%s^K1 got caught in the blast of a Raptor explosion%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:415
+#, c-format
+msgid "^BG%s^K1 got caught in the blast of a Spiderbot explosion%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:416
+#, c-format
+msgid "^BG%s^K1 was blasted to bits by a Spiderbot rocket%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:417
+#, c-format
+msgid "^BG%s^K1 got caught in the blast of a Racer explosion%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:418
+#, c-format
+msgid "^BG%s^K1 couldn't find shelter from a Racer rocket%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:419
+#, c-format
+msgid "^BG%s^K1 was in the wrong place%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:420
+#, c-format
+msgid "^BG%s^K1 was betrayed by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:421
+#, c-format
+msgid "^BG%s^K1 was frozen by ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:422
+#, c-format
+msgid "^BG%s^K3 was revived by ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:423
+#, c-format
+msgid "^BG%s^K3 was revived by falling"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:424
+#, c-format
+msgid "^BG%s^K3 was automatically revived after %s second(s)"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:425 qcsrc/common/notifications.qh:612
+msgid "^TC^TT^BG team wins the round"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:426 qcsrc/common/notifications.qh:613
+#, c-format
+msgid "^BG%s^BG wins the round"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:427 qcsrc/common/notifications.qh:542
+msgid "^BGRound tied"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:428 qcsrc/common/notifications.qh:543
+msgid "^BGRound over, there's no winner"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:429
+#, c-format
+msgid "^BG%s^K1 froze themself"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:430
+#, c-format
+msgid "^BGGodmode saved you %s units of damage, cheater!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:431 qcsrc/common/notifications.qh:616
+#, c-format
+msgid "^BGYou do not have the ^F1%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:432 qcsrc/common/notifications.qh:617
+#, c-format
+msgid "^BGYou dropped the ^F1%s^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:433 qcsrc/common/notifications.qh:618
+#, c-format
+msgid "^BGYou got the ^F1%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:434 qcsrc/common/notifications.qh:619
+#, c-format
+msgid "^BGYou don't have enough ammo for the ^F1%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:435 qcsrc/common/notifications.qh:620
+#, c-format
+msgid "^F1%s %s^BG is unable to fire, but its ^F1%s^BG can"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:436 qcsrc/common/notifications.qh:621
+#, c-format
+msgid "^F1%s^BG is ^F4not available^BG on this map"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:437
+#, c-format
+msgid "^BG%s^F3 connected%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:438
+#, c-format
+msgid "^BG%s^F3 connected and joined the ^TC^TT team"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:439
+#, c-format
+msgid "^BG%s^F3 is now playing"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:440 qcsrc/common/notifications.qh:624
+#, c-format
+msgid "^BG%s^BG has dropped the ball!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:441 qcsrc/common/notifications.qh:625
+#, c-format
+msgid "^BG%s^BG has picked up the ball!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:442
+#, c-format
+msgid "^BG%s^BG captured the keys for the ^TC^TT team"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:443
+#, c-format
+msgid "^BG%s^BG dropped the ^TC^TT Key"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:444
+#, c-format
+msgid "^BG%s^BG lost the ^TC^TT Key"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:445
+#, c-format
+msgid "^BG%s^BG picked up the ^TC^TT Key"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:446
+#, c-format
+msgid "^BG%s^F3 forfeited"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:447
+#, c-format
+msgid "^BG%s^F3 has no more lives left"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:448
+#, c-format
+msgid "^BG%s^K1 picked up Invisibility"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:449
+#, c-format
+msgid "^BG%s^K1 picked up Shield"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:450
+#, c-format
+msgid "^BG%s^K1 picked up Speed"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:451
+#, c-format
+msgid "^BG%s^K1 picked up Strength"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:452
+#, c-format
+msgid "^BG%s^F3 disconnected"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:453
+#, c-format
+msgid "^BG%s^F3 was kicked for idling"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:454
+msgid ""
+"^F2You were kicked from the server because you are a spectator and "
+"spectators aren't allowed at the moment."
+msgstr ""
+
+#: qcsrc/common/notifications.qh:455
+#, c-format
+msgid "^BG%s^F3 is now spectating"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:456
+#, c-format
+msgid "^BG%s^BG has abandoned the race"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:457
+#, c-format
+msgid "^BG%s^BG couldn't break their %s%s^BG place record of %s%s %s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:458
+#, c-format
+msgid "^BG%s^BG couldn't break the %s%s^BG place record of %s%s %s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:459
+#, c-format
+msgid "^BG%s^BG has finished the race"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:460
+#, c-format
+msgid "^BG%s^BG broke %s^BG's %s%s^BG place record with %s%s %s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:461
+#, c-format
+msgid "^BG%s^BG improved their %s%s^BG place record with %s%s %s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:462
+#, c-format
+msgid ""
+"^BG%s^BG scored a new record with ^F2%s^BG, but unfortunately lacks a UID "
+"and will be lost."
+msgstr ""
+
+#: qcsrc/common/notifications.qh:463
+#, c-format
+msgid "^BG%s^BG set the %s%s^BG place record with %s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:464
+msgid "^TC^TT ^BGteam scores!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:465
+#, 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 ""
+
+#: qcsrc/common/notifications.qh:466
+#, c-format
+msgid "^BG%s^K1 picked up a Superweapon"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:467
+#, c-format
+msgid ""
+"^F4NOTE: ^BGThe server is running ^F1Xonotic %s (beta)^BG, you have "
+"^F2Xonotic %s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:468
+#, c-format
+msgid ""
+"^F4NOTE: ^BGThe server is running ^F1Xonotic %s^BG, you have ^F2Xonotic %s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:469
+#, c-format
+msgid ""
+"^F4NOTE: ^F1Xonotic %s^BG is out, and you still have ^F2Xonotic %s^BG - get "
+"the update from ^F3http://www.xonotic.org/^BG!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:470
+#, c-format
+msgid "^F3SVQC Build information: ^F4%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:471
+#, c-format
+msgid ""
+"^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Accordeon%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:472
+#, c-format
+msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Accordeon%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:473
+#, c-format
+msgid "^BG%s%s^K1 felt the strong pull of ^BG%s^K1's Crylink%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:474
+#, c-format
+msgid "^BG%s^K1 felt the strong pull of their Crylink%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:475
+#, c-format
+msgid "^BG%s%s^K1 was blasted by ^BG%s^K1's Electro bolt%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:476
+#, c-format
+msgid "^BG%s%s^K1 felt the electrifying air of ^BG%s^K1's Electro combo%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:477
+#, c-format
+msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Electro plasma%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:478
+#, c-format
+msgid "^BG%s^K1 played with Electro plasma%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:479
+#, c-format
+msgid "^BG%s^K1 could not remember where they put their Electro plasma%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:480
+#, c-format
+msgid "^BG%s%s^K1 got too close to ^BG%s^K1's fireball%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:481
+#, c-format
+msgid "^BG%s%s^K1 got burnt by ^BG%s^K1's firemine%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:482
+#, c-format
+msgid "^BG%s^K1 should have used a smaller gun%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:483
+#, c-format
+msgid "^BG%s^K1 forgot about their firemine%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:484
+#, c-format
+msgid "^BG%s%s^K1 was pummeled by a burst of ^BG%s^K1's Hagar rockets%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:485
+#, c-format
+msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Hagar rockets%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:486
+#, c-format
+msgid "^BG%s^K1 played with tiny Hagar rockets%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:487
+#, c-format
+msgid "^BG%s%s^K1 was cut down with ^BG%s^K1's HLAC%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:488
+#, c-format
+msgid "^BG%s^K1 got a little jumpy with their HLAC%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:489
+#, c-format
+msgid "^BG%s%s^K1 was caught in ^BG%s^K1's Hook gravity bomb%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:490
+#, c-format
+msgid ""
+"^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Klein Bottle%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:491
+#, c-format
+msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Klein Bottle%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:492
+#, c-format
+msgid "^BG%s%s^K1 was shot to death by ^BG%s^K1's Laser%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:493
+#, c-format
+msgid "^BG%s^K1 shot themself to hell with their Laser%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:494
+#, c-format
+msgid "^BG%s%s^K1 got too close to ^BG%s^K1's mine%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:495
+#, c-format
+msgid "^BG%s^K1 forgot about their mine%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:496
+#, c-format
+msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Minstanex%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:497
+#, c-format
+msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Mortar grenade%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:498
+#, c-format
+msgid "^BG%s%s^K1 ate ^BG%s^K1's Mortar grenade%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:499
+#, c-format
+msgid "^BG%s^K1 didn't see their own Mortar grenade%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:500
+#, c-format
+msgid "^BG%s^K1 blew themself up with their own Mortar%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:501
+#, c-format
+msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Nex%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:502
+#, c-format
+msgid "^BG%s%s^K1 was sniped with a Rifle by ^BG%s^K1%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:503
+#, c-format
+msgid "^BG%s%s^K1 died in ^BG%s^K1's Rifle bullet hail%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:504
+#, c-format
+msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle bullet hail%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:505
+#, c-format
+msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:506
+#, c-format
+msgid "^BG%s%s^K1 ate ^BG%s^K1's rocket%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:507
+#, c-format
+msgid "^BG%s%s^K1 got too close ^BG%s^K1's rocket%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:508
+#, c-format
+msgid "^BG%s^K1 blew themself up with their Rocketlauncher%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:509
+#, c-format
+msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Seeker rockets%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:510
+#, c-format
+msgid "^BG%s%s^K1 was tagged by ^BG%s^K1's Seeker%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:511
+#, c-format
+msgid "^BG%s^K1 played with tiny Seeker rockets%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:512
+#, c-format
+msgid "^BG%s%s^K1 was gunned down by ^BG%s^K1's Shotgun%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:513
+#, c-format
+msgid "^BG%s%s^K1 slapped ^BG%s^K1 around a bit with a large Shotgun%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:514
+#, c-format
+msgid "^BG%s^K1 is now thinking with portals%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:515
+#, c-format
+msgid "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Tuba%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:516
+#, c-format
+msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Tuba%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:517
+#, c-format
+msgid "^BG%s%s^K1 was sniped by ^BG%s^K1's Machine Gun%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:518
+#, c-format
+msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:536
+msgid "^BGYou are attacking!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:537
+msgid "^BGYou are defending!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:538
+msgid "^F4Begin!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:539
+msgid "^F4Game starts in ^COUNT"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:540
+msgid "^F4Round starts in ^COUNT"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:541
+msgid "^F4Round cannot start"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:544
+msgid "^F2Don't camp!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:545
+msgid ""
+"^BGYou are now free.\n"
+"^BGFeel free to ^F2try to capture^BG the flag again\n"
+"^BGif you think you will succeed."
+msgstr ""
+
+#: qcsrc/common/notifications.qh:546
+msgid ""
+"^BGYou are now ^F1shielded^BG from the flag\n"
+"^BGfor ^F2too many unsuccessful attempts^BG to capture.\n"
+"^BGMake some defensive scores before trying again."
+msgstr ""
+
+#: qcsrc/common/notifications.qh:547
+msgid "^BGYou captured the ^TC^TT^BG flag!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:548
+#, c-format
+msgid "^BGToo many flag throws! Throwing disabled for %s."
+msgstr ""
+
+#: qcsrc/common/notifications.qh:549
+#, c-format
+msgid "^BG%s^BG passed the ^TC^TT^BG flag to %s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:550
+#, c-format
+msgid "^BGYou received the ^TC^TT^BG flag from %s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:551
+#, c-format
+msgid "^BG%s^BG requests you to pass the flag%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:552
+#, c-format
+msgid "^BGRequesting %s^BG to pass you the flag"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:553
+#, c-format
+msgid "^BGYou passed the ^TC^TT^BG flag to %s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:554
+msgid "^BGYou got the ^TC^TT^BG flag!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:555
+#, c-format
+msgid "^BGThe %senemy^BG got your flag! Retrieve it!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:556
+#, c-format
+msgid "^BGThe %senemy (^BG%s%s)^BG got your flag! Retrieve it!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:557
+#, c-format
+msgid "^BGYour %steam mate^BG got the flag! Protect them!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:558
+#, c-format
+msgid "^BGYour %steam mate (^BG%s%s)^BG got the flag! Protect them!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:559
+msgid "^BGYou returned the ^TC^TT^BG flag!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:560
+msgid "^BGStalemate! Enemies can now see you on radar!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:561
+msgid "^BGStalemate! Flag carriers can now be seen by enemies on radar!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:562
+#, c-format
+msgid "^K3%sYou fragged ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:562
+#, c-format
+msgid "^K3%sYou scored against ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:563
+#, c-format
+msgid "^K1%sYou were fragged by ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:563
+#, c-format
+msgid "^K1%sYou were scored against by ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:564
+#, c-format
+msgid "^K1%sYou were fragged by ^BG%s^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:564
+#, c-format
+msgid "^K1%sYou were scored against by ^BG%s^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:565
+#, c-format
+msgid "^K3%sYou fragged ^BG%s^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:565
+#, c-format
+msgid "^K3%sYou scored against ^BG%s^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:566
+#, c-format
+msgid "^K1%sYou scored against ^BG%s^K1 while they were typing"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:566
+#, c-format
+msgid "^K1%sYou typefragged ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:567
+#, c-format
+msgid "^K1%sYou were scored against by ^BG%s^K1 while typing!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:567
+#, c-format
+msgid "^K1%sYou were typefragged by ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:568
+#, c-format
+msgid "^K1%sYou were scored against by ^BG%s^K1 while typing^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:568
+#, c-format
+msgid "^K1%sYou were typefragged by ^BG%s^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:569
+#, c-format
+msgid "^K1%sYou scored against ^BG%s^K1 while they were typing^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:569
+#, c-format
+msgid "^K1%sYou typefragged ^BG%s^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:570
+msgid "^BGPress ^F2DROPWEAPON^BG again to toss the nade!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:571
+#, c-format
+msgid ""
+"^BGYou have been moved into a different team\n"
+"You are now on: %s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:572
+msgid "^K1Don't go against your team mates!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:572
+msgid "^K1Don't shoot your team mates!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:573
+msgid "^K1Die camper!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:573
+msgid "^K1Reconsider your tactics, camper!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:574
+msgid "^K1You unfairly eliminated yourself!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:575
+#, c-format
+msgid "^K1You were %s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:576
+msgid "^K1You couldn't catch your breath!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:577
+msgid "^K1You hit the ground with a crunch!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:578
+msgid "^K1You felt a little too hot!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:578
+msgid "^K1You got a little bit too crispy!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:579
+msgid "^K1You killed your own dumb self!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:579
+msgid "^K1You need to be more careful!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:580
+msgid "^K1You couldn't stand the heat!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:581
+msgid "^K1Tastes like chicken!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:581
+msgid "^K1You forgot to put the pin back in!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:582
+msgid "^K1You are respawning for running out of ammo..."
+msgstr ""
+
+#: qcsrc/common/notifications.qh:582
+msgid "^K1You were killed for running out of ammo..."
+msgstr ""
+
+#: qcsrc/common/notifications.qh:583
+msgid "^K1You grew too old without taking your medicine"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:583
+msgid "^K1You need to preserve your health"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:584
+msgid "^K1You became a shooting star!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:585
+msgid "^K1You melted away in slime!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:586
+msgid "^K1You committed suicide!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:586
+msgid "^K1You ended it all!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:587
+msgid "^K1You got stuck in a swamp!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:588
+#, c-format
+msgid "^BGYou are now on: %s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:589
+msgid "^K1You died in an accident!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:590
+msgid "^K1You had an unfortunate run in with a turret!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:590
+msgid "^K1You were fragged by a turret!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:591
+msgid "^K1You had an unfortunate run in with an eWheel turret!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:591
+msgid "^K1You were fragged by an eWheel turret!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:592
+msgid "^K1You had an unfortunate run in with a Walker turret!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:592
+msgid "^K1You were fragged by a Walker turret!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:593
+msgid "^K1You got caught in the blast of a Bumblebee explosion!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:594
+msgid "^K1You were crushed by a vehicle!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:595
+msgid "^K1You were caught in a Raptor cluster bomb!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:596
+msgid "^K1You got caught in the blast of a Raptor explosion!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:597
+msgid "^K1You got caught in the blast of a Spiderbot explosion!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:598
+msgid "^K1You were blasted to bits by a Spiderbot rocket!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:599
+msgid "^K1You got caught in the blast of a Racer explosion!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:600
+msgid "^K1You couldn't find shelter from a Racer rocket!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:601
+msgid "^K1Watch your step!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:602
+#, c-format
+msgid "^K1Moron! You fragged ^BG%s^K1, a team mate!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:602
+#, c-format
+msgid "^K1Moron! You went against ^BG%s^K1, a team mate!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:603
+#, c-format
+msgid "^K1You were fragged by ^BG%s^K1, a team mate"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:603
+#, c-format
+msgid "^K1You were scored against by ^BG%s^K1, a team mate"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:604
+msgid ""
+"^K1Stop idling!\n"
+"^BGDisconnecting in ^COUNT..."
+msgstr ""
+
+#: qcsrc/common/notifications.qh:605
+msgid "^F2You picked up some extra lives"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:606
+#, c-format
+msgid "^K3You froze ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:607
+#, c-format
+msgid "^K1You were frozen by ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:608
+#, c-format
+msgid "^K3You revived ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:609
+msgid "^K3You revived yourself"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:610
+#, c-format
+msgid "^K3You were revived by ^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:611
+#, c-format
+msgid "^K3You were automatically revived after %s second(s)"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:614
+msgid "^K1You froze yourself"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:615
+msgid "^K1Round already started, you spawn as frozen"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:622
+msgid ""
+"^K1No spawnpoints available!\n"
+"Hope your team can fix it..."
+msgstr ""
+
+#: qcsrc/common/notifications.qh:623
+msgid ""
+"^K1You may not join the game at this time.\n"
+"The player limit reached maximum capacity."
+msgstr ""
+
+#: qcsrc/common/notifications.qh:626
+msgid "^BGKilling people while you don't have the ball gives no points!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:627
+msgid ""
+"^BGAll keys are in your team's hands!\n"
+"Help the key carriers to meet!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:628
+msgid ""
+"^BGAll keys are in ^TC^TT team^BG's hands!\n"
+"Interfere ^F4NOW^BG!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:629
+msgid ""
+"^BGAll keys are in your team's hands!\n"
+"Meet the other key carriers ^F4NOW^BG!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:630
+msgid "^F4Round will start in ^COUNT"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:631
+msgid "^BGScanning frequency range..."
+msgstr ""
+
+#: qcsrc/common/notifications.qh:632
+msgid "^BGYou are starting with the ^TC^TT Key"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:633 qcsrc/common/notifications.qh:634
+#, c-format
+msgid ""
+"^BGWaiting for players to join...\n"
+"Need active players for: %s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:635
+#, c-format
+msgid "^BGWaiting for %s player(s) to join..."
+msgstr ""
+
+#: qcsrc/common/notifications.qh:636
+msgid "^F4^COUNT^BG left to find some ammo!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:637
+msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:637
+msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:638
+#, c-format
+msgid "^F2Extra lives remaining: ^K1%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:639
+msgid "^BGSecondary fire inflicts no damage!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:640
+#, c-format
+msgid "^BG%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:641
+#, c-format
+msgid ""
+"^F2^COUNT^BG until weapon change...\n"
+"Next weapon: ^F1%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:642
+#, c-format
+msgid "^F2Active weapon: ^F1%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:643
+msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:644
+msgid ""
+"^F2Now playing ^F4OVERTIME^F2!\n"
+"Keep fragging until we have a winner!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:644
+msgid ""
+"^F2Now playing ^F4OVERTIME^F2!\n"
+"Keep scoring until we have a winner!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:645
+#, c-format
+msgid ""
+"^F2Now playing ^F4OVERTIME^F2!\n"
+"^BGAdded ^F4%s^BG to the game!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:646
+msgid "^F2Invisibility has worn off"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:647
+msgid "^F2Shield has worn off"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:648
+msgid "^F2Speed has worn off"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:649
+msgid "^F2Strength has worn off"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:650
+msgid "^F2You are invisible"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:651
+msgid "^F2Shield surrounds you"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:652
+msgid "^F2You are on speed"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:653
+msgid "^F2Strength infuses your weapons with devastating power"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:654
+msgid "^F2The race is over, finish your lap!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:655
+msgid "^F2Superweapons have broken down"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:656
+msgid "^F2Superweapons have been lost"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:657
+msgid "^F2You now have a superweapon"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:658
+msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:659
+msgid "^K1Changing team in ^COUNT"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:660
+msgid "^K1Spectating in ^COUNT"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:661
+msgid "^K1Suicide in ^COUNT"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:662
+msgid "^F4Timeout begins in ^COUNT"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:663
+msgid "^F4Timeout ends in ^COUNT"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:937 qcsrc/common/notifications.qh:938
+#, c-format
+msgid " (near %s)"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:945 qcsrc/common/notifications.qh:946
+msgid "primary"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:945 qcsrc/common/notifications.qh:946
+msgid "secondary"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:956
+#, c-format
+msgid " ^F1(Press %s)"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:965
+#, c-format
+msgid " with %s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:974
+#, c-format
+msgid "%s^K1 made a TRIPLE FRAG! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:974
+#, c-format
+msgid "%s^K1 made a TRIPLE SCORE! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:974
+msgid "TRIPLE FRAG! "
+msgstr ""
+
+#: qcsrc/common/notifications.qh:975
+#, c-format
+msgid "%s^K1 made FIVE SCORES IN A ROW! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:975
+#, c-format
+msgid "%s^K1 unlocked RAGE! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:975
+msgid "RAGE! "
+msgstr ""
+
+#: qcsrc/common/notifications.qh:976
+#, c-format
+msgid "%s^K1 made TEN SCORES IN A ROW! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:976
+#, c-format
+msgid "%s^K1 started a MASSACRE! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:976
+msgid "MASSACRE! "
+msgstr ""
+
+#: qcsrc/common/notifications.qh:977
+#, c-format
+msgid "%s^K1 executed MAYHEM! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:977
+#, c-format
+msgid "%s^K1 made FIFTEEN SCORES IN A ROW! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:977
+msgid "MAYHEM! "
+msgstr ""
+
+#: qcsrc/common/notifications.qh:978
+#, c-format
+msgid "%s^K1 is a BERSERKER! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:978
+#, c-format
+msgid "%s^K1 made TWENTY SCORES IN A ROW! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:978
+msgid "BERSERKER! "
+msgstr ""
+
+#: qcsrc/common/notifications.qh:979
+#, c-format
+msgid "%s^K1 inflicts CARNAGE! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:979
+#, c-format
+msgid "%s^K1 made TWENTY FIVE SCORES IN A ROW! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:979
+msgid "CARNAGE! "
+msgstr ""
+
+#: qcsrc/common/notifications.qh:980
+#, c-format
+msgid "%s^K1 made THIRTY SCORES IN A ROW! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:980
+#, c-format
+msgid "%s^K1 unleashes ARMAGEDDON! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:980
+msgid "ARMAGEDDON! "
+msgstr ""
+
+#: qcsrc/common/notifications.qh:986
+#, c-format
+msgid "%s(^F1Bot^BG)"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:988
+#, c-format
+msgid "%s(Ping ^F1%d^BG)"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:994
+#, c-format
+msgid ""
+"\n"
+"(Health ^1%d^BG / Armor ^2%d^BG)%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:996
+#, c-format
+msgid ""
+"\n"
+"(^F4Dead^BG)%s"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:1033 qcsrc/common/notifications.qh:1046
+#, c-format
+msgid "%d score spree! "
+msgstr ""
+
+#: qcsrc/common/notifications.qh:1045
+#, c-format
+msgid "%d frag spree! "
+msgstr ""
+
+#: qcsrc/common/notifications.qh:1058
+msgid "First blood! "
+msgstr ""
+
+#: qcsrc/common/notifications.qh:1058
+msgid "First score! "
+msgstr ""
+
+#: qcsrc/common/notifications.qh:1062
+msgid "First casualty! "
+msgstr ""
+
+#: qcsrc/common/notifications.qh:1062
+msgid "First victim! "
+msgstr ""
+
+#: qcsrc/common/notifications.qh:1103
+#, c-format
+msgid "%s^K1 has %d frags in a row! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:1104
+#, c-format
+msgid "%s^K1 made %d scores in a row! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:1122
+#, c-format
+msgid "%s^K1 drew first blood! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:1123
+#, c-format
+msgid "%s^K1 got the first score! %s^BG"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:1139
+#, c-format
+msgid ", ending their %d frag spree"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:1140
+#, c-format
+msgid ", ending their %d score spree"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:1154
+#, c-format
+msgid ", losing their %d frag spree"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:1155
+#, c-format
+msgid ", losing their %d score spree"
+msgstr ""
+
+#: qcsrc/common/teams.qh:26
+msgid "Red"
+msgstr ""
+
+#: qcsrc/common/teams.qh:27
+msgid "Blue"
+msgstr ""
+
+#: qcsrc/common/teams.qh:28
+msgid "Yellow"
+msgstr ""
+
+#: qcsrc/common/teams.qh:29
+msgid "Pink"
+msgstr ""
+
+#: qcsrc/common/teams.qh:30
+msgid "Team"
+msgstr ""
+
+#: qcsrc/common/teams.qh:31
+msgid "Neutral"
+msgstr ""
+
+#: qcsrc/menu/command/menu_cmd.qc:35
+msgid "Usage: menu_cmd command..., where possible commands are:\n"
+msgstr ""
+
+#: qcsrc/menu/command/menu_cmd.qc:36
+msgid "  sync - reloads all cvars on the current menu page\n"
+msgstr ""
+
+#: qcsrc/menu/command/menu_cmd.qc:37
+msgid "  directmenu ITEM - select a menu item as main item\n"
+msgstr ""
+
+#: qcsrc/menu/command/menu_cmd.qc:62
+msgid "Available options:\n"
+msgstr ""
+
+#: qcsrc/menu/command/menu_cmd.qc:113
+msgid "Invalid command. For a list of supported commands, try menu_cmd help.\n"
+msgstr ""
+
+#: qcsrc/menu/item/label.c:82
+#, c-format
+msgid "NOTE: label text %s too wide for label, condensed by factor %f\n"
+msgstr ""
+
+#: qcsrc/menu/item/listbox.c:302
+#, c-format
+msgid "Item %d"
+msgstr ""
+
+#: qcsrc/menu/item/slider.c:64
+#, c-format
+msgid "%d (%s)"
+msgstr ""
+
+#: qcsrc/menu/item/textslider.c:31 qcsrc/menu/item/textslider.c:33
+msgid "custom"
+msgstr ""
+
+#: qcsrc/menu/menu.qc:59
+#, c-format
+msgid "^4MQC Build information: ^1%s\n"
+msgstr ""
+
+#: qcsrc/menu/xonotic/campaign.c:286
+#: qcsrc/menu/xonotic/dialog_singleplayer.c:123
+msgid "???"
+msgstr ""
+
+#: qcsrc/menu/xonotic/campaign.c:287
+#, c-format
+msgid "Level %d: %s"
+msgstr ""
+
+#: qcsrc/menu/xonotic/cvarlist.c:85
+msgid "will be saved to config.cfg"
+msgstr ""
+
+#: qcsrc/menu/xonotic/cvarlist.c:87
+msgid "will not be saved"
+msgstr ""
+
+#: qcsrc/menu/xonotic/cvarlist.c:89
+msgid "private"
+msgstr ""
+
+#: qcsrc/menu/xonotic/cvarlist.c:91
+msgid "engine setting"
+msgstr ""
+
+#: qcsrc/menu/xonotic/cvarlist.c:93
+msgid "read only"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_credits.c:5
+msgid "Credits"
+msgstr ""
+
+#: 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_sandboxtools.c:90
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:77
+#: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:21
+msgid "OK"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_firstrun.c:4
+msgid "Welcome"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_firstrun.c:40
+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 "
+"menu system."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_firstrun.c:46
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:37
+#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:39
+msgid "Name:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_firstrun.c:68
+#: qcsrc/menu/xonotic/dialog_settings_user.c:65
+msgid "Text language:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_firstrun.c:77
+msgid "Allow player statistics to use your nickname at stats.xonotic.org?"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_firstrun.c:81
+msgid "ALWU2N^Yes"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_firstrun.c:82
+msgid "ALWU2N^No"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_firstrun.c:83
+msgid "ALWU2N^Undecided"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_firstrun.c:87
+msgid "Save settings"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:4
+msgid "Ammo Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:23
+msgid "Ammunition display:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:26
+msgid "Show only current ammo type"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
+msgid "Align icon:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:41
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:41
+msgid "Left"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:42
+msgid "Right"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:4
+msgid "Centerprint"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:24
+msgid "Message duration:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:28
+msgid "Fade time:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:32
+msgid "Flip messages order"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:34
+msgid "Text alignment:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:38
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:51
+msgid "Center"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:42
+msgid "Font scale:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:4
+msgid "Chat Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:23
+msgid "Chat entries:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:26
+msgid "Chat size:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:30
+msgid "Chat lifetime:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:34
+msgid "Chat beep sound"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:4
+msgid "Engine Info Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:23
+msgid "Engine info:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:26
+msgid "Use an averaging algorithm for fps"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:4
+msgid "Health/Armor Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:23
+msgid "Enable status bar"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:25
+msgid "Status bar alignment:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:43
+msgid "Inward"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:44
+msgid "Outward"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:38
+msgid "Icon alignment:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:46
+msgid "Flip health and armor positions"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:4
+msgid "Info Messages Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:23
+msgid "Info messages:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:26
+msgid "Flip align"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.c:4
+msgid "Mod Icons Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:4
+msgid "Notification Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:23
+msgid "Notifications:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:26
+msgid "Also print notifications to the console"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:29
+msgid "Flip notify order"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:32
+msgid "Entry lifetime:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:36
+msgid "Entry fadetime:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:4
+msgid "Physics Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:22
+msgid "Panel disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
+msgid "Panel enabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
+msgid "Panel enabled even observing"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:26
+msgid "Panel enabled only in Race/CTS"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:32
+msgid "Status bar"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:49
+msgid "Left align"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:53
+msgid "Right align"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
+msgid "Inward align"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:37
+msgid "Outward align"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:41
+msgid "Flip speed/acceleration positions"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:29
+msgid "Speed:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:46
+msgid "Include vertical speed"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:57
+msgid "Speed unit:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
+msgid "qu/s"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
+msgid "m/s"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
+msgid "km/h"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
+msgid "mph"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:63
+msgid "knots"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:65
+msgid "Show"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:68
+msgid "Top speed"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
+msgid "Acceleration:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:75
+msgid "Include vertical acceleration"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:4
+msgid "Powerups Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:46
+msgid "Flip strength and shield positions"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:4
+msgid "Pressed Keys Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
+msgid "Panel enabled when spectating"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:24
+msgid "Panel always enabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:31
+msgid "Forced aspect:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_racetimer.c:4
+msgid "Race Timer Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:4
+msgid "Radar Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
+msgid "Panel enabled in teamgames"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:30
+msgid "Radar:"
+msgstr ""
+
+#: 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
+msgid "Alpha:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:37
+msgid "Rotation:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:39
+msgid "Forward"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:40
+msgid "West"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:41
+msgid "South"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:42
+msgid "East"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:43
+msgid "North"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:47
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:63
+msgid "Scale:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:51
+msgid "Zoom mode:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:53
+msgid "Zoomed in"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:54
+msgid "Zoomed out"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:55
+msgid "Always zoomed"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:56
+msgid "Never zoomed"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:4
+msgid "Score Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:23
+msgid "Score:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
+msgid "Rankings:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
+msgid "Off"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
+msgid "And me"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:29
+msgid "Pure"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:4
+msgid "Timer Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:23
+msgid "Timer:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:26
+msgid "Show elapsed time"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:4
+msgid "Vote Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:23
+msgid "Alpha after voting:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:4
+msgid "Weapons Panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:25
+msgid "Fade out after:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:27
+msgid "Never"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:29
+#, c-format
+msgid "%ds"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:33
+msgid "Fade effect:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
+msgid "EF^None"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:37
+msgid "Alpha"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
+msgid "Slide"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:39
+msgid "EF^Both"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:43
+msgid "Weapon icons:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46
+msgid "Show only owned weapons"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
+msgid "Show weapon ID as:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
+msgid "SHOWAS^None"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
+msgid "Number"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:52
+msgid "Bind"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
+msgid "Show Accuracy"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:56
+msgid "Show Ammo"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:59
+msgid "Ammo bar color:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:65
+msgid "Ammo bar alpha:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:4
+msgid "Panel HUD Setup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:22
+msgid "Panel background defaults:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:24 qcsrc/menu/xonotic/util.qc:683
+msgid "Background:"
+msgstr ""
+
+#: 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
+msgid "Disable"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:31
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:78 qcsrc/menu/xonotic/util.qc:691
+msgid "Color:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:36 qcsrc/menu/xonotic/util.qc:699
+msgid "Border size:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:51
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:90
+msgid "Team color:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:59 qcsrc/menu/xonotic/util.qc:725
+msgid "Test team color in configure mode"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:62 qcsrc/menu/xonotic/util.qc:728
+msgid "Padding:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:69
+msgid "HUD Dock:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71
+msgid "DOCK^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72
+msgid "DOCK^Small"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73
+msgid "DOCK^Medium"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:74
+msgid "DOCK^Large"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:97
+msgid "Grid settings:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:100
+msgid "Snap panels to grid"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:103
+msgid "Grid size:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:104
+msgid "X:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:110
+msgid "Y:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:118
+msgid "Exit setup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer.c:4
+msgid "Multiplayer"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer.c:18
+msgid "Servers"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer.c:19
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:5
+msgid "Create"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer.c:20
+msgid "Demos"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer.c:21
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:5
+msgid "Player Setup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:34
+msgid "Game type:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:48
+msgid "Time limit:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:52
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:60
+msgid "Use map specified default"
+msgstr ""
+
+#: 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 ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:63
+msgid "Player slots:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:66
+msgid "Number of bots:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:69
+msgid "Bot skill:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:72
+msgid "Botlike"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:73
+msgid "Beginner"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:74
+msgid "You will win"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:75
+msgid "You can win"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:76
+msgid "You might win"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:77
+msgid "Advanced"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:78
+msgid "Expert"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:79
+msgid "Pro"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:80
+msgid "Assassin"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:81
+msgid "Unhuman"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:82
+msgid "Godlike"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:87
+msgid "Mutators..."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:96
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:146
+msgid "Advanced settings..."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:103
+msgid "Map list:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:109
+msgid "Select all"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:112
+msgid "Select none"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:118
+msgid "Start Multiplayer!"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:153
+msgid "Capture limit:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:156
+msgid "Lives:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:157
+msgid "Laps:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:158
+msgid "Goals:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:162
+msgid "Frag limit:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:6
+msgid "Advanced server settings"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:25
+msgid "Game settings:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:28
+msgid "Allow spectating"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:31
+msgid "Spawn shield:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:36
+msgid "Game speed:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:40
+msgid "Teamplay settings:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:43
+msgid "Friendly fire scale:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:47
+msgid "Virtual friendly fire (effect only)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:50
+msgid "Friendly fire penalty:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:54
+msgid "Virtual penalty (effect only)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:57
+msgid "Teams:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:66
+msgid "Map voting:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:68
+msgid "No voting"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:69
+msgid "2 choices"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:70
+msgid "3 choices"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:71
+msgid "4 choices"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:72
+msgid "5 choices"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:73
+msgid "6 choices"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:74
+msgid "7 choices"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:75
+msgid "8 choices"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:76
+msgid "9 choices"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:79
+msgid "Simple majority wins vcall"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:5
+msgid "Map Information"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49
+msgid "Full item placement"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49
+msgid "MinstaGib only"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:81
+msgid "Title:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:87
+msgid "Author:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:93
+msgid "Features:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:98
+msgid "Game types:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:121
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:328
+msgid "Close"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:124
+msgid "MAP^Play"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:7
+msgid "Mutators"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:33
+msgid "All Weapons Arena"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:35
+msgid "Most Weapons Arena"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:56
+#, c-format
+msgid "%s Arena"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:68
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:162
+msgid "Dodging"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:70
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:254
+msgid "MinstaGib"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:72
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:208
+msgid "New Toys"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:74
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:258
+msgid "NIX"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:76
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:212
+msgid "Rocket Flying"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:78
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:204
+msgid "Invincible Projectiles"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:82
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:266
+msgid "No start weapons"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:84
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:189
+msgid "Low gravity"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:86
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:168
+msgid "Cloaked"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:90
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:171
+msgid "Midair"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:92
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:174
+msgid "Vampire"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:94
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:216
+msgid "Piñata"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:96
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:220
+msgid "Weapons stay"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:98
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:179
+msgid "Blood loss"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:100
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:201
+msgid "Jet pack"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:102
+msgid "No powerups"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:104
+msgid "Powerups"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:106
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:165
+msgid "Touch explode"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:108
+msgid "MUT^None"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:159
+msgid "Gameplay mutators:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:195
+msgid "Weapon & item mutators:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:198
+msgid "Grappling hook"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:225
+msgid "Regular (no arena)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:227
+msgid "Weapon arenas:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:244
+msgid "Most weapons"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:248
+msgid "All weapons"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:251
+msgid "Special arenas:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:262
+msgid "with laser"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:4
+msgid "Demo"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:26
+msgid "Automatically record demos while playing"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:29
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:28
+msgid "Filter:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:40
+msgid "Timedemo"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:43
+msgid "DEMO^Play"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:4
+msgid "Join"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:33
+msgid "SRVS^Empty"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:37
+msgid "SRVS^Full"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:41
+msgid "Pause"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:53
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:255
+msgid "Address:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:64
+msgid "Info..."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:69
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:335
+msgid "Join!"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:5
+msgid "Server Information"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:174
+#, c-format
+msgid "%d/%d"
+msgstr ""
+
+#: 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 ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:193
+#, c-format
+msgid "%d modified"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:193
+msgid "Official"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:201
+msgid "N/A (auth library missing, can't connect)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:203
+msgid "N/A (auth library missing)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:209
+msgid "Not supported (can't connect)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:211
+msgid "Not supported (won't encrypt)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:215
+msgid "Supported (will encrypt)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:217
+msgid "Supported (won't encrypt)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:221
+msgid "Requested (will encrypt)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:223
+msgid "Requested (won't encrypt)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:227
+msgid "Required (can't connect)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:229
+msgid "Required (will encrypt)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:249
+msgid "Hostname:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:263
+msgid "Gametype:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:268
+msgid "Map:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:273
+msgid "Mod:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:278
+msgid "Version:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:283
+msgid "Settings:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:290
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:322
+msgid "Players:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:295
+msgid "Bots:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:300
+msgid "Free slots:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:306
+msgid "Encryption:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:311
+msgid "ID:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:316
+msgid "Key:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:61
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:20
+msgid "Model:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:73
+msgid "Glowing color:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:82
+msgid "Detail color:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:93
+msgid "No crosshair"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:95
+msgid "Per weapon crosshair"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:98
+msgid "Custom crosshair"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:117
+msgid "Crosshair size:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:122
+msgid "Crosshair alpha:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:128
+msgid "Crosshair color:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:130
+msgid "Per weapon"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:132
+msgid "By health"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:136
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:47
+msgid "Custom"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:144
+msgid "Other crosshair settings"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:152
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:6
+msgid "Model settings"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:158
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:6
+msgid "View settings"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:164
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:6
+msgid "Weapon settings"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:174
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:6
+msgid "HUD settings"
+msgstr ""
+
+#: 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 ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:6
+msgid "Crosshair settings"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:28
+msgid "Enable center crosshair dot"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:31
+msgid "Dot size:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:36
+msgid "Dot alpha:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:41
+msgid "Dot color:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:43
+msgid "Use normal crosshair color"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:54
+msgid "Crosshair animations:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:57
+msgid "Smooth effects of crosshairs"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:61
+msgid "Use rings to indicate weapon status"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:67
+msgid "Hit testing:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:69
+msgid "HTTST^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:70
+msgid "HTTST^TrueAim"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:71
+msgid "HTTST^Enemies"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:76
+msgid "Blur crosshair if the shot is obstructed"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:81
+msgid "Animate when hitting an enemy"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_crosshair.c:85
+msgid "Animate when picking up an item"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:40
+msgid "Damage:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:43
+msgid "Overlay:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:47
+msgid "Factor:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:53
+msgid "Fade rate:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:60
+msgid "Waypoints"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:75
+msgid "Edge offset:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:83
+msgid "Show names above players"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:86
+msgid "Only when near crosshair"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:89
+msgid "Display health and armor"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:93
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hudconfirm.c:4
+msgid "Enter HUD editor"
+msgstr ""
+
+#: 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 ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hudconfirm.c:30
+msgid "Do you wish to start a local game to set up the HUD?"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hudconfirm.c:33
+msgid "HDCNFRM^Yes"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hudconfirm.c:36
+msgid "HDCNFRM^No"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:28
+msgid "Body fading:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:31
+msgid "Gibs:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:33
+msgid "GIBS^None"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:34
+msgid "GIBS^Few"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:35
+msgid "GIBS^Many"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:36
+msgid "GIBS^Lots"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:41
+msgid "Force player models to mine"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_model.c:43
+msgid "Force player colors to mine"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:28
+msgid "Field of view:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:31
+msgid "Zoom:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:33
+msgid "RETICLE^Fullscreen"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:34
+msgid "RETICLE^With reticle"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:38
+msgid "ZOOM^Factor:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:42
+msgid "ZOOM^Speed:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:52
+msgid "ZOOM^Instant"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:56
+msgid "ZOOM^Sensitivity:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:59
+msgid "Velocity zoom:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:61
+msgid "VZOOM^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:62
+msgid "VZOOM^Forward only"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:63
+msgid "VZOOM^All directions"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:67
+msgid "VZOOM^Speed"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:72
+msgid "Allow passing through walls while spectating"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:75
+msgid "1st person perspective"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:79
+msgid "Smooth the view when landing from a jump"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:83
+msgid "Smooth the view while crouching"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:87
+msgid "View waving while idle"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:91
+msgid "View bobbing while walking around"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:96
+msgid "3rd person perspective"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:100
+msgid "Back distance"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_view.c:106
+msgid "Up distance"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:29
+msgid "Weapon priority list:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:33
+msgid "Up"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:36
+msgid "Down"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:41
+msgid "Use priority list for weapon cycling"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:43
+msgid "Auto switch weapons on pickup"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:46
+msgid "Draw 1st person weapon model"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:58
+msgid "Gun model swaying"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:63
+msgid "Gun model bobbing"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_quit.c:4
+msgid "Quit"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_quit.c:18
+msgid "Are you sure you want to quit?"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_quit.c:21
+msgid "Yes"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_quit.c:22
+msgid "No"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:4
+msgid "Sandbox Tools"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:25
+msgid "Spawn"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:26
+msgid "Remove *"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:28
+msgid "Copy *"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:29
+msgid "Paste"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:31
+msgid "Bone:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:36
+msgid "Set * as child"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:37
+msgid "Attach to *"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:39
+msgid "Detach from *"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:42
+msgid "Visual object properties for *:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:44
+msgid "Set skin:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:46
+msgid "Set alpha:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:49
+msgid "Set color main:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:51
+msgid "Set color glow:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:55
+msgid "Set frame:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:59
+msgid "Physical object properties for *:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:61
+msgid "Set material:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:67
+msgid "Set solidity:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:68
+msgid "Non-solid"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:69
+msgid "Solid"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:70
+msgid "Set physics:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:71
+msgid "Static"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:72
+msgid "Movable"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:73
+msgid "Physical"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:75
+msgid "Set scale:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:77
+msgid "Set force:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:81
+msgid "Claim *"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:83
+msgid "* object info"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:84
+msgid "* mesh info"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:85
+msgid "* attachment info"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:86
+msgid "Show help"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:87
+msgid "* is the object you are facing"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings.c:4
+msgid "Settings"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings.c:18
+#: qcsrc/menu/xonotic/dialog_settings_input.c:4
+msgid "Input"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings.c:19
+#: qcsrc/menu/xonotic/dialog_settings_video.c:4
+msgid "Video"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings.c:20
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:4
+msgid "Effects"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings.c:21
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:4
+msgid "Audio"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings.c:22
+#: qcsrc/menu/xonotic/dialog_settings_user.c:4
+msgid "User"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings.c:23
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:4
+msgid "Misc"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:27
+msgid "Master:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:33
+msgid "Music:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:41
+msgid "VOL^Ambient:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:48
+msgid "Info:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:55
+msgid "Items:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:62
+msgid "Pain:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:69
+msgid "Player:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:76
+msgid "Shots:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:83
+msgid "Voice:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:91
+msgid "Weapons:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:97
+msgid "New style sound attenuation"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:99
+msgid "Mute sounds when not active"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:102
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:156
+msgid "Frequency:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:104
+msgid "8 kHz"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:105
+msgid "11.025 kHz"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:106
+msgid "16 kHz"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:107
+msgid "22.05 kHz"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:108
+msgid "24 kHz"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:109
+msgid "32 kHz"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:110
+msgid "44.1 kHz"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:111
+msgid "48 kHz"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:114
+msgid "Channels:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:116
+msgid "Mono"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:117
+msgid "Stereo"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:118
+msgid "2.1"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:119
+msgid "4"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:120
+msgid "5"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:121
+msgid "5.1"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:122
+msgid "6.1"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:123
+msgid "7.1"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:126
+msgid "Swap Stereo"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:128
+msgid "Headphone friendly mode"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:132
+msgid "Hit indication sound"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:134
+msgid "Chat message sound"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:136
+msgid "Menu sounds"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:139
+msgid "Time announcer:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:141
+msgid "WRN^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:142
+msgid "1 minute"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:143
+msgid "5 minutes"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:144
+msgid "WRN^Both"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:151
+msgid "Automatic taunts"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:161
+msgid "Debug info about sounds"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:38
+msgid "Quality preset:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:41
+msgid "PRE^OMG!"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:42
+msgid "PRE^Low"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:43
+msgid "PRE^Medium"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:44
+msgid "PRE^Normal"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:45
+msgid "PRE^High"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:46
+msgid "PRE^Ultra"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:48
+msgid "PRE^Ultimate"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:52
+msgid "Geometry detail:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:54
+msgid "DET^Lowest"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:55
+msgid "DET^Low"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:56
+msgid "DET^Normal"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:57
+msgid "DET^Good"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:58
+msgid "DET^Best"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:59
+msgid "DET^Insane"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:62
+msgid "Player detail:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:65
+msgid "Texture resolution:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:69
+msgid "RES^Leet"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:70
+msgid "RES^Lowest"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:71
+msgid "RES^Very low"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:72
+msgid "RES^Low"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:73
+msgid "RES^Normal"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:74
+msgid "RES^Good"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:75
+msgid "RES^Best"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:87
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:91
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:95
+msgid "Avoid lossy texture compression"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:105
+msgid "Show surfaces"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:108
+msgid "Use lightmaps"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:109
+msgid "Deluxe mapping"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:111
+msgid "Gloss"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:114
+msgid "Offset mapping"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:116
+msgid "Relief mapping"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:119
+msgid "Reflections:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:122
+msgid "Blurred"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:123
+msgid "REFL^Good"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:124
+msgid "Sharp"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:129
+msgid "Particles quality:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:132
+msgid "Particles distance:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:135
+msgid "Damage effects:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:137
+msgid "DMGPRTCLS^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:138
+msgid "DMGPRTCLS^Skeletal"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:139
+msgid "DMGPRTCLS^All"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:142
+msgid "Particle effects for spawnpoints"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:146
+msgid "No dynamic lighting"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:148
+msgid "Fake corona lighting"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:151
+msgid "Realtime dynamic lighting"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:153
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:157
+msgid "Shadows"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:156
+msgid "Realtime world lighting"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:161
+msgid "Use normal maps"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:163
+msgid "Soft shadows"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:167
+msgid "Fade corona according to visibility"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:171
+msgid "Bloom"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:172
+msgid "Extra postprocessing effects"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:177
+msgid "Motion blur:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:183
+msgid "Decals"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:184
+msgid "Decals on models"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:188
+msgid "Distance:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_effects.c:194
+msgid "Time:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.c:26
+msgid "Key bindings:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.c:30
+msgid "Change key..."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.c:34
+msgid "Edit..."
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.c:40
+msgid "Clear"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.c:46
+msgid "Pressing \"enter console\" key also closes it"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.c:48
+msgid "Automatically repeat jumping if holding jump"
+msgstr ""
+
+#: 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 ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.c:62
+msgid "Mouse:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.c:65
+msgid "Sensitivity:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.c:69
+msgid "Smooth aiming"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.c:72
+msgid "Invert aiming"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.c:76
+#: qcsrc/menu/xonotic/dialog_settings_input.c:78
+#: qcsrc/menu/xonotic/dialog_settings_input.c:81
+msgid "Disable system mouse acceleration"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input.c:86
+msgid "Enable built in mouse acceleration"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:5
+msgid "User defined key bind"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:42
+msgid "Command when pressed:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:45
+msgid "Command when released:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:48
+msgid "Save"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:51
+msgid "Cancel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:26
+msgid "Network:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:31
+msgid "56k"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:32
+msgid "ISDN"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:33
+msgid "Slow ADSL"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:34
+msgid "Fast ADSL"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:35
+msgid "Broadband"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:39
+msgid "Input packets/s:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:45
+msgid "Local latency:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:50
+msgid "Client UDP port:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:56
+msgid "Show netgraph"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:60
+msgid "Client-side movement prediction"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:63
+msgid "Movement error compensation"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:67
+msgid "Downloads:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:70
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:82
+msgid "Maximum:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:74
+msgid "Speed (kB/s):"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:79
+msgid "Framerate:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:84
+msgid "MAXFPS^5 fps"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:85
+msgid "MAXFPS^10 fps"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:86
+msgid "MAXFPS^20 fps"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:87
+msgid "MAXFPS^30 fps"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:88
+msgid "MAXFPS^40 fps"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:89
+msgid "MAXFPS^50 fps"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:90
+msgid "MAXFPS^60 fps"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:91
+msgid "MAXFPS^70 fps"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:92
+msgid "MAXFPS^100 fps"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:93
+msgid "MAXFPS^125 fps"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:94
+msgid "MAXFPS^200 fps"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:95
+msgid "MAXFPS^Unlimited"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:99
+msgid "Target:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:101
+msgid "TRGT^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:102
+msgid "TRGT^30 fps"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:103
+msgid "TRGT^40 fps"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:104
+msgid "TRGT^50 fps"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:105
+msgid "TRGT^60 fps"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:106
+msgid "TRGT^100 fps"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:107
+msgid "TRGT^125 fps"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:108
+msgid "TRGT^200 fps"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:112
+msgid "Idle limit:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:114
+msgid "IDLFPS^10 fps"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:115
+msgid "IDLFPS^20 fps"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:116
+msgid "IDLFPS^30 fps"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:117
+msgid "IDLFPS^60 fps"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:118
+msgid "IDLFPS^Unlimited"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:123
+msgid "Show frames per second"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:126
+msgid "Save processing time for other apps"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:130
+msgid "Menu tooltips:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:132
+msgid "TLTIP^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:133
+msgid "TLTIP^Standard"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:134
+msgid "TLTIP^Advanced"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:138
+msgid "Show current time"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:140
+msgid "Show current date"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc.c:142
+msgid "Enable developer mode"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:5
+msgid "Advanced settings"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:32
+msgid "Cvar filter:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:45
+msgid "Setting:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:49
+msgid "Type:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:53
+msgid "Value:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:72
+msgid "Description:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_user.c:27
+msgid "Menu skins:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_user.c:31
+msgid "Set skin"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_user.c:74
+msgid "Set language"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_user.c:79
+msgid "Disable gore effects and harsh language"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_user.c:82
+msgid "Allow player statistics to track your client"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_user.c:84
+msgid "Allow player statistics to use your nickname"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:26
+msgid "Resolution:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:29
+msgid "Font/UI size:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:31
+msgid "SZ^Unreadable"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:32
+msgid "SZ^Tiny"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:33
+msgid "SZ^Little"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:34
+msgid "SZ^Small"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:35
+msgid "SZ^Medium"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:36
+msgid "SZ^Large"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:37
+msgid "SZ^Huge"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:38
+msgid "SZ^Gigantic"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:39
+msgid "SZ^Colossal"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:42
+msgid "Color depth:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:44
+msgid "16bit"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:45
+msgid "32bit"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:48
+msgid "Full screen"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:49
+msgid "Vertical Synchronization"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:53
+msgid "Anisotropy:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:55
+msgid "ANISO^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:56
+#: qcsrc/menu/xonotic/dialog_settings_video.c:66
+msgid "2x"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:57
+#: qcsrc/menu/xonotic/dialog_settings_video.c:67
+msgid "4x"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:58
+msgid "8x"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:59
+msgid "16x"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:62
+msgid "Antialiasing:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:65
+msgid "AA^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:71
+msgid "High-quality frame buffer"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:76
+msgid "Depth first:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:78
+msgid "DF^Disabled"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:79
+msgid "DF^World"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:80
+msgid "DF^All"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:83
+msgid "Vertex Buffer Objects (VBOs)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:86
+msgid "VBO^Off"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:87
+msgid "Vertices, some Tris (compatible)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:90
+msgid "Vertices"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:91
+msgid "Vertices and Triangles"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:94
+msgid "Brightness:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:97
+msgid "Contrast:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:100
+msgid "Gamma:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:105
+msgid "Contrast boost:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:110
+msgid "Saturation:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:116
+msgid "LIT^Ambient:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:119
+msgid "Intensity:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:123
+msgid "Wait for GPU to finish each frame"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:125
+msgid "Use OpenGL 2.0 shaders (GLSL)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:128
+msgid "Use GLSL to handle color control"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:133
+msgid "Psycho coloring (easter egg)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:136
+msgid "Trippy vertices (easter egg)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_settings_video.c:139
+msgid "Flip view horizontally"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_singleplayer.c:4
+msgid "Singleplayer"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_singleplayer.c:116
+msgid "Instant action! (random map with bots)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_singleplayer.c:137
+msgid "Campaign Difficulty:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_singleplayer.c:138
+msgid "CSKL^Easy"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_singleplayer.c:139
+msgid "CSKL^Medium"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_singleplayer.c:140
+msgid "CSKL^Hard"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_singleplayer.c:142
+msgid "Start Singleplayer!"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:4
+msgid "Winner"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_teamselect.c:5
+msgid "Team Selection"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_teamselect.c:42
+msgid "join 'best' team (auto-select)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_teamselect.c:46
+msgid "red"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_teamselect.c:47
+msgid "blue"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_teamselect.c:48
+msgid "yellow"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_teamselect.c:49
+msgid "pink"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_teamselect.c:52
+msgid "spectate"
+msgstr ""
+
+#: qcsrc/menu/xonotic/mainwindow.c:39 qcsrc/menu/xonotic/mainwindow.c:42
+msgid "Do not press this button again!"
+msgstr ""
+
+#: qcsrc/menu/xonotic/maplist.c:280
+msgid ""
+"Huh? Can't play this (m is NULL). Refiltering so this won't happen again.\n"
+msgstr ""
+
+#: qcsrc/menu/xonotic/maplist.c:288
+#, c-format
+msgid "%s's Xonotic Server"
+msgstr ""
+
+#: qcsrc/menu/xonotic/maplist.c:293
+msgid ""
+"Huh? Can't play this (invalid game type). Refiltering so this won't happen "
+"again.\n"
+msgstr ""
+
+#: qcsrc/menu/xonotic/playerlist.c:118 qcsrc/menu/xonotic/playerlist.c:128
+msgid "spectator"
+msgstr ""
+
+#: qcsrc/menu/xonotic/playermodel.c:177
+msgid "<no model found>"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.c:190
+msgid "Remove"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.c:192
+msgid "Bookmark"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.c:553
+msgid "Ping"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.c:554
+msgid "Host name"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.c:555
+msgid "Map"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.c:556
+msgid "Type"
+msgstr ""
+
+#: qcsrc/menu/xonotic/serverlist.c:557
+msgid "Players"
+msgstr ""
+
+#: qcsrc/menu/xonotic/skinlist.c:105
+msgid "<TITLE>"
+msgstr ""
+
+#: qcsrc/menu/xonotic/skinlist.c:106
+msgid "<AUTHOR>"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_decibels.c:77
+msgid "VOL^MAX"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_decibels.c:79
+msgid "VOL^OFF"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_decibels.c:81
+#, c-format
+msgid "%d %%"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_decibels.c:83
+#, c-format
+msgid "%.1f"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_decibels.c:85
+#, c-format
+msgid "%.2f %%"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_decibels.c:87
+#, c-format
+msgid "%s dB"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_resolution.c:103
+#, c-format
+msgid "%dx%d (%d:%d)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_resolution.c:106
+#, c-format
+msgid "%dx%d"
+msgstr ""
+
+#: qcsrc/menu/xonotic/util.qc:298
+#, c-format
+msgid "error receiving update notification: status is %d\n"
+msgstr ""
+
+#: qcsrc/menu/xonotic/util.qc:303
+msgid "error: received HTML instead of an update notification\n"
+msgstr ""
+
+#: qcsrc/menu/xonotic/util.qc:308
+msgid "error: received carriage returns from update notification server\n"
+msgstr ""
+
+#: qcsrc/menu/xonotic/util.qc:329
+#, c-format
+msgid ""
+"Update can be downloaded at:\n"
+"%s\n"
+msgstr ""
+
+#: qcsrc/menu/xonotic/util.qc:447
+msgid "Autogenerating mapinfo for newly added maps..."
+msgstr ""
+
+#: qcsrc/menu/xonotic/util.qc:476
+#, c-format
+msgid "^1%s TEST BUILD"
+msgstr ""
+
+#: qcsrc/menu/xonotic/util.qc:491
+#, c-format
+msgid "Update to %s now!"
+msgstr ""
+
+#: qcsrc/menu/xonotic/util.qc:576
+msgid ""
+"^1ERROR: Texture compression is required but not supported.\n"
+"^1Expect visual problems.\n"
+msgstr ""
+
+#: qcsrc/menu/xonotic/util.qc:696
+msgid "Use default"
+msgstr ""
+
+#: qcsrc/menu/xonotic/util.qc:716
+msgid "Team Color:"
+msgstr ""
+
+#: qcsrc/menu/xonotic/util.qh:43
+msgid "Enable panel"
+msgstr ""
+
+#: qcsrc/menu/xonotic/weaponslist.c:102
+#, c-format
+msgid "%s (mutator weapon)"
+msgstr ""
+
+#: qcsrc/server/w_hlac.qc:11
+msgid "Heavy Laser Assault Cannon"
+msgstr ""
+
+#: qcsrc/server/w_hook.qc:11
+msgid "Grappling Hook"
+msgstr ""
+
+#: qcsrc/server/w_minstanex.qc:11
+msgid "MinstaNex"
+msgstr ""
+
+#: qcsrc/server/w_seeker.qc:11
+msgid "T.A.G. Seeker"
+msgstr ""
+
+#: qcsrc/server/w_tuba.qc:12
+#, no-c-format
+msgid "@!#%'n Tuba"
+msgstr ""
index f1618e5a1fea16a11cbfb013e70a0c1701967d60..0130a180be113b4a8ad545db63e676ad98c88a38 100644 (file)
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Xonotic\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-09-13 10:31+0200\n"
-"PO-Revision-Date: 2013-09-13 19:22+0000\n"
+"POT-Creation-Date: 2013-10-03 11:55+0200\n"
+"PO-Revision-Date: 2013-10-03 10:22+0000\n"
 "Last-Translator: divVerent <divVerent@xonotic.org>\n"
 "Language-Team: German (http://www.transifex.com/projects/p/xonotic/language/"
 "de/)\n"
@@ -1273,7 +1273,7 @@ msgstr "%dth"
 msgid "@!#%'n Tuba Throwing"
 msgstr "@!#%'n Tuba-Werfen"
 
-#: qcsrc/common/mapinfo.qc:1105 qcsrc/menu/xonotic/skinlist.c:166
+#: qcsrc/common/mapinfo.qc:1109 qcsrc/menu/xonotic/skinlist.c:166
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
@@ -1347,12 +1347,12 @@ msgstr "^1Serverbenachrichtigungen:"
 msgid "^7%s (^3%d sec left)"
 msgstr "^7%s (^3%d Sek. verbleibend)"
 
-#: qcsrc/common/notifications.qh:330
+#: qcsrc/common/notifications.qh:342
 #, c-format
 msgid "^BG%s^BG captured the ^TC^TT^BG flag"
 msgstr "^BG%s^BG hat die ^TC^TT^BG Flagge erobert"
 
-#: qcsrc/common/notifications.qh:331
+#: qcsrc/common/notifications.qh:343
 #, c-format
 msgid ""
 "^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
@@ -1361,12 +1361,12 @@ msgstr ""
 "^BG%s^BG hat die ^TC^TT^BG Flagge in ^F1%s^BG Sekunden erobert, und damit ^BG"
 "%s^BG's Rekord von ^F2%s^BG Sekunden gebrochen"
 
-#: qcsrc/common/notifications.qh:332
+#: qcsrc/common/notifications.qh:344
 #, c-format
 msgid "^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds"
 msgstr "^BG%s^BG hat die ^TC^TT^BG Flagge in ^F1%s^BG Sekunden erobert"
 
-#: qcsrc/common/notifications.qh:333
+#: qcsrc/common/notifications.qh:345
 #, c-format
 msgid ""
 "^BG%s^BG captured the ^TC^TT^BG flag in ^F2%s^BG seconds, failing to break "
@@ -1375,22 +1375,22 @@ msgstr ""
 "^BG%s^BG hat die ^TC^TT^BG Flagge in ^F1%s^BG Sekunden erobert, konnte "
 "jedoch nicht ^BG%s^BG's Rekord von ^F2%s^BG Sekunden brechen"
 
-#: qcsrc/common/notifications.qh:334
+#: qcsrc/common/notifications.qh:346
 msgid "^BGThe ^TC^TT^BG flag was returned to base by its owner"
 msgstr ""
 "^BGDie ^TC^TT^BG Flagge wurde von ihrem Besitzer zur Basis zurückgebracht"
 
-#: qcsrc/common/notifications.qh:335
+#: qcsrc/common/notifications.qh:347
 msgid "^BGThe ^TC^TT^BG flag was destroyed and returned to base"
 msgstr "^BGDie ^TC^TT^BG Flagge wurde zerstört und zur Basis zurückgebracht"
 
-#: qcsrc/common/notifications.qh:336
+#: qcsrc/common/notifications.qh:348
 msgid "^BGThe ^TC^TT^BG flag was dropped in the base and returned itself"
 msgstr ""
 "^BGDie ^TC^TT^BG Flagge fühlte sich in der Basis vernachlässigt und ist "
 "einfach nach Hause gerannt"
 
-#: qcsrc/common/notifications.qh:337
+#: qcsrc/common/notifications.qh:349
 msgid ""
 "^BGThe ^TC^TT^BG flag fell somewhere it couldn't be reached and returned to "
 "base"
@@ -1398,7 +1398,7 @@ msgstr ""
 "^BGDie ^TC^TT^BG Flagge fiel an einen unerreichbaren Ort und ist daher aus "
 "Langeweile heimgeflogen"
 
-#: qcsrc/common/notifications.qh:338
+#: qcsrc/common/notifications.qh:350
 #, c-format
 msgid ""
 "^BGThe ^TC^TT^BG flag became impatient after ^F1%.2f^BG seconds and returned "
@@ -1407,919 +1407,919 @@ msgstr ""
 "^BGDie ^TC^TT^BG Flagge hatte nach ^F1%.2f^BG Sekunden einfach keine Geduld "
 "mehr und ist nach Hause gegangen"
 
-#: qcsrc/common/notifications.qh:339
+#: qcsrc/common/notifications.qh:351
 msgid "^BGThe ^TC^TT^BG flag has returned to the base"
 msgstr "^BGDie ^TC^TT^BG Flagge ist zur Basis zurückgekehrt"
 
-#: qcsrc/common/notifications.qh:340
+#: qcsrc/common/notifications.qh:352
 #, c-format
 msgid "^BG%s^BG lost the ^TC^TT^BG flag"
 msgstr "^BG%s^BG hat die ^TC^TT^BG Flagge verloren"
 
-#: qcsrc/common/notifications.qh:341
+#: qcsrc/common/notifications.qh:353
 #, c-format
 msgid "^BG%s^BG got the ^TC^TT^BG flag"
 msgstr "^BG%s^BG hat die ^TC^TT^BG Flagge genommen"
 
-#: qcsrc/common/notifications.qh:342
+#: qcsrc/common/notifications.qh:354
 #, c-format
 msgid "^BG%s^BG returned the ^TC^TT^BG flag"
 msgstr "^BG%s^BG hat die ^TC^TT^BG Flagge zurückgebracht"
 
-#: qcsrc/common/notifications.qh:343
+#: qcsrc/common/notifications.qh:355
 #, c-format
 msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
 msgstr "^BG%s%s^K1 wurde unfair aus dem Spiel geworfen von ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:344
+#: qcsrc/common/notifications.qh:356
 #, c-format
 msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
 msgstr "^BG%s%s^K1 wurde von ^BG%s^K1 ertränkt%s%s"
 
-#: qcsrc/common/notifications.qh:345
+#: qcsrc/common/notifications.qh:357
 #, c-format
 msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:346
+#: qcsrc/common/notifications.qh:358
 #, c-format
 msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:346
+#: qcsrc/common/notifications.qh:358
 #, c-format
 msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:347
+#: qcsrc/common/notifications.qh:359
 #, c-format
 msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:348
+#: qcsrc/common/notifications.qh:360
 #, c-format
 msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:349
+#: qcsrc/common/notifications.qh:361
 #, c-format
 msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:350
+#: qcsrc/common/notifications.qh:362
 #, c-format
 msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:351
+#: qcsrc/common/notifications.qh:363
 #, c-format
 msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:352
+#: qcsrc/common/notifications.qh:364
 #, c-format
 msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:352
+#: qcsrc/common/notifications.qh:364
 #, c-format
 msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:353
+#: qcsrc/common/notifications.qh:365
 #, c-format
 msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:354
+#: qcsrc/common/notifications.qh:366
 #, c-format
 msgid ""
 "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:355
+#: qcsrc/common/notifications.qh:367
 #, c-format
 msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:356
+#: qcsrc/common/notifications.qh:368
 #, c-format
 msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:357
+#: qcsrc/common/notifications.qh:369
 #, c-format
 msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:358
+#: qcsrc/common/notifications.qh:370
 #, c-format
 msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:359
+#: qcsrc/common/notifications.qh:371
 #, c-format
 msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:360
+#: qcsrc/common/notifications.qh:372
 #, c-format
 msgid ""
 "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:361
+#: qcsrc/common/notifications.qh:373
 #, c-format
 msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:362
+#: qcsrc/common/notifications.qh:374
 #, c-format
 msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:363
+#: qcsrc/common/notifications.qh:375
 #, c-format
 msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:364
+#: qcsrc/common/notifications.qh:376
 #, c-format
 msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:365
+#: qcsrc/common/notifications.qh:377
 #, c-format
 msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:366
+#: qcsrc/common/notifications.qh:378
 #, c-format
 msgid "^BG%s%s^K1 was thrown into a world of hurt by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:367
+#: qcsrc/common/notifications.qh:379
 #, c-format
 msgid "^BG%s^K1 was moved into the %s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:368
+#: qcsrc/common/notifications.qh:380
 #, c-format
 msgid "^BG%s^K1 became enemies with the Lord of Teamplay%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:369
+#: qcsrc/common/notifications.qh:381
 #, c-format
 msgid "^BG%s^K1 thought they found a nice camping ground%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:370
+#: qcsrc/common/notifications.qh:382
 #, c-format
 msgid "^BG%s^K1 unfairly eliminated themself%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:371
+#: 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:372
+#: qcsrc/common/notifications.qh:384
 #, c-format
 msgid "^BG%s^K1 couldn't catch their breath%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:372
+#: qcsrc/common/notifications.qh:384
 #, c-format
 msgid "^BG%s^K1 was in the water for too long%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:373
+#: qcsrc/common/notifications.qh:385
 #, c-format
 msgid "^BG%s^K1 hit the ground with a bit too much force%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:373
+#: qcsrc/common/notifications.qh:385
 #, c-format
 msgid "^BG%s^K1 hit the ground with a crunch%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:374
+#: qcsrc/common/notifications.qh:386
 #, c-format
 msgid "^BG%s^K1 became a bit too crispy%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:374
+#: qcsrc/common/notifications.qh:386
 #, c-format
 msgid "^BG%s^K1 felt a little hot%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:375
+#: qcsrc/common/notifications.qh:387
 #, c-format
 msgid "^BG%s^K1 died%s%s"
 msgstr "^BG%s^K1 starb%s%s"
 
-#: qcsrc/common/notifications.qh:376
+#: qcsrc/common/notifications.qh:388
 #, c-format
 msgid "^BG%s^K1 found a hot place%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:376
+#: qcsrc/common/notifications.qh:388
 #, c-format
 msgid "^BG%s^K1 turned into hot slag%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:377
+#: qcsrc/common/notifications.qh:389
 #, c-format
 msgid "^BG%s^K1 mastered the art of self-nading%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:378
+#: qcsrc/common/notifications.qh:390
 #, c-format
 msgid "^BG%s^K1 died%s%s. What's the point of living without ammo?"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:378
+#: qcsrc/common/notifications.qh:390
 #, c-format
 msgid "^BG%s^K1 ran out of ammo%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:379
+#: qcsrc/common/notifications.qh:391
 #, c-format
 msgid "^BG%s^K1 rotted away%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:380
+#: qcsrc/common/notifications.qh:392
 #, c-format
 msgid "^BG%s^K1 became a shooting star%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:393
 #, c-format
 msgid "^BG%s^K1 was slimed%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:394
 #, c-format
 msgid "^BG%s^K1 couldn't take it anymore%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:395
 #, c-format
 msgid "^BG%s^K1 is now preserved for centuries to come%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:396
 #, c-format
 msgid "^BG%s^K1 switched to the %s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:397
 #, c-format
 msgid "^BG%s^K1 died in an accident%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:398
 #, c-format
 msgid "^BG%s^K1 ran into a turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:399
 #, c-format
 msgid "^BG%s^K1 was blasted away by an eWheel turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:400
 #, c-format
 msgid "^BG%s^K1 got caught up in the FLAC turret fire%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:401
 #, c-format
 msgid "^BG%s^K1 was blasted away by a Hellion turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:402
 #, c-format
 msgid "^BG%s^K1 could not hide from the Hunter turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:403
 #, c-format
 msgid "^BG%s^K1 was riddled full of holes by a Machinegun turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:404
 #, c-format
 msgid "^BG%s^K1 got turned into smoldering gibs by an MLRS turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:405
 #, c-format
 msgid "^BG%s^K1 was phased out by a turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:406
 #, c-format
 msgid "^BG%s^K1 got served some superheated plasma from a turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:407
 #, c-format
 msgid "^BG%s^K1 was electrocuted by a Tesla turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:408
 #, c-format
 msgid "^BG%s^K1 got served a lead enrichment by a Walker turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:409
 #, c-format
 msgid "^BG%s^K1 was impaled by a Walker turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:410
 #, c-format
 msgid "^BG%s^K1 was blasted away by a Walker turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:411
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Bumblebee explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:412
 #, c-format
 msgid "^BG%s^K1 was crushed by a vehicle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:401
+#: qcsrc/common/notifications.qh:413
 #, c-format
 msgid "^BG%s^K1 was caught in a Raptor cluster bomb%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:402
+#: qcsrc/common/notifications.qh:414
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Raptor explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:403
+#: qcsrc/common/notifications.qh:415
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Spiderbot explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:404
+#: qcsrc/common/notifications.qh:416
 #, c-format
 msgid "^BG%s^K1 was blasted to bits by a Spiderbot rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:405
+#: qcsrc/common/notifications.qh:417
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Racer explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:406
+#: qcsrc/common/notifications.qh:418
 #, c-format
 msgid "^BG%s^K1 couldn't find shelter from a Racer rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:407
+#: qcsrc/common/notifications.qh:419
 #, c-format
 msgid "^BG%s^K1 was in the wrong place%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:408
+#: qcsrc/common/notifications.qh:420
 #, c-format
 msgid "^BG%s^K1 was betrayed by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:409
+#: qcsrc/common/notifications.qh:421
 #, c-format
 msgid "^BG%s^K1 was frozen by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:410
+#: qcsrc/common/notifications.qh:422
 #, c-format
 msgid "^BG%s^K3 was revived by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:411
+#: qcsrc/common/notifications.qh:423
 #, c-format
 msgid "^BG%s^K3 was revived by falling"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:412
+#: qcsrc/common/notifications.qh:424
 #, c-format
 msgid "^BG%s^K3 was automatically revived after %s second(s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:413 qcsrc/common/notifications.qh:594
+#: qcsrc/common/notifications.qh:425 qcsrc/common/notifications.qh:612
 msgid "^TC^TT^BG team wins the round"
 msgstr "Das ^TC^TT^BG Team gewinnt die Runde"
 
-#: qcsrc/common/notifications.qh:414 qcsrc/common/notifications.qh:595
+#: qcsrc/common/notifications.qh:426 qcsrc/common/notifications.qh:613
 #, c-format
 msgid "^BG%s^BG wins the round"
 msgstr "^BG%s^BG gewinnt die Runde"
 
-#: qcsrc/common/notifications.qh:415 qcsrc/common/notifications.qh:524
+#: qcsrc/common/notifications.qh:427 qcsrc/common/notifications.qh:542
 msgid "^BGRound tied"
 msgstr "^BGRunde unentschieden"
 
-#: qcsrc/common/notifications.qh:416 qcsrc/common/notifications.qh:525
+#: qcsrc/common/notifications.qh:428 qcsrc/common/notifications.qh:543
 msgid "^BGRound over, there's no winner"
 msgstr "^BGDie Runde ist vorbei, aber es gibt keinen Gewinner"
 
-#: qcsrc/common/notifications.qh:417
+#: qcsrc/common/notifications.qh:429
 #, c-format
 msgid "^BG%s^K1 froze themself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:418
+#: qcsrc/common/notifications.qh:430
 #, c-format
 msgid "^BGGodmode saved you %s units of damage, cheater!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:419 qcsrc/common/notifications.qh:598
+#: qcsrc/common/notifications.qh:431 qcsrc/common/notifications.qh:616
 #, c-format
 msgid "^BGYou do not have the ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:420 qcsrc/common/notifications.qh:599
+#: qcsrc/common/notifications.qh:432 qcsrc/common/notifications.qh:617
 #, c-format
 msgid "^BGYou dropped the ^F1%s^BG%s"
 msgstr "^BGDu hast ^F1%s^BG%s fallengelassen"
 
-#: qcsrc/common/notifications.qh:421 qcsrc/common/notifications.qh:600
+#: qcsrc/common/notifications.qh:433 qcsrc/common/notifications.qh:618
 #, c-format
 msgid "^BGYou got the ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:422 qcsrc/common/notifications.qh:601
+#: qcsrc/common/notifications.qh:434 qcsrc/common/notifications.qh:619
 #, c-format
 msgid "^BGYou don't have enough ammo for the ^F1%s"
 msgstr "^BGDu hast nicht genug Munition für ^F1%s"
 
-#: qcsrc/common/notifications.qh:423 qcsrc/common/notifications.qh:602
+#: qcsrc/common/notifications.qh:435 qcsrc/common/notifications.qh:620
 #, c-format
 msgid "^F1%s %s^BG is unable to fire, but its ^F1%s^BG can"
 msgstr "^F1%s %s^BG kann nicht schießen, aber sein ^F1%s^BG kann"
 
-#: qcsrc/common/notifications.qh:424 qcsrc/common/notifications.qh:603
+#: qcsrc/common/notifications.qh:436 qcsrc/common/notifications.qh:621
 #, c-format
 msgid "^F1%s^BG is ^F4not available^BG on this map"
 msgstr "^F1%s^BG ist auf dieser Map ^F4nicht verfügbar"
 
-#: qcsrc/common/notifications.qh:425
+#: qcsrc/common/notifications.qh:437
 #, c-format
 msgid "^BG%s^F3 connected%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:426
+#: qcsrc/common/notifications.qh:438
 #, c-format
 msgid "^BG%s^F3 connected and joined the ^TC^TT team"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:427
+#: qcsrc/common/notifications.qh:439
 #, c-format
 msgid "^BG%s^F3 is now playing"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:428 qcsrc/common/notifications.qh:606
+#: qcsrc/common/notifications.qh:440 qcsrc/common/notifications.qh:624
 #, c-format
 msgid "^BG%s^BG has dropped the ball!"
 msgstr "^BG%s^BG hat den Ball verloren!"
 
-#: qcsrc/common/notifications.qh:429 qcsrc/common/notifications.qh:607
+#: qcsrc/common/notifications.qh:441 qcsrc/common/notifications.qh:625
 #, c-format
 msgid "^BG%s^BG has picked up the ball!"
 msgstr "^BG%s^BG hat den Ball genommen!"
 
-#: qcsrc/common/notifications.qh:430
+#: qcsrc/common/notifications.qh:442
 #, c-format
 msgid "^BG%s^BG captured the keys for the ^TC^TT team"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:431
+#: qcsrc/common/notifications.qh:443
 #, c-format
 msgid "^BG%s^BG dropped the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:432
+#: qcsrc/common/notifications.qh:444
 #, c-format
 msgid "^BG%s^BG lost the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:433
+#: qcsrc/common/notifications.qh:445
 #, c-format
 msgid "^BG%s^BG picked up the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:434
+#: qcsrc/common/notifications.qh:446
 #, c-format
 msgid "^BG%s^F3 forfeited"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:435
+#: qcsrc/common/notifications.qh:447
 #, c-format
 msgid "^BG%s^F3 has no more lives left"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:436
+#: qcsrc/common/notifications.qh:448
 #, c-format
 msgid "^BG%s^K1 picked up Invisibility"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:437
+#: qcsrc/common/notifications.qh:449
 #, c-format
 msgid "^BG%s^K1 picked up Shield"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:438
+#: qcsrc/common/notifications.qh:450
 #, c-format
 msgid "^BG%s^K1 picked up Speed"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:439
+#: qcsrc/common/notifications.qh:451
 #, c-format
 msgid "^BG%s^K1 picked up Strength"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:440
+#: qcsrc/common/notifications.qh:452
 #, c-format
 msgid "^BG%s^F3 disconnected"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:441
+#: qcsrc/common/notifications.qh:453
 #, c-format
 msgid "^BG%s^F3 was kicked for idling"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:442
+#: qcsrc/common/notifications.qh:454
 msgid ""
 "^F2You were kicked from the server because you are a spectator and "
 "spectators aren't allowed at the moment."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:443
+#: qcsrc/common/notifications.qh:455
 #, c-format
 msgid "^BG%s^F3 is now spectating"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:444
+#: qcsrc/common/notifications.qh:456
 #, c-format
 msgid "^BG%s^BG has abandoned the race"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:445
+#: qcsrc/common/notifications.qh:457
 #, c-format
 msgid "^BG%s^BG couldn't break their %s%s^BG place record of %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:446
+#: qcsrc/common/notifications.qh:458
 #, c-format
 msgid "^BG%s^BG couldn't break the %s%s^BG place record of %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:447
+#: qcsrc/common/notifications.qh:459
 #, c-format
 msgid "^BG%s^BG has finished the race"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:448
+#: qcsrc/common/notifications.qh:460
 #, c-format
 msgid "^BG%s^BG broke %s^BG's %s%s^BG place record with %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:449
+#: qcsrc/common/notifications.qh:461
 #, c-format
 msgid "^BG%s^BG improved their %s%s^BG place record with %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:450
+#: qcsrc/common/notifications.qh:462
 #, c-format
 msgid ""
 "^BG%s^BG scored a new record with ^F2%s^BG, but unfortunately lacks a UID "
 "and will be lost."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:451
+#: qcsrc/common/notifications.qh:463
 #, c-format
 msgid "^BG%s^BG set the %s%s^BG place record with %s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:452
+#: qcsrc/common/notifications.qh:464
 msgid "^TC^TT ^BGteam scores!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:453
+#: qcsrc/common/notifications.qh:465
 #, 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 ""
 
-#: qcsrc/common/notifications.qh:454
+#: qcsrc/common/notifications.qh:466
 #, c-format
 msgid "^BG%s^K1 picked up a Superweapon"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:455
+#: qcsrc/common/notifications.qh:467
 #, c-format
 msgid ""
 "^F4NOTE: ^BGThe server is running ^F1Xonotic %s (beta)^BG, you have "
 "^F2Xonotic %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:456
+#: qcsrc/common/notifications.qh:468
 #, c-format
 msgid ""
 "^F4NOTE: ^BGThe server is running ^F1Xonotic %s^BG, you have ^F2Xonotic %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:457
+#: qcsrc/common/notifications.qh:469
 #, c-format
 msgid ""
 "^F4NOTE: ^F1Xonotic %s^BG is out, and you still have ^F2Xonotic %s^BG - get "
 "the update from ^F3http://www.xonotic.org/^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:458
+#: qcsrc/common/notifications.qh:470
 #, c-format
 msgid "^F3SVQC Build information: ^F4%s"
-msgstr ""
+msgstr "^F3SVQC Build-Information: ^F4%s"
 
-#: qcsrc/common/notifications.qh:459
+#: qcsrc/common/notifications.qh:471
 #, c-format
 msgid ""
 "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Accordeon%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:460
+#: qcsrc/common/notifications.qh:472
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Accordeon%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:461
+#: qcsrc/common/notifications.qh:473
 #, c-format
 msgid "^BG%s%s^K1 felt the strong pull of ^BG%s^K1's Crylink%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:462
+#: qcsrc/common/notifications.qh:474
 #, c-format
 msgid "^BG%s^K1 felt the strong pull of their Crylink%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:463
+#: qcsrc/common/notifications.qh:475
 #, c-format
 msgid "^BG%s%s^K1 was blasted by ^BG%s^K1's Electro bolt%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:464
+#: qcsrc/common/notifications.qh:476
 #, c-format
 msgid "^BG%s%s^K1 felt the electrifying air of ^BG%s^K1's Electro combo%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:465
+#: qcsrc/common/notifications.qh:477
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Electro plasma%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:466
+#: qcsrc/common/notifications.qh:478
 #, c-format
 msgid "^BG%s^K1 played with Electro plasma%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:467
+#: qcsrc/common/notifications.qh:479
 #, c-format
 msgid "^BG%s^K1 could not remember where they put their Electro plasma%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:468
+#: qcsrc/common/notifications.qh:480
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's fireball%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:469
+#: qcsrc/common/notifications.qh:481
 #, c-format
 msgid "^BG%s%s^K1 got burnt by ^BG%s^K1's firemine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:470
+#: qcsrc/common/notifications.qh:482
 #, c-format
 msgid "^BG%s^K1 should have used a smaller gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:471
+#: qcsrc/common/notifications.qh:483
 #, c-format
 msgid "^BG%s^K1 forgot about their firemine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:472
+#: qcsrc/common/notifications.qh:484
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by a burst of ^BG%s^K1's Hagar rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:473
+#: qcsrc/common/notifications.qh:485
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Hagar rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:474
+#: qcsrc/common/notifications.qh:486
 #, c-format
 msgid "^BG%s^K1 played with tiny Hagar rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:475
+#: qcsrc/common/notifications.qh:487
 #, c-format
 msgid "^BG%s%s^K1 was cut down with ^BG%s^K1's HLAC%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:476
+#: qcsrc/common/notifications.qh:488
 #, c-format
 msgid "^BG%s^K1 got a little jumpy with their HLAC%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:477
+#: qcsrc/common/notifications.qh:489
 #, c-format
 msgid "^BG%s%s^K1 was caught in ^BG%s^K1's Hook gravity bomb%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:478
+#: qcsrc/common/notifications.qh:490
 #, c-format
 msgid ""
 "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Klein Bottle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:479
+#: qcsrc/common/notifications.qh:491
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Klein Bottle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:480
+#: qcsrc/common/notifications.qh:492
 #, c-format
 msgid "^BG%s%s^K1 was shot to death by ^BG%s^K1's Laser%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:481
+#: qcsrc/common/notifications.qh:493
 #, c-format
 msgid "^BG%s^K1 shot themself to hell with their Laser%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:482
+#: qcsrc/common/notifications.qh:494
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's mine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:483
+#: qcsrc/common/notifications.qh:495
 #, c-format
 msgid "^BG%s^K1 forgot about their mine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:484
+#: qcsrc/common/notifications.qh:496
 #, c-format
 msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Minstanex%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:485
+#: qcsrc/common/notifications.qh:497
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Mortar grenade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:486
+#: qcsrc/common/notifications.qh:498
 #, c-format
 msgid "^BG%s%s^K1 ate ^BG%s^K1's Mortar grenade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:487
+#: qcsrc/common/notifications.qh:499
 #, c-format
 msgid "^BG%s^K1 didn't see their own Mortar grenade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:488
+#: qcsrc/common/notifications.qh:500
 #, c-format
 msgid "^BG%s^K1 blew themself up with their own Mortar%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:489
+#: qcsrc/common/notifications.qh:501
 #, c-format
 msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Nex%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:490
+#: qcsrc/common/notifications.qh:502
 #, c-format
 msgid "^BG%s%s^K1 was sniped with a Rifle by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:491
+#: qcsrc/common/notifications.qh:503
 #, c-format
 msgid "^BG%s%s^K1 died in ^BG%s^K1's Rifle bullet hail%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:492
+#: qcsrc/common/notifications.qh:504
 #, c-format
 msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle bullet hail%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:493
+#: qcsrc/common/notifications.qh:505
 #, c-format
 msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:494
+#: qcsrc/common/notifications.qh:506
 #, c-format
 msgid "^BG%s%s^K1 ate ^BG%s^K1's rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:495
+#: qcsrc/common/notifications.qh:507
 #, c-format
 msgid "^BG%s%s^K1 got too close ^BG%s^K1's rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:496
+#: qcsrc/common/notifications.qh:508
 #, c-format
 msgid "^BG%s^K1 blew themself up with their Rocketlauncher%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:497
+#: qcsrc/common/notifications.qh:509
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Seeker rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:498
+#: qcsrc/common/notifications.qh:510
 #, c-format
 msgid "^BG%s%s^K1 was tagged by ^BG%s^K1's Seeker%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:499
+#: qcsrc/common/notifications.qh:511
 #, c-format
 msgid "^BG%s^K1 played with tiny Seeker rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:500
+#: qcsrc/common/notifications.qh:512
 #, c-format
 msgid "^BG%s%s^K1 was gunned down by ^BG%s^K1's Shotgun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:501
+#: qcsrc/common/notifications.qh:513
 #, c-format
 msgid "^BG%s%s^K1 slapped ^BG%s^K1 around a bit with a large Shotgun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:502
+#: qcsrc/common/notifications.qh:514
 #, c-format
 msgid "^BG%s^K1 is now thinking with portals%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:503
+#: qcsrc/common/notifications.qh:515
 #, c-format
 msgid "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Tuba%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:504
+#: qcsrc/common/notifications.qh:516
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Tuba%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:505
+#: qcsrc/common/notifications.qh:517
 #, c-format
 msgid "^BG%s%s^K1 was sniped by ^BG%s^K1's Machine Gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:506
+#: qcsrc/common/notifications.qh:518
 #, c-format
 msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:518
+#: qcsrc/common/notifications.qh:536
 msgid "^BGYou are attacking!"
-msgstr ""
+msgstr "^BGDu greifst an!"
 
-#: qcsrc/common/notifications.qh:519
+#: qcsrc/common/notifications.qh:537
 msgid "^BGYou are defending!"
 msgstr "^BGDu verteidigst!"
 
-#: qcsrc/common/notifications.qh:520
+#: qcsrc/common/notifications.qh:538
 msgid "^F4Begin!"
-msgstr ""
+msgstr "^F4Los!"
 
-#: qcsrc/common/notifications.qh:521
+#: qcsrc/common/notifications.qh:539
 msgid "^F4Game starts in ^COUNT"
-msgstr ""
+msgstr "^F4Das Spiel beginnt in ^COUNT"
 
-#: qcsrc/common/notifications.qh:522
+#: qcsrc/common/notifications.qh:540
 msgid "^F4Round starts in ^COUNT"
-msgstr ""
+msgstr "^F4Die Runde beginnt in ^COUNT"
 
-#: qcsrc/common/notifications.qh:523
+#: qcsrc/common/notifications.qh:541
 msgid "^F4Round cannot start"
 msgstr "^F4Die Runde kann nicht beginnen"
 
-#: qcsrc/common/notifications.qh:526
+#: qcsrc/common/notifications.qh:544
 msgid "^F2Don't camp!"
 msgstr "^F2Campe nicht!"
 
-#: qcsrc/common/notifications.qh:527
+#: qcsrc/common/notifications.qh:545
 msgid ""
 "^BGYou are now free.\n"
 "^BGFeel free to ^F2try to capture^BG the flag again\n"
@@ -2329,363 +2329,370 @@ msgstr ""
 "^BGDu kannst ^F2versuchen^BG die Flage noch einmal\n"
 "^BGzu erobern, wenn du glaubst es zu schaffen."
 
-#: qcsrc/common/notifications.qh:528
+#: qcsrc/common/notifications.qh:546
 msgid ""
 "^BGYou are now ^F1shielded^BG from the flag\n"
 "^BGfor ^F2too many unsuccessful attempts^BG to capture.\n"
 "^BGMake some defensive scores before trying again."
 msgstr ""
+"^BGDu bist jetzt von der Flagge ^F1abgeschirmt\n"
+"^BGwegen ^F2zu vielen fehlgeschlagenen Versuchen^BG,\n"
+"^BGdie Flagge zu erobern. Gewinne Punkte in der Verteidigung,\n"
+"^BGbevor du es noch einmal versuchst."
 
-#: qcsrc/common/notifications.qh:529
+#: qcsrc/common/notifications.qh:547
 msgid "^BGYou captured the ^TC^TT^BG flag!"
 msgstr "^BGDu hast die ^TC^TT^BG Flagge erobert!"
 
-#: qcsrc/common/notifications.qh:530
+#: qcsrc/common/notifications.qh:548
 #, c-format
 msgid "^BGToo many flag throws! Throwing disabled for %s."
 msgstr "^BGZu viele Flaggen geworfen! Das Werfen wurde für %s deaktiviert."
 
-#: qcsrc/common/notifications.qh:531
+#: qcsrc/common/notifications.qh:549
 #, c-format
 msgid "^BG%s^BG passed the ^TC^TT^BG flag to %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:532
+#: qcsrc/common/notifications.qh:550
 #, c-format
 msgid "^BGYou received the ^TC^TT^BG flag from %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:533
+#: qcsrc/common/notifications.qh:551
 #, c-format
 msgid "^BG%s^BG requests you to pass the flag%s"
-msgstr ""
+msgstr "^BG%s^BG bittet dich, die Flagge zu passen%s"
 
-#: qcsrc/common/notifications.qh:534
+#: qcsrc/common/notifications.qh:552
 #, c-format
 msgid "^BGRequesting %s^BG to pass you the flag"
-msgstr ""
+msgstr "^BG%s^BG wird darum gebeten, dir die Flagge zu passen"
 
-#: qcsrc/common/notifications.qh:535
+#: qcsrc/common/notifications.qh:553
 #, c-format
 msgid "^BGYou passed the ^TC^TT^BG flag to %s"
-msgstr ""
+msgstr "^BGDu hast die ^TC^TT^BG Flagge an %s gepasst"
 
-#: qcsrc/common/notifications.qh:536
+#: qcsrc/common/notifications.qh:554
 msgid "^BGYou got the ^TC^TT^BG flag!"
-msgstr ""
+msgstr "^BGDu hast die ^TC^TT^BG Flagge!"
 
-#: qcsrc/common/notifications.qh:537
+#: qcsrc/common/notifications.qh:555
 #, c-format
 msgid "^BGThe %senemy^BG got your flag! Retrieve it!"
 msgstr "^BGDer %sFeind^BG hat eure Flagge! Bring sie zurück!"
 
-#: qcsrc/common/notifications.qh:538
+#: qcsrc/common/notifications.qh:556
 #, c-format
 msgid "^BGThe %senemy (^BG%s%s)^BG got your flag! Retrieve it!"
 msgstr "^BGDer %sFeind (^BG%s%s)^BG hat eure Flagge! Bring sie zurück!"
 
-#: qcsrc/common/notifications.qh:539
+#: qcsrc/common/notifications.qh:557
 #, c-format
 msgid "^BGYour %steam mate^BG got the flag! Protect them!"
-msgstr ""
+msgstr "^BGDein %sTeamkollege^BG hat die Flagge! Beschütze ihn!"
 
-#: qcsrc/common/notifications.qh:540
+#: qcsrc/common/notifications.qh:558
 #, c-format
 msgid "^BGYour %steam mate (^BG%s%s)^BG got the flag! Protect them!"
-msgstr ""
+msgstr "^BGDein %sTeamkollege (^BG%s%s)^BG hat die Flagge! Beschütz ihn!"
 
-#: qcsrc/common/notifications.qh:541
+#: qcsrc/common/notifications.qh:559
 msgid "^BGYou returned the ^TC^TT^BG flag!"
-msgstr ""
+msgstr "^BGDu hast die ^TC^TT^BG Flagge zurückgebracht!"
 
-#: qcsrc/common/notifications.qh:542
+#: qcsrc/common/notifications.qh:560
 msgid "^BGStalemate! Enemies can now see you on radar!"
-msgstr ""
+msgstr "^BGPatt! Du kannst Gegner nun auf dem Radar sehen!"
 
-#: qcsrc/common/notifications.qh:543
+#: qcsrc/common/notifications.qh:561
 msgid "^BGStalemate! Flag carriers can now be seen by enemies on radar!"
 msgstr ""
+"^BGPatt! Flagenträger können jetzt von Feinden auf dem Radar gesehen werden!"
 
-#: qcsrc/common/notifications.qh:544
+#: qcsrc/common/notifications.qh:562
 #, c-format
 msgid "^K3%sYou fragged ^BG%s"
 msgstr "^K3%sDu hast ^BG%s getötet"
 
-#: qcsrc/common/notifications.qh:544
+#: qcsrc/common/notifications.qh:562
 #, c-format
 msgid "^K3%sYou scored against ^BG%s"
 msgstr "^K3%sDu hast gegen ^BG%s gepunktet"
 
-#: qcsrc/common/notifications.qh:545
+#: qcsrc/common/notifications.qh:563
 #, c-format
 msgid "^K1%sYou were fragged by ^BG%s"
 msgstr "^K1%sDu wurdest von ^BG%s getötet"
 
-#: qcsrc/common/notifications.qh:545
+#: qcsrc/common/notifications.qh:563
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s"
-msgstr ""
+msgstr "^K1%s^BG%s hat gegen Dich gepunktet"
 
-#: qcsrc/common/notifications.qh:546
+#: qcsrc/common/notifications.qh:564
 #, c-format
 msgid "^K1%sYou were fragged by ^BG%s^BG%s"
 msgstr "^K1%sDu wurdest von ^BG%s^BG%s getötet"
 
-#: qcsrc/common/notifications.qh:546
+#: qcsrc/common/notifications.qh:564
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^BG%s"
-msgstr ""
+msgstr "^K1%s^BG%s^BG%s hat gegen Dich gepunktet"
 
-#: qcsrc/common/notifications.qh:547
+#: qcsrc/common/notifications.qh:565
 #, c-format
 msgid "^K3%sYou fragged ^BG%s^BG%s"
-msgstr ""
+msgstr "^K3%s Du hast ^BG%s^BG%s getötet"
 
-#: qcsrc/common/notifications.qh:547
+#: qcsrc/common/notifications.qh:565
 #, c-format
 msgid "^K3%sYou scored against ^BG%s^BG%s"
 msgstr "^K3%sDu hast gegen ^BG%s^BG%s gepunktet"
 
-#: qcsrc/common/notifications.qh:548
+#: qcsrc/common/notifications.qh:566
 #, c-format
 msgid "^K1%sYou scored against ^BG%s^K1 while they were typing"
-msgstr ""
+msgstr "^K1%sDu hast gegen ^BG%s^K1 gepunktet, während er am Tippen war"
 
-#: qcsrc/common/notifications.qh:548
+#: qcsrc/common/notifications.qh:566
 #, c-format
 msgid "^K1%sYou typefragged ^BG%s"
-msgstr ""
+msgstr "^K1%sDu hast ^BG%s beim Tippen getötet"
 
-#: qcsrc/common/notifications.qh:549
+#: qcsrc/common/notifications.qh:567
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^K1 while typing!"
-msgstr ""
+msgstr "^K1%s^BG%s hat gegen Dich gepunktet, während du getippt hast!"
 
-#: qcsrc/common/notifications.qh:549
+#: qcsrc/common/notifications.qh:567
 #, c-format
 msgid "^K1%sYou were typefragged by ^BG%s"
-msgstr ""
+msgstr "^K1%sDu wurdest von ^BG%s beim Tippen getötet"
 
-#: qcsrc/common/notifications.qh:550
+#: qcsrc/common/notifications.qh:568
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^K1 while typing^BG%s"
-msgstr ""
+msgstr "^K1%sDu wurdest von ^BG%s^K1 beim Tippen verpunktet^BG%s"
 
-#: qcsrc/common/notifications.qh:550
+#: qcsrc/common/notifications.qh:568
 #, c-format
 msgid "^K1%sYou were typefragged by ^BG%s^BG%s"
-msgstr ""
+msgstr "^K1%sDu wurdest von ^BG%s^BG%s beim Tippen getötet"
 
-#: qcsrc/common/notifications.qh:551
+#: qcsrc/common/notifications.qh:569
 #, c-format
 msgid "^K1%sYou scored against ^BG%s^K1 while they were typing^BG%s"
-msgstr ""
+msgstr "^K1%sDu punktetest gegen ^BG%s^K1 während er tippte^BG%s"
 
-#: qcsrc/common/notifications.qh:551
+#: qcsrc/common/notifications.qh:569
 #, c-format
 msgid "^K1%sYou typefragged ^BG%s^BG%s"
-msgstr ""
+msgstr "^K1%sDu hast ^BG%s^BG%s beim Tippen getötet"
 
-#: qcsrc/common/notifications.qh:552
+#: qcsrc/common/notifications.qh:570
 msgid "^BGPress ^F2DROPWEAPON^BG again to toss the nade!"
 msgstr "^BGDrücke ^F2DROPWEAPON^BG erneut um die Granate zu werfen!"
 
-#: qcsrc/common/notifications.qh:553
+#: qcsrc/common/notifications.qh:571
 #, c-format
 msgid ""
 "^BGYou have been moved into a different team\n"
 "You are now on: %s"
 msgstr ""
+"^BGDu bist in ein anderes Tesm gewechselt worden\n"
+"Du bist jetzt in: %s"
 
-#: qcsrc/common/notifications.qh:554
+#: qcsrc/common/notifications.qh:572
 msgid "^K1Don't go against your team mates!"
-msgstr ""
+msgstr "^K1Nicht gegen deine Teamkameraden agieren!"
 
-#: qcsrc/common/notifications.qh:554
+#: qcsrc/common/notifications.qh:572
 msgid "^K1Don't shoot your team mates!"
-msgstr ""
+msgstr "^K1Nicht auf deine Teamkameraden einschießen!"
 
-#: qcsrc/common/notifications.qh:555
+#: qcsrc/common/notifications.qh:573
 msgid "^K1Die camper!"
-msgstr ""
+msgstr "^K1Stirb, Camper!"
 
-#: qcsrc/common/notifications.qh:555
+#: qcsrc/common/notifications.qh:573
 msgid "^K1Reconsider your tactics, camper!"
 msgstr "^1Überdenke dein Verhalten, Camper!"
 
-#: qcsrc/common/notifications.qh:556
+#: qcsrc/common/notifications.qh:574
 msgid "^K1You unfairly eliminated yourself!"
 msgstr "^K1Du hast dich auf unfaire Weise selbst eliminiert!"
 
-#: qcsrc/common/notifications.qh:557
+#: qcsrc/common/notifications.qh:575
 #, c-format
 msgid "^K1You were %s"
 msgstr "^K1Du warst %s"
 
-#: qcsrc/common/notifications.qh:558
+#: qcsrc/common/notifications.qh:576
 msgid "^K1You couldn't catch your breath!"
 msgstr "^K1Du hast keine Luft mehr bekommen!"
 
-#: qcsrc/common/notifications.qh:559
+#: qcsrc/common/notifications.qh:577
 msgid "^K1You hit the ground with a crunch!"
 msgstr "^K1Du bist mit einem Krachen auf dem Boden aufgeschlagen!"
 
-#: qcsrc/common/notifications.qh:560
+#: qcsrc/common/notifications.qh:578
 msgid "^K1You felt a little too hot!"
 msgstr "^K1Dir wurde etwas zu heiß!"
 
-#: qcsrc/common/notifications.qh:560
+#: qcsrc/common/notifications.qh:578
 msgid "^K1You got a little bit too crispy!"
 msgstr "^K1Du wurdest etwas zu knusprig!"
 
-#: qcsrc/common/notifications.qh:561
+#: qcsrc/common/notifications.qh:579
 msgid "^K1You killed your own dumb self!"
 msgstr "^K1Du hast dich selbst umgebracht, du Trottel!"
 
-#: qcsrc/common/notifications.qh:561
+#: qcsrc/common/notifications.qh:579
 msgid "^K1You need to be more careful!"
-msgstr ""
+msgstr "^K1Du musst vorsichtiger sein!"
 
-#: qcsrc/common/notifications.qh:562
+#: qcsrc/common/notifications.qh:580
 msgid "^K1You couldn't stand the heat!"
-msgstr ""
+msgstr "^K1Du konntest die Hitze nicht ertragen!"
 
-#: qcsrc/common/notifications.qh:563
+#: qcsrc/common/notifications.qh:581
 msgid "^K1Tastes like chicken!"
 msgstr "^K1Schmeckt nach McDonald's!"
 
-#: qcsrc/common/notifications.qh:563
+#: qcsrc/common/notifications.qh:581
 msgid "^K1You forgot to put the pin back in!"
 msgstr "^K1Du has vergessen, den Pin wieder reinzustecken!"
 
-#: qcsrc/common/notifications.qh:564
+#: qcsrc/common/notifications.qh:582
 msgid "^K1You are respawning for running out of ammo..."
-msgstr ""
+msgstr "^K1Du wirst wiederbelebt weil du keine Munition mehr hast..."
 
-#: qcsrc/common/notifications.qh:564
+#: qcsrc/common/notifications.qh:582
 msgid "^K1You were killed for running out of ammo..."
-msgstr ""
+msgstr "^K1Du wurdest getötet weil du keine Munition mehr hast..."
 
-#: qcsrc/common/notifications.qh:565
+#: qcsrc/common/notifications.qh:583
 msgid "^K1You grew too old without taking your medicine"
-msgstr ""
+msgstr "^1Du wurdest zu alt, und hast deine Medizin nicht genommen"
 
-#: qcsrc/common/notifications.qh:565
+#: qcsrc/common/notifications.qh:583
 msgid "^K1You need to preserve your health"
-msgstr ""
+msgstr "^1Du solltest deine Gesundheit erhalten"
 
-#: qcsrc/common/notifications.qh:566
+#: qcsrc/common/notifications.qh:584
 msgid "^K1You became a shooting star!"
-msgstr ""
+msgstr "^K1Du wurdest zur Sternschnuppe!"
 
-#: qcsrc/common/notifications.qh:567
+#: qcsrc/common/notifications.qh:585
 msgid "^K1You melted away in slime!"
-msgstr ""
+msgstr "^K1Du bist im Schleim zerschmolzen!"
 
-#: qcsrc/common/notifications.qh:568
+#: qcsrc/common/notifications.qh:586
 msgid "^K1You committed suicide!"
 msgstr "^K1Du hast Selbstmord begangen!"
 
-#: qcsrc/common/notifications.qh:568
+#: qcsrc/common/notifications.qh:586
 msgid "^K1You ended it all!"
 msgstr "^K1Du hast alles beendet!"
 
-#: qcsrc/common/notifications.qh:569
+#: qcsrc/common/notifications.qh:587
 msgid "^K1You got stuck in a swamp!"
 msgstr "^K1Du bist in einem Sumpf stecken geblieben!"
 
-#: qcsrc/common/notifications.qh:570
+#: qcsrc/common/notifications.qh:588
 #, c-format
 msgid "^BGYou are now on: %s"
 msgstr "^BGDu bist jetzt in: %s"
 
-#: qcsrc/common/notifications.qh:571
+#: qcsrc/common/notifications.qh:589
 msgid "^K1You died in an accident!"
 msgstr "^K1Du bist bei einem Unfall gestorben!"
 
-#: qcsrc/common/notifications.qh:572
+#: qcsrc/common/notifications.qh:590
 msgid "^K1You had an unfortunate run in with a turret!"
 msgstr "^K1Du hattest eine unglückliche Auseinandersetzung mit einem Geschütz!"
 
-#: qcsrc/common/notifications.qh:572
+#: qcsrc/common/notifications.qh:590
 msgid "^K1You were fragged by a turret!"
-msgstr ""
+msgstr "^K1Du wurdest von einem Geschütz getötet!"
 
-#: qcsrc/common/notifications.qh:573
+#: qcsrc/common/notifications.qh:591
 msgid "^K1You had an unfortunate run in with an eWheel turret!"
 msgstr ""
 "^K1Du hattest eine unglückliche Auseinandersetzung mit einem eWheel-Geschütz!"
 
-#: qcsrc/common/notifications.qh:573
+#: qcsrc/common/notifications.qh:591
 msgid "^K1You were fragged by an eWheel turret!"
-msgstr ""
+msgstr "^K1Du wurdest von einem eWheel-Geschütz getötet!"
 
-#: qcsrc/common/notifications.qh:574
+#: qcsrc/common/notifications.qh:592
 msgid "^K1You had an unfortunate run in with a Walker turret!"
 msgstr ""
 "^K1Du hattest eine unglückliche Auseinandersetzung mit einem Walker-Geschütz!"
 
-#: qcsrc/common/notifications.qh:574
+#: qcsrc/common/notifications.qh:592
 msgid "^K1You were fragged by a Walker turret!"
 msgstr "^K1Du wurdest von einem Walker-Geschütz getötet!"
 
-#: qcsrc/common/notifications.qh:575
+#: qcsrc/common/notifications.qh:593
 msgid "^K1You got caught in the blast of a Bumblebee explosion!"
-msgstr ""
+msgstr "^K1Du wurdest von der Explosion eines Bumblebees getötet!"
 
-#: qcsrc/common/notifications.qh:576
+#: qcsrc/common/notifications.qh:594
 msgid "^K1You were crushed by a vehicle!"
-msgstr ""
+msgstr "^K1Du wurdest von einem Fahrzeug zerquetscht!"
 
-#: qcsrc/common/notifications.qh:577
+#: qcsrc/common/notifications.qh:595
 msgid "^K1You were caught in a Raptor cluster bomb!"
 msgstr "^K1Du wurdest in Raptor-Streubomben gefangen!"
 
-#: qcsrc/common/notifications.qh:578
+#: qcsrc/common/notifications.qh:596
 msgid "^K1You got caught in the blast of a Raptor explosion!"
-msgstr ""
+msgstr "^K1Du wurdest von der Explosion eines Raptors getötet!"
 
-#: qcsrc/common/notifications.qh:579
+#: qcsrc/common/notifications.qh:597
 msgid "^K1You got caught in the blast of a Spiderbot explosion!"
-msgstr ""
+msgstr "^K1Du wurdest von der Explosion eines Spiderbots getötet!"
 
-#: qcsrc/common/notifications.qh:580
+#: qcsrc/common/notifications.qh:598
 msgid "^K1You were blasted to bits by a Spiderbot rocket!"
 msgstr "^K1Du wurdest von der Rakete eines Spiderbots in Stücke gesprengt!"
 
-#: qcsrc/common/notifications.qh:581
+#: qcsrc/common/notifications.qh:599
 msgid "^K1You got caught in the blast of a Racer explosion!"
-msgstr ""
+msgstr "^K1Du wurdest von der Explosion eines Racers getötet!"
 
-#: qcsrc/common/notifications.qh:582
+#: qcsrc/common/notifications.qh:600
 msgid "^K1You couldn't find shelter from a Racer rocket!"
 msgstr "^K1Du konntest keinen Schutz vor der Rakete eines Racers finden!"
 
-#: qcsrc/common/notifications.qh:583
+#: qcsrc/common/notifications.qh:601
 msgid "^K1Watch your step!"
 msgstr "^1Achte darauf, wo du hin trittst!"
 
-#: qcsrc/common/notifications.qh:584
+#: qcsrc/common/notifications.qh:602
 #, c-format
 msgid "^K1Moron! You fragged ^BG%s^K1, a team mate!"
 msgstr "^K1Idiot! Du hast ^BG%s^K1 getötet, einen Teamkollegen von dir!"
 
-#: qcsrc/common/notifications.qh:584
+#: qcsrc/common/notifications.qh:602
 #, c-format
 msgid "^K1Moron! You went against ^BG%s^K1, a team mate!"
 msgstr "^K1Idiot! Du hast ^BG%s^K1 getroffen, einen Teamkollegen von dir!"
 
-#: qcsrc/common/notifications.qh:585
+#: qcsrc/common/notifications.qh:603
 #, c-format
 msgid "^K1You were fragged by ^BG%s^K1, a team mate"
 msgstr "^K1Du wurdest von ^BG%s^K1, einem Teamkollegen, getötet"
 
-#: qcsrc/common/notifications.qh:585
+#: qcsrc/common/notifications.qh:603
 #, c-format
 msgid "^K1You were scored against by ^BG%s^K1, a team mate"
 msgstr "^BG%s^K1, ein Teamkollege, hat gegen dich gepunktet"
 
-#: qcsrc/common/notifications.qh:586
+#: qcsrc/common/notifications.qh:604
 msgid ""
 "^K1Stop idling!\n"
 "^BGDisconnecting in ^COUNT..."
@@ -2693,48 +2700,48 @@ msgstr ""
 "^K1Stehe nicht herum!\n"
 "^BGDie Verbindung wird in ^COUNT getrennt..."
 
-#: qcsrc/common/notifications.qh:587
+#: qcsrc/common/notifications.qh:605
 msgid "^F2You picked up some extra lives"
 msgstr "^F2Du hast einige extra Leben aufgehoben"
 
-#: qcsrc/common/notifications.qh:588
+#: qcsrc/common/notifications.qh:606
 #, c-format
 msgid "^K3You froze ^BG%s"
 msgstr "^K3Du hast ^BG%s ^K3eingefroren"
 
-#: qcsrc/common/notifications.qh:589
+#: qcsrc/common/notifications.qh:607
 #, c-format
 msgid "^K1You were frozen by ^BG%s"
 msgstr "^K1Du wurdest von ^BG%s eingefroren"
 
-#: qcsrc/common/notifications.qh:590
+#: qcsrc/common/notifications.qh:608
 #, c-format
 msgid "^K3You revived ^BG%s"
 msgstr "^K3Du hast ^BG%s ^K3wiederbelebt"
 
-#: qcsrc/common/notifications.qh:591
+#: qcsrc/common/notifications.qh:609
 msgid "^K3You revived yourself"
 msgstr "^K3Du hast dich selbst wiederbelebt"
 
-#: qcsrc/common/notifications.qh:592
+#: qcsrc/common/notifications.qh:610
 #, c-format
 msgid "^K3You were revived by ^BG%s"
 msgstr "^K3Du wurdest von ^BG%s ^K3wiederbelebt"
 
-#: qcsrc/common/notifications.qh:593
+#: qcsrc/common/notifications.qh:611
 #, c-format
 msgid "^K3You were automatically revived after %s second(s)"
-msgstr ""
+msgstr "^K3Du wurdest automatisch nach %s Sekunde(n) wiederbelebt"
 
-#: qcsrc/common/notifications.qh:596
+#: qcsrc/common/notifications.qh:614
 msgid "^K1You froze yourself"
 msgstr "^K1Du hast dich selbst eingefroren"
 
-#: qcsrc/common/notifications.qh:597
+#: qcsrc/common/notifications.qh:615
 msgid "^K1Round already started, you spawn as frozen"
 msgstr "^K1Die Runde hat bereits begonnen, du spawnst eingefroren"
 
-#: qcsrc/common/notifications.qh:604
+#: qcsrc/common/notifications.qh:622
 msgid ""
 "^K1No spawnpoints available!\n"
 "Hope your team can fix it..."
@@ -2742,7 +2749,7 @@ msgstr ""
 "^K1Keine Spawnpunkte frei!\n"
 "Hoffentlich schafft es dein Team..."
 
-#: qcsrc/common/notifications.qh:605
+#: qcsrc/common/notifications.qh:623
 msgid ""
 "^K1You may not join the game at this time.\n"
 "The player limit reached maximum capacity."
@@ -2750,12 +2757,12 @@ msgstr ""
 "^K1Du kannst dem Spiel momentan nicht beitreten.\n"
 "Die maximale Anzahl an Spielern ist bereits erreicht."
 
-#: qcsrc/common/notifications.qh:608
+#: qcsrc/common/notifications.qh:626
 msgid "^BGKilling people while you don't have the ball gives no points!"
 msgstr ""
 "^BGSpieler zu töten, während du den Ball nicht hast, bring dir keine Punkte!"
 
-#: qcsrc/common/notifications.qh:609
+#: qcsrc/common/notifications.qh:627
 msgid ""
 "^BGAll keys are in your team's hands!\n"
 "Help the key carriers to meet!"
@@ -2763,7 +2770,7 @@ msgstr ""
 "^BGAlle Schlüssel sind in der Hand deines Teams!\n"
 "Hilf den Schlüsselträgern sich zu treffen!"
 
-#: qcsrc/common/notifications.qh:610
+#: qcsrc/common/notifications.qh:628
 msgid ""
 "^BGAll keys are in ^TC^TT team^BG's hands!\n"
 "Interfere ^F4NOW^BG!"
@@ -2771,7 +2778,7 @@ msgstr ""
 "^BGAlle Schlüssel sind in der Hand des ^TC^TT Teams^BG!\n"
 "Greife ^F4SOFORT ^BGein!"
 
-#: qcsrc/common/notifications.qh:611
+#: qcsrc/common/notifications.qh:629
 msgid ""
 "^BGAll keys are in your team's hands!\n"
 "Meet the other key carriers ^F4NOW^BG!"
@@ -2779,19 +2786,19 @@ msgstr ""
 "^BGAlle Schlüssel sind in der Hand deines Teams!\n"
 "Treffe dich mit den anderen Schlüsselträgern ^F4JETZT^BG!"
 
-#: qcsrc/common/notifications.qh:612
+#: qcsrc/common/notifications.qh:630
 msgid "^F4Round will start in ^COUNT"
 msgstr "^F4Die Runde beginnt in ^COUNT"
 
-#: qcsrc/common/notifications.qh:613
+#: qcsrc/common/notifications.qh:631
 msgid "^BGScanning frequency range..."
 msgstr "^BGFrequenzbereich wird gescannt..."
 
-#: qcsrc/common/notifications.qh:614
+#: qcsrc/common/notifications.qh:632
 msgid "^BGYou are starting with the ^TC^TT Key"
 msgstr "^BGDu beginnst mit dem ^TC^TT Schlüssel"
 
-#: qcsrc/common/notifications.qh:615 qcsrc/common/notifications.qh:616
+#: qcsrc/common/notifications.qh:633 qcsrc/common/notifications.qh:634
 #, c-format
 msgid ""
 "^BGWaiting for players to join...\n"
@@ -2800,38 +2807,38 @@ msgstr ""
 "^BGEs wird auf weitere Spieler gewartet...\n"
 "Benötigte Spieler: %s"
 
-#: qcsrc/common/notifications.qh:617
+#: qcsrc/common/notifications.qh:635
 #, c-format
 msgid "^BGWaiting for %s player(s) to join..."
 msgstr "^BGEs wird auf %s Spieler gewartet..."
 
-#: qcsrc/common/notifications.qh:618
+#: qcsrc/common/notifications.qh:636
 msgid "^F4^COUNT^BG left to find some ammo!"
 msgstr "^F4^COUNT^BG haben das Spiel verlassen, um etwas Munition zu finden!"
 
-#: qcsrc/common/notifications.qh:619
+#: qcsrc/common/notifications.qh:637
 msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
 msgstr "^BGFinde etwas Munition oder du stirbst in ^F4^COUNT^BG!"
 
-#: qcsrc/common/notifications.qh:619
+#: qcsrc/common/notifications.qh:637
 msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
 msgstr "^BGFinde etwas Munition! ^F4^COUNT^BG übrig!"
 
-#: qcsrc/common/notifications.qh:620
+#: qcsrc/common/notifications.qh:638
 #, c-format
 msgid "^F2Extra lives remaining: ^K1%s"
 msgstr "^F2Extra Leben übrig: ^K1%s"
 
-#: qcsrc/common/notifications.qh:621
+#: qcsrc/common/notifications.qh:639
 msgid "^BGSecondary fire inflicts no damage!"
 msgstr "^BGIndirekter Beschuss bewirkt keinen Schaden!"
 
-#: qcsrc/common/notifications.qh:622
+#: qcsrc/common/notifications.qh:640
 #, c-format
 msgid "^BG%s"
 msgstr "^BG%s"
 
-#: qcsrc/common/notifications.qh:623
+#: qcsrc/common/notifications.qh:641
 #, c-format
 msgid ""
 "^F2^COUNT^BG until weapon change...\n"
@@ -2840,16 +2847,16 @@ msgstr ""
 "^F2^COUNT^BG bis zum Waffenwechsel...\n"
 "Nächste Waffe: ^F1%s"
 
-#: qcsrc/common/notifications.qh:624
+#: qcsrc/common/notifications.qh:642
 #, c-format
 msgid "^F2Active weapon: ^F1%s"
 msgstr "^F2Aktive Waffe: ^F1%s"
 
-#: qcsrc/common/notifications.qh:625
+#: qcsrc/common/notifications.qh:643
 msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
 msgstr "^BGDrücke ^F2DROPWEAPON^BG erneut um die Granate zu werfen!"
 
-#: qcsrc/common/notifications.qh:626
+#: qcsrc/common/notifications.qh:644
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "Keep fragging until we have a winner!"
@@ -2857,7 +2864,7 @@ msgstr ""
 "^F4VERLÄNGERUNG^F2!\n"
 "Töte weiter, bis wir einen Gewinner haben!"
 
-#: qcsrc/common/notifications.qh:626
+#: qcsrc/common/notifications.qh:644
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "Keep scoring until we have a winner!"
@@ -2865,7 +2872,7 @@ msgstr ""
 "^F4VERLÄNGERUNG^F2!\n"
 "Punkte weiter, bis wir einen Gewinner haben!"
 
-#: qcsrc/common/notifications.qh:627
+#: qcsrc/common/notifications.qh:645
 #, c-format
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
@@ -2874,210 +2881,210 @@ msgstr ""
 "^F4VERLÄNGERUNG^F2!\n"
 "^F4%s ^BGwurde zum Spiel hinzugefügt!"
 
-#: qcsrc/common/notifications.qh:628
+#: qcsrc/common/notifications.qh:646
 msgid "^F2Invisibility has worn off"
 msgstr "^F2Die Unsichtbarkeit ist wieder verschwunden"
 
-#: qcsrc/common/notifications.qh:629
+#: qcsrc/common/notifications.qh:647
 msgid "^F2Shield has worn off"
 msgstr "^F2Das Schild ist wieder verschwunden"
 
-#: qcsrc/common/notifications.qh:630
+#: qcsrc/common/notifications.qh:648
 msgid "^F2Speed has worn off"
 msgstr "^F2Der Geschwindigkeitsbonus ist wieder verschwunden"
 
-#: qcsrc/common/notifications.qh:631
+#: qcsrc/common/notifications.qh:649
 msgid "^F2Strength has worn off"
 msgstr "^F2Die Stärke ist wieder verschwunden"
 
-#: qcsrc/common/notifications.qh:632
+#: qcsrc/common/notifications.qh:650
 msgid "^F2You are invisible"
 msgstr "^F2Du bist unsichtbar"
 
-#: qcsrc/common/notifications.qh:633
+#: qcsrc/common/notifications.qh:651
 msgid "^F2Shield surrounds you"
 msgstr "^F2Ein Schild umgibt dich"
 
-#: qcsrc/common/notifications.qh:634
+#: qcsrc/common/notifications.qh:652
 msgid "^F2You are on speed"
 msgstr "^F2Du bist auf Speed"
 
-#: qcsrc/common/notifications.qh:635
+#: qcsrc/common/notifications.qh:653
 msgid "^F2Strength infuses your weapons with devastating power"
 msgstr "^F2Stärke erfüllt deine Waffen mit unschlagbarer Kraft"
 
-#: qcsrc/common/notifications.qh:636
+#: qcsrc/common/notifications.qh:654
 msgid "^F2The race is over, finish your lap!"
 msgstr "^F2Das Rennen ist vorbei, beende deine Runde!"
 
-#: qcsrc/common/notifications.qh:637
+#: qcsrc/common/notifications.qh:655
 msgid "^F2Superweapons have broken down"
 msgstr "^F2Die Superwaffen wurden zerstört"
 
-#: qcsrc/common/notifications.qh:638
+#: qcsrc/common/notifications.qh:656
 msgid "^F2Superweapons have been lost"
 msgstr "^F2Die Superwaffen sind verloren gegangen"
 
-#: qcsrc/common/notifications.qh:639
+#: qcsrc/common/notifications.qh:657
 msgid "^F2You now have a superweapon"
 msgstr "^F2Du hast jetzt eine Superwaffe"
 
-#: qcsrc/common/notifications.qh:640
+#: qcsrc/common/notifications.qh:658
 msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
 msgstr "^K1Dein Team wird zu ^TC^TT^K1 geändert in ^COUNT"
 
-#: qcsrc/common/notifications.qh:641
+#: qcsrc/common/notifications.qh:659
 msgid "^K1Changing team in ^COUNT"
 msgstr "^K1Dein Team wird geändert in ^COUNT"
 
-#: qcsrc/common/notifications.qh:642
+#: qcsrc/common/notifications.qh:660
 msgid "^K1Spectating in ^COUNT"
 msgstr "^K1Du schaust zu in ^COUNT"
 
-#: qcsrc/common/notifications.qh:643
+#: qcsrc/common/notifications.qh:661
 msgid "^K1Suicide in ^COUNT"
 msgstr "^K1Selbstmord in ^COUNT"
 
-#: qcsrc/common/notifications.qh:644
+#: qcsrc/common/notifications.qh:662
 msgid "^F4Timeout begins in ^COUNT"
 msgstr "^F4Timeout beginnt in ^COUNT"
 
-#: qcsrc/common/notifications.qh:645
+#: qcsrc/common/notifications.qh:663
 msgid "^F4Timeout ends in ^COUNT"
 msgstr "^F4Timeout endet in ^COUNT"
 
-#: qcsrc/common/notifications.qh:907 qcsrc/common/notifications.qh:908
+#: qcsrc/common/notifications.qh:937 qcsrc/common/notifications.qh:938
 #, c-format
 msgid " (near %s)"
 msgstr " (nahe %s)"
 
-#: qcsrc/common/notifications.qh:915 qcsrc/common/notifications.qh:916
+#: qcsrc/common/notifications.qh:945 qcsrc/common/notifications.qh:946
 msgid "primary"
 msgstr "primär"
 
-#: qcsrc/common/notifications.qh:915 qcsrc/common/notifications.qh:916
+#: qcsrc/common/notifications.qh:945 qcsrc/common/notifications.qh:946
 msgid "secondary"
 msgstr "sekundär"
 
-#: qcsrc/common/notifications.qh:926
+#: qcsrc/common/notifications.qh:956
 #, c-format
 msgid " ^F1(Press %s)"
 msgstr " ^F1(Drücke %s)"
 
-#: qcsrc/common/notifications.qh:935
+#: qcsrc/common/notifications.qh:965
 #, c-format
 msgid " with %s"
 msgstr " mit %s"
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 #, c-format
 msgid "%s^K1 made a TRIPLE FRAG! %s^BG"
 msgstr "%s^K1 hat einen TRIPLE FRAG geschafft! %s^BG"
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 #, c-format
 msgid "%s^K1 made a TRIPLE SCORE! %s^BG"
 msgstr "%s^K1 hat einen TRIPLE SCORE geschafft! %s^BG"
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 msgid "TRIPLE FRAG! "
 msgstr "TRIPLE FRAG! "
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 #, c-format
 msgid "%s^K1 made FIVE SCORES IN A ROW! %s^BG"
 msgstr "%s^K1 hat 5 PUNKTE HINTEREINANDER erreicht! %s^BG"
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 #, c-format
 msgid "%s^K1 unlocked RAGE! %s^BG"
 msgstr "%s^K1 ist in RAGE! %s^BG"
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 msgid "RAGE! "
 msgstr "RAGE! "
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 #, c-format
 msgid "%s^K1 made TEN SCORES IN A ROW! %s^BG"
 msgstr "%s^K1 hat 10 PUNKTE HINTEREINANDER erreicht! %s^BG"
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 #, c-format
 msgid "%s^K1 started a MASSACRE! %s^BG"
 msgstr "%s^K1 hat ein MASSAKER angefangen! %s^BG"
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 msgid "MASSACRE! "
 msgstr "MASSAKER! "
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 #, c-format
 msgid "%s^K1 executed MAYHEM! %s^BG"
 msgstr "%s^K1 hat ein CHAOS angerichtet! %s^BG"
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 #, c-format
 msgid "%s^K1 made FIFTEEN SCORES IN A ROW! %s^BG"
 msgstr "%s^K1 hat 15 PUNKTE HINTEREINANDER erreicht! %s^BG"
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 msgid "MAYHEM! "
 msgstr "CHAOS! "
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 #, c-format
 msgid "%s^K1 is a BERSERKER! %s^BG"
 msgstr "%s^K1 ist ein BERSERKER! %s^BG"
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 #, c-format
 msgid "%s^K1 made TWENTY SCORES IN A ROW! %s^BG"
 msgstr "%s^K1 hat 20 PUNKTE HINTEREINANDER erreicht! %s^BG"
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 msgid "BERSERKER! "
 msgstr "BERSERKER! "
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 #, c-format
 msgid "%s^K1 inflicts CARNAGE! %s^BG"
 msgstr "%s^K1 verursacht ein GEMETZEL! %s^BG"
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 #, c-format
 msgid "%s^K1 made TWENTY FIVE SCORES IN A ROW! %s^BG"
 msgstr "%s^K1 hat 25 PUNKTE HINTEREINANDER erreicht! %s^BG"
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 msgid "CARNAGE! "
 msgstr "GEMETZEL! "
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 #, c-format
 msgid "%s^K1 made THIRTY SCORES IN A ROW! %s^BG"
 msgstr "%s^K1 hat 30 PUNKTE HINTEREINANDER erreicht! %s^BG"
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 #, c-format
 msgid "%s^K1 unleashes ARMAGEDDON! %s^BG"
 msgstr "%s^K1 verursacht einen WELTUNTERGANG! %s^BG"
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 msgid "ARMAGEDDON! "
 msgstr "WELTUNTERGANG! "
 
-#: qcsrc/common/notifications.qh:956
+#: qcsrc/common/notifications.qh:986
 #, c-format
 msgid "%s(^F1Bot^BG)"
 msgstr "%s(^F1Bot^BG)"
 
-#: qcsrc/common/notifications.qh:958
+#: qcsrc/common/notifications.qh:988
 #, c-format
 msgid "%s(Ping ^F1%d^BG)"
 msgstr "%s(Ping ^F1%d^BG)"
 
-#: qcsrc/common/notifications.qh:964
+#: qcsrc/common/notifications.qh:994
 #, c-format
 msgid ""
 "\n"
@@ -3086,7 +3093,7 @@ msgstr ""
 "\n"
 "(Gesundheit ^1%d^BG / Rüstung ^2%d^BG)%s"
 
-#: qcsrc/common/notifications.qh:966
+#: qcsrc/common/notifications.qh:996
 #, c-format
 msgid ""
 "\n"
@@ -3095,71 +3102,71 @@ msgstr ""
 "\n"
 "(^F4Tot^BG)%s"
 
-#: qcsrc/common/notifications.qh:1003 qcsrc/common/notifications.qh:1016
+#: qcsrc/common/notifications.qh:1033 qcsrc/common/notifications.qh:1046
 #, c-format
 msgid "%d score spree! "
 msgstr "%d Punkte hintereinander! "
 
-#: qcsrc/common/notifications.qh:1015
+#: qcsrc/common/notifications.qh:1045
 #, c-format
 msgid "%d frag spree! "
 msgstr "%d Tötungen hintereinander! "
 
-#: qcsrc/common/notifications.qh:1028
+#: qcsrc/common/notifications.qh:1058
 msgid "First blood! "
-msgstr ""
+msgstr "Erster Kill!"
 
-#: qcsrc/common/notifications.qh:1028
+#: qcsrc/common/notifications.qh:1058
 msgid "First score! "
 msgstr "Erster Punkt! "
 
-#: qcsrc/common/notifications.qh:1032
+#: qcsrc/common/notifications.qh:1062
 msgid "First casualty! "
 msgstr "Erster Kollateralschaden! "
 
-#: qcsrc/common/notifications.qh:1032
+#: qcsrc/common/notifications.qh:1062
 msgid "First victim! "
 msgstr "Erstes Opfer! "
 
-#: qcsrc/common/notifications.qh:1073
+#: qcsrc/common/notifications.qh:1103
 #, c-format
 msgid "%s^K1 has %d frags in a row! %s^BG"
 msgstr "%s^K1 hat %d Kills hintereinander! %s^BG"
 
-#: qcsrc/common/notifications.qh:1074
+#: qcsrc/common/notifications.qh:1104
 #, c-format
 msgid "%s^K1 made %d scores in a row! %s^BG"
-msgstr ""
+msgstr "%s^K1 hat %d Punkte in Serie erreicht! %s^BG"
 
-#: qcsrc/common/notifications.qh:1092
+#: qcsrc/common/notifications.qh:1122
 #, c-format
 msgid "%s^K1 drew first blood! %s^BG"
 msgstr "%s^K1 hat den ersten Kill! %s^BG"
 
-#: qcsrc/common/notifications.qh:1093
+#: qcsrc/common/notifications.qh:1123
 #, c-format
 msgid "%s^K1 got the first score! %s^BG"
 msgstr "%s^K1 hat den ersten Punkt! %s^BG"
 
-#: qcsrc/common/notifications.qh:1109
+#: qcsrc/common/notifications.qh:1139
 #, c-format
 msgid ", ending their %d frag spree"
-msgstr ""
+msgstr ", und beendet seinen Lauf von %d Tötungen"
 
-#: qcsrc/common/notifications.qh:1110
+#: qcsrc/common/notifications.qh:1140
 #, c-format
 msgid ", ending their %d score spree"
-msgstr ""
+msgstr ", und beendet seinen Lauf von %d Punkten"
 
-#: qcsrc/common/notifications.qh:1124
+#: qcsrc/common/notifications.qh:1154
 #, c-format
 msgid ", losing their %d frag spree"
-msgstr ""
+msgstr ", und verliert seinen Lauf von %d Tötungen"
 
-#: qcsrc/common/notifications.qh:1125
+#: qcsrc/common/notifications.qh:1155
 #, c-format
 msgid ", losing their %d score spree"
-msgstr ""
+msgstr ", und verliert seinen Lauf von %d Punkten"
 
 #: qcsrc/common/teams.qh:26
 msgid "Red"
@@ -3195,7 +3202,7 @@ msgstr "  sync - lädt alle Variablen auf der aktuellen Menüseite neu\n"
 
 #: qcsrc/menu/command/menu_cmd.qc:37
 msgid "  directmenu ITEM - select a menu item as main item\n"
-msgstr ""
+msgstr "directmenu ELEMENT - springt zu einem Menüelement\n"
 
 #: qcsrc/menu/command/menu_cmd.qc:62
 msgid "Available options:\n"
@@ -3211,6 +3218,8 @@ msgstr ""
 #, c-format
 msgid "NOTE: label text %s too wide for label, condensed by factor %f\n"
 msgstr ""
+"HINWEIS: Text %s ist zu weit für das Textfeld, der Text wurde um einen "
+"Faktor %f gestaucht\n"
 
 #: qcsrc/menu/item/listbox.c:302
 #, c-format
@@ -3222,11 +3231,11 @@ msgstr "Eintrag %d"
 msgid "%d (%s)"
 msgstr "%d (%s)"
 
-#: qcsrc/menu/item/textslider.c:29 qcsrc/menu/item/textslider.c:31
+#: qcsrc/menu/item/textslider.c:31 qcsrc/menu/item/textslider.c:33
 msgid "custom"
 msgstr "benutzerdefiniert"
 
-#: qcsrc/menu/menu.qc:56
+#: qcsrc/menu/menu.qc:59
 #, c-format
 msgid "^4MQC Build information: ^1%s\n"
 msgstr "^4MQC Build-Information: ^1%s\n"
@@ -3273,7 +3282,7 @@ msgstr "Entwickler"
 #: 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_sandboxtools.c:89
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:90
 #: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:77
 #: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:21
 msgid "OK"
@@ -3329,33 +3338,33 @@ msgstr "Einstellungen speichern"
 msgid "Ammo Panel"
 msgstr "Munitons-Panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:23
 msgid "Ammunition display:"
 msgstr "Munitionsanzeige:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:26
 msgid "Show only current ammo type"
 msgstr "Nur aktuellen Munitionstyp anzeigen"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
 msgid "Align icon:"
 msgstr "Icon ausrichten:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:36
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:28
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:40
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:28
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:40
-msgid "Left"
-msgstr "Links"
-
 #: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:30
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:38
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:29
 #: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:41
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:29
 #: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:41
+msgid "Left"
+msgstr "Links"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:42
 msgid "Right"
 msgstr "Rechts"
 
@@ -3363,28 +3372,28 @@ msgstr "Rechts"
 msgid "Centerprint"
 msgstr "Nachrichten"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:24
 msgid "Message duration:"
 msgstr "Anzeigedauer:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:27
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:28
 msgid "Fade time:"
 msgstr "Ausblenden nach:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:32
 msgid "Flip messages order"
 msgstr "Reihenfolge vertauschen"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:34
 msgid "Text alignment:"
 msgstr "Textausrichtung:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:38
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:51
 msgid "Center"
 msgstr "Mittig"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:41
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:42
 msgid "Font scale:"
 msgstr "Schriftgröße:"
 
@@ -3392,19 +3401,19 @@ msgstr "Schriftgröße:"
 msgid "Chat Panel"
 msgstr "Chat-Panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:23
 msgid "Chat entries:"
 msgstr "Chat-Zeilen:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:26
 msgid "Chat size:"
 msgstr "Chat-Größe:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:30
 msgid "Chat lifetime:"
 msgstr "Chat-Sichtbarkeit:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:34
 msgid "Chat beep sound"
 msgstr "Chat-Piepton"
 
@@ -3412,11 +3421,11 @@ msgstr "Chat-Piepton"
 msgid "Engine Info Panel"
 msgstr "Engine-Info-Panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:23
 msgid "Engine info:"
 msgstr "Engine-Info:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:26
 msgid "Use an averaging algorithm for fps"
 msgstr "Zeige einen Durchschnittswert für fps"
 
@@ -3424,36 +3433,36 @@ msgstr "Zeige einen Durchschnittswert für fps"
 msgid "Health/Armor Panel"
 msgstr "Health/Armor-Panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:22
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:23
 msgid "Enable status bar"
 msgstr "Statusleiste anzeigen"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:24
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:25
 msgid "Status bar alignment:"
-msgstr ""
+msgstr "Statusleisten-Ausrichtung:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:32
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:42
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:32
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:43
 msgid "Inward"
 msgstr "Innen"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:34
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:43
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:34
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:44
 msgid "Outward"
 msgstr "Außen"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:37
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:38
 msgid "Icon alignment:"
 msgstr "Iconausrichtung:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:46
 msgid "Flip health and armor positions"
 msgstr "Health und Armor tauschen"
 
@@ -3461,11 +3470,11 @@ msgstr "Health und Armor tauschen"
 msgid "Info Messages Panel"
 msgstr "Informations-Panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:23
 msgid "Info messages:"
 msgstr "Informationen:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:26
 msgid "Flip align"
 msgstr "Ausrichtung tauschen"
 
@@ -3477,23 +3486,23 @@ msgstr "Mod-Symbole-Panel"
 msgid "Notification Panel"
 msgstr "Anzeige-Panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:23
 msgid "Notifications:"
 msgstr "Anzeige:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:26
 msgid "Also print notifications to the console"
 msgstr "Benachrichtigungen auch auf der Konsole ausgeben"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:29
 msgid "Flip notify order"
 msgstr "Scrollrichtung vertauschen"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:32
 msgid "Entry lifetime:"
 msgstr "Eintrags-Sichtbarkeit:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:36
 msgid "Entry fadetime:"
 msgstr "Eintrags-Ausblendung:"
 
@@ -3501,96 +3510,96 @@ msgstr "Eintrags-Ausblendung:"
 msgid "Physics Panel"
 msgstr "Physik-Panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:22
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:22
 msgid "Panel disabled"
 msgstr "Panel nicht anzeigen"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
 msgid "Panel enabled"
 msgstr "Panel anzeigen"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
 msgid "Panel enabled even observing"
 msgstr "Panel auch beim Zuschauen anzeigen"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:26
 msgid "Panel enabled only in Race/CTS"
 msgstr "Panel nur in Race und CTS anzeigen"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:32
 msgid "Status bar"
 msgstr "Statusleiste"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:49
 msgid "Left align"
 msgstr "Links"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:53
 msgid "Right align"
 msgstr "Rechts"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
 msgid "Inward align"
 msgstr "Innen"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:37
 msgid "Outward align"
 msgstr "Außen"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:41
 msgid "Flip speed/acceleration positions"
 msgstr "Geschwindigkeit/Beschleunigung tauschen"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
 #: qcsrc/menu/xonotic/dialog_settings_misc.c:29
 msgid "Speed:"
 msgstr "Geschwindigkeit:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:46
 msgid "Include vertical speed"
 msgstr "Mit vertikaler Geschwindigkeit"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:56
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:57
 msgid "Speed unit:"
 msgstr "Geschwindigkeitseinheit:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:58
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
 msgid "qu/s"
 msgstr "qu/s"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
 msgid "m/s"
 msgstr "m/s"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
 msgid "km/h"
 msgstr "km/h"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
 msgid "mph"
 msgstr "mph"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:63
 msgid "knots"
 msgstr "Knoten"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:64
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:65
 msgid "Show"
 msgstr "Anzeigen"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:67
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:68
 msgid "Top speed"
 msgstr "Geschwindigkeitsrekord"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:73
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
 msgid "Acceleration:"
 msgstr "Beschleunigung:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:75
 msgid "Include vertical acceleration"
 msgstr "Mit vertikaler Beschleunigung"
 
@@ -3598,7 +3607,7 @@ msgstr "Mit vertikaler Beschleunigung"
 msgid "Powerups Panel"
 msgstr "Powerup-Panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:46
 msgid "Flip strength and shield positions"
 msgstr "Strength und Shield vertauschen"
 
@@ -3606,16 +3615,16 @@ msgstr "Strength und Shield vertauschen"
 msgid "Pressed Keys Panel"
 msgstr "Gedrückte-Tasten-Panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
 msgid "Panel enabled when spectating"
 msgstr "Panel beim Zuschauen anzeigen"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:24
 msgid "Panel always enabled"
 msgstr "Panel immer anzeigen"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:31
 msgid "Forced aspect:"
 msgstr "Aspektverhältnis:"
 
@@ -3627,68 +3636,68 @@ msgstr "Rundenzeit-Panel"
 msgid "Radar Panel"
 msgstr "Radar-Panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
 msgid "Panel enabled in teamgames"
 msgstr "Panel in Team-Spieltypen aktivieren"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:30
 msgid "Radar:"
 msgstr "Radar:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:32
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:43
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:82
+#: 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
 msgid "Alpha:"
 msgstr "Alpha:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:37
 msgid "Rotation:"
 msgstr "Drehung:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:39
 msgid "Forward"
 msgstr "Vorwärts"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:40
 msgid "West"
 msgstr "West"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:41
 msgid "South"
 msgstr "Süd"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:41
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:42
 msgid "East"
 msgstr "Ost"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:43
 msgid "North"
 msgstr "Nord"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:46
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:47
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:63
 msgid "Scale:"
 msgstr "Skalierung:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:50
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:51
 msgid "Zoom mode:"
 msgstr "Zoom-Modus:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:52
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:53
 msgid "Zoomed in"
 msgstr "Vergrößert"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:53
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:54
 msgid "Zoomed out"
 msgstr "Verkleinert"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:54
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:55
 msgid "Always zoomed"
 msgstr "Immer vergrößert"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:55
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:56
 msgid "Never zoomed"
 msgstr "Nie vergrößert"
 
@@ -3696,23 +3705,23 @@ msgstr "Nie vergrößert"
 msgid "Score Panel"
 msgstr "Punkte-Panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:23
 msgid "Score:"
 msgstr "Punkte:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
 msgid "Rankings:"
 msgstr "Platzierungen:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
 msgid "Off"
 msgstr "Aus"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
 msgid "And me"
 msgstr "Auch für mich"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:29
 msgid "Pure"
 msgstr "Rein"
 
@@ -3720,11 +3729,11 @@ msgstr "Rein"
 msgid "Timer Panel"
 msgstr "Zeit-Panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:23
 msgid "Timer:"
 msgstr "Zeit:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:26
 msgid "Show elapsed time"
 msgstr "Vergangene Zeit anzeigen"
 
@@ -3732,7 +3741,7 @@ msgstr "Vergangene Zeit anzeigen"
 msgid "Vote Panel"
 msgstr "Abstimmungs-Panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:23
 msgid "Alpha after voting:"
 msgstr "Alpha nach Abstimmung:"
 
@@ -3740,76 +3749,76 @@ msgstr "Alpha nach Abstimmung:"
 msgid "Weapons Panel"
 msgstr "Waffen-Panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:25
 msgid "Fade out after:"
 msgstr "Ausblenden nach:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:26
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:27
 msgid "Never"
 msgstr "Nie"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:29
 #, c-format
 msgid "%ds"
 msgstr "%ds"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:32
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:33
 msgid "Fade effect:"
 msgstr "Ausblendeeffekt:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
 msgid "EF^None"
 msgstr "EF^Keiner"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:37
 msgid "Alpha"
 msgstr "Alpha"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
 msgid "Slide"
 msgstr "Schieben"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:39
 msgid "EF^Both"
 msgstr "EF^Beide"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:43
 msgid "Weapon icons:"
 msgstr "Waffensymbole:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46
 msgid "Show only owned weapons"
 msgstr "Nur vorhandene Waffen zeigen"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:48
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
 msgid "Show weapon ID as:"
 msgstr "Waffen-ID zeigen als:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
 msgid "SHOWAS^None"
 msgstr "SHOWAS^Nichts"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
 msgid "Number"
 msgstr "Zahl"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:52
 msgid "Bind"
 msgstr "Taste"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:54
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
 msgid "Show Accuracy"
 msgstr "Trefferquote zeigen"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:56
 msgid "Show Ammo"
 msgstr "Munition zeigen"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:58
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:59
 msgid "Ammo bar color:"
 msgstr "Muntionsleistenfarbe:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:64
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:65
 msgid "Ammo bar alpha:"
 msgstr "Munitionsleistenalpha:"
 
@@ -3817,85 +3826,85 @@ msgstr "Munitionsleistenalpha:"
 msgid "Panel HUD Setup"
 msgstr "HUD-Konfiguration"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:21
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:22
 msgid "Panel background defaults:"
 msgstr "Panel-Standardhintergrund:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:23 qcsrc/menu/xonotic/util.qc:683
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:24 qcsrc/menu/xonotic/util.qc:683
 msgid "Background:"
 msgstr "Hintergrund:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:25
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:37
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:52
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:686
+#: 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
 msgid "Disable"
 msgstr "Aus"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:30
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:691
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:31
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:78 qcsrc/menu/xonotic/util.qc:691
 msgid "Color:"
 msgstr "Farbe:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:699
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:36 qcsrc/menu/xonotic/util.qc:699
 msgid "Border size:"
 msgstr "Rahmengröße:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:50
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:89
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:51
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:90
 msgid "Team color:"
 msgstr "Teamfarbe:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:725
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:59 qcsrc/menu/xonotic/util.qc:725
 msgid "Test team color in configure mode"
 msgstr "Teamfarbe bei Konfiguration testen"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:728
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:62 qcsrc/menu/xonotic/util.qc:728
 msgid "Padding:"
 msgstr "Abstand:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:68
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:69
 msgid "HUD Dock:"
 msgstr "HUD-Dock:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:70
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71
 msgid "DOCK^Disabled"
 msgstr "Aus"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72
 msgid "DOCK^Small"
 msgstr "DOCK^Klein"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73
 msgid "DOCK^Medium"
 msgstr "Mittel"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:74
 msgid "DOCK^Large"
 msgstr "Groß"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:96
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:97
 msgid "Grid settings:"
 msgstr "Gitter:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:99
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:100
 msgid "Snap panels to grid"
 msgstr "Panels am Gitter ausrichten"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:102
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:103
 msgid "Grid size:"
 msgstr "Gitterweite:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:103
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:104
 msgid "X:"
 msgstr "X:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:109
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:110
 msgid "Y:"
 msgstr "Y:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:117
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:118
 msgid "Exit setup"
 msgstr "Verlassen"
 
@@ -4138,7 +4147,7 @@ msgstr "Map-Information"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49
 msgid "Full item placement"
-msgstr ""
+msgstr "Mit allen Items"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49
 msgid "MinstaGib only"
@@ -4480,13 +4489,13 @@ msgid "Key:"
 msgstr "Schlüssel:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:61
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:19
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:20
 msgid "Model:"
 msgstr "Modell:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:73
 msgid "Glowing color:"
-msgstr ""
+msgstr "Leuchtfarbe:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:82
 msgid "Detail color:"
@@ -4855,127 +4864,127 @@ msgstr "Nein"
 msgid "Sandbox Tools"
 msgstr "Sandbox-Tools"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:24
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:25
 msgid "Spawn"
 msgstr "Neu"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:25
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:26
 msgid "Remove *"
 msgstr "Entfernen *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:27
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:28
 msgid "Copy *"
 msgstr "Kopieren *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:28
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:29
 msgid "Paste"
 msgstr "Einfügen"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:30
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:31
 msgid "Bone:"
 msgstr "Knochen:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:35
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:36
 msgid "Set * as child"
 msgstr "* als Kind festlegen"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:36
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:37
 msgid "Attach to *"
 msgstr "An * anhängen"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:38
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:39
 msgid "Detach from *"
 msgstr "Von * abhängen"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:41
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:42
 msgid "Visual object properties for *:"
 msgstr "Visuelle Eigenschaften von *:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:43
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:44
 msgid "Set skin:"
 msgstr "Skin:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:45
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:46
 msgid "Set alpha:"
 msgstr "Alpha:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:48
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:49
 msgid "Set color main:"
 msgstr "Hauptfarbe:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:50
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:51
 msgid "Set color glow:"
 msgstr "Leuchtfarbe:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:54
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:55
 msgid "Set frame:"
 msgstr "Frame:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:58
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:59
 msgid "Physical object properties for *:"
 msgstr "Physikalische Eigenschaften von *:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:60
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:61
 msgid "Set material:"
 msgstr "Material:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:66
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:67
 msgid "Set solidity:"
 msgstr "Festigkeit:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:67
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:68
 msgid "Non-solid"
 msgstr "Gasförmig"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:68
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:69
 msgid "Solid"
 msgstr "Fest"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:69
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:70
 msgid "Set physics:"
 msgstr "Physik:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:70
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:71
 msgid "Static"
 msgstr "Statisch"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:71
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:72
 msgid "Movable"
 msgstr "Beweglich"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:72
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:73
 msgid "Physical"
 msgstr "Physik-Eigenschaften"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:74
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:75
 msgid "Set scale:"
 msgstr "Größe:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:76
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:77
 msgid "Set force:"
 msgstr "Kraft:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:80
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:81
 msgid "Claim *"
 msgstr "* beanspruchen"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:82
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:83
 msgid "* object info"
 msgstr "* Objekteigeschaften"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:83
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:84
 msgid "* mesh info"
 msgstr "* Modelleigenschaften"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:84
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:85
 msgid "* attachment info"
 msgstr "* Anhängerkupplung"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:85
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:86
 msgid "Show help"
 msgstr "Hilfe anzeigen"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:86
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:87
 msgid "* is the object you are facing"
 msgstr "* ist das Objekt vor deiner Nase"
 
@@ -5972,27 +5981,27 @@ msgstr "Gewinner"
 msgid "Team Selection"
 msgstr "Teamauswahl"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:41
+#: qcsrc/menu/xonotic/dialog_teamselect.c:42
 msgid "join 'best' team (auto-select)"
 msgstr "'bestem' Team beitreten (automatische Auswahl)"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:45
+#: qcsrc/menu/xonotic/dialog_teamselect.c:46
 msgid "red"
 msgstr "rot"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:46
+#: qcsrc/menu/xonotic/dialog_teamselect.c:47
 msgid "blue"
 msgstr "blau"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:47
+#: qcsrc/menu/xonotic/dialog_teamselect.c:48
 msgid "yellow"
 msgstr "gelb"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:48
+#: qcsrc/menu/xonotic/dialog_teamselect.c:49
 msgid "pink"
 msgstr "pink"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:51
+#: qcsrc/menu/xonotic/dialog_teamselect.c:52
 msgid "spectate"
 msgstr "zuschauen"
 
@@ -6091,7 +6100,12 @@ msgstr "%.2f %%"
 msgid "%s dB"
 msgstr "%s dB"
 
-#: qcsrc/menu/xonotic/slider_resolution.c:72
+#: qcsrc/menu/xonotic/slider_resolution.c:103
+#, c-format
+msgid "%dx%d (%d:%d)"
+msgstr "%dx%d (%d:%d)"
+
+#: qcsrc/menu/xonotic/slider_resolution.c:106
 #, c-format
 msgid "%dx%d"
 msgstr "%dx%d"
index 959f3c834cb2788f18b212ffd4e0c57d9ebff699..52fa79f67fd5d2281be1ab780328a103fa6b9f05 100644 (file)
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Xonotic\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-09-13 10:31+0200\n"
-"PO-Revision-Date: 2013-09-13 08:33+0000\n"
+"POT-Creation-Date: 2013-10-03 11:55+0200\n"
+"PO-Revision-Date: 2013-10-03 10:08+0000\n"
 "Last-Translator: divVerent <divVerent@xonotic.org>\n"
 "Language-Team: Greek (http://www.transifex.com/projects/p/xonotic/language/"
 "el/)\n"
@@ -1231,7 +1231,7 @@ msgstr ""
 msgid "@!#%'n Tuba Throwing"
 msgstr ""
 
-#: qcsrc/common/mapinfo.qc:1105 qcsrc/menu/xonotic/skinlist.c:166
+#: qcsrc/common/mapinfo.qc:1109 qcsrc/menu/xonotic/skinlist.c:166
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
@@ -1305,1773 +1305,1773 @@ msgstr ""
 msgid "^7%s (^3%d sec left)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:330
+#: qcsrc/common/notifications.qh:342
 #, c-format
 msgid "^BG%s^BG captured the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:331
+#: qcsrc/common/notifications.qh:343
 #, c-format
 msgid ""
 "^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
 "%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:332
+#: qcsrc/common/notifications.qh:344
 #, c-format
 msgid "^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:333
+#: qcsrc/common/notifications.qh:345
 #, c-format
 msgid ""
 "^BG%s^BG captured the ^TC^TT^BG flag in ^F2%s^BG seconds, failing to break "
 "^BG%s^BG's previous record of ^F1%s^BG seconds"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:334
+#: qcsrc/common/notifications.qh:346
 msgid "^BGThe ^TC^TT^BG flag was returned to base by its owner"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:335
+#: qcsrc/common/notifications.qh:347
 msgid "^BGThe ^TC^TT^BG flag was destroyed and returned to base"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:336
+#: qcsrc/common/notifications.qh:348
 msgid "^BGThe ^TC^TT^BG flag was dropped in the base and returned itself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:337
+#: qcsrc/common/notifications.qh:349
 msgid ""
 "^BGThe ^TC^TT^BG flag fell somewhere it couldn't be reached and returned to "
 "base"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:338
+#: qcsrc/common/notifications.qh:350
 #, c-format
 msgid ""
 "^BGThe ^TC^TT^BG flag became impatient after ^F1%.2f^BG seconds and returned "
 "itself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:339
+#: qcsrc/common/notifications.qh:351
 msgid "^BGThe ^TC^TT^BG flag has returned to the base"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:340
+#: qcsrc/common/notifications.qh:352
 #, c-format
 msgid "^BG%s^BG lost the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:341
+#: qcsrc/common/notifications.qh:353
 #, c-format
 msgid "^BG%s^BG got the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:342
+#: qcsrc/common/notifications.qh:354
 #, c-format
 msgid "^BG%s^BG returned the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:343
+#: qcsrc/common/notifications.qh:355
 #, c-format
 msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:344
+#: qcsrc/common/notifications.qh:356
 #, c-format
 msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:345
+#: qcsrc/common/notifications.qh:357
 #, c-format
 msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:346
+#: qcsrc/common/notifications.qh:358
 #, c-format
 msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:346
+#: qcsrc/common/notifications.qh:358
 #, c-format
 msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:347
+#: qcsrc/common/notifications.qh:359
 #, c-format
 msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:348
+#: qcsrc/common/notifications.qh:360
 #, c-format
 msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:349
+#: qcsrc/common/notifications.qh:361
 #, c-format
 msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:350
+#: qcsrc/common/notifications.qh:362
 #, c-format
 msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:351
+#: qcsrc/common/notifications.qh:363
 #, c-format
 msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:352
+#: qcsrc/common/notifications.qh:364
 #, c-format
 msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:352
+#: qcsrc/common/notifications.qh:364
 #, c-format
 msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:353
+#: qcsrc/common/notifications.qh:365
 #, c-format
 msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:354
+#: qcsrc/common/notifications.qh:366
 #, c-format
 msgid ""
 "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:355
+#: qcsrc/common/notifications.qh:367
 #, c-format
 msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:356
+#: qcsrc/common/notifications.qh:368
 #, c-format
 msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:357
+#: qcsrc/common/notifications.qh:369
 #, c-format
 msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:358
+#: qcsrc/common/notifications.qh:370
 #, c-format
 msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:359
+#: qcsrc/common/notifications.qh:371
 #, c-format
 msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:360
+#: qcsrc/common/notifications.qh:372
 #, c-format
 msgid ""
 "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:361
+#: qcsrc/common/notifications.qh:373
 #, c-format
 msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:362
+#: qcsrc/common/notifications.qh:374
 #, c-format
 msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:363
+#: qcsrc/common/notifications.qh:375
 #, c-format
 msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:364
+#: qcsrc/common/notifications.qh:376
 #, c-format
 msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:365
+#: qcsrc/common/notifications.qh:377
 #, c-format
 msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:366
+#: qcsrc/common/notifications.qh:378
 #, c-format
 msgid "^BG%s%s^K1 was thrown into a world of hurt by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:367
+#: qcsrc/common/notifications.qh:379
 #, c-format
 msgid "^BG%s^K1 was moved into the %s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:368
+#: qcsrc/common/notifications.qh:380
 #, c-format
 msgid "^BG%s^K1 became enemies with the Lord of Teamplay%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:369
+#: qcsrc/common/notifications.qh:381
 #, c-format
 msgid "^BG%s^K1 thought they found a nice camping ground%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:370
+#: qcsrc/common/notifications.qh:382
 #, c-format
 msgid "^BG%s^K1 unfairly eliminated themself%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:371
+#: qcsrc/common/notifications.qh:383
 #, c-format
 msgid "^BG%s^K1 %s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:372
+#: qcsrc/common/notifications.qh:384
 #, c-format
 msgid "^BG%s^K1 couldn't catch their breath%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:372
+#: qcsrc/common/notifications.qh:384
 #, c-format
 msgid "^BG%s^K1 was in the water for too long%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:373
+#: qcsrc/common/notifications.qh:385
 #, c-format
 msgid "^BG%s^K1 hit the ground with a bit too much force%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:373
+#: qcsrc/common/notifications.qh:385
 #, c-format
 msgid "^BG%s^K1 hit the ground with a crunch%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:374
+#: qcsrc/common/notifications.qh:386
 #, c-format
 msgid "^BG%s^K1 became a bit too crispy%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:374
+#: qcsrc/common/notifications.qh:386
 #, c-format
 msgid "^BG%s^K1 felt a little hot%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:375
+#: qcsrc/common/notifications.qh:387
 #, c-format
 msgid "^BG%s^K1 died%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:376
+#: qcsrc/common/notifications.qh:388
 #, c-format
 msgid "^BG%s^K1 found a hot place%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:376
+#: qcsrc/common/notifications.qh:388
 #, c-format
 msgid "^BG%s^K1 turned into hot slag%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:377
+#: qcsrc/common/notifications.qh:389
 #, c-format
 msgid "^BG%s^K1 mastered the art of self-nading%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:378
+#: qcsrc/common/notifications.qh:390
 #, c-format
 msgid "^BG%s^K1 died%s%s. What's the point of living without ammo?"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:378
+#: qcsrc/common/notifications.qh:390
 #, c-format
 msgid "^BG%s^K1 ran out of ammo%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:379
+#: qcsrc/common/notifications.qh:391
 #, c-format
 msgid "^BG%s^K1 rotted away%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:380
+#: qcsrc/common/notifications.qh:392
 #, c-format
 msgid "^BG%s^K1 became a shooting star%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:393
 #, c-format
 msgid "^BG%s^K1 was slimed%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:394
 #, c-format
 msgid "^BG%s^K1 couldn't take it anymore%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:395
 #, c-format
 msgid "^BG%s^K1 is now preserved for centuries to come%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:396
 #, c-format
 msgid "^BG%s^K1 switched to the %s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:397
 #, c-format
 msgid "^BG%s^K1 died in an accident%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:398
 #, c-format
 msgid "^BG%s^K1 ran into a turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:399
 #, c-format
 msgid "^BG%s^K1 was blasted away by an eWheel turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:400
 #, c-format
 msgid "^BG%s^K1 got caught up in the FLAC turret fire%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:401
 #, c-format
 msgid "^BG%s^K1 was blasted away by a Hellion turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:402
 #, c-format
 msgid "^BG%s^K1 could not hide from the Hunter turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:403
 #, c-format
 msgid "^BG%s^K1 was riddled full of holes by a Machinegun turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:404
 #, c-format
 msgid "^BG%s^K1 got turned into smoldering gibs by an MLRS turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:405
 #, c-format
 msgid "^BG%s^K1 was phased out by a turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:406
 #, c-format
 msgid "^BG%s^K1 got served some superheated plasma from a turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:407
 #, c-format
 msgid "^BG%s^K1 was electrocuted by a Tesla turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:408
 #, c-format
 msgid "^BG%s^K1 got served a lead enrichment by a Walker turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:409
 #, c-format
 msgid "^BG%s^K1 was impaled by a Walker turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:410
 #, c-format
 msgid "^BG%s^K1 was blasted away by a Walker turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:411
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Bumblebee explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:412
 #, c-format
 msgid "^BG%s^K1 was crushed by a vehicle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:401
+#: qcsrc/common/notifications.qh:413
 #, c-format
 msgid "^BG%s^K1 was caught in a Raptor cluster bomb%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:402
+#: qcsrc/common/notifications.qh:414
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Raptor explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:403
+#: qcsrc/common/notifications.qh:415
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Spiderbot explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:404
+#: qcsrc/common/notifications.qh:416
 #, c-format
 msgid "^BG%s^K1 was blasted to bits by a Spiderbot rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:405
+#: qcsrc/common/notifications.qh:417
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Racer explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:406
+#: qcsrc/common/notifications.qh:418
 #, c-format
 msgid "^BG%s^K1 couldn't find shelter from a Racer rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:407
+#: qcsrc/common/notifications.qh:419
 #, c-format
 msgid "^BG%s^K1 was in the wrong place%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:408
+#: qcsrc/common/notifications.qh:420
 #, c-format
 msgid "^BG%s^K1 was betrayed by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:409
+#: qcsrc/common/notifications.qh:421
 #, c-format
 msgid "^BG%s^K1 was frozen by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:410
+#: qcsrc/common/notifications.qh:422
 #, c-format
 msgid "^BG%s^K3 was revived by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:411
+#: qcsrc/common/notifications.qh:423
 #, c-format
 msgid "^BG%s^K3 was revived by falling"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:412
+#: qcsrc/common/notifications.qh:424
 #, c-format
 msgid "^BG%s^K3 was automatically revived after %s second(s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:413 qcsrc/common/notifications.qh:594
+#: qcsrc/common/notifications.qh:425 qcsrc/common/notifications.qh:612
 msgid "^TC^TT^BG team wins the round"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:414 qcsrc/common/notifications.qh:595
+#: qcsrc/common/notifications.qh:426 qcsrc/common/notifications.qh:613
 #, c-format
 msgid "^BG%s^BG wins the round"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:415 qcsrc/common/notifications.qh:524
+#: qcsrc/common/notifications.qh:427 qcsrc/common/notifications.qh:542
 msgid "^BGRound tied"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:416 qcsrc/common/notifications.qh:525
+#: qcsrc/common/notifications.qh:428 qcsrc/common/notifications.qh:543
 msgid "^BGRound over, there's no winner"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:417
+#: qcsrc/common/notifications.qh:429
 #, c-format
 msgid "^BG%s^K1 froze themself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:418
+#: qcsrc/common/notifications.qh:430
 #, c-format
 msgid "^BGGodmode saved you %s units of damage, cheater!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:419 qcsrc/common/notifications.qh:598
+#: qcsrc/common/notifications.qh:431 qcsrc/common/notifications.qh:616
 #, c-format
 msgid "^BGYou do not have the ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:420 qcsrc/common/notifications.qh:599
+#: qcsrc/common/notifications.qh:432 qcsrc/common/notifications.qh:617
 #, c-format
 msgid "^BGYou dropped the ^F1%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:421 qcsrc/common/notifications.qh:600
+#: qcsrc/common/notifications.qh:433 qcsrc/common/notifications.qh:618
 #, c-format
 msgid "^BGYou got the ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:422 qcsrc/common/notifications.qh:601
+#: qcsrc/common/notifications.qh:434 qcsrc/common/notifications.qh:619
 #, c-format
 msgid "^BGYou don't have enough ammo for the ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:423 qcsrc/common/notifications.qh:602
+#: qcsrc/common/notifications.qh:435 qcsrc/common/notifications.qh:620
 #, c-format
 msgid "^F1%s %s^BG is unable to fire, but its ^F1%s^BG can"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:424 qcsrc/common/notifications.qh:603
+#: qcsrc/common/notifications.qh:436 qcsrc/common/notifications.qh:621
 #, c-format
 msgid "^F1%s^BG is ^F4not available^BG on this map"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:425
+#: qcsrc/common/notifications.qh:437
 #, c-format
 msgid "^BG%s^F3 connected%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:426
+#: qcsrc/common/notifications.qh:438
 #, c-format
 msgid "^BG%s^F3 connected and joined the ^TC^TT team"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:427
+#: qcsrc/common/notifications.qh:439
 #, c-format
 msgid "^BG%s^F3 is now playing"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:428 qcsrc/common/notifications.qh:606
+#: qcsrc/common/notifications.qh:440 qcsrc/common/notifications.qh:624
 #, c-format
 msgid "^BG%s^BG has dropped the ball!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:429 qcsrc/common/notifications.qh:607
+#: qcsrc/common/notifications.qh:441 qcsrc/common/notifications.qh:625
 #, c-format
 msgid "^BG%s^BG has picked up the ball!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:430
+#: qcsrc/common/notifications.qh:442
 #, c-format
 msgid "^BG%s^BG captured the keys for the ^TC^TT team"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:431
+#: qcsrc/common/notifications.qh:443
 #, c-format
 msgid "^BG%s^BG dropped the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:432
+#: qcsrc/common/notifications.qh:444
 #, c-format
 msgid "^BG%s^BG lost the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:433
+#: qcsrc/common/notifications.qh:445
 #, c-format
 msgid "^BG%s^BG picked up the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:434
+#: qcsrc/common/notifications.qh:446
 #, c-format
 msgid "^BG%s^F3 forfeited"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:435
+#: qcsrc/common/notifications.qh:447
 #, c-format
 msgid "^BG%s^F3 has no more lives left"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:436
+#: qcsrc/common/notifications.qh:448
 #, c-format
 msgid "^BG%s^K1 picked up Invisibility"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:437
+#: qcsrc/common/notifications.qh:449
 #, c-format
 msgid "^BG%s^K1 picked up Shield"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:438
+#: qcsrc/common/notifications.qh:450
 #, c-format
 msgid "^BG%s^K1 picked up Speed"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:439
+#: qcsrc/common/notifications.qh:451
 #, c-format
 msgid "^BG%s^K1 picked up Strength"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:440
+#: qcsrc/common/notifications.qh:452
 #, c-format
 msgid "^BG%s^F3 disconnected"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:441
+#: qcsrc/common/notifications.qh:453
 #, c-format
 msgid "^BG%s^F3 was kicked for idling"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:442
+#: qcsrc/common/notifications.qh:454
 msgid ""
 "^F2You were kicked from the server because you are a spectator and "
 "spectators aren't allowed at the moment."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:443
+#: qcsrc/common/notifications.qh:455
 #, c-format
 msgid "^BG%s^F3 is now spectating"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:444
+#: qcsrc/common/notifications.qh:456
 #, c-format
 msgid "^BG%s^BG has abandoned the race"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:445
+#: qcsrc/common/notifications.qh:457
 #, c-format
 msgid "^BG%s^BG couldn't break their %s%s^BG place record of %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:446
+#: qcsrc/common/notifications.qh:458
 #, c-format
 msgid "^BG%s^BG couldn't break the %s%s^BG place record of %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:447
+#: qcsrc/common/notifications.qh:459
 #, c-format
 msgid "^BG%s^BG has finished the race"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:448
+#: qcsrc/common/notifications.qh:460
 #, c-format
 msgid "^BG%s^BG broke %s^BG's %s%s^BG place record with %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:449
+#: qcsrc/common/notifications.qh:461
 #, c-format
 msgid "^BG%s^BG improved their %s%s^BG place record with %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:450
+#: qcsrc/common/notifications.qh:462
 #, c-format
 msgid ""
 "^BG%s^BG scored a new record with ^F2%s^BG, but unfortunately lacks a UID "
 "and will be lost."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:451
+#: qcsrc/common/notifications.qh:463
 #, c-format
 msgid "^BG%s^BG set the %s%s^BG place record with %s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:452
+#: qcsrc/common/notifications.qh:464
 msgid "^TC^TT ^BGteam scores!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:453
+#: qcsrc/common/notifications.qh:465
 #, 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 ""
 
-#: qcsrc/common/notifications.qh:454
+#: qcsrc/common/notifications.qh:466
 #, c-format
 msgid "^BG%s^K1 picked up a Superweapon"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:455
+#: qcsrc/common/notifications.qh:467
 #, c-format
 msgid ""
 "^F4NOTE: ^BGThe server is running ^F1Xonotic %s (beta)^BG, you have "
 "^F2Xonotic %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:456
+#: qcsrc/common/notifications.qh:468
 #, c-format
 msgid ""
 "^F4NOTE: ^BGThe server is running ^F1Xonotic %s^BG, you have ^F2Xonotic %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:457
+#: qcsrc/common/notifications.qh:469
 #, c-format
 msgid ""
 "^F4NOTE: ^F1Xonotic %s^BG is out, and you still have ^F2Xonotic %s^BG - get "
 "the update from ^F3http://www.xonotic.org/^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:458
+#: qcsrc/common/notifications.qh:470
 #, c-format
 msgid "^F3SVQC Build information: ^F4%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:459
+#: qcsrc/common/notifications.qh:471
 #, c-format
 msgid ""
 "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Accordeon%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:460
+#: qcsrc/common/notifications.qh:472
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Accordeon%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:461
+#: qcsrc/common/notifications.qh:473
 #, c-format
 msgid "^BG%s%s^K1 felt the strong pull of ^BG%s^K1's Crylink%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:462
+#: qcsrc/common/notifications.qh:474
 #, c-format
 msgid "^BG%s^K1 felt the strong pull of their Crylink%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:463
+#: qcsrc/common/notifications.qh:475
 #, c-format
 msgid "^BG%s%s^K1 was blasted by ^BG%s^K1's Electro bolt%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:464
+#: qcsrc/common/notifications.qh:476
 #, c-format
 msgid "^BG%s%s^K1 felt the electrifying air of ^BG%s^K1's Electro combo%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:465
+#: qcsrc/common/notifications.qh:477
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Electro plasma%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:466
+#: qcsrc/common/notifications.qh:478
 #, c-format
 msgid "^BG%s^K1 played with Electro plasma%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:467
+#: qcsrc/common/notifications.qh:479
 #, c-format
 msgid "^BG%s^K1 could not remember where they put their Electro plasma%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:468
+#: qcsrc/common/notifications.qh:480
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's fireball%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:469
+#: qcsrc/common/notifications.qh:481
 #, c-format
 msgid "^BG%s%s^K1 got burnt by ^BG%s^K1's firemine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:470
+#: qcsrc/common/notifications.qh:482
 #, c-format
 msgid "^BG%s^K1 should have used a smaller gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:471
+#: qcsrc/common/notifications.qh:483
 #, c-format
 msgid "^BG%s^K1 forgot about their firemine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:472
+#: qcsrc/common/notifications.qh:484
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by a burst of ^BG%s^K1's Hagar rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:473
+#: qcsrc/common/notifications.qh:485
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Hagar rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:474
+#: qcsrc/common/notifications.qh:486
 #, c-format
 msgid "^BG%s^K1 played with tiny Hagar rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:475
+#: qcsrc/common/notifications.qh:487
 #, c-format
 msgid "^BG%s%s^K1 was cut down with ^BG%s^K1's HLAC%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:476
+#: qcsrc/common/notifications.qh:488
 #, c-format
 msgid "^BG%s^K1 got a little jumpy with their HLAC%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:477
+#: qcsrc/common/notifications.qh:489
 #, c-format
 msgid "^BG%s%s^K1 was caught in ^BG%s^K1's Hook gravity bomb%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:478
+#: qcsrc/common/notifications.qh:490
 #, c-format
 msgid ""
 "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Klein Bottle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:479
+#: qcsrc/common/notifications.qh:491
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Klein Bottle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:480
+#: qcsrc/common/notifications.qh:492
 #, c-format
 msgid "^BG%s%s^K1 was shot to death by ^BG%s^K1's Laser%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:481
+#: qcsrc/common/notifications.qh:493
 #, c-format
 msgid "^BG%s^K1 shot themself to hell with their Laser%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:482
+#: qcsrc/common/notifications.qh:494
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's mine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:483
+#: qcsrc/common/notifications.qh:495
 #, c-format
 msgid "^BG%s^K1 forgot about their mine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:484
+#: qcsrc/common/notifications.qh:496
 #, c-format
 msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Minstanex%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:485
+#: qcsrc/common/notifications.qh:497
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Mortar grenade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:486
+#: qcsrc/common/notifications.qh:498
 #, c-format
 msgid "^BG%s%s^K1 ate ^BG%s^K1's Mortar grenade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:487
+#: qcsrc/common/notifications.qh:499
 #, c-format
 msgid "^BG%s^K1 didn't see their own Mortar grenade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:488
+#: qcsrc/common/notifications.qh:500
 #, c-format
 msgid "^BG%s^K1 blew themself up with their own Mortar%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:489
+#: qcsrc/common/notifications.qh:501
 #, c-format
 msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Nex%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:490
+#: qcsrc/common/notifications.qh:502
 #, c-format
 msgid "^BG%s%s^K1 was sniped with a Rifle by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:491
+#: qcsrc/common/notifications.qh:503
 #, c-format
 msgid "^BG%s%s^K1 died in ^BG%s^K1's Rifle bullet hail%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:492
+#: qcsrc/common/notifications.qh:504
 #, c-format
 msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle bullet hail%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:493
+#: qcsrc/common/notifications.qh:505
 #, c-format
 msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:494
+#: qcsrc/common/notifications.qh:506
 #, c-format
 msgid "^BG%s%s^K1 ate ^BG%s^K1's rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:495
+#: qcsrc/common/notifications.qh:507
 #, c-format
 msgid "^BG%s%s^K1 got too close ^BG%s^K1's rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:496
+#: qcsrc/common/notifications.qh:508
 #, c-format
 msgid "^BG%s^K1 blew themself up with their Rocketlauncher%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:497
+#: qcsrc/common/notifications.qh:509
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Seeker rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:498
+#: qcsrc/common/notifications.qh:510
 #, c-format
 msgid "^BG%s%s^K1 was tagged by ^BG%s^K1's Seeker%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:499
+#: qcsrc/common/notifications.qh:511
 #, c-format
 msgid "^BG%s^K1 played with tiny Seeker rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:500
+#: qcsrc/common/notifications.qh:512
 #, c-format
 msgid "^BG%s%s^K1 was gunned down by ^BG%s^K1's Shotgun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:501
+#: qcsrc/common/notifications.qh:513
 #, c-format
 msgid "^BG%s%s^K1 slapped ^BG%s^K1 around a bit with a large Shotgun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:502
+#: qcsrc/common/notifications.qh:514
 #, c-format
 msgid "^BG%s^K1 is now thinking with portals%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:503
+#: qcsrc/common/notifications.qh:515
 #, c-format
 msgid "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Tuba%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:504
+#: qcsrc/common/notifications.qh:516
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Tuba%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:505
+#: qcsrc/common/notifications.qh:517
 #, c-format
 msgid "^BG%s%s^K1 was sniped by ^BG%s^K1's Machine Gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:506
+#: qcsrc/common/notifications.qh:518
 #, c-format
 msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:518
+#: qcsrc/common/notifications.qh:536
 msgid "^BGYou are attacking!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:519
+#: qcsrc/common/notifications.qh:537
 msgid "^BGYou are defending!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:520
+#: qcsrc/common/notifications.qh:538
 msgid "^F4Begin!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:521
+#: qcsrc/common/notifications.qh:539
 msgid "^F4Game starts in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:522
+#: qcsrc/common/notifications.qh:540
 msgid "^F4Round starts in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:523
+#: qcsrc/common/notifications.qh:541
 msgid "^F4Round cannot start"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:526
+#: qcsrc/common/notifications.qh:544
 msgid "^F2Don't camp!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:527
+#: qcsrc/common/notifications.qh:545
 msgid ""
 "^BGYou are now free.\n"
 "^BGFeel free to ^F2try to capture^BG the flag again\n"
 "^BGif you think you will succeed."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:528
+#: qcsrc/common/notifications.qh:546
 msgid ""
 "^BGYou are now ^F1shielded^BG from the flag\n"
 "^BGfor ^F2too many unsuccessful attempts^BG to capture.\n"
 "^BGMake some defensive scores before trying again."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:529
+#: qcsrc/common/notifications.qh:547
 msgid "^BGYou captured the ^TC^TT^BG flag!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:530
+#: qcsrc/common/notifications.qh:548
 #, c-format
 msgid "^BGToo many flag throws! Throwing disabled for %s."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:531
+#: qcsrc/common/notifications.qh:549
 #, c-format
 msgid "^BG%s^BG passed the ^TC^TT^BG flag to %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:532
+#: qcsrc/common/notifications.qh:550
 #, c-format
 msgid "^BGYou received the ^TC^TT^BG flag from %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:533
+#: qcsrc/common/notifications.qh:551
 #, c-format
 msgid "^BG%s^BG requests you to pass the flag%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:534
+#: qcsrc/common/notifications.qh:552
 #, c-format
 msgid "^BGRequesting %s^BG to pass you the flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:535
+#: qcsrc/common/notifications.qh:553
 #, c-format
 msgid "^BGYou passed the ^TC^TT^BG flag to %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:536
+#: qcsrc/common/notifications.qh:554
 msgid "^BGYou got the ^TC^TT^BG flag!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:537
+#: qcsrc/common/notifications.qh:555
 #, c-format
 msgid "^BGThe %senemy^BG got your flag! Retrieve it!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:538
+#: qcsrc/common/notifications.qh:556
 #, c-format
 msgid "^BGThe %senemy (^BG%s%s)^BG got your flag! Retrieve it!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:539
+#: qcsrc/common/notifications.qh:557
 #, c-format
 msgid "^BGYour %steam mate^BG got the flag! Protect them!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:540
+#: qcsrc/common/notifications.qh:558
 #, c-format
 msgid "^BGYour %steam mate (^BG%s%s)^BG got the flag! Protect them!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:541
+#: qcsrc/common/notifications.qh:559
 msgid "^BGYou returned the ^TC^TT^BG flag!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:542
+#: qcsrc/common/notifications.qh:560
 msgid "^BGStalemate! Enemies can now see you on radar!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:543
+#: qcsrc/common/notifications.qh:561
 msgid "^BGStalemate! Flag carriers can now be seen by enemies on radar!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:544
+#: qcsrc/common/notifications.qh:562
 #, c-format
 msgid "^K3%sYou fragged ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:544
+#: qcsrc/common/notifications.qh:562
 #, c-format
 msgid "^K3%sYou scored against ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:545
+#: qcsrc/common/notifications.qh:563
 #, c-format
 msgid "^K1%sYou were fragged by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:545
+#: qcsrc/common/notifications.qh:563
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:546
+#: qcsrc/common/notifications.qh:564
 #, c-format
 msgid "^K1%sYou were fragged by ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:546
+#: qcsrc/common/notifications.qh:564
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:547
+#: qcsrc/common/notifications.qh:565
 #, c-format
 msgid "^K3%sYou fragged ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:547
+#: qcsrc/common/notifications.qh:565
 #, c-format
 msgid "^K3%sYou scored against ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:548
+#: qcsrc/common/notifications.qh:566
 #, c-format
 msgid "^K1%sYou scored against ^BG%s^K1 while they were typing"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:548
+#: qcsrc/common/notifications.qh:566
 #, c-format
 msgid "^K1%sYou typefragged ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:549
+#: qcsrc/common/notifications.qh:567
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^K1 while typing!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:549
+#: qcsrc/common/notifications.qh:567
 #, c-format
 msgid "^K1%sYou were typefragged by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:550
+#: qcsrc/common/notifications.qh:568
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^K1 while typing^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:550
+#: qcsrc/common/notifications.qh:568
 #, c-format
 msgid "^K1%sYou were typefragged by ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:551
+#: qcsrc/common/notifications.qh:569
 #, c-format
 msgid "^K1%sYou scored against ^BG%s^K1 while they were typing^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:551
+#: qcsrc/common/notifications.qh:569
 #, c-format
 msgid "^K1%sYou typefragged ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:552
+#: qcsrc/common/notifications.qh:570
 msgid "^BGPress ^F2DROPWEAPON^BG again to toss the nade!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:553
+#: qcsrc/common/notifications.qh:571
 #, c-format
 msgid ""
 "^BGYou have been moved into a different team\n"
 "You are now on: %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:554
+#: qcsrc/common/notifications.qh:572
 msgid "^K1Don't go against your team mates!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:554
+#: qcsrc/common/notifications.qh:572
 msgid "^K1Don't shoot your team mates!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:555
+#: qcsrc/common/notifications.qh:573
 msgid "^K1Die camper!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:555
+#: qcsrc/common/notifications.qh:573
 msgid "^K1Reconsider your tactics, camper!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:556
+#: qcsrc/common/notifications.qh:574
 msgid "^K1You unfairly eliminated yourself!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:557
+#: qcsrc/common/notifications.qh:575
 #, c-format
 msgid "^K1You were %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:558
+#: qcsrc/common/notifications.qh:576
 msgid "^K1You couldn't catch your breath!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:559
+#: qcsrc/common/notifications.qh:577
 msgid "^K1You hit the ground with a crunch!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:560
+#: qcsrc/common/notifications.qh:578
 msgid "^K1You felt a little too hot!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:560
+#: qcsrc/common/notifications.qh:578
 msgid "^K1You got a little bit too crispy!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:561
+#: qcsrc/common/notifications.qh:579
 msgid "^K1You killed your own dumb self!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:561
+#: qcsrc/common/notifications.qh:579
 msgid "^K1You need to be more careful!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:562
+#: qcsrc/common/notifications.qh:580
 msgid "^K1You couldn't stand the heat!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:563
+#: qcsrc/common/notifications.qh:581
 msgid "^K1Tastes like chicken!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:563
+#: qcsrc/common/notifications.qh:581
 msgid "^K1You forgot to put the pin back in!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:564
+#: qcsrc/common/notifications.qh:582
 msgid "^K1You are respawning for running out of ammo..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:564
+#: qcsrc/common/notifications.qh:582
 msgid "^K1You were killed for running out of ammo..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:565
+#: qcsrc/common/notifications.qh:583
 msgid "^K1You grew too old without taking your medicine"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:565
+#: qcsrc/common/notifications.qh:583
 msgid "^K1You need to preserve your health"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:566
+#: qcsrc/common/notifications.qh:584
 msgid "^K1You became a shooting star!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:567
+#: qcsrc/common/notifications.qh:585
 msgid "^K1You melted away in slime!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:568
+#: qcsrc/common/notifications.qh:586
 msgid "^K1You committed suicide!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:568
+#: qcsrc/common/notifications.qh:586
 msgid "^K1You ended it all!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:569
+#: qcsrc/common/notifications.qh:587
 msgid "^K1You got stuck in a swamp!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:570
+#: qcsrc/common/notifications.qh:588
 #, c-format
 msgid "^BGYou are now on: %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:571
+#: qcsrc/common/notifications.qh:589
 msgid "^K1You died in an accident!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:572
+#: qcsrc/common/notifications.qh:590
 msgid "^K1You had an unfortunate run in with a turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:572
+#: qcsrc/common/notifications.qh:590
 msgid "^K1You were fragged by a turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:573
+#: qcsrc/common/notifications.qh:591
 msgid "^K1You had an unfortunate run in with an eWheel turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:573
+#: qcsrc/common/notifications.qh:591
 msgid "^K1You were fragged by an eWheel turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:574
+#: qcsrc/common/notifications.qh:592
 msgid "^K1You had an unfortunate run in with a Walker turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:574
+#: qcsrc/common/notifications.qh:592
 msgid "^K1You were fragged by a Walker turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:575
+#: qcsrc/common/notifications.qh:593
 msgid "^K1You got caught in the blast of a Bumblebee explosion!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:576
+#: qcsrc/common/notifications.qh:594
 msgid "^K1You were crushed by a vehicle!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:577
+#: qcsrc/common/notifications.qh:595
 msgid "^K1You were caught in a Raptor cluster bomb!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:578
+#: qcsrc/common/notifications.qh:596
 msgid "^K1You got caught in the blast of a Raptor explosion!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:579
+#: qcsrc/common/notifications.qh:597
 msgid "^K1You got caught in the blast of a Spiderbot explosion!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:580
+#: qcsrc/common/notifications.qh:598
 msgid "^K1You were blasted to bits by a Spiderbot rocket!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:581
+#: qcsrc/common/notifications.qh:599
 msgid "^K1You got caught in the blast of a Racer explosion!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:582
+#: qcsrc/common/notifications.qh:600
 msgid "^K1You couldn't find shelter from a Racer rocket!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:583
+#: qcsrc/common/notifications.qh:601
 msgid "^K1Watch your step!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:584
+#: qcsrc/common/notifications.qh:602
 #, c-format
 msgid "^K1Moron! You fragged ^BG%s^K1, a team mate!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:584
+#: qcsrc/common/notifications.qh:602
 #, c-format
 msgid "^K1Moron! You went against ^BG%s^K1, a team mate!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:585
+#: qcsrc/common/notifications.qh:603
 #, c-format
 msgid "^K1You were fragged by ^BG%s^K1, a team mate"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:585
+#: qcsrc/common/notifications.qh:603
 #, c-format
 msgid "^K1You were scored against by ^BG%s^K1, a team mate"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:586
+#: qcsrc/common/notifications.qh:604
 msgid ""
 "^K1Stop idling!\n"
 "^BGDisconnecting in ^COUNT..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:587
+#: qcsrc/common/notifications.qh:605
 msgid "^F2You picked up some extra lives"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:588
+#: qcsrc/common/notifications.qh:606
 #, c-format
 msgid "^K3You froze ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:589
+#: qcsrc/common/notifications.qh:607
 #, c-format
 msgid "^K1You were frozen by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:590
+#: qcsrc/common/notifications.qh:608
 #, c-format
 msgid "^K3You revived ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:591
+#: qcsrc/common/notifications.qh:609
 msgid "^K3You revived yourself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:592
+#: qcsrc/common/notifications.qh:610
 #, c-format
 msgid "^K3You were revived by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:593
+#: qcsrc/common/notifications.qh:611
 #, c-format
 msgid "^K3You were automatically revived after %s second(s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:596
+#: qcsrc/common/notifications.qh:614
 msgid "^K1You froze yourself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:597
+#: qcsrc/common/notifications.qh:615
 msgid "^K1Round already started, you spawn as frozen"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:604
+#: qcsrc/common/notifications.qh:622
 msgid ""
 "^K1No spawnpoints available!\n"
 "Hope your team can fix it..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:605
+#: qcsrc/common/notifications.qh:623
 msgid ""
 "^K1You may not join the game at this time.\n"
 "The player limit reached maximum capacity."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:608
+#: qcsrc/common/notifications.qh:626
 msgid "^BGKilling people while you don't have the ball gives no points!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:609
+#: qcsrc/common/notifications.qh:627
 msgid ""
 "^BGAll keys are in your team's hands!\n"
 "Help the key carriers to meet!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:610
+#: qcsrc/common/notifications.qh:628
 msgid ""
 "^BGAll keys are in ^TC^TT team^BG's hands!\n"
 "Interfere ^F4NOW^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:611
+#: qcsrc/common/notifications.qh:629
 msgid ""
 "^BGAll keys are in your team's hands!\n"
 "Meet the other key carriers ^F4NOW^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:612
+#: qcsrc/common/notifications.qh:630
 msgid "^F4Round will start in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:613
+#: qcsrc/common/notifications.qh:631
 msgid "^BGScanning frequency range..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:614
+#: qcsrc/common/notifications.qh:632
 msgid "^BGYou are starting with the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:615 qcsrc/common/notifications.qh:616
+#: qcsrc/common/notifications.qh:633 qcsrc/common/notifications.qh:634
 #, c-format
 msgid ""
 "^BGWaiting for players to join...\n"
 "Need active players for: %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:617
+#: qcsrc/common/notifications.qh:635
 #, c-format
 msgid "^BGWaiting for %s player(s) to join..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:618
+#: qcsrc/common/notifications.qh:636
 msgid "^F4^COUNT^BG left to find some ammo!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:619
+#: qcsrc/common/notifications.qh:637
 msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:619
+#: qcsrc/common/notifications.qh:637
 msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:620
+#: qcsrc/common/notifications.qh:638
 #, c-format
 msgid "^F2Extra lives remaining: ^K1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:621
+#: qcsrc/common/notifications.qh:639
 msgid "^BGSecondary fire inflicts no damage!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:622
+#: qcsrc/common/notifications.qh:640
 #, c-format
 msgid "^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:623
+#: qcsrc/common/notifications.qh:641
 #, c-format
 msgid ""
 "^F2^COUNT^BG until weapon change...\n"
 "Next weapon: ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:624
+#: qcsrc/common/notifications.qh:642
 #, c-format
 msgid "^F2Active weapon: ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:625
+#: qcsrc/common/notifications.qh:643
 msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:626
+#: qcsrc/common/notifications.qh:644
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "Keep fragging until we have a winner!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:626
+#: qcsrc/common/notifications.qh:644
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "Keep scoring until we have a winner!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:627
+#: qcsrc/common/notifications.qh:645
 #, c-format
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "^BGAdded ^F4%s^BG to the game!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:628
+#: qcsrc/common/notifications.qh:646
 msgid "^F2Invisibility has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:629
+#: qcsrc/common/notifications.qh:647
 msgid "^F2Shield has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:630
+#: qcsrc/common/notifications.qh:648
 msgid "^F2Speed has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:631
+#: qcsrc/common/notifications.qh:649
 msgid "^F2Strength has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:632
+#: qcsrc/common/notifications.qh:650
 msgid "^F2You are invisible"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:633
+#: qcsrc/common/notifications.qh:651
 msgid "^F2Shield surrounds you"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:634
+#: qcsrc/common/notifications.qh:652
 msgid "^F2You are on speed"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:635
+#: qcsrc/common/notifications.qh:653
 msgid "^F2Strength infuses your weapons with devastating power"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:636
+#: qcsrc/common/notifications.qh:654
 msgid "^F2The race is over, finish your lap!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:637
+#: qcsrc/common/notifications.qh:655
 msgid "^F2Superweapons have broken down"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:638
+#: qcsrc/common/notifications.qh:656
 msgid "^F2Superweapons have been lost"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:639
+#: qcsrc/common/notifications.qh:657
 msgid "^F2You now have a superweapon"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:640
+#: qcsrc/common/notifications.qh:658
 msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:641
+#: qcsrc/common/notifications.qh:659
 msgid "^K1Changing team in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:642
+#: qcsrc/common/notifications.qh:660
 msgid "^K1Spectating in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:643
+#: qcsrc/common/notifications.qh:661
 msgid "^K1Suicide in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:644
+#: qcsrc/common/notifications.qh:662
 msgid "^F4Timeout begins in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:645
+#: qcsrc/common/notifications.qh:663
 msgid "^F4Timeout ends in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:907 qcsrc/common/notifications.qh:908
+#: qcsrc/common/notifications.qh:937 qcsrc/common/notifications.qh:938
 #, c-format
 msgid " (near %s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:915 qcsrc/common/notifications.qh:916
+#: qcsrc/common/notifications.qh:945 qcsrc/common/notifications.qh:946
 msgid "primary"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:915 qcsrc/common/notifications.qh:916
+#: qcsrc/common/notifications.qh:945 qcsrc/common/notifications.qh:946
 msgid "secondary"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:926
+#: qcsrc/common/notifications.qh:956
 #, c-format
 msgid " ^F1(Press %s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:935
+#: qcsrc/common/notifications.qh:965
 #, c-format
 msgid " with %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 #, c-format
 msgid "%s^K1 made a TRIPLE FRAG! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 #, c-format
 msgid "%s^K1 made a TRIPLE SCORE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 msgid "TRIPLE FRAG! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 #, c-format
 msgid "%s^K1 made FIVE SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 #, c-format
 msgid "%s^K1 unlocked RAGE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 msgid "RAGE! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 #, c-format
 msgid "%s^K1 made TEN SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 #, c-format
 msgid "%s^K1 started a MASSACRE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 msgid "MASSACRE! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 #, c-format
 msgid "%s^K1 executed MAYHEM! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 #, c-format
 msgid "%s^K1 made FIFTEEN SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 msgid "MAYHEM! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 #, c-format
 msgid "%s^K1 is a BERSERKER! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 #, c-format
 msgid "%s^K1 made TWENTY SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 msgid "BERSERKER! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 #, c-format
 msgid "%s^K1 inflicts CARNAGE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 #, c-format
 msgid "%s^K1 made TWENTY FIVE SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 msgid "CARNAGE! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 #, c-format
 msgid "%s^K1 made THIRTY SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 #, c-format
 msgid "%s^K1 unleashes ARMAGEDDON! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 msgid "ARMAGEDDON! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:956
+#: qcsrc/common/notifications.qh:986
 #, c-format
 msgid "%s(^F1Bot^BG)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:958
+#: qcsrc/common/notifications.qh:988
 #, c-format
 msgid "%s(Ping ^F1%d^BG)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:964
+#: qcsrc/common/notifications.qh:994
 #, c-format
 msgid ""
 "\n"
 "(Health ^1%d^BG / Armor ^2%d^BG)%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:966
+#: qcsrc/common/notifications.qh:996
 #, c-format
 msgid ""
 "\n"
 "(^F4Dead^BG)%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1003 qcsrc/common/notifications.qh:1016
+#: qcsrc/common/notifications.qh:1033 qcsrc/common/notifications.qh:1046
 #, c-format
 msgid "%d score spree! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1015
+#: qcsrc/common/notifications.qh:1045
 #, c-format
 msgid "%d frag spree! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1028
+#: qcsrc/common/notifications.qh:1058
 msgid "First blood! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1028
+#: qcsrc/common/notifications.qh:1058
 msgid "First score! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1032
+#: qcsrc/common/notifications.qh:1062
 msgid "First casualty! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1032
+#: qcsrc/common/notifications.qh:1062
 msgid "First victim! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1073
+#: qcsrc/common/notifications.qh:1103
 #, c-format
 msgid "%s^K1 has %d frags in a row! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1074
+#: qcsrc/common/notifications.qh:1104
 #, c-format
 msgid "%s^K1 made %d scores in a row! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1092
+#: qcsrc/common/notifications.qh:1122
 #, c-format
 msgid "%s^K1 drew first blood! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1093
+#: qcsrc/common/notifications.qh:1123
 #, c-format
 msgid "%s^K1 got the first score! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1109
+#: qcsrc/common/notifications.qh:1139
 #, c-format
 msgid ", ending their %d frag spree"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1110
+#: qcsrc/common/notifications.qh:1140
 #, c-format
 msgid ", ending their %d score spree"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1124
+#: qcsrc/common/notifications.qh:1154
 #, c-format
 msgid ", losing their %d frag spree"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1125
+#: qcsrc/common/notifications.qh:1155
 #, c-format
 msgid ", losing their %d score spree"
 msgstr ""
@@ -3135,11 +3135,11 @@ msgstr "Αντικείμενο %d"
 msgid "%d (%s)"
 msgstr "%d (%s)"
 
-#: qcsrc/menu/item/textslider.c:29 qcsrc/menu/item/textslider.c:31
+#: qcsrc/menu/item/textslider.c:31 qcsrc/menu/item/textslider.c:33
 msgid "custom"
 msgstr "προσαρμογή"
 
-#: qcsrc/menu/menu.qc:56
+#: qcsrc/menu/menu.qc:59
 #, c-format
 msgid "^4MQC Build information: ^1%s\n"
 msgstr "^4MQC Πληροφορίες εκδοχής: ^1%s\n"
@@ -3186,7 +3186,7 @@ msgstr "Μνεία"
 #: 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_sandboxtools.c:89
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:90
 #: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:77
 #: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:21
 msgid "OK"
@@ -3243,33 +3243,33 @@ msgstr "Αποθήκευση ρυθμίσεων"
 msgid "Ammo Panel"
 msgstr "Πίνακας Πυρομαχικών"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:23
 msgid "Ammunition display:"
 msgstr "Προβολή πυρομαχικών:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:26
 msgid "Show only current ammo type"
 msgstr "Προβολή μόνο του τρέχων πυρομαχικού"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
 msgid "Align icon:"
 msgstr "Ευθυγράμμιση εικονιδίου:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:36
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:28
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:40
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:28
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:40
-msgid "Left"
-msgstr "Αριστερά"
-
 #: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:30
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:38
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:29
 #: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:41
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:29
 #: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:41
+msgid "Left"
+msgstr "Αριστερά"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:42
 msgid "Right"
 msgstr "Δεξιά"
 
@@ -3277,28 +3277,28 @@ msgstr "Δεξιά"
 msgid "Centerprint"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:24
 msgid "Message duration:"
 msgstr "Διάρκεια μηνυμάτων:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:27
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:28
 msgid "Fade time:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:32
 msgid "Flip messages order"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:34
 msgid "Text alignment:"
 msgstr "Ευθυγράμμιση κειμένου"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:38
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:51
 msgid "Center"
 msgstr "Στο κέντρο"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:41
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:42
 msgid "Font scale:"
 msgstr "Μέγεθος γραμματοσειράς:"
 
@@ -3306,19 +3306,19 @@ msgstr "Μέγεθος γραμματοσειράς:"
 msgid "Chat Panel"
 msgstr "Πίνακας Ομιλίας"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:23
 msgid "Chat entries:"
 msgstr "Καταχωρήσεις ομιλίας:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:26
 msgid "Chat size:"
 msgstr "Μέγεθος ομιλίας:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:30
 msgid "Chat lifetime:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:34
 msgid "Chat beep sound"
 msgstr "Ήχος ομιλίας"
 
@@ -3326,11 +3326,11 @@ msgstr "Ήχος ομιλίας"
 msgid "Engine Info Panel"
 msgstr "Πίνακας Πληροφοριών Μηχανής"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:23
 msgid "Engine info:"
 msgstr "Πληροφορίες μηχανής:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:26
 msgid "Use an averaging algorithm for fps"
 msgstr ""
 
@@ -3338,36 +3338,36 @@ msgstr ""
 msgid "Health/Armor Panel"
 msgstr "Πίνακας Ζωής/Πανοπλίας"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:22
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:23
 msgid "Enable status bar"
 msgstr "Ενεργοποίηση γραμμής κατάστασης"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:24
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:25
 msgid "Status bar alignment:"
 msgstr "Ευθυγράμμιση γραμμής καταστάσεως:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:32
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:42
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:32
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:43
 msgid "Inward"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:34
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:43
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:34
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:44
 msgid "Outward"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:37
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:38
 msgid "Icon alignment:"
 msgstr "Ευθυγράμμιση εικονιδίων:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:46
 msgid "Flip health and armor positions"
 msgstr "Ανταλλαγή θέσεων ζωής και πανοπλίας"
 
@@ -3375,11 +3375,11 @@ msgstr "Ανταλλαγή θέσεων ζωής και πανοπλίας"
 msgid "Info Messages Panel"
 msgstr "Πίνακας Πληροφοριών"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:23
 msgid "Info messages:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:26
 msgid "Flip align"
 msgstr ""
 
@@ -3391,23 +3391,23 @@ msgstr ""
 msgid "Notification Panel"
 msgstr "Πίνακας Ανακοινώσεων"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:23
 msgid "Notifications:"
 msgstr "Ανακοινώσεις:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:26
 msgid "Also print notifications to the console"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:29
 msgid "Flip notify order"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:32
 msgid "Entry lifetime:"
 msgstr "Χρόνος λήψης καταχωρήσεων:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:36
 msgid "Entry fadetime:"
 msgstr ""
 
@@ -3415,96 +3415,96 @@ msgstr ""
 msgid "Physics Panel"
 msgstr "Πίνακας Φυσικής"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:22
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:22
 msgid "Panel disabled"
 msgstr "Πίνακας απενεργοποιημένος"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
 msgid "Panel enabled"
 msgstr "Πίνακας ενεργός"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
 msgid "Panel enabled even observing"
 msgstr "Πίνακας ενεργός και στην θέαση"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:26
 msgid "Panel enabled only in Race/CTS"
 msgstr "Πίνακας ενεργός μόνο σε Αγώνα/CTS"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:32
 msgid "Status bar"
 msgstr "Γραμμή κατάστασης"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:49
 msgid "Left align"
 msgstr "Ευθυγράμμιση στα αριστερά"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:53
 msgid "Right align"
 msgstr "Ευθυγράμμιση στα δεξιά"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
 msgid "Inward align"
 msgstr "Ευθυγράμμιση προς τα μέσα"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:37
 msgid "Outward align"
 msgstr "Ευθυγράμμιση προς τα έξω"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:41
 msgid "Flip speed/acceleration positions"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
 #: qcsrc/menu/xonotic/dialog_settings_misc.c:29
 msgid "Speed:"
 msgstr "Ταχύτητα"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:46
 msgid "Include vertical speed"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:56
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:57
 msgid "Speed unit:"
 msgstr "Μονάδα ταχύτητας:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:58
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
 msgid "qu/s"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
 msgid "m/s"
 msgstr "μέτρα/δευτερόλεπτο"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
 msgid "km/h"
 msgstr "χλμ/ώρα"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
 msgid "mph"
 msgstr "μίλια/ώρα"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:63
 msgid "knots"
 msgstr "κόμβοι"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:64
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:65
 msgid "Show"
 msgstr "Εμφάνιση"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:67
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:68
 msgid "Top speed"
 msgstr "Μέγιστη ταχύτητα"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:73
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
 msgid "Acceleration:"
 msgstr "Επιτάχυνση:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:75
 msgid "Include vertical acceleration"
 msgstr ""
 
@@ -3512,7 +3512,7 @@ msgstr ""
 msgid "Powerups Panel"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:46
 msgid "Flip strength and shield positions"
 msgstr ""
 
@@ -3520,16 +3520,16 @@ msgstr ""
 msgid "Pressed Keys Panel"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
 msgid "Panel enabled when spectating"
 msgstr "Πίνακας ενεργοποιημένος στην θέαση"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:24
 msgid "Panel always enabled"
 msgstr "Πίνακας πάντα ενεργοποιημένος"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:31
 msgid "Forced aspect:"
 msgstr ""
 
@@ -3541,68 +3541,68 @@ msgstr "Πίνακας Χρονοδιακόπτη Αγώνα"
 msgid "Radar Panel"
 msgstr "Πίνακας Ραντάρ"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
 msgid "Panel enabled in teamgames"
 msgstr "Πίνακας ενεργός σε ομαδικά παιχνίδια"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:30
 msgid "Radar:"
 msgstr "Ραντάρ:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:32
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:43
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:82
+#: 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
 msgid "Alpha:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:37
 msgid "Rotation:"
 msgstr "Περιστροφή:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:39
 msgid "Forward"
 msgstr "Εμπρός"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:40
 msgid "West"
 msgstr "Δυτικά"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:41
 msgid "South"
 msgstr "Νότια"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:41
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:42
 msgid "East"
 msgstr "Ανατολικά"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:43
 msgid "North"
 msgstr "Βόρεια"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:46
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:47
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:63
 msgid "Scale:"
 msgstr "Κλίμακα:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:50
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:51
 msgid "Zoom mode:"
 msgstr "Ρύθμιση μεγέθυνσης:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:52
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:53
 msgid "Zoomed in"
 msgstr "Μεγεθυμένο"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:53
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:54
 msgid "Zoomed out"
 msgstr "Σμικρυσμένο"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:54
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:55
 msgid "Always zoomed"
 msgstr "Πάντα μεγεθυμένο"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:55
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:56
 msgid "Never zoomed"
 msgstr "Ποτέ μεγεθυμένο"
 
@@ -3610,23 +3610,23 @@ msgstr "Ποτέ μεγεθυμένο"
 msgid "Score Panel"
 msgstr "Πίνακας Βαθμολογίας"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:23
 msgid "Score:"
 msgstr "Βαθμολογία:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
 msgid "Rankings:"
 msgstr "Κατατάξεις:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
 msgid "Off"
 msgstr "Ανενεργό"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
 msgid "And me"
 msgstr "Και εγώ"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:29
 msgid "Pure"
 msgstr ""
 
@@ -3634,11 +3634,11 @@ msgstr ""
 msgid "Timer Panel"
 msgstr "Πίνακας Χρονοδιακόπτη"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:23
 msgid "Timer:"
 msgstr "Χρονόμετρο:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:26
 msgid "Show elapsed time"
 msgstr ""
 
@@ -3646,7 +3646,7 @@ msgstr ""
 msgid "Vote Panel"
 msgstr "Πίνακας Ψήφοφορίας"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:23
 msgid "Alpha after voting:"
 msgstr ""
 
@@ -3654,76 +3654,76 @@ msgstr ""
 msgid "Weapons Panel"
 msgstr "Πίνακας Οπλισμού"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:25
 msgid "Fade out after:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:26
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:27
 msgid "Never"
 msgstr "Ποτέ"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:29
 #, c-format
 msgid "%ds"
 msgstr "%ds"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:32
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:33
 msgid "Fade effect:"
 msgstr "Εφέ ξεθωριάσματος"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
 msgid "EF^None"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:37
 msgid "Alpha"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
 msgid "Slide"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:39
 msgid "EF^Both"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:43
 msgid "Weapon icons:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46
 msgid "Show only owned weapons"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:48
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
 msgid "Show weapon ID as:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
 msgid "SHOWAS^None"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
 msgid "Number"
 msgstr "Αριθμός"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:52
 msgid "Bind"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:54
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
 msgid "Show Accuracy"
 msgstr "Εμφάνιση Ακρίβειας"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:56
 msgid "Show Ammo"
 msgstr "Εμφάνιση Πυρομαχικών"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:58
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:59
 msgid "Ammo bar color:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:64
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:65
 msgid "Ammo bar alpha:"
 msgstr ""
 
@@ -3731,85 +3731,85 @@ msgstr ""
 msgid "Panel HUD Setup"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:21
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:22
 msgid "Panel background defaults:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:23 qcsrc/menu/xonotic/util.qc:683
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:24 qcsrc/menu/xonotic/util.qc:683
 msgid "Background:"
 msgstr "Φόντο:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:25
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:37
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:52
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:686
+#: 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
 msgid "Disable"
 msgstr "Απενεργοποίηση"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:30
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:691
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:31
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:78 qcsrc/menu/xonotic/util.qc:691
 msgid "Color:"
 msgstr "Χρώμα:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:699
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:36 qcsrc/menu/xonotic/util.qc:699
 msgid "Border size:"
 msgstr "Μέγεθος περιθωρίου:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:50
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:89
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:51
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:90
 msgid "Team color:"
 msgstr "Χρώμα ομάδας:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:725
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:59 qcsrc/menu/xonotic/util.qc:725
 msgid "Test team color in configure mode"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:728
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:62 qcsrc/menu/xonotic/util.qc:728
 msgid "Padding:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:68
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:69
 msgid "HUD Dock:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:70
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71
 msgid "DOCK^Disabled"
 msgstr "DOCK^Απενεργοποιημένο"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72
 msgid "DOCK^Small"
 msgstr "DOCK^Μικρό"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73
 msgid "DOCK^Medium"
 msgstr "DOCK^Μεσαίο"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:74
 msgid "DOCK^Large"
 msgstr "DOCK^Μεγάλο"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:96
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:97
 msgid "Grid settings:"
 msgstr "Ρυθμίσεις πλέγματος:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:99
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:100
 msgid "Snap panels to grid"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:102
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:103
 msgid "Grid size:"
 msgstr "Μέγεθος πλέγματος:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:103
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:104
 msgid "X:"
 msgstr "Χ:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:109
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:110
 msgid "Y:"
 msgstr "Ψ:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:117
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:118
 msgid "Exit setup"
 msgstr "Έξοδος ρύθμισης"
 
@@ -4394,7 +4394,7 @@ msgid "Key:"
 msgstr "Κωδικός:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:61
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:19
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:20
 msgid "Model:"
 msgstr "Μοντέλο:"
 
@@ -4769,127 +4769,127 @@ msgstr "Όχι"
 msgid "Sandbox Tools"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:24
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:25
 msgid "Spawn"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:25
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:26
 msgid "Remove *"
 msgstr "Αφαίρεση *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:27
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:28
 msgid "Copy *"
 msgstr "Αντίγραφή *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:28
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:29
 msgid "Paste"
 msgstr "Επικόλληση"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:30
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:31
 msgid "Bone:"
 msgstr "Κόκκαλο:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:35
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:36
 msgid "Set * as child"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:36
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:37
 msgid "Attach to *"
 msgstr "Επισύναψη στο *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:38
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:39
 msgid "Detach from *"
 msgstr "Αποσύναψη απο *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:41
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:42
 msgid "Visual object properties for *:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:43
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:44
 msgid "Set skin:"
 msgstr "Ορισμός σχεδίου μενού:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:45
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:46
 msgid "Set alpha:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:48
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:49
 msgid "Set color main:"
 msgstr "Ορισμός κυρίου χρώματος:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:50
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:51
 msgid "Set color glow:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:54
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:55
 msgid "Set frame:"
 msgstr "Ορισμός πλαισίου:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:58
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:59
 msgid "Physical object properties for *:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:60
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:61
 msgid "Set material:"
 msgstr "Ορισμός υλικού:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:66
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:67
 msgid "Set solidity:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:67
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:68
 msgid "Non-solid"
 msgstr "Μη συμπαγές"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:68
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:69
 msgid "Solid"
 msgstr "Συμπαγές"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:69
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:70
 msgid "Set physics:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:70
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:71
 msgid "Static"
 msgstr "Στατικό"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:71
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:72
 msgid "Movable"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:72
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:73
 msgid "Physical"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:74
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:75
 msgid "Set scale:"
 msgstr "Ορισμός μεγέθους:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:76
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:77
 msgid "Set force:"
 msgstr "Ορισμός ισχύης:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:80
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:81
 msgid "Claim *"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:82
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:83
 msgid "* object info"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:83
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:84
 msgid "* mesh info"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:84
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:85
 msgid "* attachment info"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:85
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:86
 msgid "Show help"
 msgstr "Εμφάνιση βοήθειας"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:86
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:87
 msgid "* is the object you are facing"
 msgstr ""
 
@@ -5886,27 +5886,27 @@ msgstr "Νικητής"
 msgid "Team Selection"
 msgstr "Επιλογή Ομαδάς"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:41
+#: qcsrc/menu/xonotic/dialog_teamselect.c:42
 msgid "join 'best' team (auto-select)"
 msgstr "μπες στην «καλύτερη» ομάδα (αυτόματη επιλογή)"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:45
+#: qcsrc/menu/xonotic/dialog_teamselect.c:46
 msgid "red"
 msgstr "κόκκινο"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:46
+#: qcsrc/menu/xonotic/dialog_teamselect.c:47
 msgid "blue"
 msgstr "μπλε"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:47
+#: qcsrc/menu/xonotic/dialog_teamselect.c:48
 msgid "yellow"
 msgstr "κίτρινο"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:48
+#: qcsrc/menu/xonotic/dialog_teamselect.c:49
 msgid "pink"
 msgstr "ροζ"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:51
+#: qcsrc/menu/xonotic/dialog_teamselect.c:52
 msgid "spectate"
 msgstr "θέαση"
 
@@ -6002,7 +6002,12 @@ msgstr ""
 msgid "%s dB"
 msgstr "%s dB"
 
-#: qcsrc/menu/xonotic/slider_resolution.c:72
+#: qcsrc/menu/xonotic/slider_resolution.c:103
+#, c-format
+msgid "%dx%d (%d:%d)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_resolution.c:106
 #, c-format
 msgid "%dx%d"
 msgstr "%dx%d"
index a728399778c8c3538f99f3d59e981ffd7dcea8b1..e528feac5c679065705e3e524ec2391338877e48 100644 (file)
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Xonotic\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-09-13 10:31+0200\n"
-"PO-Revision-Date: 2013-09-13 08:33+0000\n"
+"POT-Creation-Date: 2013-10-03 11:55+0200\n"
+"PO-Revision-Date: 2013-10-03 10:08+0000\n"
 "Last-Translator: divVerent <divVerent@xonotic.org>\n"
 "Language-Team: Spanish (http://www.transifex.com/projects/p/xonotic/language/"
 "es/)\n"
@@ -1232,7 +1232,7 @@ msgstr "%dth"
 msgid "@!#%'n Tuba Throwing"
 msgstr "@!#%'n Tuba Throwing"
 
-#: qcsrc/common/mapinfo.qc:1105 qcsrc/menu/xonotic/skinlist.c:166
+#: qcsrc/common/mapinfo.qc:1109 qcsrc/menu/xonotic/skinlist.c:166
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
@@ -1306,968 +1306,968 @@ msgstr "^1Avisos del servidor:"
 msgid "^7%s (^3%d sec left)"
 msgstr "^7%s(^3%d segundos restantes)"
 
-#: qcsrc/common/notifications.qh:330
+#: qcsrc/common/notifications.qh:342
 #, c-format
 msgid "^BG%s^BG captured the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:331
+#: qcsrc/common/notifications.qh:343
 #, c-format
 msgid ""
 "^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
 "%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:332
+#: qcsrc/common/notifications.qh:344
 #, c-format
 msgid "^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:333
+#: qcsrc/common/notifications.qh:345
 #, c-format
 msgid ""
 "^BG%s^BG captured the ^TC^TT^BG flag in ^F2%s^BG seconds, failing to break "
 "^BG%s^BG's previous record of ^F1%s^BG seconds"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:334
+#: qcsrc/common/notifications.qh:346
 msgid "^BGThe ^TC^TT^BG flag was returned to base by its owner"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:335
+#: qcsrc/common/notifications.qh:347
 msgid "^BGThe ^TC^TT^BG flag was destroyed and returned to base"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:336
+#: qcsrc/common/notifications.qh:348
 msgid "^BGThe ^TC^TT^BG flag was dropped in the base and returned itself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:337
+#: qcsrc/common/notifications.qh:349
 msgid ""
 "^BGThe ^TC^TT^BG flag fell somewhere it couldn't be reached and returned to "
 "base"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:338
+#: qcsrc/common/notifications.qh:350
 #, c-format
 msgid ""
 "^BGThe ^TC^TT^BG flag became impatient after ^F1%.2f^BG seconds and returned "
 "itself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:339
+#: qcsrc/common/notifications.qh:351
 msgid "^BGThe ^TC^TT^BG flag has returned to the base"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:340
+#: qcsrc/common/notifications.qh:352
 #, c-format
 msgid "^BG%s^BG lost the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:341
+#: qcsrc/common/notifications.qh:353
 #, c-format
 msgid "^BG%s^BG got the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:342
+#: qcsrc/common/notifications.qh:354
 #, c-format
 msgid "^BG%s^BG returned the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:343
+#: qcsrc/common/notifications.qh:355
 #, c-format
 msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:344
+#: qcsrc/common/notifications.qh:356
 #, c-format
 msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:345
+#: qcsrc/common/notifications.qh:357
 #, c-format
 msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:346
+#: qcsrc/common/notifications.qh:358
 #, c-format
 msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:346
+#: qcsrc/common/notifications.qh:358
 #, c-format
 msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:347
+#: qcsrc/common/notifications.qh:359
 #, c-format
 msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:348
+#: qcsrc/common/notifications.qh:360
 #, c-format
 msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:349
+#: qcsrc/common/notifications.qh:361
 #, c-format
 msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:350
+#: qcsrc/common/notifications.qh:362
 #, c-format
 msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:351
+#: qcsrc/common/notifications.qh:363
 #, c-format
 msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:352
+#: qcsrc/common/notifications.qh:364
 #, c-format
 msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:352
+#: qcsrc/common/notifications.qh:364
 #, c-format
 msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:353
+#: qcsrc/common/notifications.qh:365
 #, c-format
 msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:354
+#: qcsrc/common/notifications.qh:366
 #, c-format
 msgid ""
 "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:355
+#: qcsrc/common/notifications.qh:367
 #, c-format
 msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:356
+#: qcsrc/common/notifications.qh:368
 #, c-format
 msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:357
+#: qcsrc/common/notifications.qh:369
 #, c-format
 msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:358
+#: qcsrc/common/notifications.qh:370
 #, c-format
 msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:359
+#: qcsrc/common/notifications.qh:371
 #, c-format
 msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:360
+#: qcsrc/common/notifications.qh:372
 #, c-format
 msgid ""
 "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:361
+#: qcsrc/common/notifications.qh:373
 #, c-format
 msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:362
+#: qcsrc/common/notifications.qh:374
 #, c-format
 msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:363
+#: qcsrc/common/notifications.qh:375
 #, c-format
 msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:364
+#: qcsrc/common/notifications.qh:376
 #, c-format
 msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:365
+#: qcsrc/common/notifications.qh:377
 #, c-format
 msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:366
+#: qcsrc/common/notifications.qh:378
 #, c-format
 msgid "^BG%s%s^K1 was thrown into a world of hurt by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:367
+#: qcsrc/common/notifications.qh:379
 #, c-format
 msgid "^BG%s^K1 was moved into the %s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:368
+#: qcsrc/common/notifications.qh:380
 #, c-format
 msgid "^BG%s^K1 became enemies with the Lord of Teamplay%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:369
+#: qcsrc/common/notifications.qh:381
 #, c-format
 msgid "^BG%s^K1 thought they found a nice camping ground%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:370
+#: qcsrc/common/notifications.qh:382
 #, c-format
 msgid "^BG%s^K1 unfairly eliminated themself%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:371
+#: qcsrc/common/notifications.qh:383
 #, c-format
 msgid "^BG%s^K1 %s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:372
+#: qcsrc/common/notifications.qh:384
 #, c-format
 msgid "^BG%s^K1 couldn't catch their breath%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:372
+#: qcsrc/common/notifications.qh:384
 #, c-format
 msgid "^BG%s^K1 was in the water for too long%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:373
+#: qcsrc/common/notifications.qh:385
 #, c-format
 msgid "^BG%s^K1 hit the ground with a bit too much force%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:373
+#: qcsrc/common/notifications.qh:385
 #, c-format
 msgid "^BG%s^K1 hit the ground with a crunch%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:374
+#: qcsrc/common/notifications.qh:386
 #, c-format
 msgid "^BG%s^K1 became a bit too crispy%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:374
+#: qcsrc/common/notifications.qh:386
 #, c-format
 msgid "^BG%s^K1 felt a little hot%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:375
+#: qcsrc/common/notifications.qh:387
 #, c-format
 msgid "^BG%s^K1 died%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:376
+#: qcsrc/common/notifications.qh:388
 #, c-format
 msgid "^BG%s^K1 found a hot place%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:376
+#: qcsrc/common/notifications.qh:388
 #, c-format
 msgid "^BG%s^K1 turned into hot slag%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:377
+#: qcsrc/common/notifications.qh:389
 #, c-format
 msgid "^BG%s^K1 mastered the art of self-nading%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:378
+#: qcsrc/common/notifications.qh:390
 #, c-format
 msgid "^BG%s^K1 died%s%s. What's the point of living without ammo?"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:378
+#: qcsrc/common/notifications.qh:390
 #, c-format
 msgid "^BG%s^K1 ran out of ammo%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:379
+#: qcsrc/common/notifications.qh:391
 #, c-format
 msgid "^BG%s^K1 rotted away%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:380
+#: qcsrc/common/notifications.qh:392
 #, c-format
 msgid "^BG%s^K1 became a shooting star%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:393
 #, c-format
 msgid "^BG%s^K1 was slimed%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:394
 #, c-format
 msgid "^BG%s^K1 couldn't take it anymore%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:395
 #, c-format
 msgid "^BG%s^K1 is now preserved for centuries to come%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:396
 #, c-format
 msgid "^BG%s^K1 switched to the %s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:397
 #, c-format
 msgid "^BG%s^K1 died in an accident%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:398
 #, c-format
 msgid "^BG%s^K1 ran into a turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:399
 #, c-format
 msgid "^BG%s^K1 was blasted away by an eWheel turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:400
 #, c-format
 msgid "^BG%s^K1 got caught up in the FLAC turret fire%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:401
 #, c-format
 msgid "^BG%s^K1 was blasted away by a Hellion turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:402
 #, c-format
 msgid "^BG%s^K1 could not hide from the Hunter turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:403
 #, c-format
 msgid "^BG%s^K1 was riddled full of holes by a Machinegun turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:404
 #, c-format
 msgid "^BG%s^K1 got turned into smoldering gibs by an MLRS turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:405
 #, c-format
 msgid "^BG%s^K1 was phased out by a turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:406
 #, c-format
 msgid "^BG%s^K1 got served some superheated plasma from a turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:407
 #, c-format
 msgid "^BG%s^K1 was electrocuted by a Tesla turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:408
 #, c-format
 msgid "^BG%s^K1 got served a lead enrichment by a Walker turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:409
 #, c-format
 msgid "^BG%s^K1 was impaled by a Walker turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:410
 #, c-format
 msgid "^BG%s^K1 was blasted away by a Walker turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:411
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Bumblebee explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:412
 #, c-format
 msgid "^BG%s^K1 was crushed by a vehicle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:401
+#: qcsrc/common/notifications.qh:413
 #, c-format
 msgid "^BG%s^K1 was caught in a Raptor cluster bomb%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:402
+#: qcsrc/common/notifications.qh:414
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Raptor explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:403
+#: qcsrc/common/notifications.qh:415
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Spiderbot explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:404
+#: qcsrc/common/notifications.qh:416
 #, c-format
 msgid "^BG%s^K1 was blasted to bits by a Spiderbot rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:405
+#: qcsrc/common/notifications.qh:417
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Racer explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:406
+#: qcsrc/common/notifications.qh:418
 #, c-format
 msgid "^BG%s^K1 couldn't find shelter from a Racer rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:407
+#: qcsrc/common/notifications.qh:419
 #, c-format
 msgid "^BG%s^K1 was in the wrong place%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:408
+#: qcsrc/common/notifications.qh:420
 #, c-format
 msgid "^BG%s^K1 was betrayed by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:409
+#: qcsrc/common/notifications.qh:421
 #, c-format
 msgid "^BG%s^K1 was frozen by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:410
+#: qcsrc/common/notifications.qh:422
 #, c-format
 msgid "^BG%s^K3 was revived by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:411
+#: qcsrc/common/notifications.qh:423
 #, c-format
 msgid "^BG%s^K3 was revived by falling"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:412
+#: qcsrc/common/notifications.qh:424
 #, c-format
 msgid "^BG%s^K3 was automatically revived after %s second(s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:413 qcsrc/common/notifications.qh:594
+#: qcsrc/common/notifications.qh:425 qcsrc/common/notifications.qh:612
 msgid "^TC^TT^BG team wins the round"
 msgstr "El equipo ^TC^TT^BG ha ganado la ronda"
 
-#: qcsrc/common/notifications.qh:414 qcsrc/common/notifications.qh:595
+#: qcsrc/common/notifications.qh:426 qcsrc/common/notifications.qh:613
 #, c-format
 msgid "^BG%s^BG wins the round"
 msgstr "^BG%s^BG ha ganado la ronda"
 
-#: qcsrc/common/notifications.qh:415 qcsrc/common/notifications.qh:524
+#: qcsrc/common/notifications.qh:427 qcsrc/common/notifications.qh:542
 msgid "^BGRound tied"
 msgstr "^BGRondo empatada"
 
-#: qcsrc/common/notifications.qh:416 qcsrc/common/notifications.qh:525
+#: qcsrc/common/notifications.qh:428 qcsrc/common/notifications.qh:543
 msgid "^BGRound over, there's no winner"
 msgstr "^BGLa ronda se ha acabado sin un ganador"
 
-#: qcsrc/common/notifications.qh:417
+#: qcsrc/common/notifications.qh:429
 #, c-format
 msgid "^BG%s^K1 froze themself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:418
+#: qcsrc/common/notifications.qh:430
 #, c-format
 msgid "^BGGodmode saved you %s units of damage, cheater!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:419 qcsrc/common/notifications.qh:598
+#: qcsrc/common/notifications.qh:431 qcsrc/common/notifications.qh:616
 #, c-format
 msgid "^BGYou do not have the ^F1%s"
 msgstr "^BG no tienes la ^F1%s"
 
-#: qcsrc/common/notifications.qh:420 qcsrc/common/notifications.qh:599
+#: qcsrc/common/notifications.qh:432 qcsrc/common/notifications.qh:617
 #, c-format
 msgid "^BGYou dropped the ^F1%s^BG%s"
 msgstr "^BGHas tirado la ^F1%s^BG%s"
 
-#: qcsrc/common/notifications.qh:421 qcsrc/common/notifications.qh:600
+#: qcsrc/common/notifications.qh:433 qcsrc/common/notifications.qh:618
 #, c-format
 msgid "^BGYou got the ^F1%s"
 msgstr "^BGObtuviste la ^F1%s"
 
-#: qcsrc/common/notifications.qh:422 qcsrc/common/notifications.qh:601
+#: qcsrc/common/notifications.qh:434 qcsrc/common/notifications.qh:619
 #, c-format
 msgid "^BGYou don't have enough ammo for the ^F1%s"
 msgstr "^BGNo tienes suficientes municiones para ^F1%s"
 
-#: qcsrc/common/notifications.qh:423 qcsrc/common/notifications.qh:602
+#: qcsrc/common/notifications.qh:435 qcsrc/common/notifications.qh:620
 #, c-format
 msgid "^F1%s %s^BG is unable to fire, but its ^F1%s^BG can"
 msgstr "^F1%s %s^BG no puede disparar, pero su ^F1%s^BG aun puede"
 
-#: qcsrc/common/notifications.qh:424 qcsrc/common/notifications.qh:603
+#: qcsrc/common/notifications.qh:436 qcsrc/common/notifications.qh:621
 #, c-format
 msgid "^F1%s^BG is ^F4not available^BG on this map"
 msgstr "^F1%s^BG ^F4 no esta disponible ^BG en este mapa"
 
-#: qcsrc/common/notifications.qh:425
+#: qcsrc/common/notifications.qh:437
 #, c-format
 msgid "^BG%s^F3 connected%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:426
+#: qcsrc/common/notifications.qh:438
 #, c-format
 msgid "^BG%s^F3 connected and joined the ^TC^TT team"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:427
+#: qcsrc/common/notifications.qh:439
 #, c-format
 msgid "^BG%s^F3 is now playing"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:428 qcsrc/common/notifications.qh:606
+#: qcsrc/common/notifications.qh:440 qcsrc/common/notifications.qh:624
 #, c-format
 msgid "^BG%s^BG has dropped the ball!"
 msgstr "^BG%s^BG ha tirado la pelota!"
 
-#: qcsrc/common/notifications.qh:429 qcsrc/common/notifications.qh:607
+#: qcsrc/common/notifications.qh:441 qcsrc/common/notifications.qh:625
 #, c-format
 msgid "^BG%s^BG has picked up the ball!"
 msgstr "^BG%s ^BG ha recogido la pelota!"
 
-#: qcsrc/common/notifications.qh:430
+#: qcsrc/common/notifications.qh:442
 #, c-format
 msgid "^BG%s^BG captured the keys for the ^TC^TT team"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:431
+#: qcsrc/common/notifications.qh:443
 #, c-format
 msgid "^BG%s^BG dropped the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:432
+#: qcsrc/common/notifications.qh:444
 #, c-format
 msgid "^BG%s^BG lost the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:433
+#: qcsrc/common/notifications.qh:445
 #, c-format
 msgid "^BG%s^BG picked up the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:434
+#: qcsrc/common/notifications.qh:446
 #, c-format
 msgid "^BG%s^F3 forfeited"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:435
+#: qcsrc/common/notifications.qh:447
 #, c-format
 msgid "^BG%s^F3 has no more lives left"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:436
+#: qcsrc/common/notifications.qh:448
 #, c-format
 msgid "^BG%s^K1 picked up Invisibility"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:437
+#: qcsrc/common/notifications.qh:449
 #, c-format
 msgid "^BG%s^K1 picked up Shield"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:438
+#: qcsrc/common/notifications.qh:450
 #, c-format
 msgid "^BG%s^K1 picked up Speed"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:439
+#: qcsrc/common/notifications.qh:451
 #, c-format
 msgid "^BG%s^K1 picked up Strength"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:440
+#: qcsrc/common/notifications.qh:452
 #, c-format
 msgid "^BG%s^F3 disconnected"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:441
+#: qcsrc/common/notifications.qh:453
 #, c-format
 msgid "^BG%s^F3 was kicked for idling"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:442
+#: qcsrc/common/notifications.qh:454
 msgid ""
 "^F2You were kicked from the server because you are a spectator and "
 "spectators aren't allowed at the moment."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:443
+#: qcsrc/common/notifications.qh:455
 #, c-format
 msgid "^BG%s^F3 is now spectating"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:444
+#: qcsrc/common/notifications.qh:456
 #, c-format
 msgid "^BG%s^BG has abandoned the race"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:445
+#: qcsrc/common/notifications.qh:457
 #, c-format
 msgid "^BG%s^BG couldn't break their %s%s^BG place record of %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:446
+#: qcsrc/common/notifications.qh:458
 #, c-format
 msgid "^BG%s^BG couldn't break the %s%s^BG place record of %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:447
+#: qcsrc/common/notifications.qh:459
 #, c-format
 msgid "^BG%s^BG has finished the race"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:448
+#: qcsrc/common/notifications.qh:460
 #, c-format
 msgid "^BG%s^BG broke %s^BG's %s%s^BG place record with %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:449
+#: qcsrc/common/notifications.qh:461
 #, c-format
 msgid "^BG%s^BG improved their %s%s^BG place record with %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:450
+#: qcsrc/common/notifications.qh:462
 #, c-format
 msgid ""
 "^BG%s^BG scored a new record with ^F2%s^BG, but unfortunately lacks a UID "
 "and will be lost."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:451
+#: qcsrc/common/notifications.qh:463
 #, c-format
 msgid "^BG%s^BG set the %s%s^BG place record with %s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:452
+#: qcsrc/common/notifications.qh:464
 msgid "^TC^TT ^BGteam scores!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:453
+#: qcsrc/common/notifications.qh:465
 #, 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 ""
 
-#: qcsrc/common/notifications.qh:454
+#: qcsrc/common/notifications.qh:466
 #, c-format
 msgid "^BG%s^K1 picked up a Superweapon"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:455
+#: qcsrc/common/notifications.qh:467
 #, c-format
 msgid ""
 "^F4NOTE: ^BGThe server is running ^F1Xonotic %s (beta)^BG, you have "
 "^F2Xonotic %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:456
+#: qcsrc/common/notifications.qh:468
 #, c-format
 msgid ""
 "^F4NOTE: ^BGThe server is running ^F1Xonotic %s^BG, you have ^F2Xonotic %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:457
+#: qcsrc/common/notifications.qh:469
 #, c-format
 msgid ""
 "^F4NOTE: ^F1Xonotic %s^BG is out, and you still have ^F2Xonotic %s^BG - get "
 "the update from ^F3http://www.xonotic.org/^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:458
+#: qcsrc/common/notifications.qh:470
 #, c-format
 msgid "^F3SVQC Build information: ^F4%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:459
+#: qcsrc/common/notifications.qh:471
 #, c-format
 msgid ""
 "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Accordeon%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:460
+#: qcsrc/common/notifications.qh:472
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Accordeon%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:461
+#: qcsrc/common/notifications.qh:473
 #, c-format
 msgid "^BG%s%s^K1 felt the strong pull of ^BG%s^K1's Crylink%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:462
+#: qcsrc/common/notifications.qh:474
 #, c-format
 msgid "^BG%s^K1 felt the strong pull of their Crylink%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:463
+#: qcsrc/common/notifications.qh:475
 #, c-format
 msgid "^BG%s%s^K1 was blasted by ^BG%s^K1's Electro bolt%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:464
+#: qcsrc/common/notifications.qh:476
 #, c-format
 msgid "^BG%s%s^K1 felt the electrifying air of ^BG%s^K1's Electro combo%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:465
+#: qcsrc/common/notifications.qh:477
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Electro plasma%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:466
+#: qcsrc/common/notifications.qh:478
 #, c-format
 msgid "^BG%s^K1 played with Electro plasma%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:467
+#: qcsrc/common/notifications.qh:479
 #, c-format
 msgid "^BG%s^K1 could not remember where they put their Electro plasma%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:468
+#: qcsrc/common/notifications.qh:480
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's fireball%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:469
+#: qcsrc/common/notifications.qh:481
 #, c-format
 msgid "^BG%s%s^K1 got burnt by ^BG%s^K1's firemine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:470
+#: qcsrc/common/notifications.qh:482
 #, c-format
 msgid "^BG%s^K1 should have used a smaller gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:471
+#: qcsrc/common/notifications.qh:483
 #, c-format
 msgid "^BG%s^K1 forgot about their firemine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:472
+#: qcsrc/common/notifications.qh:484
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by a burst of ^BG%s^K1's Hagar rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:473
+#: qcsrc/common/notifications.qh:485
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Hagar rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:474
+#: qcsrc/common/notifications.qh:486
 #, c-format
 msgid "^BG%s^K1 played with tiny Hagar rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:475
+#: qcsrc/common/notifications.qh:487
 #, c-format
 msgid "^BG%s%s^K1 was cut down with ^BG%s^K1's HLAC%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:476
+#: qcsrc/common/notifications.qh:488
 #, c-format
 msgid "^BG%s^K1 got a little jumpy with their HLAC%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:477
+#: qcsrc/common/notifications.qh:489
 #, c-format
 msgid "^BG%s%s^K1 was caught in ^BG%s^K1's Hook gravity bomb%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:478
+#: qcsrc/common/notifications.qh:490
 #, c-format
 msgid ""
 "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Klein Bottle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:479
+#: qcsrc/common/notifications.qh:491
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Klein Bottle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:480
+#: qcsrc/common/notifications.qh:492
 #, c-format
 msgid "^BG%s%s^K1 was shot to death by ^BG%s^K1's Laser%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:481
+#: qcsrc/common/notifications.qh:493
 #, c-format
 msgid "^BG%s^K1 shot themself to hell with their Laser%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:482
+#: qcsrc/common/notifications.qh:494
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's mine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:483
+#: qcsrc/common/notifications.qh:495
 #, c-format
 msgid "^BG%s^K1 forgot about their mine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:484
+#: qcsrc/common/notifications.qh:496
 #, c-format
 msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Minstanex%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:485
+#: qcsrc/common/notifications.qh:497
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Mortar grenade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:486
+#: qcsrc/common/notifications.qh:498
 #, c-format
 msgid "^BG%s%s^K1 ate ^BG%s^K1's Mortar grenade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:487
+#: qcsrc/common/notifications.qh:499
 #, c-format
 msgid "^BG%s^K1 didn't see their own Mortar grenade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:488
+#: qcsrc/common/notifications.qh:500
 #, c-format
 msgid "^BG%s^K1 blew themself up with their own Mortar%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:489
+#: qcsrc/common/notifications.qh:501
 #, c-format
 msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Nex%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:490
+#: qcsrc/common/notifications.qh:502
 #, c-format
 msgid "^BG%s%s^K1 was sniped with a Rifle by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:491
+#: qcsrc/common/notifications.qh:503
 #, c-format
 msgid "^BG%s%s^K1 died in ^BG%s^K1's Rifle bullet hail%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:492
+#: qcsrc/common/notifications.qh:504
 #, c-format
 msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle bullet hail%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:493
+#: qcsrc/common/notifications.qh:505
 #, c-format
 msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:494
+#: qcsrc/common/notifications.qh:506
 #, c-format
 msgid "^BG%s%s^K1 ate ^BG%s^K1's rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:495
+#: qcsrc/common/notifications.qh:507
 #, c-format
 msgid "^BG%s%s^K1 got too close ^BG%s^K1's rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:496
+#: qcsrc/common/notifications.qh:508
 #, c-format
 msgid "^BG%s^K1 blew themself up with their Rocketlauncher%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:497
+#: qcsrc/common/notifications.qh:509
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Seeker rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:498
+#: qcsrc/common/notifications.qh:510
 #, c-format
 msgid "^BG%s%s^K1 was tagged by ^BG%s^K1's Seeker%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:499
+#: qcsrc/common/notifications.qh:511
 #, c-format
 msgid "^BG%s^K1 played with tiny Seeker rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:500
+#: qcsrc/common/notifications.qh:512
 #, c-format
 msgid "^BG%s%s^K1 was gunned down by ^BG%s^K1's Shotgun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:501
+#: qcsrc/common/notifications.qh:513
 #, c-format
 msgid "^BG%s%s^K1 slapped ^BG%s^K1 around a bit with a large Shotgun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:502
+#: qcsrc/common/notifications.qh:514
 #, c-format
 msgid "^BG%s^K1 is now thinking with portals%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:503
+#: qcsrc/common/notifications.qh:515
 #, c-format
 msgid "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Tuba%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:504
+#: qcsrc/common/notifications.qh:516
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Tuba%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:505
+#: qcsrc/common/notifications.qh:517
 #, c-format
 msgid "^BG%s%s^K1 was sniped by ^BG%s^K1's Machine Gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:506
+#: qcsrc/common/notifications.qh:518
 #, c-format
 msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:518
+#: qcsrc/common/notifications.qh:536
 msgid "^BGYou are attacking!"
 msgstr "^BGEstas atacando!"
 
-#: qcsrc/common/notifications.qh:519
+#: qcsrc/common/notifications.qh:537
 msgid "^BGYou are defending!"
 msgstr "^BGEstas defendiendo!"
 
-#: qcsrc/common/notifications.qh:520
+#: qcsrc/common/notifications.qh:538
 msgid "^F4Begin!"
 msgstr "^F4Inicia!"
 
-#: qcsrc/common/notifications.qh:521
+#: qcsrc/common/notifications.qh:539
 msgid "^F4Game starts in ^COUNT"
 msgstr "^F4El juego inicia en ^COUNT"
 
-#: qcsrc/common/notifications.qh:522
+#: qcsrc/common/notifications.qh:540
 msgid "^F4Round starts in ^COUNT"
 msgstr "^F4Ronda empieza en ^COUNT"
 
-#: qcsrc/common/notifications.qh:523
+#: qcsrc/common/notifications.qh:541
 msgid "^F4Round cannot start"
 msgstr "^F4Ronda no puede empezar"
 
-#: qcsrc/common/notifications.qh:526
+#: qcsrc/common/notifications.qh:544
 msgid "^F2Don't camp!"
 msgstr "^F2No acampes!"
 
-#: qcsrc/common/notifications.qh:527
+#: qcsrc/common/notifications.qh:545
 msgid ""
 "^BGYou are now free.\n"
 "^BGFeel free to ^F2try to capture^BG the flag again\n"
@@ -2277,7 +2277,7 @@ msgstr ""
 "^BGSientete en confianza de ^F2intentar capturar^BG la bandera denuevo\n"
 "^BGsi piensas que lo lograras."
 
-#: qcsrc/common/notifications.qh:528
+#: qcsrc/common/notifications.qh:546
 msgid ""
 "^BGYou are now ^F1shielded^BG from the flag\n"
 "^BGfor ^F2too many unsuccessful attempts^BG to capture.\n"
@@ -2287,163 +2287,163 @@ msgstr ""
 "^BGpor ^F2demasiados intentos fallidos ^BGde captura\n"
 "^BGHaz unos puntos defensivos antes de intentar denuevo."
 
-#: qcsrc/common/notifications.qh:529
+#: qcsrc/common/notifications.qh:547
 msgid "^BGYou captured the ^TC^TT^BG flag!"
 msgstr "^BGHas capturado la bandera ^TC^TT^BG!"
 
-#: qcsrc/common/notifications.qh:530
+#: qcsrc/common/notifications.qh:548
 #, c-format
 msgid "^BGToo many flag throws! Throwing disabled for %s."
 msgstr "^BGDemaciados tiros de bandera! No puedes arrojarla por %s"
 
-#: qcsrc/common/notifications.qh:531
+#: qcsrc/common/notifications.qh:549
 #, c-format
 msgid "^BG%s^BG passed the ^TC^TT^BG flag to %s"
 msgstr "^BG%s^BG ha pasado la bandera ^TC^TT^BG a %s"
 
-#: qcsrc/common/notifications.qh:532
+#: qcsrc/common/notifications.qh:550
 #, c-format
 msgid "^BGYou received the ^TC^TT^BG flag from %s"
 msgstr "^BGHas recivido la bandera ^TC^TT^BG por parte de %s"
 
-#: qcsrc/common/notifications.qh:533
+#: qcsrc/common/notifications.qh:551
 #, c-format
 msgid "^BG%s^BG requests you to pass the flag%s"
 msgstr "^BG%s^BG te pide que pases la bandera%s"
 
-#: qcsrc/common/notifications.qh:534
+#: qcsrc/common/notifications.qh:552
 #, c-format
 msgid "^BGRequesting %s^BG to pass you the flag"
 msgstr "^BGSugiriendo a %s^BG que te pase la bandera"
 
-#: qcsrc/common/notifications.qh:535
+#: qcsrc/common/notifications.qh:553
 #, c-format
 msgid "^BGYou passed the ^TC^TT^BG flag to %s"
 msgstr "^BGHaz pasado la bandera ^TC^TT^BG a %s"
 
-#: qcsrc/common/notifications.qh:536
+#: qcsrc/common/notifications.qh:554
 msgid "^BGYou got the ^TC^TT^BG flag!"
 msgstr "^BGHaz obtenido la bandera ^TC^TT^BG!"
 
-#: qcsrc/common/notifications.qh:537
+#: qcsrc/common/notifications.qh:555
 #, c-format
 msgid "^BGThe %senemy^BG got your flag! Retrieve it!"
 msgstr "^BGEL %senemigo^BG tiene tu bandera! Recuperala!"
 
-#: qcsrc/common/notifications.qh:538
+#: qcsrc/common/notifications.qh:556
 #, c-format
 msgid "^BGThe %senemy (^BG%s%s)^BG got your flag! Retrieve it!"
 msgstr "^BGEl %senemigo (^BG%s%s)^BG tiene tu bandera! Recuperala!"
 
-#: qcsrc/common/notifications.qh:539
+#: qcsrc/common/notifications.qh:557
 #, c-format
 msgid "^BGYour %steam mate^BG got the flag! Protect them!"
 msgstr "^BGTu %scompañero ^BG tiene la bandera! Protegelo!"
 
-#: qcsrc/common/notifications.qh:540
+#: qcsrc/common/notifications.qh:558
 #, c-format
 msgid "^BGYour %steam mate (^BG%s%s)^BG got the flag! Protect them!"
 msgstr "^BGTu %scompañero (^BG%s%s)^BG tiene la bandera! Protegelo!"
 
-#: qcsrc/common/notifications.qh:541
+#: qcsrc/common/notifications.qh:559
 msgid "^BGYou returned the ^TC^TT^BG flag!"
 msgstr "^BGHas regresado la bandera ^TC^TT^BG!"
 
-#: qcsrc/common/notifications.qh:542
+#: qcsrc/common/notifications.qh:560
 msgid "^BGStalemate! Enemies can now see you on radar!"
 msgstr "^BGEstancamiento! Los enemigos ahora te pueden ven en su radar!"
 
-#: qcsrc/common/notifications.qh:543
+#: qcsrc/common/notifications.qh:561
 msgid "^BGStalemate! Flag carriers can now be seen by enemies on radar!"
 msgstr ""
 "^BGEstancamiento! Ahora puedes ver los portadores de bandera enemigos en tu "
 "radar!"
 
-#: qcsrc/common/notifications.qh:544
+#: qcsrc/common/notifications.qh:562
 #, c-format
 msgid "^K3%sYou fragged ^BG%s"
 msgstr "^K3%sEliminaste a ^BG%s"
 
-#: qcsrc/common/notifications.qh:544
+#: qcsrc/common/notifications.qh:562
 #, c-format
 msgid "^K3%sYou scored against ^BG%s"
 msgstr "^K3%sHas anotado en contra de ^BG%s"
 
-#: qcsrc/common/notifications.qh:545
+#: qcsrc/common/notifications.qh:563
 #, c-format
 msgid "^K1%sYou were fragged by ^BG%s"
 msgstr "^K1%sHas sido eliminado por ^BG%s"
 
-#: qcsrc/common/notifications.qh:545
+#: qcsrc/common/notifications.qh:563
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s"
 msgstr "^K1%ssFuiste anotado en contra por ^BG%s"
 
-#: qcsrc/common/notifications.qh:546
+#: qcsrc/common/notifications.qh:564
 #, c-format
 msgid "^K1%sYou were fragged by ^BG%s^BG%s"
 msgstr "^K1%sFuiste eliminado por ^BG%s^BG%s"
 
-#: qcsrc/common/notifications.qh:546
+#: qcsrc/common/notifications.qh:564
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^BG%s"
 msgstr "^K1%sFuiste eliminado por ^BG%s^BG%s"
 
-#: qcsrc/common/notifications.qh:547
+#: qcsrc/common/notifications.qh:565
 #, c-format
 msgid "^K3%sYou fragged ^BG%s^BG%s"
 msgstr "^K3%sHas eliminado a ^BG%s^BG%s"
 
-#: qcsrc/common/notifications.qh:547
+#: qcsrc/common/notifications.qh:565
 #, c-format
 msgid "^K3%sYou scored against ^BG%s^BG%s"
 msgstr "^K3%sHas eliminado a ^BG%s^BG%s"
 
-#: qcsrc/common/notifications.qh:548
+#: qcsrc/common/notifications.qh:566
 #, c-format
 msgid "^K1%sYou scored against ^BG%s^K1 while they were typing"
 msgstr "^K1%sEliminaste a ^BG%s^K1 mientras estaban tecleando"
 
-#: qcsrc/common/notifications.qh:548
+#: qcsrc/common/notifications.qh:566
 #, c-format
 msgid "^K1%sYou typefragged ^BG%s"
 msgstr "^K1%sEliminaste a ^BG%s mientras escribia"
 
-#: qcsrc/common/notifications.qh:549
+#: qcsrc/common/notifications.qh:567
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^K1 while typing!"
 msgstr "^K1%sFuiste eliminado mientras escribias por ^BG%s^K1"
 
-#: qcsrc/common/notifications.qh:549
+#: qcsrc/common/notifications.qh:567
 #, c-format
 msgid "^K1%sYou were typefragged by ^BG%s"
 msgstr "^K1%sFuiste eliminado mientras escribias por ^BG%s"
 
-#: qcsrc/common/notifications.qh:550
+#: qcsrc/common/notifications.qh:568
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^K1 while typing^BG%s"
 msgstr "^K1%sFuiste eliminado por ^BG%s^K1 minentras escribias^BG%s"
 
-#: qcsrc/common/notifications.qh:550
+#: qcsrc/common/notifications.qh:568
 #, c-format
 msgid "^K1%sYou were typefragged by ^BG%s^BG%s"
 msgstr "^K1%sFuiste eliminado mientras escribias por ^BG%s^BG%s"
 
-#: qcsrc/common/notifications.qh:551
+#: qcsrc/common/notifications.qh:569
 #, c-format
 msgid "^K1%sYou scored against ^BG%s^K1 while they were typing^BG%s"
 msgstr "^K1%sEliminate a ^BG%s^K1 mientras escribia^BG%s"
 
-#: qcsrc/common/notifications.qh:551
+#: qcsrc/common/notifications.qh:569
 #, c-format
 msgid "^K1%sYou typefragged ^BG%s^BG%s"
 msgstr "^K1%sEliminate a ^BG%s^BG mientras escribia%s"
 
-#: qcsrc/common/notifications.qh:552
+#: qcsrc/common/notifications.qh:570
 msgid "^BGPress ^F2DROPWEAPON^BG again to toss the nade!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:553
+#: qcsrc/common/notifications.qh:571
 #, c-format
 msgid ""
 "^BGYou have been moved into a different team\n"
@@ -2452,193 +2452,193 @@ msgstr ""
 "^BGHas sido movido a un equipo diferente\n"
 "Ahora estas en el equipo: %s"
 
-#: qcsrc/common/notifications.qh:554
+#: qcsrc/common/notifications.qh:572
 msgid "^K1Don't go against your team mates!"
 msgstr "^K1No te vayas contra tus compañeros!"
 
-#: qcsrc/common/notifications.qh:554
+#: qcsrc/common/notifications.qh:572
 msgid "^K1Don't shoot your team mates!"
 msgstr "^K1No dispares a tus compañeros!"
 
-#: qcsrc/common/notifications.qh:555
+#: qcsrc/common/notifications.qh:573
 msgid "^K1Die camper!"
 msgstr "^K1Muere campero!"
 
-#: qcsrc/common/notifications.qh:555
+#: qcsrc/common/notifications.qh:573
 msgid "^K1Reconsider your tactics, camper!"
 msgstr "^K1Reconsidera tus tacticas, campero!"
 
-#: qcsrc/common/notifications.qh:556
+#: qcsrc/common/notifications.qh:574
 msgid "^K1You unfairly eliminated yourself!"
 msgstr "^K1Te has eliminado injustamente a ti mismo!"
 
-#: qcsrc/common/notifications.qh:557
+#: qcsrc/common/notifications.qh:575
 #, c-format
 msgid "^K1You were %s"
 msgstr "^K1Fuiste %s"
 
-#: qcsrc/common/notifications.qh:558
+#: qcsrc/common/notifications.qh:576
 msgid "^K1You couldn't catch your breath!"
 msgstr "^K1No pudiste recuperar tu aliento!"
 
-#: qcsrc/common/notifications.qh:559
+#: qcsrc/common/notifications.qh:577
 msgid "^K1You hit the ground with a crunch!"
 msgstr "^K1Golpeaste la tierra con un crujido!"
 
-#: qcsrc/common/notifications.qh:560
+#: qcsrc/common/notifications.qh:578
 msgid "^K1You felt a little too hot!"
 msgstr "^K1Te sentiste un poco muy caliente!"
 
-#: qcsrc/common/notifications.qh:560
+#: qcsrc/common/notifications.qh:578
 msgid "^K1You got a little bit too crispy!"
 msgstr "^K1 te volviste un poco muy crujiente!"
 
-#: qcsrc/common/notifications.qh:561
+#: qcsrc/common/notifications.qh:579
 msgid "^K1You killed your own dumb self!"
 msgstr "^K1Te mataste a ti mismso!"
 
-#: qcsrc/common/notifications.qh:561
+#: qcsrc/common/notifications.qh:579
 msgid "^K1You need to be more careful!"
 msgstr "^K1Debes ser mas cuidadoso!"
 
-#: qcsrc/common/notifications.qh:562
+#: qcsrc/common/notifications.qh:580
 msgid "^K1You couldn't stand the heat!"
 msgstr "^K1No pudiste soportar el calor!"
 
-#: qcsrc/common/notifications.qh:563
+#: qcsrc/common/notifications.qh:581
 msgid "^K1Tastes like chicken!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:563
+#: qcsrc/common/notifications.qh:581
 msgid "^K1You forgot to put the pin back in!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:564
+#: qcsrc/common/notifications.qh:582
 msgid "^K1You are respawning for running out of ammo..."
 msgstr "^K1Esta reapareciendo por haberte acabado tus municiones..."
 
-#: qcsrc/common/notifications.qh:564
+#: qcsrc/common/notifications.qh:582
 msgid "^K1You were killed for running out of ammo..."
 msgstr "^K1Fuiste eliminado por acabarte tus municiones..."
 
-#: qcsrc/common/notifications.qh:565
+#: qcsrc/common/notifications.qh:583
 msgid "^K1You grew too old without taking your medicine"
 msgstr "^K1Te volviste muy viejo sin tomar tu medicamento"
 
-#: qcsrc/common/notifications.qh:565
+#: qcsrc/common/notifications.qh:583
 msgid "^K1You need to preserve your health"
 msgstr "^K1Necesitas conservar tu vida"
 
-#: qcsrc/common/notifications.qh:566
+#: qcsrc/common/notifications.qh:584
 msgid "^K1You became a shooting star!"
 msgstr "^K1Te volviste una estrella fugaz!"
 
-#: qcsrc/common/notifications.qh:567
+#: qcsrc/common/notifications.qh:585
 msgid "^K1You melted away in slime!"
 msgstr "^K1Te derretiste entre la baba!"
 
-#: qcsrc/common/notifications.qh:568
+#: qcsrc/common/notifications.qh:586
 msgid "^K1You committed suicide!"
 msgstr "^K1Te has suicidado!"
 
-#: qcsrc/common/notifications.qh:568
+#: qcsrc/common/notifications.qh:586
 msgid "^K1You ended it all!"
 msgstr "^K1Lo acabaste todo!"
 
-#: qcsrc/common/notifications.qh:569
+#: qcsrc/common/notifications.qh:587
 msgid "^K1You got stuck in a swamp!"
 msgstr "^K1Te atoraste en un pantano!"
 
-#: qcsrc/common/notifications.qh:570
+#: qcsrc/common/notifications.qh:588
 #, c-format
 msgid "^BGYou are now on: %s"
 msgstr "^BGEstas bajo: %s"
 
-#: qcsrc/common/notifications.qh:571
+#: qcsrc/common/notifications.qh:589
 msgid "^K1You died in an accident!"
 msgstr "^K1Moriste en una accidente!"
 
-#: qcsrc/common/notifications.qh:572
+#: qcsrc/common/notifications.qh:590
 msgid "^K1You had an unfortunate run in with a turret!"
 msgstr "^K1Tuviste un encuentro desafortunadon con una torreta!"
 
-#: qcsrc/common/notifications.qh:572
+#: qcsrc/common/notifications.qh:590
 msgid "^K1You were fragged by a turret!"
 msgstr "^K1Fuiste eliminado por una torreta!"
 
-#: qcsrc/common/notifications.qh:573
+#: qcsrc/common/notifications.qh:591
 msgid "^K1You had an unfortunate run in with an eWheel turret!"
 msgstr "^K1Tuviste un encuentro desafortunadon con una torreta eWheel!"
 
-#: qcsrc/common/notifications.qh:573
+#: qcsrc/common/notifications.qh:591
 msgid "^K1You were fragged by an eWheel turret!"
 msgstr "^K1Fuiste eliminado por una torreta eWheel!"
 
-#: qcsrc/common/notifications.qh:574
+#: qcsrc/common/notifications.qh:592
 msgid "^K1You had an unfortunate run in with a Walker turret!"
 msgstr "^K1Tuviste un encuentro desafortunadon con una torreta Walker!"
 
-#: qcsrc/common/notifications.qh:574
+#: qcsrc/common/notifications.qh:592
 msgid "^K1You were fragged by a Walker turret!"
 msgstr "^K1Fuiste eliminado por una torreta Walker!"
 
-#: qcsrc/common/notifications.qh:575
+#: qcsrc/common/notifications.qh:593
 msgid "^K1You got caught in the blast of a Bumblebee explosion!"
 msgstr "^K1Fuiste atrapado en el estallido de una explosion de un Bumblebee!"
 
-#: qcsrc/common/notifications.qh:576
+#: qcsrc/common/notifications.qh:594
 msgid "^K1You were crushed by a vehicle!"
 msgstr "^K1Fuiste aplastado por un vehiculo!"
 
-#: qcsrc/common/notifications.qh:577
+#: qcsrc/common/notifications.qh:595
 msgid "^K1You were caught in a Raptor cluster bomb!"
 msgstr "^K1Fuiste atrapado en la bomba de un Raptor!"
 
-#: qcsrc/common/notifications.qh:578
+#: qcsrc/common/notifications.qh:596
 msgid "^K1You got caught in the blast of a Raptor explosion!"
 msgstr "^K1Fuiste atrapado en el estallido de una explosion de Raptor!"
 
-#: qcsrc/common/notifications.qh:579
+#: qcsrc/common/notifications.qh:597
 msgid "^K1You got caught in the blast of a Spiderbot explosion!"
 msgstr "^K1Fuiste atrapado en el estallido de una explosion de Spiderbot!"
 
-#: qcsrc/common/notifications.qh:580
+#: qcsrc/common/notifications.qh:598
 msgid "^K1You were blasted to bits by a Spiderbot rocket!"
 msgstr "^K1Fuiste despedazado por un misil de Spiderbot!"
 
-#: qcsrc/common/notifications.qh:581
+#: qcsrc/common/notifications.qh:599
 msgid "^K1You got caught in the blast of a Racer explosion!"
 msgstr "^K1Fuiste atrapado en el estallido de una explosion de un Racer!"
 
-#: qcsrc/common/notifications.qh:582
+#: qcsrc/common/notifications.qh:600
 msgid "^K1You couldn't find shelter from a Racer rocket!"
 msgstr "^K1No pudiste resguardarte de el misil del Racer!"
 
-#: qcsrc/common/notifications.qh:583
+#: qcsrc/common/notifications.qh:601
 msgid "^K1Watch your step!"
 msgstr "^K1Ciudado donde pisas!"
 
-#: qcsrc/common/notifications.qh:584
+#: qcsrc/common/notifications.qh:602
 #, c-format
 msgid "^K1Moron! You fragged ^BG%s^K1, a team mate!"
 msgstr "^K1Idiota! Has eliminado a ^BG%s^K1, un compañero!"
 
-#: qcsrc/common/notifications.qh:584
+#: qcsrc/common/notifications.qh:602
 #, c-format
 msgid "^K1Moron! You went against ^BG%s^K1, a team mate!"
 msgstr "^K1Idiota! te fuiste en contra de ^BG%s^K1, un compañero!"
 
-#: qcsrc/common/notifications.qh:585
+#: qcsrc/common/notifications.qh:603
 #, c-format
 msgid "^K1You were fragged by ^BG%s^K1, a team mate"
 msgstr "^K1Has sido eliminado por ^BG%s^K1, un compañero"
 
-#: qcsrc/common/notifications.qh:585
+#: qcsrc/common/notifications.qh:603
 #, c-format
 msgid "^K1You were scored against by ^BG%s^K1, a team mate"
 msgstr "^K1Tu compañero ^BG%s^K1, te ha eliminado"
 
-#: qcsrc/common/notifications.qh:586
+#: qcsrc/common/notifications.qh:604
 msgid ""
 "^K1Stop idling!\n"
 "^BGDisconnecting in ^COUNT..."
@@ -2646,48 +2646,48 @@ msgstr ""
 "^K1Deja de estar inactivo!\n"
 "^BGDesconectando en ^COUNT"
 
-#: qcsrc/common/notifications.qh:587
+#: qcsrc/common/notifications.qh:605
 msgid "^F2You picked up some extra lives"
 msgstr "^F2Has recogido unas vidas extras"
 
-#: qcsrc/common/notifications.qh:588
+#: qcsrc/common/notifications.qh:606
 #, c-format
 msgid "^K3You froze ^BG%s"
 msgstr "^F2Congelaste a ^BG%s"
 
-#: qcsrc/common/notifications.qh:589
+#: qcsrc/common/notifications.qh:607
 #, c-format
 msgid "^K1You were frozen by ^BG%s"
 msgstr "^K1Fuiste congelado por ^BG%s"
 
-#: qcsrc/common/notifications.qh:590
+#: qcsrc/common/notifications.qh:608
 #, c-format
 msgid "^K3You revived ^BG%s"
 msgstr "^K3Reviviste a ^BG%s"
 
-#: qcsrc/common/notifications.qh:591
+#: qcsrc/common/notifications.qh:609
 msgid "^K3You revived yourself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:592
+#: qcsrc/common/notifications.qh:610
 #, c-format
 msgid "^K3You were revived by ^BG%s"
 msgstr "^K3Fuiste revivido por ^BG%s"
 
-#: qcsrc/common/notifications.qh:593
+#: qcsrc/common/notifications.qh:611
 #, c-format
 msgid "^K3You were automatically revived after %s second(s)"
 msgstr "^K3Fuiste revivido automaticamente despues de %s segundo(s)"
 
-#: qcsrc/common/notifications.qh:596
+#: qcsrc/common/notifications.qh:614
 msgid "^K1You froze yourself"
 msgstr "^K1Te congelaste solo"
 
-#: qcsrc/common/notifications.qh:597
+#: qcsrc/common/notifications.qh:615
 msgid "^K1Round already started, you spawn as frozen"
 msgstr "^K1Ronda inicio previamente, apareceras congelado"
 
-#: qcsrc/common/notifications.qh:604
+#: qcsrc/common/notifications.qh:622
 msgid ""
 "^K1No spawnpoints available!\n"
 "Hope your team can fix it..."
@@ -2695,7 +2695,7 @@ msgstr ""
 "^K1No hay espacio disponible para aparecer\n"
 "Confia en que tu equipo lo pueda arreglar..."
 
-#: qcsrc/common/notifications.qh:605
+#: qcsrc/common/notifications.qh:623
 msgid ""
 "^K1You may not join the game at this time.\n"
 "The player limit reached maximum capacity."
@@ -2703,12 +2703,12 @@ msgstr ""
 "^K1No puedes unirte al juego en este momento.\n"
 "La capacidad maxima de jugadores ha sido alacanzada."
 
-#: qcsrc/common/notifications.qh:608
+#: qcsrc/common/notifications.qh:626
 msgid "^BGKilling people while you don't have the ball gives no points!"
 msgstr ""
 "^BGEliminar a otros mientras no tienes la pelota no te consigue puntos!"
 
-#: qcsrc/common/notifications.qh:609
+#: qcsrc/common/notifications.qh:627
 msgid ""
 "^BGAll keys are in your team's hands!\n"
 "Help the key carriers to meet!"
@@ -2716,7 +2716,7 @@ msgstr ""
 "^BGTodas las llaves estan en possesion de to equipo!\n"
 "Ayuda a que los portadores de las llaves se puedan unir!"
 
-#: qcsrc/common/notifications.qh:610
+#: qcsrc/common/notifications.qh:628
 msgid ""
 "^BGAll keys are in ^TC^TT team^BG's hands!\n"
 "Interfere ^F4NOW^BG!"
@@ -2724,7 +2724,7 @@ msgstr ""
 "^BGtTodas las llaves estan en manos del equipo ^TC^TT^BG!\n"
 "Interfiere ^F4AHORA^BG!"
 
-#: qcsrc/common/notifications.qh:611
+#: qcsrc/common/notifications.qh:629
 msgid ""
 "^BGAll keys are in your team's hands!\n"
 "Meet the other key carriers ^F4NOW^BG!"
@@ -2732,19 +2732,19 @@ msgstr ""
 "^BGTodas las llaves en manos de tu equipo!\n"
 "Encuentra a los otros portadores de llaves ^F4AHORA^BG!"
 
-#: qcsrc/common/notifications.qh:612
+#: qcsrc/common/notifications.qh:630
 msgid "^F4Round will start in ^COUNT"
 msgstr "^F4La ronda iniciara en ^COUNT"
 
-#: qcsrc/common/notifications.qh:613
+#: qcsrc/common/notifications.qh:631
 msgid "^BGScanning frequency range..."
 msgstr "^BGEscaneando rango de frequencia..."
 
-#: qcsrc/common/notifications.qh:614
+#: qcsrc/common/notifications.qh:632
 msgid "^BGYou are starting with the ^TC^TT Key"
 msgstr "^BGEstas empezando con la llave ^TC^TT"
 
-#: qcsrc/common/notifications.qh:615 qcsrc/common/notifications.qh:616
+#: qcsrc/common/notifications.qh:633 qcsrc/common/notifications.qh:634
 #, c-format
 msgid ""
 "^BGWaiting for players to join...\n"
@@ -2753,54 +2753,54 @@ msgstr ""
 "^BGEsperando a que se unan jugadores...\n"
 "Se necesitan jugadores activos para: %s"
 
-#: qcsrc/common/notifications.qh:617
+#: qcsrc/common/notifications.qh:635
 #, c-format
 msgid "^BGWaiting for %s player(s) to join..."
 msgstr "^BGEsperando a que %s jugador(es) se unan..."
 
-#: qcsrc/common/notifications.qh:618
+#: qcsrc/common/notifications.qh:636
 msgid "^F4^COUNT^BG left to find some ammo!"
 msgstr "^F4^COUNT^BG restante para encontrar municiones!"
 
-#: qcsrc/common/notifications.qh:619
+#: qcsrc/common/notifications.qh:637
 msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
 msgstr "^BGConsigue municiones or moriras en ^F4^COUNT^BG!"
 
-#: qcsrc/common/notifications.qh:619
+#: qcsrc/common/notifications.qh:637
 msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
 msgstr "^BGConsigue municiones! Te queda ^F4^COUNT^BG!"
 
-#: qcsrc/common/notifications.qh:620
+#: qcsrc/common/notifications.qh:638
 #, c-format
 msgid "^F2Extra lives remaining: ^K1%s"
 msgstr "^F2Vidas sobrantes: ^K1%s"
 
-#: qcsrc/common/notifications.qh:621
+#: qcsrc/common/notifications.qh:639
 msgid "^BGSecondary fire inflicts no damage!"
 msgstr "^BGModo de fuego secundary no hace daño!"
 
-#: qcsrc/common/notifications.qh:622
+#: qcsrc/common/notifications.qh:640
 #, c-format
 msgid "^BG%s"
 msgstr "^BG%s"
 
-#: qcsrc/common/notifications.qh:623
+#: qcsrc/common/notifications.qh:641
 #, c-format
 msgid ""
 "^F2^COUNT^BG until weapon change...\n"
 "Next weapon: ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:624
+#: qcsrc/common/notifications.qh:642
 #, c-format
 msgid "^F2Active weapon: ^F1%s"
 msgstr "^F2Arma activa: ^F1%s"
 
-#: qcsrc/common/notifications.qh:625
+#: qcsrc/common/notifications.qh:643
 msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:626
+#: qcsrc/common/notifications.qh:644
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "Keep fragging until we have a winner!"
@@ -2808,7 +2808,7 @@ msgstr ""
 "^F2Ahora jugando en ^F4TIEMPO EXTRA^F2!\n"
 "Sigue eliminando hasta que tengamos un ganador!"
 
-#: qcsrc/common/notifications.qh:626
+#: qcsrc/common/notifications.qh:644
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "Keep scoring until we have a winner!"
@@ -2816,7 +2816,7 @@ msgstr ""
 "^F2Ahora jugando en ^F4TIEMPO EXTRA^F2!\n"
 "Sigue acertando hasta que tengamos un ganador!"
 
-#: qcsrc/common/notifications.qh:627
+#: qcsrc/common/notifications.qh:645
 #, c-format
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
@@ -2825,210 +2825,210 @@ msgstr ""
 "^F2Ahora jugando en ^F4TIEMPO EXTRA^F2!\n"
 "^BGSe ha añadido ^F4%s^BG al juego!"
 
-#: qcsrc/common/notifications.qh:628
+#: qcsrc/common/notifications.qh:646
 msgid "^F2Invisibility has worn off"
 msgstr "^F2Invisibility se ha agotado"
 
-#: qcsrc/common/notifications.qh:629
+#: qcsrc/common/notifications.qh:647
 msgid "^F2Shield has worn off"
 msgstr "^F2Shield se ha agotado"
 
-#: qcsrc/common/notifications.qh:630
+#: qcsrc/common/notifications.qh:648
 msgid "^F2Speed has worn off"
 msgstr "^F2Speed se ha agotado"
 
-#: qcsrc/common/notifications.qh:631
+#: qcsrc/common/notifications.qh:649
 msgid "^F2Strength has worn off"
 msgstr "^F2Strength se ha agotado"
 
-#: qcsrc/common/notifications.qh:632
+#: qcsrc/common/notifications.qh:650
 msgid "^F2You are invisible"
 msgstr "^F2Eres invisible"
 
-#: qcsrc/common/notifications.qh:633
+#: qcsrc/common/notifications.qh:651
 msgid "^F2Shield surrounds you"
 msgstr "^F2Un escudo te rodea"
 
-#: qcsrc/common/notifications.qh:634
+#: qcsrc/common/notifications.qh:652
 msgid "^F2You are on speed"
 msgstr "^F2Tienes la velocidad"
 
-#: qcsrc/common/notifications.qh:635
+#: qcsrc/common/notifications.qh:653
 msgid "^F2Strength infuses your weapons with devastating power"
 msgstr "^F2Strength infunde tus armas con poder devastador"
 
-#: qcsrc/common/notifications.qh:636
+#: qcsrc/common/notifications.qh:654
 msgid "^F2The race is over, finish your lap!"
 msgstr "^F2La carrera se ha terminado, completa tu vuelta!"
 
-#: qcsrc/common/notifications.qh:637
+#: qcsrc/common/notifications.qh:655
 msgid "^F2Superweapons have broken down"
 msgstr "^F2Superarmas se han descompuesto"
 
-#: qcsrc/common/notifications.qh:638
+#: qcsrc/common/notifications.qh:656
 msgid "^F2Superweapons have been lost"
 msgstr "^F2Se han perdido las superarmas"
 
-#: qcsrc/common/notifications.qh:639
+#: qcsrc/common/notifications.qh:657
 msgid "^F2You now have a superweapon"
 msgstr "^F2Ahora tienes una superarma"
 
-#: qcsrc/common/notifications.qh:640
+#: qcsrc/common/notifications.qh:658
 msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
 msgstr "^K1Cambiando a ^TC^TT^K1 en ^COUNT"
 
-#: qcsrc/common/notifications.qh:641
+#: qcsrc/common/notifications.qh:659
 msgid "^K1Changing team in ^COUNT"
 msgstr "^K1Cambiando equipo en ^COUNT"
 
-#: qcsrc/common/notifications.qh:642
+#: qcsrc/common/notifications.qh:660
 msgid "^K1Spectating in ^COUNT"
 msgstr "^K1Cambiando a espectador en ^COUNT"
 
-#: qcsrc/common/notifications.qh:643
+#: qcsrc/common/notifications.qh:661
 msgid "^K1Suicide in ^COUNT"
 msgstr "^K1Suicidio en ^COUNT"
 
-#: qcsrc/common/notifications.qh:644
+#: qcsrc/common/notifications.qh:662
 msgid "^F4Timeout begins in ^COUNT"
 msgstr "^F4Tiempo fuera comienza en ^COUNT"
 
-#: qcsrc/common/notifications.qh:645
+#: qcsrc/common/notifications.qh:663
 msgid "^F4Timeout ends in ^COUNT"
 msgstr "^F4Tiempo fuera se acaba en ^COUNT"
 
-#: qcsrc/common/notifications.qh:907 qcsrc/common/notifications.qh:908
+#: qcsrc/common/notifications.qh:937 qcsrc/common/notifications.qh:938
 #, c-format
 msgid " (near %s)"
 msgstr " (cerca de %s)"
 
-#: qcsrc/common/notifications.qh:915 qcsrc/common/notifications.qh:916
+#: qcsrc/common/notifications.qh:945 qcsrc/common/notifications.qh:946
 msgid "primary"
 msgstr "primario"
 
-#: qcsrc/common/notifications.qh:915 qcsrc/common/notifications.qh:916
+#: qcsrc/common/notifications.qh:945 qcsrc/common/notifications.qh:946
 msgid "secondary"
 msgstr " secundario"
 
-#: qcsrc/common/notifications.qh:926
+#: qcsrc/common/notifications.qh:956
 #, c-format
 msgid " ^F1(Press %s)"
 msgstr " ^F1(Presiona %s)"
 
-#: qcsrc/common/notifications.qh:935
+#: qcsrc/common/notifications.qh:965
 #, c-format
 msgid " with %s"
 msgstr " con %s"
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 #, c-format
 msgid "%s^K1 made a TRIPLE FRAG! %s^BG"
 msgstr "%s^K1 ha hecho una ELIMINACION TRIPLE! %s^BG"
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 #, c-format
 msgid "%s^K1 made a TRIPLE SCORE! %s^BG"
 msgstr "%s^K1 ha hecho una ELIMINACION TRIPLE! %s^BG"
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 msgid "TRIPLE FRAG! "
 msgstr "ELIMINACION TRIPLE!"
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 #, c-format
 msgid "%s^K1 made FIVE SCORES IN A ROW! %s^BG"
 msgstr "%s^K1 hizo QUINCE ANOTACIONES SEGUIDAS! %s^BG"
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 #, c-format
 msgid "%s^K1 unlocked RAGE! %s^BG"
 msgstr "%s^K1 desbloqueo FURIA! %s^BG"
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 msgid "RAGE! "
 msgstr "FURIA!"
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 #, c-format
 msgid "%s^K1 made TEN SCORES IN A ROW! %s^BG"
 msgstr "%s^K1 elimino a DIEZ JUGADORES SEGUIDOS! %s^BG"
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 #, c-format
 msgid "%s^K1 started a MASSACRE! %s^BG"
 msgstr "%s^K1 ha empezado una MASSACRE! %s^BG"
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 msgid "MASSACRE! "
 msgstr "MASSACRE!"
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 #, c-format
 msgid "%s^K1 executed MAYHEM! %s^BG"
 msgstr "%s^K1 ha ejecutado un ALBOROTO! %s^BG"
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 #, c-format
 msgid "%s^K1 made FIFTEEN SCORES IN A ROW! %s^BG"
 msgstr "%s^K1 ha hecho QUINCE ELIMINACIONES SEGUIDAS! %s^BG"
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 msgid "MAYHEM! "
 msgstr "ALBOROTO!"
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 #, c-format
 msgid "%s^K1 is a BERSERKER! %s^BG"
 msgstr "%s^K1 es un BERSERKER! %s^BG"
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 #, c-format
 msgid "%s^K1 made TWENTY SCORES IN A ROW! %s^BG"
 msgstr "%s^K1 ha hecho VIENTE ELIMINACIONES SEGUIDAS! %s^BG"
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 msgid "BERSERKER! "
 msgstr "BERSERKER!"
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 #, c-format
 msgid "%s^K1 inflicts CARNAGE! %s^BG"
 msgstr "%s^K1 ha hecho una MATANZA! %s^BG"
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 #, c-format
 msgid "%s^K1 made TWENTY FIVE SCORES IN A ROW! %s^BG"
 msgstr "%s^K1 ha hecho VEINTE Y CINCO ELIMINACIONES SEGUIDAS! %s^BG"
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 msgid "CARNAGE! "
 msgstr "MATANZA!"
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 #, c-format
 msgid "%s^K1 made THIRTY SCORES IN A ROW! %s^BG"
 msgstr "%s^K1 ha hecho TREINTA ELIMINACIONES SEGUIDAS! %s^BG"
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 #, c-format
 msgid "%s^K1 unleashes ARMAGEDDON! %s^BG"
 msgstr "%s^K1 destata el ARMAGEDDON! %s^BG"
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 msgid "ARMAGEDDON! "
 msgstr "ARMAGEDDON!"
 
-#: qcsrc/common/notifications.qh:956
+#: qcsrc/common/notifications.qh:986
 #, c-format
 msgid "%s(^F1Bot^BG)"
 msgstr "%s(^F1Bot^BG)"
 
-#: qcsrc/common/notifications.qh:958
+#: qcsrc/common/notifications.qh:988
 #, c-format
 msgid "%s(Ping ^F1%d^BG)"
 msgstr "%s(Latencia ^F1%d^BG)"
 
-#: qcsrc/common/notifications.qh:964
+#: qcsrc/common/notifications.qh:994
 #, c-format
 msgid ""
 "\n"
@@ -3037,7 +3037,7 @@ msgstr ""
 "\n"
 "(Vida ^1%d^BG / Armadura ^2%d^BG)%s"
 
-#: qcsrc/common/notifications.qh:966
+#: qcsrc/common/notifications.qh:996
 #, c-format
 msgid ""
 "\n"
@@ -3046,68 +3046,68 @@ msgstr ""
 "\n"
 "(^F4Muerto^BG)%s"
 
-#: qcsrc/common/notifications.qh:1003 qcsrc/common/notifications.qh:1016
+#: qcsrc/common/notifications.qh:1033 qcsrc/common/notifications.qh:1046
 #, c-format
 msgid "%d score spree! "
 msgstr "%d anotaciones seguidas!"
 
-#: qcsrc/common/notifications.qh:1015
+#: qcsrc/common/notifications.qh:1045
 #, c-format
 msgid "%d frag spree! "
 msgstr "%d eliminaciones seguidas!"
 
-#: qcsrc/common/notifications.qh:1028
+#: qcsrc/common/notifications.qh:1058
 msgid "First blood! "
 msgstr "Primera eliminacion!"
 
-#: qcsrc/common/notifications.qh:1028
+#: qcsrc/common/notifications.qh:1058
 msgid "First score! "
 msgstr "Primera anotacion!"
 
-#: qcsrc/common/notifications.qh:1032
+#: qcsrc/common/notifications.qh:1062
 msgid "First casualty! "
 msgstr "Primera victima!"
 
-#: qcsrc/common/notifications.qh:1032
+#: qcsrc/common/notifications.qh:1062
 msgid "First victim! "
 msgstr "Primera victima!"
 
-#: qcsrc/common/notifications.qh:1073
+#: qcsrc/common/notifications.qh:1103
 #, c-format
 msgid "%s^K1 has %d frags in a row! %s^BG"
 msgstr "%s^K1 tiene %d eliminaciones seguidas! %s^BG"
 
-#: qcsrc/common/notifications.qh:1074
+#: qcsrc/common/notifications.qh:1104
 #, c-format
 msgid "%s^K1 made %d scores in a row! %s^BG"
 msgstr "%s^K1 tiene %d eliminaciones seguidas! %s^BG"
 
-#: qcsrc/common/notifications.qh:1092
+#: qcsrc/common/notifications.qh:1122
 #, c-format
 msgid "%s^K1 drew first blood! %s^BG"
 msgstr "%s^K1 ha sido el primero en eliminar a alguien! %s^BG"
 
-#: qcsrc/common/notifications.qh:1093
+#: qcsrc/common/notifications.qh:1123
 #, c-format
 msgid "%s^K1 got the first score! %s^BG"
 msgstr "%s^K1 fue el primero en eliminar a alguien! %s^BG"
 
-#: qcsrc/common/notifications.qh:1109
+#: qcsrc/common/notifications.qh:1139
 #, c-format
 msgid ", ending their %d frag spree"
 msgstr ", finalizando su cadena de %d eliminaciones"
 
-#: qcsrc/common/notifications.qh:1110
+#: qcsrc/common/notifications.qh:1140
 #, c-format
 msgid ", ending their %d score spree"
 msgstr ", finalizando su cadena de %d eliminaciones"
 
-#: qcsrc/common/notifications.qh:1124
+#: qcsrc/common/notifications.qh:1154
 #, c-format
 msgid ", losing their %d frag spree"
 msgstr ", perdiendo su cadena de %d eliminaciones"
 
-#: qcsrc/common/notifications.qh:1125
+#: qcsrc/common/notifications.qh:1155
 #, c-format
 msgid ", losing their %d score spree"
 msgstr ", perdiendo su cadena de %d eliminaciones"
@@ -3176,11 +3176,11 @@ msgstr "Item %d"
 msgid "%d (%s)"
 msgstr "%d (%s)"
 
-#: qcsrc/menu/item/textslider.c:29 qcsrc/menu/item/textslider.c:31
+#: qcsrc/menu/item/textslider.c:31 qcsrc/menu/item/textslider.c:33
 msgid "custom"
 msgstr "Personalizado"
 
-#: qcsrc/menu/menu.qc:56
+#: qcsrc/menu/menu.qc:59
 #, c-format
 msgid "^4MQC Build information: ^1%s\n"
 msgstr "^4MQC Información de compilación/build %s\n"
@@ -3227,7 +3227,7 @@ msgstr "Créditos"
 #: 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_sandboxtools.c:89
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:90
 #: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:77
 #: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:21
 msgid "OK"
@@ -3283,33 +3283,33 @@ msgstr "Guardar la configuración"
 msgid "Ammo Panel"
 msgstr "Panel de munición"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:23
 msgid "Ammunition display:"
 msgstr "Visualización de la munición:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:26
 msgid "Show only current ammo type"
 msgstr "Mostrar sólo el tipo de la munición actual"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
 msgid "Align icon:"
 msgstr "Alinear icono:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:36
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:28
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:40
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:28
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:40
-msgid "Left"
-msgstr "Izquierda"
-
 #: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:30
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:38
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:29
 #: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:41
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:29
 #: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:41
+msgid "Left"
+msgstr "Izquierda"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:42
 msgid "Right"
 msgstr "Derecha"
 
@@ -3317,28 +3317,28 @@ msgstr "Derecha"
 msgid "Centerprint"
 msgstr "Información principal"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:24
 msgid "Message duration:"
 msgstr "Duración del mensaje:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:27
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:28
 msgid "Fade time:"
 msgstr "Tiempo hasta desaparecer:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:32
 msgid "Flip messages order"
 msgstr "Invertir el orden de los mensajes"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:34
 msgid "Text alignment:"
 msgstr "Alineación del texto:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:38
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:51
 msgid "Center"
 msgstr "Centro"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:41
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:42
 msgid "Font scale:"
 msgstr "Escala de fuente:"
 
@@ -3346,19 +3346,19 @@ msgstr "Escala de fuente:"
 msgid "Chat Panel"
 msgstr "Panel del chat"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:23
 msgid "Chat entries:"
 msgstr "Mensajes:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:26
 msgid "Chat size:"
 msgstr "Tamaño del texto:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:30
 msgid "Chat lifetime:"
 msgstr "Mostrar durante:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:34
 msgid "Chat beep sound"
 msgstr "Sonido del chat"
 
@@ -3366,11 +3366,11 @@ msgstr "Sonido del chat"
 msgid "Engine Info Panel"
 msgstr "Panel de Información del Motor"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:23
 msgid "Engine info:"
 msgstr "Información del Motor:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:26
 msgid "Use an averaging algorithm for fps"
 msgstr "Usar un algoritmo de promediado de fps"
 
@@ -3378,36 +3378,36 @@ msgstr "Usar un algoritmo de promediado de fps"
 msgid "Health/Armor Panel"
 msgstr "Panel de Vida/Armadura"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:22
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:23
 msgid "Enable status bar"
 msgstr "Activar la barra de estado"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:24
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:25
 msgid "Status bar alignment:"
 msgstr "Alineación de la barra de estado:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:32
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:42
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:32
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:43
 msgid "Inward"
 msgstr "Dentro"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:34
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:43
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:34
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:44
 msgid "Outward"
 msgstr "Fuera"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:37
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:38
 msgid "Icon alignment:"
 msgstr "Alineación de los iconos:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:46
 msgid "Flip health and armor positions"
 msgstr "Invertir la posición de vida y armadura"
 
@@ -3415,11 +3415,11 @@ msgstr "Invertir la posición de vida y armadura"
 msgid "Info Messages Panel"
 msgstr "Panel de información de mensajes"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:23
 msgid "Info messages:"
 msgstr "Información de mensajes:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:26
 msgid "Flip align"
 msgstr "Invertir alineación"
 
@@ -3431,23 +3431,23 @@ msgstr ""
 msgid "Notification Panel"
 msgstr "Panel de notificaciones"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:23
 msgid "Notifications:"
 msgstr "Notificaciones:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:26
 msgid "Also print notifications to the console"
 msgstr "Mostrar también las notificaciones en la consola"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:29
 msgid "Flip notify order"
 msgstr "Invertir el orden de las notificaciones"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:32
 msgid "Entry lifetime:"
 msgstr "Mostrar durante: "
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:36
 msgid "Entry fadetime:"
 msgstr "Desvanecimiento de la notificación:"
 
@@ -3455,96 +3455,96 @@ msgstr "Desvanecimiento de la notificación:"
 msgid "Physics Panel"
 msgstr "Panel de la física"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:22
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:22
 msgid "Panel disabled"
 msgstr "Panel desactivado"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
 msgid "Panel enabled"
 msgstr "Panel activado"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
 msgid "Panel enabled even observing"
 msgstr "Activar panel también en modo espectador"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:26
 msgid "Panel enabled only in Race/CTS"
 msgstr "Activar panel en modo Race/CTS"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:32
 msgid "Status bar"
 msgstr "Barra de estado"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:49
 msgid "Left align"
 msgstr "Alinear a la izquierda"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:53
 msgid "Right align"
 msgstr "Alinear a la derecha"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
 msgid "Inward align"
 msgstr "Alineado interior"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:37
 msgid "Outward align"
 msgstr "Alineado exterior"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:41
 msgid "Flip speed/acceleration positions"
 msgstr "Invertir la posición de velocidad/aceleración"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
 #: qcsrc/menu/xonotic/dialog_settings_misc.c:29
 msgid "Speed:"
 msgstr "Velocidad:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:46
 msgid "Include vertical speed"
 msgstr "Incluir velocidad vertical"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:56
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:57
 msgid "Speed unit:"
 msgstr "Unidad de velocidad:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:58
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
 msgid "qu/s"
 msgstr "qu/s"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
 msgid "m/s"
 msgstr "m/s"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
 msgid "km/h"
 msgstr "km/h"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
 msgid "mph"
 msgstr "mph"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:63
 msgid "knots"
 msgstr "nudos"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:64
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:65
 msgid "Show"
 msgstr "Mostrar"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:67
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:68
 msgid "Top speed"
 msgstr "Velocidad máxima"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:73
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
 msgid "Acceleration:"
 msgstr "Aceleración:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:75
 msgid "Include vertical acceleration"
 msgstr "Incluir aceleración vertical"
 
@@ -3552,7 +3552,7 @@ msgstr "Incluir aceleración vertical"
 msgid "Powerups Panel"
 msgstr "Panel de poderes"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:46
 msgid "Flip strength and shield positions"
 msgstr "Invertir la posición de escudo y fuerza"
 
@@ -3560,16 +3560,16 @@ msgstr "Invertir la posición de escudo y fuerza"
 msgid "Pressed Keys Panel"
 msgstr "Panel de teclas presionadas"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
 msgid "Panel enabled when spectating"
 msgstr "Activar el panel en modo espectador"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:24
 msgid "Panel always enabled"
 msgstr "Panel activado siempre"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:31
 msgid "Forced aspect:"
 msgstr "Forzar aspecto:"
 
@@ -3581,68 +3581,68 @@ msgstr "Panel del cronómetro de carrera"
 msgid "Radar Panel"
 msgstr "Panel del radar"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
 msgid "Panel enabled in teamgames"
 msgstr "Activar panel en modos por equipos"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:30
 msgid "Radar:"
 msgstr "Radar:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:32
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:43
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:82
+#: 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
 msgid "Alpha:"
 msgstr "Transparencia:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:37
 msgid "Rotation:"
 msgstr "Rotación:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:39
 msgid "Forward"
 msgstr "Al frente"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:40
 msgid "West"
 msgstr "Oeste"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:41
 msgid "South"
 msgstr "Sur"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:41
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:42
 msgid "East"
 msgstr "Este"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:43
 msgid "North"
 msgstr "Norte"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:46
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:47
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:63
 msgid "Scale:"
 msgstr "Escala:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:50
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:51
 msgid "Zoom mode:"
 msgstr "Modo de zoom:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:52
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:53
 msgid "Zoomed in"
 msgstr "Ampliado"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:53
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:54
 msgid "Zoomed out"
 msgstr "Reducido"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:54
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:55
 msgid "Always zoomed"
 msgstr "Siempre ampliado"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:55
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:56
 msgid "Never zoomed"
 msgstr "Nunca ampliado"
 
@@ -3650,23 +3650,23 @@ msgstr "Nunca ampliado"
 msgid "Score Panel"
 msgstr "Panel de puntos"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:23
 msgid "Score:"
 msgstr "Puntuación:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
 msgid "Rankings:"
 msgstr "Posiciones:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
 msgid "Off"
 msgstr "Desactivado"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
 msgid "And me"
 msgstr "Y yo"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:29
 msgid "Pure"
 msgstr "Puro"
 
@@ -3674,11 +3674,11 @@ msgstr "Puro"
 msgid "Timer Panel"
 msgstr "Panel del reloj"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:23
 msgid "Timer:"
 msgstr "Reloj:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:26
 msgid "Show elapsed time"
 msgstr "Mostrar el tiempo transcurrido"
 
@@ -3686,7 +3686,7 @@ msgstr "Mostrar el tiempo transcurrido"
 msgid "Vote Panel"
 msgstr "Panel de las votaciones"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:23
 msgid "Alpha after voting:"
 msgstr "Transparencia después del voto:"
 
@@ -3694,76 +3694,76 @@ msgstr "Transparencia después del voto:"
 msgid "Weapons Panel"
 msgstr "Panel de las armas"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:25
 msgid "Fade out after:"
 msgstr "Desvanecer después de:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:26
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:27
 msgid "Never"
 msgstr "Nunca"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:29
 #, c-format
 msgid "%ds"
 msgstr "%ds"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:32
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:33
 msgid "Fade effect:"
 msgstr "Efecto de desvanecimento:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
 msgid "EF^None"
 msgstr "Ninguno"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:37
 msgid "Alpha"
 msgstr "Transparencia"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
 msgid "Slide"
 msgstr "Deslizar"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:39
 msgid "EF^Both"
 msgstr "Ambos"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:43
 msgid "Weapon icons:"
 msgstr "Iconos de las armas:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46
 msgid "Show only owned weapons"
 msgstr "Mostrar sólo las armas en posesión"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:48
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
 msgid "Show weapon ID as:"
 msgstr "Mostra ID de arma como:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
 msgid "SHOWAS^None"
 msgstr "Ninguno"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
 msgid "Number"
 msgstr "Número"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:52
 msgid "Bind"
 msgstr "Tecla asignada"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:54
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
 msgid "Show Accuracy"
 msgstr "Mostrar precisión"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:56
 msgid "Show Ammo"
 msgstr "Mostrar munición"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:58
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:59
 msgid "Ammo bar color:"
 msgstr "Color de la barra de munición:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:64
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:65
 msgid "Ammo bar alpha:"
 msgstr "Transparencia de la barra de munición:"
 
@@ -3771,85 +3771,85 @@ msgstr "Transparencia de la barra de munición:"
 msgid "Panel HUD Setup"
 msgstr "Configuración del panel HUD"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:21
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:22
 msgid "Panel background defaults:"
 msgstr "Fondo por defecto del panel:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:23 qcsrc/menu/xonotic/util.qc:683
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:24 qcsrc/menu/xonotic/util.qc:683
 msgid "Background:"
 msgstr "Fondo:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:25
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:37
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:52
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:686
+#: 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
 msgid "Disable"
 msgstr "Desactivar"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:30
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:691
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:31
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:78 qcsrc/menu/xonotic/util.qc:691
 msgid "Color:"
 msgstr "Color:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:699
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:36 qcsrc/menu/xonotic/util.qc:699
 msgid "Border size:"
 msgstr "Grosor del borde:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:50
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:89
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:51
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:90
 msgid "Team color:"
 msgstr "Color del equipo:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:725
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:59 qcsrc/menu/xonotic/util.qc:725
 msgid "Test team color in configure mode"
 msgstr "Probar el color del equipo en modo configuración"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:728
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:62 qcsrc/menu/xonotic/util.qc:728
 msgid "Padding:"
 msgstr "Tamaño de letra:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:68
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:69
 msgid "HUD Dock:"
 msgstr "Panel del HUD:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:70
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71
 msgid "DOCK^Disabled"
 msgstr "Desactivado"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72
 msgid "DOCK^Small"
 msgstr "Pequeño"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73
 msgid "DOCK^Medium"
 msgstr "Mediano"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:74
 msgid "DOCK^Large"
 msgstr "Grande"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:96
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:97
 msgid "Grid settings:"
 msgstr "Configuración de la cuadrícula:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:99
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:100
 msgid "Snap panels to grid"
 msgstr "Ajustar los paneles a la cuadrícula"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:102
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:103
 msgid "Grid size:"
 msgstr "Tamaño de la cuadrícula:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:103
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:104
 msgid "X:"
 msgstr "X:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:109
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:110
 msgid "Y:"
 msgstr "Y:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:117
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:118
 msgid "Exit setup"
 msgstr "Salir de la configuración"
 
@@ -4434,7 +4434,7 @@ msgid "Key:"
 msgstr "Llave:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:61
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:19
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:20
 msgid "Model:"
 msgstr "Modelo:"
 
@@ -4809,127 +4809,127 @@ msgstr "No"
 msgid "Sandbox Tools"
 msgstr "Herramientas de modo libre"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:24
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:25
 msgid "Spawn"
 msgstr "Aparecer"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:25
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:26
 msgid "Remove *"
 msgstr "Remover *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:27
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:28
 msgid "Copy *"
 msgstr "Copiar *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:28
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:29
 msgid "Paste"
 msgstr "Pegar"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:30
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:31
 msgid "Bone:"
 msgstr "Hueso:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:35
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:36
 msgid "Set * as child"
 msgstr "Definir * como derivado"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:36
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:37
 msgid "Attach to *"
 msgstr "Adjuntar a *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:38
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:39
 msgid "Detach from *"
 msgstr "Desadjuntar de *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:41
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:42
 msgid "Visual object properties for *:"
 msgstr "Propiedades visuales del objeto *:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:43
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:44
 msgid "Set skin:"
 msgstr "Definir apariencia:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:45
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:46
 msgid "Set alpha:"
 msgstr "Definir transparencia:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:48
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:49
 msgid "Set color main:"
 msgstr "Establecir color principal:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:50
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:51
 msgid "Set color glow:"
 msgstr "Establecer color de brillo:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:54
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:55
 msgid "Set frame:"
 msgstr "Establecer marco:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:58
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:59
 msgid "Physical object properties for *:"
 msgstr "Propiedades fisicas del objeto *:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:60
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:61
 msgid "Set material:"
 msgstr "Establecer material:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:66
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:67
 msgid "Set solidity:"
 msgstr "Establecer solidez:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:67
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:68
 msgid "Non-solid"
 msgstr "No solido"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:68
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:69
 msgid "Solid"
 msgstr "Solido"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:69
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:70
 msgid "Set physics:"
 msgstr "Establecer fisica utilizada:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:70
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:71
 msgid "Static"
 msgstr "Estático"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:71
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:72
 msgid "Movable"
 msgstr "Movil"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:72
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:73
 msgid "Physical"
 msgstr "Fisico"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:74
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:75
 msgid "Set scale:"
 msgstr "Definir escala:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:76
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:77
 msgid "Set force:"
 msgstr "Establecer fuerza:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:80
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:81
 msgid "Claim *"
 msgstr "Reclamar *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:82
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:83
 msgid "* object info"
 msgstr "* informacion de objeto"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:83
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:84
 msgid "* mesh info"
 msgstr "* informacion de malla"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:84
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:85
 msgid "* attachment info"
 msgstr "* informacion de accesorio"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:85
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:86
 msgid "Show help"
 msgstr "Mostrar ayuda"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:86
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:87
 msgid "* is the object you are facing"
 msgstr "* es el objecto al que te diriges"
 
@@ -5927,27 +5927,27 @@ msgstr "Vencedor"
 msgid "Team Selection"
 msgstr "Selección de equipo"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:41
+#: qcsrc/menu/xonotic/dialog_teamselect.c:42
 msgid "join 'best' team (auto-select)"
 msgstr "Ingresar 'mejor' equipo (selección automática)"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:45
+#: qcsrc/menu/xonotic/dialog_teamselect.c:46
 msgid "red"
 msgstr "rojo"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:46
+#: qcsrc/menu/xonotic/dialog_teamselect.c:47
 msgid "blue"
 msgstr "azul"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:47
+#: qcsrc/menu/xonotic/dialog_teamselect.c:48
 msgid "yellow"
 msgstr "amarillo"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:48
+#: qcsrc/menu/xonotic/dialog_teamselect.c:49
 msgid "pink"
 msgstr "rosa"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:51
+#: qcsrc/menu/xonotic/dialog_teamselect.c:52
 msgid "spectate"
 msgstr "espectador"
 
@@ -6047,7 +6047,12 @@ msgstr ""
 msgid "%s dB"
 msgstr "%s dB"
 
-#: qcsrc/menu/xonotic/slider_resolution.c:72
+#: qcsrc/menu/xonotic/slider_resolution.c:103
+#, c-format
+msgid "%dx%d (%d:%d)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_resolution.c:106
 #, c-format
 msgid "%dx%d"
 msgstr "%dx%d"
index 3689d4951049f439eb7d44b14e55e43a9870ebac..1aeb97a5d7e0b77c81dd9901e122ecf3fce29ae8 100644 (file)
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Xonotic\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-09-13 10:31+0200\n"
-"PO-Revision-Date: 2013-09-13 08:33+0000\n"
+"POT-Creation-Date: 2013-10-03 11:55+0200\n"
+"PO-Revision-Date: 2013-10-03 10:08+0000\n"
 "Last-Translator: divVerent <divVerent@xonotic.org>\n"
 "Language-Team: Finnish (http://www.transifex.com/projects/p/xonotic/language/"
 "fi/)\n"
@@ -1231,7 +1231,7 @@ msgstr "%dth"
 msgid "@!#%'n Tuba Throwing"
 msgstr "@!#%'n tuubanheitto!"
 
-#: qcsrc/common/mapinfo.qc:1105 qcsrc/menu/xonotic/skinlist.c:166
+#: qcsrc/common/mapinfo.qc:1109 qcsrc/menu/xonotic/skinlist.c:166
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
@@ -1305,1773 +1305,1773 @@ msgstr "^1Palvelimen ilmoitukset:"
 msgid "^7%s (^3%d sec left)"
 msgstr "^7%s (^3%d sek jäljellä)"
 
-#: qcsrc/common/notifications.qh:330
+#: qcsrc/common/notifications.qh:342
 #, c-format
 msgid "^BG%s^BG captured the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:331
+#: qcsrc/common/notifications.qh:343
 #, c-format
 msgid ""
 "^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
 "%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:332
+#: qcsrc/common/notifications.qh:344
 #, c-format
 msgid "^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:333
+#: qcsrc/common/notifications.qh:345
 #, c-format
 msgid ""
 "^BG%s^BG captured the ^TC^TT^BG flag in ^F2%s^BG seconds, failing to break "
 "^BG%s^BG's previous record of ^F1%s^BG seconds"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:334
+#: qcsrc/common/notifications.qh:346
 msgid "^BGThe ^TC^TT^BG flag was returned to base by its owner"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:335
+#: qcsrc/common/notifications.qh:347
 msgid "^BGThe ^TC^TT^BG flag was destroyed and returned to base"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:336
+#: qcsrc/common/notifications.qh:348
 msgid "^BGThe ^TC^TT^BG flag was dropped in the base and returned itself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:337
+#: qcsrc/common/notifications.qh:349
 msgid ""
 "^BGThe ^TC^TT^BG flag fell somewhere it couldn't be reached and returned to "
 "base"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:338
+#: qcsrc/common/notifications.qh:350
 #, c-format
 msgid ""
 "^BGThe ^TC^TT^BG flag became impatient after ^F1%.2f^BG seconds and returned "
 "itself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:339
+#: qcsrc/common/notifications.qh:351
 msgid "^BGThe ^TC^TT^BG flag has returned to the base"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:340
+#: qcsrc/common/notifications.qh:352
 #, c-format
 msgid "^BG%s^BG lost the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:341
+#: qcsrc/common/notifications.qh:353
 #, c-format
 msgid "^BG%s^BG got the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:342
+#: qcsrc/common/notifications.qh:354
 #, c-format
 msgid "^BG%s^BG returned the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:343
+#: qcsrc/common/notifications.qh:355
 #, c-format
 msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:344
+#: qcsrc/common/notifications.qh:356
 #, c-format
 msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:345
+#: qcsrc/common/notifications.qh:357
 #, c-format
 msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:346
+#: qcsrc/common/notifications.qh:358
 #, c-format
 msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:346
+#: qcsrc/common/notifications.qh:358
 #, c-format
 msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:347
+#: qcsrc/common/notifications.qh:359
 #, c-format
 msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:348
+#: qcsrc/common/notifications.qh:360
 #, c-format
 msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:349
+#: qcsrc/common/notifications.qh:361
 #, c-format
 msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:350
+#: qcsrc/common/notifications.qh:362
 #, c-format
 msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:351
+#: qcsrc/common/notifications.qh:363
 #, c-format
 msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:352
+#: qcsrc/common/notifications.qh:364
 #, c-format
 msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:352
+#: qcsrc/common/notifications.qh:364
 #, c-format
 msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:353
+#: qcsrc/common/notifications.qh:365
 #, c-format
 msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:354
+#: qcsrc/common/notifications.qh:366
 #, c-format
 msgid ""
 "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:355
+#: qcsrc/common/notifications.qh:367
 #, c-format
 msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:356
+#: qcsrc/common/notifications.qh:368
 #, c-format
 msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:357
+#: qcsrc/common/notifications.qh:369
 #, c-format
 msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:358
+#: qcsrc/common/notifications.qh:370
 #, c-format
 msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:359
+#: qcsrc/common/notifications.qh:371
 #, c-format
 msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:360
+#: qcsrc/common/notifications.qh:372
 #, c-format
 msgid ""
 "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:361
+#: qcsrc/common/notifications.qh:373
 #, c-format
 msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:362
+#: qcsrc/common/notifications.qh:374
 #, c-format
 msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:363
+#: qcsrc/common/notifications.qh:375
 #, c-format
 msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:364
+#: qcsrc/common/notifications.qh:376
 #, c-format
 msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:365
+#: qcsrc/common/notifications.qh:377
 #, c-format
 msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:366
+#: qcsrc/common/notifications.qh:378
 #, c-format
 msgid "^BG%s%s^K1 was thrown into a world of hurt by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:367
+#: qcsrc/common/notifications.qh:379
 #, c-format
 msgid "^BG%s^K1 was moved into the %s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:368
+#: qcsrc/common/notifications.qh:380
 #, c-format
 msgid "^BG%s^K1 became enemies with the Lord of Teamplay%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:369
+#: qcsrc/common/notifications.qh:381
 #, c-format
 msgid "^BG%s^K1 thought they found a nice camping ground%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:370
+#: qcsrc/common/notifications.qh:382
 #, c-format
 msgid "^BG%s^K1 unfairly eliminated themself%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:371
+#: qcsrc/common/notifications.qh:383
 #, c-format
 msgid "^BG%s^K1 %s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:372
+#: qcsrc/common/notifications.qh:384
 #, c-format
 msgid "^BG%s^K1 couldn't catch their breath%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:372
+#: qcsrc/common/notifications.qh:384
 #, c-format
 msgid "^BG%s^K1 was in the water for too long%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:373
+#: qcsrc/common/notifications.qh:385
 #, c-format
 msgid "^BG%s^K1 hit the ground with a bit too much force%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:373
+#: qcsrc/common/notifications.qh:385
 #, c-format
 msgid "^BG%s^K1 hit the ground with a crunch%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:374
+#: qcsrc/common/notifications.qh:386
 #, c-format
 msgid "^BG%s^K1 became a bit too crispy%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:374
+#: qcsrc/common/notifications.qh:386
 #, c-format
 msgid "^BG%s^K1 felt a little hot%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:375
+#: qcsrc/common/notifications.qh:387
 #, c-format
 msgid "^BG%s^K1 died%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:376
+#: qcsrc/common/notifications.qh:388
 #, c-format
 msgid "^BG%s^K1 found a hot place%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:376
+#: qcsrc/common/notifications.qh:388
 #, c-format
 msgid "^BG%s^K1 turned into hot slag%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:377
+#: qcsrc/common/notifications.qh:389
 #, c-format
 msgid "^BG%s^K1 mastered the art of self-nading%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:378
+#: qcsrc/common/notifications.qh:390
 #, c-format
 msgid "^BG%s^K1 died%s%s. What's the point of living without ammo?"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:378
+#: qcsrc/common/notifications.qh:390
 #, c-format
 msgid "^BG%s^K1 ran out of ammo%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:379
+#: qcsrc/common/notifications.qh:391
 #, c-format
 msgid "^BG%s^K1 rotted away%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:380
+#: qcsrc/common/notifications.qh:392
 #, c-format
 msgid "^BG%s^K1 became a shooting star%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:393
 #, c-format
 msgid "^BG%s^K1 was slimed%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:394
 #, c-format
 msgid "^BG%s^K1 couldn't take it anymore%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:395
 #, c-format
 msgid "^BG%s^K1 is now preserved for centuries to come%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:396
 #, c-format
 msgid "^BG%s^K1 switched to the %s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:397
 #, c-format
 msgid "^BG%s^K1 died in an accident%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:398
 #, c-format
 msgid "^BG%s^K1 ran into a turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:399
 #, c-format
 msgid "^BG%s^K1 was blasted away by an eWheel turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:400
 #, c-format
 msgid "^BG%s^K1 got caught up in the FLAC turret fire%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:401
 #, c-format
 msgid "^BG%s^K1 was blasted away by a Hellion turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:402
 #, c-format
 msgid "^BG%s^K1 could not hide from the Hunter turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:403
 #, c-format
 msgid "^BG%s^K1 was riddled full of holes by a Machinegun turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:404
 #, c-format
 msgid "^BG%s^K1 got turned into smoldering gibs by an MLRS turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:405
 #, c-format
 msgid "^BG%s^K1 was phased out by a turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:406
 #, c-format
 msgid "^BG%s^K1 got served some superheated plasma from a turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:407
 #, c-format
 msgid "^BG%s^K1 was electrocuted by a Tesla turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:408
 #, c-format
 msgid "^BG%s^K1 got served a lead enrichment by a Walker turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:409
 #, c-format
 msgid "^BG%s^K1 was impaled by a Walker turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:410
 #, c-format
 msgid "^BG%s^K1 was blasted away by a Walker turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:411
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Bumblebee explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:412
 #, c-format
 msgid "^BG%s^K1 was crushed by a vehicle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:401
+#: qcsrc/common/notifications.qh:413
 #, c-format
 msgid "^BG%s^K1 was caught in a Raptor cluster bomb%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:402
+#: qcsrc/common/notifications.qh:414
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Raptor explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:403
+#: qcsrc/common/notifications.qh:415
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Spiderbot explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:404
+#: qcsrc/common/notifications.qh:416
 #, c-format
 msgid "^BG%s^K1 was blasted to bits by a Spiderbot rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:405
+#: qcsrc/common/notifications.qh:417
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Racer explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:406
+#: qcsrc/common/notifications.qh:418
 #, c-format
 msgid "^BG%s^K1 couldn't find shelter from a Racer rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:407
+#: qcsrc/common/notifications.qh:419
 #, c-format
 msgid "^BG%s^K1 was in the wrong place%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:408
+#: qcsrc/common/notifications.qh:420
 #, c-format
 msgid "^BG%s^K1 was betrayed by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:409
+#: qcsrc/common/notifications.qh:421
 #, c-format
 msgid "^BG%s^K1 was frozen by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:410
+#: qcsrc/common/notifications.qh:422
 #, c-format
 msgid "^BG%s^K3 was revived by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:411
+#: qcsrc/common/notifications.qh:423
 #, c-format
 msgid "^BG%s^K3 was revived by falling"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:412
+#: qcsrc/common/notifications.qh:424
 #, c-format
 msgid "^BG%s^K3 was automatically revived after %s second(s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:413 qcsrc/common/notifications.qh:594
+#: qcsrc/common/notifications.qh:425 qcsrc/common/notifications.qh:612
 msgid "^TC^TT^BG team wins the round"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:414 qcsrc/common/notifications.qh:595
+#: qcsrc/common/notifications.qh:426 qcsrc/common/notifications.qh:613
 #, c-format
 msgid "^BG%s^BG wins the round"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:415 qcsrc/common/notifications.qh:524
+#: qcsrc/common/notifications.qh:427 qcsrc/common/notifications.qh:542
 msgid "^BGRound tied"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:416 qcsrc/common/notifications.qh:525
+#: qcsrc/common/notifications.qh:428 qcsrc/common/notifications.qh:543
 msgid "^BGRound over, there's no winner"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:417
+#: qcsrc/common/notifications.qh:429
 #, c-format
 msgid "^BG%s^K1 froze themself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:418
+#: qcsrc/common/notifications.qh:430
 #, c-format
 msgid "^BGGodmode saved you %s units of damage, cheater!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:419 qcsrc/common/notifications.qh:598
+#: qcsrc/common/notifications.qh:431 qcsrc/common/notifications.qh:616
 #, c-format
 msgid "^BGYou do not have the ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:420 qcsrc/common/notifications.qh:599
+#: qcsrc/common/notifications.qh:432 qcsrc/common/notifications.qh:617
 #, c-format
 msgid "^BGYou dropped the ^F1%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:421 qcsrc/common/notifications.qh:600
+#: qcsrc/common/notifications.qh:433 qcsrc/common/notifications.qh:618
 #, c-format
 msgid "^BGYou got the ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:422 qcsrc/common/notifications.qh:601
+#: qcsrc/common/notifications.qh:434 qcsrc/common/notifications.qh:619
 #, c-format
 msgid "^BGYou don't have enough ammo for the ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:423 qcsrc/common/notifications.qh:602
+#: qcsrc/common/notifications.qh:435 qcsrc/common/notifications.qh:620
 #, c-format
 msgid "^F1%s %s^BG is unable to fire, but its ^F1%s^BG can"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:424 qcsrc/common/notifications.qh:603
+#: qcsrc/common/notifications.qh:436 qcsrc/common/notifications.qh:621
 #, c-format
 msgid "^F1%s^BG is ^F4not available^BG on this map"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:425
+#: qcsrc/common/notifications.qh:437
 #, c-format
 msgid "^BG%s^F3 connected%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:426
+#: qcsrc/common/notifications.qh:438
 #, c-format
 msgid "^BG%s^F3 connected and joined the ^TC^TT team"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:427
+#: qcsrc/common/notifications.qh:439
 #, c-format
 msgid "^BG%s^F3 is now playing"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:428 qcsrc/common/notifications.qh:606
+#: qcsrc/common/notifications.qh:440 qcsrc/common/notifications.qh:624
 #, c-format
 msgid "^BG%s^BG has dropped the ball!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:429 qcsrc/common/notifications.qh:607
+#: qcsrc/common/notifications.qh:441 qcsrc/common/notifications.qh:625
 #, c-format
 msgid "^BG%s^BG has picked up the ball!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:430
+#: qcsrc/common/notifications.qh:442
 #, c-format
 msgid "^BG%s^BG captured the keys for the ^TC^TT team"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:431
+#: qcsrc/common/notifications.qh:443
 #, c-format
 msgid "^BG%s^BG dropped the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:432
+#: qcsrc/common/notifications.qh:444
 #, c-format
 msgid "^BG%s^BG lost the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:433
+#: qcsrc/common/notifications.qh:445
 #, c-format
 msgid "^BG%s^BG picked up the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:434
+#: qcsrc/common/notifications.qh:446
 #, c-format
 msgid "^BG%s^F3 forfeited"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:435
+#: qcsrc/common/notifications.qh:447
 #, c-format
 msgid "^BG%s^F3 has no more lives left"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:436
+#: qcsrc/common/notifications.qh:448
 #, c-format
 msgid "^BG%s^K1 picked up Invisibility"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:437
+#: qcsrc/common/notifications.qh:449
 #, c-format
 msgid "^BG%s^K1 picked up Shield"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:438
+#: qcsrc/common/notifications.qh:450
 #, c-format
 msgid "^BG%s^K1 picked up Speed"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:439
+#: qcsrc/common/notifications.qh:451
 #, c-format
 msgid "^BG%s^K1 picked up Strength"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:440
+#: qcsrc/common/notifications.qh:452
 #, c-format
 msgid "^BG%s^F3 disconnected"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:441
+#: qcsrc/common/notifications.qh:453
 #, c-format
 msgid "^BG%s^F3 was kicked for idling"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:442
+#: qcsrc/common/notifications.qh:454
 msgid ""
 "^F2You were kicked from the server because you are a spectator and "
 "spectators aren't allowed at the moment."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:443
+#: qcsrc/common/notifications.qh:455
 #, c-format
 msgid "^BG%s^F3 is now spectating"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:444
+#: qcsrc/common/notifications.qh:456
 #, c-format
 msgid "^BG%s^BG has abandoned the race"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:445
+#: qcsrc/common/notifications.qh:457
 #, c-format
 msgid "^BG%s^BG couldn't break their %s%s^BG place record of %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:446
+#: qcsrc/common/notifications.qh:458
 #, c-format
 msgid "^BG%s^BG couldn't break the %s%s^BG place record of %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:447
+#: qcsrc/common/notifications.qh:459
 #, c-format
 msgid "^BG%s^BG has finished the race"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:448
+#: qcsrc/common/notifications.qh:460
 #, c-format
 msgid "^BG%s^BG broke %s^BG's %s%s^BG place record with %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:449
+#: qcsrc/common/notifications.qh:461
 #, c-format
 msgid "^BG%s^BG improved their %s%s^BG place record with %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:450
+#: qcsrc/common/notifications.qh:462
 #, c-format
 msgid ""
 "^BG%s^BG scored a new record with ^F2%s^BG, but unfortunately lacks a UID "
 "and will be lost."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:451
+#: qcsrc/common/notifications.qh:463
 #, c-format
 msgid "^BG%s^BG set the %s%s^BG place record with %s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:452
+#: qcsrc/common/notifications.qh:464
 msgid "^TC^TT ^BGteam scores!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:453
+#: qcsrc/common/notifications.qh:465
 #, 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 ""
 
-#: qcsrc/common/notifications.qh:454
+#: qcsrc/common/notifications.qh:466
 #, c-format
 msgid "^BG%s^K1 picked up a Superweapon"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:455
+#: qcsrc/common/notifications.qh:467
 #, c-format
 msgid ""
 "^F4NOTE: ^BGThe server is running ^F1Xonotic %s (beta)^BG, you have "
 "^F2Xonotic %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:456
+#: qcsrc/common/notifications.qh:468
 #, c-format
 msgid ""
 "^F4NOTE: ^BGThe server is running ^F1Xonotic %s^BG, you have ^F2Xonotic %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:457
+#: qcsrc/common/notifications.qh:469
 #, c-format
 msgid ""
 "^F4NOTE: ^F1Xonotic %s^BG is out, and you still have ^F2Xonotic %s^BG - get "
 "the update from ^F3http://www.xonotic.org/^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:458
+#: qcsrc/common/notifications.qh:470
 #, c-format
 msgid "^F3SVQC Build information: ^F4%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:459
+#: qcsrc/common/notifications.qh:471
 #, c-format
 msgid ""
 "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Accordeon%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:460
+#: qcsrc/common/notifications.qh:472
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Accordeon%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:461
+#: qcsrc/common/notifications.qh:473
 #, c-format
 msgid "^BG%s%s^K1 felt the strong pull of ^BG%s^K1's Crylink%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:462
+#: qcsrc/common/notifications.qh:474
 #, c-format
 msgid "^BG%s^K1 felt the strong pull of their Crylink%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:463
+#: qcsrc/common/notifications.qh:475
 #, c-format
 msgid "^BG%s%s^K1 was blasted by ^BG%s^K1's Electro bolt%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:464
+#: qcsrc/common/notifications.qh:476
 #, c-format
 msgid "^BG%s%s^K1 felt the electrifying air of ^BG%s^K1's Electro combo%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:465
+#: qcsrc/common/notifications.qh:477
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Electro plasma%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:466
+#: qcsrc/common/notifications.qh:478
 #, c-format
 msgid "^BG%s^K1 played with Electro plasma%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:467
+#: qcsrc/common/notifications.qh:479
 #, c-format
 msgid "^BG%s^K1 could not remember where they put their Electro plasma%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:468
+#: qcsrc/common/notifications.qh:480
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's fireball%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:469
+#: qcsrc/common/notifications.qh:481
 #, c-format
 msgid "^BG%s%s^K1 got burnt by ^BG%s^K1's firemine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:470
+#: qcsrc/common/notifications.qh:482
 #, c-format
 msgid "^BG%s^K1 should have used a smaller gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:471
+#: qcsrc/common/notifications.qh:483
 #, c-format
 msgid "^BG%s^K1 forgot about their firemine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:472
+#: qcsrc/common/notifications.qh:484
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by a burst of ^BG%s^K1's Hagar rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:473
+#: qcsrc/common/notifications.qh:485
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Hagar rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:474
+#: qcsrc/common/notifications.qh:486
 #, c-format
 msgid "^BG%s^K1 played with tiny Hagar rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:475
+#: qcsrc/common/notifications.qh:487
 #, c-format
 msgid "^BG%s%s^K1 was cut down with ^BG%s^K1's HLAC%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:476
+#: qcsrc/common/notifications.qh:488
 #, c-format
 msgid "^BG%s^K1 got a little jumpy with their HLAC%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:477
+#: qcsrc/common/notifications.qh:489
 #, c-format
 msgid "^BG%s%s^K1 was caught in ^BG%s^K1's Hook gravity bomb%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:478
+#: qcsrc/common/notifications.qh:490
 #, c-format
 msgid ""
 "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Klein Bottle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:479
+#: qcsrc/common/notifications.qh:491
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Klein Bottle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:480
+#: qcsrc/common/notifications.qh:492
 #, c-format
 msgid "^BG%s%s^K1 was shot to death by ^BG%s^K1's Laser%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:481
+#: qcsrc/common/notifications.qh:493
 #, c-format
 msgid "^BG%s^K1 shot themself to hell with their Laser%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:482
+#: qcsrc/common/notifications.qh:494
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's mine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:483
+#: qcsrc/common/notifications.qh:495
 #, c-format
 msgid "^BG%s^K1 forgot about their mine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:484
+#: qcsrc/common/notifications.qh:496
 #, c-format
 msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Minstanex%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:485
+#: qcsrc/common/notifications.qh:497
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Mortar grenade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:486
+#: qcsrc/common/notifications.qh:498
 #, c-format
 msgid "^BG%s%s^K1 ate ^BG%s^K1's Mortar grenade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:487
+#: qcsrc/common/notifications.qh:499
 #, c-format
 msgid "^BG%s^K1 didn't see their own Mortar grenade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:488
+#: qcsrc/common/notifications.qh:500
 #, c-format
 msgid "^BG%s^K1 blew themself up with their own Mortar%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:489
+#: qcsrc/common/notifications.qh:501
 #, c-format
 msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Nex%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:490
+#: qcsrc/common/notifications.qh:502
 #, c-format
 msgid "^BG%s%s^K1 was sniped with a Rifle by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:491
+#: qcsrc/common/notifications.qh:503
 #, c-format
 msgid "^BG%s%s^K1 died in ^BG%s^K1's Rifle bullet hail%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:492
+#: qcsrc/common/notifications.qh:504
 #, c-format
 msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle bullet hail%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:493
+#: qcsrc/common/notifications.qh:505
 #, c-format
 msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:494
+#: qcsrc/common/notifications.qh:506
 #, c-format
 msgid "^BG%s%s^K1 ate ^BG%s^K1's rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:495
+#: qcsrc/common/notifications.qh:507
 #, c-format
 msgid "^BG%s%s^K1 got too close ^BG%s^K1's rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:496
+#: qcsrc/common/notifications.qh:508
 #, c-format
 msgid "^BG%s^K1 blew themself up with their Rocketlauncher%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:497
+#: qcsrc/common/notifications.qh:509
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Seeker rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:498
+#: qcsrc/common/notifications.qh:510
 #, c-format
 msgid "^BG%s%s^K1 was tagged by ^BG%s^K1's Seeker%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:499
+#: qcsrc/common/notifications.qh:511
 #, c-format
 msgid "^BG%s^K1 played with tiny Seeker rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:500
+#: qcsrc/common/notifications.qh:512
 #, c-format
 msgid "^BG%s%s^K1 was gunned down by ^BG%s^K1's Shotgun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:501
+#: qcsrc/common/notifications.qh:513
 #, c-format
 msgid "^BG%s%s^K1 slapped ^BG%s^K1 around a bit with a large Shotgun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:502
+#: qcsrc/common/notifications.qh:514
 #, c-format
 msgid "^BG%s^K1 is now thinking with portals%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:503
+#: qcsrc/common/notifications.qh:515
 #, c-format
 msgid "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Tuba%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:504
+#: qcsrc/common/notifications.qh:516
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Tuba%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:505
+#: qcsrc/common/notifications.qh:517
 #, c-format
 msgid "^BG%s%s^K1 was sniped by ^BG%s^K1's Machine Gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:506
+#: qcsrc/common/notifications.qh:518
 #, c-format
 msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:518
+#: qcsrc/common/notifications.qh:536
 msgid "^BGYou are attacking!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:519
+#: qcsrc/common/notifications.qh:537
 msgid "^BGYou are defending!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:520
+#: qcsrc/common/notifications.qh:538
 msgid "^F4Begin!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:521
+#: qcsrc/common/notifications.qh:539
 msgid "^F4Game starts in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:522
+#: qcsrc/common/notifications.qh:540
 msgid "^F4Round starts in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:523
+#: qcsrc/common/notifications.qh:541
 msgid "^F4Round cannot start"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:526
+#: qcsrc/common/notifications.qh:544
 msgid "^F2Don't camp!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:527
+#: qcsrc/common/notifications.qh:545
 msgid ""
 "^BGYou are now free.\n"
 "^BGFeel free to ^F2try to capture^BG the flag again\n"
 "^BGif you think you will succeed."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:528
+#: qcsrc/common/notifications.qh:546
 msgid ""
 "^BGYou are now ^F1shielded^BG from the flag\n"
 "^BGfor ^F2too many unsuccessful attempts^BG to capture.\n"
 "^BGMake some defensive scores before trying again."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:529
+#: qcsrc/common/notifications.qh:547
 msgid "^BGYou captured the ^TC^TT^BG flag!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:530
+#: qcsrc/common/notifications.qh:548
 #, c-format
 msgid "^BGToo many flag throws! Throwing disabled for %s."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:531
+#: qcsrc/common/notifications.qh:549
 #, c-format
 msgid "^BG%s^BG passed the ^TC^TT^BG flag to %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:532
+#: qcsrc/common/notifications.qh:550
 #, c-format
 msgid "^BGYou received the ^TC^TT^BG flag from %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:533
+#: qcsrc/common/notifications.qh:551
 #, c-format
 msgid "^BG%s^BG requests you to pass the flag%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:534
+#: qcsrc/common/notifications.qh:552
 #, c-format
 msgid "^BGRequesting %s^BG to pass you the flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:535
+#: qcsrc/common/notifications.qh:553
 #, c-format
 msgid "^BGYou passed the ^TC^TT^BG flag to %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:536
+#: qcsrc/common/notifications.qh:554
 msgid "^BGYou got the ^TC^TT^BG flag!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:537
+#: qcsrc/common/notifications.qh:555
 #, c-format
 msgid "^BGThe %senemy^BG got your flag! Retrieve it!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:538
+#: qcsrc/common/notifications.qh:556
 #, c-format
 msgid "^BGThe %senemy (^BG%s%s)^BG got your flag! Retrieve it!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:539
+#: qcsrc/common/notifications.qh:557
 #, c-format
 msgid "^BGYour %steam mate^BG got the flag! Protect them!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:540
+#: qcsrc/common/notifications.qh:558
 #, c-format
 msgid "^BGYour %steam mate (^BG%s%s)^BG got the flag! Protect them!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:541
+#: qcsrc/common/notifications.qh:559
 msgid "^BGYou returned the ^TC^TT^BG flag!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:542
+#: qcsrc/common/notifications.qh:560
 msgid "^BGStalemate! Enemies can now see you on radar!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:543
+#: qcsrc/common/notifications.qh:561
 msgid "^BGStalemate! Flag carriers can now be seen by enemies on radar!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:544
+#: qcsrc/common/notifications.qh:562
 #, c-format
 msgid "^K3%sYou fragged ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:544
+#: qcsrc/common/notifications.qh:562
 #, c-format
 msgid "^K3%sYou scored against ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:545
+#: qcsrc/common/notifications.qh:563
 #, c-format
 msgid "^K1%sYou were fragged by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:545
+#: qcsrc/common/notifications.qh:563
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:546
+#: qcsrc/common/notifications.qh:564
 #, c-format
 msgid "^K1%sYou were fragged by ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:546
+#: qcsrc/common/notifications.qh:564
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:547
+#: qcsrc/common/notifications.qh:565
 #, c-format
 msgid "^K3%sYou fragged ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:547
+#: qcsrc/common/notifications.qh:565
 #, c-format
 msgid "^K3%sYou scored against ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:548
+#: qcsrc/common/notifications.qh:566
 #, c-format
 msgid "^K1%sYou scored against ^BG%s^K1 while they were typing"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:548
+#: qcsrc/common/notifications.qh:566
 #, c-format
 msgid "^K1%sYou typefragged ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:549
+#: qcsrc/common/notifications.qh:567
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^K1 while typing!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:549
+#: qcsrc/common/notifications.qh:567
 #, c-format
 msgid "^K1%sYou were typefragged by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:550
+#: qcsrc/common/notifications.qh:568
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^K1 while typing^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:550
+#: qcsrc/common/notifications.qh:568
 #, c-format
 msgid "^K1%sYou were typefragged by ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:551
+#: qcsrc/common/notifications.qh:569
 #, c-format
 msgid "^K1%sYou scored against ^BG%s^K1 while they were typing^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:551
+#: qcsrc/common/notifications.qh:569
 #, c-format
 msgid "^K1%sYou typefragged ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:552
+#: qcsrc/common/notifications.qh:570
 msgid "^BGPress ^F2DROPWEAPON^BG again to toss the nade!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:553
+#: qcsrc/common/notifications.qh:571
 #, c-format
 msgid ""
 "^BGYou have been moved into a different team\n"
 "You are now on: %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:554
+#: qcsrc/common/notifications.qh:572
 msgid "^K1Don't go against your team mates!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:554
+#: qcsrc/common/notifications.qh:572
 msgid "^K1Don't shoot your team mates!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:555
+#: qcsrc/common/notifications.qh:573
 msgid "^K1Die camper!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:555
+#: qcsrc/common/notifications.qh:573
 msgid "^K1Reconsider your tactics, camper!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:556
+#: qcsrc/common/notifications.qh:574
 msgid "^K1You unfairly eliminated yourself!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:557
+#: qcsrc/common/notifications.qh:575
 #, c-format
 msgid "^K1You were %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:558
+#: qcsrc/common/notifications.qh:576
 msgid "^K1You couldn't catch your breath!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:559
+#: qcsrc/common/notifications.qh:577
 msgid "^K1You hit the ground with a crunch!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:560
+#: qcsrc/common/notifications.qh:578
 msgid "^K1You felt a little too hot!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:560
+#: qcsrc/common/notifications.qh:578
 msgid "^K1You got a little bit too crispy!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:561
+#: qcsrc/common/notifications.qh:579
 msgid "^K1You killed your own dumb self!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:561
+#: qcsrc/common/notifications.qh:579
 msgid "^K1You need to be more careful!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:562
+#: qcsrc/common/notifications.qh:580
 msgid "^K1You couldn't stand the heat!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:563
+#: qcsrc/common/notifications.qh:581
 msgid "^K1Tastes like chicken!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:563
+#: qcsrc/common/notifications.qh:581
 msgid "^K1You forgot to put the pin back in!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:564
+#: qcsrc/common/notifications.qh:582
 msgid "^K1You are respawning for running out of ammo..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:564
+#: qcsrc/common/notifications.qh:582
 msgid "^K1You were killed for running out of ammo..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:565
+#: qcsrc/common/notifications.qh:583
 msgid "^K1You grew too old without taking your medicine"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:565
+#: qcsrc/common/notifications.qh:583
 msgid "^K1You need to preserve your health"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:566
+#: qcsrc/common/notifications.qh:584
 msgid "^K1You became a shooting star!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:567
+#: qcsrc/common/notifications.qh:585
 msgid "^K1You melted away in slime!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:568
+#: qcsrc/common/notifications.qh:586
 msgid "^K1You committed suicide!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:568
+#: qcsrc/common/notifications.qh:586
 msgid "^K1You ended it all!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:569
+#: qcsrc/common/notifications.qh:587
 msgid "^K1You got stuck in a swamp!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:570
+#: qcsrc/common/notifications.qh:588
 #, c-format
 msgid "^BGYou are now on: %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:571
+#: qcsrc/common/notifications.qh:589
 msgid "^K1You died in an accident!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:572
+#: qcsrc/common/notifications.qh:590
 msgid "^K1You had an unfortunate run in with a turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:572
+#: qcsrc/common/notifications.qh:590
 msgid "^K1You were fragged by a turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:573
+#: qcsrc/common/notifications.qh:591
 msgid "^K1You had an unfortunate run in with an eWheel turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:573
+#: qcsrc/common/notifications.qh:591
 msgid "^K1You were fragged by an eWheel turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:574
+#: qcsrc/common/notifications.qh:592
 msgid "^K1You had an unfortunate run in with a Walker turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:574
+#: qcsrc/common/notifications.qh:592
 msgid "^K1You were fragged by a Walker turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:575
+#: qcsrc/common/notifications.qh:593
 msgid "^K1You got caught in the blast of a Bumblebee explosion!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:576
+#: qcsrc/common/notifications.qh:594
 msgid "^K1You were crushed by a vehicle!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:577
+#: qcsrc/common/notifications.qh:595
 msgid "^K1You were caught in a Raptor cluster bomb!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:578
+#: qcsrc/common/notifications.qh:596
 msgid "^K1You got caught in the blast of a Raptor explosion!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:579
+#: qcsrc/common/notifications.qh:597
 msgid "^K1You got caught in the blast of a Spiderbot explosion!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:580
+#: qcsrc/common/notifications.qh:598
 msgid "^K1You were blasted to bits by a Spiderbot rocket!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:581
+#: qcsrc/common/notifications.qh:599
 msgid "^K1You got caught in the blast of a Racer explosion!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:582
+#: qcsrc/common/notifications.qh:600
 msgid "^K1You couldn't find shelter from a Racer rocket!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:583
+#: qcsrc/common/notifications.qh:601
 msgid "^K1Watch your step!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:584
+#: qcsrc/common/notifications.qh:602
 #, c-format
 msgid "^K1Moron! You fragged ^BG%s^K1, a team mate!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:584
+#: qcsrc/common/notifications.qh:602
 #, c-format
 msgid "^K1Moron! You went against ^BG%s^K1, a team mate!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:585
+#: qcsrc/common/notifications.qh:603
 #, c-format
 msgid "^K1You were fragged by ^BG%s^K1, a team mate"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:585
+#: qcsrc/common/notifications.qh:603
 #, c-format
 msgid "^K1You were scored against by ^BG%s^K1, a team mate"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:586
+#: qcsrc/common/notifications.qh:604
 msgid ""
 "^K1Stop idling!\n"
 "^BGDisconnecting in ^COUNT..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:587
+#: qcsrc/common/notifications.qh:605
 msgid "^F2You picked up some extra lives"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:588
+#: qcsrc/common/notifications.qh:606
 #, c-format
 msgid "^K3You froze ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:589
+#: qcsrc/common/notifications.qh:607
 #, c-format
 msgid "^K1You were frozen by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:590
+#: qcsrc/common/notifications.qh:608
 #, c-format
 msgid "^K3You revived ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:591
+#: qcsrc/common/notifications.qh:609
 msgid "^K3You revived yourself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:592
+#: qcsrc/common/notifications.qh:610
 #, c-format
 msgid "^K3You were revived by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:593
+#: qcsrc/common/notifications.qh:611
 #, c-format
 msgid "^K3You were automatically revived after %s second(s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:596
+#: qcsrc/common/notifications.qh:614
 msgid "^K1You froze yourself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:597
+#: qcsrc/common/notifications.qh:615
 msgid "^K1Round already started, you spawn as frozen"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:604
+#: qcsrc/common/notifications.qh:622
 msgid ""
 "^K1No spawnpoints available!\n"
 "Hope your team can fix it..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:605
+#: qcsrc/common/notifications.qh:623
 msgid ""
 "^K1You may not join the game at this time.\n"
 "The player limit reached maximum capacity."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:608
+#: qcsrc/common/notifications.qh:626
 msgid "^BGKilling people while you don't have the ball gives no points!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:609
+#: qcsrc/common/notifications.qh:627
 msgid ""
 "^BGAll keys are in your team's hands!\n"
 "Help the key carriers to meet!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:610
+#: qcsrc/common/notifications.qh:628
 msgid ""
 "^BGAll keys are in ^TC^TT team^BG's hands!\n"
 "Interfere ^F4NOW^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:611
+#: qcsrc/common/notifications.qh:629
 msgid ""
 "^BGAll keys are in your team's hands!\n"
 "Meet the other key carriers ^F4NOW^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:612
+#: qcsrc/common/notifications.qh:630
 msgid "^F4Round will start in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:613
+#: qcsrc/common/notifications.qh:631
 msgid "^BGScanning frequency range..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:614
+#: qcsrc/common/notifications.qh:632
 msgid "^BGYou are starting with the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:615 qcsrc/common/notifications.qh:616
+#: qcsrc/common/notifications.qh:633 qcsrc/common/notifications.qh:634
 #, c-format
 msgid ""
 "^BGWaiting for players to join...\n"
 "Need active players for: %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:617
+#: qcsrc/common/notifications.qh:635
 #, c-format
 msgid "^BGWaiting for %s player(s) to join..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:618
+#: qcsrc/common/notifications.qh:636
 msgid "^F4^COUNT^BG left to find some ammo!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:619
+#: qcsrc/common/notifications.qh:637
 msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:619
+#: qcsrc/common/notifications.qh:637
 msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:620
+#: qcsrc/common/notifications.qh:638
 #, c-format
 msgid "^F2Extra lives remaining: ^K1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:621
+#: qcsrc/common/notifications.qh:639
 msgid "^BGSecondary fire inflicts no damage!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:622
+#: qcsrc/common/notifications.qh:640
 #, c-format
 msgid "^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:623
+#: qcsrc/common/notifications.qh:641
 #, c-format
 msgid ""
 "^F2^COUNT^BG until weapon change...\n"
 "Next weapon: ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:624
+#: qcsrc/common/notifications.qh:642
 #, c-format
 msgid "^F2Active weapon: ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:625
+#: qcsrc/common/notifications.qh:643
 msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:626
+#: qcsrc/common/notifications.qh:644
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "Keep fragging until we have a winner!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:626
+#: qcsrc/common/notifications.qh:644
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "Keep scoring until we have a winner!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:627
+#: qcsrc/common/notifications.qh:645
 #, c-format
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "^BGAdded ^F4%s^BG to the game!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:628
+#: qcsrc/common/notifications.qh:646
 msgid "^F2Invisibility has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:629
+#: qcsrc/common/notifications.qh:647
 msgid "^F2Shield has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:630
+#: qcsrc/common/notifications.qh:648
 msgid "^F2Speed has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:631
+#: qcsrc/common/notifications.qh:649
 msgid "^F2Strength has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:632
+#: qcsrc/common/notifications.qh:650
 msgid "^F2You are invisible"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:633
+#: qcsrc/common/notifications.qh:651
 msgid "^F2Shield surrounds you"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:634
+#: qcsrc/common/notifications.qh:652
 msgid "^F2You are on speed"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:635
+#: qcsrc/common/notifications.qh:653
 msgid "^F2Strength infuses your weapons with devastating power"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:636
+#: qcsrc/common/notifications.qh:654
 msgid "^F2The race is over, finish your lap!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:637
+#: qcsrc/common/notifications.qh:655
 msgid "^F2Superweapons have broken down"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:638
+#: qcsrc/common/notifications.qh:656
 msgid "^F2Superweapons have been lost"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:639
+#: qcsrc/common/notifications.qh:657
 msgid "^F2You now have a superweapon"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:640
+#: qcsrc/common/notifications.qh:658
 msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:641
+#: qcsrc/common/notifications.qh:659
 msgid "^K1Changing team in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:642
+#: qcsrc/common/notifications.qh:660
 msgid "^K1Spectating in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:643
+#: qcsrc/common/notifications.qh:661
 msgid "^K1Suicide in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:644
+#: qcsrc/common/notifications.qh:662
 msgid "^F4Timeout begins in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:645
+#: qcsrc/common/notifications.qh:663
 msgid "^F4Timeout ends in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:907 qcsrc/common/notifications.qh:908
+#: qcsrc/common/notifications.qh:937 qcsrc/common/notifications.qh:938
 #, c-format
 msgid " (near %s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:915 qcsrc/common/notifications.qh:916
+#: qcsrc/common/notifications.qh:945 qcsrc/common/notifications.qh:946
 msgid "primary"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:915 qcsrc/common/notifications.qh:916
+#: qcsrc/common/notifications.qh:945 qcsrc/common/notifications.qh:946
 msgid "secondary"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:926
+#: qcsrc/common/notifications.qh:956
 #, c-format
 msgid " ^F1(Press %s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:935
+#: qcsrc/common/notifications.qh:965
 #, c-format
 msgid " with %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 #, c-format
 msgid "%s^K1 made a TRIPLE FRAG! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 #, c-format
 msgid "%s^K1 made a TRIPLE SCORE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 msgid "TRIPLE FRAG! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 #, c-format
 msgid "%s^K1 made FIVE SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 #, c-format
 msgid "%s^K1 unlocked RAGE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 msgid "RAGE! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 #, c-format
 msgid "%s^K1 made TEN SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 #, c-format
 msgid "%s^K1 started a MASSACRE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 msgid "MASSACRE! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 #, c-format
 msgid "%s^K1 executed MAYHEM! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 #, c-format
 msgid "%s^K1 made FIFTEEN SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 msgid "MAYHEM! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 #, c-format
 msgid "%s^K1 is a BERSERKER! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 #, c-format
 msgid "%s^K1 made TWENTY SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 msgid "BERSERKER! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 #, c-format
 msgid "%s^K1 inflicts CARNAGE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 #, c-format
 msgid "%s^K1 made TWENTY FIVE SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 msgid "CARNAGE! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 #, c-format
 msgid "%s^K1 made THIRTY SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 #, c-format
 msgid "%s^K1 unleashes ARMAGEDDON! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 msgid "ARMAGEDDON! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:956
+#: qcsrc/common/notifications.qh:986
 #, c-format
 msgid "%s(^F1Bot^BG)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:958
+#: qcsrc/common/notifications.qh:988
 #, c-format
 msgid "%s(Ping ^F1%d^BG)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:964
+#: qcsrc/common/notifications.qh:994
 #, c-format
 msgid ""
 "\n"
 "(Health ^1%d^BG / Armor ^2%d^BG)%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:966
+#: qcsrc/common/notifications.qh:996
 #, c-format
 msgid ""
 "\n"
 "(^F4Dead^BG)%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1003 qcsrc/common/notifications.qh:1016
+#: qcsrc/common/notifications.qh:1033 qcsrc/common/notifications.qh:1046
 #, c-format
 msgid "%d score spree! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1015
+#: qcsrc/common/notifications.qh:1045
 #, c-format
 msgid "%d frag spree! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1028
+#: qcsrc/common/notifications.qh:1058
 msgid "First blood! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1028
+#: qcsrc/common/notifications.qh:1058
 msgid "First score! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1032
+#: qcsrc/common/notifications.qh:1062
 msgid "First casualty! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1032
+#: qcsrc/common/notifications.qh:1062
 msgid "First victim! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1073
+#: qcsrc/common/notifications.qh:1103
 #, c-format
 msgid "%s^K1 has %d frags in a row! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1074
+#: qcsrc/common/notifications.qh:1104
 #, c-format
 msgid "%s^K1 made %d scores in a row! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1092
+#: qcsrc/common/notifications.qh:1122
 #, c-format
 msgid "%s^K1 drew first blood! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1093
+#: qcsrc/common/notifications.qh:1123
 #, c-format
 msgid "%s^K1 got the first score! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1109
+#: qcsrc/common/notifications.qh:1139
 #, c-format
 msgid ", ending their %d frag spree"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1110
+#: qcsrc/common/notifications.qh:1140
 #, c-format
 msgid ", ending their %d score spree"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1124
+#: qcsrc/common/notifications.qh:1154
 #, c-format
 msgid ", losing their %d frag spree"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1125
+#: qcsrc/common/notifications.qh:1155
 #, c-format
 msgid ", losing their %d score spree"
 msgstr ""
@@ -3137,11 +3137,11 @@ msgstr "Esine %d"
 msgid "%d (%s)"
 msgstr "%d (%s)"
 
-#: qcsrc/menu/item/textslider.c:29 qcsrc/menu/item/textslider.c:31
+#: qcsrc/menu/item/textslider.c:31 qcsrc/menu/item/textslider.c:33
 msgid "custom"
 msgstr "omavalintainen"
 
-#: qcsrc/menu/menu.qc:56
+#: qcsrc/menu/menu.qc:59
 #, c-format
 msgid "^4MQC Build information: ^1%s\n"
 msgstr "^4MQC Version tiedot: ^1%s\n"
@@ -3188,7 +3188,7 @@ msgstr "Tekijät"
 #: 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_sandboxtools.c:89
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:90
 #: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:77
 #: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:21
 msgid "OK"
@@ -3243,33 +3243,33 @@ msgstr "Tallenna asetukset"
 msgid "Ammo Panel"
 msgstr "Ammuspaneeli"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:23
 msgid "Ammunition display:"
 msgstr "Ammuksien näyttö:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:26
 msgid "Show only current ammo type"
 msgstr "Näytä vain nykyinen ammustyyppi"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
 msgid "Align icon:"
 msgstr "Kuvakkeen kohdistus:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:36
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:28
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:40
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:28
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:40
-msgid "Left"
-msgstr "Vasen"
-
 #: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:30
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:38
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:29
 #: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:41
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:29
 #: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:41
+msgid "Left"
+msgstr "Vasen"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:42
 msgid "Right"
 msgstr "Oikea"
 
@@ -3277,28 +3277,28 @@ msgstr "Oikea"
 msgid "Centerprint"
 msgstr "Keskeiskirjoitus"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:24
 msgid "Message duration:"
 msgstr "Viestien kesto:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:27
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:28
 msgid "Fade time:"
 msgstr "Sisääntulon häivennyksen kesto"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:32
 msgid "Flip messages order"
 msgstr "Käännä ilmoitusjärjestys"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:34
 msgid "Text alignment:"
 msgstr "Tekstin kohdistus:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:38
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:51
 msgid "Center"
 msgstr "Keskitetty"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:41
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:42
 msgid "Font scale:"
 msgstr "Fontin skaalaus:"
 
@@ -3306,19 +3306,19 @@ msgstr "Fontin skaalaus:"
 msgid "Chat Panel"
 msgstr "Keskustelupaneeli"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:23
 msgid "Chat entries:"
 msgstr "Viestien määrä:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:26
 msgid "Chat size:"
 msgstr "Fontin koko:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:30
 msgid "Chat lifetime:"
 msgstr "Viestin kesto:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:34
 msgid "Chat beep sound"
 msgstr "Viestin piippausääni"
 
@@ -3326,11 +3326,11 @@ msgstr "Viestin piippausääni"
 msgid "Engine Info Panel"
 msgstr "Pelimoottorin tietopaneeli"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:23
 msgid "Engine info:"
 msgstr "Pelimoottorin tiedot:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:26
 msgid "Use an averaging algorithm for fps"
 msgstr "Käytä tasoittavaa algoritmia ruudunpäivitykselle (FPS)"
 
@@ -3338,36 +3338,36 @@ msgstr "Käytä tasoittavaa algoritmia ruudunpäivitykselle (FPS)"
 msgid "Health/Armor Panel"
 msgstr "Elämä/Panssaripaneeli"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:22
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:23
 msgid "Enable status bar"
 msgstr "Ota tilapalkki käyttöön"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:24
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:25
 msgid "Status bar alignment:"
 msgstr "Tilapalkin kohdistus:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:32
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:42
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:32
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:43
 msgid "Inward"
 msgstr "Sisäänpäin"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:34
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:43
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:34
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:44
 msgid "Outward"
 msgstr "Ulospäin"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:37
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:38
 msgid "Icon alignment:"
 msgstr "Kuvakkeen kohdistus:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:46
 msgid "Flip health and armor positions"
 msgstr "Vaihda elämän ja panssarin paikkaa"
 
@@ -3375,11 +3375,11 @@ msgstr "Vaihda elämän ja panssarin paikkaa"
 msgid "Info Messages Panel"
 msgstr "Tiedotuspaneeli"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:23
 msgid "Info messages:"
 msgstr "Tiedoitukset"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:26
 msgid "Flip align"
 msgstr "Tasoita"
 
@@ -3391,23 +3391,23 @@ msgstr "Modi-ikonit paneeli"
 msgid "Notification Panel"
 msgstr "Ilmoituspaneeli"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:23
 msgid "Notifications:"
 msgstr "Ilmoitukset:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:26
 msgid "Also print notifications to the console"
 msgstr "Laita ilmoitukset myös komentoriville"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:29
 msgid "Flip notify order"
 msgstr "Käännä ilmoitusjärjestys"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:32
 msgid "Entry lifetime:"
 msgstr "Sisääntulon kesto"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:36
 msgid "Entry fadetime:"
 msgstr "Sisääntulon häivennyksen kesto"
 
@@ -3415,96 +3415,96 @@ msgstr "Sisääntulon häivennyksen kesto"
 msgid "Physics Panel"
 msgstr "Fysiikkapaneeli"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:22
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:22
 msgid "Panel disabled"
 msgstr "Paneeli pois päältä"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
 msgid "Panel enabled"
 msgstr "Paneeli päälle"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
 msgid "Panel enabled even observing"
 msgstr "Paneeli päällä kun katsojana"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:26
 msgid "Panel enabled only in Race/CTS"
 msgstr "Paneeli käytössä vain kilpajuoksuissa"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:32
 msgid "Status bar"
 msgstr "Tilapalkki"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:49
 msgid "Left align"
 msgstr "Vasen tasaus"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:53
 msgid "Right align"
 msgstr "Oikea tasaus"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
 msgid "Inward align"
 msgstr "Sisäänpäin kohditus"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:37
 msgid "Outward align"
 msgstr "Ulospäin kohdistus"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:41
 msgid "Flip speed/acceleration positions"
 msgstr "Vaihda nopeuden/kiihtyvyyden paikkaa"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
 #: qcsrc/menu/xonotic/dialog_settings_misc.c:29
 msgid "Speed:"
 msgstr "Nopeus:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:46
 msgid "Include vertical speed"
 msgstr "Huomioi pystysuora nopeus"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:56
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:57
 msgid "Speed unit:"
 msgstr "Nopeuden mittayksikkö:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:58
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
 msgid "qu/s"
 msgstr "qu/s"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
 msgid "m/s"
 msgstr "m/s"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
 msgid "km/h"
 msgstr "km/h"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
 msgid "mph"
 msgstr "mph"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:63
 msgid "knots"
 msgstr "knots"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:64
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:65
 msgid "Show"
 msgstr "Näytä"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:67
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:68
 msgid "Top speed"
 msgstr "Huippunopeus"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:73
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
 msgid "Acceleration:"
 msgstr "Kiihtyvyys:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:75
 msgid "Include vertical acceleration"
 msgstr "Huomioi pystysuora kiihtyvyys"
 
@@ -3512,7 +3512,7 @@ msgstr "Huomioi pystysuora kiihtyvyys"
 msgid "Powerups Panel"
 msgstr "Tehonlisäyspaneeli"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:46
 msgid "Flip strength and shield positions"
 msgstr "Käännä voimakkuuden ja suojauksen sijainnit"
 
@@ -3520,16 +3520,16 @@ msgstr "Käännä voimakkuuden ja suojauksen sijainnit"
 msgid "Pressed Keys Panel"
 msgstr "Painettujen näppäinten paneeli"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
 msgid "Panel enabled when spectating"
 msgstr "Paneeli päällä kun katsojana"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:24
 msgid "Panel always enabled"
 msgstr "Paneeli aina päällä"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:31
 msgid "Forced aspect:"
 msgstr "Pakotettu näkymä:"
 
@@ -3541,68 +3541,68 @@ msgstr "Kilpajuoksun ajanoton paneeli"
 msgid "Radar Panel"
 msgstr "Tutkapaneeli"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
 msgid "Panel enabled in teamgames"
 msgstr "Paneeli käytössä joukkuepeleissä"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:30
 msgid "Radar:"
 msgstr "Tutka:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:32
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:43
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:82
+#: 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
 msgid "Alpha:"
 msgstr "Alpha:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:37
 msgid "Rotation:"
 msgstr "Pyöriminen:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:39
 msgid "Forward"
 msgstr "Eteenpäin"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:40
 msgid "West"
 msgstr "Länsi"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:41
 msgid "South"
 msgstr "Etelä"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:41
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:42
 msgid "East"
 msgstr "Itä"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:43
 msgid "North"
 msgstr "Pohjoinen"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:46
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:47
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:63
 msgid "Scale:"
 msgstr "Skaala:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:50
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:51
 msgid "Zoom mode:"
 msgstr "Tarkennus:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:52
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:53
 msgid "Zoomed in"
 msgstr "Tarkennettu kohteeseen"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:53
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:54
 msgid "Zoomed out"
 msgstr "Tarkennuksen poisto"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:54
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:55
 msgid "Always zoomed"
 msgstr "Aina tarkennettuna"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:55
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:56
 msgid "Never zoomed"
 msgstr "Tarkennus ei ikinä päällä"
 
@@ -3610,23 +3610,23 @@ msgstr "Tarkennus ei ikinä päällä"
 msgid "Score Panel"
 msgstr "Tulospaneeli"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:23
 msgid "Score:"
 msgstr "Tulos:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
 msgid "Rankings:"
 msgstr "Tilastot:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
 msgid "Off"
 msgstr "Pois päältä"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
 msgid "And me"
 msgstr "Ja minä"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:29
 msgid "Pure"
 msgstr "Muokkaamaton"
 
@@ -3634,11 +3634,11 @@ msgstr "Muokkaamaton"
 msgid "Timer Panel"
 msgstr "Ajastinpaneeli"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:23
 msgid "Timer:"
 msgstr "Ajastin:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:26
 msgid "Show elapsed time"
 msgstr "Näytä kulutettu aika"
 
@@ -3646,7 +3646,7 @@ msgstr "Näytä kulutettu aika"
 msgid "Vote Panel"
 msgstr "Äänestyspaneeli"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:23
 msgid "Alpha after voting:"
 msgstr "Alpha äänestyksen jälkeen"
 
@@ -3654,76 +3654,76 @@ msgstr "Alpha äänestyksen jälkeen"
 msgid "Weapons Panel"
 msgstr "Asepaneeli"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:25
 msgid "Fade out after:"
 msgstr "Himmennä jälkikäteen:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:26
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:27
 msgid "Never"
 msgstr "Ei ikinä"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:29
 #, c-format
 msgid "%ds"
 msgstr "%dt"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:32
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:33
 msgid "Fade effect:"
 msgstr "Himmennyseffekti:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
 msgid "EF^None"
 msgstr "EF^Ei mikään"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:37
 msgid "Alpha"
 msgstr "Alpha"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
 msgid "Slide"
 msgstr "Liukuminen"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:39
 msgid "EF^Both"
 msgstr "EF^Molemmat"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:43
 msgid "Weapon icons:"
 msgstr "Aseiden kuvakkeet:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46
 msgid "Show only owned weapons"
 msgstr "Näytä vain omistuksessa olevat aseet"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:48
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
 msgid "Show weapon ID as:"
 msgstr "Näytä aseen tunniste:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
 msgid "SHOWAS^None"
 msgstr "SHOWAS^Ei mitään."
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
 msgid "Number"
 msgstr "Numero"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:52
 msgid "Bind"
 msgstr "Näppäin"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:54
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
 msgid "Show Accuracy"
 msgstr "Näytä tarkkuus"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:56
 msgid "Show Ammo"
 msgstr "Näytä panokset"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:58
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:59
 msgid "Ammo bar color:"
 msgstr "Ammuskotelon väri"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:64
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:65
 msgid "Ammo bar alpha:"
 msgstr "Ammuskotelon alpha"
 
@@ -3731,85 +3731,85 @@ msgstr "Ammuskotelon alpha"
 msgid "Panel HUD Setup"
 msgstr "Paneelin näkymän asetukset"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:21
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:22
 msgid "Panel background defaults:"
 msgstr "Paneelin taustan perusasetukset:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:23 qcsrc/menu/xonotic/util.qc:683
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:24 qcsrc/menu/xonotic/util.qc:683
 msgid "Background:"
 msgstr "Tausta:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:25
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:37
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:52
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:686
+#: 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
 msgid "Disable"
 msgstr "Pois päältä"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:30
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:691
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:31
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:78 qcsrc/menu/xonotic/util.qc:691
 msgid "Color:"
 msgstr "Väri:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:699
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:36 qcsrc/menu/xonotic/util.qc:699
 msgid "Border size:"
 msgstr "Reunan koko:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:50
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:89
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:51
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:90
 msgid "Team color:"
 msgstr "Joukkueen väri:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:725
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:59 qcsrc/menu/xonotic/util.qc:725
 msgid "Test team color in configure mode"
 msgstr "Kokeile joukkueen väriä muokkaustilassa"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:728
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:62 qcsrc/menu/xonotic/util.qc:728
 msgid "Padding:"
 msgstr "Pehmustus:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:68
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:69
 msgid "HUD Dock:"
 msgstr "Näkymän liitäntä:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:70
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71
 msgid "DOCK^Disabled"
 msgstr "DOCK^Pois"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72
 msgid "DOCK^Small"
 msgstr "DOCK^Pieni"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73
 msgid "DOCK^Medium"
 msgstr "DOCK^Keskikokoinen"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:74
 msgid "DOCK^Large"
 msgstr "DOCK^Suuri"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:96
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:97
 msgid "Grid settings:"
 msgstr "Ruudukon asetukset:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:99
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:100
 msgid "Snap panels to grid"
 msgstr "Katkaise paneelit ruudukkoon"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:102
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:103
 msgid "Grid size:"
 msgstr "Ruudukon koko:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:103
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:104
 msgid "X:"
 msgstr "X:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:109
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:110
 msgid "Y:"
 msgstr "Y:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:117
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:118
 msgid "Exit setup"
 msgstr "Poistu asetuksista"
 
@@ -4394,7 +4394,7 @@ msgid "Key:"
 msgstr "Avain:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:61
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:19
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:20
 msgid "Model:"
 msgstr "Hahmo:"
 
@@ -4770,127 +4770,127 @@ msgstr "Ei"
 msgid "Sandbox Tools"
 msgstr "Hiekkalaatikon työkalut"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:24
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:25
 msgid "Spawn"
 msgstr "Luo"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:25
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:26
 msgid "Remove *"
 msgstr "Poista *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:27
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:28
 msgid "Copy *"
 msgstr "Kopioi *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:28
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:29
 msgid "Paste"
 msgstr "Liitä:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:30
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:31
 msgid "Bone:"
 msgstr "Luu:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:35
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:36
 msgid "Set * as child"
 msgstr "Aseta * lapseksi"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:36
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:37
 msgid "Attach to *"
 msgstr "Liitä *:n"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:38
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:39
 msgid "Detach from *"
 msgstr "Irrota *:stä"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:41
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:42
 msgid "Visual object properties for *:"
 msgstr "Esineen *:n visuaaliset ominaisuudet:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:43
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:44
 msgid "Set skin:"
 msgstr "Aseta iho:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:45
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:46
 msgid "Set alpha:"
 msgstr "Aseta läpinäkyvyys:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:48
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:49
 msgid "Set color main:"
 msgstr "Aseta pääväri:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:50
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:51
 msgid "Set color glow:"
 msgstr "Aseta hehkumisväri:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:54
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:55
 msgid "Set frame:"
 msgstr "Aseta kuvaruutu"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:58
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:59
 msgid "Physical object properties for *:"
 msgstr "Esineen *:n fysikaaliset ominaisuudet:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:60
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:61
 msgid "Set material:"
 msgstr "Aseta materiaali"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:66
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:67
 msgid "Set solidity:"
 msgstr "Aseta kiinteyys:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:67
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:68
 msgid "Non-solid"
 msgstr "Ei-kiinteä"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:68
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:69
 msgid "Solid"
 msgstr "Kiinteä"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:69
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:70
 msgid "Set physics:"
 msgstr "Aseta fysiikka:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:70
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:71
 msgid "Static"
 msgstr "Staattinen"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:71
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:72
 msgid "Movable"
 msgstr "Siirrettävä"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:72
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:73
 msgid "Physical"
 msgstr "Fyysinen"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:74
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:75
 msgid "Set scale:"
 msgstr "Aseta skaala:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:76
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:77
 msgid "Set force:"
 msgstr "Aseta voima:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:80
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:81
 msgid "Claim *"
 msgstr "Valtaa *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:82
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:83
 msgid "* object info"
 msgstr "* esineen info"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:83
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:84
 msgid "* mesh info"
 msgstr "* mesh info"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:84
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:85
 msgid "* attachment info"
 msgstr "* liitosinfo"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:85
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:86
 msgid "Show help"
 msgstr "Näytä apu"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:86
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:87
 msgid "* is the object you are facing"
 msgstr "* on esine jota katsot"
 
@@ -5887,27 +5887,27 @@ msgstr "Voittaja"
 msgid "Team Selection"
 msgstr "Joukkueen valinta"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:41
+#: qcsrc/menu/xonotic/dialog_teamselect.c:42
 msgid "join 'best' team (auto-select)"
 msgstr "liity 'parhaimpaan' joukkueeseen"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:45
+#: qcsrc/menu/xonotic/dialog_teamselect.c:46
 msgid "red"
 msgstr "punainen"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:46
+#: qcsrc/menu/xonotic/dialog_teamselect.c:47
 msgid "blue"
 msgstr "sininen"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:47
+#: qcsrc/menu/xonotic/dialog_teamselect.c:48
 msgid "yellow"
 msgstr "keltainen"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:48
+#: qcsrc/menu/xonotic/dialog_teamselect.c:49
 msgid "pink"
 msgstr "pinkki"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:51
+#: qcsrc/menu/xonotic/dialog_teamselect.c:52
 msgid "spectate"
 msgstr "seuraa sivusta"
 
@@ -6007,7 +6007,12 @@ msgstr ""
 msgid "%s dB"
 msgstr "%s dB"
 
-#: qcsrc/menu/xonotic/slider_resolution.c:72
+#: qcsrc/menu/xonotic/slider_resolution.c:103
+#, c-format
+msgid "%dx%d (%d:%d)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_resolution.c:106
 #, c-format
 msgid "%dx%d"
 msgstr "%dx%d"
index 5e6b6186061c2de269f246fd8ffaef01d8fb56c5..308fb25d085dd8a0a157675e3363964d343d66db 100644 (file)
@@ -5,13 +5,14 @@
 # Translators:
 # Calinou <calinou9999@gmail.com>, 2012
 # Maxime Paradis <taximus.micro@gmail.com>, 2011
+# SpiKe <leguen.yannick@gmail.com>, 2013
 msgid ""
 msgstr ""
 "Project-Id-Version: Xonotic\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-09-13 10:31+0200\n"
-"PO-Revision-Date: 2013-09-13 08:33+0000\n"
-"Last-Translator: divVerent <divVerent@xonotic.org>\n"
+"POT-Creation-Date: 2013-10-03 11:55+0200\n"
+"PO-Revision-Date: 2013-10-04 10:11+0000\n"
+"Last-Translator: SpiKe <leguen.yannick@gmail.com>\n"
 "Language-Team: French (http://www.transifex.com/projects/p/xonotic/language/"
 "fr/)\n"
 "Language: fr\n"
@@ -1281,14 +1282,14 @@ msgstr ""
 msgid "@!#%'n Tuba Throwing"
 msgstr ""
 
-#: qcsrc/common/mapinfo.qc:1105 qcsrc/menu/xonotic/skinlist.c:166
+#: qcsrc/common/mapinfo.qc:1109 qcsrc/menu/xonotic/skinlist.c:166
 #, c-format
 msgid "%s: %s"
 msgstr ""
 
 #: qcsrc/common/mapinfo.qh:36
 msgid "Deathmatch"
-msgstr ""
+msgstr "Match à mort"
 
 #: qcsrc/common/mapinfo.qh:39
 msgid "Last Man Standing"
@@ -1300,23 +1301,23 @@ msgstr "Arène"
 
 #: qcsrc/common/mapinfo.qh:45
 msgid "Race"
-msgstr ""
+msgstr "Course"
 
 #: qcsrc/common/mapinfo.qh:48
 msgid "Race CTS"
-msgstr ""
+msgstr "Course CTS"
 
 #: qcsrc/common/mapinfo.qh:51
 msgid "Team Deathmatch"
-msgstr ""
+msgstr "Match à mort en Équipe"
 
 #: qcsrc/common/mapinfo.qh:54
 msgid "Capture the Flag"
-msgstr ""
+msgstr "Capture de drapeau"
 
 #: qcsrc/common/mapinfo.qh:57
 msgid "Clan Arena"
-msgstr ""
+msgstr "Clan Arena"
 
 #: qcsrc/common/mapinfo.qh:60
 msgid "Domination"
@@ -1332,7 +1333,7 @@ msgstr "Assaut"
 
 #: qcsrc/common/mapinfo.qh:69
 msgid "Onslaught"
-msgstr ""
+msgstr "Attaque"
 
 #: qcsrc/common/mapinfo.qh:72
 msgid "Nexball"
@@ -1340,11 +1341,11 @@ msgstr "Nexball"
 
 #: qcsrc/common/mapinfo.qh:75
 msgid "Freeze Tag"
-msgstr ""
+msgstr "Loup Glacé"
 
 #: qcsrc/common/mapinfo.qh:78
 msgid "Keepaway"
-msgstr ""
+msgstr "Gardez-la-balle"
 
 #: qcsrc/common/net_notice.qc:89
 msgid "^1Server notices:"
@@ -1353,1384 +1354,1404 @@ msgstr "^1Notifications du serveur :"
 #: qcsrc/common/net_notice.qc:95
 #, c-format
 msgid "^7%s (^3%d sec left)"
-msgstr ""
+msgstr "^7%s (^3%d sec restantes)"
 
-#: qcsrc/common/notifications.qh:330
+#: qcsrc/common/notifications.qh:342
 #, c-format
 msgid "^BG%s^BG captured the ^TC^TT^BG flag"
-msgstr ""
+msgstr "^BG%s^BG a capturé le drapeau ^TC^TT^BG"
 
-#: qcsrc/common/notifications.qh:331
+#: qcsrc/common/notifications.qh:343
 #, c-format
 msgid ""
 "^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
 "%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
+"^BG%s^BG a capturé le drapeau ^TC^TT^BG en ^F1%s^BG secondes, battant le "
+"précédent record de ^BG%s^BG en ^F2%s^BG secondes"
 
-#: qcsrc/common/notifications.qh:332
+#: qcsrc/common/notifications.qh:344
 #, c-format
 msgid "^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds"
-msgstr ""
+msgstr "^BG%s^BG a capturé le drapeau ^TC^TT^BG en ^F1%s^BG secondes"
 
-#: qcsrc/common/notifications.qh:333
+#: qcsrc/common/notifications.qh:345
 #, c-format
 msgid ""
 "^BG%s^BG captured the ^TC^TT^BG flag in ^F2%s^BG seconds, failing to break "
 "^BG%s^BG's previous record of ^F1%s^BG seconds"
 msgstr ""
+"^BG%s^BG a capturé le drapeau ^TC^TT^BG en ^F2%s^BG secondes, échouant à "
+"battre le précédent record de ^BG%s^BG en ^F1%s^BG secondes"
 
-#: qcsrc/common/notifications.qh:334
+#: qcsrc/common/notifications.qh:346
 msgid "^BGThe ^TC^TT^BG flag was returned to base by its owner"
-msgstr ""
+msgstr "^BGLe drapeau ^TC^TT^BG a été renvoyé à la base par son propriétaire"
 
-#: qcsrc/common/notifications.qh:335
+#: qcsrc/common/notifications.qh:347
 msgid "^BGThe ^TC^TT^BG flag was destroyed and returned to base"
-msgstr ""
+msgstr "^BGLe drapeau ^TC^TT^BG a été détruit et est revenu à la base"
 
-#: qcsrc/common/notifications.qh:336
+#: qcsrc/common/notifications.qh:348
 msgid "^BGThe ^TC^TT^BG flag was dropped in the base and returned itself"
 msgstr ""
+"^BGLe drapeau ^TC^TT^BG a été lâché dans la base et est revenu tout seul"
 
-#: qcsrc/common/notifications.qh:337
+#: qcsrc/common/notifications.qh:349
 msgid ""
 "^BGThe ^TC^TT^BG flag fell somewhere it couldn't be reached and returned to "
 "base"
 msgstr ""
+"^BGLe drapeau ^TC^TT^BG est tombé dans un endroit inaccessible est est "
+"revenu à la base"
 
-#: qcsrc/common/notifications.qh:338
+#: qcsrc/common/notifications.qh:350
 #, c-format
 msgid ""
 "^BGThe ^TC^TT^BG flag became impatient after ^F1%.2f^BG seconds and returned "
 "itself"
 msgstr ""
+"^BGLe drapeau ^TC^TT^BG est devenu impatient après ^F1%.2f^BG secondes et "
+"est revenu tout seul"
 
-#: qcsrc/common/notifications.qh:339
+#: qcsrc/common/notifications.qh:351
 msgid "^BGThe ^TC^TT^BG flag has returned to the base"
-msgstr ""
+msgstr "^BGLe drapeau ^TC^TT^BG est revenu à la base"
 
-#: qcsrc/common/notifications.qh:340
+#: qcsrc/common/notifications.qh:352
 #, c-format
 msgid "^BG%s^BG lost the ^TC^TT^BG flag"
-msgstr ""
+msgstr "^BG%s^BG a perdu le drapeau ^TC^TT^BG"
 
-#: qcsrc/common/notifications.qh:341
+#: qcsrc/common/notifications.qh:353
 #, c-format
 msgid "^BG%s^BG got the ^TC^TT^BG flag"
-msgstr ""
+msgstr "^BG%s^BG a le drapeau ^TC^TT^BG"
 
-#: qcsrc/common/notifications.qh:342
+#: qcsrc/common/notifications.qh:354
 #, c-format
 msgid "^BG%s^BG returned the ^TC^TT^BG flag"
-msgstr ""
+msgstr "^BG%s^BG a retourné le drapeau ^TC^TT^BG"
 
-#: qcsrc/common/notifications.qh:343
+#: qcsrc/common/notifications.qh:355
 #, c-format
 msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 a été injustement éliminé par ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:344
+#: qcsrc/common/notifications.qh:356
 #, c-format
 msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 a été noyé par ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:345
+#: qcsrc/common/notifications.qh:357
 #, c-format
 msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 a été puni par ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:346
+#: qcsrc/common/notifications.qh:358
 #, c-format
 msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:346
+#: qcsrc/common/notifications.qh:358
 #, c-format
 msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:347
+#: qcsrc/common/notifications.qh:359
 #, c-format
 msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 a été cuisiné par ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:348
+#: qcsrc/common/notifications.qh:360
 #, c-format
 msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 a explosé avec la Grenade de ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:349
+#: qcsrc/common/notifications.qh:361
 #, c-format
 msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 a été projeté dans l'espace par ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:350
+#: qcsrc/common/notifications.qh:362
 #, c-format
 msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:351
+#: qcsrc/common/notifications.qh:363
 #, c-format
 msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:352
+#: qcsrc/common/notifications.qh:364
 #, c-format
 msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:352
+#: qcsrc/common/notifications.qh:364
 #, c-format
 msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:353
+#: qcsrc/common/notifications.qh:365
 #, c-format
 msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:354
+#: qcsrc/common/notifications.qh:366
 #, c-format
 msgid ""
 "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:355
+#: qcsrc/common/notifications.qh:367
 #, c-format
 msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:356
+#: qcsrc/common/notifications.qh:368
 #, c-format
 msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:357
+#: qcsrc/common/notifications.qh:369
 #, c-format
 msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:358
+#: qcsrc/common/notifications.qh:370
 #, c-format
 msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:359
+#: qcsrc/common/notifications.qh:371
 #, c-format
 msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:360
+#: qcsrc/common/notifications.qh:372
 #, c-format
 msgid ""
 "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:361
+#: qcsrc/common/notifications.qh:373
 #, c-format
 msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:362
+#: qcsrc/common/notifications.qh:374
 #, c-format
 msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:363
+#: qcsrc/common/notifications.qh:375
 #, c-format
 msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:364
+#: qcsrc/common/notifications.qh:376
 #, c-format
 msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:365
+#: qcsrc/common/notifications.qh:377
 #, c-format
 msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:366
+#: qcsrc/common/notifications.qh:378
 #, c-format
 msgid "^BG%s%s^K1 was thrown into a world of hurt by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:367
+#: qcsrc/common/notifications.qh:379
 #, c-format
 msgid "^BG%s^K1 was moved into the %s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:368
+#: qcsrc/common/notifications.qh:380
 #, c-format
 msgid "^BG%s^K1 became enemies with the Lord of Teamplay%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:369
+#: qcsrc/common/notifications.qh:381
 #, c-format
 msgid "^BG%s^K1 thought they found a nice camping ground%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:370
+#: qcsrc/common/notifications.qh:382
 #, c-format
 msgid "^BG%s^K1 unfairly eliminated themself%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:371
+#: qcsrc/common/notifications.qh:383
 #, c-format
 msgid "^BG%s^K1 %s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:372
+#: qcsrc/common/notifications.qh:384
 #, c-format
 msgid "^BG%s^K1 couldn't catch their breath%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:372
+#: qcsrc/common/notifications.qh:384
 #, c-format
 msgid "^BG%s^K1 was in the water for too long%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:373
+#: qcsrc/common/notifications.qh:385
 #, c-format
 msgid "^BG%s^K1 hit the ground with a bit too much force%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:373
+#: qcsrc/common/notifications.qh:385
 #, c-format
 msgid "^BG%s^K1 hit the ground with a crunch%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:374
+#: qcsrc/common/notifications.qh:386
 #, c-format
 msgid "^BG%s^K1 became a bit too crispy%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:374
+#: qcsrc/common/notifications.qh:386
 #, c-format
 msgid "^BG%s^K1 felt a little hot%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:375
+#: qcsrc/common/notifications.qh:387
 #, c-format
 msgid "^BG%s^K1 died%s%s"
-msgstr ""
+msgstr "^BG%s^K1 est mort%s%s"
 
-#: qcsrc/common/notifications.qh:376
+#: qcsrc/common/notifications.qh:388
 #, c-format
 msgid "^BG%s^K1 found a hot place%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:376
+#: qcsrc/common/notifications.qh:388
 #, c-format
 msgid "^BG%s^K1 turned into hot slag%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:377
+#: qcsrc/common/notifications.qh:389
 #, c-format
 msgid "^BG%s^K1 mastered the art of self-nading%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:378
+#: qcsrc/common/notifications.qh:390
 #, c-format
 msgid "^BG%s^K1 died%s%s. What's the point of living without ammo?"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:378
+#: qcsrc/common/notifications.qh:390
 #, c-format
 msgid "^BG%s^K1 ran out of ammo%s%s"
-msgstr ""
+msgstr "^BG%s^K1 s'est retrouvé à court de munitions%s%s"
 
-#: qcsrc/common/notifications.qh:379
+#: qcsrc/common/notifications.qh:391
 #, c-format
 msgid "^BG%s^K1 rotted away%s%s"
-msgstr ""
+msgstr "^BG%s^K1 s'est décomposé%s%s"
 
-#: qcsrc/common/notifications.qh:380
+#: qcsrc/common/notifications.qh:392
 #, c-format
 msgid "^BG%s^K1 became a shooting star%s%s"
-msgstr ""
+msgstr "^BG%s^K1 s'est transformé en étoile filante%s%s"
 
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:393
 #, c-format
 msgid "^BG%s^K1 was slimed%s%s"
-msgstr ""
+msgstr "^BG%s^K1 a maigri%s%s"
 
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:394
 #, c-format
 msgid "^BG%s^K1 couldn't take it anymore%s%s"
-msgstr ""
+msgstr "^BG%s^K1 n'en pouvait plus%s%s"
 
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:395
 #, c-format
 msgid "^BG%s^K1 is now preserved for centuries to come%s%s"
-msgstr ""
+msgstr "^BG%s^K1 est maintenant conservé pour les siècles à venir%s%s"
 
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:396
 #, c-format
 msgid "^BG%s^K1 switched to the %s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:397
 #, c-format
 msgid "^BG%s^K1 died in an accident%s%s"
-msgstr ""
+msgstr "^BG%s^K1 est mort dans un accident%s%s"
 
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:398
 #, c-format
 msgid "^BG%s^K1 ran into a turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:399
 #, c-format
 msgid "^BG%s^K1 was blasted away by an eWheel turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:400
 #, c-format
 msgid "^BG%s^K1 got caught up in the FLAC turret fire%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:401
 #, c-format
 msgid "^BG%s^K1 was blasted away by a Hellion turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:402
 #, c-format
 msgid "^BG%s^K1 could not hide from the Hunter turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:403
 #, c-format
 msgid "^BG%s^K1 was riddled full of holes by a Machinegun turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:404
 #, c-format
 msgid "^BG%s^K1 got turned into smoldering gibs by an MLRS turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:405
 #, c-format
 msgid "^BG%s^K1 was phased out by a turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:406
 #, c-format
 msgid "^BG%s^K1 got served some superheated plasma from a turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:407
 #, c-format
 msgid "^BG%s^K1 was electrocuted by a Tesla turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:408
 #, c-format
 msgid "^BG%s^K1 got served a lead enrichment by a Walker turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:409
 #, c-format
 msgid "^BG%s^K1 was impaled by a Walker turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:410
 #, c-format
 msgid "^BG%s^K1 was blasted away by a Walker turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:411
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Bumblebee explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:412
 #, c-format
 msgid "^BG%s^K1 was crushed by a vehicle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:401
+#: qcsrc/common/notifications.qh:413
 #, c-format
 msgid "^BG%s^K1 was caught in a Raptor cluster bomb%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:402
+#: qcsrc/common/notifications.qh:414
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Raptor explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:403
+#: qcsrc/common/notifications.qh:415
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Spiderbot explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:404
+#: qcsrc/common/notifications.qh:416
 #, c-format
 msgid "^BG%s^K1 was blasted to bits by a Spiderbot rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:405
+#: qcsrc/common/notifications.qh:417
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Racer explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:406
+#: qcsrc/common/notifications.qh:418
 #, c-format
 msgid "^BG%s^K1 couldn't find shelter from a Racer rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:407
+#: qcsrc/common/notifications.qh:419
 #, c-format
 msgid "^BG%s^K1 was in the wrong place%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:408
+#: qcsrc/common/notifications.qh:420
 #, c-format
 msgid "^BG%s^K1 was betrayed by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:409
+#: qcsrc/common/notifications.qh:421
 #, c-format
 msgid "^BG%s^K1 was frozen by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:410
+#: qcsrc/common/notifications.qh:422
 #, c-format
 msgid "^BG%s^K3 was revived by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:411
+#: qcsrc/common/notifications.qh:423
 #, c-format
 msgid "^BG%s^K3 was revived by falling"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:412
+#: qcsrc/common/notifications.qh:424
 #, c-format
 msgid "^BG%s^K3 was automatically revived after %s second(s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:413 qcsrc/common/notifications.qh:594
+#: qcsrc/common/notifications.qh:425 qcsrc/common/notifications.qh:612
 msgid "^TC^TT^BG team wins the round"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:414 qcsrc/common/notifications.qh:595
+#: qcsrc/common/notifications.qh:426 qcsrc/common/notifications.qh:613
 #, c-format
 msgid "^BG%s^BG wins the round"
 msgstr "^BG%s^BG remporte la manche"
 
-#: qcsrc/common/notifications.qh:415 qcsrc/common/notifications.qh:524
+#: qcsrc/common/notifications.qh:427 qcsrc/common/notifications.qh:542
 msgid "^BGRound tied"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:416 qcsrc/common/notifications.qh:525
+#: qcsrc/common/notifications.qh:428 qcsrc/common/notifications.qh:543
 msgid "^BGRound over, there's no winner"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:417
+#: qcsrc/common/notifications.qh:429
 #, c-format
 msgid "^BG%s^K1 froze themself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:418
+#: qcsrc/common/notifications.qh:430
 #, c-format
 msgid "^BGGodmode saved you %s units of damage, cheater!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:419 qcsrc/common/notifications.qh:598
+#: qcsrc/common/notifications.qh:431 qcsrc/common/notifications.qh:616
 #, c-format
 msgid "^BGYou do not have the ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:420 qcsrc/common/notifications.qh:599
+#: qcsrc/common/notifications.qh:432 qcsrc/common/notifications.qh:617
 #, c-format
 msgid "^BGYou dropped the ^F1%s^BG%s"
 msgstr "^BGVous avez lâché le ^F1%s^BG%s"
 
-#: qcsrc/common/notifications.qh:421 qcsrc/common/notifications.qh:600
+#: qcsrc/common/notifications.qh:433 qcsrc/common/notifications.qh:618
 #, c-format
 msgid "^BGYou got the ^F1%s"
 msgstr "^BGVous avez le ^F1%s"
 
-#: qcsrc/common/notifications.qh:422 qcsrc/common/notifications.qh:601
+#: qcsrc/common/notifications.qh:434 qcsrc/common/notifications.qh:619
 #, c-format
 msgid "^BGYou don't have enough ammo for the ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:423 qcsrc/common/notifications.qh:602
+#: qcsrc/common/notifications.qh:435 qcsrc/common/notifications.qh:620
 #, c-format
 msgid "^F1%s %s^BG is unable to fire, but its ^F1%s^BG can"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:424 qcsrc/common/notifications.qh:603
+#: qcsrc/common/notifications.qh:436 qcsrc/common/notifications.qh:621
 #, c-format
 msgid "^F1%s^BG is ^F4not available^BG on this map"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:425
+#: qcsrc/common/notifications.qh:437
 #, c-format
 msgid "^BG%s^F3 connected%s"
-msgstr ""
+msgstr "^BG%s^F3 s'est connecté%s"
 
-#: qcsrc/common/notifications.qh:426
+#: qcsrc/common/notifications.qh:438
 #, c-format
 msgid "^BG%s^F3 connected and joined the ^TC^TT team"
-msgstr ""
+msgstr "^BG%s^F3 s'est connecté et a rejoint l'équipe ^TC^TT"
 
-#: qcsrc/common/notifications.qh:427
+#: qcsrc/common/notifications.qh:439
 #, c-format
 msgid "^BG%s^F3 is now playing"
-msgstr ""
+msgstr "^BG%s^F3 est désormais en train de jouer"
 
-#: qcsrc/common/notifications.qh:428 qcsrc/common/notifications.qh:606
+#: qcsrc/common/notifications.qh:440 qcsrc/common/notifications.qh:624
 #, c-format
 msgid "^BG%s^BG has dropped the ball!"
 msgstr "^BG%s^BG a lâché la balle !"
 
-#: qcsrc/common/notifications.qh:429 qcsrc/common/notifications.qh:607
+#: qcsrc/common/notifications.qh:441 qcsrc/common/notifications.qh:625
 #, c-format
 msgid "^BG%s^BG has picked up the ball!"
 msgstr "^BG%s^BG a pris la balle !"
 
-#: qcsrc/common/notifications.qh:430
+#: qcsrc/common/notifications.qh:442
 #, c-format
 msgid "^BG%s^BG captured the keys for the ^TC^TT team"
-msgstr ""
+msgstr "^BG%s^BG a capturé les clefs pour l'équipe ^TC^TT"
 
-#: qcsrc/common/notifications.qh:431
+#: qcsrc/common/notifications.qh:443
 #, c-format
 msgid "^BG%s^BG dropped the ^TC^TT Key"
-msgstr ""
+msgstr "^BG%s^BG a lâché la clef ^TC^TT"
 
-#: qcsrc/common/notifications.qh:432
+#: qcsrc/common/notifications.qh:444
 #, c-format
 msgid "^BG%s^BG lost the ^TC^TT Key"
-msgstr ""
+msgstr "^BG%s^BG a perdu la clef ^TC^TT"
 
-#: qcsrc/common/notifications.qh:433
+#: qcsrc/common/notifications.qh:445
 #, c-format
 msgid "^BG%s^BG picked up the ^TC^TT Key"
-msgstr ""
+msgstr "^BG%s^BG a pris la clef ^TC^TT"
 
-#: qcsrc/common/notifications.qh:434
+#: qcsrc/common/notifications.qh:446
 #, c-format
 msgid "^BG%s^F3 forfeited"
-msgstr ""
+msgstr "^BG%s^F3 a déclaré forfait"
 
-#: qcsrc/common/notifications.qh:435
+#: qcsrc/common/notifications.qh:447
 #, c-format
 msgid "^BG%s^F3 has no more lives left"
-msgstr ""
+msgstr "^BG%s^F3 n'a plus aucune vie"
 
-#: qcsrc/common/notifications.qh:436
+#: qcsrc/common/notifications.qh:448
 #, c-format
 msgid "^BG%s^K1 picked up Invisibility"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:437
+#: qcsrc/common/notifications.qh:449
 #, c-format
 msgid "^BG%s^K1 picked up Shield"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:438
+#: qcsrc/common/notifications.qh:450
 #, c-format
 msgid "^BG%s^K1 picked up Speed"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:439
+#: qcsrc/common/notifications.qh:451
 #, c-format
 msgid "^BG%s^K1 picked up Strength"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:440
+#: qcsrc/common/notifications.qh:452
 #, c-format
 msgid "^BG%s^F3 disconnected"
-msgstr ""
+msgstr "^BG%s^F3 s'est déconnecté"
 
-#: qcsrc/common/notifications.qh:441
+#: qcsrc/common/notifications.qh:453
 #, c-format
 msgid "^BG%s^F3 was kicked for idling"
-msgstr ""
+msgstr "^BG%s^F3 a été expulsé pour cause d'inactivité"
 
-#: qcsrc/common/notifications.qh:442
+#: qcsrc/common/notifications.qh:454
 msgid ""
 "^F2You were kicked from the server because you are a spectator and "
 "spectators aren't allowed at the moment."
 msgstr ""
+"^F2Vous avez été expulsé du serveur parce que vous êtes un spectateur et les "
+"spectateurs ne sont pas autorisés pour le moment."
 
-#: qcsrc/common/notifications.qh:443
+#: qcsrc/common/notifications.qh:455
 #, c-format
 msgid "^BG%s^F3 is now spectating"
-msgstr ""
+msgstr "^BG%s^F3 est désormais spectateur"
 
-#: qcsrc/common/notifications.qh:444
+#: qcsrc/common/notifications.qh:456
 #, c-format
 msgid "^BG%s^BG has abandoned the race"
-msgstr ""
+msgstr "^BG%s^BG a abandonné la course"
 
-#: qcsrc/common/notifications.qh:445
+#: qcsrc/common/notifications.qh:457
 #, c-format
 msgid "^BG%s^BG couldn't break their %s%s^BG place record of %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:446
+#: qcsrc/common/notifications.qh:458
 #, c-format
 msgid "^BG%s^BG couldn't break the %s%s^BG place record of %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:447
+#: qcsrc/common/notifications.qh:459
 #, c-format
 msgid "^BG%s^BG has finished the race"
-msgstr ""
+msgstr "^BG%s^BG a terminé la course"
 
-#: qcsrc/common/notifications.qh:448
+#: qcsrc/common/notifications.qh:460
 #, c-format
 msgid "^BG%s^BG broke %s^BG's %s%s^BG place record with %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:449
+#: qcsrc/common/notifications.qh:461
 #, c-format
 msgid "^BG%s^BG improved their %s%s^BG place record with %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:450
+#: qcsrc/common/notifications.qh:462
 #, c-format
 msgid ""
 "^BG%s^BG scored a new record with ^F2%s^BG, but unfortunately lacks a UID "
 "and will be lost."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:451
+#: qcsrc/common/notifications.qh:463
 #, c-format
 msgid "^BG%s^BG set the %s%s^BG place record with %s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:452
+#: qcsrc/common/notifications.qh:464
 msgid "^TC^TT ^BGteam scores!"
-msgstr ""
+msgstr "L'équipe ^TC^TT ^BG marque !"
 
-#: qcsrc/common/notifications.qh:453
+#: qcsrc/common/notifications.qh:465
 #, 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 ""
 
-#: qcsrc/common/notifications.qh:454
+#: qcsrc/common/notifications.qh:466
 #, c-format
 msgid "^BG%s^K1 picked up a Superweapon"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:455
+#: qcsrc/common/notifications.qh:467
 #, c-format
 msgid ""
 "^F4NOTE: ^BGThe server is running ^F1Xonotic %s (beta)^BG, you have "
 "^F2Xonotic %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:456
+#: qcsrc/common/notifications.qh:468
 #, c-format
 msgid ""
 "^F4NOTE: ^BGThe server is running ^F1Xonotic %s^BG, you have ^F2Xonotic %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:457
+#: qcsrc/common/notifications.qh:469
 #, c-format
 msgid ""
 "^F4NOTE: ^F1Xonotic %s^BG is out, and you still have ^F2Xonotic %s^BG - get "
 "the update from ^F3http://www.xonotic.org/^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:458
+#: qcsrc/common/notifications.qh:470
 #, c-format
 msgid "^F3SVQC Build information: ^F4%s"
-msgstr ""
+msgstr "^F3SVQC Informations de version : ^F4%s"
 
-#: qcsrc/common/notifications.qh:459
+#: qcsrc/common/notifications.qh:471
 #, c-format
 msgid ""
 "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Accordeon%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:460
+#: qcsrc/common/notifications.qh:472
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Accordeon%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:461
+#: qcsrc/common/notifications.qh:473
 #, c-format
 msgid "^BG%s%s^K1 felt the strong pull of ^BG%s^K1's Crylink%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:462
+#: qcsrc/common/notifications.qh:474
 #, c-format
 msgid "^BG%s^K1 felt the strong pull of their Crylink%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:463
+#: qcsrc/common/notifications.qh:475
 #, c-format
 msgid "^BG%s%s^K1 was blasted by ^BG%s^K1's Electro bolt%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:464
+#: qcsrc/common/notifications.qh:476
 #, c-format
 msgid "^BG%s%s^K1 felt the electrifying air of ^BG%s^K1's Electro combo%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:465
+#: qcsrc/common/notifications.qh:477
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Electro plasma%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:466
+#: qcsrc/common/notifications.qh:478
 #, c-format
 msgid "^BG%s^K1 played with Electro plasma%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:467
+#: qcsrc/common/notifications.qh:479
 #, c-format
 msgid "^BG%s^K1 could not remember where they put their Electro plasma%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:468
+#: qcsrc/common/notifications.qh:480
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's fireball%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:469
+#: qcsrc/common/notifications.qh:481
 #, c-format
 msgid "^BG%s%s^K1 got burnt by ^BG%s^K1's firemine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:470
+#: qcsrc/common/notifications.qh:482
 #, c-format
 msgid "^BG%s^K1 should have used a smaller gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:471
+#: qcsrc/common/notifications.qh:483
 #, c-format
 msgid "^BG%s^K1 forgot about their firemine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:472
+#: qcsrc/common/notifications.qh:484
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by a burst of ^BG%s^K1's Hagar rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:473
+#: qcsrc/common/notifications.qh:485
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Hagar rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:474
+#: qcsrc/common/notifications.qh:486
 #, c-format
 msgid "^BG%s^K1 played with tiny Hagar rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:475
+#: qcsrc/common/notifications.qh:487
 #, c-format
 msgid "^BG%s%s^K1 was cut down with ^BG%s^K1's HLAC%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:476
+#: qcsrc/common/notifications.qh:488
 #, c-format
 msgid "^BG%s^K1 got a little jumpy with their HLAC%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:477
+#: qcsrc/common/notifications.qh:489
 #, c-format
 msgid "^BG%s%s^K1 was caught in ^BG%s^K1's Hook gravity bomb%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:478
+#: qcsrc/common/notifications.qh:490
 #, c-format
 msgid ""
 "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Klein Bottle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:479
+#: qcsrc/common/notifications.qh:491
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Klein Bottle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:480
+#: qcsrc/common/notifications.qh:492
 #, c-format
 msgid "^BG%s%s^K1 was shot to death by ^BG%s^K1's Laser%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:481
+#: qcsrc/common/notifications.qh:493
 #, c-format
 msgid "^BG%s^K1 shot themself to hell with their Laser%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:482
+#: qcsrc/common/notifications.qh:494
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's mine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:483
+#: qcsrc/common/notifications.qh:495
 #, c-format
 msgid "^BG%s^K1 forgot about their mine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:484
+#: qcsrc/common/notifications.qh:496
 #, c-format
 msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Minstanex%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:485
+#: qcsrc/common/notifications.qh:497
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Mortar grenade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:486
+#: qcsrc/common/notifications.qh:498
 #, c-format
 msgid "^BG%s%s^K1 ate ^BG%s^K1's Mortar grenade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:487
+#: qcsrc/common/notifications.qh:499
 #, c-format
 msgid "^BG%s^K1 didn't see their own Mortar grenade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:488
+#: qcsrc/common/notifications.qh:500
 #, c-format
 msgid "^BG%s^K1 blew themself up with their own Mortar%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:489
+#: qcsrc/common/notifications.qh:501
 #, c-format
 msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Nex%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:490
+#: qcsrc/common/notifications.qh:502
 #, c-format
 msgid "^BG%s%s^K1 was sniped with a Rifle by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:491
+#: qcsrc/common/notifications.qh:503
 #, c-format
 msgid "^BG%s%s^K1 died in ^BG%s^K1's Rifle bullet hail%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:492
+#: qcsrc/common/notifications.qh:504
 #, c-format
 msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle bullet hail%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:493
+#: qcsrc/common/notifications.qh:505
 #, c-format
 msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:494
+#: qcsrc/common/notifications.qh:506
 #, c-format
 msgid "^BG%s%s^K1 ate ^BG%s^K1's rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:495
+#: qcsrc/common/notifications.qh:507
 #, c-format
 msgid "^BG%s%s^K1 got too close ^BG%s^K1's rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:496
+#: qcsrc/common/notifications.qh:508
 #, c-format
 msgid "^BG%s^K1 blew themself up with their Rocketlauncher%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:497
+#: qcsrc/common/notifications.qh:509
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Seeker rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:498
+#: qcsrc/common/notifications.qh:510
 #, c-format
 msgid "^BG%s%s^K1 was tagged by ^BG%s^K1's Seeker%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:499
+#: qcsrc/common/notifications.qh:511
 #, c-format
 msgid "^BG%s^K1 played with tiny Seeker rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:500
+#: qcsrc/common/notifications.qh:512
 #, c-format
 msgid "^BG%s%s^K1 was gunned down by ^BG%s^K1's Shotgun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:501
+#: qcsrc/common/notifications.qh:513
 #, c-format
 msgid "^BG%s%s^K1 slapped ^BG%s^K1 around a bit with a large Shotgun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:502
+#: qcsrc/common/notifications.qh:514
 #, c-format
 msgid "^BG%s^K1 is now thinking with portals%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:503
+#: qcsrc/common/notifications.qh:515
 #, c-format
 msgid "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Tuba%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:504
+#: qcsrc/common/notifications.qh:516
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Tuba%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:505
+#: qcsrc/common/notifications.qh:517
 #, c-format
 msgid "^BG%s%s^K1 was sniped by ^BG%s^K1's Machine Gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:506
+#: qcsrc/common/notifications.qh:518
 #, c-format
 msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:518
+#: qcsrc/common/notifications.qh:536
 msgid "^BGYou are attacking!"
 msgstr "^BGVous êtes en attaque !"
 
-#: qcsrc/common/notifications.qh:519
+#: qcsrc/common/notifications.qh:537
 msgid "^BGYou are defending!"
 msgstr "^BGVous êtes en défense !"
 
-#: qcsrc/common/notifications.qh:520
+#: qcsrc/common/notifications.qh:538
 msgid "^F4Begin!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:521
+#: qcsrc/common/notifications.qh:539
 msgid "^F4Game starts in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:522
+#: qcsrc/common/notifications.qh:540
 msgid "^F4Round starts in ^COUNT"
 msgstr "^F4La manche démarre dans ^COUNT"
 
-#: qcsrc/common/notifications.qh:523
+#: qcsrc/common/notifications.qh:541
 msgid "^F4Round cannot start"
 msgstr "^F4La manche ne peut pas démarrer"
 
-#: qcsrc/common/notifications.qh:526
+#: qcsrc/common/notifications.qh:544
 msgid "^F2Don't camp!"
 msgstr "^F2Ne campez pas !"
 
-#: qcsrc/common/notifications.qh:527
+#: qcsrc/common/notifications.qh:545
 msgid ""
 "^BGYou are now free.\n"
 "^BGFeel free to ^F2try to capture^BG the flag again\n"
 "^BGif you think you will succeed."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:528
+#: qcsrc/common/notifications.qh:546
 msgid ""
 "^BGYou are now ^F1shielded^BG from the flag\n"
 "^BGfor ^F2too many unsuccessful attempts^BG to capture.\n"
 "^BGMake some defensive scores before trying again."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:529
+#: qcsrc/common/notifications.qh:547
 msgid "^BGYou captured the ^TC^TT^BG flag!"
-msgstr ""
+msgstr "^BGVous avez capturé le drapeau ^TC^TT^BG !"
 
-#: qcsrc/common/notifications.qh:530
+#: qcsrc/common/notifications.qh:548
 #, c-format
 msgid "^BGToo many flag throws! Throwing disabled for %s."
-msgstr ""
+msgstr "^BGTrop de lancers de drapeaux ! Lancers désactivés pendant %s."
 
-#: qcsrc/common/notifications.qh:531
+#: qcsrc/common/notifications.qh:549
 #, c-format
 msgid "^BG%s^BG passed the ^TC^TT^BG flag to %s"
 msgstr "^BG%s^BG a passé le drapeau ^TC^TT^BG à %s"
 
-#: qcsrc/common/notifications.qh:532
+#: qcsrc/common/notifications.qh:550
 #, c-format
 msgid "^BGYou received the ^TC^TT^BG flag from %s"
 msgstr "^BGVous avez reçu le drapeau ^TC^TT^BG de %s"
 
-#: qcsrc/common/notifications.qh:533
+#: qcsrc/common/notifications.qh:551
 #, c-format
 msgid "^BG%s^BG requests you to pass the flag%s"
 msgstr "^BG%s^BG vous demande de passer le drapeau%s"
 
-#: qcsrc/common/notifications.qh:534
+#: qcsrc/common/notifications.qh:552
 #, c-format
 msgid "^BGRequesting %s^BG to pass you the flag"
 msgstr "^BGDemande à %s^BG de vous passer le drapeau"
 
-#: qcsrc/common/notifications.qh:535
+#: qcsrc/common/notifications.qh:553
 #, c-format
 msgid "^BGYou passed the ^TC^TT^BG flag to %s"
 msgstr "^BGVous avez passé le drapeau ^TC^TT^BG à %s"
 
-#: qcsrc/common/notifications.qh:536
+#: qcsrc/common/notifications.qh:554
 msgid "^BGYou got the ^TC^TT^BG flag!"
 msgstr "^BGVous avez le drapeau ^TC^TT^BG !"
 
-#: qcsrc/common/notifications.qh:537
+#: qcsrc/common/notifications.qh:555
 #, c-format
 msgid "^BGThe %senemy^BG got your flag! Retrieve it!"
-msgstr ""
+msgstr "^BGL'ennemi %s^BG a votre drapeau ! Récupérez-le !"
 
-#: qcsrc/common/notifications.qh:538
+#: qcsrc/common/notifications.qh:556
 #, c-format
 msgid "^BGThe %senemy (^BG%s%s)^BG got your flag! Retrieve it!"
-msgstr ""
+msgstr "^BGL'ennemi %s (^BG%s%s)^BG a votre drapeau ! Récupérez-le !"
 
-#: qcsrc/common/notifications.qh:539
+#: qcsrc/common/notifications.qh:557
 #, c-format
 msgid "^BGYour %steam mate^BG got the flag! Protect them!"
-msgstr ""
+msgstr "^BGVotre équipier %s^BG a la drapeau ! Protégez-le !"
 
-#: qcsrc/common/notifications.qh:540
+#: qcsrc/common/notifications.qh:558
 #, c-format
 msgid "^BGYour %steam mate (^BG%s%s)^BG got the flag! Protect them!"
 msgstr "^BGVotre %séquipier (^BG%s%s)^BG a le drapeau ! Protégez-le !"
 
-#: qcsrc/common/notifications.qh:541
+#: qcsrc/common/notifications.qh:559
 msgid "^BGYou returned the ^TC^TT^BG flag!"
 msgstr "^BGVous avez retourné le drapeau ^TC^TT^BG !"
 
-#: qcsrc/common/notifications.qh:542
+#: qcsrc/common/notifications.qh:560
 msgid "^BGStalemate! Enemies can now see you on radar!"
-msgstr ""
+msgstr "^BGImpasse ! Les ennemis peuvent maintenant vous voir sur le radar !"
 
-#: qcsrc/common/notifications.qh:543
+#: qcsrc/common/notifications.qh:561
 msgid "^BGStalemate! Flag carriers can now be seen by enemies on radar!"
 msgstr ""
+"^BGImpasse ! Les porteurs de drapeau sont maintenant visibles sur le radar !"
 
-#: qcsrc/common/notifications.qh:544
+#: qcsrc/common/notifications.qh:562
 #, c-format
 msgid "^K3%sYou fragged ^BG%s"
 msgstr "^K3%sVous avez tué ^BG%s"
 
-#: qcsrc/common/notifications.qh:544
+#: qcsrc/common/notifications.qh:562
 #, c-format
 msgid "^K3%sYou scored against ^BG%s"
 msgstr "^K3%sVous avez marqué contre ^BG%s"
 
-#: qcsrc/common/notifications.qh:545
+#: qcsrc/common/notifications.qh:563
 #, c-format
 msgid "^K1%sYou were fragged by ^BG%s"
-msgstr ""
+msgstr "^K1%sVous avez été tué par ^BG%s"
 
-#: qcsrc/common/notifications.qh:545
+#: qcsrc/common/notifications.qh:563
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s"
-msgstr ""
+msgstr "^K1%sVous avez offert un point à ^BG%s"
 
-#: qcsrc/common/notifications.qh:546
+#: qcsrc/common/notifications.qh:564
 #, c-format
 msgid "^K1%sYou were fragged by ^BG%s^BG%s"
 msgstr "^K1%sVous avez été tué par ^BG%s^BG%s"
 
-#: qcsrc/common/notifications.qh:546
+#: qcsrc/common/notifications.qh:564
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^BG%s"
-msgstr ""
+msgstr "^K1%sVous avez offert un point à ^BG%s^BG%s"
 
-#: qcsrc/common/notifications.qh:547
+#: qcsrc/common/notifications.qh:565
 #, c-format
 msgid "^K3%sYou fragged ^BG%s^BG%s"
 msgstr "^K3%sVous avez tué ^BG%s^BG%s"
 
-#: qcsrc/common/notifications.qh:547
+#: qcsrc/common/notifications.qh:565
 #, c-format
 msgid "^K3%sYou scored against ^BG%s^BG%s"
 msgstr "^K3%sVous avez marqué contre ^BG%s^BG%s"
 
-#: qcsrc/common/notifications.qh:548
+#: qcsrc/common/notifications.qh:566
 #, c-format
 msgid "^K1%sYou scored against ^BG%s^K1 while they were typing"
 msgstr ""
+"^K1%sVous avez volé un point à ^BG%s^K1 pendant qu'il tapait au clavier"
 
-#: qcsrc/common/notifications.qh:548
+#: qcsrc/common/notifications.qh:566
 #, c-format
 msgid "^K1%sYou typefragged ^BG%s"
 msgstr "^K1%sVous avez type-tué ^BG%s"
 
-#: qcsrc/common/notifications.qh:549
+#: qcsrc/common/notifications.qh:567
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^K1 while typing!"
 msgstr ""
+"^K1%sVous avez offert un point à ^BG%s^K1 pendant que vous tapiez au "
+"clavier !"
 
-#: qcsrc/common/notifications.qh:549
+#: qcsrc/common/notifications.qh:567
 #, c-format
 msgid "^K1%sYou were typefragged by ^BG%s"
 msgstr "^K1%sVous avez été type-tué par ^BG%s"
 
-#: qcsrc/common/notifications.qh:550
+#: qcsrc/common/notifications.qh:568
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^K1 while typing^BG%s"
 msgstr ""
+"^K1%sVous avez offert un point à  ^BG%s^K1 pendant que vous tapiez au "
+"clavier^BG%s"
 
-#: qcsrc/common/notifications.qh:550
+#: qcsrc/common/notifications.qh:568
 #, c-format
 msgid "^K1%sYou were typefragged by ^BG%s^BG%s"
-msgstr ""
+msgstr "^K1%sVous avez été tué pendant que vous écriviez par ^BG%s^BG%s"
 
-#: qcsrc/common/notifications.qh:551
+#: qcsrc/common/notifications.qh:569
 #, c-format
 msgid "^K1%sYou scored against ^BG%s^K1 while they were typing^BG%s"
 msgstr ""
+"^K1%sVous avez volé un point à ^BG%s^K1 pendant qu'il tapait au clavier^BG%s"
 
-#: qcsrc/common/notifications.qh:551
+#: qcsrc/common/notifications.qh:569
 #, c-format
 msgid "^K1%sYou typefragged ^BG%s^BG%s"
 msgstr "^K1%sVous avez type-tué ^BG%s^BG%s"
 
-#: qcsrc/common/notifications.qh:552
+#: qcsrc/common/notifications.qh:570
 msgid "^BGPress ^F2DROPWEAPON^BG again to toss the nade!"
 msgstr "^BGAppuyez sur ^F2LÂCHER L'ARME^BG à nouveau pour lancer la grenade !"
 
-#: qcsrc/common/notifications.qh:553
+#: qcsrc/common/notifications.qh:571
 #, c-format
 msgid ""
 "^BGYou have been moved into a different team\n"
 "You are now on: %s"
 msgstr ""
+"^BGVous avez été déplacé dans une autre équipe\n"
+"Vous êtes maintenant dans : %s"
 
-#: qcsrc/common/notifications.qh:554
+#: qcsrc/common/notifications.qh:572
 msgid "^K1Don't go against your team mates!"
-msgstr ""
+msgstr "^K1N'agressez pas vos équipiers !"
 
-#: qcsrc/common/notifications.qh:554
+#: qcsrc/common/notifications.qh:572
 msgid "^K1Don't shoot your team mates!"
 msgstr "^K1Ne tirez pas sur vos équipiers !"
 
-#: qcsrc/common/notifications.qh:555
+#: qcsrc/common/notifications.qh:573
 msgid "^K1Die camper!"
-msgstr ""
+msgstr "^K1Meurs, campeur !"
 
-#: qcsrc/common/notifications.qh:555
+#: qcsrc/common/notifications.qh:573
 msgid "^K1Reconsider your tactics, camper!"
-msgstr ""
+msgstr "^K1Change de tactique, campeur !"
 
-#: qcsrc/common/notifications.qh:556
+#: qcsrc/common/notifications.qh:574
 msgid "^K1You unfairly eliminated yourself!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:557
+#: qcsrc/common/notifications.qh:575
 #, c-format
 msgid "^K1You were %s"
-msgstr ""
+msgstr "^K1Vous avez été %s"
 
-#: qcsrc/common/notifications.qh:558
+#: qcsrc/common/notifications.qh:576
 msgid "^K1You couldn't catch your breath!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:559
+#: qcsrc/common/notifications.qh:577
 msgid "^K1You hit the ground with a crunch!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:560
+#: qcsrc/common/notifications.qh:578
 msgid "^K1You felt a little too hot!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:560
+#: qcsrc/common/notifications.qh:578
 msgid "^K1You got a little bit too crispy!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:561
+#: qcsrc/common/notifications.qh:579
 msgid "^K1You killed your own dumb self!"
 msgstr "^K1Vous vous êtes suicidé !"
 
-#: qcsrc/common/notifications.qh:561
+#: qcsrc/common/notifications.qh:579
 msgid "^K1You need to be more careful!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:562
+#: qcsrc/common/notifications.qh:580
 msgid "^K1You couldn't stand the heat!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:563
+#: qcsrc/common/notifications.qh:581
 msgid "^K1Tastes like chicken!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:563
+#: qcsrc/common/notifications.qh:581
 msgid "^K1You forgot to put the pin back in!"
 msgstr "^K1Vous avez oublié de remettre la goupille !"
 
-#: qcsrc/common/notifications.qh:564
+#: qcsrc/common/notifications.qh:582
 msgid "^K1You are respawning for running out of ammo..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:564
+#: qcsrc/common/notifications.qh:582
 msgid "^K1You were killed for running out of ammo..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:565
+#: qcsrc/common/notifications.qh:583
 msgid "^K1You grew too old without taking your medicine"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:565
+#: qcsrc/common/notifications.qh:583
 msgid "^K1You need to preserve your health"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:566
+#: qcsrc/common/notifications.qh:584
 msgid "^K1You became a shooting star!"
 msgstr "^K1Vous êtes devenu une étoile filante !"
 
-#: qcsrc/common/notifications.qh:567
+#: qcsrc/common/notifications.qh:585
 msgid "^K1You melted away in slime!"
 msgstr "^K1Vous avez fondu dans de l'acide !"
 
-#: qcsrc/common/notifications.qh:568
+#: qcsrc/common/notifications.qh:586
 msgid "^K1You committed suicide!"
 msgstr "^K1Vous vous êtes suicidé !"
 
-#: qcsrc/common/notifications.qh:568
+#: qcsrc/common/notifications.qh:586
 msgid "^K1You ended it all!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:569
+#: qcsrc/common/notifications.qh:587
 msgid "^K1You got stuck in a swamp!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:570
+#: qcsrc/common/notifications.qh:588
 #, c-format
 msgid "^BGYou are now on: %s"
 msgstr "^BGVous êtes maintenant dans : %s"
 
-#: qcsrc/common/notifications.qh:571
+#: qcsrc/common/notifications.qh:589
 msgid "^K1You died in an accident!"
 msgstr "^K1Vous êtes mort dans un accident !"
 
-#: qcsrc/common/notifications.qh:572
+#: qcsrc/common/notifications.qh:590
 msgid "^K1You had an unfortunate run in with a turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:572
+#: qcsrc/common/notifications.qh:590
 msgid "^K1You were fragged by a turret!"
 msgstr "^K1Vous avez été tué par une tourelle !"
 
-#: qcsrc/common/notifications.qh:573
+#: qcsrc/common/notifications.qh:591
 msgid "^K1You had an unfortunate run in with an eWheel turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:573
+#: qcsrc/common/notifications.qh:591
 msgid "^K1You were fragged by an eWheel turret!"
 msgstr "^K1Vous avez été tué par une tourelle eWheel !"
 
-#: qcsrc/common/notifications.qh:574
+#: qcsrc/common/notifications.qh:592
 msgid "^K1You had an unfortunate run in with a Walker turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:574
+#: qcsrc/common/notifications.qh:592
 msgid "^K1You were fragged by a Walker turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:575
+#: qcsrc/common/notifications.qh:593
 msgid "^K1You got caught in the blast of a Bumblebee explosion!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:576
+#: qcsrc/common/notifications.qh:594
 msgid "^K1You were crushed by a vehicle!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:577
+#: qcsrc/common/notifications.qh:595
 msgid "^K1You were caught in a Raptor cluster bomb!"
 msgstr "^K1Vous avez été pris dans un bombardement de Raptor !"
 
-#: qcsrc/common/notifications.qh:578
+#: qcsrc/common/notifications.qh:596
 msgid "^K1You got caught in the blast of a Raptor explosion!"
 msgstr "^K1Vous avez été pris dans l'explosion d'un Raptor !"
 
-#: qcsrc/common/notifications.qh:579
+#: qcsrc/common/notifications.qh:597
 msgid "^K1You got caught in the blast of a Spiderbot explosion!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:580
+#: qcsrc/common/notifications.qh:598
 msgid "^K1You were blasted to bits by a Spiderbot rocket!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:581
+#: qcsrc/common/notifications.qh:599
 msgid "^K1You got caught in the blast of a Racer explosion!"
 msgstr "^K1Vous avez été pris dans l'explosion d'un Racer !"
 
-#: qcsrc/common/notifications.qh:582
+#: qcsrc/common/notifications.qh:600
 msgid "^K1You couldn't find shelter from a Racer rocket!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:583
+#: qcsrc/common/notifications.qh:601
 msgid "^K1Watch your step!"
 msgstr "^K1Attention à la marche !"
 
-#: qcsrc/common/notifications.qh:584
+#: qcsrc/common/notifications.qh:602
 #, c-format
 msgid "^K1Moron! You fragged ^BG%s^K1, a team mate!"
 msgstr "^K1Idiot ! Vous avez tué ^BG%s^K1, un équipier !"
 
-#: qcsrc/common/notifications.qh:584
+#: qcsrc/common/notifications.qh:602
 #, c-format
 msgid "^K1Moron! You went against ^BG%s^K1, a team mate!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:585
+#: qcsrc/common/notifications.qh:603
 #, c-format
 msgid "^K1You were fragged by ^BG%s^K1, a team mate"
 msgstr "^K1Vous avez été tué par ^BG%s^K1, un équipier"
 
-#: qcsrc/common/notifications.qh:585
+#: qcsrc/common/notifications.qh:603
 #, c-format
 msgid "^K1You were scored against by ^BG%s^K1, a team mate"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:586
+#: qcsrc/common/notifications.qh:604
 msgid ""
 "^K1Stop idling!\n"
 "^BGDisconnecting in ^COUNT..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:587
+#: qcsrc/common/notifications.qh:605
 msgid "^F2You picked up some extra lives"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:588
+#: qcsrc/common/notifications.qh:606
 #, c-format
 msgid "^K3You froze ^BG%s"
 msgstr "^K3Vous avez gelé ^BG%s"
 
-#: qcsrc/common/notifications.qh:589
+#: qcsrc/common/notifications.qh:607
 #, c-format
 msgid "^K1You were frozen by ^BG%s"
 msgstr "^K1Vous avez été gelé par ^BG%s"
 
-#: qcsrc/common/notifications.qh:590
+#: qcsrc/common/notifications.qh:608
 #, c-format
 msgid "^K3You revived ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:591
+#: qcsrc/common/notifications.qh:609
 msgid "^K3You revived yourself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:592
+#: qcsrc/common/notifications.qh:610
 #, c-format
 msgid "^K3You were revived by ^BG%s"
 msgstr "^K3Vous avez été ressuscité par ^BG%s"
 
-#: qcsrc/common/notifications.qh:593
+#: qcsrc/common/notifications.qh:611
 #, c-format
 msgid "^K3You were automatically revived after %s second(s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:596
+#: qcsrc/common/notifications.qh:614
 msgid "^K1You froze yourself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:597
+#: qcsrc/common/notifications.qh:615
 msgid "^K1Round already started, you spawn as frozen"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:604
+#: qcsrc/common/notifications.qh:622
 msgid ""
 "^K1No spawnpoints available!\n"
 "Hope your team can fix it..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:605
+#: qcsrc/common/notifications.qh:623
 msgid ""
 "^K1You may not join the game at this time.\n"
 "The player limit reached maximum capacity."
@@ -2738,317 +2759,317 @@ msgstr ""
 "^K1Vous ne pouvez pas rejoindre le serveur actuellement.\n"
 "La limite de joueurs a atteint sa capacité maximale."
 
-#: qcsrc/common/notifications.qh:608
+#: qcsrc/common/notifications.qh:626
 msgid "^BGKilling people while you don't have the ball gives no points!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:609
+#: qcsrc/common/notifications.qh:627
 msgid ""
 "^BGAll keys are in your team's hands!\n"
 "Help the key carriers to meet!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:610
+#: qcsrc/common/notifications.qh:628
 msgid ""
 "^BGAll keys are in ^TC^TT team^BG's hands!\n"
 "Interfere ^F4NOW^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:611
+#: qcsrc/common/notifications.qh:629
 msgid ""
 "^BGAll keys are in your team's hands!\n"
 "Meet the other key carriers ^F4NOW^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:612
+#: qcsrc/common/notifications.qh:630
 msgid "^F4Round will start in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:613
+#: qcsrc/common/notifications.qh:631
 msgid "^BGScanning frequency range..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:614
+#: qcsrc/common/notifications.qh:632
 msgid "^BGYou are starting with the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:615 qcsrc/common/notifications.qh:616
+#: qcsrc/common/notifications.qh:633 qcsrc/common/notifications.qh:634
 #, c-format
 msgid ""
 "^BGWaiting for players to join...\n"
 "Need active players for: %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:617
+#: qcsrc/common/notifications.qh:635
 #, c-format
 msgid "^BGWaiting for %s player(s) to join..."
 msgstr "^BGEn attente de %s joueur(s)..."
 
-#: qcsrc/common/notifications.qh:618
+#: qcsrc/common/notifications.qh:636
 msgid "^F4^COUNT^BG left to find some ammo!"
 msgstr "^F4^COUNT^BG restantes pour trouver des munitions !"
 
-#: qcsrc/common/notifications.qh:619
+#: qcsrc/common/notifications.qh:637
 msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:619
+#: qcsrc/common/notifications.qh:637
 msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:620
+#: qcsrc/common/notifications.qh:638
 #, c-format
 msgid "^F2Extra lives remaining: ^K1%s"
 msgstr "^F2Vies supplémentaires restantes : ^K1%s"
 
-#: qcsrc/common/notifications.qh:621
+#: qcsrc/common/notifications.qh:639
 msgid "^BGSecondary fire inflicts no damage!"
-msgstr ""
+msgstr "^BGLe tir secondaire n'inflige aucun dégât !"
 
-#: qcsrc/common/notifications.qh:622
+#: qcsrc/common/notifications.qh:640
 #, c-format
 msgid "^BG%s"
 msgstr "^BG%s"
 
-#: qcsrc/common/notifications.qh:623
+#: qcsrc/common/notifications.qh:641
 #, c-format
 msgid ""
 "^F2^COUNT^BG until weapon change...\n"
 "Next weapon: ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:624
+#: qcsrc/common/notifications.qh:642
 #, c-format
 msgid "^F2Active weapon: ^F1%s"
 msgstr "^F2Arme active : ^F1%s"
 
-#: qcsrc/common/notifications.qh:625
+#: qcsrc/common/notifications.qh:643
 msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:626
+#: qcsrc/common/notifications.qh:644
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "Keep fragging until we have a winner!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:626
+#: qcsrc/common/notifications.qh:644
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "Keep scoring until we have a winner!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:627
+#: qcsrc/common/notifications.qh:645
 #, c-format
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "^BGAdded ^F4%s^BG to the game!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:628
+#: qcsrc/common/notifications.qh:646
 msgid "^F2Invisibility has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:629
+#: qcsrc/common/notifications.qh:647
 msgid "^F2Shield has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:630
+#: qcsrc/common/notifications.qh:648
 msgid "^F2Speed has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:631
+#: qcsrc/common/notifications.qh:649
 msgid "^F2Strength has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:632
+#: qcsrc/common/notifications.qh:650
 msgid "^F2You are invisible"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:633
+#: qcsrc/common/notifications.qh:651
 msgid "^F2Shield surrounds you"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:634
+#: qcsrc/common/notifications.qh:652
 msgid "^F2You are on speed"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:635
+#: qcsrc/common/notifications.qh:653
 msgid "^F2Strength infuses your weapons with devastating power"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:636
+#: qcsrc/common/notifications.qh:654
 msgid "^F2The race is over, finish your lap!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:637
+#: qcsrc/common/notifications.qh:655
 msgid "^F2Superweapons have broken down"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:638
+#: qcsrc/common/notifications.qh:656
 msgid "^F2Superweapons have been lost"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:639
+#: qcsrc/common/notifications.qh:657
 msgid "^F2You now have a superweapon"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:640
+#: qcsrc/common/notifications.qh:658
 msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:641
+#: qcsrc/common/notifications.qh:659
 msgid "^K1Changing team in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:642
+#: qcsrc/common/notifications.qh:660
 msgid "^K1Spectating in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:643
+#: qcsrc/common/notifications.qh:661
 msgid "^K1Suicide in ^COUNT"
 msgstr "^K1Suicide dans ^COUNT"
 
-#: qcsrc/common/notifications.qh:644
+#: qcsrc/common/notifications.qh:662
 msgid "^F4Timeout begins in ^COUNT"
 msgstr "^F4Le temps mort commence dans ^COUNT"
 
-#: qcsrc/common/notifications.qh:645
+#: qcsrc/common/notifications.qh:663
 msgid "^F4Timeout ends in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:907 qcsrc/common/notifications.qh:908
+#: qcsrc/common/notifications.qh:937 qcsrc/common/notifications.qh:938
 #, c-format
 msgid " (near %s)"
 msgstr " (près de %s)"
 
-#: qcsrc/common/notifications.qh:915 qcsrc/common/notifications.qh:916
+#: qcsrc/common/notifications.qh:945 qcsrc/common/notifications.qh:946
 msgid "primary"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:915 qcsrc/common/notifications.qh:916
+#: qcsrc/common/notifications.qh:945 qcsrc/common/notifications.qh:946
 msgid "secondary"
 msgstr "secondaire"
 
-#: qcsrc/common/notifications.qh:926
+#: qcsrc/common/notifications.qh:956
 #, c-format
 msgid " ^F1(Press %s)"
 msgstr " ^F1(Appuyez sur %s)"
 
-#: qcsrc/common/notifications.qh:935
+#: qcsrc/common/notifications.qh:965
 #, c-format
 msgid " with %s"
 msgstr " avec %s"
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 #, c-format
 msgid "%s^K1 made a TRIPLE FRAG! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 #, c-format
 msgid "%s^K1 made a TRIPLE SCORE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 msgid "TRIPLE FRAG! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 #, c-format
 msgid "%s^K1 made FIVE SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 #, c-format
 msgid "%s^K1 unlocked RAGE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 msgid "RAGE! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 #, c-format
 msgid "%s^K1 made TEN SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 #, c-format
 msgid "%s^K1 started a MASSACRE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 msgid "MASSACRE! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 #, c-format
 msgid "%s^K1 executed MAYHEM! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 #, c-format
 msgid "%s^K1 made FIFTEEN SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 msgid "MAYHEM! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 #, c-format
 msgid "%s^K1 is a BERSERKER! %s^BG"
 msgstr "%s^K1 est un FOU FURIEUX ! %s^BG"
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 #, c-format
 msgid "%s^K1 made TWENTY SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 msgid "BERSERKER! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 #, c-format
 msgid "%s^K1 inflicts CARNAGE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 #, c-format
 msgid "%s^K1 made TWENTY FIVE SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 msgid "CARNAGE! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 #, c-format
 msgid "%s^K1 made THIRTY SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 #, c-format
 msgid "%s^K1 unleashes ARMAGEDDON! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 msgid "ARMAGEDDON! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:956
+#: qcsrc/common/notifications.qh:986
 #, c-format
 msgid "%s(^F1Bot^BG)"
 msgstr "%s(^F1Bot^BG)"
 
-#: qcsrc/common/notifications.qh:958
+#: qcsrc/common/notifications.qh:988
 #, c-format
 msgid "%s(Ping ^F1%d^BG)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:964
+#: qcsrc/common/notifications.qh:994
 #, c-format
 msgid ""
 "\n"
@@ -3057,7 +3078,7 @@ msgstr ""
 "\n"
 "(Santé ^1%d^BG / Armure ^2%d^BG)%s"
 
-#: qcsrc/common/notifications.qh:966
+#: qcsrc/common/notifications.qh:996
 #, c-format
 msgid ""
 "\n"
@@ -3066,68 +3087,68 @@ msgstr ""
 "\n"
 "(^F4Mort^BG)%s"
 
-#: qcsrc/common/notifications.qh:1003 qcsrc/common/notifications.qh:1016
+#: qcsrc/common/notifications.qh:1033 qcsrc/common/notifications.qh:1046
 #, c-format
 msgid "%d score spree! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1015
+#: qcsrc/common/notifications.qh:1045
 #, c-format
 msgid "%d frag spree! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1028
+#: qcsrc/common/notifications.qh:1058
 msgid "First blood! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1028
+#: qcsrc/common/notifications.qh:1058
 msgid "First score! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1032
+#: qcsrc/common/notifications.qh:1062
 msgid "First casualty! "
 msgstr "Première victime ! "
 
-#: qcsrc/common/notifications.qh:1032
+#: qcsrc/common/notifications.qh:1062
 msgid "First victim! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1073
+#: qcsrc/common/notifications.qh:1103
 #, c-format
 msgid "%s^K1 has %d frags in a row! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1074
+#: qcsrc/common/notifications.qh:1104
 #, c-format
 msgid "%s^K1 made %d scores in a row! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1092
+#: qcsrc/common/notifications.qh:1122
 #, c-format
 msgid "%s^K1 drew first blood! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1093
+#: qcsrc/common/notifications.qh:1123
 #, c-format
 msgid "%s^K1 got the first score! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1109
+#: qcsrc/common/notifications.qh:1139
 #, c-format
 msgid ", ending their %d frag spree"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1110
+#: qcsrc/common/notifications.qh:1140
 #, c-format
 msgid ", ending their %d score spree"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1124
+#: qcsrc/common/notifications.qh:1154
 #, c-format
 msgid ", losing their %d frag spree"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1125
+#: qcsrc/common/notifications.qh:1155
 #, c-format
 msgid ", losing their %d score spree"
 msgstr ""
@@ -3195,11 +3216,11 @@ msgstr "Objet %d"
 msgid "%d (%s)"
 msgstr "%d (%s)"
 
-#: qcsrc/menu/item/textslider.c:29 qcsrc/menu/item/textslider.c:31
+#: qcsrc/menu/item/textslider.c:31 qcsrc/menu/item/textslider.c:33
 msgid "custom"
 msgstr "personnalisé"
 
-#: qcsrc/menu/menu.qc:56
+#: qcsrc/menu/menu.qc:59
 #, c-format
 msgid "^4MQC Build information: ^1%s\n"
 msgstr "^4MQC Informations de version : ^1%s\n"
@@ -3246,7 +3267,7 @@ msgstr "Crédits"
 #: 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_sandboxtools.c:89
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:90
 #: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:77
 #: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:21
 msgid "OK"
@@ -3303,33 +3324,33 @@ msgstr "Enregistrer les paramètres"
 msgid "Ammo Panel"
 msgstr "Tableau des Munitions"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:23
 msgid "Ammunition display:"
 msgstr "Affichage des munitions :"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:26
 msgid "Show only current ammo type"
 msgstr "Montrer uniquement le type de munition actuel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
 msgid "Align icon:"
 msgstr "Aligner l'icône :"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:36
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:28
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:40
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:28
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:40
-msgid "Left"
-msgstr "Gauche"
-
 #: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:30
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:38
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:29
 #: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:41
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:29
 #: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:41
+msgid "Left"
+msgstr "Gauche"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:42
 msgid "Right"
 msgstr "Droite"
 
@@ -3337,28 +3358,28 @@ msgstr "Droite"
 msgid "Centerprint"
 msgstr "Écriture du centre"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:24
 msgid "Message duration:"
 msgstr "Durée du message :"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:27
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:28
 msgid "Fade time:"
 msgstr "Durée de fondu :"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:32
 msgid "Flip messages order"
 msgstr "Inverser l'ordre des messages"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:34
 msgid "Text alignment:"
 msgstr "Alignement du texte :"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:38
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:51
 msgid "Center"
 msgstr "Centre"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:41
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:42
 msgid "Font scale:"
 msgstr "Échelle de la police :"
 
@@ -3366,19 +3387,19 @@ msgstr "Échelle de la police :"
 msgid "Chat Panel"
 msgstr "Tableau de discussion"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:23
 msgid "Chat entries:"
 msgstr "Entrées discussion :"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:26
 msgid "Chat size:"
 msgstr "Taille de la discussion :"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:30
 msgid "Chat lifetime:"
 msgstr "Durée discussion :"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:34
 msgid "Chat beep sound"
 msgstr "Notification de discussion"
 
@@ -3386,11 +3407,11 @@ msgstr "Notification de discussion"
 msgid "Engine Info Panel"
 msgstr "Panneau d'information de version"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:23
 msgid "Engine info:"
 msgstr "Information de version :"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:26
 msgid "Use an averaging algorithm for fps"
 msgstr "Utiliser un algorithme de moyenne pour les FPS"
 
@@ -3398,36 +3419,36 @@ msgstr "Utiliser un algorithme de moyenne pour les FPS"
 msgid "Health/Armor Panel"
 msgstr "Panneau de Santé/Armure"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:22
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:23
 msgid "Enable status bar"
 msgstr "Activer la barre de statut"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:24
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:25
 msgid "Status bar alignment:"
 msgstr "Alignement de la barre de statut :"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:32
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:42
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:32
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:43
 msgid "Inward"
 msgstr "Intérieur"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:34
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:43
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:34
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:44
 msgid "Outward"
 msgstr "Extérieur"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:37
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:38
 msgid "Icon alignment:"
 msgstr "Alignement des icônes :"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:46
 msgid "Flip health and armor positions"
 msgstr "Inverser les positions de la santé et de l'armure"
 
@@ -3435,11 +3456,11 @@ msgstr "Inverser les positions de la santé et de l'armure"
 msgid "Info Messages Panel"
 msgstr "Panneau d'Informations"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:23
 msgid "Info messages:"
 msgstr "Messages d'information :"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:26
 msgid "Flip align"
 msgstr "Inverser l'ordre"
 
@@ -3451,23 +3472,23 @@ msgstr "Panneau d'Icônes du Mode"
 msgid "Notification Panel"
 msgstr "Tableau de notification"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:23
 msgid "Notifications:"
 msgstr "Notifications :"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:26
 msgid "Also print notifications to the console"
 msgstr "Afficher aussi les notifications dans la console"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:29
 msgid "Flip notify order"
 msgstr "Inverser l'ordre de notification"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:32
 msgid "Entry lifetime:"
 msgstr "Durée d'affichage de l'entrée :"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:36
 msgid "Entry fadetime:"
 msgstr "Délai d'effacement de l'entrée :"
 
@@ -3475,96 +3496,96 @@ msgstr "Délai d'effacement de l'entrée :"
 msgid "Physics Panel"
 msgstr "Panneau d'effets Physiques"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:22
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:22
 msgid "Panel disabled"
 msgstr "Panneau désactivé"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
 msgid "Panel enabled"
 msgstr "Panneau activé"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
 msgid "Panel enabled even observing"
 msgstr "Panneau activé en spectateur"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:26
 msgid "Panel enabled only in Race/CTS"
 msgstr "Panneau activé en Race/CTS"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:32
 msgid "Status bar"
 msgstr "Barre d'état"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:49
 msgid "Left align"
 msgstr "Aligner à gauche"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:53
 msgid "Right align"
 msgstr "À droite"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
 msgid "Inward align"
 msgstr "Aligner vers l'intérieur"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:37
 msgid "Outward align"
 msgstr "Aligner vers l'extérieur"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:41
 msgid "Flip speed/acceleration positions"
 msgstr "Inverser la position de la vitesse/de l'accélération"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
 #: qcsrc/menu/xonotic/dialog_settings_misc.c:29
 msgid "Speed:"
 msgstr "Vitesse :"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:46
 msgid "Include vertical speed"
 msgstr "Inclure la vitesse verticale"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:56
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:57
 msgid "Speed unit:"
 msgstr "Unité de vitesse :"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:58
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
 msgid "qu/s"
 msgstr "qu/s"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
 msgid "m/s"
 msgstr "m/s"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
 msgid "km/h"
 msgstr "km/h"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
 msgid "mph"
 msgstr "mph"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:63
 msgid "knots"
 msgstr "noeuds"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:64
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:65
 msgid "Show"
 msgstr "Afficher"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:67
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:68
 msgid "Top speed"
 msgstr "Vitesse maximale"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:73
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
 msgid "Acceleration:"
 msgstr "Accélération :"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:75
 msgid "Include vertical acceleration"
 msgstr "Inclure l'accélération verticale"
 
@@ -3572,7 +3593,7 @@ msgstr "Inclure l'accélération verticale"
 msgid "Powerups Panel"
 msgstr "Panneau des Pouvoirs"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:46
 msgid "Flip strength and shield positions"
 msgstr "Inverser la position de la force et du bouclier"
 
@@ -3580,16 +3601,16 @@ msgstr "Inverser la position de la force et du bouclier"
 msgid "Pressed Keys Panel"
 msgstr "Panneau Touches Pressées"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
 msgid "Panel enabled when spectating"
 msgstr "Afficher le panneau en mode spectateur"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:24
 msgid "Panel always enabled"
 msgstr "Toujours afficher le panneau"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:31
 msgid "Forced aspect:"
 msgstr "Aspect forcé :"
 
@@ -3601,68 +3622,68 @@ msgstr "Panneau de Chronomètre en mode Race"
 msgid "Radar Panel"
 msgstr "Panneau de Radar"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
 msgid "Panel enabled in teamgames"
 msgstr "Panneau activé dans les jeux en équipe"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:30
 msgid "Radar:"
 msgstr "Radar :"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:32
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:43
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:82
+#: 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
 msgid "Alpha:"
 msgstr "Alpha :"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:37
 msgid "Rotation:"
 msgstr "Rotation :"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:39
 msgid "Forward"
 msgstr "Direction du joueur"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:40
 msgid "West"
 msgstr "Ouest"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:41
 msgid "South"
 msgstr "Sud"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:41
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:42
 msgid "East"
 msgstr "Est"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:43
 msgid "North"
 msgstr "Nord"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:46
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:47
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:63
 msgid "Scale:"
 msgstr "Échelle :"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:50
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:51
 msgid "Zoom mode:"
 msgstr "Mode de zoom :"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:52
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:53
 msgid "Zoomed in"
 msgstr "Zoomé"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:53
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:54
 msgid "Zoomed out"
 msgstr "Dézoomé"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:54
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:55
 msgid "Always zoomed"
 msgstr "Toujours zoomé"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:55
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:56
 msgid "Never zoomed"
 msgstr "Jamais zoomé"
 
@@ -3670,23 +3691,23 @@ msgstr "Jamais zoomé"
 msgid "Score Panel"
 msgstr "Tableau des Scores"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:23
 msgid "Score:"
 msgstr "Score :"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
 msgid "Rankings:"
 msgstr "Classements :"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
 msgid "Off"
 msgstr "Off"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
 msgid "And me"
 msgstr "Et moi"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:29
 msgid "Pure"
 msgstr "Pur"
 
@@ -3694,11 +3715,11 @@ msgstr "Pur"
 msgid "Timer Panel"
 msgstr "Panneau de Chronomètre"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:23
 msgid "Timer:"
 msgstr "Chronomètre :"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:26
 msgid "Show elapsed time"
 msgstr "Afficher le temps écoulé"
 
@@ -3706,7 +3727,7 @@ msgstr "Afficher le temps écoulé"
 msgid "Vote Panel"
 msgstr "Panneau de vote"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:23
 msgid "Alpha after voting:"
 msgstr "Opacité après vote :"
 
@@ -3714,76 +3735,76 @@ msgstr "Opacité après vote :"
 msgid "Weapons Panel"
 msgstr "Panneau des armes"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:25
 msgid "Fade out after:"
 msgstr "S'effacer après :"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:26
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:27
 msgid "Never"
 msgstr "Jamais"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:29
 #, c-format
 msgid "%ds"
 msgstr "%ds"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:32
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:33
 msgid "Fade effect:"
 msgstr "Effet de fondu :"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
 msgid "EF^None"
 msgstr "Aucun"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:37
 msgid "Alpha"
 msgstr "Opacité"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
 msgid "Slide"
 msgstr "Glisse"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:39
 msgid "EF^Both"
 msgstr "Les deux"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:43
 msgid "Weapon icons:"
 msgstr "Icônes d'armes :"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46
 msgid "Show only owned weapons"
 msgstr "Montrer uniquement les armes disponibles"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:48
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
 msgid "Show weapon ID as:"
 msgstr "Identifier les armes :"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
 msgid "SHOWAS^None"
 msgstr "Aucun"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
 msgid "Number"
 msgstr "Nombre"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:52
 msgid "Bind"
 msgstr "Touche"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:54
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
 msgid "Show Accuracy"
 msgstr "Afficher la précision"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:56
 msgid "Show Ammo"
 msgstr "Afficher les munitions"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:58
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:59
 msgid "Ammo bar color:"
 msgstr "Couleur de la barre des munitions :"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:64
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:65
 msgid "Ammo bar alpha:"
 msgstr "Opacité de la barre des munitions :"
 
@@ -3791,85 +3812,85 @@ msgstr "Opacité de la barre des munitions :"
 msgid "Panel HUD Setup"
 msgstr "Configuration de l'Interface"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:21
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:22
 msgid "Panel background defaults:"
 msgstr "Fond du panneau par défaut :"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:23 qcsrc/menu/xonotic/util.qc:683
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:24 qcsrc/menu/xonotic/util.qc:683
 msgid "Background:"
 msgstr "Arrière-plan :"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:25
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:37
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:52
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:686
+#: 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
 msgid "Disable"
 msgstr "Désactiver"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:30
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:691
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:31
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:78 qcsrc/menu/xonotic/util.qc:691
 msgid "Color:"
 msgstr "Couleur :"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:699
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:36 qcsrc/menu/xonotic/util.qc:699
 msgid "Border size:"
 msgstr "Taille de la bordure :"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:50
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:89
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:51
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:90
 msgid "Team color:"
 msgstr "Couleur de l'équipe :"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:725
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:59 qcsrc/menu/xonotic/util.qc:725
 msgid "Test team color in configure mode"
 msgstr "Afficher la couleur d'équipe en mode configuration"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:728
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:62 qcsrc/menu/xonotic/util.qc:728
 msgid "Padding:"
 msgstr "Remplissage :"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:68
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:69
 msgid "HUD Dock:"
 msgstr "Contours interface :"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:70
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71
 msgid "DOCK^Disabled"
 msgstr "Désactivé"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72
 msgid "DOCK^Small"
 msgstr "Petit"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73
 msgid "DOCK^Medium"
 msgstr "Moyen"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:74
 msgid "DOCK^Large"
 msgstr "Large"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:96
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:97
 msgid "Grid settings:"
 msgstr "Configuration de la grille :"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:99
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:100
 msgid "Snap panels to grid"
 msgstr "Aligner les panneaux sur la grille"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:102
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:103
 msgid "Grid size:"
 msgstr "Taille de la grille :"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:103
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:104
 msgid "X:"
 msgstr "X :"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:109
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:110
 msgid "Y:"
 msgstr "Y :"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:117
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:118
 msgid "Exit setup"
 msgstr "Quitter la configuration"
 
@@ -4455,7 +4476,7 @@ msgid "Key:"
 msgstr "Clef :"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:61
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:19
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:20
 msgid "Model:"
 msgstr "Modèle :"
 
@@ -4831,127 +4852,127 @@ msgstr "Non"
 msgid "Sandbox Tools"
 msgstr "Outils Sandbox"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:24
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:25
 msgid "Spawn"
 msgstr "Spawn"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:25
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:26
 msgid "Remove *"
 msgstr "Supprimer *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:27
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:28
 msgid "Copy *"
 msgstr "Copier *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:28
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:29
 msgid "Paste"
 msgstr "Coller"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:30
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:31
 msgid "Bone:"
 msgstr "Os :"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:35
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:36
 msgid "Set * as child"
 msgstr "Définir * comme enfant"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:36
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:37
 msgid "Attach to *"
 msgstr "Attacher à *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:38
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:39
 msgid "Detach from *"
 msgstr "Détacher depuis *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:41
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:42
 msgid "Visual object properties for *:"
 msgstr "Propriétés visuelles de l'objet * :"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:43
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:44
 msgid "Set skin:"
 msgstr "Texture :"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:45
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:46
 msgid "Set alpha:"
 msgstr "Transparence :"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:48
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:49
 msgid "Set color main:"
 msgstr "Couleur principale :"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:50
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:51
 msgid "Set color glow:"
 msgstr "Couleur de néon :"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:54
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:55
 msgid "Set frame:"
 msgstr "Trame :"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:58
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:59
 msgid "Physical object properties for *:"
 msgstr "Propriétés physiques de l'objet * :"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:60
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:61
 msgid "Set material:"
 msgstr "Matériau :"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:66
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:67
 msgid "Set solidity:"
 msgstr "Solidité :"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:67
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:68
 msgid "Non-solid"
 msgstr "Non-solide"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:68
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:69
 msgid "Solid"
 msgstr "Solide"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:69
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:70
 msgid "Set physics:"
 msgstr "Physiques :"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:70
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:71
 msgid "Static"
 msgstr "Statique"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:71
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:72
 msgid "Movable"
 msgstr "Déplaçable"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:72
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:73
 msgid "Physical"
 msgstr "Physique"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:74
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:75
 msgid "Set scale:"
 msgstr "Échelle :"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:76
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:77
 msgid "Set force:"
 msgstr "Force :"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:80
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:81
 msgid "Claim *"
 msgstr "Prendre *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:82
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:83
 msgid "* object info"
 msgstr "information de l'objet *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:83
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:84
 msgid "* mesh info"
 msgstr "information du maillage *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:84
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:85
 msgid "* attachment info"
 msgstr "paramètres de l'attaché *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:85
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:86
 msgid "Show help"
 msgstr "Afficher l'aide"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:86
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:87
 msgid "* is the object you are facing"
 msgstr "* est l'objet que vous regardez"
 
@@ -5948,27 +5969,27 @@ msgstr "Vainqueur"
 msgid "Team Selection"
 msgstr "Sélection d'Équipe"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:41
+#: qcsrc/menu/xonotic/dialog_teamselect.c:42
 msgid "join 'best' team (auto-select)"
 msgstr "rejoindre la ’meilleure’ équipe (auto-sélection)"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:45
+#: qcsrc/menu/xonotic/dialog_teamselect.c:46
 msgid "red"
 msgstr "rouge"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:46
+#: qcsrc/menu/xonotic/dialog_teamselect.c:47
 msgid "blue"
 msgstr "bleu"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:47
+#: qcsrc/menu/xonotic/dialog_teamselect.c:48
 msgid "yellow"
 msgstr "jaune"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:48
+#: qcsrc/menu/xonotic/dialog_teamselect.c:49
 msgid "pink"
 msgstr "rose"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:51
+#: qcsrc/menu/xonotic/dialog_teamselect.c:52
 msgid "spectate"
 msgstr "mode spectateur"
 
@@ -6068,7 +6089,12 @@ msgstr ""
 msgid "%s dB"
 msgstr "%s dB"
 
-#: qcsrc/menu/xonotic/slider_resolution.c:72
+#: qcsrc/menu/xonotic/slider_resolution.c:103
+#, c-format
+msgid "%dx%d (%d:%d)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_resolution.c:106
 #, c-format
 msgid "%dx%d"
 msgstr "%dx%d"
index e792ff895c5a2f7b54ea5b8d9afb160b646c0b88..d894c31a77250c903c225b939e7c8e351d455b96 100644 (file)
@@ -10,8 +10,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Xonotic\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-09-13 10:31+0200\n"
-"PO-Revision-Date: 2013-09-13 08:33+0000\n"
+"POT-Creation-Date: 2013-10-03 11:55+0200\n"
+"PO-Revision-Date: 2013-10-03 10:08+0000\n"
 "Last-Translator: divVerent <divVerent@xonotic.org>\n"
 "Language-Team: Hungarian (http://www.transifex.com/projects/p/xonotic/"
 "language/hu/)\n"
@@ -1271,7 +1271,7 @@ msgstr "%d."
 msgid "@!#%'n Tuba Throwing"
 msgstr "@!#%'n Tuba Dobás"
 
-#: qcsrc/common/mapinfo.qc:1105 qcsrc/menu/xonotic/skinlist.c:166
+#: qcsrc/common/mapinfo.qc:1109 qcsrc/menu/xonotic/skinlist.c:166
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
@@ -1345,1773 +1345,1773 @@ msgstr ""
 msgid "^7%s (^3%d sec left)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:330
+#: qcsrc/common/notifications.qh:342
 #, c-format
 msgid "^BG%s^BG captured the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:331
+#: qcsrc/common/notifications.qh:343
 #, c-format
 msgid ""
 "^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
 "%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:332
+#: qcsrc/common/notifications.qh:344
 #, c-format
 msgid "^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:333
+#: qcsrc/common/notifications.qh:345
 #, c-format
 msgid ""
 "^BG%s^BG captured the ^TC^TT^BG flag in ^F2%s^BG seconds, failing to break "
 "^BG%s^BG's previous record of ^F1%s^BG seconds"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:334
+#: qcsrc/common/notifications.qh:346
 msgid "^BGThe ^TC^TT^BG flag was returned to base by its owner"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:335
+#: qcsrc/common/notifications.qh:347
 msgid "^BGThe ^TC^TT^BG flag was destroyed and returned to base"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:336
+#: qcsrc/common/notifications.qh:348
 msgid "^BGThe ^TC^TT^BG flag was dropped in the base and returned itself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:337
+#: qcsrc/common/notifications.qh:349
 msgid ""
 "^BGThe ^TC^TT^BG flag fell somewhere it couldn't be reached and returned to "
 "base"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:338
+#: qcsrc/common/notifications.qh:350
 #, c-format
 msgid ""
 "^BGThe ^TC^TT^BG flag became impatient after ^F1%.2f^BG seconds and returned "
 "itself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:339
+#: qcsrc/common/notifications.qh:351
 msgid "^BGThe ^TC^TT^BG flag has returned to the base"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:340
+#: qcsrc/common/notifications.qh:352
 #, c-format
 msgid "^BG%s^BG lost the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:341
+#: qcsrc/common/notifications.qh:353
 #, c-format
 msgid "^BG%s^BG got the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:342
+#: qcsrc/common/notifications.qh:354
 #, c-format
 msgid "^BG%s^BG returned the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:343
+#: qcsrc/common/notifications.qh:355
 #, c-format
 msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:344
+#: qcsrc/common/notifications.qh:356
 #, c-format
 msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:345
+#: qcsrc/common/notifications.qh:357
 #, c-format
 msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:346
+#: qcsrc/common/notifications.qh:358
 #, c-format
 msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:346
+#: qcsrc/common/notifications.qh:358
 #, c-format
 msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:347
+#: qcsrc/common/notifications.qh:359
 #, c-format
 msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:348
+#: qcsrc/common/notifications.qh:360
 #, c-format
 msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:349
+#: qcsrc/common/notifications.qh:361
 #, c-format
 msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:350
+#: qcsrc/common/notifications.qh:362
 #, c-format
 msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:351
+#: qcsrc/common/notifications.qh:363
 #, c-format
 msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:352
+#: qcsrc/common/notifications.qh:364
 #, c-format
 msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:352
+#: qcsrc/common/notifications.qh:364
 #, c-format
 msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:353
+#: qcsrc/common/notifications.qh:365
 #, c-format
 msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:354
+#: qcsrc/common/notifications.qh:366
 #, c-format
 msgid ""
 "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:355
+#: qcsrc/common/notifications.qh:367
 #, c-format
 msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:356
+#: qcsrc/common/notifications.qh:368
 #, c-format
 msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:357
+#: qcsrc/common/notifications.qh:369
 #, c-format
 msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:358
+#: qcsrc/common/notifications.qh:370
 #, c-format
 msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:359
+#: qcsrc/common/notifications.qh:371
 #, c-format
 msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:360
+#: qcsrc/common/notifications.qh:372
 #, c-format
 msgid ""
 "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:361
+#: qcsrc/common/notifications.qh:373
 #, c-format
 msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:362
+#: qcsrc/common/notifications.qh:374
 #, c-format
 msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:363
+#: qcsrc/common/notifications.qh:375
 #, c-format
 msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:364
+#: qcsrc/common/notifications.qh:376
 #, c-format
 msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:365
+#: qcsrc/common/notifications.qh:377
 #, c-format
 msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:366
+#: qcsrc/common/notifications.qh:378
 #, c-format
 msgid "^BG%s%s^K1 was thrown into a world of hurt by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:367
+#: qcsrc/common/notifications.qh:379
 #, c-format
 msgid "^BG%s^K1 was moved into the %s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:368
+#: qcsrc/common/notifications.qh:380
 #, c-format
 msgid "^BG%s^K1 became enemies with the Lord of Teamplay%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:369
+#: qcsrc/common/notifications.qh:381
 #, c-format
 msgid "^BG%s^K1 thought they found a nice camping ground%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:370
+#: qcsrc/common/notifications.qh:382
 #, c-format
 msgid "^BG%s^K1 unfairly eliminated themself%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:371
+#: qcsrc/common/notifications.qh:383
 #, c-format
 msgid "^BG%s^K1 %s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:372
+#: qcsrc/common/notifications.qh:384
 #, c-format
 msgid "^BG%s^K1 couldn't catch their breath%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:372
+#: qcsrc/common/notifications.qh:384
 #, c-format
 msgid "^BG%s^K1 was in the water for too long%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:373
+#: qcsrc/common/notifications.qh:385
 #, c-format
 msgid "^BG%s^K1 hit the ground with a bit too much force%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:373
+#: qcsrc/common/notifications.qh:385
 #, c-format
 msgid "^BG%s^K1 hit the ground with a crunch%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:374
+#: qcsrc/common/notifications.qh:386
 #, c-format
 msgid "^BG%s^K1 became a bit too crispy%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:374
+#: qcsrc/common/notifications.qh:386
 #, c-format
 msgid "^BG%s^K1 felt a little hot%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:375
+#: qcsrc/common/notifications.qh:387
 #, c-format
 msgid "^BG%s^K1 died%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:376
+#: qcsrc/common/notifications.qh:388
 #, c-format
 msgid "^BG%s^K1 found a hot place%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:376
+#: qcsrc/common/notifications.qh:388
 #, c-format
 msgid "^BG%s^K1 turned into hot slag%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:377
+#: qcsrc/common/notifications.qh:389
 #, c-format
 msgid "^BG%s^K1 mastered the art of self-nading%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:378
+#: qcsrc/common/notifications.qh:390
 #, c-format
 msgid "^BG%s^K1 died%s%s. What's the point of living without ammo?"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:378
+#: qcsrc/common/notifications.qh:390
 #, c-format
 msgid "^BG%s^K1 ran out of ammo%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:379
+#: qcsrc/common/notifications.qh:391
 #, c-format
 msgid "^BG%s^K1 rotted away%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:380
+#: qcsrc/common/notifications.qh:392
 #, c-format
 msgid "^BG%s^K1 became a shooting star%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:393
 #, c-format
 msgid "^BG%s^K1 was slimed%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:394
 #, c-format
 msgid "^BG%s^K1 couldn't take it anymore%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:395
 #, c-format
 msgid "^BG%s^K1 is now preserved for centuries to come%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:396
 #, c-format
 msgid "^BG%s^K1 switched to the %s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:397
 #, c-format
 msgid "^BG%s^K1 died in an accident%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:398
 #, c-format
 msgid "^BG%s^K1 ran into a turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:399
 #, c-format
 msgid "^BG%s^K1 was blasted away by an eWheel turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:400
 #, c-format
 msgid "^BG%s^K1 got caught up in the FLAC turret fire%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:401
 #, c-format
 msgid "^BG%s^K1 was blasted away by a Hellion turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:402
 #, c-format
 msgid "^BG%s^K1 could not hide from the Hunter turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:403
 #, c-format
 msgid "^BG%s^K1 was riddled full of holes by a Machinegun turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:404
 #, c-format
 msgid "^BG%s^K1 got turned into smoldering gibs by an MLRS turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:405
 #, c-format
 msgid "^BG%s^K1 was phased out by a turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:406
 #, c-format
 msgid "^BG%s^K1 got served some superheated plasma from a turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:407
 #, c-format
 msgid "^BG%s^K1 was electrocuted by a Tesla turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:408
 #, c-format
 msgid "^BG%s^K1 got served a lead enrichment by a Walker turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:409
 #, c-format
 msgid "^BG%s^K1 was impaled by a Walker turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:410
 #, c-format
 msgid "^BG%s^K1 was blasted away by a Walker turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:411
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Bumblebee explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:412
 #, c-format
 msgid "^BG%s^K1 was crushed by a vehicle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:401
+#: qcsrc/common/notifications.qh:413
 #, c-format
 msgid "^BG%s^K1 was caught in a Raptor cluster bomb%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:402
+#: qcsrc/common/notifications.qh:414
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Raptor explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:403
+#: qcsrc/common/notifications.qh:415
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Spiderbot explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:404
+#: qcsrc/common/notifications.qh:416
 #, c-format
 msgid "^BG%s^K1 was blasted to bits by a Spiderbot rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:405
+#: qcsrc/common/notifications.qh:417
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Racer explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:406
+#: qcsrc/common/notifications.qh:418
 #, c-format
 msgid "^BG%s^K1 couldn't find shelter from a Racer rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:407
+#: qcsrc/common/notifications.qh:419
 #, c-format
 msgid "^BG%s^K1 was in the wrong place%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:408
+#: qcsrc/common/notifications.qh:420
 #, c-format
 msgid "^BG%s^K1 was betrayed by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:409
+#: qcsrc/common/notifications.qh:421
 #, c-format
 msgid "^BG%s^K1 was frozen by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:410
+#: qcsrc/common/notifications.qh:422
 #, c-format
 msgid "^BG%s^K3 was revived by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:411
+#: qcsrc/common/notifications.qh:423
 #, c-format
 msgid "^BG%s^K3 was revived by falling"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:412
+#: qcsrc/common/notifications.qh:424
 #, c-format
 msgid "^BG%s^K3 was automatically revived after %s second(s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:413 qcsrc/common/notifications.qh:594
+#: qcsrc/common/notifications.qh:425 qcsrc/common/notifications.qh:612
 msgid "^TC^TT^BG team wins the round"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:414 qcsrc/common/notifications.qh:595
+#: qcsrc/common/notifications.qh:426 qcsrc/common/notifications.qh:613
 #, c-format
 msgid "^BG%s^BG wins the round"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:415 qcsrc/common/notifications.qh:524
+#: qcsrc/common/notifications.qh:427 qcsrc/common/notifications.qh:542
 msgid "^BGRound tied"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:416 qcsrc/common/notifications.qh:525
+#: qcsrc/common/notifications.qh:428 qcsrc/common/notifications.qh:543
 msgid "^BGRound over, there's no winner"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:417
+#: qcsrc/common/notifications.qh:429
 #, c-format
 msgid "^BG%s^K1 froze themself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:418
+#: qcsrc/common/notifications.qh:430
 #, c-format
 msgid "^BGGodmode saved you %s units of damage, cheater!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:419 qcsrc/common/notifications.qh:598
+#: qcsrc/common/notifications.qh:431 qcsrc/common/notifications.qh:616
 #, c-format
 msgid "^BGYou do not have the ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:420 qcsrc/common/notifications.qh:599
+#: qcsrc/common/notifications.qh:432 qcsrc/common/notifications.qh:617
 #, c-format
 msgid "^BGYou dropped the ^F1%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:421 qcsrc/common/notifications.qh:600
+#: qcsrc/common/notifications.qh:433 qcsrc/common/notifications.qh:618
 #, c-format
 msgid "^BGYou got the ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:422 qcsrc/common/notifications.qh:601
+#: qcsrc/common/notifications.qh:434 qcsrc/common/notifications.qh:619
 #, c-format
 msgid "^BGYou don't have enough ammo for the ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:423 qcsrc/common/notifications.qh:602
+#: qcsrc/common/notifications.qh:435 qcsrc/common/notifications.qh:620
 #, c-format
 msgid "^F1%s %s^BG is unable to fire, but its ^F1%s^BG can"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:424 qcsrc/common/notifications.qh:603
+#: qcsrc/common/notifications.qh:436 qcsrc/common/notifications.qh:621
 #, c-format
 msgid "^F1%s^BG is ^F4not available^BG on this map"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:425
+#: qcsrc/common/notifications.qh:437
 #, c-format
 msgid "^BG%s^F3 connected%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:426
+#: qcsrc/common/notifications.qh:438
 #, c-format
 msgid "^BG%s^F3 connected and joined the ^TC^TT team"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:427
+#: qcsrc/common/notifications.qh:439
 #, c-format
 msgid "^BG%s^F3 is now playing"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:428 qcsrc/common/notifications.qh:606
+#: qcsrc/common/notifications.qh:440 qcsrc/common/notifications.qh:624
 #, c-format
 msgid "^BG%s^BG has dropped the ball!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:429 qcsrc/common/notifications.qh:607
+#: qcsrc/common/notifications.qh:441 qcsrc/common/notifications.qh:625
 #, c-format
 msgid "^BG%s^BG has picked up the ball!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:430
+#: qcsrc/common/notifications.qh:442
 #, c-format
 msgid "^BG%s^BG captured the keys for the ^TC^TT team"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:431
+#: qcsrc/common/notifications.qh:443
 #, c-format
 msgid "^BG%s^BG dropped the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:432
+#: qcsrc/common/notifications.qh:444
 #, c-format
 msgid "^BG%s^BG lost the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:433
+#: qcsrc/common/notifications.qh:445
 #, c-format
 msgid "^BG%s^BG picked up the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:434
+#: qcsrc/common/notifications.qh:446
 #, c-format
 msgid "^BG%s^F3 forfeited"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:435
+#: qcsrc/common/notifications.qh:447
 #, c-format
 msgid "^BG%s^F3 has no more lives left"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:436
+#: qcsrc/common/notifications.qh:448
 #, c-format
 msgid "^BG%s^K1 picked up Invisibility"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:437
+#: qcsrc/common/notifications.qh:449
 #, c-format
 msgid "^BG%s^K1 picked up Shield"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:438
+#: qcsrc/common/notifications.qh:450
 #, c-format
 msgid "^BG%s^K1 picked up Speed"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:439
+#: qcsrc/common/notifications.qh:451
 #, c-format
 msgid "^BG%s^K1 picked up Strength"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:440
+#: qcsrc/common/notifications.qh:452
 #, c-format
 msgid "^BG%s^F3 disconnected"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:441
+#: qcsrc/common/notifications.qh:453
 #, c-format
 msgid "^BG%s^F3 was kicked for idling"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:442
+#: qcsrc/common/notifications.qh:454
 msgid ""
 "^F2You were kicked from the server because you are a spectator and "
 "spectators aren't allowed at the moment."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:443
+#: qcsrc/common/notifications.qh:455
 #, c-format
 msgid "^BG%s^F3 is now spectating"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:444
+#: qcsrc/common/notifications.qh:456
 #, c-format
 msgid "^BG%s^BG has abandoned the race"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:445
+#: qcsrc/common/notifications.qh:457
 #, c-format
 msgid "^BG%s^BG couldn't break their %s%s^BG place record of %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:446
+#: qcsrc/common/notifications.qh:458
 #, c-format
 msgid "^BG%s^BG couldn't break the %s%s^BG place record of %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:447
+#: qcsrc/common/notifications.qh:459
 #, c-format
 msgid "^BG%s^BG has finished the race"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:448
+#: qcsrc/common/notifications.qh:460
 #, c-format
 msgid "^BG%s^BG broke %s^BG's %s%s^BG place record with %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:449
+#: qcsrc/common/notifications.qh:461
 #, c-format
 msgid "^BG%s^BG improved their %s%s^BG place record with %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:450
+#: qcsrc/common/notifications.qh:462
 #, c-format
 msgid ""
 "^BG%s^BG scored a new record with ^F2%s^BG, but unfortunately lacks a UID "
 "and will be lost."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:451
+#: qcsrc/common/notifications.qh:463
 #, c-format
 msgid "^BG%s^BG set the %s%s^BG place record with %s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:452
+#: qcsrc/common/notifications.qh:464
 msgid "^TC^TT ^BGteam scores!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:453
+#: qcsrc/common/notifications.qh:465
 #, 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 ""
 
-#: qcsrc/common/notifications.qh:454
+#: qcsrc/common/notifications.qh:466
 #, c-format
 msgid "^BG%s^K1 picked up a Superweapon"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:455
+#: qcsrc/common/notifications.qh:467
 #, c-format
 msgid ""
 "^F4NOTE: ^BGThe server is running ^F1Xonotic %s (beta)^BG, you have "
 "^F2Xonotic %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:456
+#: qcsrc/common/notifications.qh:468
 #, c-format
 msgid ""
 "^F4NOTE: ^BGThe server is running ^F1Xonotic %s^BG, you have ^F2Xonotic %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:457
+#: qcsrc/common/notifications.qh:469
 #, c-format
 msgid ""
 "^F4NOTE: ^F1Xonotic %s^BG is out, and you still have ^F2Xonotic %s^BG - get "
 "the update from ^F3http://www.xonotic.org/^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:458
+#: qcsrc/common/notifications.qh:470
 #, c-format
 msgid "^F3SVQC Build information: ^F4%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:459
+#: qcsrc/common/notifications.qh:471
 #, c-format
 msgid ""
 "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Accordeon%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:460
+#: qcsrc/common/notifications.qh:472
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Accordeon%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:461
+#: qcsrc/common/notifications.qh:473
 #, c-format
 msgid "^BG%s%s^K1 felt the strong pull of ^BG%s^K1's Crylink%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:462
+#: qcsrc/common/notifications.qh:474
 #, c-format
 msgid "^BG%s^K1 felt the strong pull of their Crylink%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:463
+#: qcsrc/common/notifications.qh:475
 #, c-format
 msgid "^BG%s%s^K1 was blasted by ^BG%s^K1's Electro bolt%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:464
+#: qcsrc/common/notifications.qh:476
 #, c-format
 msgid "^BG%s%s^K1 felt the electrifying air of ^BG%s^K1's Electro combo%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:465
+#: qcsrc/common/notifications.qh:477
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Electro plasma%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:466
+#: qcsrc/common/notifications.qh:478
 #, c-format
 msgid "^BG%s^K1 played with Electro plasma%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:467
+#: qcsrc/common/notifications.qh:479
 #, c-format
 msgid "^BG%s^K1 could not remember where they put their Electro plasma%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:468
+#: qcsrc/common/notifications.qh:480
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's fireball%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:469
+#: qcsrc/common/notifications.qh:481
 #, c-format
 msgid "^BG%s%s^K1 got burnt by ^BG%s^K1's firemine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:470
+#: qcsrc/common/notifications.qh:482
 #, c-format
 msgid "^BG%s^K1 should have used a smaller gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:471
+#: qcsrc/common/notifications.qh:483
 #, c-format
 msgid "^BG%s^K1 forgot about their firemine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:472
+#: qcsrc/common/notifications.qh:484
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by a burst of ^BG%s^K1's Hagar rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:473
+#: qcsrc/common/notifications.qh:485
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Hagar rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:474
+#: qcsrc/common/notifications.qh:486
 #, c-format
 msgid "^BG%s^K1 played with tiny Hagar rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:475
+#: qcsrc/common/notifications.qh:487
 #, c-format
 msgid "^BG%s%s^K1 was cut down with ^BG%s^K1's HLAC%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:476
+#: qcsrc/common/notifications.qh:488
 #, c-format
 msgid "^BG%s^K1 got a little jumpy with their HLAC%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:477
+#: qcsrc/common/notifications.qh:489
 #, c-format
 msgid "^BG%s%s^K1 was caught in ^BG%s^K1's Hook gravity bomb%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:478
+#: qcsrc/common/notifications.qh:490
 #, c-format
 msgid ""
 "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Klein Bottle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:479
+#: qcsrc/common/notifications.qh:491
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Klein Bottle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:480
+#: qcsrc/common/notifications.qh:492
 #, c-format
 msgid "^BG%s%s^K1 was shot to death by ^BG%s^K1's Laser%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:481
+#: qcsrc/common/notifications.qh:493
 #, c-format
 msgid "^BG%s^K1 shot themself to hell with their Laser%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:482
+#: qcsrc/common/notifications.qh:494
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's mine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:483
+#: qcsrc/common/notifications.qh:495
 #, c-format
 msgid "^BG%s^K1 forgot about their mine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:484
+#: qcsrc/common/notifications.qh:496
 #, c-format
 msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Minstanex%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:485
+#: qcsrc/common/notifications.qh:497
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Mortar grenade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:486
+#: qcsrc/common/notifications.qh:498
 #, c-format
 msgid "^BG%s%s^K1 ate ^BG%s^K1's Mortar grenade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:487
+#: qcsrc/common/notifications.qh:499
 #, c-format
 msgid "^BG%s^K1 didn't see their own Mortar grenade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:488
+#: qcsrc/common/notifications.qh:500
 #, c-format
 msgid "^BG%s^K1 blew themself up with their own Mortar%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:489
+#: qcsrc/common/notifications.qh:501
 #, c-format
 msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Nex%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:490
+#: qcsrc/common/notifications.qh:502
 #, c-format
 msgid "^BG%s%s^K1 was sniped with a Rifle by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:491
+#: qcsrc/common/notifications.qh:503
 #, c-format
 msgid "^BG%s%s^K1 died in ^BG%s^K1's Rifle bullet hail%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:492
+#: qcsrc/common/notifications.qh:504
 #, c-format
 msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle bullet hail%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:493
+#: qcsrc/common/notifications.qh:505
 #, c-format
 msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:494
+#: qcsrc/common/notifications.qh:506
 #, c-format
 msgid "^BG%s%s^K1 ate ^BG%s^K1's rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:495
+#: qcsrc/common/notifications.qh:507
 #, c-format
 msgid "^BG%s%s^K1 got too close ^BG%s^K1's rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:496
+#: qcsrc/common/notifications.qh:508
 #, c-format
 msgid "^BG%s^K1 blew themself up with their Rocketlauncher%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:497
+#: qcsrc/common/notifications.qh:509
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Seeker rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:498
+#: qcsrc/common/notifications.qh:510
 #, c-format
 msgid "^BG%s%s^K1 was tagged by ^BG%s^K1's Seeker%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:499
+#: qcsrc/common/notifications.qh:511
 #, c-format
 msgid "^BG%s^K1 played with tiny Seeker rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:500
+#: qcsrc/common/notifications.qh:512
 #, c-format
 msgid "^BG%s%s^K1 was gunned down by ^BG%s^K1's Shotgun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:501
+#: qcsrc/common/notifications.qh:513
 #, c-format
 msgid "^BG%s%s^K1 slapped ^BG%s^K1 around a bit with a large Shotgun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:502
+#: qcsrc/common/notifications.qh:514
 #, c-format
 msgid "^BG%s^K1 is now thinking with portals%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:503
+#: qcsrc/common/notifications.qh:515
 #, c-format
 msgid "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Tuba%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:504
+#: qcsrc/common/notifications.qh:516
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Tuba%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:505
+#: qcsrc/common/notifications.qh:517
 #, c-format
 msgid "^BG%s%s^K1 was sniped by ^BG%s^K1's Machine Gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:506
+#: qcsrc/common/notifications.qh:518
 #, c-format
 msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:518
+#: qcsrc/common/notifications.qh:536
 msgid "^BGYou are attacking!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:519
+#: qcsrc/common/notifications.qh:537
 msgid "^BGYou are defending!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:520
+#: qcsrc/common/notifications.qh:538
 msgid "^F4Begin!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:521
+#: qcsrc/common/notifications.qh:539
 msgid "^F4Game starts in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:522
+#: qcsrc/common/notifications.qh:540
 msgid "^F4Round starts in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:523
+#: qcsrc/common/notifications.qh:541
 msgid "^F4Round cannot start"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:526
+#: qcsrc/common/notifications.qh:544
 msgid "^F2Don't camp!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:527
+#: qcsrc/common/notifications.qh:545
 msgid ""
 "^BGYou are now free.\n"
 "^BGFeel free to ^F2try to capture^BG the flag again\n"
 "^BGif you think you will succeed."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:528
+#: qcsrc/common/notifications.qh:546
 msgid ""
 "^BGYou are now ^F1shielded^BG from the flag\n"
 "^BGfor ^F2too many unsuccessful attempts^BG to capture.\n"
 "^BGMake some defensive scores before trying again."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:529
+#: qcsrc/common/notifications.qh:547
 msgid "^BGYou captured the ^TC^TT^BG flag!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:530
+#: qcsrc/common/notifications.qh:548
 #, c-format
 msgid "^BGToo many flag throws! Throwing disabled for %s."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:531
+#: qcsrc/common/notifications.qh:549
 #, c-format
 msgid "^BG%s^BG passed the ^TC^TT^BG flag to %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:532
+#: qcsrc/common/notifications.qh:550
 #, c-format
 msgid "^BGYou received the ^TC^TT^BG flag from %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:533
+#: qcsrc/common/notifications.qh:551
 #, c-format
 msgid "^BG%s^BG requests you to pass the flag%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:534
+#: qcsrc/common/notifications.qh:552
 #, c-format
 msgid "^BGRequesting %s^BG to pass you the flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:535
+#: qcsrc/common/notifications.qh:553
 #, c-format
 msgid "^BGYou passed the ^TC^TT^BG flag to %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:536
+#: qcsrc/common/notifications.qh:554
 msgid "^BGYou got the ^TC^TT^BG flag!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:537
+#: qcsrc/common/notifications.qh:555
 #, c-format
 msgid "^BGThe %senemy^BG got your flag! Retrieve it!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:538
+#: qcsrc/common/notifications.qh:556
 #, c-format
 msgid "^BGThe %senemy (^BG%s%s)^BG got your flag! Retrieve it!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:539
+#: qcsrc/common/notifications.qh:557
 #, c-format
 msgid "^BGYour %steam mate^BG got the flag! Protect them!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:540
+#: qcsrc/common/notifications.qh:558
 #, c-format
 msgid "^BGYour %steam mate (^BG%s%s)^BG got the flag! Protect them!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:541
+#: qcsrc/common/notifications.qh:559
 msgid "^BGYou returned the ^TC^TT^BG flag!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:542
+#: qcsrc/common/notifications.qh:560
 msgid "^BGStalemate! Enemies can now see you on radar!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:543
+#: qcsrc/common/notifications.qh:561
 msgid "^BGStalemate! Flag carriers can now be seen by enemies on radar!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:544
+#: qcsrc/common/notifications.qh:562
 #, c-format
 msgid "^K3%sYou fragged ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:544
+#: qcsrc/common/notifications.qh:562
 #, c-format
 msgid "^K3%sYou scored against ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:545
+#: qcsrc/common/notifications.qh:563
 #, c-format
 msgid "^K1%sYou were fragged by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:545
+#: qcsrc/common/notifications.qh:563
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:546
+#: qcsrc/common/notifications.qh:564
 #, c-format
 msgid "^K1%sYou were fragged by ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:546
+#: qcsrc/common/notifications.qh:564
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:547
+#: qcsrc/common/notifications.qh:565
 #, c-format
 msgid "^K3%sYou fragged ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:547
+#: qcsrc/common/notifications.qh:565
 #, c-format
 msgid "^K3%sYou scored against ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:548
+#: qcsrc/common/notifications.qh:566
 #, c-format
 msgid "^K1%sYou scored against ^BG%s^K1 while they were typing"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:548
+#: qcsrc/common/notifications.qh:566
 #, c-format
 msgid "^K1%sYou typefragged ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:549
+#: qcsrc/common/notifications.qh:567
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^K1 while typing!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:549
+#: qcsrc/common/notifications.qh:567
 #, c-format
 msgid "^K1%sYou were typefragged by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:550
+#: qcsrc/common/notifications.qh:568
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^K1 while typing^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:550
+#: qcsrc/common/notifications.qh:568
 #, c-format
 msgid "^K1%sYou were typefragged by ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:551
+#: qcsrc/common/notifications.qh:569
 #, c-format
 msgid "^K1%sYou scored against ^BG%s^K1 while they were typing^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:551
+#: qcsrc/common/notifications.qh:569
 #, c-format
 msgid "^K1%sYou typefragged ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:552
+#: qcsrc/common/notifications.qh:570
 msgid "^BGPress ^F2DROPWEAPON^BG again to toss the nade!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:553
+#: qcsrc/common/notifications.qh:571
 #, c-format
 msgid ""
 "^BGYou have been moved into a different team\n"
 "You are now on: %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:554
+#: qcsrc/common/notifications.qh:572
 msgid "^K1Don't go against your team mates!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:554
+#: qcsrc/common/notifications.qh:572
 msgid "^K1Don't shoot your team mates!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:555
+#: qcsrc/common/notifications.qh:573
 msgid "^K1Die camper!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:555
+#: qcsrc/common/notifications.qh:573
 msgid "^K1Reconsider your tactics, camper!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:556
+#: qcsrc/common/notifications.qh:574
 msgid "^K1You unfairly eliminated yourself!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:557
+#: qcsrc/common/notifications.qh:575
 #, c-format
 msgid "^K1You were %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:558
+#: qcsrc/common/notifications.qh:576
 msgid "^K1You couldn't catch your breath!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:559
+#: qcsrc/common/notifications.qh:577
 msgid "^K1You hit the ground with a crunch!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:560
+#: qcsrc/common/notifications.qh:578
 msgid "^K1You felt a little too hot!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:560
+#: qcsrc/common/notifications.qh:578
 msgid "^K1You got a little bit too crispy!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:561
+#: qcsrc/common/notifications.qh:579
 msgid "^K1You killed your own dumb self!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:561
+#: qcsrc/common/notifications.qh:579
 msgid "^K1You need to be more careful!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:562
+#: qcsrc/common/notifications.qh:580
 msgid "^K1You couldn't stand the heat!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:563
+#: qcsrc/common/notifications.qh:581
 msgid "^K1Tastes like chicken!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:563
+#: qcsrc/common/notifications.qh:581
 msgid "^K1You forgot to put the pin back in!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:564
+#: qcsrc/common/notifications.qh:582
 msgid "^K1You are respawning for running out of ammo..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:564
+#: qcsrc/common/notifications.qh:582
 msgid "^K1You were killed for running out of ammo..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:565
+#: qcsrc/common/notifications.qh:583
 msgid "^K1You grew too old without taking your medicine"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:565
+#: qcsrc/common/notifications.qh:583
 msgid "^K1You need to preserve your health"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:566
+#: qcsrc/common/notifications.qh:584
 msgid "^K1You became a shooting star!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:567
+#: qcsrc/common/notifications.qh:585
 msgid "^K1You melted away in slime!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:568
+#: qcsrc/common/notifications.qh:586
 msgid "^K1You committed suicide!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:568
+#: qcsrc/common/notifications.qh:586
 msgid "^K1You ended it all!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:569
+#: qcsrc/common/notifications.qh:587
 msgid "^K1You got stuck in a swamp!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:570
+#: qcsrc/common/notifications.qh:588
 #, c-format
 msgid "^BGYou are now on: %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:571
+#: qcsrc/common/notifications.qh:589
 msgid "^K1You died in an accident!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:572
+#: qcsrc/common/notifications.qh:590
 msgid "^K1You had an unfortunate run in with a turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:572
+#: qcsrc/common/notifications.qh:590
 msgid "^K1You were fragged by a turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:573
+#: qcsrc/common/notifications.qh:591
 msgid "^K1You had an unfortunate run in with an eWheel turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:573
+#: qcsrc/common/notifications.qh:591
 msgid "^K1You were fragged by an eWheel turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:574
+#: qcsrc/common/notifications.qh:592
 msgid "^K1You had an unfortunate run in with a Walker turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:574
+#: qcsrc/common/notifications.qh:592
 msgid "^K1You were fragged by a Walker turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:575
+#: qcsrc/common/notifications.qh:593
 msgid "^K1You got caught in the blast of a Bumblebee explosion!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:576
+#: qcsrc/common/notifications.qh:594
 msgid "^K1You were crushed by a vehicle!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:577
+#: qcsrc/common/notifications.qh:595
 msgid "^K1You were caught in a Raptor cluster bomb!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:578
+#: qcsrc/common/notifications.qh:596
 msgid "^K1You got caught in the blast of a Raptor explosion!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:579
+#: qcsrc/common/notifications.qh:597
 msgid "^K1You got caught in the blast of a Spiderbot explosion!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:580
+#: qcsrc/common/notifications.qh:598
 msgid "^K1You were blasted to bits by a Spiderbot rocket!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:581
+#: qcsrc/common/notifications.qh:599
 msgid "^K1You got caught in the blast of a Racer explosion!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:582
+#: qcsrc/common/notifications.qh:600
 msgid "^K1You couldn't find shelter from a Racer rocket!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:583
+#: qcsrc/common/notifications.qh:601
 msgid "^K1Watch your step!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:584
+#: qcsrc/common/notifications.qh:602
 #, c-format
 msgid "^K1Moron! You fragged ^BG%s^K1, a team mate!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:584
+#: qcsrc/common/notifications.qh:602
 #, c-format
 msgid "^K1Moron! You went against ^BG%s^K1, a team mate!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:585
+#: qcsrc/common/notifications.qh:603
 #, c-format
 msgid "^K1You were fragged by ^BG%s^K1, a team mate"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:585
+#: qcsrc/common/notifications.qh:603
 #, c-format
 msgid "^K1You were scored against by ^BG%s^K1, a team mate"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:586
+#: qcsrc/common/notifications.qh:604
 msgid ""
 "^K1Stop idling!\n"
 "^BGDisconnecting in ^COUNT..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:587
+#: qcsrc/common/notifications.qh:605
 msgid "^F2You picked up some extra lives"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:588
+#: qcsrc/common/notifications.qh:606
 #, c-format
 msgid "^K3You froze ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:589
+#: qcsrc/common/notifications.qh:607
 #, c-format
 msgid "^K1You were frozen by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:590
+#: qcsrc/common/notifications.qh:608
 #, c-format
 msgid "^K3You revived ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:591
+#: qcsrc/common/notifications.qh:609
 msgid "^K3You revived yourself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:592
+#: qcsrc/common/notifications.qh:610
 #, c-format
 msgid "^K3You were revived by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:593
+#: qcsrc/common/notifications.qh:611
 #, c-format
 msgid "^K3You were automatically revived after %s second(s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:596
+#: qcsrc/common/notifications.qh:614
 msgid "^K1You froze yourself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:597
+#: qcsrc/common/notifications.qh:615
 msgid "^K1Round already started, you spawn as frozen"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:604
+#: qcsrc/common/notifications.qh:622
 msgid ""
 "^K1No spawnpoints available!\n"
 "Hope your team can fix it..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:605
+#: qcsrc/common/notifications.qh:623
 msgid ""
 "^K1You may not join the game at this time.\n"
 "The player limit reached maximum capacity."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:608
+#: qcsrc/common/notifications.qh:626
 msgid "^BGKilling people while you don't have the ball gives no points!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:609
+#: qcsrc/common/notifications.qh:627
 msgid ""
 "^BGAll keys are in your team's hands!\n"
 "Help the key carriers to meet!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:610
+#: qcsrc/common/notifications.qh:628
 msgid ""
 "^BGAll keys are in ^TC^TT team^BG's hands!\n"
 "Interfere ^F4NOW^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:611
+#: qcsrc/common/notifications.qh:629
 msgid ""
 "^BGAll keys are in your team's hands!\n"
 "Meet the other key carriers ^F4NOW^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:612
+#: qcsrc/common/notifications.qh:630
 msgid "^F4Round will start in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:613
+#: qcsrc/common/notifications.qh:631
 msgid "^BGScanning frequency range..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:614
+#: qcsrc/common/notifications.qh:632
 msgid "^BGYou are starting with the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:615 qcsrc/common/notifications.qh:616
+#: qcsrc/common/notifications.qh:633 qcsrc/common/notifications.qh:634
 #, c-format
 msgid ""
 "^BGWaiting for players to join...\n"
 "Need active players for: %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:617
+#: qcsrc/common/notifications.qh:635
 #, c-format
 msgid "^BGWaiting for %s player(s) to join..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:618
+#: qcsrc/common/notifications.qh:636
 msgid "^F4^COUNT^BG left to find some ammo!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:619
+#: qcsrc/common/notifications.qh:637
 msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:619
+#: qcsrc/common/notifications.qh:637
 msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:620
+#: qcsrc/common/notifications.qh:638
 #, c-format
 msgid "^F2Extra lives remaining: ^K1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:621
+#: qcsrc/common/notifications.qh:639
 msgid "^BGSecondary fire inflicts no damage!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:622
+#: qcsrc/common/notifications.qh:640
 #, c-format
 msgid "^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:623
+#: qcsrc/common/notifications.qh:641
 #, c-format
 msgid ""
 "^F2^COUNT^BG until weapon change...\n"
 "Next weapon: ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:624
+#: qcsrc/common/notifications.qh:642
 #, c-format
 msgid "^F2Active weapon: ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:625
+#: qcsrc/common/notifications.qh:643
 msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:626
+#: qcsrc/common/notifications.qh:644
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "Keep fragging until we have a winner!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:626
+#: qcsrc/common/notifications.qh:644
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "Keep scoring until we have a winner!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:627
+#: qcsrc/common/notifications.qh:645
 #, c-format
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "^BGAdded ^F4%s^BG to the game!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:628
+#: qcsrc/common/notifications.qh:646
 msgid "^F2Invisibility has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:629
+#: qcsrc/common/notifications.qh:647
 msgid "^F2Shield has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:630
+#: qcsrc/common/notifications.qh:648
 msgid "^F2Speed has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:631
+#: qcsrc/common/notifications.qh:649
 msgid "^F2Strength has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:632
+#: qcsrc/common/notifications.qh:650
 msgid "^F2You are invisible"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:633
+#: qcsrc/common/notifications.qh:651
 msgid "^F2Shield surrounds you"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:634
+#: qcsrc/common/notifications.qh:652
 msgid "^F2You are on speed"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:635
+#: qcsrc/common/notifications.qh:653
 msgid "^F2Strength infuses your weapons with devastating power"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:636
+#: qcsrc/common/notifications.qh:654
 msgid "^F2The race is over, finish your lap!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:637
+#: qcsrc/common/notifications.qh:655
 msgid "^F2Superweapons have broken down"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:638
+#: qcsrc/common/notifications.qh:656
 msgid "^F2Superweapons have been lost"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:639
+#: qcsrc/common/notifications.qh:657
 msgid "^F2You now have a superweapon"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:640
+#: qcsrc/common/notifications.qh:658
 msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:641
+#: qcsrc/common/notifications.qh:659
 msgid "^K1Changing team in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:642
+#: qcsrc/common/notifications.qh:660
 msgid "^K1Spectating in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:643
+#: qcsrc/common/notifications.qh:661
 msgid "^K1Suicide in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:644
+#: qcsrc/common/notifications.qh:662
 msgid "^F4Timeout begins in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:645
+#: qcsrc/common/notifications.qh:663
 msgid "^F4Timeout ends in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:907 qcsrc/common/notifications.qh:908
+#: qcsrc/common/notifications.qh:937 qcsrc/common/notifications.qh:938
 #, c-format
 msgid " (near %s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:915 qcsrc/common/notifications.qh:916
+#: qcsrc/common/notifications.qh:945 qcsrc/common/notifications.qh:946
 msgid "primary"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:915 qcsrc/common/notifications.qh:916
+#: qcsrc/common/notifications.qh:945 qcsrc/common/notifications.qh:946
 msgid "secondary"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:926
+#: qcsrc/common/notifications.qh:956
 #, c-format
 msgid " ^F1(Press %s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:935
+#: qcsrc/common/notifications.qh:965
 #, c-format
 msgid " with %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 #, c-format
 msgid "%s^K1 made a TRIPLE FRAG! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 #, c-format
 msgid "%s^K1 made a TRIPLE SCORE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 msgid "TRIPLE FRAG! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 #, c-format
 msgid "%s^K1 made FIVE SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 #, c-format
 msgid "%s^K1 unlocked RAGE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 msgid "RAGE! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 #, c-format
 msgid "%s^K1 made TEN SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 #, c-format
 msgid "%s^K1 started a MASSACRE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 msgid "MASSACRE! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 #, c-format
 msgid "%s^K1 executed MAYHEM! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 #, c-format
 msgid "%s^K1 made FIFTEEN SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 msgid "MAYHEM! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 #, c-format
 msgid "%s^K1 is a BERSERKER! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 #, c-format
 msgid "%s^K1 made TWENTY SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 msgid "BERSERKER! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 #, c-format
 msgid "%s^K1 inflicts CARNAGE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 #, c-format
 msgid "%s^K1 made TWENTY FIVE SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 msgid "CARNAGE! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 #, c-format
 msgid "%s^K1 made THIRTY SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 #, c-format
 msgid "%s^K1 unleashes ARMAGEDDON! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 msgid "ARMAGEDDON! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:956
+#: qcsrc/common/notifications.qh:986
 #, c-format
 msgid "%s(^F1Bot^BG)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:958
+#: qcsrc/common/notifications.qh:988
 #, c-format
 msgid "%s(Ping ^F1%d^BG)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:964
+#: qcsrc/common/notifications.qh:994
 #, c-format
 msgid ""
 "\n"
 "(Health ^1%d^BG / Armor ^2%d^BG)%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:966
+#: qcsrc/common/notifications.qh:996
 #, c-format
 msgid ""
 "\n"
 "(^F4Dead^BG)%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1003 qcsrc/common/notifications.qh:1016
+#: qcsrc/common/notifications.qh:1033 qcsrc/common/notifications.qh:1046
 #, c-format
 msgid "%d score spree! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1015
+#: qcsrc/common/notifications.qh:1045
 #, c-format
 msgid "%d frag spree! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1028
+#: qcsrc/common/notifications.qh:1058
 msgid "First blood! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1028
+#: qcsrc/common/notifications.qh:1058
 msgid "First score! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1032
+#: qcsrc/common/notifications.qh:1062
 msgid "First casualty! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1032
+#: qcsrc/common/notifications.qh:1062
 msgid "First victim! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1073
+#: qcsrc/common/notifications.qh:1103
 #, c-format
 msgid "%s^K1 has %d frags in a row! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1074
+#: qcsrc/common/notifications.qh:1104
 #, c-format
 msgid "%s^K1 made %d scores in a row! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1092
+#: qcsrc/common/notifications.qh:1122
 #, c-format
 msgid "%s^K1 drew first blood! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1093
+#: qcsrc/common/notifications.qh:1123
 #, c-format
 msgid "%s^K1 got the first score! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1109
+#: qcsrc/common/notifications.qh:1139
 #, c-format
 msgid ", ending their %d frag spree"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1110
+#: qcsrc/common/notifications.qh:1140
 #, c-format
 msgid ", ending their %d score spree"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1124
+#: qcsrc/common/notifications.qh:1154
 #, c-format
 msgid ", losing their %d frag spree"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1125
+#: qcsrc/common/notifications.qh:1155
 #, c-format
 msgid ", losing their %d score spree"
 msgstr ""
@@ -3177,11 +3177,11 @@ msgstr "Tárgy %d"
 msgid "%d (%s)"
 msgstr "%d (%s)"
 
-#: qcsrc/menu/item/textslider.c:29 qcsrc/menu/item/textslider.c:31
+#: qcsrc/menu/item/textslider.c:31 qcsrc/menu/item/textslider.c:33
 msgid "custom"
 msgstr "egyéni"
 
-#: qcsrc/menu/menu.qc:56
+#: qcsrc/menu/menu.qc:59
 #, c-format
 msgid "^4MQC Build information: ^1%s\n"
 msgstr "^4MQC Build információ: %s\n"
@@ -3228,7 +3228,7 @@ msgstr "Közreműködők"
 #: 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_sandboxtools.c:89
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:90
 #: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:77
 #: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:21
 msgid "OK"
@@ -3285,33 +3285,33 @@ msgstr "Beállítások mentése"
 msgid "Ammo Panel"
 msgstr "Lőszer Panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:23
 msgid "Ammunition display:"
 msgstr "Lőszer kijelző:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:26
 msgid "Show only current ammo type"
 msgstr "Csak az aktuális lőszer típus megjelenítése"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
 msgid "Align icon:"
 msgstr "Ikon sorrend:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:36
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:28
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:40
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:28
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:40
-msgid "Left"
-msgstr "Balra"
-
 #: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:30
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:38
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:29
 #: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:41
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:29
 #: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:41
+msgid "Left"
+msgstr "Balra"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:42
 msgid "Right"
 msgstr "Jobbra"
 
@@ -3319,28 +3319,28 @@ msgstr "Jobbra"
 msgid "Centerprint"
 msgstr "Fontos üzenetek panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:24
 msgid "Message duration:"
 msgstr "Üzenetek élettartama:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:27
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:28
 msgid "Fade time:"
 msgstr "Bejegyzés elhalványulási ideje:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:32
 msgid "Flip messages order"
 msgstr "Értesítési sorrend megfordítása"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:34
 msgid "Text alignment:"
 msgstr "Szöveg igazítása:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:38
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:51
 msgid "Center"
 msgstr "Középre"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:41
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:42
 msgid "Font scale:"
 msgstr "Betűméret:"
 
@@ -3348,19 +3348,19 @@ msgstr "Betűméret:"
 msgid "Chat Panel"
 msgstr "Csevej Panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:23
 msgid "Chat entries:"
 msgstr "Csevej bejegyzések:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:26
 msgid "Chat size:"
 msgstr "Csevej mérete:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:30
 msgid "Chat lifetime:"
 msgstr "Csevej élettartam:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:34
 msgid "Chat beep sound"
 msgstr "Csevej pittyenés"
 
@@ -3368,11 +3368,11 @@ msgstr "Csevej pittyenés"
 msgid "Engine Info Panel"
 msgstr "Grafikus motor információs panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:23
 msgid "Engine info:"
 msgstr "Grafikus motor információ:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:26
 msgid "Use an averaging algorithm for fps"
 msgstr "Átlagoló algoritmus használata az fps-hez"
 
@@ -3380,36 +3380,36 @@ msgstr "Átlagoló algoritmus használata az fps-hez"
 msgid "Health/Armor Panel"
 msgstr "Életerő/Páncél Panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:22
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:23
 msgid "Enable status bar"
 msgstr "Állapotsor engedélyezése"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:24
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:25
 msgid "Status bar alignment:"
 msgstr "Állapotsor igazítása:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:32
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:42
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:32
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:43
 msgid "Inward"
 msgstr "Befelé"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:34
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:43
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:34
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:44
 msgid "Outward"
 msgstr "Kifelé"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:37
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:38
 msgid "Icon alignment:"
 msgstr "Ikonok igazítása:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:46
 msgid "Flip health and armor positions"
 msgstr "Életerő és páncél pozíciójának cseréje"
 
@@ -3417,11 +3417,11 @@ msgstr "Életerő és páncél pozíciójának cseréje"
 msgid "Info Messages Panel"
 msgstr "Infó üzenetek panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:23
 msgid "Info messages:"
 msgstr "Infó üzenetek:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:26
 msgid "Flip align"
 msgstr "Fordított igazítás"
 
@@ -3433,23 +3433,23 @@ msgstr "Játékmód ikonok Panel"
 msgid "Notification Panel"
 msgstr "Értesítő Panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:23
 msgid "Notifications:"
 msgstr "Értesítések:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:26
 msgid "Also print notifications to the console"
 msgstr "Az értesítéseket a konzol is kiírja"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:29
 msgid "Flip notify order"
 msgstr "Értesítési sorrend megfordítása"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:32
 msgid "Entry lifetime:"
 msgstr "Bejegyzés élettartama:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:36
 msgid "Entry fadetime:"
 msgstr "Bejegyzés elhalványulási ideje:"
 
@@ -3457,96 +3457,96 @@ msgstr "Bejegyzés elhalványulási ideje:"
 msgid "Physics Panel"
 msgstr "Fizika Panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:22
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:22
 msgid "Panel disabled"
 msgstr "Panel kikapcsolva"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
 msgid "Panel enabled"
 msgstr "Panel engedélyezése"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
 msgid "Panel enabled even observing"
 msgstr "Panel engedélyezett, még nézőként is"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:26
 msgid "Panel enabled only in Race/CTS"
 msgstr "Panel csak Verseny/Ügyességi v.-ben engedélyezett"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:32
 msgid "Status bar"
 msgstr "Állapotsor"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:49
 msgid "Left align"
 msgstr "Balra igazítva"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:53
 msgid "Right align"
 msgstr "Jobbra igazítva"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
 msgid "Inward align"
 msgstr "Befelé"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:37
 msgid "Outward align"
 msgstr "Kifelé"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:41
 msgid "Flip speed/acceleration positions"
 msgstr "Sebesség/gyorsulás pozíciójának cseréje"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
 #: qcsrc/menu/xonotic/dialog_settings_misc.c:29
 msgid "Speed:"
 msgstr "Sebesség (kB/s):"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:46
 msgid "Include vertical speed"
 msgstr "Függőleges sebességet is"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:56
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:57
 msgid "Speed unit:"
 msgstr "Sebesség mértékegysége:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:58
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
 msgid "qu/s"
 msgstr "qu/s"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
 msgid "m/s"
 msgstr "m/s"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
 msgid "km/h"
 msgstr "km/h"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
 msgid "mph"
 msgstr "mph"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:63
 msgid "knots"
 msgstr "csomó"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:64
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:65
 msgid "Show"
 msgstr "Látható"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:67
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:68
 msgid "Top speed"
 msgstr "Csúcssebesség"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:73
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
 msgid "Acceleration:"
 msgstr "Gyorsulás:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:75
 msgid "Include vertical acceleration"
 msgstr "Függőleges sebességet is"
 
@@ -3554,7 +3554,7 @@ msgstr "Függőleges sebességet is"
 msgid "Powerups Panel"
 msgstr "Turbózó Panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:46
 msgid "Flip strength and shield positions"
 msgstr "Sebzésnövelő és Védelmező pozíciójának felcserélése"
 
@@ -3562,16 +3562,16 @@ msgstr "Sebzésnövelő és Védelmező pozíciójának felcserélése"
 msgid "Pressed Keys Panel"
 msgstr "Megnyomott gombok Panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
 msgid "Panel enabled when spectating"
 msgstr "Panel csak nézőként engedélyezett"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:24
 msgid "Panel always enabled"
 msgstr "Panel mindig látható"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:31
 msgid "Forced aspect:"
 msgstr "Kényszerített arány:"
 
@@ -3583,68 +3583,68 @@ msgstr "Időmérő Panel"
 msgid "Radar Panel"
 msgstr "Radar Panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
 msgid "Panel enabled in teamgames"
 msgstr "Panel csapatjátékokban engedélyezve"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:30
 msgid "Radar:"
 msgstr "Radar:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:32
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:43
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:82
+#: 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
 msgid "Alpha:"
 msgstr "Átlátszóság:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:37
 msgid "Rotation:"
 msgstr "Forgatás:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:39
 msgid "Forward"
 msgstr "Előre"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:40
 msgid "West"
 msgstr "Nyugat"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:41
 msgid "South"
 msgstr "Dél"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:41
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:42
 msgid "East"
 msgstr "Kelet"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:43
 msgid "North"
 msgstr "Észak"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:46
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:47
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:63
 msgid "Scale:"
 msgstr "Méret:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:50
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:51
 msgid "Zoom mode:"
 msgstr "Nagyítási mód:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:52
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:53
 msgid "Zoomed in"
 msgstr "Nagyítás"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:53
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:54
 msgid "Zoomed out"
 msgstr "Kicsinyítés"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:54
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:55
 msgid "Always zoomed"
 msgstr "Mindig nagyított"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:55
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:56
 msgid "Never zoomed"
 msgstr "Sohasem nagyított"
 
@@ -3652,23 +3652,23 @@ msgstr "Sohasem nagyított"
 msgid "Score Panel"
 msgstr "Pontjelző panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:23
 msgid "Score:"
 msgstr "Pont:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
 msgid "Rankings:"
 msgstr "Helyezés:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
 msgid "Off"
 msgstr "Kikapcsolva"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
 msgid "And me"
 msgstr "És nekem"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:29
 msgid "Pure"
 msgstr "Tiszta"
 
@@ -3676,11 +3676,11 @@ msgstr "Tiszta"
 msgid "Timer Panel"
 msgstr "Időmérő panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:23
 msgid "Timer:"
 msgstr "Időmérő:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:26
 msgid "Show elapsed time"
 msgstr "Eltelt idő mutatása"
 
@@ -3688,7 +3688,7 @@ msgstr "Eltelt idő mutatása"
 msgid "Vote Panel"
 msgstr "Szavazó panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:23
 msgid "Alpha after voting:"
 msgstr "Átlátszóság szavazat után:"
 
@@ -3696,76 +3696,76 @@ msgstr "Átlátszóság szavazat után:"
 msgid "Weapons Panel"
 msgstr "Fegyver panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:25
 msgid "Fade out after:"
 msgstr "Elhalványulás késleltetése:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:26
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:27
 msgid "Never"
 msgstr "Soha"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:29
 #, c-format
 msgid "%ds"
 msgstr "%ds"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:32
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:33
 msgid "Fade effect:"
 msgstr "Elhalványulás hatása:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
 msgid "EF^None"
 msgstr "EF^Nincs"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:37
 msgid "Alpha"
 msgstr "Halványuló"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
 msgid "Slide"
 msgstr "Becsúszó"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:39
 msgid "EF^Both"
 msgstr "Mindkettő"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:43
 msgid "Weapon icons:"
 msgstr "Fegyver ikonok:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46
 msgid "Show only owned weapons"
 msgstr "Csak a saját iránypontjaim megjelenítése"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:48
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
 msgid "Show weapon ID as:"
 msgstr "A Fegyver ID megjelenítése mint:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
 msgid "SHOWAS^None"
 msgstr "Sehogy"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
 msgid "Number"
 msgstr "Számmal"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:52
 msgid "Bind"
 msgstr "Billentyű"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:54
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
 msgid "Show Accuracy"
 msgstr "Pontosság mutatása"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:56
 msgid "Show Ammo"
 msgstr "Lőszer mutatása"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:58
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:59
 msgid "Ammo bar color:"
 msgstr "Lőszer jelző színe:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:64
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:65
 msgid "Ammo bar alpha:"
 msgstr "Lőszer jelző átlátszósága:"
 
@@ -3773,85 +3773,85 @@ msgstr "Lőszer jelző átlátszósága:"
 msgid "Panel HUD Setup"
 msgstr "HUD panel beállítása"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:21
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:22
 msgid "Panel background defaults:"
 msgstr "Alapértelmezett panel háttér:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:23 qcsrc/menu/xonotic/util.qc:683
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:24 qcsrc/menu/xonotic/util.qc:683
 msgid "Background:"
 msgstr "Háttér:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:25
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:37
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:52
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:686
+#: 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
 msgid "Disable"
 msgstr "Letiltás"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:30
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:691
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:31
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:78 qcsrc/menu/xonotic/util.qc:691
 msgid "Color:"
 msgstr "Szín:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:699
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:36 qcsrc/menu/xonotic/util.qc:699
 msgid "Border size:"
 msgstr "Keret méret:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:50
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:89
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:51
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:90
 msgid "Team color:"
 msgstr "Csapat szín:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:725
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:59 qcsrc/menu/xonotic/util.qc:725
 msgid "Test team color in configure mode"
 msgstr "Csapat szín tesztelés beállítás közben"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:728
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:62 qcsrc/menu/xonotic/util.qc:728
 msgid "Padding:"
 msgstr "Kitöltés:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:68
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:69
 msgid "HUD Dock:"
 msgstr "HUD rögzítők:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:70
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71
 msgid "DOCK^Disabled"
 msgstr "Letiltva"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72
 msgid "DOCK^Small"
 msgstr "Kicsi"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73
 msgid "DOCK^Medium"
 msgstr "Közepes"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:74
 msgid "DOCK^Large"
 msgstr "Nagy"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:96
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:97
 msgid "Grid settings:"
 msgstr "Rács beállítások:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:99
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:100
 msgid "Snap panels to grid"
 msgstr "Panelek rácshoz igazítása"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:102
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:103
 msgid "Grid size:"
 msgstr "Rács méret:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:103
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:104
 msgid "X:"
 msgstr "X:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:109
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:110
 msgid "Y:"
 msgstr "Y:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:117
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:118
 msgid "Exit setup"
 msgstr "Kilépés a beállításokból"
 
@@ -4436,7 +4436,7 @@ msgid "Key:"
 msgstr "Kulcs:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:61
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:19
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:20
 msgid "Model:"
 msgstr "Modell:"
 
@@ -4811,127 +4811,127 @@ msgstr "Nem"
 msgid "Sandbox Tools"
 msgstr "Homokozó eszköztár"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:24
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:25
 msgid "Spawn"
 msgstr "Megjelenítés"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:25
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:26
 msgid "Remove *"
 msgstr "Eltávolítás"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:27
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:28
 msgid "Copy *"
 msgstr "Másolás"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:28
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:29
 msgid "Paste"
 msgstr "Beillesztés"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:30
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:31
 msgid "Bone:"
 msgstr "Csont:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:35
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:36
 msgid "Set * as child"
 msgstr "* hozzárendelése"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:36
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:37
 msgid "Attach to *"
 msgstr "Hozzárendelés *-hoz"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:38
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:39
 msgid "Detach from *"
 msgstr "Leválasztás * -ról"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:41
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:42
 msgid "Visual object properties for *:"
 msgstr "Vizuális tulajdonságok:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:43
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:44
 msgid "Set skin:"
 msgstr "Bőr:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:45
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:46
 msgid "Set alpha:"
 msgstr "Átlátszóság:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:48
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:49
 msgid "Set color main:"
 msgstr "Elsődleges szín:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:50
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:51
 msgid "Set color glow:"
 msgstr "Világító szín:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:54
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:55
 msgid "Set frame:"
 msgstr "Póz:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:58
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:59
 msgid "Physical object properties for *:"
 msgstr "Fizikai tulajdonságok:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:60
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:61
 msgid "Set material:"
 msgstr "Anyagjellemzők:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:66
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:67
 msgid "Set solidity:"
 msgstr "Szilárdság:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:67
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:68
 msgid "Non-solid"
 msgstr "Áthatolható"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:68
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:69
 msgid "Solid"
 msgstr "Szilárd:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:69
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:70
 msgid "Set physics:"
 msgstr "Fizika:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:70
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:71
 msgid "Static"
 msgstr "Statikus"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:71
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:72
 msgid "Movable"
 msgstr "Mozgatható"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:72
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:73
 msgid "Physical"
 msgstr "Fizikai"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:74
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:75
 msgid "Set scale:"
 msgstr "Méret:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:76
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:77
 msgid "Set force:"
 msgstr "Erő:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:80
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:81
 msgid "Claim *"
 msgstr "* birtokba vétele"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:82
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:83
 msgid "* object info"
 msgstr "* objektum információi"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:83
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:84
 msgid "* mesh info"
 msgstr "* alakzat információi"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:84
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:85
 msgid "* attachment info"
 msgstr "* csatolmány információi"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:85
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:86
 msgid "Show help"
 msgstr "Súgó"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:86
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:87
 msgid "* is the object you are facing"
 msgstr "A * az az objektum, amelyre nézel"
 
@@ -5928,27 +5928,27 @@ msgstr "Győztes"
 msgid "Team Selection"
 msgstr "Válassz csapatot!"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:41
+#: qcsrc/menu/xonotic/dialog_teamselect.c:42
 msgid "join 'best' team (auto-select)"
 msgstr "Csatlakozás a 'legjobb' csapathoz (automatikus-választás)"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:45
+#: qcsrc/menu/xonotic/dialog_teamselect.c:46
 msgid "red"
 msgstr "Vörös"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:46
+#: qcsrc/menu/xonotic/dialog_teamselect.c:47
 msgid "blue"
 msgstr "Kék"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:47
+#: qcsrc/menu/xonotic/dialog_teamselect.c:48
 msgid "yellow"
 msgstr "Sárga"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:48
+#: qcsrc/menu/xonotic/dialog_teamselect.c:49
 msgid "pink"
 msgstr "Rózsaszín"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:51
+#: qcsrc/menu/xonotic/dialog_teamselect.c:52
 msgid "spectate"
 msgstr "Nézőként csatlakozok"
 
@@ -6048,7 +6048,12 @@ msgstr ""
 msgid "%s dB"
 msgstr "%s dB"
 
-#: qcsrc/menu/xonotic/slider_resolution.c:72
+#: qcsrc/menu/xonotic/slider_resolution.c:103
+#, c-format
+msgid "%dx%d (%d:%d)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_resolution.c:106
 #, c-format
 msgid "%dx%d"
 msgstr "%dx%d"
index 9a05c7ee2b1b8df9b4f3f5f9e1187ba18de99a21..d9750644a4ffb6f6f73f792e0e0edca665eadda3 100644 (file)
@@ -3,15 +3,17 @@
 # This file is distributed under the same license as the PACKAGE package.
 #
 # Translators:
+# terencehill <piuntn@gmail.com>, 2013
 # Antonio 'terencehill' Piu <piuntn@gmail.com>, 2011-2012
 # Felice Sallustio <fel.sallustio@gmail.com>, 2011
+# terencehill <piuntn@gmail.com>, 2013
 msgid ""
 msgstr ""
 "Project-Id-Version: Xonotic\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-09-13 10:31+0200\n"
-"PO-Revision-Date: 2013-09-13 08:33+0000\n"
-"Last-Translator: divVerent <divVerent@xonotic.org>\n"
+"POT-Creation-Date: 2013-10-03 11:55+0200\n"
+"PO-Revision-Date: 2013-10-03 17:48+0000\n"
+"Last-Translator: terencehill <piuntn@gmail.com>\n"
 "Language-Team: Italian (http://www.transifex.com/projects/p/xonotic/language/"
 "it/)\n"
 "Language: it\n"
@@ -449,7 +451,7 @@ msgstr "nome"
 
 #: qcsrc/client/scoreboard.qc:39
 msgid "SCO^sum"
-msgstr ""
+msgstr "somma"
 
 #: qcsrc/client/scoreboard.qc:40
 msgid "SCO^nick"
@@ -547,7 +549,7 @@ msgstr "^3ping^7                     Tempo di ping\n"
 
 #: qcsrc/client/scoreboard.qc:261
 msgid "^3pl^7                       Packet loss\n"
-msgstr "^3pl^7                       Pacchetti persi\n"
+msgstr "^3pl^7                       Perdita Pacchetti\n"
 
 #: qcsrc/client/scoreboard.qc:262
 msgid "^3kills^7                    Number of kills\n"
@@ -571,7 +573,7 @@ msgstr "^3kd^7                       Rapporto uccisioni-morti\n"
 
 #: qcsrc/client/scoreboard.qc:267
 msgid "^3sum^7                      frags - deaths\n"
-msgstr ""
+msgstr "^3sum^7                      uccisioni - morti\n"
 
 #: qcsrc/client/scoreboard.qc:268
 msgid ""
@@ -1056,19 +1058,22 @@ msgstr "%s sta chiedendo aiuto!"
 #: qcsrc/common/command/generic.qc:31
 #, c-format
 msgid "error: status is %d\n"
-msgstr ""
+msgstr "errore: lo stato è %d\n"
 
 #: qcsrc/common/command/generic.qc:159
 msgid "error creating curl handle\n"
-msgstr ""
+msgstr "errore creando il gestore curl\n"
 
 #: 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"
 
 #: qcsrc/common/command/generic.qc:457
 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"
 
 #: qcsrc/common/counting.qh:5
 #, c-format
@@ -1275,7 +1280,7 @@ msgstr "%d°"
 msgid "@!#%'n Tuba Throwing"
 msgstr "@!#%'n Tuba Throwing"
 
-#: qcsrc/common/mapinfo.qc:1105 qcsrc/menu/xonotic/skinlist.c:166
+#: qcsrc/common/mapinfo.qc:1109 qcsrc/menu/xonotic/skinlist.c:166
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
@@ -1326,7 +1331,7 @@ msgstr "Assalto"
 
 #: qcsrc/common/mapinfo.qh:69
 msgid "Onslaught"
-msgstr ""
+msgstr "Attacco (Onslaught)"
 
 #: qcsrc/common/mapinfo.qh:72
 msgid "Nexball"
@@ -1349,968 +1354,1032 @@ msgstr "^1Note del server:"
 msgid "^7%s (^3%d sec left)"
 msgstr "^7%s (^3%d sec rimasti)"
 
-#: qcsrc/common/notifications.qh:330
+#: qcsrc/common/notifications.qh:342
 #, c-format
 msgid "^BG%s^BG captured the ^TC^TT^BG flag"
-msgstr ""
+msgstr "^BG%s^BG ha catturato la bandiera ^TC^TT^BG"
 
-#: qcsrc/common/notifications.qh:331
+#: qcsrc/common/notifications.qh:343
 #, c-format
 msgid ""
 "^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
 "%s^BG's previous record of ^F2%s^BG seconds"
 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:332
+#: qcsrc/common/notifications.qh:344
 #, c-format
 msgid "^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds"
-msgstr ""
+msgstr "^BG%s^BG ha catturato la bandiera ^TC^TT^BG in ^F1%s^BG secondi"
 
-#: qcsrc/common/notifications.qh:333
+#: qcsrc/common/notifications.qh:345
 #, c-format
 msgid ""
 "^BG%s^BG captured the ^TC^TT^BG flag in ^F2%s^BG seconds, failing to break "
 "^BG%s^BG's previous record of ^F1%s^BG seconds"
 msgstr ""
+"^BG%s^BG ha catturato la bandiera ^TC^TT^BG in ^F2%s^BG secondi, non "
+"riuscendo a battere il precedente record segnato da ^BG%s^BG di ^F1%s^BG "
+"secondi"
 
-#: qcsrc/common/notifications.qh:334
+#: qcsrc/common/notifications.qh:346
 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:335
+#: qcsrc/common/notifications.qh:347
 msgid "^BGThe ^TC^TT^BG flag was destroyed and returned to base"
-msgstr ""
+msgstr "^BGLa bandiera ^TC^TT^BG è stata distrutta ed è riportata alla base"
 
-#: qcsrc/common/notifications.qh:336
+#: qcsrc/common/notifications.qh:348
 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:337
+#: qcsrc/common/notifications.qh:349
 msgid ""
 "^BGThe ^TC^TT^BG flag fell somewhere it couldn't be reached and returned to "
 "base"
 msgstr ""
+"^BGLa bandiera ^TC^TT^BG è caduta dove non poteva essere raggiunta e si è "
+"riportata alla base"
 
-#: qcsrc/common/notifications.qh:338
+#: qcsrc/common/notifications.qh:350
 #, c-format
 msgid ""
 "^BGThe ^TC^TT^BG flag became impatient after ^F1%.2f^BG seconds and returned "
 "itself"
 msgstr ""
+"^BGLa bandiera ^TC^TT^BG è diventata impaziente dopo ^F1%.2f^BG secondi e si "
+"è riportata da sola"
 
-#: qcsrc/common/notifications.qh:339
+#: qcsrc/common/notifications.qh:351
 msgid "^BGThe ^TC^TT^BG flag has returned to the base"
-msgstr ""
+msgstr "^BGLa bandiera ^TC^TT^BG si è riportata alla base"
 
-#: qcsrc/common/notifications.qh:340
+#: qcsrc/common/notifications.qh:352
 #, c-format
 msgid "^BG%s^BG lost the ^TC^TT^BG flag"
-msgstr ""
+msgstr "^BG%s^BG ha perso la bandiera ^TC^TT^BG"
 
-#: qcsrc/common/notifications.qh:341
+#: qcsrc/common/notifications.qh:353
 #, c-format
 msgid "^BG%s^BG got the ^TC^TT^BG flag"
-msgstr ""
+msgstr "^BG%s^BG ha preso la bandiera ^TC^TT^BG"
 
-#: qcsrc/common/notifications.qh:342
+#: qcsrc/common/notifications.qh:354
 #, c-format
 msgid "^BG%s^BG returned the ^TC^TT^BG flag"
-msgstr ""
+msgstr "^BG%s^BG ha riportato la bandiera ^TC^TT^BG"
 
-#: qcsrc/common/notifications.qh:343
+#: qcsrc/common/notifications.qh:355
 #, c-format
 msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 è stato eliminato slealmente da ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:344
+#: qcsrc/common/notifications.qh:356
 #, c-format
 msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 è stato affogato da ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:345
+#: qcsrc/common/notifications.qh:357
 #, c-format
 msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 è stato atterrato da ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:346
+#: qcsrc/common/notifications.qh:358
 #, c-format
 msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 ha ha sentito un pò di caldo dal fuoco di ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:346
+#: qcsrc/common/notifications.qh:358
 #, c-format
 msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 è stato incenerito da ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:347
+#: qcsrc/common/notifications.qh:359
 #, c-format
 msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 è stato cucinato da ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:348
+#: qcsrc/common/notifications.qh:360
 #, c-format
 msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 è stato spazzato via dalla granata di ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:349
+#: qcsrc/common/notifications.qh:361
 #, c-format
 msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 è stato lanciato nello spazio da ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:350
+#: qcsrc/common/notifications.qh:362
 #, c-format
 msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 è stato sciolto da ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:351
+#: qcsrc/common/notifications.qh:363
 #, c-format
 msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 è stato conservato da ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:352
+#: qcsrc/common/notifications.qh:364
 #, 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:352
+#: qcsrc/common/notifications.qh:364
 #, c-format
 msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 è stato telefragato da ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:353
+#: qcsrc/common/notifications.qh:365
 #, c-format
 msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 è morto in un incidente con ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:354
+#: qcsrc/common/notifications.qh:366
 #, c-format
 msgid ""
 "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
 msgstr ""
+"^BG%s%s^K1 è stato coinvolto nello scoppio quando il Bumblebee di ^BG%s^K1 è "
+"esploso%s%s"
 
-#: qcsrc/common/notifications.qh:355
+#: qcsrc/common/notifications.qh:367
 #, 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:356
+#: qcsrc/common/notifications.qh:368
 #, c-format
 msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 è stato schiacciato da ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:357
+#: qcsrc/common/notifications.qh:369
 #, c-format
 msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 ha subito la bomba a grappolo del Raptor di ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:358
+#: qcsrc/common/notifications.qh:370
 #, c-format
 msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 non ha resistito alle bolle viola di ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:359
+#: qcsrc/common/notifications.qh:371
 #, 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:360
+#: qcsrc/common/notifications.qh:372
 #, c-format
 msgid ""
 "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
 msgstr ""
+"^BG%s%s^K1 è stato coinvolto nello scoppio quando lo Spiderbot di ^BG%s^K1 è "
+"esploso%s%s"
 
-#: qcsrc/common/notifications.qh:361
+#: qcsrc/common/notifications.qh:373
 #, c-format
 msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 è stato ridotto a brandelli dallo Spiderbot di ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:362
+#: qcsrc/common/notifications.qh:374
 #, 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:363
+#: qcsrc/common/notifications.qh:375
 #, 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:364
+#: qcsrc/common/notifications.qh:376
 #, c-format
 msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 è stato trangugiato dal Racer di ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:365
+#: qcsrc/common/notifications.qh:377
 #, c-format
 msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 non è riuscito a trovare riparo dal Racer di ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:366
+#: qcsrc/common/notifications.qh:378
 #, c-format
 msgid "^BG%s%s^K1 was thrown into a world of hurt by ^BG%s^K1%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 è stato lanciato in un mondo di dolore da ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:367
+#: qcsrc/common/notifications.qh:379
 #, c-format
 msgid "^BG%s^K1 was moved into the %s%s"
-msgstr ""
+msgstr "^BG%s^K1 è stato spostato nel %s%s"
 
-#: qcsrc/common/notifications.qh:368
+#: qcsrc/common/notifications.qh:380
 #, c-format
 msgid "^BG%s^K1 became enemies with the Lord of Teamplay%s%s"
-msgstr ""
+msgstr "^BG%s^K1 è diventato nemico del Signore del Gioco di Squadra%s%s"
 
-#: qcsrc/common/notifications.qh:369
+#: qcsrc/common/notifications.qh:381
 #, c-format
 msgid "^BG%s^K1 thought they found a nice camping ground%s%s"
-msgstr ""
+msgstr "^BG%s^K1 ha pensato di aver trovato un buon posto per campeggiare%s%s"
 
-#: qcsrc/common/notifications.qh:370
+#: qcsrc/common/notifications.qh:382
 #, c-format
 msgid "^BG%s^K1 unfairly eliminated themself%s%s"
-msgstr ""
+msgstr "^BG%s^K1 si è eliminato slealmente%s%s"
 
-#: qcsrc/common/notifications.qh:371
+#: qcsrc/common/notifications.qh:383
 #, c-format
 msgid "^BG%s^K1 %s^K1%s%s"
-msgstr ""
+msgstr "^BG%s^K1 %s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:372
+#: qcsrc/common/notifications.qh:384
 #, c-format
 msgid "^BG%s^K1 couldn't catch their breath%s%s"
-msgstr ""
+msgstr "^BG%s^K1 non è riuscito a trattenere il fiato%s%s"
 
-#: qcsrc/common/notifications.qh:372
+#: qcsrc/common/notifications.qh:384
 #, c-format
 msgid "^BG%s^K1 was in the water for too long%s%s"
-msgstr ""
+msgstr "^BG%s^K1 è stato in acqua per troppo tempo%s%s"
 
-#: qcsrc/common/notifications.qh:373
+#: qcsrc/common/notifications.qh:385
 #, c-format
 msgid "^BG%s^K1 hit the ground with a bit too much force%s%s"
-msgstr ""
+msgstr "^BG%s^K1 ha colpito il terreno con un pò troppa forza%s%s"
 
-#: qcsrc/common/notifications.qh:373
+#: qcsrc/common/notifications.qh:385
 #, c-format
 msgid "^BG%s^K1 hit the ground with a crunch%s%s"
-msgstr ""
+msgstr "^BG%s^K1 ha colpito il terreno facendolo scricchiolare%s%s"
 
-#: qcsrc/common/notifications.qh:374
+#: qcsrc/common/notifications.qh:386
 #, c-format
 msgid "^BG%s^K1 became a bit too crispy%s%s"
-msgstr ""
+msgstr "^BG%s^K1 è diventato un pò troppo croccante%s%s"
 
-#: qcsrc/common/notifications.qh:374
+#: qcsrc/common/notifications.qh:386
 #, c-format
 msgid "^BG%s^K1 felt a little hot%s%s"
-msgstr ""
+msgstr "^BG%s^K1 ha sentito un pò di caldo%s%s"
 
-#: qcsrc/common/notifications.qh:375
+#: qcsrc/common/notifications.qh:387
 #, c-format
 msgid "^BG%s^K1 died%s%s"
-msgstr ""
+msgstr "^BG%s^K1 è morto%s%s"
 
-#: qcsrc/common/notifications.qh:376
+#: qcsrc/common/notifications.qh:388
 #, c-format
 msgid "^BG%s^K1 found a hot place%s%s"
-msgstr ""
+msgstr "^BG%s^K1 ha trovato un posto caldo%s%s"
 
-#: qcsrc/common/notifications.qh:376
+#: qcsrc/common/notifications.qh:388
 #, c-format
 msgid "^BG%s^K1 turned into hot slag%s%s"
-msgstr ""
+msgstr "^BG%s^K1 è diventato scoria bollente%s%s"
 
-#: qcsrc/common/notifications.qh:377
+#: qcsrc/common/notifications.qh:389
 #, 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:378
+#: qcsrc/common/notifications.qh:390
 #, c-format
 msgid "^BG%s^K1 died%s%s. What's the point of living without ammo?"
-msgstr ""
+msgstr "^BG%s^K1 è morto%s%s. Qual'è il motivo di vivere senza munizioni?"
 
-#: qcsrc/common/notifications.qh:378
+#: qcsrc/common/notifications.qh:390
 #, c-format
 msgid "^BG%s^K1 ran out of ammo%s%s"
-msgstr ""
+msgstr "^BG%s^K1 ha finito le munizioni%s%s"
 
-#: qcsrc/common/notifications.qh:379
+#: qcsrc/common/notifications.qh:391
 #, c-format
 msgid "^BG%s^K1 rotted away%s%s"
-msgstr ""
+msgstr "^BG%s^K1 è marcito%s%s"
 
-#: qcsrc/common/notifications.qh:380
+#: qcsrc/common/notifications.qh:392
 #, c-format
 msgid "^BG%s^K1 became a shooting star%s%s"
-msgstr ""
+msgstr "^BG%s^K1 è diventato una stella cadente%s%s"
 
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:393
 #, c-format
 msgid "^BG%s^K1 was slimed%s%s"
-msgstr ""
+msgstr "^BG%s^K1 è stato sciolto%s%s"
 
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:394
 #, c-format
 msgid "^BG%s^K1 couldn't take it anymore%s%s"
-msgstr ""
+msgstr "^BG%s^K1 non ne ha potuto più%s%s"
 
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:395
 #, c-format
 msgid "^BG%s^K1 is now preserved for centuries to come%s%s"
-msgstr ""
+msgstr "^BG%s^K1 è ora conservato per i secoli a venire%s%s"
 
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:396
 #, c-format
 msgid "^BG%s^K1 switched to the %s%s"
-msgstr ""
+msgstr "^BG%s^K1 ha cambiato alla %s%s"
 
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:397
 #, c-format
 msgid "^BG%s^K1 died in an accident%s%s"
-msgstr ""
+msgstr "^BG%s^K1 è morto in un incidente%s%s"
 
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:398
 #, c-format
 msgid "^BG%s^K1 ran into a turret%s%s"
-msgstr ""
+msgstr "^BG%s^K1 si è imbattuto in una torretta%s%s"
 
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:399
 #, c-format
 msgid "^BG%s^K1 was blasted away by an eWheel turret%s%s"
-msgstr ""
+msgstr "^BG%s^K1 è stato fatto esplodere da una torretta eWheel%s%s"
 
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:400
 #, c-format
 msgid "^BG%s^K1 got caught up in the FLAC turret fire%s%s"
-msgstr ""
+msgstr "^BG%s^K1 è stato preso dal fuoco della torretta FLAC%s%s"
 
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:401
 #, c-format
 msgid "^BG%s^K1 was blasted away by a Hellion turret%s%s"
-msgstr ""
+msgstr "^BG%s^K1 è stato fatto esplodere da una torretta Hellion%s%s"
 
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:402
 #, c-format
 msgid "^BG%s^K1 could not hide from the Hunter turret%s%s"
-msgstr ""
+msgstr "^BG%s^K1 non è riuscito a nascondersi dalla torretta Hunter%s%s"
 
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:403
 #, c-format
 msgid "^BG%s^K1 was riddled full of holes by a Machinegun turret%s%s"
-msgstr ""
+msgstr "^BG%s^K1 è stato crivellato da una torretta Machinegun%s%s"
 
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:404
 #, c-format
 msgid "^BG%s^K1 got turned into smoldering gibs by an MLRS turret%s%s"
-msgstr ""
+msgstr "^BG%s^K1 è stato ridotto in pezzi fumanti da una torretta MLRS%s%s"
 
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:405
 #, c-format
 msgid "^BG%s^K1 was phased out by a turret%s%s"
-msgstr ""
+msgstr "^BG%s^K1 è stato fatto svanire da una torretta%s%s"
 
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:406
 #, 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:395
+#: qcsrc/common/notifications.qh:407
 #, c-format
 msgid "^BG%s^K1 was electrocuted by a Tesla turret%s%s"
-msgstr ""
+msgstr "^BG%s^K1 è stato fulminato da una torretta Tesla%s%s"
 
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:408
 #, 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:397
+#: qcsrc/common/notifications.qh:409
 #, c-format
 msgid "^BG%s^K1 was impaled by a Walker turret%s%s"
-msgstr ""
+msgstr "^BG%s^K1 è stato impalato da una torretta Walker%s%s"
 
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:410
 #, c-format
 msgid "^BG%s^K1 was blasted away by a Walker turret%s%s"
-msgstr ""
+msgstr "^BG%s^K1 è stato fatto esplodere da una torretta Walker%s%s"
 
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:411
 #, 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:400
+#: qcsrc/common/notifications.qh:412
 #, c-format
 msgid "^BG%s^K1 was crushed by a vehicle%s%s"
-msgstr ""
+msgstr "^BG%s^K1 è stato schiacciato da un veicolo%s%s"
 
-#: qcsrc/common/notifications.qh:401
+#: qcsrc/common/notifications.qh:413
 #, c-format
 msgid "^BG%s^K1 was caught in a Raptor cluster bomb%s%s"
-msgstr ""
+msgstr "^BG%s^K1 è stato preso dalla bomba a grappolo di un Raptor%s%s"
 
-#: qcsrc/common/notifications.qh:402
+#: qcsrc/common/notifications.qh:414
 #, 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:403
+#: qcsrc/common/notifications.qh:415
 #, 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:404
+#: qcsrc/common/notifications.qh:416
 #, 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:405
+#: qcsrc/common/notifications.qh:417
 #, 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:406
+#: qcsrc/common/notifications.qh:418
 #, c-format
 msgid "^BG%s^K1 couldn't find shelter from a Racer rocket%s%s"
-msgstr ""
+msgstr "^BG%s^K1 non è riuscito a trovare riparo dal razzo di un Racer%s%s"
 
-#: qcsrc/common/notifications.qh:407
+#: qcsrc/common/notifications.qh:419
 #, c-format
 msgid "^BG%s^K1 was in the wrong place%s%s"
-msgstr ""
+msgstr "^BG%s^K1 era nel posto sbagliato%s%s"
 
-#: qcsrc/common/notifications.qh:408
+#: qcsrc/common/notifications.qh:420
 #, c-format
 msgid "^BG%s^K1 was betrayed by ^BG%s^K1%s%s"
-msgstr ""
+msgstr "^BG%s^K1 è stato tradito da ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:409
+#: qcsrc/common/notifications.qh:421
 #, c-format
 msgid "^BG%s^K1 was frozen by ^BG%s"
-msgstr ""
+msgstr "^BG%s^K1 è stato congelato da ^BG%s"
 
-#: qcsrc/common/notifications.qh:410
+#: qcsrc/common/notifications.qh:422
 #, c-format
 msgid "^BG%s^K3 was revived by ^BG%s"
-msgstr ""
+msgstr "^BG%s^K3 è stato risvegliato da ^BG%s"
 
-#: qcsrc/common/notifications.qh:411
+#: qcsrc/common/notifications.qh:423
 #, c-format
 msgid "^BG%s^K3 was revived by falling"
-msgstr ""
+msgstr "^BG%s^K3 è stato risvegliato grazie alla caduta"
 
-#: qcsrc/common/notifications.qh:412
+#: qcsrc/common/notifications.qh:424
 #, c-format
 msgid "^BG%s^K3 was automatically revived after %s second(s)"
-msgstr ""
+msgstr "^BG%s^K1 è stato risvegliato automaticamente dopo %s secondi"
 
-#: qcsrc/common/notifications.qh:413 qcsrc/common/notifications.qh:594
+#: qcsrc/common/notifications.qh:425 qcsrc/common/notifications.qh:612
 msgid "^TC^TT^BG team wins the round"
 msgstr "^BGLa squadra ^TC^TT^BG vince il round"
 
-#: qcsrc/common/notifications.qh:414 qcsrc/common/notifications.qh:595
+#: qcsrc/common/notifications.qh:426 qcsrc/common/notifications.qh:613
 #, c-format
 msgid "^BG%s^BG wins the round"
 msgstr "^BG%s^BG vince il round"
 
-#: qcsrc/common/notifications.qh:415 qcsrc/common/notifications.qh:524
+#: qcsrc/common/notifications.qh:427 qcsrc/common/notifications.qh:542
 msgid "^BGRound tied"
 msgstr "^BGRound pari"
 
-#: qcsrc/common/notifications.qh:416 qcsrc/common/notifications.qh:525
+#: qcsrc/common/notifications.qh:428 qcsrc/common/notifications.qh:543
 msgid "^BGRound over, there's no winner"
 msgstr "^BGIl round è finito, non c'è nessun vincitore"
 
-#: qcsrc/common/notifications.qh:417
+#: qcsrc/common/notifications.qh:429
 #, c-format
 msgid "^BG%s^K1 froze themself"
-msgstr ""
+msgstr "^BG%s^K1 si è congelato da solo"
 
-#: qcsrc/common/notifications.qh:418
+#: qcsrc/common/notifications.qh:430
 #, c-format
 msgid "^BGGodmode saved you %s units of damage, cheater!"
-msgstr ""
+msgstr "^BGLa modalità Dio ti ha evitato %s unità di danno, imbroglione!"
 
-#: qcsrc/common/notifications.qh:419 qcsrc/common/notifications.qh:598
+#: qcsrc/common/notifications.qh:431 qcsrc/common/notifications.qh:616
 #, c-format
 msgid "^BGYou do not have the ^F1%s"
 msgstr "^BGTu non hai la/il ^F1%s"
 
-#: qcsrc/common/notifications.qh:420 qcsrc/common/notifications.qh:599
+#: qcsrc/common/notifications.qh:432 qcsrc/common/notifications.qh:617
 #, c-format
 msgid "^BGYou dropped the ^F1%s^BG%s"
 msgstr "^BGHai lasciato la/il ^F1%s^BG%s"
 
-#: qcsrc/common/notifications.qh:421 qcsrc/common/notifications.qh:600
+#: qcsrc/common/notifications.qh:433 qcsrc/common/notifications.qh:618
 #, c-format
 msgid "^BGYou got the ^F1%s"
 msgstr "^BGHai preso la/il ^F1%s"
 
-#: qcsrc/common/notifications.qh:422 qcsrc/common/notifications.qh:601
+#: qcsrc/common/notifications.qh:434 qcsrc/common/notifications.qh:619
 #, 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:423 qcsrc/common/notifications.qh:602
+#: qcsrc/common/notifications.qh:435 qcsrc/common/notifications.qh:620
 #, c-format
 msgid "^F1%s %s^BG is unable to fire, but its ^F1%s^BG can"
-msgstr "^BGIl ^F1%s %s^BG non può sparare, ma il suo ^F1%s^BG può"
+msgstr "^F1Il ^F1%s %s^BG non può sparare, ma il suo ^F1%s^BG può"
 
-#: qcsrc/common/notifications.qh:424 qcsrc/common/notifications.qh:603
+#: qcsrc/common/notifications.qh:436 qcsrc/common/notifications.qh:621
 #, 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:425
+#: qcsrc/common/notifications.qh:437
 #, c-format
 msgid "^BG%s^F3 connected%s"
-msgstr ""
+msgstr "^BG%s^F3 si è connesso%s"
 
-#: qcsrc/common/notifications.qh:426
+#: qcsrc/common/notifications.qh:438
 #, c-format
 msgid "^BG%s^F3 connected and joined the ^TC^TT team"
-msgstr ""
+msgstr "^BG%s^F3 si è connesso ed è entrato nella squadra ^TC^TT"
 
-#: qcsrc/common/notifications.qh:427
+#: qcsrc/common/notifications.qh:439
 #, c-format
 msgid "^BG%s^F3 is now playing"
-msgstr ""
+msgstr "^BG%s^F3 sta giocando adesso"
 
-#: qcsrc/common/notifications.qh:428 qcsrc/common/notifications.qh:606
+#: qcsrc/common/notifications.qh:440 qcsrc/common/notifications.qh:624
 #, c-format
 msgid "^BG%s^BG has dropped the ball!"
 msgstr "^BG%s^BG ha lasciato la palla!"
 
-#: qcsrc/common/notifications.qh:429 qcsrc/common/notifications.qh:607
+#: qcsrc/common/notifications.qh:441 qcsrc/common/notifications.qh:625
 #, c-format
 msgid "^BG%s^BG has picked up the ball!"
 msgstr "^BG%s^BG ha raccolto la palla!"
 
-#: qcsrc/common/notifications.qh:430
+#: qcsrc/common/notifications.qh:442
 #, c-format
 msgid "^BG%s^BG captured the keys for the ^TC^TT team"
-msgstr ""
+msgstr "^BG%s^BG ha catturato le chiavi per la squadra ^TC^TT"
 
-#: qcsrc/common/notifications.qh:431
+#: qcsrc/common/notifications.qh:443
 #, c-format
 msgid "^BG%s^BG dropped the ^TC^TT Key"
-msgstr ""
+msgstr "^BG%s^BG ha lasciato la Chiave ^TC^TT"
 
-#: qcsrc/common/notifications.qh:432
+#: qcsrc/common/notifications.qh:444
 #, c-format
 msgid "^BG%s^BG lost the ^TC^TT Key"
-msgstr ""
+msgstr "^BG%s^BG ha perso la Chiave ^TC^TT"
 
-#: qcsrc/common/notifications.qh:433
+#: qcsrc/common/notifications.qh:445
 #, c-format
 msgid "^BG%s^BG picked up the ^TC^TT Key"
-msgstr ""
+msgstr "^BG%s^BG ha preso la Chiave ^TC^TT"
 
-#: qcsrc/common/notifications.qh:434
+#: qcsrc/common/notifications.qh:446
 #, c-format
 msgid "^BG%s^F3 forfeited"
-msgstr ""
+msgstr "^BG%s^BG ha abbandonato"
 
-#: qcsrc/common/notifications.qh:435
+#: qcsrc/common/notifications.qh:447
 #, c-format
 msgid "^BG%s^F3 has no more lives left"
-msgstr ""
+msgstr "^BG%s^F3 non ha più vite rimaste"
 
-#: qcsrc/common/notifications.qh:436
+#: qcsrc/common/notifications.qh:448
 #, c-format
 msgid "^BG%s^K1 picked up Invisibility"
-msgstr ""
+msgstr "^BG%s^K1 ha preso Invisibilità"
 
-#: qcsrc/common/notifications.qh:437
+#: qcsrc/common/notifications.qh:449
 #, c-format
 msgid "^BG%s^K1 picked up Shield"
-msgstr ""
+msgstr "^BG%s^K1 ha preso Scudo"
 
-#: qcsrc/common/notifications.qh:438
+#: qcsrc/common/notifications.qh:450
 #, c-format
 msgid "^BG%s^K1 picked up Speed"
-msgstr ""
+msgstr "^BG%s^K1 ha preso Velocità"
 
-#: qcsrc/common/notifications.qh:439
+#: qcsrc/common/notifications.qh:451
 #, c-format
 msgid "^BG%s^K1 picked up Strength"
-msgstr ""
+msgstr "^BG%s^K1 ha preso Forza"
 
-#: qcsrc/common/notifications.qh:440
+#: qcsrc/common/notifications.qh:452
 #, c-format
 msgid "^BG%s^F3 disconnected"
-msgstr ""
+msgstr "^BG%s^F3 si è disconnesso"
 
-#: qcsrc/common/notifications.qh:441
+#: qcsrc/common/notifications.qh:453
 #, c-format
 msgid "^BG%s^F3 was kicked for idling"
-msgstr ""
+msgstr "^BG%s^F3 è stato buttato fuori perchè non faceva niente"
 
-#: qcsrc/common/notifications.qh:442
+#: qcsrc/common/notifications.qh:454
 msgid ""
 "^F2You were kicked from the server because you are a spectator and "
 "spectators aren't allowed at the moment."
 msgstr ""
+"^F2Sei stato buttato fuori dal server perché sei spettatore e gli spettatori "
+"non sono permessi al momento."
 
-#: qcsrc/common/notifications.qh:443
+#: qcsrc/common/notifications.qh:455
 #, c-format
 msgid "^BG%s^F3 is now spectating"
-msgstr ""
+msgstr "^BG%s^F3 sta ora osservando"
 
-#: qcsrc/common/notifications.qh:444
+#: qcsrc/common/notifications.qh:456
 #, c-format
 msgid "^BG%s^BG has abandoned the race"
-msgstr ""
+msgstr "^BG%s^BG ha abbandonato la gara"
 
-#: qcsrc/common/notifications.qh:445
+#: qcsrc/common/notifications.qh:457
 #, 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:446
+#: qcsrc/common/notifications.qh:458
 #, 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:447
+#: qcsrc/common/notifications.qh:459
 #, c-format
 msgid "^BG%s^BG has finished the race"
-msgstr ""
+msgstr "^BG%s^BG ha completato la gara"
 
-#: qcsrc/common/notifications.qh:448
+#: qcsrc/common/notifications.qh:460
 #, c-format
 msgid "^BG%s^BG broke %s^BG's %s%s^BG place record with %s%s %s"
-msgstr ""
+msgstr "^BG%s^BG ha battuto il record di %s^BG del %s%s^BG posto con %s%s %s"
 
-#: qcsrc/common/notifications.qh:449
+#: qcsrc/common/notifications.qh:461
 #, c-format
 msgid "^BG%s^BG improved their %s%s^BG place record with %s%s %s"
-msgstr ""
+msgstr "^BG%s^BG ha migliorato il proprio record al %s%s^BG posto con %s%s %s"
 
-#: qcsrc/common/notifications.qh:450
+#: qcsrc/common/notifications.qh:462
 #, c-format
 msgid ""
 "^BG%s^BG scored a new record with ^F2%s^BG, but unfortunately lacks a UID "
 "and will be lost."
 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:451
+#: qcsrc/common/notifications.qh:463
 #, c-format
 msgid "^BG%s^BG set the %s%s^BG place record with %s%s"
-msgstr ""
+msgstr "^BG%s^BG ha stabilito il record del %s%s^BG posto con %s%s"
 
-#: qcsrc/common/notifications.qh:452
+#: qcsrc/common/notifications.qh:464
 msgid "^TC^TT ^BGteam scores!"
-msgstr ""
+msgstr "^BGLa squadra ^TC^TT ^BGsegna!"
 
-#: qcsrc/common/notifications.qh:453
+#: qcsrc/common/notifications.qh:465
 #, 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!"
 
-#: qcsrc/common/notifications.qh:454
+#: qcsrc/common/notifications.qh:466
 #, c-format
 msgid "^BG%s^K1 picked up a Superweapon"
-msgstr ""
+msgstr "^BG%s^K1 ha preso una Superarma"
 
-#: qcsrc/common/notifications.qh:455
+#: qcsrc/common/notifications.qh:467
 #, c-format
 msgid ""
 "^F4NOTE: ^BGThe server is running ^F1Xonotic %s (beta)^BG, you have "
 "^F2Xonotic %s"
 msgstr ""
+"^F4NOTA: ^BGIl server sta eseguendo ^F1Xonotic %s (beta)^BG, tu hai "
+"^F2Xonotic %s"
 
-#: qcsrc/common/notifications.qh:456
+#: qcsrc/common/notifications.qh:468
 #, 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:457
+#: qcsrc/common/notifications.qh:469
 #, c-format
 msgid ""
 "^F4NOTE: ^F1Xonotic %s^BG is out, and you still have ^F2Xonotic %s^BG - get "
 "the update from ^F3http://www.xonotic.org/^BG!"
 msgstr ""
+"^F4NOTA: ^F1Xonotic %s^BG è uscito, e tu hai ancora ^F2Xonotic %s^BG - "
+"aggiornalo da ^F3http://www.xonotic.org/^BG!"
 
-#: qcsrc/common/notifications.qh:458
+#: qcsrc/common/notifications.qh:470
 #, c-format
 msgid "^F3SVQC Build information: ^F4%s"
-msgstr ""
+msgstr "^F3Informazioni sulla versione SVQC: ^F4%s"
 
-#: qcsrc/common/notifications.qh:459
+#: qcsrc/common/notifications.qh:471
 #, c-format
 msgid ""
 "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Accordeon%s%s"
 msgstr ""
+"^BG%s%s^K1 è morto nella gran esibizione di ^BG%s^K1 con la @!#%%'n "
+"Fisarmonica%s%s"
 
-#: qcsrc/common/notifications.qh:460
+#: qcsrc/common/notifications.qh:472
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Accordeon%s%s"
-msgstr ""
+msgstr "^BG%s^K1 si è fatto male alle orecchie con la @!#%%'n Fisarmonica%s%s"
 
-#: qcsrc/common/notifications.qh:461
+#: qcsrc/common/notifications.qh:473
 #, c-format
 msgid "^BG%s%s^K1 felt the strong pull of ^BG%s^K1's Crylink%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 ha sentito la forte trazione del Crylink di ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:462
+#: qcsrc/common/notifications.qh:474
 #, c-format
 msgid "^BG%s^K1 felt the strong pull of their Crylink%s%s"
-msgstr ""
+msgstr "^BG%s^K1 ha sentito la forte trazione del proprio Crylink%s%s"
 
-#: qcsrc/common/notifications.qh:463
+#: qcsrc/common/notifications.qh:475
 #, 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:464
+#: qcsrc/common/notifications.qh:476
 #, 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:465
+#: qcsrc/common/notifications.qh:477
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Electro plasma%s%s"
 msgstr ""
+"^BG%s%s^K1 si è avvicinato troppo al plasma dell'Electro di ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:466
+#: qcsrc/common/notifications.qh:478
 #, c-format
 msgid "^BG%s^K1 played with Electro plasma%s%s"
-msgstr ""
+msgstr "^BG%s^K1 ha giocato con il plasma dell'Electro%s%s"
 
-#: qcsrc/common/notifications.qh:467
+#: qcsrc/common/notifications.qh:479
 #, c-format
 msgid "^BG%s^K1 could not remember where they put their Electro plasma%s%s"
-msgstr ""
+msgstr "^BG%s^K1 non si è ricordato dove aveva messo l'Electro plasma%s%s"
 
-#: qcsrc/common/notifications.qh:468
+#: qcsrc/common/notifications.qh:480
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's fireball%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 si è avvicinato troppo alla palla di fuoco di ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:469
+#: qcsrc/common/notifications.qh:481
 #, c-format
 msgid "^BG%s%s^K1 got burnt by ^BG%s^K1's firemine%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 è stato bruciato dalla mina di fuoco di ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:470
+#: qcsrc/common/notifications.qh:482
 #, c-format
 msgid "^BG%s^K1 should have used a smaller gun%s%s"
-msgstr ""
+msgstr "^BG%s^K1 avrebbe dovuto usare un'arma più piccola%s%s"
 
-#: qcsrc/common/notifications.qh:471
+#: qcsrc/common/notifications.qh:483
 #, c-format
 msgid "^BG%s^K1 forgot about their firemine%s%s"
-msgstr ""
+msgstr "^BG%s^K1 si è dimenticato della propria mina di fuoco%s%s"
 
-#: qcsrc/common/notifications.qh:472
+#: qcsrc/common/notifications.qh:484
 #, 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:473
+#: qcsrc/common/notifications.qh:485
 #, 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:474
+#: qcsrc/common/notifications.qh:486
 #, c-format
 msgid "^BG%s^K1 played with tiny Hagar rockets%s%s"
-msgstr ""
+msgstr "^BG%s^K1 ha giocato con i piccoli razzi dell'Hagar%s%s"
 
-#: qcsrc/common/notifications.qh:475
+#: qcsrc/common/notifications.qh:487
 #, c-format
 msgid "^BG%s%s^K1 was cut down with ^BG%s^K1's HLAC%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 è stato abbattuto con l'HLAC di ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:476
+#: qcsrc/common/notifications.qh:488
 #, c-format
 msgid "^BG%s^K1 got a little jumpy with their HLAC%s%s"
-msgstr ""
+msgstr "^BG%s^K1 è diventato un pò sovraeccitato con il proprio HLAC%s%s"
 
-#: qcsrc/common/notifications.qh:477
+#: qcsrc/common/notifications.qh:489
 #, 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:478
+#: qcsrc/common/notifications.qh:490
 #, c-format
 msgid ""
 "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Klein Bottle%s%s"
 msgstr ""
+"^BG%s%s^K1 è morto nella gran esibizione di ^BG%s^K1 con la @!#%%'n Klein "
+"Bottle%s%s"
 
-#: qcsrc/common/notifications.qh:479
+#: qcsrc/common/notifications.qh:491
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Klein Bottle%s%s"
-msgstr ""
+msgstr "^BG%s^K1 si è fatto male alle orecchie con la @!#%%'n Klein Bottle%s%s"
 
-#: qcsrc/common/notifications.qh:480
+#: qcsrc/common/notifications.qh:492
 #, c-format
 msgid "^BG%s%s^K1 was shot to death by ^BG%s^K1's Laser%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 è stato colpito a morte dal Laser di ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:481
+#: qcsrc/common/notifications.qh:493
 #, c-format
 msgid "^BG%s^K1 shot themself to hell with their Laser%s%s"
-msgstr ""
+msgstr "^BG%s^K1 si è spedito all'inferno col suo stesso Laser%s%s"
 
-#: qcsrc/common/notifications.qh:482
+#: qcsrc/common/notifications.qh:494
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's mine%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 si è avvicinato troppo alla mina di ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:483
+#: qcsrc/common/notifications.qh:495
 #, c-format
 msgid "^BG%s^K1 forgot about their mine%s%s"
-msgstr ""
+msgstr "^BG%s^K1 si è dimenticato della propria mina%s%s"
 
-#: qcsrc/common/notifications.qh:484
+#: qcsrc/common/notifications.qh:496
 #, c-format
 msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Minstanex%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 è stato vaporizzato dal Minstanex di ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:485
+#: qcsrc/common/notifications.qh:497
 #, 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:486
+#: qcsrc/common/notifications.qh:498
 #, c-format
 msgid "^BG%s%s^K1 ate ^BG%s^K1's Mortar grenade%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 ha mangiato la granata del Mortar di ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:487
+#: qcsrc/common/notifications.qh:499
 #, c-format
 msgid "^BG%s^K1 didn't see their own Mortar grenade%s%s"
-msgstr ""
+msgstr "^BG%s^K1 non ha visto la granata del suo Mortar%s%s"
 
-#: qcsrc/common/notifications.qh:488
+#: qcsrc/common/notifications.qh:500
 #, c-format
 msgid "^BG%s^K1 blew themself up with their own Mortar%s%s"
-msgstr ""
+msgstr "^BG%s^K1 si è fatto esplodere con il proprio Mortar%s%s"
 
-#: qcsrc/common/notifications.qh:489
+#: qcsrc/common/notifications.qh:501
 #, c-format
 msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Nex%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 è stato vaporizzato dal Nex di ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:490
+#: qcsrc/common/notifications.qh:502
 #, c-format
 msgid "^BG%s%s^K1 was sniped with a Rifle by ^BG%s^K1%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 è stato cecchinato con un Rifle da ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:491
+#: qcsrc/common/notifications.qh:503
 #, 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:492
+#: qcsrc/common/notifications.qh:504
 #, 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:493
+#: qcsrc/common/notifications.qh:505
 #, c-format
 msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 non è riuscito a nascondersi dal Rifle di ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:494
+#: qcsrc/common/notifications.qh:506
 #, c-format
 msgid "^BG%s%s^K1 ate ^BG%s^K1's rocket%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 ha mangiato il razzo di ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:495
+#: qcsrc/common/notifications.qh:507
 #, c-format
 msgid "^BG%s%s^K1 got too close ^BG%s^K1's rocket%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 si è avvicinato troppo al razzo di ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:496
+#: qcsrc/common/notifications.qh:508
 #, c-format
 msgid "^BG%s^K1 blew themself up with their Rocketlauncher%s%s"
-msgstr ""
+msgstr "^BG%s^K1 si è fatto esplodere con il proprio Rocketlauncher%s%s"
 
-#: qcsrc/common/notifications.qh:497
+#: qcsrc/common/notifications.qh:509
 #, 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:498
+#: qcsrc/common/notifications.qh:510
 #, c-format
 msgid "^BG%s%s^K1 was tagged by ^BG%s^K1's Seeker%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 è stato puntato dal Seeker di ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:499
+#: qcsrc/common/notifications.qh:511
 #, c-format
 msgid "^BG%s^K1 played with tiny Seeker rockets%s%s"
-msgstr ""
+msgstr "^BG%s^K1 ha giocato con i piccoli razzi del Seeker%s%s"
 
-#: qcsrc/common/notifications.qh:500
+#: qcsrc/common/notifications.qh:512
 #, c-format
 msgid "^BG%s%s^K1 was gunned down by ^BG%s^K1's Shotgun%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 è stato abbattuto dalla Shotgun di ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:501
+#: qcsrc/common/notifications.qh:513
 #, c-format
 msgid "^BG%s%s^K1 slapped ^BG%s^K1 around a bit with a large Shotgun%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 ha schiaffeggiato ^BG%s^K1 con una grossa Shotgun%s%s"
 
-#: qcsrc/common/notifications.qh:502
+#: qcsrc/common/notifications.qh:514
 #, c-format
 msgid "^BG%s^K1 is now thinking with portals%s%s"
-msgstr ""
+msgstr "^BG%s^K1 sta pensando in termini di portali%s%s"
 
-#: qcsrc/common/notifications.qh:503
+#: qcsrc/common/notifications.qh:515
 #, 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:504
+#: qcsrc/common/notifications.qh:516
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Tuba%s%s"
-msgstr ""
+msgstr "^BG%s^K1 si è fatto male alle orecchie con la @!#%%'n Tuba%s%s"
 
-#: qcsrc/common/notifications.qh:505
+#: qcsrc/common/notifications.qh:517
 #, c-format
 msgid "^BG%s%s^K1 was sniped by ^BG%s^K1's Machine Gun%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 è stato cecchinato dalla Machine Gun di ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:506
+#: qcsrc/common/notifications.qh:518
 #, c-format
 msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
-msgstr ""
+msgstr "^BG%s%s^K1 è stato crivellato dalla Machine gun di ^BG%s^K1%s%s"
 
-#: qcsrc/common/notifications.qh:518
+#: qcsrc/common/notifications.qh:536
 msgid "^BGYou are attacking!"
 msgstr "^BGStai attaccando!"
 
-#: qcsrc/common/notifications.qh:519
+#: qcsrc/common/notifications.qh:537
 msgid "^BGYou are defending!"
 msgstr "^BGStai difendendo!"
 
-#: qcsrc/common/notifications.qh:520
+#: qcsrc/common/notifications.qh:538
 msgid "^F4Begin!"
 msgstr "^F4Via!"
 
-#: qcsrc/common/notifications.qh:521
+#: qcsrc/common/notifications.qh:539
 msgid "^F4Game starts in ^COUNT"
 msgstr "^F4La partita inizia in ^COUNT"
 
-#: qcsrc/common/notifications.qh:522
+#: qcsrc/common/notifications.qh:540
 msgid "^F4Round starts in ^COUNT"
 msgstr "^F4Il round inizia in ^COUNT"
 
-#: qcsrc/common/notifications.qh:523
+#: qcsrc/common/notifications.qh:541
 msgid "^F4Round cannot start"
 msgstr "^F4Il round non può iniziare"
 
-#: qcsrc/common/notifications.qh:526
+#: qcsrc/common/notifications.qh:544
 msgid "^F2Don't camp!"
 msgstr "^F2Non campeggiare!"
 
-#: qcsrc/common/notifications.qh:527
+#: qcsrc/common/notifications.qh:545
 msgid ""
 "^BGYou are now free.\n"
 "^BGFeel free to ^F2try to capture^BG the flag again\n"
@@ -2320,7 +2389,7 @@ msgstr ""
 "^BGPuoi ^F2riprovare a catturare^BG la bandiera\n"
 "^BGse credi di potercela fare."
 
-#: qcsrc/common/notifications.qh:528
+#: qcsrc/common/notifications.qh:546
 msgid ""
 "^BGYou are now ^F1shielded^BG from the flag\n"
 "^BGfor ^F2too many unsuccessful attempts^BG to capture.\n"
@@ -2330,165 +2399,165 @@ msgstr ""
 "^BGpoichè ^F2hai tentato troppe volte^BG di catturarla.\n"
 "^BGSegna qualche punto in difesa prima di riprovare la cattura."
 
-#: qcsrc/common/notifications.qh:529
+#: qcsrc/common/notifications.qh:547
 msgid "^BGYou captured the ^TC^TT^BG flag!"
 msgstr "^BGHai catturato la bandiera ^TC^TT^BG!"
 
-#: qcsrc/common/notifications.qh:530
+#: qcsrc/common/notifications.qh:548
 #, 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:531
+#: qcsrc/common/notifications.qh:549
 #, 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:532
+#: qcsrc/common/notifications.qh:550
 #, 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:533
+#: qcsrc/common/notifications.qh:551
 #, 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:534
+#: qcsrc/common/notifications.qh:552
 #, 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:535
+#: qcsrc/common/notifications.qh:553
 #, 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:536
+#: qcsrc/common/notifications.qh:554
 msgid "^BGYou got the ^TC^TT^BG flag!"
 msgstr "^BGHai preso la bandiera ^TC^TT^BG!"
 
-#: qcsrc/common/notifications.qh:537
+#: qcsrc/common/notifications.qh:555
 #, c-format
 msgid "^BGThe %senemy^BG got your flag! Retrieve it!"
 msgstr "^BGIl %snemico^BG ha la tua bandiera! Recuperala!"
 
-#: qcsrc/common/notifications.qh:538
+#: qcsrc/common/notifications.qh:556
 #, 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:539
+#: qcsrc/common/notifications.qh:557
 #, 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:540
+#: qcsrc/common/notifications.qh:558
 #, 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:541
+#: qcsrc/common/notifications.qh:559
 msgid "^BGYou returned the ^TC^TT^BG flag!"
 msgstr "^BGHai riportato la bandiera ^TC^TT^BG!"
 
-#: qcsrc/common/notifications.qh:542
+#: qcsrc/common/notifications.qh:560
 msgid "^BGStalemate! Enemies can now see you on radar!"
 msgstr "^BGStallo! I nemici ora possono vederti nel radar!"
 
-#: qcsrc/common/notifications.qh:543
+#: qcsrc/common/notifications.qh:561
 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:544
+#: qcsrc/common/notifications.qh:562
 #, c-format
 msgid "^K3%sYou fragged ^BG%s"
 msgstr "^K3%sHai fraggato ^BG%s"
 
-#: qcsrc/common/notifications.qh:544
+#: qcsrc/common/notifications.qh:562
 #, c-format
 msgid "^K3%sYou scored against ^BG%s"
 msgstr "^K3%sHai segnato contro ^BG%s"
 
-#: qcsrc/common/notifications.qh:545
+#: qcsrc/common/notifications.qh:563
 #, c-format
 msgid "^K1%sYou were fragged by ^BG%s"
 msgstr "^K1%sSei stato fraggato da ^BG%s"
 
-#: qcsrc/common/notifications.qh:545
+#: qcsrc/common/notifications.qh:563
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s"
 msgstr "^K1%sTi ha segnato ^BG%s"
 
-#: qcsrc/common/notifications.qh:546
+#: qcsrc/common/notifications.qh:564
 #, 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:546
+#: qcsrc/common/notifications.qh:564
 #, 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:547
+#: qcsrc/common/notifications.qh:565
 #, c-format
 msgid "^K3%sYou fragged ^BG%s^BG%s"
 msgstr "^K3%sHai fraggato ^BG%s^BG%s"
 
-#: qcsrc/common/notifications.qh:547
+#: qcsrc/common/notifications.qh:565
 #, c-format
 msgid "^K3%sYou scored against ^BG%s^BG%s"
 msgstr "^K3%sHai segnato contro ^BG%s^BG%s"
 
-#: qcsrc/common/notifications.qh:548
+#: qcsrc/common/notifications.qh:566
 #, 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:548
+#: qcsrc/common/notifications.qh:566
 #, c-format
 msgid "^K1%sYou typefragged ^BG%s"
 msgstr "^K1%sHai fraggato ^BG%s mentre scriveva (typefrag)"
 
-#: qcsrc/common/notifications.qh:549
+#: qcsrc/common/notifications.qh:567
 #, 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:549
+#: qcsrc/common/notifications.qh:567
 #, 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:550
+#: qcsrc/common/notifications.qh:568
 #, 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:550
+#: qcsrc/common/notifications.qh:568
 #, 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:551
+#: qcsrc/common/notifications.qh:569
 #, 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:551
+#: qcsrc/common/notifications.qh:569
 #, 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:552
+#: qcsrc/common/notifications.qh:570
 msgid "^BGPress ^F2DROPWEAPON^BG again to toss the nade!"
-msgstr ""
+msgstr "^BGPremi ^F2DROPWEAPON^BG di nuovo per lanciare la granata!"
 
-#: qcsrc/common/notifications.qh:553
+#: qcsrc/common/notifications.qh:571
 #, c-format
 msgid ""
 "^BGYou have been moved into a different team\n"
@@ -2497,193 +2566,193 @@ msgstr ""
 "^BGSei stato spostato in un'altra squadra\n"
 "Ora sei in: %s"
 
-#: qcsrc/common/notifications.qh:554
+#: qcsrc/common/notifications.qh:572
 msgid "^K1Don't go against your team mates!"
 msgstr "^K1Non andare contro i tuoi compagni di squadra!"
 
-#: qcsrc/common/notifications.qh:554
+#: qcsrc/common/notifications.qh:572
 msgid "^K1Don't shoot your team mates!"
 msgstr "^K1Non sparare ai tuoi compagni di squadra!"
 
-#: qcsrc/common/notifications.qh:555
+#: qcsrc/common/notifications.qh:573
 msgid "^K1Die camper!"
 msgstr "^K1Muori camper!"
 
-#: qcsrc/common/notifications.qh:555
+#: qcsrc/common/notifications.qh:573
 msgid "^K1Reconsider your tactics, camper!"
 msgstr "^K1Riconsidera le tue tattiche, camper!"
 
-#: qcsrc/common/notifications.qh:556
+#: qcsrc/common/notifications.qh:574
 msgid "^K1You unfairly eliminated yourself!"
 msgstr "^K1Ti sei eliminato slealmente!"
 
-#: qcsrc/common/notifications.qh:557
+#: qcsrc/common/notifications.qh:575
 #, c-format
 msgid "^K1You were %s"
 msgstr "^K1Sei stato %s"
 
-#: qcsrc/common/notifications.qh:558
+#: qcsrc/common/notifications.qh:576
 msgid "^K1You couldn't catch your breath!"
 msgstr "^K1Non sei riuscito a trattenere il fiato!"
 
-#: qcsrc/common/notifications.qh:559
+#: qcsrc/common/notifications.qh:577
 msgid "^K1You hit the ground with a crunch!"
 msgstr "^K1Ti sei schiantato a terra!"
 
-#: qcsrc/common/notifications.qh:560
+#: qcsrc/common/notifications.qh:578
 msgid "^K1You felt a little too hot!"
 msgstr "^K1Hai sentito un pò troppo caldo!"
 
-#: qcsrc/common/notifications.qh:560
+#: qcsrc/common/notifications.qh:578
 msgid "^K1You got a little bit too crispy!"
 msgstr "^K1Sei diventato un pò troppo croccante!"
 
-#: qcsrc/common/notifications.qh:561
+#: qcsrc/common/notifications.qh:579
 msgid "^K1You killed your own dumb self!"
 msgstr "^K1Ti sei ucciso, tonto!"
 
-#: qcsrc/common/notifications.qh:561
+#: qcsrc/common/notifications.qh:579
 msgid "^K1You need to be more careful!"
 msgstr "^K1Devi essere più prudente!"
 
-#: qcsrc/common/notifications.qh:562
+#: qcsrc/common/notifications.qh:580
 msgid "^K1You couldn't stand the heat!"
 msgstr "^K1Non hai resistito al calore!"
 
-#: qcsrc/common/notifications.qh:563
+#: qcsrc/common/notifications.qh:581
 msgid "^K1Tastes like chicken!"
 msgstr "^K1Sa di pollo!"
 
-#: qcsrc/common/notifications.qh:563
+#: qcsrc/common/notifications.qh:581
 msgid "^K1You forgot to put the pin back in!"
 msgstr "^K1Ti sei dimenticato di reinserire la sicura!"
 
-#: qcsrc/common/notifications.qh:564
+#: qcsrc/common/notifications.qh:582
 msgid "^K1You are respawning for running out of ammo..."
 msgstr "^K1Stai rinascendo per mancanza di munizioni..."
 
-#: qcsrc/common/notifications.qh:564
+#: qcsrc/common/notifications.qh:582
 msgid "^K1You were killed for running out of ammo..."
 msgstr "^K1Sei stato ucciso per mancanza di munizioni..."
 
-#: qcsrc/common/notifications.qh:565
+#: qcsrc/common/notifications.qh:583
 msgid "^K1You grew too old without taking your medicine"
 msgstr "^K1Sei diventato troppo vecchio senza prendere le tue medicine"
 
-#: qcsrc/common/notifications.qh:565
+#: qcsrc/common/notifications.qh:583
 msgid "^K1You need to preserve your health"
 msgstr "^K1Devi preservare la tua vita"
 
-#: qcsrc/common/notifications.qh:566
+#: qcsrc/common/notifications.qh:584
 msgid "^K1You became a shooting star!"
 msgstr "^K1Sei diventato una stella cadente!"
 
-#: qcsrc/common/notifications.qh:567
+#: qcsrc/common/notifications.qh:585
 msgid "^K1You melted away in slime!"
 msgstr "^K1Ti sei sciolto nel fango!"
 
-#: qcsrc/common/notifications.qh:568
+#: qcsrc/common/notifications.qh:586
 msgid "^K1You committed suicide!"
 msgstr "^K1Ti sei suicidato!"
 
-#: qcsrc/common/notifications.qh:568
+#: qcsrc/common/notifications.qh:586
 msgid "^K1You ended it all!"
 msgstr "^K1Hai messo fine a tutto!"
 
-#: qcsrc/common/notifications.qh:569
+#: qcsrc/common/notifications.qh:587
 msgid "^K1You got stuck in a swamp!"
 msgstr "^K1Sei rimasto bloccato in una palude!"
 
-#: qcsrc/common/notifications.qh:570
+#: qcsrc/common/notifications.qh:588
 #, c-format
 msgid "^BGYou are now on: %s"
 msgstr "^BGOra sei nella: %s"
 
-#: qcsrc/common/notifications.qh:571
+#: qcsrc/common/notifications.qh:589
 msgid "^K1You died in an accident!"
 msgstr "^K1Sei morto in un incidente!"
 
-#: qcsrc/common/notifications.qh:572
+#: qcsrc/common/notifications.qh:590
 msgid "^K1You had an unfortunate run in with a turret!"
 msgstr "^K1Hai avuto un incontro sfortunato con una torretta!"
 
-#: qcsrc/common/notifications.qh:572
+#: qcsrc/common/notifications.qh:590
 msgid "^K1You were fragged by a turret!"
 msgstr "^K1Sei stato fraggato da una torretta!"
 
-#: qcsrc/common/notifications.qh:573
+#: qcsrc/common/notifications.qh:591
 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:573
+#: qcsrc/common/notifications.qh:591
 msgid "^K1You were fragged by an eWheel turret!"
 msgstr "^K1Sei stato fraggato da una torretta eWheel!"
 
-#: qcsrc/common/notifications.qh:574
+#: qcsrc/common/notifications.qh:592
 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:574
+#: qcsrc/common/notifications.qh:592
 msgid "^K1You were fragged by a Walker turret!"
 msgstr "^K1Sei stato fraggato da una torretta Walker!"
 
-#: qcsrc/common/notifications.qh:575
+#: qcsrc/common/notifications.qh:593
 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:576
+#: qcsrc/common/notifications.qh:594
 msgid "^K1You were crushed by a vehicle!"
 msgstr "^K1Sei stato schiacciato da un veicolo!"
 
-#: qcsrc/common/notifications.qh:577
+#: qcsrc/common/notifications.qh:595
 msgid "^K1You were caught in a Raptor cluster bomb!"
 msgstr "^K1Sei stato preso dalla bomba a grappolo di un Raptor!"
 
-#: qcsrc/common/notifications.qh:578
+#: qcsrc/common/notifications.qh:596
 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:579
+#: qcsrc/common/notifications.qh:597
 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:580
+#: qcsrc/common/notifications.qh:598
 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:581
+#: qcsrc/common/notifications.qh:599
 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:582
+#: qcsrc/common/notifications.qh:600
 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:583
+#: qcsrc/common/notifications.qh:601
 msgid "^K1Watch your step!"
 msgstr "^K1Attento a dove metti i piedi!"
 
-#: qcsrc/common/notifications.qh:584
+#: qcsrc/common/notifications.qh:602
 #, 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:584
+#: qcsrc/common/notifications.qh:602
 #, 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:585
+#: qcsrc/common/notifications.qh:603
 #, 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:585
+#: qcsrc/common/notifications.qh:603
 #, 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:586
+#: qcsrc/common/notifications.qh:604
 msgid ""
 "^K1Stop idling!\n"
 "^BGDisconnecting in ^COUNT..."
@@ -2691,48 +2760,48 @@ msgstr ""
 "^K1Smettila di non far nulla!\n"
 "^BGDisconnessione in ^COUNT..."
 
-#: qcsrc/common/notifications.qh:587
+#: qcsrc/common/notifications.qh:605
 msgid "^F2You picked up some extra lives"
 msgstr "^F2Hai preso alcune vite extra"
 
-#: qcsrc/common/notifications.qh:588
+#: qcsrc/common/notifications.qh:606
 #, c-format
 msgid "^K3You froze ^BG%s"
 msgstr "^K3Hai congelato ^BG%s"
 
-#: qcsrc/common/notifications.qh:589
+#: qcsrc/common/notifications.qh:607
 #, c-format
 msgid "^K1You were frozen by ^BG%s"
 msgstr "^K1Sei stato congelato da ^BG%s"
 
-#: qcsrc/common/notifications.qh:590
+#: qcsrc/common/notifications.qh:608
 #, c-format
 msgid "^K3You revived ^BG%s"
 msgstr "^K3Hai risvegliato ^BG%s"
 
-#: qcsrc/common/notifications.qh:591
+#: qcsrc/common/notifications.qh:609
 msgid "^K3You revived yourself"
 msgstr "^K3Ti sei risvegliato da solo"
 
-#: qcsrc/common/notifications.qh:592
+#: qcsrc/common/notifications.qh:610
 #, c-format
 msgid "^K3You were revived by ^BG%s"
 msgstr "^K3Sei stato risvegliato da ^BG%s"
 
-#: qcsrc/common/notifications.qh:593
+#: qcsrc/common/notifications.qh:611
 #, c-format
 msgid "^K3You were automatically revived after %s second(s)"
 msgstr "^K3Sei stato risvegliato automaticamente dopo %s secondi"
 
-#: qcsrc/common/notifications.qh:596
+#: qcsrc/common/notifications.qh:614
 msgid "^K1You froze yourself"
 msgstr "^K1Ti sei congelato da solo"
 
-#: qcsrc/common/notifications.qh:597
+#: qcsrc/common/notifications.qh:615
 msgid "^K1Round already started, you spawn as frozen"
 msgstr "^K1Round già iniziato, nasci come congelato"
 
-#: qcsrc/common/notifications.qh:604
+#: qcsrc/common/notifications.qh:622
 msgid ""
 "^K1No spawnpoints available!\n"
 "Hope your team can fix it..."
@@ -2740,7 +2809,7 @@ msgstr ""
 "^K1Nessun punto di nascita disponibile!\n"
 "Spero che la tua squadra possa rimediare a questo..."
 
-#: qcsrc/common/notifications.qh:605
+#: qcsrc/common/notifications.qh:623
 msgid ""
 "^K1You may not join the game at this time.\n"
 "The player limit reached maximum capacity."
@@ -2748,11 +2817,11 @@ msgstr ""
 "^K1Non puoi entrare in gioco in questo momento.\n"
 "Il limite dei giocatori ha raggiunto la massima capacità."
 
-#: qcsrc/common/notifications.qh:608
+#: qcsrc/common/notifications.qh:626
 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:609
+#: qcsrc/common/notifications.qh:627
 msgid ""
 "^BGAll keys are in your team's hands!\n"
 "Help the key carriers to meet!"
@@ -2760,7 +2829,7 @@ msgstr ""
 "^BGTutte le chiavi sono in mano alla tua squadra!\n"
 "Aiuta i portatori di chiavi a incontrarsi!"
 
-#: qcsrc/common/notifications.qh:610
+#: qcsrc/common/notifications.qh:628
 msgid ""
 "^BGAll keys are in ^TC^TT team^BG's hands!\n"
 "Interfere ^F4NOW^BG!"
@@ -2768,7 +2837,7 @@ msgstr ""
 "^BGTutte le chiavi sono in mano alla squadra ^TC^TT!\n"
 "Interferisci ^F4ORA^BG!"
 
-#: qcsrc/common/notifications.qh:611
+#: qcsrc/common/notifications.qh:629
 msgid ""
 "^BGAll keys are in your team's hands!\n"
 "Meet the other key carriers ^F4NOW^BG!"
@@ -2776,19 +2845,19 @@ msgstr ""
 "^BGTutte le chiavi sono in mano alla tua squadra!\n"
 "Incxontra gli altri portatori di chiavi ^F4ORA^BG!"
 
-#: qcsrc/common/notifications.qh:612
+#: qcsrc/common/notifications.qh:630
 msgid "^F4Round will start in ^COUNT"
 msgstr "^F4Il round incomincerà in ^COUNT"
 
-#: qcsrc/common/notifications.qh:613
+#: qcsrc/common/notifications.qh:631
 msgid "^BGScanning frequency range..."
 msgstr "^BGAnalizzando l'intervallo di frequenza..."
 
-#: qcsrc/common/notifications.qh:614
+#: qcsrc/common/notifications.qh:632
 msgid "^BGYou are starting with the ^TC^TT Key"
 msgstr "^BGStai iniziando con la Chiave ^TC^TT"
 
-#: qcsrc/common/notifications.qh:615 qcsrc/common/notifications.qh:616
+#: qcsrc/common/notifications.qh:633 qcsrc/common/notifications.qh:634
 #, c-format
 msgid ""
 "^BGWaiting for players to join...\n"
@@ -2797,38 +2866,38 @@ msgstr ""
 "^BGIn attesa che i giocatori entrino...\n"
 "Servono giocatori per: %s"
 
-#: qcsrc/common/notifications.qh:617
+#: qcsrc/common/notifications.qh:635
 #, c-format
 msgid "^BGWaiting for %s player(s) to join..."
 msgstr "^BGIn attesa che %s giocatore/i entrino..."
 
-#: qcsrc/common/notifications.qh:618
+#: qcsrc/common/notifications.qh:636
 msgid "^F4^COUNT^BG left to find some ammo!"
 msgstr "^F4^COUNT^BG rimanenti per trovare delle munizioni!"
 
-#: qcsrc/common/notifications.qh:619
+#: qcsrc/common/notifications.qh:637
 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:619
+#: qcsrc/common/notifications.qh:637
 msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
 msgstr "^BGRaccogli delle munizioni! ^F4^COUNT^BG rimanenti!"
 
-#: qcsrc/common/notifications.qh:620
+#: qcsrc/common/notifications.qh:638
 #, c-format
 msgid "^F2Extra lives remaining: ^K1%s"
 msgstr "^F2Vite extra rimanenti: ^K1%s"
 
-#: qcsrc/common/notifications.qh:621
+#: qcsrc/common/notifications.qh:639
 msgid "^BGSecondary fire inflicts no damage!"
 msgstr "^BGIl fuoco secondario non infligge alcun danno!"
 
-#: qcsrc/common/notifications.qh:622
+#: qcsrc/common/notifications.qh:640
 #, c-format
 msgid "^BG%s"
 msgstr "^BG%s"
 
-#: qcsrc/common/notifications.qh:623
+#: qcsrc/common/notifications.qh:641
 #, c-format
 msgid ""
 "^F2^COUNT^BG until weapon change...\n"
@@ -2837,16 +2906,16 @@ msgstr ""
 "^F2^COUNT^BG al cambio d'arma...\n"
 "Prossima arma: ^F1%s"
 
-#: qcsrc/common/notifications.qh:624
+#: qcsrc/common/notifications.qh:642
 #, c-format
 msgid "^F2Active weapon: ^F1%s"
 msgstr "^F2Arma attiva: ^F1%s"
 
-#: qcsrc/common/notifications.qh:625
+#: qcsrc/common/notifications.qh:643
 msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
 msgstr "^BGPremere ^F2DROPWEAPON^BG di nuovo per lanciare la granata!"
 
-#: qcsrc/common/notifications.qh:626
+#: qcsrc/common/notifications.qh:644
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "Keep fragging until we have a winner!"
@@ -2854,7 +2923,7 @@ msgstr ""
 "^F2Si giocano i ^F4SUPPLEMENTARI^F2!\n"
 "Continua a fraggare finché non c'è un vincitore!"
 
-#: qcsrc/common/notifications.qh:626
+#: qcsrc/common/notifications.qh:644
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "Keep scoring until we have a winner!"
@@ -2862,7 +2931,7 @@ msgstr ""
 "^F2Si giocano i ^F4SUPPLEMENTARI^F2!\n"
 "Continua a segnare finché non c'è un vincitore!"
 
-#: qcsrc/common/notifications.qh:627
+#: qcsrc/common/notifications.qh:645
 #, c-format
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
@@ -2871,210 +2940,210 @@ msgstr ""
 "^F2Si giocano i ^F4SUPPLEMENTARI^F2!\n"
 "^BGAggiunti ^F4%s^BG alla partita!"
 
-#: qcsrc/common/notifications.qh:628
+#: qcsrc/common/notifications.qh:646
 msgid "^F2Invisibility has worn off"
 msgstr "^F2L'invisibilità è scaduta"
 
-#: qcsrc/common/notifications.qh:629
+#: qcsrc/common/notifications.qh:647
 msgid "^F2Shield has worn off"
 msgstr "^F2L'invisibilità è scaduta"
 
-#: qcsrc/common/notifications.qh:630
+#: qcsrc/common/notifications.qh:648
 msgid "^F2Speed has worn off"
 msgstr "^F2La Velocità è scaduta"
 
-#: qcsrc/common/notifications.qh:631
+#: qcsrc/common/notifications.qh:649
 msgid "^F2Strength has worn off"
 msgstr "^F2La Forza è scaduta"
 
-#: qcsrc/common/notifications.qh:632
+#: qcsrc/common/notifications.qh:650
 msgid "^F2You are invisible"
 msgstr "^F2Sei invisibile"
 
-#: qcsrc/common/notifications.qh:633
+#: qcsrc/common/notifications.qh:651
 msgid "^F2Shield surrounds you"
 msgstr "^F2Lo scudo ti circonda"
 
-#: qcsrc/common/notifications.qh:634
+#: qcsrc/common/notifications.qh:652
 msgid "^F2You are on speed"
 msgstr "^F2Sei veloce"
 
-#: qcsrc/common/notifications.qh:635
+#: qcsrc/common/notifications.qh:653
 msgid "^F2Strength infuses your weapons with devastating power"
 msgstr "^F2La Forza infonde alle tue armi un potere devastante"
 
-#: qcsrc/common/notifications.qh:636
+#: qcsrc/common/notifications.qh:654
 msgid "^F2The race is over, finish your lap!"
 msgstr "^F2La gara è finita, completa il tuo giro!"
 
-#: qcsrc/common/notifications.qh:637
+#: qcsrc/common/notifications.qh:655
 msgid "^F2Superweapons have broken down"
 msgstr "^F2Le Superarmi si sono spaccate"
 
-#: qcsrc/common/notifications.qh:638
+#: qcsrc/common/notifications.qh:656
 msgid "^F2Superweapons have been lost"
 msgstr "^F2Le Superarmi sono state perse"
 
-#: qcsrc/common/notifications.qh:639
+#: qcsrc/common/notifications.qh:657
 msgid "^F2You now have a superweapon"
 msgstr "^F2Ora hai una superarma"
 
-#: qcsrc/common/notifications.qh:640
+#: qcsrc/common/notifications.qh:658
 msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
 msgstr "^K1Cambiando alla ^TC^TT^K1 in ^COUNT"
 
-#: qcsrc/common/notifications.qh:641
+#: qcsrc/common/notifications.qh:659
 msgid "^K1Changing team in ^COUNT"
 msgstr "^K1Cambiando squadra in ^COUNT"
 
-#: qcsrc/common/notifications.qh:642
+#: qcsrc/common/notifications.qh:660
 msgid "^K1Spectating in ^COUNT"
 msgstr "^K1Spettatore in ^COUNT"
 
-#: qcsrc/common/notifications.qh:643
+#: qcsrc/common/notifications.qh:661
 msgid "^K1Suicide in ^COUNT"
 msgstr "^K1Suicidio in ^COUNT"
 
-#: qcsrc/common/notifications.qh:644
+#: qcsrc/common/notifications.qh:662
 msgid "^F4Timeout begins in ^COUNT"
 msgstr "^F4Il timeout comincia in ^COUNT"
 
-#: qcsrc/common/notifications.qh:645
+#: qcsrc/common/notifications.qh:663
 msgid "^F4Timeout ends in ^COUNT"
 msgstr "^F4Il timeout finisce in ^COUNT"
 
-#: qcsrc/common/notifications.qh:907 qcsrc/common/notifications.qh:908
+#: qcsrc/common/notifications.qh:937 qcsrc/common/notifications.qh:938
 #, c-format
 msgid " (near %s)"
 msgstr " (vicino %s)"
 
-#: qcsrc/common/notifications.qh:915 qcsrc/common/notifications.qh:916
+#: qcsrc/common/notifications.qh:945 qcsrc/common/notifications.qh:946
 msgid "primary"
 msgstr "primario"
 
-#: qcsrc/common/notifications.qh:915 qcsrc/common/notifications.qh:916
+#: qcsrc/common/notifications.qh:945 qcsrc/common/notifications.qh:946
 msgid "secondary"
 msgstr "secondario"
 
-#: qcsrc/common/notifications.qh:926
+#: qcsrc/common/notifications.qh:956
 #, c-format
 msgid " ^F1(Press %s)"
 msgstr " ^F1(Premi %s)"
 
-#: qcsrc/common/notifications.qh:935
+#: qcsrc/common/notifications.qh:965
 #, c-format
 msgid " with %s"
 msgstr " con %s"
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 #, 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:944
+#: qcsrc/common/notifications.qh:974
 #, 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:944
+#: qcsrc/common/notifications.qh:974
 msgid "TRIPLE FRAG! "
 msgstr "TRIPLO FRAG! "
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 #, 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:945
+#: qcsrc/common/notifications.qh:975
 #, c-format
 msgid "%s^K1 unlocked RAGE! %s^BG"
 msgstr "%s^K1 scatena la FURIA! %s^BG"
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 msgid "RAGE! "
 msgstr "FURIA! "
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 #, c-format
 msgid "%s^K1 made TEN SCORES IN A ROW! %s^BG"
-msgstr ""
+msgstr "%s^K1 ha realizzato ^1DIECI PUNTI DI FILA! %s^BG"
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 #, c-format
 msgid "%s^K1 started a MASSACRE! %s^BG"
 msgstr "%s^K1 ha iniziato un MASSACRO! %s^BG"
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 msgid "MASSACRE! "
 msgstr "MASSACRO! "
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 #, c-format
 msgid "%s^K1 executed MAYHEM! %s^BG"
 msgstr "%s^K1 ha causato un CAOS! %s^BG"
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 #, 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:947
+#: qcsrc/common/notifications.qh:977
 msgid "MAYHEM! "
 msgstr "CAOS! "
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 #, c-format
 msgid "%s^K1 is a BERSERKER! %s^BG"
 msgstr "%s^K1 è un BERSERKER! %s^BG"
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 #, 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:948
+#: qcsrc/common/notifications.qh:978
 msgid "BERSERKER! "
 msgstr "BERSERKER! "
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 #, c-format
 msgid "%s^K1 inflicts CARNAGE! %s^BG"
 msgstr "%s^K1 inflige una CARNEFICINA! %s^BG"
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 #, 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:949
+#: qcsrc/common/notifications.qh:979
 msgid "CARNAGE! "
 msgstr "CARNEFICINA! "
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 #, 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:950
+#: qcsrc/common/notifications.qh:980
 #, c-format
 msgid "%s^K1 unleashes ARMAGEDDON! %s^BG"
 msgstr "%s^K1 scatena l'ARMAGEDDON! %s^BG"
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 msgid "ARMAGEDDON! "
 msgstr "ARMAGEDDON! "
 
-#: qcsrc/common/notifications.qh:956
+#: qcsrc/common/notifications.qh:986
 #, c-format
 msgid "%s(^F1Bot^BG)"
 msgstr "%s(^F1Bot^BG)"
 
-#: qcsrc/common/notifications.qh:958
+#: qcsrc/common/notifications.qh:988
 #, c-format
 msgid "%s(Ping ^F1%d^BG)"
 msgstr "%s(Ping ^F1%d^BG)"
 
-#: qcsrc/common/notifications.qh:964
+#: qcsrc/common/notifications.qh:994
 #, c-format
 msgid ""
 "\n"
@@ -3083,7 +3152,7 @@ msgstr ""
 "\n"
 "(Vita ^1%d^BG / Armatura ^2%d^BG)%s"
 
-#: qcsrc/common/notifications.qh:966
+#: qcsrc/common/notifications.qh:996
 #, c-format
 msgid ""
 "\n"
@@ -3092,68 +3161,68 @@ msgstr ""
 "\n"
 "(^F4Morto^BG)%s"
 
-#: qcsrc/common/notifications.qh:1003 qcsrc/common/notifications.qh:1016
+#: qcsrc/common/notifications.qh:1033 qcsrc/common/notifications.qh:1046
 #, c-format
 msgid "%d score spree! "
 msgstr "serie di %d punti! "
 
-#: qcsrc/common/notifications.qh:1015
+#: qcsrc/common/notifications.qh:1045
 #, c-format
 msgid "%d frag spree! "
 msgstr "serie di %d frag! "
 
-#: qcsrc/common/notifications.qh:1028
+#: qcsrc/common/notifications.qh:1058
 msgid "First blood! "
 msgstr "Prima uccisione!"
 
-#: qcsrc/common/notifications.qh:1028
+#: qcsrc/common/notifications.qh:1058
 msgid "First score! "
 msgstr "Primo punto! "
 
-#: qcsrc/common/notifications.qh:1032
+#: qcsrc/common/notifications.qh:1062
 msgid "First casualty! "
-msgstr ""
+msgstr "Primo incidente! "
 
-#: qcsrc/common/notifications.qh:1032
+#: qcsrc/common/notifications.qh:1062
 msgid "First victim! "
 msgstr "Prima vittima! "
 
-#: qcsrc/common/notifications.qh:1073
+#: qcsrc/common/notifications.qh:1103
 #, 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:1074
+#: qcsrc/common/notifications.qh:1104
 #, 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:1092
+#: qcsrc/common/notifications.qh:1122
 #, c-format
 msgid "%s^K1 drew first blood! %s^BG"
 msgstr "%s^K1 ha fatto la prima uccisione! %s^BG"
 
-#: qcsrc/common/notifications.qh:1093
+#: qcsrc/common/notifications.qh:1123
 #, 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:1109
+#: qcsrc/common/notifications.qh:1139
 #, c-format
 msgid ", ending their %d frag spree"
 msgstr ", finendo la sua serie di %d frag"
 
-#: qcsrc/common/notifications.qh:1110
+#: qcsrc/common/notifications.qh:1140
 #, c-format
 msgid ", ending their %d score spree"
 msgstr ", finendo la sua serie di %d punti"
 
-#: qcsrc/common/notifications.qh:1124
+#: qcsrc/common/notifications.qh:1154
 #, c-format
 msgid ", losing their %d frag spree"
 msgstr ", perdendo la sua serie di %d frag"
 
-#: qcsrc/common/notifications.qh:1125
+#: qcsrc/common/notifications.qh:1155
 #, c-format
 msgid ", losing their %d score spree"
 msgstr ", perdendo la sua serie di %d punti"
@@ -3221,11 +3290,11 @@ msgstr "Oggetto %d"
 msgid "%d (%s)"
 msgstr "%d (%s)"
 
-#: qcsrc/menu/item/textslider.c:29 qcsrc/menu/item/textslider.c:31
+#: qcsrc/menu/item/textslider.c:31 qcsrc/menu/item/textslider.c:33
 msgid "custom"
 msgstr "personalizzato"
 
-#: qcsrc/menu/menu.qc:56
+#: qcsrc/menu/menu.qc:59
 #, c-format
 msgid "^4MQC Build information: ^1%s\n"
 msgstr "^4Informazioni sulla versione MQC: ^1%s\n"
@@ -3272,7 +3341,7 @@ msgstr "Crediti"
 #: 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_sandboxtools.c:89
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:90
 #: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:77
 #: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:21
 msgid "OK"
@@ -3329,33 +3398,33 @@ msgstr "Salva impostazioni"
 msgid "Ammo Panel"
 msgstr "Pannello munizioni"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:23
 msgid "Ammunition display:"
 msgstr "Mostra munizioni:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:26
 msgid "Show only current ammo type"
 msgstr "Mostra solo il tipo corrente di munizioni"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
 msgid "Align icon:"
 msgstr "Allinea icone:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:36
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:28
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:40
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:28
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:40
-msgid "Left"
-msgstr "Sinistra"
-
 #: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:30
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:38
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:29
 #: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:41
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:29
 #: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:41
+msgid "Left"
+msgstr "Sinistra"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:42
 msgid "Right"
 msgstr "Destra"
 
@@ -3363,28 +3432,28 @@ msgstr "Destra"
 msgid "Centerprint"
 msgstr "Centerprint"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:24
 msgid "Message duration:"
 msgstr "Durata messaggi:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:27
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:28
 msgid "Fade time:"
 msgstr "Durata dissolvenza:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:32
 msgid "Flip messages order"
 msgstr "Inverti ordine messaggi"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:34
 msgid "Text alignment:"
 msgstr "Allineamento testo:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:38
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:51
 msgid "Center"
 msgstr "Centro"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:41
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:42
 msgid "Font scale:"
 msgstr "Scala testo:"
 
@@ -3392,19 +3461,19 @@ msgstr "Scala testo:"
 msgid "Chat Panel"
 msgstr "Pannello Chat"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:23
 msgid "Chat entries:"
 msgstr "N° righe della chat:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:26
 msgid "Chat size:"
 msgstr "Dimensioni chat:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:30
 msgid "Chat lifetime:"
 msgstr "Durata chat:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:34
 msgid "Chat beep sound"
 msgstr "Suono della chat"
 
@@ -3412,11 +3481,11 @@ msgstr "Suono della chat"
 msgid "Engine Info Panel"
 msgstr "Pannello info motore"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:23
 msgid "Engine info:"
 msgstr "Info motore:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:26
 msgid "Use an averaging algorithm for fps"
 msgstr "Usa un algoritmo mediano per gli fps"
 
@@ -3424,36 +3493,36 @@ msgstr "Usa un algoritmo mediano per gli fps"
 msgid "Health/Armor Panel"
 msgstr "Pannello vita/armatura"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:22
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:23
 msgid "Enable status bar"
 msgstr "Abilita barra di stato"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:24
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:25
 msgid "Status bar alignment:"
 msgstr "Allineamento barra di stato:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:32
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:42
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:32
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:43
 msgid "Inward"
 msgstr "Interno"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:34
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:43
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:34
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:44
 msgid "Outward"
 msgstr "Esterno"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:37
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:38
 msgid "Icon alignment:"
 msgstr "Allineamento icone:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:46
 msgid "Flip health and armor positions"
 msgstr "Inverti posizioni di vita e armatura"
 
@@ -3461,11 +3530,11 @@ msgstr "Inverti posizioni di vita e armatura"
 msgid "Info Messages Panel"
 msgstr "Pannello delle informazioni"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:23
 msgid "Info messages:"
 msgstr "Informazioni:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:26
 msgid "Flip align"
 msgstr "Inverti allineamento"
 
@@ -3477,23 +3546,23 @@ msgstr "Pannello delle icone delle Mod"
 msgid "Notification Panel"
 msgstr "Pannello di notifica"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:23
 msgid "Notifications:"
 msgstr "Notifiche:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:26
 msgid "Also print notifications to the console"
 msgstr "Mostra anche le notifiche sulla console"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:29
 msgid "Flip notify order"
 msgstr "Inverti ordine notifiche"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:32
 msgid "Entry lifetime:"
 msgstr "Durata notifica:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:36
 msgid "Entry fadetime:"
 msgstr "Durata dissolvenza:"
 
@@ -3501,96 +3570,96 @@ msgstr "Durata dissolvenza:"
 msgid "Physics Panel"
 msgstr "Pannello Fisica"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:22
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:22
 msgid "Panel disabled"
 msgstr "Pannello disabilitato"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
 msgid "Panel enabled"
 msgstr "Pannello abilitato"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
 msgid "Panel enabled even observing"
 msgstr "Pannello abilitato anche osservando"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:26
 msgid "Panel enabled only in Race/CTS"
 msgstr "Pannello abilitato solo in Corsa/CTS"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:32
 msgid "Status bar"
 msgstr "Barra di stato"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:49
 msgid "Left align"
 msgstr "Allinea a sinistra"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:53
 msgid "Right align"
 msgstr "Allinea a destra"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
 msgid "Inward align"
 msgstr "Allinea all'interno"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:37
 msgid "Outward align"
 msgstr "Allinea all'esterno"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:41
 msgid "Flip speed/acceleration positions"
 msgstr "Inverti posizioni velocità/accelerazione"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
 #: qcsrc/menu/xonotic/dialog_settings_misc.c:29
 msgid "Speed:"
 msgstr "Velocità:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:46
 msgid "Include vertical speed"
 msgstr "Includi velocità verticale"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:56
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:57
 msgid "Speed unit:"
 msgstr "Unità di velocità:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:58
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
 msgid "qu/s"
 msgstr "qu/s"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
 msgid "m/s"
 msgstr "m/s"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
 msgid "km/h"
 msgstr "km/h"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
 msgid "mph"
 msgstr "mph"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:63
 msgid "knots"
 msgstr "nodi"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:64
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:65
 msgid "Show"
 msgstr "Mostra"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:67
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:68
 msgid "Top speed"
 msgstr "Velocità massima"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:73
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
 msgid "Acceleration:"
 msgstr "Accelerazione:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:75
 msgid "Include vertical acceleration"
 msgstr "Includi accelerazione verticale"
 
@@ -3598,7 +3667,7 @@ msgstr "Includi accelerazione verticale"
 msgid "Powerups Panel"
 msgstr "Pannello dei Powerup"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:46
 msgid "Flip strength and shield positions"
 msgstr "Inverti posizioni di forza e scudo"
 
@@ -3606,16 +3675,16 @@ msgstr "Inverti posizioni di forza e scudo"
 msgid "Pressed Keys Panel"
 msgstr "Pannello dei tasto premuti"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
 msgid "Panel enabled when spectating"
 msgstr "Pannello abilitato quando spettatore"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:24
 msgid "Panel always enabled"
 msgstr "Pannello sempre abilitato"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:31
 msgid "Forced aspect:"
 msgstr "Forza aspetto:"
 
@@ -3627,68 +3696,68 @@ msgstr "Pannello tempi Corsa"
 msgid "Radar Panel"
 msgstr "Pannello Radar"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
 msgid "Panel enabled in teamgames"
 msgstr "Pannello abilitato nei teamgames"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:30
 msgid "Radar:"
 msgstr "Radar:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:32
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:43
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:82
+#: 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
 msgid "Alpha:"
 msgstr "Opacità:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:37
 msgid "Rotation:"
 msgstr "Rotazione:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:39
 msgid "Forward"
 msgstr "Avanti"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:40
 msgid "West"
 msgstr "Ovest"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:41
 msgid "South"
 msgstr "Sud"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:41
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:42
 msgid "East"
 msgstr "Est"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:43
 msgid "North"
 msgstr "Nord"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:46
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:47
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:63
 msgid "Scale:"
 msgstr "Scala:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:50
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:51
 msgid "Zoom mode:"
 msgstr "Modalità zoom:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:52
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:53
 msgid "Zoomed in"
 msgstr "Ingrandito"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:53
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:54
 msgid "Zoomed out"
 msgstr "Non ingrandito"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:54
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:55
 msgid "Always zoomed"
 msgstr "Sempre ingrandito"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:55
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:56
 msgid "Never zoomed"
 msgstr "Mai ingrandito"
 
@@ -3696,23 +3765,23 @@ msgstr "Mai ingrandito"
 msgid "Score Panel"
 msgstr "Pannello punteggio"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:23
 msgid "Score:"
 msgstr "Punteggi:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
 msgid "Rankings:"
 msgstr "Classifica:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
 msgid "Off"
 msgstr "Off"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
 msgid "And me"
 msgstr "E me"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:29
 msgid "Pure"
 msgstr "Puro"
 
@@ -3720,11 +3789,11 @@ msgstr "Puro"
 msgid "Timer Panel"
 msgstr "Pannello tempo"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:23
 msgid "Timer:"
 msgstr "Tempo:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:26
 msgid "Show elapsed time"
 msgstr "Mostra tempo trascorso"
 
@@ -3732,7 +3801,7 @@ msgstr "Mostra tempo trascorso"
 msgid "Vote Panel"
 msgstr "Pannello di voto"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:23
 msgid "Alpha after voting:"
 msgstr "Opacità dopo aver votato:"
 
@@ -3740,76 +3809,76 @@ msgstr "Opacità dopo aver votato:"
 msgid "Weapons Panel"
 msgstr "Pannello armi"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:25
 msgid "Fade out after:"
 msgstr "Dissolvi dopo:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:26
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:27
 msgid "Never"
 msgstr "Mai"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:29
 #, c-format
 msgid "%ds"
 msgstr "%ds"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:32
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:33
 msgid "Fade effect:"
 msgstr "Effetto dissolvenza:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
 msgid "EF^None"
 msgstr "Nessuno"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:37
 msgid "Alpha"
 msgstr "Opacità"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
 msgid "Slide"
 msgstr "Slide"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:39
 msgid "EF^Both"
 msgstr "Entrambi"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:43
 msgid "Weapon icons:"
 msgstr "Icone armi:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46
 msgid "Show only owned weapons"
 msgstr "Mostra solo armi possedute"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:48
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
 msgid "Show weapon ID as:"
 msgstr "Mostra ID arma come:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
 msgid "SHOWAS^None"
 msgstr "Nessuno"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
 msgid "Number"
 msgstr "Numero"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:52
 msgid "Bind"
 msgstr "Tasto"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:54
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
 msgid "Show Accuracy"
 msgstr "Mostra precisione"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:56
 msgid "Show Ammo"
 msgstr "Mostra munizioni"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:58
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:59
 msgid "Ammo bar color:"
 msgstr "Colore barra munizioni:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:64
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:65
 msgid "Ammo bar alpha:"
 msgstr "Opacità barra munizioni:"
 
@@ -3817,85 +3886,85 @@ msgstr "Opacità barra munizioni:"
 msgid "Panel HUD Setup"
 msgstr "Setup del Panel HUD"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:21
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:22
 msgid "Panel background defaults:"
 msgstr "Predefiniti dello sfondo del pannello:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:23 qcsrc/menu/xonotic/util.qc:683
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:24 qcsrc/menu/xonotic/util.qc:683
 msgid "Background:"
 msgstr "Sfondo:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:25
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:37
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:52
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:686
+#: 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
 msgid "Disable"
 msgstr "Disabilita"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:30
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:691
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:31
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:78 qcsrc/menu/xonotic/util.qc:691
 msgid "Color:"
 msgstr "Colore:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:699
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:36 qcsrc/menu/xonotic/util.qc:699
 msgid "Border size:"
 msgstr "Dimensioni bordo:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:50
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:89
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:51
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:90
 msgid "Team color:"
 msgstr "Colore team:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:725
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:59 qcsrc/menu/xonotic/util.qc:725
 msgid "Test team color in configure mode"
 msgstr "Prova colore team in modalità configurazione"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:728
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:62 qcsrc/menu/xonotic/util.qc:728
 msgid "Padding:"
 msgstr "Riempimento:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:68
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:69
 msgid "HUD Dock:"
 msgstr "Sfondo dell'HUD:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:70
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71
 msgid "DOCK^Disabled"
 msgstr "Disabilitato"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72
 msgid "DOCK^Small"
 msgstr "Piccolo"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73
 msgid "DOCK^Medium"
 msgstr "Medio"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:74
 msgid "DOCK^Large"
 msgstr "Largo"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:96
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:97
 msgid "Grid settings:"
 msgstr "Impostazioni griglia:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:99
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:100
 msgid "Snap panels to grid"
 msgstr "Incolla i pannelli alla griglia"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:102
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:103
 msgid "Grid size:"
 msgstr "Dimensioni griglia:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:103
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:104
 msgid "X:"
 msgstr "X:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:109
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:110
 msgid "Y:"
 msgstr "Y:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:117
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:118
 msgid "Exit setup"
 msgstr "Esci dal setup"
 
@@ -4480,7 +4549,7 @@ msgid "Key:"
 msgstr "Chiave:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:61
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:19
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:20
 msgid "Model:"
 msgstr "Modello:"
 
@@ -4855,127 +4924,127 @@ msgstr "No"
 msgid "Sandbox Tools"
 msgstr "Attrezzi Sandbox"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:24
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:25
 msgid "Spawn"
 msgstr "Crea"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:25
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:26
 msgid "Remove *"
 msgstr "Rimuovi *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:27
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:28
 msgid "Copy *"
 msgstr "Copia *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:28
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:29
 msgid "Paste"
 msgstr "Incolla"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:30
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:31
 msgid "Bone:"
 msgstr "Osso:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:35
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:36
 msgid "Set * as child"
 msgstr "Imposta * come figlio"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:36
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:37
 msgid "Attach to *"
 msgstr "Attaca a *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:38
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:39
 msgid "Detach from *"
 msgstr "Stacca da *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:41
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:42
 msgid "Visual object properties for *:"
 msgstr "Proprietà visuali dell'oggetto per *:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:43
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:44
 msgid "Set skin:"
 msgstr "Imposta skin:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:45
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:46
 msgid "Set alpha:"
 msgstr "Imposta opacità:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:48
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:49
 msgid "Set color main:"
 msgstr "Imposta colore princ.:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:50
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:51
 msgid "Set color glow:"
 msgstr "Imposta colore glow:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:54
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:55
 msgid "Set frame:"
 msgstr "Imposta frame:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:58
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:59
 msgid "Physical object properties for *:"
 msgstr "Proprietà fisiche dell'oggetto per *:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:60
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:61
 msgid "Set material:"
 msgstr "Imposta materiale:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:66
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:67
 msgid "Set solidity:"
 msgstr "Imposta solidità:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:67
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:68
 msgid "Non-solid"
 msgstr "Non-solido"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:68
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:69
 msgid "Solid"
 msgstr "Solido"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:69
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:70
 msgid "Set physics:"
 msgstr "Imposta fisica:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:70
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:71
 msgid "Static"
 msgstr "Statica"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:71
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:72
 msgid "Movable"
 msgstr "Mobile"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:72
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:73
 msgid "Physical"
 msgstr "Fisica"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:74
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:75
 msgid "Set scale:"
 msgstr "Imposta scala:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:76
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:77
 msgid "Set force:"
 msgstr "Imposta forza:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:80
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:81
 msgid "Claim *"
 msgstr "Reclama *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:82
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:83
 msgid "* object info"
 msgstr "Info oggetto *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:83
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:84
 msgid "* mesh info"
 msgstr "Info mesh *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:84
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:85
 msgid "* attachment info"
 msgstr "Info allegato *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:85
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:86
 msgid "Show help"
 msgstr "Mostra aiuto"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:86
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:87
 msgid "* is the object you are facing"
 msgstr "* è l'oggetto di fronte a te"
 
@@ -5972,27 +6041,27 @@ msgstr "Vincitore"
 msgid "Team Selection"
 msgstr "Selezione team"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:41
+#: qcsrc/menu/xonotic/dialog_teamselect.c:42
 msgid "join 'best' team (auto-select)"
 msgstr "entra nel 'miglior' team (auto-selezione)"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:45
+#: qcsrc/menu/xonotic/dialog_teamselect.c:46
 msgid "red"
 msgstr "rosso"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:46
+#: qcsrc/menu/xonotic/dialog_teamselect.c:47
 msgid "blue"
 msgstr "blu"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:47
+#: qcsrc/menu/xonotic/dialog_teamselect.c:48
 msgid "yellow"
 msgstr "giallo"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:48
+#: qcsrc/menu/xonotic/dialog_teamselect.c:49
 msgid "pink"
 msgstr "rosa"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:51
+#: qcsrc/menu/xonotic/dialog_teamselect.c:52
 msgid "spectate"
 msgstr "spettatore"
 
@@ -6091,7 +6160,12 @@ msgstr "%.2f %%"
 msgid "%s dB"
 msgstr "%s dB"
 
-#: qcsrc/menu/xonotic/slider_resolution.c:72
+#: qcsrc/menu/xonotic/slider_resolution.c:103
+#, c-format
+msgid "%dx%d (%d:%d)"
+msgstr "%dx%d (%d:%d)"
+
+#: qcsrc/menu/xonotic/slider_resolution.c:106
 #, c-format
 msgid "%dx%d"
 msgstr "%dx%d"
index 584d337f6dc23ed958f7fdf501cfd3aab6041687..e811b072f5befc555277c6088aad7dab600099a8 100644 (file)
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Xonotic\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-09-13 10:31+0200\n"
-"PO-Revision-Date: 2013-09-13 08:33+0000\n"
+"POT-Creation-Date: 2013-10-03 11:55+0200\n"
+"PO-Revision-Date: 2013-10-03 10:08+0000\n"
 "Last-Translator: divVerent <divVerent@xonotic.org>\n"
 "Language-Team: Dutch (http://www.transifex.com/projects/p/xonotic/language/"
 "nl/)\n"
@@ -1230,7 +1230,7 @@ msgstr "%dth"
 msgid "@!#%'n Tuba Throwing"
 msgstr "@!#%'n Tuba Smijten"
 
-#: qcsrc/common/mapinfo.qc:1105 qcsrc/menu/xonotic/skinlist.c:166
+#: qcsrc/common/mapinfo.qc:1109 qcsrc/menu/xonotic/skinlist.c:166
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
@@ -1304,968 +1304,968 @@ msgstr "^1Server aankondigingen:"
 msgid "^7%s (^3%d sec left)"
 msgstr "^7%s (^3%d sec resterend)"
 
-#: qcsrc/common/notifications.qh:330
+#: qcsrc/common/notifications.qh:342
 #, c-format
 msgid "^BG%s^BG captured the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:331
+#: qcsrc/common/notifications.qh:343
 #, c-format
 msgid ""
 "^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
 "%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:332
+#: qcsrc/common/notifications.qh:344
 #, c-format
 msgid "^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:333
+#: qcsrc/common/notifications.qh:345
 #, c-format
 msgid ""
 "^BG%s^BG captured the ^TC^TT^BG flag in ^F2%s^BG seconds, failing to break "
 "^BG%s^BG's previous record of ^F1%s^BG seconds"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:334
+#: qcsrc/common/notifications.qh:346
 msgid "^BGThe ^TC^TT^BG flag was returned to base by its owner"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:335
+#: qcsrc/common/notifications.qh:347
 msgid "^BGThe ^TC^TT^BG flag was destroyed and returned to base"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:336
+#: qcsrc/common/notifications.qh:348
 msgid "^BGThe ^TC^TT^BG flag was dropped in the base and returned itself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:337
+#: qcsrc/common/notifications.qh:349
 msgid ""
 "^BGThe ^TC^TT^BG flag fell somewhere it couldn't be reached and returned to "
 "base"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:338
+#: qcsrc/common/notifications.qh:350
 #, c-format
 msgid ""
 "^BGThe ^TC^TT^BG flag became impatient after ^F1%.2f^BG seconds and returned "
 "itself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:339
+#: qcsrc/common/notifications.qh:351
 msgid "^BGThe ^TC^TT^BG flag has returned to the base"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:340
+#: qcsrc/common/notifications.qh:352
 #, c-format
 msgid "^BG%s^BG lost the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:341
+#: qcsrc/common/notifications.qh:353
 #, c-format
 msgid "^BG%s^BG got the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:342
+#: qcsrc/common/notifications.qh:354
 #, c-format
 msgid "^BG%s^BG returned the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:343
+#: qcsrc/common/notifications.qh:355
 #, c-format
 msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:344
+#: qcsrc/common/notifications.qh:356
 #, c-format
 msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:345
+#: qcsrc/common/notifications.qh:357
 #, c-format
 msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:346
+#: qcsrc/common/notifications.qh:358
 #, c-format
 msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:346
+#: qcsrc/common/notifications.qh:358
 #, c-format
 msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:347
+#: qcsrc/common/notifications.qh:359
 #, c-format
 msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:348
+#: qcsrc/common/notifications.qh:360
 #, c-format
 msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:349
+#: qcsrc/common/notifications.qh:361
 #, c-format
 msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:350
+#: qcsrc/common/notifications.qh:362
 #, c-format
 msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:351
+#: qcsrc/common/notifications.qh:363
 #, c-format
 msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:352
+#: qcsrc/common/notifications.qh:364
 #, c-format
 msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:352
+#: qcsrc/common/notifications.qh:364
 #, c-format
 msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:353
+#: qcsrc/common/notifications.qh:365
 #, c-format
 msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:354
+#: qcsrc/common/notifications.qh:366
 #, c-format
 msgid ""
 "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:355
+#: qcsrc/common/notifications.qh:367
 #, c-format
 msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:356
+#: qcsrc/common/notifications.qh:368
 #, c-format
 msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:357
+#: qcsrc/common/notifications.qh:369
 #, c-format
 msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:358
+#: qcsrc/common/notifications.qh:370
 #, c-format
 msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:359
+#: qcsrc/common/notifications.qh:371
 #, c-format
 msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:360
+#: qcsrc/common/notifications.qh:372
 #, c-format
 msgid ""
 "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:361
+#: qcsrc/common/notifications.qh:373
 #, c-format
 msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:362
+#: qcsrc/common/notifications.qh:374
 #, c-format
 msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:363
+#: qcsrc/common/notifications.qh:375
 #, c-format
 msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:364
+#: qcsrc/common/notifications.qh:376
 #, c-format
 msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:365
+#: qcsrc/common/notifications.qh:377
 #, c-format
 msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:366
+#: qcsrc/common/notifications.qh:378
 #, c-format
 msgid "^BG%s%s^K1 was thrown into a world of hurt by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:367
+#: qcsrc/common/notifications.qh:379
 #, c-format
 msgid "^BG%s^K1 was moved into the %s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:368
+#: qcsrc/common/notifications.qh:380
 #, c-format
 msgid "^BG%s^K1 became enemies with the Lord of Teamplay%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:369
+#: qcsrc/common/notifications.qh:381
 #, c-format
 msgid "^BG%s^K1 thought they found a nice camping ground%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:370
+#: qcsrc/common/notifications.qh:382
 #, c-format
 msgid "^BG%s^K1 unfairly eliminated themself%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:371
+#: qcsrc/common/notifications.qh:383
 #, c-format
 msgid "^BG%s^K1 %s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:372
+#: qcsrc/common/notifications.qh:384
 #, c-format
 msgid "^BG%s^K1 couldn't catch their breath%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:372
+#: qcsrc/common/notifications.qh:384
 #, c-format
 msgid "^BG%s^K1 was in the water for too long%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:373
+#: qcsrc/common/notifications.qh:385
 #, c-format
 msgid "^BG%s^K1 hit the ground with a bit too much force%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:373
+#: qcsrc/common/notifications.qh:385
 #, c-format
 msgid "^BG%s^K1 hit the ground with a crunch%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:374
+#: qcsrc/common/notifications.qh:386
 #, c-format
 msgid "^BG%s^K1 became a bit too crispy%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:374
+#: qcsrc/common/notifications.qh:386
 #, c-format
 msgid "^BG%s^K1 felt a little hot%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:375
+#: qcsrc/common/notifications.qh:387
 #, c-format
 msgid "^BG%s^K1 died%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:376
+#: qcsrc/common/notifications.qh:388
 #, c-format
 msgid "^BG%s^K1 found a hot place%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:376
+#: qcsrc/common/notifications.qh:388
 #, c-format
 msgid "^BG%s^K1 turned into hot slag%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:377
+#: qcsrc/common/notifications.qh:389
 #, c-format
 msgid "^BG%s^K1 mastered the art of self-nading%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:378
+#: qcsrc/common/notifications.qh:390
 #, c-format
 msgid "^BG%s^K1 died%s%s. What's the point of living without ammo?"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:378
+#: qcsrc/common/notifications.qh:390
 #, c-format
 msgid "^BG%s^K1 ran out of ammo%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:379
+#: qcsrc/common/notifications.qh:391
 #, c-format
 msgid "^BG%s^K1 rotted away%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:380
+#: qcsrc/common/notifications.qh:392
 #, c-format
 msgid "^BG%s^K1 became a shooting star%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:393
 #, c-format
 msgid "^BG%s^K1 was slimed%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:394
 #, c-format
 msgid "^BG%s^K1 couldn't take it anymore%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:395
 #, c-format
 msgid "^BG%s^K1 is now preserved for centuries to come%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:396
 #, c-format
 msgid "^BG%s^K1 switched to the %s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:397
 #, c-format
 msgid "^BG%s^K1 died in an accident%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:398
 #, c-format
 msgid "^BG%s^K1 ran into a turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:399
 #, c-format
 msgid "^BG%s^K1 was blasted away by an eWheel turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:400
 #, c-format
 msgid "^BG%s^K1 got caught up in the FLAC turret fire%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:401
 #, c-format
 msgid "^BG%s^K1 was blasted away by a Hellion turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:402
 #, c-format
 msgid "^BG%s^K1 could not hide from the Hunter turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:403
 #, c-format
 msgid "^BG%s^K1 was riddled full of holes by a Machinegun turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:404
 #, c-format
 msgid "^BG%s^K1 got turned into smoldering gibs by an MLRS turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:405
 #, c-format
 msgid "^BG%s^K1 was phased out by a turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:406
 #, c-format
 msgid "^BG%s^K1 got served some superheated plasma from a turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:407
 #, c-format
 msgid "^BG%s^K1 was electrocuted by a Tesla turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:408
 #, c-format
 msgid "^BG%s^K1 got served a lead enrichment by a Walker turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:409
 #, c-format
 msgid "^BG%s^K1 was impaled by a Walker turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:410
 #, c-format
 msgid "^BG%s^K1 was blasted away by a Walker turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:411
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Bumblebee explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:412
 #, c-format
 msgid "^BG%s^K1 was crushed by a vehicle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:401
+#: qcsrc/common/notifications.qh:413
 #, c-format
 msgid "^BG%s^K1 was caught in a Raptor cluster bomb%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:402
+#: qcsrc/common/notifications.qh:414
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Raptor explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:403
+#: qcsrc/common/notifications.qh:415
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Spiderbot explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:404
+#: qcsrc/common/notifications.qh:416
 #, c-format
 msgid "^BG%s^K1 was blasted to bits by a Spiderbot rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:405
+#: qcsrc/common/notifications.qh:417
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Racer explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:406
+#: qcsrc/common/notifications.qh:418
 #, c-format
 msgid "^BG%s^K1 couldn't find shelter from a Racer rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:407
+#: qcsrc/common/notifications.qh:419
 #, c-format
 msgid "^BG%s^K1 was in the wrong place%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:408
+#: qcsrc/common/notifications.qh:420
 #, c-format
 msgid "^BG%s^K1 was betrayed by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:409
+#: qcsrc/common/notifications.qh:421
 #, c-format
 msgid "^BG%s^K1 was frozen by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:410
+#: qcsrc/common/notifications.qh:422
 #, c-format
 msgid "^BG%s^K3 was revived by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:411
+#: qcsrc/common/notifications.qh:423
 #, c-format
 msgid "^BG%s^K3 was revived by falling"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:412
+#: qcsrc/common/notifications.qh:424
 #, c-format
 msgid "^BG%s^K3 was automatically revived after %s second(s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:413 qcsrc/common/notifications.qh:594
+#: qcsrc/common/notifications.qh:425 qcsrc/common/notifications.qh:612
 msgid "^TC^TT^BG team wins the round"
 msgstr "^TC^TT^BG team wint de ronde"
 
-#: qcsrc/common/notifications.qh:414 qcsrc/common/notifications.qh:595
+#: qcsrc/common/notifications.qh:426 qcsrc/common/notifications.qh:613
 #, c-format
 msgid "^BG%s^BG wins the round"
 msgstr "^BG%s^BG wint deze ronde"
 
-#: qcsrc/common/notifications.qh:415 qcsrc/common/notifications.qh:524
+#: qcsrc/common/notifications.qh:427 qcsrc/common/notifications.qh:542
 msgid "^BGRound tied"
 msgstr "^BGRonde geëindigd in een gelijkspel"
 
-#: qcsrc/common/notifications.qh:416 qcsrc/common/notifications.qh:525
+#: qcsrc/common/notifications.qh:428 qcsrc/common/notifications.qh:543
 msgid "^BGRound over, there's no winner"
 msgstr "^BGDe ronde is voorbij, er is geen winnaar"
 
-#: qcsrc/common/notifications.qh:417
+#: qcsrc/common/notifications.qh:429
 #, c-format
 msgid "^BG%s^K1 froze themself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:418
+#: qcsrc/common/notifications.qh:430
 #, c-format
 msgid "^BGGodmode saved you %s units of damage, cheater!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:419 qcsrc/common/notifications.qh:598
+#: qcsrc/common/notifications.qh:431 qcsrc/common/notifications.qh:616
 #, c-format
 msgid "^BGYou do not have the ^F1%s"
 msgstr "^BGJe hebt de ^F1%s niet"
 
-#: qcsrc/common/notifications.qh:420 qcsrc/common/notifications.qh:599
+#: qcsrc/common/notifications.qh:432 qcsrc/common/notifications.qh:617
 #, c-format
 msgid "^BGYou dropped the ^F1%s^BG%s"
 msgstr "^BG Je hebt de ^F1%s^BG%s laten vallen"
 
-#: qcsrc/common/notifications.qh:421 qcsrc/common/notifications.qh:600
+#: qcsrc/common/notifications.qh:433 qcsrc/common/notifications.qh:618
 #, c-format
 msgid "^BGYou got the ^F1%s"
 msgstr "^BGJe hebt de ^F1%s"
 
-#: qcsrc/common/notifications.qh:422 qcsrc/common/notifications.qh:601
+#: qcsrc/common/notifications.qh:434 qcsrc/common/notifications.qh:619
 #, c-format
 msgid "^BGYou don't have enough ammo for the ^F1%s"
 msgstr "^BGJe hebt niet genoeg ammo voor de ^F1%s"
 
-#: qcsrc/common/notifications.qh:423 qcsrc/common/notifications.qh:602
+#: qcsrc/common/notifications.qh:435 qcsrc/common/notifications.qh:620
 #, c-format
 msgid "^F1%s %s^BG is unable to fire, but its ^F1%s^BG can"
 msgstr "^F1%s %s^BG kan niet meer schieten, maar zijn ^F1%s^BG kan dit wel"
 
-#: qcsrc/common/notifications.qh:424 qcsrc/common/notifications.qh:603
+#: qcsrc/common/notifications.qh:436 qcsrc/common/notifications.qh:621
 #, c-format
 msgid "^F1%s^BG is ^F4not available^BG on this map"
 msgstr "^F1%s^BG is ^F4niet beschikbaar^BG op deze map"
 
-#: qcsrc/common/notifications.qh:425
+#: qcsrc/common/notifications.qh:437
 #, c-format
 msgid "^BG%s^F3 connected%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:426
+#: qcsrc/common/notifications.qh:438
 #, c-format
 msgid "^BG%s^F3 connected and joined the ^TC^TT team"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:427
+#: qcsrc/common/notifications.qh:439
 #, c-format
 msgid "^BG%s^F3 is now playing"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:428 qcsrc/common/notifications.qh:606
+#: qcsrc/common/notifications.qh:440 qcsrc/common/notifications.qh:624
 #, c-format
 msgid "^BG%s^BG has dropped the ball!"
 msgstr "^BG%s^BG heeft de bal laten vallen!"
 
-#: qcsrc/common/notifications.qh:429 qcsrc/common/notifications.qh:607
+#: qcsrc/common/notifications.qh:441 qcsrc/common/notifications.qh:625
 #, c-format
 msgid "^BG%s^BG has picked up the ball!"
 msgstr "^BG%s^BG heeft de bal opgepakt!"
 
-#: qcsrc/common/notifications.qh:430
+#: qcsrc/common/notifications.qh:442
 #, c-format
 msgid "^BG%s^BG captured the keys for the ^TC^TT team"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:431
+#: qcsrc/common/notifications.qh:443
 #, c-format
 msgid "^BG%s^BG dropped the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:432
+#: qcsrc/common/notifications.qh:444
 #, c-format
 msgid "^BG%s^BG lost the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:433
+#: qcsrc/common/notifications.qh:445
 #, c-format
 msgid "^BG%s^BG picked up the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:434
+#: qcsrc/common/notifications.qh:446
 #, c-format
 msgid "^BG%s^F3 forfeited"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:435
+#: qcsrc/common/notifications.qh:447
 #, c-format
 msgid "^BG%s^F3 has no more lives left"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:436
+#: qcsrc/common/notifications.qh:448
 #, c-format
 msgid "^BG%s^K1 picked up Invisibility"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:437
+#: qcsrc/common/notifications.qh:449
 #, c-format
 msgid "^BG%s^K1 picked up Shield"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:438
+#: qcsrc/common/notifications.qh:450
 #, c-format
 msgid "^BG%s^K1 picked up Speed"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:439
+#: qcsrc/common/notifications.qh:451
 #, c-format
 msgid "^BG%s^K1 picked up Strength"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:440
+#: qcsrc/common/notifications.qh:452
 #, c-format
 msgid "^BG%s^F3 disconnected"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:441
+#: qcsrc/common/notifications.qh:453
 #, c-format
 msgid "^BG%s^F3 was kicked for idling"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:442
+#: qcsrc/common/notifications.qh:454
 msgid ""
 "^F2You were kicked from the server because you are a spectator and "
 "spectators aren't allowed at the moment."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:443
+#: qcsrc/common/notifications.qh:455
 #, c-format
 msgid "^BG%s^F3 is now spectating"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:444
+#: qcsrc/common/notifications.qh:456
 #, c-format
 msgid "^BG%s^BG has abandoned the race"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:445
+#: qcsrc/common/notifications.qh:457
 #, c-format
 msgid "^BG%s^BG couldn't break their %s%s^BG place record of %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:446
+#: qcsrc/common/notifications.qh:458
 #, c-format
 msgid "^BG%s^BG couldn't break the %s%s^BG place record of %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:447
+#: qcsrc/common/notifications.qh:459
 #, c-format
 msgid "^BG%s^BG has finished the race"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:448
+#: qcsrc/common/notifications.qh:460
 #, c-format
 msgid "^BG%s^BG broke %s^BG's %s%s^BG place record with %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:449
+#: qcsrc/common/notifications.qh:461
 #, c-format
 msgid "^BG%s^BG improved their %s%s^BG place record with %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:450
+#: qcsrc/common/notifications.qh:462
 #, c-format
 msgid ""
 "^BG%s^BG scored a new record with ^F2%s^BG, but unfortunately lacks a UID "
 "and will be lost."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:451
+#: qcsrc/common/notifications.qh:463
 #, c-format
 msgid "^BG%s^BG set the %s%s^BG place record with %s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:452
+#: qcsrc/common/notifications.qh:464
 msgid "^TC^TT ^BGteam scores!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:453
+#: qcsrc/common/notifications.qh:465
 #, 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 ""
 
-#: qcsrc/common/notifications.qh:454
+#: qcsrc/common/notifications.qh:466
 #, c-format
 msgid "^BG%s^K1 picked up a Superweapon"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:455
+#: qcsrc/common/notifications.qh:467
 #, c-format
 msgid ""
 "^F4NOTE: ^BGThe server is running ^F1Xonotic %s (beta)^BG, you have "
 "^F2Xonotic %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:456
+#: qcsrc/common/notifications.qh:468
 #, c-format
 msgid ""
 "^F4NOTE: ^BGThe server is running ^F1Xonotic %s^BG, you have ^F2Xonotic %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:457
+#: qcsrc/common/notifications.qh:469
 #, c-format
 msgid ""
 "^F4NOTE: ^F1Xonotic %s^BG is out, and you still have ^F2Xonotic %s^BG - get "
 "the update from ^F3http://www.xonotic.org/^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:458
+#: qcsrc/common/notifications.qh:470
 #, c-format
 msgid "^F3SVQC Build information: ^F4%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:459
+#: qcsrc/common/notifications.qh:471
 #, c-format
 msgid ""
 "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Accordeon%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:460
+#: qcsrc/common/notifications.qh:472
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Accordeon%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:461
+#: qcsrc/common/notifications.qh:473
 #, c-format
 msgid "^BG%s%s^K1 felt the strong pull of ^BG%s^K1's Crylink%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:462
+#: qcsrc/common/notifications.qh:474
 #, c-format
 msgid "^BG%s^K1 felt the strong pull of their Crylink%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:463
+#: qcsrc/common/notifications.qh:475
 #, c-format
 msgid "^BG%s%s^K1 was blasted by ^BG%s^K1's Electro bolt%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:464
+#: qcsrc/common/notifications.qh:476
 #, c-format
 msgid "^BG%s%s^K1 felt the electrifying air of ^BG%s^K1's Electro combo%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:465
+#: qcsrc/common/notifications.qh:477
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Electro plasma%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:466
+#: qcsrc/common/notifications.qh:478
 #, c-format
 msgid "^BG%s^K1 played with Electro plasma%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:467
+#: qcsrc/common/notifications.qh:479
 #, c-format
 msgid "^BG%s^K1 could not remember where they put their Electro plasma%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:468
+#: qcsrc/common/notifications.qh:480
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's fireball%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:469
+#: qcsrc/common/notifications.qh:481
 #, c-format
 msgid "^BG%s%s^K1 got burnt by ^BG%s^K1's firemine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:470
+#: qcsrc/common/notifications.qh:482
 #, c-format
 msgid "^BG%s^K1 should have used a smaller gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:471
+#: qcsrc/common/notifications.qh:483
 #, c-format
 msgid "^BG%s^K1 forgot about their firemine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:472
+#: qcsrc/common/notifications.qh:484
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by a burst of ^BG%s^K1's Hagar rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:473
+#: qcsrc/common/notifications.qh:485
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Hagar rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:474
+#: qcsrc/common/notifications.qh:486
 #, c-format
 msgid "^BG%s^K1 played with tiny Hagar rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:475
+#: qcsrc/common/notifications.qh:487
 #, c-format
 msgid "^BG%s%s^K1 was cut down with ^BG%s^K1's HLAC%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:476
+#: qcsrc/common/notifications.qh:488
 #, c-format
 msgid "^BG%s^K1 got a little jumpy with their HLAC%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:477
+#: qcsrc/common/notifications.qh:489
 #, c-format
 msgid "^BG%s%s^K1 was caught in ^BG%s^K1's Hook gravity bomb%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:478
+#: qcsrc/common/notifications.qh:490
 #, c-format
 msgid ""
 "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Klein Bottle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:479
+#: qcsrc/common/notifications.qh:491
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Klein Bottle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:480
+#: qcsrc/common/notifications.qh:492
 #, c-format
 msgid "^BG%s%s^K1 was shot to death by ^BG%s^K1's Laser%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:481
+#: qcsrc/common/notifications.qh:493
 #, c-format
 msgid "^BG%s^K1 shot themself to hell with their Laser%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:482
+#: qcsrc/common/notifications.qh:494
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's mine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:483
+#: qcsrc/common/notifications.qh:495
 #, c-format
 msgid "^BG%s^K1 forgot about their mine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:484
+#: qcsrc/common/notifications.qh:496
 #, c-format
 msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Minstanex%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:485
+#: qcsrc/common/notifications.qh:497
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Mortar grenade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:486
+#: qcsrc/common/notifications.qh:498
 #, c-format
 msgid "^BG%s%s^K1 ate ^BG%s^K1's Mortar grenade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:487
+#: qcsrc/common/notifications.qh:499
 #, c-format
 msgid "^BG%s^K1 didn't see their own Mortar grenade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:488
+#: qcsrc/common/notifications.qh:500
 #, c-format
 msgid "^BG%s^K1 blew themself up with their own Mortar%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:489
+#: qcsrc/common/notifications.qh:501
 #, c-format
 msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Nex%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:490
+#: qcsrc/common/notifications.qh:502
 #, c-format
 msgid "^BG%s%s^K1 was sniped with a Rifle by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:491
+#: qcsrc/common/notifications.qh:503
 #, c-format
 msgid "^BG%s%s^K1 died in ^BG%s^K1's Rifle bullet hail%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:492
+#: qcsrc/common/notifications.qh:504
 #, c-format
 msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle bullet hail%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:493
+#: qcsrc/common/notifications.qh:505
 #, c-format
 msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:494
+#: qcsrc/common/notifications.qh:506
 #, c-format
 msgid "^BG%s%s^K1 ate ^BG%s^K1's rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:495
+#: qcsrc/common/notifications.qh:507
 #, c-format
 msgid "^BG%s%s^K1 got too close ^BG%s^K1's rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:496
+#: qcsrc/common/notifications.qh:508
 #, c-format
 msgid "^BG%s^K1 blew themself up with their Rocketlauncher%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:497
+#: qcsrc/common/notifications.qh:509
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Seeker rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:498
+#: qcsrc/common/notifications.qh:510
 #, c-format
 msgid "^BG%s%s^K1 was tagged by ^BG%s^K1's Seeker%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:499
+#: qcsrc/common/notifications.qh:511
 #, c-format
 msgid "^BG%s^K1 played with tiny Seeker rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:500
+#: qcsrc/common/notifications.qh:512
 #, c-format
 msgid "^BG%s%s^K1 was gunned down by ^BG%s^K1's Shotgun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:501
+#: qcsrc/common/notifications.qh:513
 #, c-format
 msgid "^BG%s%s^K1 slapped ^BG%s^K1 around a bit with a large Shotgun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:502
+#: qcsrc/common/notifications.qh:514
 #, c-format
 msgid "^BG%s^K1 is now thinking with portals%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:503
+#: qcsrc/common/notifications.qh:515
 #, c-format
 msgid "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Tuba%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:504
+#: qcsrc/common/notifications.qh:516
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Tuba%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:505
+#: qcsrc/common/notifications.qh:517
 #, c-format
 msgid "^BG%s%s^K1 was sniped by ^BG%s^K1's Machine Gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:506
+#: qcsrc/common/notifications.qh:518
 #, c-format
 msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:518
+#: qcsrc/common/notifications.qh:536
 msgid "^BGYou are attacking!"
 msgstr "^BGJij bent nu aan het aanvallen!"
 
-#: qcsrc/common/notifications.qh:519
+#: qcsrc/common/notifications.qh:537
 msgid "^BGYou are defending!"
 msgstr "^BGJe bent nu aan het verdedigen!"
 
-#: qcsrc/common/notifications.qh:520
+#: qcsrc/common/notifications.qh:538
 msgid "^F4Begin!"
 msgstr "^F4Begin!"
 
-#: qcsrc/common/notifications.qh:521
+#: qcsrc/common/notifications.qh:539
 msgid "^F4Game starts in ^COUNT"
 msgstr "^F4Game begint in ^COUNT"
 
-#: qcsrc/common/notifications.qh:522
+#: qcsrc/common/notifications.qh:540
 msgid "^F4Round starts in ^COUNT"
 msgstr "^F4Ronde start in ^COUNT"
 
-#: qcsrc/common/notifications.qh:523
+#: qcsrc/common/notifications.qh:541
 msgid "^F4Round cannot start"
 msgstr "^F4De ronde kan niet beginnen"
 
-#: qcsrc/common/notifications.qh:526
+#: qcsrc/common/notifications.qh:544
 msgid "^F2Don't camp!"
 msgstr "^F2Camp niet!"
 
-#: qcsrc/common/notifications.qh:527
+#: qcsrc/common/notifications.qh:545
 msgid ""
 "^BGYou are now free.\n"
 "^BGFeel free to ^F2try to capture^BG the flag again\n"
@@ -2275,7 +2275,7 @@ msgstr ""
 "^BGJe kan de vlag weer ^F2proberen^BG te veroveren\n"
 "^BGals je denkt dat je dat kan."
 
-#: qcsrc/common/notifications.qh:528
+#: qcsrc/common/notifications.qh:546
 msgid ""
 "^BGYou are now ^F1shielded^BG from the flag\n"
 "^BGfor ^F2too many unsuccessful attempts^BG to capture.\n"
@@ -2285,166 +2285,166 @@ msgstr ""
 "^BGje hebt dit te vaak geprobeerd zonder succes.\n"
 "^BGScoor wat punten in de verdiging voordat je het nog een keer probeert."
 
-#: qcsrc/common/notifications.qh:529
+#: qcsrc/common/notifications.qh:547
 msgid "^BGYou captured the ^TC^TT^BG flag!"
 msgstr "^BGJe hebt de ^TC^TT^BG vlag veroverd!"
 
-#: qcsrc/common/notifications.qh:530
+#: qcsrc/common/notifications.qh:548
 #, c-format
 msgid "^BGToo many flag throws! Throwing disabled for %s."
 msgstr "^BGJe hebt de vlag te vaak gegooid! Je kan niet meer gooien voor %s."
 
-#: qcsrc/common/notifications.qh:531
+#: qcsrc/common/notifications.qh:549
 #, c-format
 msgid "^BG%s^BG passed the ^TC^TT^BG flag to %s"
 msgstr "^BG%s^BG heeft de ^TC^TT^BG vlag gepasst naar %s"
 
-#: qcsrc/common/notifications.qh:532
+#: qcsrc/common/notifications.qh:550
 #, c-format
 msgid "^BGYou received the ^TC^TT^BG flag from %s"
 msgstr "^BGJe hebt de ^TC^TT^BG vlag ontvangen van %s"
 
-#: qcsrc/common/notifications.qh:533
+#: qcsrc/common/notifications.qh:551
 #, c-format
 msgid "^BG%s^BG requests you to pass the flag%s"
 msgstr "^BG%s^BG vraagt je de vlag door te geven%s"
 
-#: qcsrc/common/notifications.qh:534
+#: qcsrc/common/notifications.qh:552
 #, c-format
 msgid "^BGRequesting %s^BG to pass you the flag"
 msgstr "^BGVraagt nu %s^BG om je de vlag te geven"
 
-#: qcsrc/common/notifications.qh:535
+#: qcsrc/common/notifications.qh:553
 #, c-format
 msgid "^BGYou passed the ^TC^TT^BG flag to %s"
 msgstr "^BGJe gaf de ^TC^TT^BG vlag aan %s"
 
-#: qcsrc/common/notifications.qh:536
+#: qcsrc/common/notifications.qh:554
 msgid "^BGYou got the ^TC^TT^BG flag!"
 msgstr "^BGJe hebt de ^TC^TT^BG vlag!"
 
-#: qcsrc/common/notifications.qh:537
+#: qcsrc/common/notifications.qh:555
 #, c-format
 msgid "^BGThe %senemy^BG got your flag! Retrieve it!"
 msgstr "^BGDe %svijand^BG heeft je vlag! Breng het terug!"
 
-#: qcsrc/common/notifications.qh:538
+#: qcsrc/common/notifications.qh:556
 #, c-format
 msgid "^BGThe %senemy (^BG%s%s)^BG got your flag! Retrieve it!"
 msgstr "^BGDe %svijand (^BG%s%s)^BG heeft je vlag! Breng het terug!"
 
-#: qcsrc/common/notifications.qh:539
+#: qcsrc/common/notifications.qh:557
 #, c-format
 msgid "^BGYour %steam mate^BG got the flag! Protect them!"
 msgstr "^BGJe %steamgenoot^BG heeft de vlag! Bescherm ze!"
 
-#: qcsrc/common/notifications.qh:540
+#: qcsrc/common/notifications.qh:558
 #, c-format
 msgid "^BGYour %steam mate (^BG%s%s)^BG got the flag! Protect them!"
 msgstr "^BGJe %steamgenoot (^BG%s%s)^BG heeft de vlag! Bescherm ze!"
 
-#: qcsrc/common/notifications.qh:541
+#: qcsrc/common/notifications.qh:559
 msgid "^BGYou returned the ^TC^TT^BG flag!"
 msgstr "^BGJe hebt de ^TC^TT^BG vlag terug gebracht!"
 
-#: qcsrc/common/notifications.qh:542
+#: qcsrc/common/notifications.qh:560
 msgid "^BGStalemate! Enemies can now see you on radar!"
 msgstr "^BGPatstelling! Vijanden kunnen je nu zien op de radar!"
 
-#: qcsrc/common/notifications.qh:543
+#: qcsrc/common/notifications.qh:561
 msgid "^BGStalemate! Flag carriers can now be seen by enemies on radar!"
 msgstr ""
 "^BGPatstelling! Vlagdragers kunnen nu worden gezien door hun vijanden op de "
 "radar!"
 
-#: qcsrc/common/notifications.qh:544
+#: qcsrc/common/notifications.qh:562
 #, c-format
 msgid "^K3%sYou fragged ^BG%s"
 msgstr "^K3%sJij hebt ^BG%s gedood"
 
-#: qcsrc/common/notifications.qh:544
+#: qcsrc/common/notifications.qh:562
 #, c-format
 msgid "^K3%sYou scored against ^BG%s"
 msgstr "^K3%sJe hebt gescoord tegen ^BG%s"
 
-#: qcsrc/common/notifications.qh:545
+#: qcsrc/common/notifications.qh:563
 #, c-format
 msgid "^K1%sYou were fragged by ^BG%s"
 msgstr "^K1%sJe bent gedood door ^BG%s"
 
-#: qcsrc/common/notifications.qh:545
+#: qcsrc/common/notifications.qh:563
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s"
 msgstr "^K1%sEr is tegen je gescoord door ^BG%s"
 
-#: qcsrc/common/notifications.qh:546
+#: qcsrc/common/notifications.qh:564
 #, c-format
 msgid "^K1%sYou were fragged by ^BG%s^BG%s"
 msgstr "^K1%sJe bent gedood door ^BG%s^BG%s"
 
-#: qcsrc/common/notifications.qh:546
+#: qcsrc/common/notifications.qh:564
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^BG%s"
 msgstr "^K1%sEr is tegen je gescoord door ^BG%s^BG%s"
 
-#: qcsrc/common/notifications.qh:547
+#: qcsrc/common/notifications.qh:565
 #, c-format
 msgid "^K3%sYou fragged ^BG%s^BG%s"
 msgstr "^K3%sJe hebt ^BG%s^BG%s gedood"
 
-#: qcsrc/common/notifications.qh:547
+#: qcsrc/common/notifications.qh:565
 #, c-format
 msgid "^K3%sYou scored against ^BG%s^BG%s"
 msgstr "^K3%sJe hebt tegen ^BG%s^BG%s gescoord"
 
-#: qcsrc/common/notifications.qh:548
+#: qcsrc/common/notifications.qh:566
 #, c-format
 msgid "^K1%sYou scored against ^BG%s^K1 while they were typing"
 msgstr "^K1%sJe hebt tegen ^BG%s^K1 gescoord terwijl deze aan het typen was"
 
-#: qcsrc/common/notifications.qh:548
+#: qcsrc/common/notifications.qh:566
 #, c-format
 msgid "^K1%sYou typefragged ^BG%s"
 msgstr "^K1%sJe hebt ^BG%s gedood terwijl hij aan het typen was"
 
-#: qcsrc/common/notifications.qh:549
+#: qcsrc/common/notifications.qh:567
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^K1 while typing!"
 msgstr ""
 "^K1%sEr is tegen je gescoord terwijl je aan het typen was door ^BG%s^K1!"
 
-#: qcsrc/common/notifications.qh:549
+#: qcsrc/common/notifications.qh:567
 #, c-format
 msgid "^K1%sYou were typefragged by ^BG%s"
 msgstr "^K1%sJe bent gedood terwijl je aan het typen was door ^BG%s"
 
-#: qcsrc/common/notifications.qh:550
+#: qcsrc/common/notifications.qh:568
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^K1 while typing^BG%s"
 msgstr ""
 "^K1%sEr werd door ^BG%s^K1 tegen je gescoord terwijl je aan het typen was^BG"
 "%s"
 
-#: qcsrc/common/notifications.qh:550
+#: qcsrc/common/notifications.qh:568
 #, c-format
 msgid "^K1%sYou were typefragged by ^BG%s^BG%s"
 msgstr "^K1%sJe bent gedood terwijl je aan het typen was door ^BG%s^BG%s"
 
-#: qcsrc/common/notifications.qh:551
+#: qcsrc/common/notifications.qh:569
 #, c-format
 msgid "^K1%sYou scored against ^BG%s^K1 while they were typing^BG%s"
 msgstr "^K1%sJij scoorde tegen ^BG%s^K1 terwijl hij aan het typen was^BG%s"
 
-#: qcsrc/common/notifications.qh:551
+#: qcsrc/common/notifications.qh:569
 #, c-format
 msgid "^K1%sYou typefragged ^BG%s^BG%s"
 msgstr "^K1%sJe hebt ^BG%s^BG%s gedood terwijl hij aan het typen was"
 
-#: qcsrc/common/notifications.qh:552
+#: qcsrc/common/notifications.qh:570
 msgid "^BGPress ^F2DROPWEAPON^BG again to toss the nade!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:553
+#: qcsrc/common/notifications.qh:571
 #, c-format
 msgid ""
 "^BGYou have been moved into a different team\n"
@@ -2453,193 +2453,193 @@ msgstr ""
 "^BGJe bent verplaatst naar een ander team\n"
 "Je bent nu in: %s"
 
-#: qcsrc/common/notifications.qh:554
+#: qcsrc/common/notifications.qh:572
 msgid "^K1Don't go against your team mates!"
 msgstr "^K1Ga niet tegen je teammates!"
 
-#: qcsrc/common/notifications.qh:554
+#: qcsrc/common/notifications.qh:572
 msgid "^K1Don't shoot your team mates!"
 msgstr "^K1Schiet niet op je teamgenoten!"
 
-#: qcsrc/common/notifications.qh:555
+#: qcsrc/common/notifications.qh:573
 msgid "^K1Die camper!"
 msgstr "^K1Val dood, camper!"
 
-#: qcsrc/common/notifications.qh:555
+#: qcsrc/common/notifications.qh:573
 msgid "^K1Reconsider your tactics, camper!"
 msgstr "^K1Heroverweeg je tactieken, camper!"
 
-#: qcsrc/common/notifications.qh:556
+#: qcsrc/common/notifications.qh:574
 msgid "^K1You unfairly eliminated yourself!"
 msgstr "^K1Je hebt jezelf onterecht geëlimineerd!"
 
-#: qcsrc/common/notifications.qh:557
+#: qcsrc/common/notifications.qh:575
 #, c-format
 msgid "^K1You were %s"
 msgstr "^K1Je was %s"
 
-#: qcsrc/common/notifications.qh:558
+#: qcsrc/common/notifications.qh:576
 msgid "^K1You couldn't catch your breath!"
 msgstr "^K1Je kon geen adem halen!"
 
-#: qcsrc/common/notifications.qh:559
+#: qcsrc/common/notifications.qh:577
 msgid "^K1You hit the ground with a crunch!"
 msgstr "^K1Je raakte de grond met gekraak!"
 
-#: qcsrc/common/notifications.qh:560
+#: qcsrc/common/notifications.qh:578
 msgid "^K1You felt a little too hot!"
 msgstr "^K1Je voelde je een beetje te heet!"
 
-#: qcsrc/common/notifications.qh:560
+#: qcsrc/common/notifications.qh:578
 msgid "^K1You got a little bit too crispy!"
 msgstr "^K1Je werd een beetje te knapperig!"
 
-#: qcsrc/common/notifications.qh:561
+#: qcsrc/common/notifications.qh:579
 msgid "^K1You killed your own dumb self!"
 msgstr "^K1Je hebt jezelf gedood!"
 
-#: qcsrc/common/notifications.qh:561
+#: qcsrc/common/notifications.qh:579
 msgid "^K1You need to be more careful!"
 msgstr "^K1Je moet voorzichtiger zijn!"
 
-#: qcsrc/common/notifications.qh:562
+#: qcsrc/common/notifications.qh:580
 msgid "^K1You couldn't stand the heat!"
 msgstr "^K1Je kon de hitte niet verdragen!"
 
-#: qcsrc/common/notifications.qh:563
+#: qcsrc/common/notifications.qh:581
 msgid "^K1Tastes like chicken!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:563
+#: qcsrc/common/notifications.qh:581
 msgid "^K1You forgot to put the pin back in!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:564
+#: qcsrc/common/notifications.qh:582
 msgid "^K1You are respawning for running out of ammo..."
 msgstr "^K1Je respawnt omdat je geen munitie meer had..."
 
-#: qcsrc/common/notifications.qh:564
+#: qcsrc/common/notifications.qh:582
 msgid "^K1You were killed for running out of ammo..."
 msgstr "^K1Je bent gedood omdat je geen munitie meer had..."
 
-#: qcsrc/common/notifications.qh:565
+#: qcsrc/common/notifications.qh:583
 msgid "^K1You grew too old without taking your medicine"
 msgstr "^K1Je bent te oud geworden zonder je medicijnen te nemen"
 
-#: qcsrc/common/notifications.qh:565
+#: qcsrc/common/notifications.qh:583
 msgid "^K1You need to preserve your health"
 msgstr "^K1Je moet je levenspunten behouden"
 
-#: qcsrc/common/notifications.qh:566
+#: qcsrc/common/notifications.qh:584
 msgid "^K1You became a shooting star!"
 msgstr "^K1Je bent een vallende ster geworden!"
 
-#: qcsrc/common/notifications.qh:567
+#: qcsrc/common/notifications.qh:585
 msgid "^K1You melted away in slime!"
 msgstr "^K1Je bent gesmolten in slijm!"
 
-#: qcsrc/common/notifications.qh:568
+#: qcsrc/common/notifications.qh:586
 msgid "^K1You committed suicide!"
 msgstr "^K1Je hebt zelfmoord gepleegd!"
 
-#: qcsrc/common/notifications.qh:568
+#: qcsrc/common/notifications.qh:586
 msgid "^K1You ended it all!"
 msgstr "^K1Je hebt het allemaal beëindigd!   "
 
-#: qcsrc/common/notifications.qh:569
+#: qcsrc/common/notifications.qh:587
 msgid "^K1You got stuck in a swamp!"
 msgstr "^K1Je bent vast komen te zitten in een moeras!"
 
-#: qcsrc/common/notifications.qh:570
+#: qcsrc/common/notifications.qh:588
 #, c-format
 msgid "^BGYou are now on: %s"
 msgstr "^BGJe bent nu in: %s"
 
-#: qcsrc/common/notifications.qh:571
+#: qcsrc/common/notifications.qh:589
 msgid "^K1You died in an accident!"
 msgstr "^K1Je bent omgekomen bij een ongeluk!"
 
-#: qcsrc/common/notifications.qh:572
+#: qcsrc/common/notifications.qh:590
 msgid "^K1You had an unfortunate run in with a turret!"
 msgstr "^K1Je hebt een ongelukkige botsing gehad met een turret!"
 
-#: qcsrc/common/notifications.qh:572
+#: qcsrc/common/notifications.qh:590
 msgid "^K1You were fragged by a turret!"
 msgstr "^K1Je bent gedood door een turret!"
 
-#: qcsrc/common/notifications.qh:573
+#: qcsrc/common/notifications.qh:591
 msgid "^K1You had an unfortunate run in with an eWheel turret!"
 msgstr "^K1Je had een onfortuinlijke botsing met een eWheel turret!"
 
-#: qcsrc/common/notifications.qh:573
+#: qcsrc/common/notifications.qh:591
 msgid "^K1You were fragged by an eWheel turret!"
 msgstr "^K1Je bent gedood door een eWheel turret!"
 
-#: qcsrc/common/notifications.qh:574
+#: qcsrc/common/notifications.qh:592
 msgid "^K1You had an unfortunate run in with a Walker turret!"
 msgstr "^K1Je had een onfortuinlijke botsing met een Walker turret!"
 
-#: qcsrc/common/notifications.qh:574
+#: qcsrc/common/notifications.qh:592
 msgid "^K1You were fragged by a Walker turret!"
 msgstr "^K1Je werd gedood door een Walker turret!"
 
-#: qcsrc/common/notifications.qh:575
+#: qcsrc/common/notifications.qh:593
 msgid "^K1You got caught in the blast of a Bumblebee explosion!"
 msgstr "^K1Je bent terecht gekomen in de explosie van een Bumblebee!"
 
-#: qcsrc/common/notifications.qh:576
+#: qcsrc/common/notifications.qh:594
 msgid "^K1You were crushed by a vehicle!"
 msgstr "^K1Je bent platgewalst door een voertuig!"
 
-#: qcsrc/common/notifications.qh:577
+#: qcsrc/common/notifications.qh:595
 msgid "^K1You were caught in a Raptor cluster bomb!"
 msgstr "^K1Je bent opgeblazen door een clusterbom van een Raptor!"
 
-#: qcsrc/common/notifications.qh:578
+#: qcsrc/common/notifications.qh:596
 msgid "^K1You got caught in the blast of a Raptor explosion!"
 msgstr "^K1Je bent opgeblazen in de explosie van een Raptor!"
 
-#: qcsrc/common/notifications.qh:579
+#: qcsrc/common/notifications.qh:597
 msgid "^K1You got caught in the blast of a Spiderbot explosion!"
 msgstr "^K1Je bent opgeblazen in de explosie van een Spiderbot!"
 
-#: qcsrc/common/notifications.qh:580
+#: qcsrc/common/notifications.qh:598
 msgid "^K1You were blasted to bits by a Spiderbot rocket!"
 msgstr "^K1Je bent in stukken geblazen door een Spiderbot raket!"
 
-#: qcsrc/common/notifications.qh:581
+#: qcsrc/common/notifications.qh:599
 msgid "^K1You got caught in the blast of a Racer explosion!"
 msgstr "^K1Je bent opgeblazen in de explosie van een Racer!"
 
-#: qcsrc/common/notifications.qh:582
+#: qcsrc/common/notifications.qh:600
 msgid "^K1You couldn't find shelter from a Racer rocket!"
 msgstr "^K1Je kon je niet verstoppen voor een Racer raket!"
 
-#: qcsrc/common/notifications.qh:583
+#: qcsrc/common/notifications.qh:601
 msgid "^K1Watch your step!"
 msgstr "^K1Kijk uit waar je loopt!"
 
-#: qcsrc/common/notifications.qh:584
+#: qcsrc/common/notifications.qh:602
 #, c-format
 msgid "^K1Moron! You fragged ^BG%s^K1, a team mate!"
 msgstr "^K1Idioot! Je hebt ^BG%s^K1 gedood, een teamgenoot!"
 
-#: qcsrc/common/notifications.qh:584
+#: qcsrc/common/notifications.qh:602
 #, c-format
 msgid "^K1Moron! You went against ^BG%s^K1, a team mate!"
 msgstr "^K1Idioot! Je ging tegen ^BG%s^K1, een teamgenoot!"
 
-#: qcsrc/common/notifications.qh:585
+#: qcsrc/common/notifications.qh:603
 #, c-format
 msgid "^K1You were fragged by ^BG%s^K1, a team mate"
 msgstr "^K1Je bent gedood door ^BG%s^K1, een teamgenoot"
 
-#: qcsrc/common/notifications.qh:585
+#: qcsrc/common/notifications.qh:603
 #, c-format
 msgid "^K1You were scored against by ^BG%s^K1, a team mate"
 msgstr "^K1Er is tegen je gescoord door ^BG%s^K1, een teamgenoot"
 
-#: qcsrc/common/notifications.qh:586
+#: qcsrc/common/notifications.qh:604
 msgid ""
 "^K1Stop idling!\n"
 "^BGDisconnecting in ^COUNT..."
@@ -2647,48 +2647,48 @@ msgstr ""
 "^K1Stop met nietsdoen!\n"
 "^BGJe verlaat de server automatisch in ^COUNT"
 
-#: qcsrc/common/notifications.qh:587
+#: qcsrc/common/notifications.qh:605
 msgid "^F2You picked up some extra lives"
 msgstr "^F2Je hebt wat extra levens opgepakt"
 
-#: qcsrc/common/notifications.qh:588
+#: qcsrc/common/notifications.qh:606
 #, c-format
 msgid "^K3You froze ^BG%s"
 msgstr "^K3Je hebt ^BG%s bevroren"
 
-#: qcsrc/common/notifications.qh:589
+#: qcsrc/common/notifications.qh:607
 #, c-format
 msgid "^K1You were frozen by ^BG%s"
 msgstr "^K1Je bent bevroren door ^BG%s"
 
-#: qcsrc/common/notifications.qh:590
+#: qcsrc/common/notifications.qh:608
 #, c-format
 msgid "^K3You revived ^BG%s"
 msgstr "^K3Je hebt ^BG%s weer tot leven gewekt"
 
-#: qcsrc/common/notifications.qh:591
+#: qcsrc/common/notifications.qh:609
 msgid "^K3You revived yourself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:592
+#: qcsrc/common/notifications.qh:610
 #, c-format
 msgid "^K3You were revived by ^BG%s"
 msgstr "^K3Je bent weer tot leven gewekt door ^BG%s"
 
-#: qcsrc/common/notifications.qh:593
+#: qcsrc/common/notifications.qh:611
 #, c-format
 msgid "^K3You were automatically revived after %s second(s)"
 msgstr "^K3Je bent automatisch weer tot leven gewekt na %s seconde(n)"
 
-#: qcsrc/common/notifications.qh:596
+#: qcsrc/common/notifications.qh:614
 msgid "^K1You froze yourself"
 msgstr "^K1Je hebt jezelf bevroren"
 
-#: qcsrc/common/notifications.qh:597
+#: qcsrc/common/notifications.qh:615
 msgid "^K1Round already started, you spawn as frozen"
 msgstr "^K1De ronde is al begonnen, je spawnt bevroren"
 
-#: qcsrc/common/notifications.qh:604
+#: qcsrc/common/notifications.qh:622
 msgid ""
 "^K1No spawnpoints available!\n"
 "Hope your team can fix it..."
@@ -2696,7 +2696,7 @@ msgstr ""
 "^K1Geen spawnpunten beschikbaar!\n"
 "Hopelijk kan je team dit oplossen..."
 
-#: qcsrc/common/notifications.qh:605
+#: qcsrc/common/notifications.qh:623
 msgid ""
 "^K1You may not join the game at this time.\n"
 "The player limit reached maximum capacity."
@@ -2704,11 +2704,11 @@ msgstr ""
 "^K1Je mag niet aan het spel deelnemen op dit moment.\n"
 "De speler limiet is bereikt."
 
-#: qcsrc/common/notifications.qh:608
+#: qcsrc/common/notifications.qh:626
 msgid "^BGKilling people while you don't have the ball gives no points!"
 msgstr "^BGSpelers doden die de bal niet hebben levert geen punten op!"
 
-#: qcsrc/common/notifications.qh:609
+#: qcsrc/common/notifications.qh:627
 msgid ""
 "^BGAll keys are in your team's hands!\n"
 "Help the key carriers to meet!"
@@ -2716,7 +2716,7 @@ msgstr ""
 "^BGAlle sleutels zijn in handen van jouw team!\n"
 "Help de dragers elkaar te ontmoeten!"
 
-#: qcsrc/common/notifications.qh:610
+#: qcsrc/common/notifications.qh:628
 msgid ""
 "^BGAll keys are in ^TC^TT team^BG's hands!\n"
 "Interfere ^F4NOW^BG!"
@@ -2724,7 +2724,7 @@ msgstr ""
 "^BGAlle sleutels zijn in handen van team ^TC^TT ^BG!\n"
 "Grijp ^F4NU^BG in!"
 
-#: qcsrc/common/notifications.qh:611
+#: qcsrc/common/notifications.qh:629
 msgid ""
 "^BGAll keys are in your team's hands!\n"
 "Meet the other key carriers ^F4NOW^BG!"
@@ -2732,19 +2732,19 @@ msgstr ""
 "^BGAlle sleutels zijn in het bezit van jouw team!\n"
 "Ontmoet de andere sleuteldragers ^F4NU^BG!"
 
-#: qcsrc/common/notifications.qh:612
+#: qcsrc/common/notifications.qh:630
 msgid "^F4Round will start in ^COUNT"
 msgstr "^F4De ronde start over ^COUNT"
 
-#: qcsrc/common/notifications.qh:613
+#: qcsrc/common/notifications.qh:631
 msgid "^BGScanning frequency range..."
 msgstr "^BGFrequentiebereik aan het scannen..."
 
-#: qcsrc/common/notifications.qh:614
+#: qcsrc/common/notifications.qh:632
 msgid "^BGYou are starting with the ^TC^TT Key"
 msgstr "^BGJe begint met de ^TC^TT sleutel"
 
-#: qcsrc/common/notifications.qh:615 qcsrc/common/notifications.qh:616
+#: qcsrc/common/notifications.qh:633 qcsrc/common/notifications.qh:634
 #, c-format
 msgid ""
 "^BGWaiting for players to join...\n"
@@ -2753,38 +2753,38 @@ msgstr ""
 "^BGAan het wachten voor spelers...\n"
 "Actieve spelers nodig voor: %s"
 
-#: qcsrc/common/notifications.qh:617
+#: qcsrc/common/notifications.qh:635
 #, c-format
 msgid "^BGWaiting for %s player(s) to join..."
 msgstr "^BGAan het wachten op %s speler(s) om mee te doen..."
 
-#: qcsrc/common/notifications.qh:618
+#: qcsrc/common/notifications.qh:636
 msgid "^F4^COUNT^BG left to find some ammo!"
 msgstr "^F4^COUNT^BG over om wat ammo te vinden!"
 
-#: qcsrc/common/notifications.qh:619
+#: qcsrc/common/notifications.qh:637
 msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
 msgstr "^BGPak wat munitie, of je bent dood in ^F4^COUNT^BG!"
 
-#: qcsrc/common/notifications.qh:619
+#: qcsrc/common/notifications.qh:637
 msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
 msgstr "^BGPak wat munitie op! ^F4^COUNT^BG over!"
 
-#: qcsrc/common/notifications.qh:620
+#: qcsrc/common/notifications.qh:638
 #, c-format
 msgid "^F2Extra lives remaining: ^K1%s"
 msgstr "^F2Resterende extra levens: ^K1%s"
 
-#: qcsrc/common/notifications.qh:621
+#: qcsrc/common/notifications.qh:639
 msgid "^BGSecondary fire inflicts no damage!"
 msgstr "^BGSecundaire vuurmodus doet geen damage!"
 
-#: qcsrc/common/notifications.qh:622
+#: qcsrc/common/notifications.qh:640
 #, c-format
 msgid "^BG%s"
 msgstr "^BG%s"
 
-#: qcsrc/common/notifications.qh:623
+#: qcsrc/common/notifications.qh:641
 #, c-format
 msgid ""
 "^F2^COUNT^BG until weapon change...\n"
@@ -2793,16 +2793,16 @@ msgstr ""
 "^F2^COUNT^BG tot de wapens veranderen...\n"
 "Volgend wapen: ^F1%s"
 
-#: qcsrc/common/notifications.qh:624
+#: qcsrc/common/notifications.qh:642
 #, c-format
 msgid "^F2Active weapon: ^F1%s"
 msgstr "^F2Actief wapen: ^F1%s"
 
-#: qcsrc/common/notifications.qh:625
+#: qcsrc/common/notifications.qh:643
 msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:626
+#: qcsrc/common/notifications.qh:644
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "Keep fragging until we have a winner!"
@@ -2810,7 +2810,7 @@ msgstr ""
 "^F4VERLENGING!^F2\n"
 "Blijf spelen tot we een winnaar hebben!"
 
-#: qcsrc/common/notifications.qh:626
+#: qcsrc/common/notifications.qh:644
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "Keep scoring until we have a winner!"
@@ -2818,7 +2818,7 @@ msgstr ""
 "^F4VERLENING^F2!\n"
 "Blijf scoren tot we een winnaar hebben!"
 
-#: qcsrc/common/notifications.qh:627
+#: qcsrc/common/notifications.qh:645
 #, c-format
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
@@ -2827,210 +2827,210 @@ msgstr ""
 "^F4VERLENGING^F2!\n"
 "^BG^F4%s^BG toegevoegd aan het spel!"
 
-#: qcsrc/common/notifications.qh:628
+#: qcsrc/common/notifications.qh:646
 msgid "^F2Invisibility has worn off"
 msgstr "^F2Onzichtbaarheid is uitgewerkt"
 
-#: qcsrc/common/notifications.qh:629
+#: qcsrc/common/notifications.qh:647
 msgid "^F2Shield has worn off"
 msgstr "^F2Schild is uitgewerkt"
 
-#: qcsrc/common/notifications.qh:630
+#: qcsrc/common/notifications.qh:648
 msgid "^F2Speed has worn off"
 msgstr "^F2Snelheid is uitgewerkt"
 
-#: qcsrc/common/notifications.qh:631
+#: qcsrc/common/notifications.qh:649
 msgid "^F2Strength has worn off"
 msgstr "^F2Kracht is uitgewerkt"
 
-#: qcsrc/common/notifications.qh:632
+#: qcsrc/common/notifications.qh:650
 msgid "^F2You are invisible"
 msgstr "^F2Je bent onzichtbaar"
 
-#: qcsrc/common/notifications.qh:633
+#: qcsrc/common/notifications.qh:651
 msgid "^F2Shield surrounds you"
 msgstr "^F2Een schild omringt je"
 
-#: qcsrc/common/notifications.qh:634
+#: qcsrc/common/notifications.qh:652
 msgid "^F2You are on speed"
 msgstr "^F2Je bent op snelheid"
 
-#: qcsrc/common/notifications.qh:635
+#: qcsrc/common/notifications.qh:653
 msgid "^F2Strength infuses your weapons with devastating power"
 msgstr "^F2Kracht doordringt je wapens met verwoestende kracht"
 
-#: qcsrc/common/notifications.qh:636
+#: qcsrc/common/notifications.qh:654
 msgid "^F2The race is over, finish your lap!"
 msgstr "^F2De race is voorbij, maak je ronde af!"
 
-#: qcsrc/common/notifications.qh:637
+#: qcsrc/common/notifications.qh:655
 msgid "^F2Superweapons have broken down"
 msgstr "^F2Superwapens zijn afgebroken"
 
-#: qcsrc/common/notifications.qh:638
+#: qcsrc/common/notifications.qh:656
 msgid "^F2Superweapons have been lost"
 msgstr "^F2De superwapens zijn kwijtgeraakt"
 
-#: qcsrc/common/notifications.qh:639
+#: qcsrc/common/notifications.qh:657
 msgid "^F2You now have a superweapon"
 msgstr "^F2Je hebt nu een superwapen"
 
-#: qcsrc/common/notifications.qh:640
+#: qcsrc/common/notifications.qh:658
 msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
 msgstr "^K1Verandering naar ^TC^TT^K1 in ^COUNT"
 
-#: qcsrc/common/notifications.qh:641
+#: qcsrc/common/notifications.qh:659
 msgid "^K1Changing team in ^COUNT"
 msgstr "^K1Verandering van team in ^COUNT"
 
-#: qcsrc/common/notifications.qh:642
+#: qcsrc/common/notifications.qh:660
 msgid "^K1Spectating in ^COUNT"
 msgstr "^K1Toeschouwen in ^COUNT"
 
-#: qcsrc/common/notifications.qh:643
+#: qcsrc/common/notifications.qh:661
 msgid "^K1Suicide in ^COUNT"
 msgstr "^K1Zelfmoord in ^COUNT"
 
-#: qcsrc/common/notifications.qh:644
+#: qcsrc/common/notifications.qh:662
 msgid "^F4Timeout begins in ^COUNT"
 msgstr "^F4Timeout begint in ^COUNT"
 
-#: qcsrc/common/notifications.qh:645
+#: qcsrc/common/notifications.qh:663
 msgid "^F4Timeout ends in ^COUNT"
 msgstr "^F4Timeout eindigt in ^COUNT"
 
-#: qcsrc/common/notifications.qh:907 qcsrc/common/notifications.qh:908
+#: qcsrc/common/notifications.qh:937 qcsrc/common/notifications.qh:938
 #, c-format
 msgid " (near %s)"
 msgstr "(dichtbij %s)"
 
-#: qcsrc/common/notifications.qh:915 qcsrc/common/notifications.qh:916
+#: qcsrc/common/notifications.qh:945 qcsrc/common/notifications.qh:946
 msgid "primary"
 msgstr "primaire"
 
-#: qcsrc/common/notifications.qh:915 qcsrc/common/notifications.qh:916
+#: qcsrc/common/notifications.qh:945 qcsrc/common/notifications.qh:946
 msgid "secondary"
 msgstr "secundaire"
 
-#: qcsrc/common/notifications.qh:926
+#: qcsrc/common/notifications.qh:956
 #, c-format
 msgid " ^F1(Press %s)"
 msgstr "^F1(Druk %s)"
 
-#: qcsrc/common/notifications.qh:935
+#: qcsrc/common/notifications.qh:965
 #, c-format
 msgid " with %s"
 msgstr "met %s"
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 #, c-format
 msgid "%s^K1 made a TRIPLE FRAG! %s^BG"
 msgstr "%s^K1 heeft een DRIEDUBBELE KILL gemaakt! %s^BG"
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 #, c-format
 msgid "%s^K1 made a TRIPLE SCORE! %s^BG"
 msgstr "%s^K1 heeft DRIE KEER OP RIJ GESCOORD! %s^BG"
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 msgid "TRIPLE FRAG! "
 msgstr "DRIEDUBBELE KILL!"
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 #, c-format
 msgid "%s^K1 made FIVE SCORES IN A ROW! %s^BG"
 msgstr "%s^K1 heeft VIJF KEER OP RIJ GESCOORD! %s^BG"
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 #, c-format
 msgid "%s^K1 unlocked RAGE! %s^BG"
 msgstr "%s^K1 heeft RAGE vrijgespeeld! %s^BG"
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 msgid "RAGE! "
 msgstr "RAGE!"
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 #, c-format
 msgid "%s^K1 made TEN SCORES IN A ROW! %s^BG"
 msgstr "%s^K1 heeft TIEN KEER OP RIJ GESCOORD! %s^BG"
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 #, c-format
 msgid "%s^K1 started a MASSACRE! %s^BG"
 msgstr "%s^K1 is een BLOEDBAD begonnen! %s^BG"
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 msgid "MASSACRE! "
 msgstr "BLOEDBAD!"
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 #, c-format
 msgid "%s^K1 executed MAYHEM! %s^BG"
 msgstr "%s^K1 heeft MAYHEM uitgevoerd! %s^BG"
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 #, c-format
 msgid "%s^K1 made FIFTEEN SCORES IN A ROW! %s^BG"
 msgstr "%s^K1 heeft VIJTIEN KEER OP RIJ GESCOORD! %s^BG"
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 msgid "MAYHEM! "
 msgstr "MAYHEM!"
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 #, c-format
 msgid "%s^K1 is a BERSERKER! %s^BG"
 msgstr "%s^K1 is een BERSERKER! %s^BG"
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 #, c-format
 msgid "%s^K1 made TWENTY SCORES IN A ROW! %s^BG"
 msgstr "%s^K1 heeft TWINTIG KEER OP RIJ GESCOORD! %s^BG"
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 msgid "BERSERKER! "
 msgstr "BERSERKER!"
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 #, c-format
 msgid "%s^K1 inflicts CARNAGE! %s^BG"
 msgstr "%s^K1 veroorzaakt CARNAGE! %s^BG"
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 #, c-format
 msgid "%s^K1 made TWENTY FIVE SCORES IN A ROW! %s^BG"
 msgstr "%s^K1 heeft VIJFENTWINTIG KEER OP RIJ GESCOORD! %s^BG"
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 msgid "CARNAGE! "
 msgstr "CARNAGE!"
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 #, c-format
 msgid "%s^K1 made THIRTY SCORES IN A ROW! %s^BG"
 msgstr "%s^K1 heeft DERTIG KEER OP RIJ GESCOORD! %s^BG"
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 #, c-format
 msgid "%s^K1 unleashes ARMAGEDDON! %s^BG"
 msgstr "%s^K1 laat de ARMAGEDDON los! %s^BG"
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 msgid "ARMAGEDDON! "
 msgstr "ARMAGEDDON!"
 
-#: qcsrc/common/notifications.qh:956
+#: qcsrc/common/notifications.qh:986
 #, c-format
 msgid "%s(^F1Bot^BG)"
 msgstr "%s(^F1Bot^BG)"
 
-#: qcsrc/common/notifications.qh:958
+#: qcsrc/common/notifications.qh:988
 #, c-format
 msgid "%s(Ping ^F1%d^BG)"
 msgstr "%s(Ping ^F1%d^BG)"
 
-#: qcsrc/common/notifications.qh:964
+#: qcsrc/common/notifications.qh:994
 #, c-format
 msgid ""
 "\n"
@@ -3039,7 +3039,7 @@ msgstr ""
 "\n"
 "(LevenS ^1%d^BG / Pantser ^2%d^BG)%s"
 
-#: qcsrc/common/notifications.qh:966
+#: qcsrc/common/notifications.qh:996
 #, c-format
 msgid ""
 "\n"
@@ -3048,68 +3048,68 @@ msgstr ""
 "\n"
 "(^F4Dood^BG)%s"
 
-#: qcsrc/common/notifications.qh:1003 qcsrc/common/notifications.qh:1016
+#: qcsrc/common/notifications.qh:1033 qcsrc/common/notifications.qh:1046
 #, c-format
 msgid "%d score spree! "
 msgstr "%d score reeks!"
 
-#: qcsrc/common/notifications.qh:1015
+#: qcsrc/common/notifications.qh:1045
 #, c-format
 msgid "%d frag spree! "
 msgstr "%d frag reeks!"
 
-#: qcsrc/common/notifications.qh:1028
+#: qcsrc/common/notifications.qh:1058
 msgid "First blood! "
 msgstr "Eerste bloed!"
 
-#: qcsrc/common/notifications.qh:1028
+#: qcsrc/common/notifications.qh:1058
 msgid "First score! "
 msgstr "Eerste score! "
 
-#: qcsrc/common/notifications.qh:1032
+#: qcsrc/common/notifications.qh:1062
 msgid "First casualty! "
 msgstr "Eerste ongeval! "
 
-#: qcsrc/common/notifications.qh:1032
+#: qcsrc/common/notifications.qh:1062
 msgid "First victim! "
 msgstr "Eerste slachtoffer!"
 
-#: qcsrc/common/notifications.qh:1073
+#: qcsrc/common/notifications.qh:1103
 #, c-format
 msgid "%s^K1 has %d frags in a row! %s^BG"
 msgstr "%s^K1 heeft %d frags op een rij! %s^BG"
 
-#: qcsrc/common/notifications.qh:1074
+#: qcsrc/common/notifications.qh:1104
 #, c-format
 msgid "%s^K1 made %d scores in a row! %s^BG"
 msgstr "%s^K1 heeft %d keer op een rij gescoord! %s^BG"
 
-#: qcsrc/common/notifications.qh:1092
+#: qcsrc/common/notifications.qh:1122
 #, c-format
 msgid "%s^K1 drew first blood! %s^BG"
 msgstr "%s^K1 heeft het eerste bloed vergoten! %s^BG"
 
-#: qcsrc/common/notifications.qh:1093
+#: qcsrc/common/notifications.qh:1123
 #, c-format
 msgid "%s^K1 got the first score! %s^BG"
 msgstr "%s^K1 heeft het eerst gescoord! %s^BG"
 
-#: qcsrc/common/notifications.qh:1109
+#: qcsrc/common/notifications.qh:1139
 #, c-format
 msgid ", ending their %d frag spree"
 msgstr ", een einde makend aan zijn %d frag reeks"
 
-#: qcsrc/common/notifications.qh:1110
+#: qcsrc/common/notifications.qh:1140
 #, c-format
 msgid ", ending their %d score spree"
 msgstr ", een einde maken aan zijn %d score reeks"
 
-#: qcsrc/common/notifications.qh:1124
+#: qcsrc/common/notifications.qh:1154
 #, c-format
 msgid ", losing their %d frag spree"
 msgstr ", zijn %d frag reeks verliezend"
 
-#: qcsrc/common/notifications.qh:1125
+#: qcsrc/common/notifications.qh:1155
 #, c-format
 msgid ", losing their %d score spree"
 msgstr ", zijn %d score reeks verliezend"
@@ -3176,11 +3176,11 @@ msgstr "Item %d"
 msgid "%d (%s)"
 msgstr "%d (%s)"
 
-#: qcsrc/menu/item/textslider.c:29 qcsrc/menu/item/textslider.c:31
+#: qcsrc/menu/item/textslider.c:31 qcsrc/menu/item/textslider.c:33
 msgid "custom"
 msgstr "aangepast"
 
-#: qcsrc/menu/menu.qc:56
+#: qcsrc/menu/menu.qc:59
 #, c-format
 msgid "^4MQC Build information: ^1%s\n"
 msgstr "^4MQC Versie informatie: ^1%s\n"
@@ -3227,7 +3227,7 @@ msgstr "Aftiteling"
 #: 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_sandboxtools.c:89
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:90
 #: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:77
 #: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:21
 msgid "OK"
@@ -3282,33 +3282,33 @@ msgstr "Instellingen opslaan"
 msgid "Ammo Panel"
 msgstr "Ammunitie Paneel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:23
 msgid "Ammunition display:"
 msgstr "Ammunitie venster:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:26
 msgid "Show only current ammo type"
 msgstr "Laat alleen huidig ammunitietype zien"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
 msgid "Align icon:"
 msgstr "Icoon uitlijning:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:36
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:28
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:40
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:28
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:40
-msgid "Left"
-msgstr "Links"
-
 #: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:30
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:38
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:29
 #: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:41
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:29
 #: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:41
+msgid "Left"
+msgstr "Links"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:42
 msgid "Right"
 msgstr "Rechts"
 
@@ -3316,28 +3316,28 @@ msgstr "Rechts"
 msgid "Centerprint"
 msgstr "Centerprint"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:24
 msgid "Message duration:"
 msgstr "Bericht lengte:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:27
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:28
 msgid "Fade time:"
 msgstr "Vervaagtijd:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:32
 msgid "Flip messages order"
 msgstr "Berichtvolgorde omdraaien"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:34
 msgid "Text alignment:"
 msgstr "Text positie:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:38
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:51
 msgid "Center"
 msgstr "Gecentreerd"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:41
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:42
 msgid "Font scale:"
 msgstr "Lettertype schaal:"
 
@@ -3345,19 +3345,19 @@ msgstr "Lettertype schaal:"
 msgid "Chat Panel"
 msgstr "Chat Paneel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:23
 msgid "Chat entries:"
 msgstr "Chat posts:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:26
 msgid "Chat size:"
 msgstr "Chat grootte:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:30
 msgid "Chat lifetime:"
 msgstr "Chat tijd:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:34
 msgid "Chat beep sound"
 msgstr "Chat geluid"
 
@@ -3365,11 +3365,11 @@ msgstr "Chat geluid"
 msgid "Engine Info Panel"
 msgstr "Engine Informatie Paneel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:23
 msgid "Engine info:"
 msgstr "Engine informatie:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:26
 msgid "Use an averaging algorithm for fps"
 msgstr "Gebruik een middelend algoritme voor fps"
 
@@ -3377,36 +3377,36 @@ msgstr "Gebruik een middelend algoritme voor fps"
 msgid "Health/Armor Panel"
 msgstr "Health/Armor Paneel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:22
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:23
 msgid "Enable status bar"
 msgstr "Activeer status balk"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:24
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:25
 msgid "Status bar alignment:"
 msgstr "Statusbalk positie:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:32
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:42
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:32
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:43
 msgid "Inward"
 msgstr "Binnenkant"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:34
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:43
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:34
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:44
 msgid "Outward"
 msgstr "Buitenkant"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:37
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:38
 msgid "Icon alignment:"
 msgstr "Icoon positie:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:46
 msgid "Flip health and armor positions"
 msgstr "Keer health en armor posities om"
 
@@ -3414,11 +3414,11 @@ msgstr "Keer health en armor posities om"
 msgid "Info Messages Panel"
 msgstr "Informatieberichten Paneel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:23
 msgid "Info messages:"
 msgstr "Info berichten:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:26
 msgid "Flip align"
 msgstr "Anders uitlijnen"
 
@@ -3430,23 +3430,23 @@ msgstr "Speliconen Paneel"
 msgid "Notification Panel"
 msgstr "Notificatie Paneel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:23
 msgid "Notifications:"
 msgstr "Notificaties:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:26
 msgid "Also print notifications to the console"
 msgstr "Notificaties ook in de console printen"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:29
 msgid "Flip notify order"
 msgstr "Notificatievolgorde omdraaien"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:32
 msgid "Entry lifetime:"
 msgstr "Post tijd:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:36
 msgid "Entry fadetime:"
 msgstr "Post vervaagtijd:"
 
@@ -3454,96 +3454,96 @@ msgstr "Post vervaagtijd:"
 msgid "Physics Panel"
 msgstr "Physics Paneel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:22
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:22
 msgid "Panel disabled"
 msgstr "Paneel uitgeschakeld"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
 msgid "Panel enabled"
 msgstr "Paneel ingeschakeld"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
 msgid "Panel enabled even observing"
 msgstr "Paneel activeren tijdens observeren"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:26
 msgid "Panel enabled only in Race/CTS"
 msgstr "Paneel alleen actief in Race/CTS"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:32
 msgid "Status bar"
 msgstr "Status balk"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:49
 msgid "Left align"
 msgstr "Links uitlijnen"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:53
 msgid "Right align"
 msgstr "Rechts uitlijnen"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
 msgid "Inward align"
 msgstr "Binnenkant"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:37
 msgid "Outward align"
 msgstr "Buitenkant"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:41
 msgid "Flip speed/acceleration positions"
 msgstr "Keer snelheid/acceleratie posities om"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
 #: qcsrc/menu/xonotic/dialog_settings_misc.c:29
 msgid "Speed:"
 msgstr "Snelheid:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:46
 msgid "Include vertical speed"
 msgstr "Inclusief verticale snelheid"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:56
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:57
 msgid "Speed unit:"
 msgstr "Snelheid eenheid:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:58
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
 msgid "qu/s"
 msgstr "qu/s"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
 msgid "m/s"
 msgstr "m/s"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
 msgid "km/h"
 msgstr "km/h"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
 msgid "mph"
 msgstr "mph"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:63
 msgid "knots"
 msgstr "knopen"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:64
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:65
 msgid "Show"
 msgstr "Toon"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:67
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:68
 msgid "Top speed"
 msgstr "Top snelheid"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:73
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
 msgid "Acceleration:"
 msgstr "Acceleratie:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:75
 msgid "Include vertical acceleration"
 msgstr "Inclusief verticale versnelling"
 
@@ -3551,7 +3551,7 @@ msgstr "Inclusief verticale versnelling"
 msgid "Powerups Panel"
 msgstr "Powerups paneel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:46
 msgid "Flip strength and shield positions"
 msgstr "Keer kracht en schild posities om"
 
@@ -3559,16 +3559,16 @@ msgstr "Keer kracht en schild posities om"
 msgid "Pressed Keys Panel"
 msgstr "Ingedrukte Toetsen Paneel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
 msgid "Panel enabled when spectating"
 msgstr "Paneel activeren tijdens observeren"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:24
 msgid "Panel always enabled"
 msgstr "Paneel altijd actief"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:31
 msgid "Forced aspect:"
 msgstr "Aspect ratio:"
 
@@ -3580,68 +3580,68 @@ msgstr "Race Tijd Paneel"
 msgid "Radar Panel"
 msgstr "Radar Paneel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
 msgid "Panel enabled in teamgames"
 msgstr "Paneel actief in teammodus"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:30
 msgid "Radar:"
 msgstr "Radar:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:32
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:43
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:82
+#: 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
 msgid "Alpha:"
 msgstr "Alpha:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:37
 msgid "Rotation:"
 msgstr "Rotatie:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:39
 msgid "Forward"
 msgstr "Voorwaarts"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:40
 msgid "West"
 msgstr "West"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:41
 msgid "South"
 msgstr "Zuid"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:41
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:42
 msgid "East"
 msgstr "Oost"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:43
 msgid "North"
 msgstr "Noord"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:46
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:47
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:63
 msgid "Scale:"
 msgstr "Schaal:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:50
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:51
 msgid "Zoom mode:"
 msgstr "Zoom modus:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:52
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:53
 msgid "Zoomed in"
 msgstr "Ingezoomd"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:53
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:54
 msgid "Zoomed out"
 msgstr "Uitgezoomd"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:54
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:55
 msgid "Always zoomed"
 msgstr "Altijd ingezoomd"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:55
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:56
 msgid "Never zoomed"
 msgstr "Altijd uitgezoomd"
 
@@ -3649,23 +3649,23 @@ msgstr "Altijd uitgezoomd"
 msgid "Score Panel"
 msgstr "Score Paneel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:23
 msgid "Score:"
 msgstr "Score:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
 msgid "Rankings:"
 msgstr "Classificering:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
 msgid "Off"
 msgstr "Uit"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
 msgid "And me"
 msgstr "En ik"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:29
 msgid "Pure"
 msgstr "Puur"
 
@@ -3673,11 +3673,11 @@ msgstr "Puur"
 msgid "Timer Panel"
 msgstr "Tijd Paneel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:23
 msgid "Timer:"
 msgstr "Timer:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:26
 msgid "Show elapsed time"
 msgstr "Laat verstreken tijd zien"
 
@@ -3685,7 +3685,7 @@ msgstr "Laat verstreken tijd zien"
 msgid "Vote Panel"
 msgstr "Stem Paneel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:23
 msgid "Alpha after voting:"
 msgstr "Alpha na stemmen:"
 
@@ -3693,76 +3693,76 @@ msgstr "Alpha na stemmen:"
 msgid "Weapons Panel"
 msgstr "Wapenpaneel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:25
 msgid "Fade out after:"
 msgstr "Vervagen na:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:26
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:27
 msgid "Never"
 msgstr "Nooit"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:29
 #, c-format
 msgid "%ds"
 msgstr "%ds"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:32
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:33
 msgid "Fade effect:"
 msgstr "Vervagingseffect:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
 msgid "EF^None"
 msgstr "EF^Geen"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:37
 msgid "Alpha"
 msgstr "Alpha"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
 msgid "Slide"
 msgstr "Schuiven"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:39
 msgid "EF^Both"
 msgstr "EF^Beiden"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:43
 msgid "Weapon icons:"
 msgstr "Wapeniconen:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46
 msgid "Show only owned weapons"
 msgstr "Laat alleen wapens in bezit zien"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:48
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
 msgid "Show weapon ID as:"
 msgstr "Toon wapen-ID als:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
 msgid "SHOWAS^None"
 msgstr "SHOWAS^Geen"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
 msgid "Number"
 msgstr "Nummer"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:52
 msgid "Bind"
 msgstr "Binden"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:54
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
 msgid "Show Accuracy"
 msgstr "Nauwkeurigheid tonen"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:56
 msgid "Show Ammo"
 msgstr "Ammunitie tonen"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:58
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:59
 msgid "Ammo bar color:"
 msgstr "Ammunitie balk kleur:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:64
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:65
 msgid "Ammo bar alpha:"
 msgstr "Ammunitie alpha:"
 
@@ -3770,85 +3770,85 @@ msgstr "Ammunitie alpha:"
 msgid "Panel HUD Setup"
 msgstr "Paneel HUD Instellingen"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:21
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:22
 msgid "Panel background defaults:"
 msgstr "Paneel achtergrond standaards:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:23 qcsrc/menu/xonotic/util.qc:683
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:24 qcsrc/menu/xonotic/util.qc:683
 msgid "Background:"
 msgstr "Achtergrond:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:25
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:37
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:52
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:686
+#: 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
 msgid "Disable"
 msgstr "Uitschakelen"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:30
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:691
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:31
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:78 qcsrc/menu/xonotic/util.qc:691
 msgid "Color:"
 msgstr "Kleur:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:699
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:36 qcsrc/menu/xonotic/util.qc:699
 msgid "Border size:"
 msgstr "Grootte rand:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:50
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:89
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:51
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:90
 msgid "Team color:"
 msgstr "Teamkleur:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:725
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:59 qcsrc/menu/xonotic/util.qc:725
 msgid "Test team color in configure mode"
 msgstr "Test teamkleur in aanpassingsmodus"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:728
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:62 qcsrc/menu/xonotic/util.qc:728
 msgid "Padding:"
 msgstr "Opvulling:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:68
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:69
 msgid "HUD Dock:"
 msgstr "HUD Werf:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:70
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71
 msgid "DOCK^Disabled"
 msgstr "DOCK^Uitgeschakeld"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72
 msgid "DOCK^Small"
 msgstr "DOCK^Klein"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73
 msgid "DOCK^Medium"
 msgstr "DOCK^Gemiddeld"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:74
 msgid "DOCK^Large"
 msgstr "DOCK^Groot"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:96
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:97
 msgid "Grid settings:"
 msgstr "Raster instellingen:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:99
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:100
 msgid "Snap panels to grid"
 msgstr "Lijn panelen uit met grid"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:102
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:103
 msgid "Grid size:"
 msgstr "Raster grootte:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:103
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:104
 msgid "X:"
 msgstr "X:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:109
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:110
 msgid "Y:"
 msgstr "Y:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:117
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:118
 msgid "Exit setup"
 msgstr "Beëindig setup"
 
@@ -4433,7 +4433,7 @@ msgid "Key:"
 msgstr "Sleutel:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:61
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:19
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:20
 msgid "Model:"
 msgstr "Personage:"
 
@@ -4808,127 +4808,127 @@ msgstr "Nee"
 msgid "Sandbox Tools"
 msgstr "Zandbak benodigdheden"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:24
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:25
 msgid "Spawn"
 msgstr "Spawn"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:25
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:26
 msgid "Remove *"
 msgstr "Verwijder *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:27
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:28
 msgid "Copy *"
 msgstr "Kopieer *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:28
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:29
 msgid "Paste"
 msgstr "Plak"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:30
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:31
 msgid "Bone:"
 msgstr "Bot:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:35
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:36
 msgid "Set * as child"
 msgstr "Zet * als kind"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:36
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:37
 msgid "Attach to *"
 msgstr "Maak vast aan *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:38
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:39
 msgid "Detach from *"
 msgstr "Maak los van *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:41
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:42
 msgid "Visual object properties for *:"
 msgstr "Visuele object eigenschappen voor *:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:43
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:44
 msgid "Set skin:"
 msgstr "Skin:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:45
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:46
 msgid "Set alpha:"
 msgstr "Alpha:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:48
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:49
 msgid "Set color main:"
 msgstr "Hoofdkleur:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:50
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:51
 msgid "Set color glow:"
 msgstr "Glow voor kleur:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:54
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:55
 msgid "Set frame:"
 msgstr "Zet frame:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:58
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:59
 msgid "Physical object properties for *:"
 msgstr "Fysieke object eigenschappen voor *:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:60
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:61
 msgid "Set material:"
 msgstr "Zet materiaal:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:66
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:67
 msgid "Set solidity:"
 msgstr "Vastheid:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:67
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:68
 msgid "Non-solid"
 msgstr "Niet vast"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:68
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:69
 msgid "Solid"
 msgstr "Vast"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:69
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:70
 msgid "Set physics:"
 msgstr "Zet physics:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:70
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:71
 msgid "Static"
 msgstr "Statisch"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:71
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:72
 msgid "Movable"
 msgstr "Verplaatsbaar"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:72
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:73
 msgid "Physical"
 msgstr "Fysiek"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:74
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:75
 msgid "Set scale:"
 msgstr "Schaal:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:76
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:77
 msgid "Set force:"
 msgstr "Zet kracht:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:80
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:81
 msgid "Claim *"
 msgstr "Claim *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:82
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:83
 msgid "* object info"
 msgstr "* object info"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:83
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:84
 msgid "* mesh info"
 msgstr "* mesh info"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:84
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:85
 msgid "* attachment info"
 msgstr "* bijlage info"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:85
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:86
 msgid "Show help"
 msgstr "Laat help zien"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:86
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:87
 msgid "* is the object you are facing"
 msgstr "* is het object waar je naar kijkt"
 
@@ -5925,27 +5925,27 @@ msgstr "Winnaar"
 msgid "Team Selection"
 msgstr "Team Selectie"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:41
+#: qcsrc/menu/xonotic/dialog_teamselect.c:42
 msgid "join 'best' team (auto-select)"
 msgstr "aansluiten bij het ‘beste’ team (autoselect)"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:45
+#: qcsrc/menu/xonotic/dialog_teamselect.c:46
 msgid "red"
 msgstr "rood"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:46
+#: qcsrc/menu/xonotic/dialog_teamselect.c:47
 msgid "blue"
 msgstr "blauw"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:47
+#: qcsrc/menu/xonotic/dialog_teamselect.c:48
 msgid "yellow"
 msgstr "geel"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:48
+#: qcsrc/menu/xonotic/dialog_teamselect.c:49
 msgid "pink"
 msgstr "roze"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:51
+#: qcsrc/menu/xonotic/dialog_teamselect.c:52
 msgid "spectate"
 msgstr "observeren"
 
@@ -6045,7 +6045,12 @@ msgstr ""
 msgid "%s dB"
 msgstr "%s dB"
 
-#: qcsrc/menu/xonotic/slider_resolution.c:72
+#: qcsrc/menu/xonotic/slider_resolution.c:103
+#, c-format
+msgid "%dx%d (%d:%d)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_resolution.c:106
 #, c-format
 msgid "%dx%d"
 msgstr "%dx%d"
index 0885b516ce3cd7f2ab1740fbeeca3e5433d8411a..97bdc92b743fe78d7d9a3430448a151662fcba04 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-09-13 10:31+0200\n"
+"POT-Creation-Date: 2013-10-03 11:55+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -1229,7 +1229,7 @@ msgstr ""
 msgid "@!#%'n Tuba Throwing"
 msgstr ""
 
-#: qcsrc/common/mapinfo.qc:1105 qcsrc/menu/xonotic/skinlist.c:166
+#: qcsrc/common/mapinfo.qc:1109 qcsrc/menu/xonotic/skinlist.c:166
 #, c-format
 msgid "%s: %s"
 msgstr ""
@@ -1303,1773 +1303,1773 @@ msgstr ""
 msgid "^7%s (^3%d sec left)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:330
+#: qcsrc/common/notifications.qh:342
 #, c-format
 msgid "^BG%s^BG captured the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:331
+#: qcsrc/common/notifications.qh:343
 #, c-format
 msgid ""
 "^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
 "%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:332
+#: qcsrc/common/notifications.qh:344
 #, c-format
 msgid "^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:333
+#: qcsrc/common/notifications.qh:345
 #, c-format
 msgid ""
 "^BG%s^BG captured the ^TC^TT^BG flag in ^F2%s^BG seconds, failing to break "
 "^BG%s^BG's previous record of ^F1%s^BG seconds"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:334
+#: qcsrc/common/notifications.qh:346
 msgid "^BGThe ^TC^TT^BG flag was returned to base by its owner"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:335
+#: qcsrc/common/notifications.qh:347
 msgid "^BGThe ^TC^TT^BG flag was destroyed and returned to base"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:336
+#: qcsrc/common/notifications.qh:348
 msgid "^BGThe ^TC^TT^BG flag was dropped in the base and returned itself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:337
+#: qcsrc/common/notifications.qh:349
 msgid ""
 "^BGThe ^TC^TT^BG flag fell somewhere it couldn't be reached and returned to "
 "base"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:338
+#: qcsrc/common/notifications.qh:350
 #, c-format
 msgid ""
 "^BGThe ^TC^TT^BG flag became impatient after ^F1%.2f^BG seconds and returned "
 "itself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:339
+#: qcsrc/common/notifications.qh:351
 msgid "^BGThe ^TC^TT^BG flag has returned to the base"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:340
+#: qcsrc/common/notifications.qh:352
 #, c-format
 msgid "^BG%s^BG lost the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:341
+#: qcsrc/common/notifications.qh:353
 #, c-format
 msgid "^BG%s^BG got the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:342
+#: qcsrc/common/notifications.qh:354
 #, c-format
 msgid "^BG%s^BG returned the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:343
+#: qcsrc/common/notifications.qh:355
 #, c-format
 msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:344
+#: qcsrc/common/notifications.qh:356
 #, c-format
 msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:345
+#: qcsrc/common/notifications.qh:357
 #, c-format
 msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:346
+#: qcsrc/common/notifications.qh:358
 #, c-format
 msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:346
+#: qcsrc/common/notifications.qh:358
 #, c-format
 msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:347
+#: qcsrc/common/notifications.qh:359
 #, c-format
 msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:348
+#: qcsrc/common/notifications.qh:360
 #, c-format
 msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:349
+#: qcsrc/common/notifications.qh:361
 #, c-format
 msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:350
+#: qcsrc/common/notifications.qh:362
 #, c-format
 msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:351
+#: qcsrc/common/notifications.qh:363
 #, c-format
 msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:352
+#: qcsrc/common/notifications.qh:364
 #, c-format
 msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:352
+#: qcsrc/common/notifications.qh:364
 #, c-format
 msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:353
+#: qcsrc/common/notifications.qh:365
 #, c-format
 msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:354
+#: qcsrc/common/notifications.qh:366
 #, c-format
 msgid ""
 "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:355
+#: qcsrc/common/notifications.qh:367
 #, c-format
 msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:356
+#: qcsrc/common/notifications.qh:368
 #, c-format
 msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:357
+#: qcsrc/common/notifications.qh:369
 #, c-format
 msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:358
+#: qcsrc/common/notifications.qh:370
 #, c-format
 msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:359
+#: qcsrc/common/notifications.qh:371
 #, c-format
 msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:360
+#: qcsrc/common/notifications.qh:372
 #, c-format
 msgid ""
 "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:361
+#: qcsrc/common/notifications.qh:373
 #, c-format
 msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:362
+#: qcsrc/common/notifications.qh:374
 #, c-format
 msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:363
+#: qcsrc/common/notifications.qh:375
 #, c-format
 msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:364
+#: qcsrc/common/notifications.qh:376
 #, c-format
 msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:365
+#: qcsrc/common/notifications.qh:377
 #, c-format
 msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:366
+#: qcsrc/common/notifications.qh:378
 #, c-format
 msgid "^BG%s%s^K1 was thrown into a world of hurt by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:367
+#: qcsrc/common/notifications.qh:379
 #, c-format
 msgid "^BG%s^K1 was moved into the %s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:368
+#: qcsrc/common/notifications.qh:380
 #, c-format
 msgid "^BG%s^K1 became enemies with the Lord of Teamplay%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:369
+#: qcsrc/common/notifications.qh:381
 #, c-format
 msgid "^BG%s^K1 thought they found a nice camping ground%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:370
+#: qcsrc/common/notifications.qh:382
 #, c-format
 msgid "^BG%s^K1 unfairly eliminated themself%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:371
+#: qcsrc/common/notifications.qh:383
 #, c-format
 msgid "^BG%s^K1 %s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:372
+#: qcsrc/common/notifications.qh:384
 #, c-format
 msgid "^BG%s^K1 couldn't catch their breath%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:372
+#: qcsrc/common/notifications.qh:384
 #, c-format
 msgid "^BG%s^K1 was in the water for too long%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:373
+#: qcsrc/common/notifications.qh:385
 #, c-format
 msgid "^BG%s^K1 hit the ground with a bit too much force%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:373
+#: qcsrc/common/notifications.qh:385
 #, c-format
 msgid "^BG%s^K1 hit the ground with a crunch%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:374
+#: qcsrc/common/notifications.qh:386
 #, c-format
 msgid "^BG%s^K1 became a bit too crispy%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:374
+#: qcsrc/common/notifications.qh:386
 #, c-format
 msgid "^BG%s^K1 felt a little hot%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:375
+#: qcsrc/common/notifications.qh:387
 #, c-format
 msgid "^BG%s^K1 died%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:376
+#: qcsrc/common/notifications.qh:388
 #, c-format
 msgid "^BG%s^K1 found a hot place%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:376
+#: qcsrc/common/notifications.qh:388
 #, c-format
 msgid "^BG%s^K1 turned into hot slag%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:377
+#: qcsrc/common/notifications.qh:389
 #, c-format
 msgid "^BG%s^K1 mastered the art of self-nading%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:378
+#: qcsrc/common/notifications.qh:390
 #, c-format
 msgid "^BG%s^K1 died%s%s. What's the point of living without ammo?"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:378
+#: qcsrc/common/notifications.qh:390
 #, c-format
 msgid "^BG%s^K1 ran out of ammo%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:379
+#: qcsrc/common/notifications.qh:391
 #, c-format
 msgid "^BG%s^K1 rotted away%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:380
+#: qcsrc/common/notifications.qh:392
 #, c-format
 msgid "^BG%s^K1 became a shooting star%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:393
 #, c-format
 msgid "^BG%s^K1 was slimed%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:394
 #, c-format
 msgid "^BG%s^K1 couldn't take it anymore%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:395
 #, c-format
 msgid "^BG%s^K1 is now preserved for centuries to come%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:396
 #, c-format
 msgid "^BG%s^K1 switched to the %s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:397
 #, c-format
 msgid "^BG%s^K1 died in an accident%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:398
 #, c-format
 msgid "^BG%s^K1 ran into a turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:399
 #, c-format
 msgid "^BG%s^K1 was blasted away by an eWheel turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:400
 #, c-format
 msgid "^BG%s^K1 got caught up in the FLAC turret fire%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:401
 #, c-format
 msgid "^BG%s^K1 was blasted away by a Hellion turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:402
 #, c-format
 msgid "^BG%s^K1 could not hide from the Hunter turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:403
 #, c-format
 msgid "^BG%s^K1 was riddled full of holes by a Machinegun turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:404
 #, c-format
 msgid "^BG%s^K1 got turned into smoldering gibs by an MLRS turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:405
 #, c-format
 msgid "^BG%s^K1 was phased out by a turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:406
 #, c-format
 msgid "^BG%s^K1 got served some superheated plasma from a turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:407
 #, c-format
 msgid "^BG%s^K1 was electrocuted by a Tesla turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:408
 #, c-format
 msgid "^BG%s^K1 got served a lead enrichment by a Walker turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:409
 #, c-format
 msgid "^BG%s^K1 was impaled by a Walker turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:410
 #, c-format
 msgid "^BG%s^K1 was blasted away by a Walker turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:411
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Bumblebee explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:412
 #, c-format
 msgid "^BG%s^K1 was crushed by a vehicle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:401
+#: qcsrc/common/notifications.qh:413
 #, c-format
 msgid "^BG%s^K1 was caught in a Raptor cluster bomb%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:402
+#: qcsrc/common/notifications.qh:414
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Raptor explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:403
+#: qcsrc/common/notifications.qh:415
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Spiderbot explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:404
+#: qcsrc/common/notifications.qh:416
 #, c-format
 msgid "^BG%s^K1 was blasted to bits by a Spiderbot rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:405
+#: qcsrc/common/notifications.qh:417
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Racer explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:406
+#: qcsrc/common/notifications.qh:418
 #, c-format
 msgid "^BG%s^K1 couldn't find shelter from a Racer rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:407
+#: qcsrc/common/notifications.qh:419
 #, c-format
 msgid "^BG%s^K1 was in the wrong place%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:408
+#: qcsrc/common/notifications.qh:420
 #, c-format
 msgid "^BG%s^K1 was betrayed by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:409
+#: qcsrc/common/notifications.qh:421
 #, c-format
 msgid "^BG%s^K1 was frozen by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:410
+#: qcsrc/common/notifications.qh:422
 #, c-format
 msgid "^BG%s^K3 was revived by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:411
+#: qcsrc/common/notifications.qh:423
 #, c-format
 msgid "^BG%s^K3 was revived by falling"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:412
+#: qcsrc/common/notifications.qh:424
 #, c-format
 msgid "^BG%s^K3 was automatically revived after %s second(s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:413 qcsrc/common/notifications.qh:594
+#: qcsrc/common/notifications.qh:425 qcsrc/common/notifications.qh:612
 msgid "^TC^TT^BG team wins the round"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:414 qcsrc/common/notifications.qh:595
+#: qcsrc/common/notifications.qh:426 qcsrc/common/notifications.qh:613
 #, c-format
 msgid "^BG%s^BG wins the round"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:415 qcsrc/common/notifications.qh:524
+#: qcsrc/common/notifications.qh:427 qcsrc/common/notifications.qh:542
 msgid "^BGRound tied"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:416 qcsrc/common/notifications.qh:525
+#: qcsrc/common/notifications.qh:428 qcsrc/common/notifications.qh:543
 msgid "^BGRound over, there's no winner"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:417
+#: qcsrc/common/notifications.qh:429
 #, c-format
 msgid "^BG%s^K1 froze themself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:418
+#: qcsrc/common/notifications.qh:430
 #, c-format
 msgid "^BGGodmode saved you %s units of damage, cheater!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:419 qcsrc/common/notifications.qh:598
+#: qcsrc/common/notifications.qh:431 qcsrc/common/notifications.qh:616
 #, c-format
 msgid "^BGYou do not have the ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:420 qcsrc/common/notifications.qh:599
+#: qcsrc/common/notifications.qh:432 qcsrc/common/notifications.qh:617
 #, c-format
 msgid "^BGYou dropped the ^F1%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:421 qcsrc/common/notifications.qh:600
+#: qcsrc/common/notifications.qh:433 qcsrc/common/notifications.qh:618
 #, c-format
 msgid "^BGYou got the ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:422 qcsrc/common/notifications.qh:601
+#: qcsrc/common/notifications.qh:434 qcsrc/common/notifications.qh:619
 #, c-format
 msgid "^BGYou don't have enough ammo for the ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:423 qcsrc/common/notifications.qh:602
+#: qcsrc/common/notifications.qh:435 qcsrc/common/notifications.qh:620
 #, c-format
 msgid "^F1%s %s^BG is unable to fire, but its ^F1%s^BG can"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:424 qcsrc/common/notifications.qh:603
+#: qcsrc/common/notifications.qh:436 qcsrc/common/notifications.qh:621
 #, c-format
 msgid "^F1%s^BG is ^F4not available^BG on this map"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:425
+#: qcsrc/common/notifications.qh:437
 #, c-format
 msgid "^BG%s^F3 connected%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:426
+#: qcsrc/common/notifications.qh:438
 #, c-format
 msgid "^BG%s^F3 connected and joined the ^TC^TT team"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:427
+#: qcsrc/common/notifications.qh:439
 #, c-format
 msgid "^BG%s^F3 is now playing"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:428 qcsrc/common/notifications.qh:606
+#: qcsrc/common/notifications.qh:440 qcsrc/common/notifications.qh:624
 #, c-format
 msgid "^BG%s^BG has dropped the ball!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:429 qcsrc/common/notifications.qh:607
+#: qcsrc/common/notifications.qh:441 qcsrc/common/notifications.qh:625
 #, c-format
 msgid "^BG%s^BG has picked up the ball!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:430
+#: qcsrc/common/notifications.qh:442
 #, c-format
 msgid "^BG%s^BG captured the keys for the ^TC^TT team"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:431
+#: qcsrc/common/notifications.qh:443
 #, c-format
 msgid "^BG%s^BG dropped the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:432
+#: qcsrc/common/notifications.qh:444
 #, c-format
 msgid "^BG%s^BG lost the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:433
+#: qcsrc/common/notifications.qh:445
 #, c-format
 msgid "^BG%s^BG picked up the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:434
+#: qcsrc/common/notifications.qh:446
 #, c-format
 msgid "^BG%s^F3 forfeited"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:435
+#: qcsrc/common/notifications.qh:447
 #, c-format
 msgid "^BG%s^F3 has no more lives left"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:436
+#: qcsrc/common/notifications.qh:448
 #, c-format
 msgid "^BG%s^K1 picked up Invisibility"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:437
+#: qcsrc/common/notifications.qh:449
 #, c-format
 msgid "^BG%s^K1 picked up Shield"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:438
+#: qcsrc/common/notifications.qh:450
 #, c-format
 msgid "^BG%s^K1 picked up Speed"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:439
+#: qcsrc/common/notifications.qh:451
 #, c-format
 msgid "^BG%s^K1 picked up Strength"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:440
+#: qcsrc/common/notifications.qh:452
 #, c-format
 msgid "^BG%s^F3 disconnected"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:441
+#: qcsrc/common/notifications.qh:453
 #, c-format
 msgid "^BG%s^F3 was kicked for idling"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:442
+#: qcsrc/common/notifications.qh:454
 msgid ""
 "^F2You were kicked from the server because you are a spectator and "
 "spectators aren't allowed at the moment."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:443
+#: qcsrc/common/notifications.qh:455
 #, c-format
 msgid "^BG%s^F3 is now spectating"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:444
+#: qcsrc/common/notifications.qh:456
 #, c-format
 msgid "^BG%s^BG has abandoned the race"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:445
+#: qcsrc/common/notifications.qh:457
 #, c-format
 msgid "^BG%s^BG couldn't break their %s%s^BG place record of %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:446
+#: qcsrc/common/notifications.qh:458
 #, c-format
 msgid "^BG%s^BG couldn't break the %s%s^BG place record of %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:447
+#: qcsrc/common/notifications.qh:459
 #, c-format
 msgid "^BG%s^BG has finished the race"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:448
+#: qcsrc/common/notifications.qh:460
 #, c-format
 msgid "^BG%s^BG broke %s^BG's %s%s^BG place record with %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:449
+#: qcsrc/common/notifications.qh:461
 #, c-format
 msgid "^BG%s^BG improved their %s%s^BG place record with %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:450
+#: qcsrc/common/notifications.qh:462
 #, c-format
 msgid ""
 "^BG%s^BG scored a new record with ^F2%s^BG, but unfortunately lacks a UID "
 "and will be lost."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:451
+#: qcsrc/common/notifications.qh:463
 #, c-format
 msgid "^BG%s^BG set the %s%s^BG place record with %s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:452
+#: qcsrc/common/notifications.qh:464
 msgid "^TC^TT ^BGteam scores!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:453
+#: qcsrc/common/notifications.qh:465
 #, 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 ""
 
-#: qcsrc/common/notifications.qh:454
+#: qcsrc/common/notifications.qh:466
 #, c-format
 msgid "^BG%s^K1 picked up a Superweapon"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:455
+#: qcsrc/common/notifications.qh:467
 #, c-format
 msgid ""
 "^F4NOTE: ^BGThe server is running ^F1Xonotic %s (beta)^BG, you have "
 "^F2Xonotic %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:456
+#: qcsrc/common/notifications.qh:468
 #, c-format
 msgid ""
 "^F4NOTE: ^BGThe server is running ^F1Xonotic %s^BG, you have ^F2Xonotic %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:457
+#: qcsrc/common/notifications.qh:469
 #, c-format
 msgid ""
 "^F4NOTE: ^F1Xonotic %s^BG is out, and you still have ^F2Xonotic %s^BG - get "
 "the update from ^F3http://www.xonotic.org/^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:458
+#: qcsrc/common/notifications.qh:470
 #, c-format
 msgid "^F3SVQC Build information: ^F4%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:459
+#: qcsrc/common/notifications.qh:471
 #, c-format
 msgid ""
 "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Accordeon%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:460
+#: qcsrc/common/notifications.qh:472
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Accordeon%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:461
+#: qcsrc/common/notifications.qh:473
 #, c-format
 msgid "^BG%s%s^K1 felt the strong pull of ^BG%s^K1's Crylink%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:462
+#: qcsrc/common/notifications.qh:474
 #, c-format
 msgid "^BG%s^K1 felt the strong pull of their Crylink%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:463
+#: qcsrc/common/notifications.qh:475
 #, c-format
 msgid "^BG%s%s^K1 was blasted by ^BG%s^K1's Electro bolt%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:464
+#: qcsrc/common/notifications.qh:476
 #, c-format
 msgid "^BG%s%s^K1 felt the electrifying air of ^BG%s^K1's Electro combo%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:465
+#: qcsrc/common/notifications.qh:477
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Electro plasma%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:466
+#: qcsrc/common/notifications.qh:478
 #, c-format
 msgid "^BG%s^K1 played with Electro plasma%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:467
+#: qcsrc/common/notifications.qh:479
 #, c-format
 msgid "^BG%s^K1 could not remember where they put their Electro plasma%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:468
+#: qcsrc/common/notifications.qh:480
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's fireball%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:469
+#: qcsrc/common/notifications.qh:481
 #, c-format
 msgid "^BG%s%s^K1 got burnt by ^BG%s^K1's firemine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:470
+#: qcsrc/common/notifications.qh:482
 #, c-format
 msgid "^BG%s^K1 should have used a smaller gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:471
+#: qcsrc/common/notifications.qh:483
 #, c-format
 msgid "^BG%s^K1 forgot about their firemine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:472
+#: qcsrc/common/notifications.qh:484
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by a burst of ^BG%s^K1's Hagar rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:473
+#: qcsrc/common/notifications.qh:485
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Hagar rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:474
+#: qcsrc/common/notifications.qh:486
 #, c-format
 msgid "^BG%s^K1 played with tiny Hagar rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:475
+#: qcsrc/common/notifications.qh:487
 #, c-format
 msgid "^BG%s%s^K1 was cut down with ^BG%s^K1's HLAC%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:476
+#: qcsrc/common/notifications.qh:488
 #, c-format
 msgid "^BG%s^K1 got a little jumpy with their HLAC%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:477
+#: qcsrc/common/notifications.qh:489
 #, c-format
 msgid "^BG%s%s^K1 was caught in ^BG%s^K1's Hook gravity bomb%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:478
+#: qcsrc/common/notifications.qh:490
 #, c-format
 msgid ""
 "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Klein Bottle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:479
+#: qcsrc/common/notifications.qh:491
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Klein Bottle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:480
+#: qcsrc/common/notifications.qh:492
 #, c-format
 msgid "^BG%s%s^K1 was shot to death by ^BG%s^K1's Laser%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:481
+#: qcsrc/common/notifications.qh:493
 #, c-format
 msgid "^BG%s^K1 shot themself to hell with their Laser%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:482
+#: qcsrc/common/notifications.qh:494
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's mine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:483
+#: qcsrc/common/notifications.qh:495
 #, c-format
 msgid "^BG%s^K1 forgot about their mine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:484
+#: qcsrc/common/notifications.qh:496
 #, c-format
 msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Minstanex%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:485
+#: qcsrc/common/notifications.qh:497
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Mortar grenade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:486
+#: qcsrc/common/notifications.qh:498
 #, c-format
 msgid "^BG%s%s^K1 ate ^BG%s^K1's Mortar grenade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:487
+#: qcsrc/common/notifications.qh:499
 #, c-format
 msgid "^BG%s^K1 didn't see their own Mortar grenade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:488
+#: qcsrc/common/notifications.qh:500
 #, c-format
 msgid "^BG%s^K1 blew themself up with their own Mortar%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:489
+#: qcsrc/common/notifications.qh:501
 #, c-format
 msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Nex%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:490
+#: qcsrc/common/notifications.qh:502
 #, c-format
 msgid "^BG%s%s^K1 was sniped with a Rifle by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:491
+#: qcsrc/common/notifications.qh:503
 #, c-format
 msgid "^BG%s%s^K1 died in ^BG%s^K1's Rifle bullet hail%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:492
+#: qcsrc/common/notifications.qh:504
 #, c-format
 msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle bullet hail%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:493
+#: qcsrc/common/notifications.qh:505
 #, c-format
 msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:494
+#: qcsrc/common/notifications.qh:506
 #, c-format
 msgid "^BG%s%s^K1 ate ^BG%s^K1's rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:495
+#: qcsrc/common/notifications.qh:507
 #, c-format
 msgid "^BG%s%s^K1 got too close ^BG%s^K1's rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:496
+#: qcsrc/common/notifications.qh:508
 #, c-format
 msgid "^BG%s^K1 blew themself up with their Rocketlauncher%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:497
+#: qcsrc/common/notifications.qh:509
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Seeker rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:498
+#: qcsrc/common/notifications.qh:510
 #, c-format
 msgid "^BG%s%s^K1 was tagged by ^BG%s^K1's Seeker%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:499
+#: qcsrc/common/notifications.qh:511
 #, c-format
 msgid "^BG%s^K1 played with tiny Seeker rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:500
+#: qcsrc/common/notifications.qh:512
 #, c-format
 msgid "^BG%s%s^K1 was gunned down by ^BG%s^K1's Shotgun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:501
+#: qcsrc/common/notifications.qh:513
 #, c-format
 msgid "^BG%s%s^K1 slapped ^BG%s^K1 around a bit with a large Shotgun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:502
+#: qcsrc/common/notifications.qh:514
 #, c-format
 msgid "^BG%s^K1 is now thinking with portals%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:503
+#: qcsrc/common/notifications.qh:515
 #, c-format
 msgid "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Tuba%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:504
+#: qcsrc/common/notifications.qh:516
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Tuba%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:505
+#: qcsrc/common/notifications.qh:517
 #, c-format
 msgid "^BG%s%s^K1 was sniped by ^BG%s^K1's Machine Gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:506
+#: qcsrc/common/notifications.qh:518
 #, c-format
 msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:518
+#: qcsrc/common/notifications.qh:536
 msgid "^BGYou are attacking!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:519
+#: qcsrc/common/notifications.qh:537
 msgid "^BGYou are defending!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:520
+#: qcsrc/common/notifications.qh:538
 msgid "^F4Begin!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:521
+#: qcsrc/common/notifications.qh:539
 msgid "^F4Game starts in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:522
+#: qcsrc/common/notifications.qh:540
 msgid "^F4Round starts in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:523
+#: qcsrc/common/notifications.qh:541
 msgid "^F4Round cannot start"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:526
+#: qcsrc/common/notifications.qh:544
 msgid "^F2Don't camp!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:527
+#: qcsrc/common/notifications.qh:545
 msgid ""
 "^BGYou are now free.\n"
 "^BGFeel free to ^F2try to capture^BG the flag again\n"
 "^BGif you think you will succeed."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:528
+#: qcsrc/common/notifications.qh:546
 msgid ""
 "^BGYou are now ^F1shielded^BG from the flag\n"
 "^BGfor ^F2too many unsuccessful attempts^BG to capture.\n"
 "^BGMake some defensive scores before trying again."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:529
+#: qcsrc/common/notifications.qh:547
 msgid "^BGYou captured the ^TC^TT^BG flag!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:530
+#: qcsrc/common/notifications.qh:548
 #, c-format
 msgid "^BGToo many flag throws! Throwing disabled for %s."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:531
+#: qcsrc/common/notifications.qh:549
 #, c-format
 msgid "^BG%s^BG passed the ^TC^TT^BG flag to %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:532
+#: qcsrc/common/notifications.qh:550
 #, c-format
 msgid "^BGYou received the ^TC^TT^BG flag from %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:533
+#: qcsrc/common/notifications.qh:551
 #, c-format
 msgid "^BG%s^BG requests you to pass the flag%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:534
+#: qcsrc/common/notifications.qh:552
 #, c-format
 msgid "^BGRequesting %s^BG to pass you the flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:535
+#: qcsrc/common/notifications.qh:553
 #, c-format
 msgid "^BGYou passed the ^TC^TT^BG flag to %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:536
+#: qcsrc/common/notifications.qh:554
 msgid "^BGYou got the ^TC^TT^BG flag!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:537
+#: qcsrc/common/notifications.qh:555
 #, c-format
 msgid "^BGThe %senemy^BG got your flag! Retrieve it!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:538
+#: qcsrc/common/notifications.qh:556
 #, c-format
 msgid "^BGThe %senemy (^BG%s%s)^BG got your flag! Retrieve it!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:539
+#: qcsrc/common/notifications.qh:557
 #, c-format
 msgid "^BGYour %steam mate^BG got the flag! Protect them!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:540
+#: qcsrc/common/notifications.qh:558
 #, c-format
 msgid "^BGYour %steam mate (^BG%s%s)^BG got the flag! Protect them!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:541
+#: qcsrc/common/notifications.qh:559
 msgid "^BGYou returned the ^TC^TT^BG flag!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:542
+#: qcsrc/common/notifications.qh:560
 msgid "^BGStalemate! Enemies can now see you on radar!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:543
+#: qcsrc/common/notifications.qh:561
 msgid "^BGStalemate! Flag carriers can now be seen by enemies on radar!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:544
+#: qcsrc/common/notifications.qh:562
 #, c-format
 msgid "^K3%sYou fragged ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:544
+#: qcsrc/common/notifications.qh:562
 #, c-format
 msgid "^K3%sYou scored against ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:545
+#: qcsrc/common/notifications.qh:563
 #, c-format
 msgid "^K1%sYou were fragged by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:545
+#: qcsrc/common/notifications.qh:563
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:546
+#: qcsrc/common/notifications.qh:564
 #, c-format
 msgid "^K1%sYou were fragged by ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:546
+#: qcsrc/common/notifications.qh:564
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:547
+#: qcsrc/common/notifications.qh:565
 #, c-format
 msgid "^K3%sYou fragged ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:547
+#: qcsrc/common/notifications.qh:565
 #, c-format
 msgid "^K3%sYou scored against ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:548
+#: qcsrc/common/notifications.qh:566
 #, c-format
 msgid "^K1%sYou scored against ^BG%s^K1 while they were typing"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:548
+#: qcsrc/common/notifications.qh:566
 #, c-format
 msgid "^K1%sYou typefragged ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:549
+#: qcsrc/common/notifications.qh:567
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^K1 while typing!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:549
+#: qcsrc/common/notifications.qh:567
 #, c-format
 msgid "^K1%sYou were typefragged by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:550
+#: qcsrc/common/notifications.qh:568
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^K1 while typing^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:550
+#: qcsrc/common/notifications.qh:568
 #, c-format
 msgid "^K1%sYou were typefragged by ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:551
+#: qcsrc/common/notifications.qh:569
 #, c-format
 msgid "^K1%sYou scored against ^BG%s^K1 while they were typing^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:551
+#: qcsrc/common/notifications.qh:569
 #, c-format
 msgid "^K1%sYou typefragged ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:552
+#: qcsrc/common/notifications.qh:570
 msgid "^BGPress ^F2DROPWEAPON^BG again to toss the nade!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:553
+#: qcsrc/common/notifications.qh:571
 #, c-format
 msgid ""
 "^BGYou have been moved into a different team\n"
 "You are now on: %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:554
+#: qcsrc/common/notifications.qh:572
 msgid "^K1Don't go against your team mates!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:554
+#: qcsrc/common/notifications.qh:572
 msgid "^K1Don't shoot your team mates!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:555
+#: qcsrc/common/notifications.qh:573
 msgid "^K1Die camper!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:555
+#: qcsrc/common/notifications.qh:573
 msgid "^K1Reconsider your tactics, camper!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:556
+#: qcsrc/common/notifications.qh:574
 msgid "^K1You unfairly eliminated yourself!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:557
+#: qcsrc/common/notifications.qh:575
 #, c-format
 msgid "^K1You were %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:558
+#: qcsrc/common/notifications.qh:576
 msgid "^K1You couldn't catch your breath!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:559
+#: qcsrc/common/notifications.qh:577
 msgid "^K1You hit the ground with a crunch!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:560
+#: qcsrc/common/notifications.qh:578
 msgid "^K1You felt a little too hot!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:560
+#: qcsrc/common/notifications.qh:578
 msgid "^K1You got a little bit too crispy!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:561
+#: qcsrc/common/notifications.qh:579
 msgid "^K1You killed your own dumb self!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:561
+#: qcsrc/common/notifications.qh:579
 msgid "^K1You need to be more careful!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:562
+#: qcsrc/common/notifications.qh:580
 msgid "^K1You couldn't stand the heat!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:563
+#: qcsrc/common/notifications.qh:581
 msgid "^K1Tastes like chicken!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:563
+#: qcsrc/common/notifications.qh:581
 msgid "^K1You forgot to put the pin back in!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:564
+#: qcsrc/common/notifications.qh:582
 msgid "^K1You are respawning for running out of ammo..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:564
+#: qcsrc/common/notifications.qh:582
 msgid "^K1You were killed for running out of ammo..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:565
+#: qcsrc/common/notifications.qh:583
 msgid "^K1You grew too old without taking your medicine"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:565
+#: qcsrc/common/notifications.qh:583
 msgid "^K1You need to preserve your health"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:566
+#: qcsrc/common/notifications.qh:584
 msgid "^K1You became a shooting star!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:567
+#: qcsrc/common/notifications.qh:585
 msgid "^K1You melted away in slime!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:568
+#: qcsrc/common/notifications.qh:586
 msgid "^K1You committed suicide!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:568
+#: qcsrc/common/notifications.qh:586
 msgid "^K1You ended it all!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:569
+#: qcsrc/common/notifications.qh:587
 msgid "^K1You got stuck in a swamp!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:570
+#: qcsrc/common/notifications.qh:588
 #, c-format
 msgid "^BGYou are now on: %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:571
+#: qcsrc/common/notifications.qh:589
 msgid "^K1You died in an accident!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:572
+#: qcsrc/common/notifications.qh:590
 msgid "^K1You had an unfortunate run in with a turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:572
+#: qcsrc/common/notifications.qh:590
 msgid "^K1You were fragged by a turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:573
+#: qcsrc/common/notifications.qh:591
 msgid "^K1You had an unfortunate run in with an eWheel turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:573
+#: qcsrc/common/notifications.qh:591
 msgid "^K1You were fragged by an eWheel turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:574
+#: qcsrc/common/notifications.qh:592
 msgid "^K1You had an unfortunate run in with a Walker turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:574
+#: qcsrc/common/notifications.qh:592
 msgid "^K1You were fragged by a Walker turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:575
+#: qcsrc/common/notifications.qh:593
 msgid "^K1You got caught in the blast of a Bumblebee explosion!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:576
+#: qcsrc/common/notifications.qh:594
 msgid "^K1You were crushed by a vehicle!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:577
+#: qcsrc/common/notifications.qh:595
 msgid "^K1You were caught in a Raptor cluster bomb!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:578
+#: qcsrc/common/notifications.qh:596
 msgid "^K1You got caught in the blast of a Raptor explosion!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:579
+#: qcsrc/common/notifications.qh:597
 msgid "^K1You got caught in the blast of a Spiderbot explosion!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:580
+#: qcsrc/common/notifications.qh:598
 msgid "^K1You were blasted to bits by a Spiderbot rocket!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:581
+#: qcsrc/common/notifications.qh:599
 msgid "^K1You got caught in the blast of a Racer explosion!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:582
+#: qcsrc/common/notifications.qh:600
 msgid "^K1You couldn't find shelter from a Racer rocket!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:583
+#: qcsrc/common/notifications.qh:601
 msgid "^K1Watch your step!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:584
+#: qcsrc/common/notifications.qh:602
 #, c-format
 msgid "^K1Moron! You fragged ^BG%s^K1, a team mate!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:584
+#: qcsrc/common/notifications.qh:602
 #, c-format
 msgid "^K1Moron! You went against ^BG%s^K1, a team mate!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:585
+#: qcsrc/common/notifications.qh:603
 #, c-format
 msgid "^K1You were fragged by ^BG%s^K1, a team mate"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:585
+#: qcsrc/common/notifications.qh:603
 #, c-format
 msgid "^K1You were scored against by ^BG%s^K1, a team mate"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:586
+#: qcsrc/common/notifications.qh:604
 msgid ""
 "^K1Stop idling!\n"
 "^BGDisconnecting in ^COUNT..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:587
+#: qcsrc/common/notifications.qh:605
 msgid "^F2You picked up some extra lives"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:588
+#: qcsrc/common/notifications.qh:606
 #, c-format
 msgid "^K3You froze ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:589
+#: qcsrc/common/notifications.qh:607
 #, c-format
 msgid "^K1You were frozen by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:590
+#: qcsrc/common/notifications.qh:608
 #, c-format
 msgid "^K3You revived ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:591
+#: qcsrc/common/notifications.qh:609
 msgid "^K3You revived yourself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:592
+#: qcsrc/common/notifications.qh:610
 #, c-format
 msgid "^K3You were revived by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:593
+#: qcsrc/common/notifications.qh:611
 #, c-format
 msgid "^K3You were automatically revived after %s second(s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:596
+#: qcsrc/common/notifications.qh:614
 msgid "^K1You froze yourself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:597
+#: qcsrc/common/notifications.qh:615
 msgid "^K1Round already started, you spawn as frozen"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:604
+#: qcsrc/common/notifications.qh:622
 msgid ""
 "^K1No spawnpoints available!\n"
 "Hope your team can fix it..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:605
+#: qcsrc/common/notifications.qh:623
 msgid ""
 "^K1You may not join the game at this time.\n"
 "The player limit reached maximum capacity."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:608
+#: qcsrc/common/notifications.qh:626
 msgid "^BGKilling people while you don't have the ball gives no points!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:609
+#: qcsrc/common/notifications.qh:627
 msgid ""
 "^BGAll keys are in your team's hands!\n"
 "Help the key carriers to meet!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:610
+#: qcsrc/common/notifications.qh:628
 msgid ""
 "^BGAll keys are in ^TC^TT team^BG's hands!\n"
 "Interfere ^F4NOW^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:611
+#: qcsrc/common/notifications.qh:629
 msgid ""
 "^BGAll keys are in your team's hands!\n"
 "Meet the other key carriers ^F4NOW^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:612
+#: qcsrc/common/notifications.qh:630
 msgid "^F4Round will start in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:613
+#: qcsrc/common/notifications.qh:631
 msgid "^BGScanning frequency range..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:614
+#: qcsrc/common/notifications.qh:632
 msgid "^BGYou are starting with the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:615 qcsrc/common/notifications.qh:616
+#: qcsrc/common/notifications.qh:633 qcsrc/common/notifications.qh:634
 #, c-format
 msgid ""
 "^BGWaiting for players to join...\n"
 "Need active players for: %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:617
+#: qcsrc/common/notifications.qh:635
 #, c-format
 msgid "^BGWaiting for %s player(s) to join..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:618
+#: qcsrc/common/notifications.qh:636
 msgid "^F4^COUNT^BG left to find some ammo!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:619
+#: qcsrc/common/notifications.qh:637
 msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:619
+#: qcsrc/common/notifications.qh:637
 msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:620
+#: qcsrc/common/notifications.qh:638
 #, c-format
 msgid "^F2Extra lives remaining: ^K1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:621
+#: qcsrc/common/notifications.qh:639
 msgid "^BGSecondary fire inflicts no damage!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:622
+#: qcsrc/common/notifications.qh:640
 #, c-format
 msgid "^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:623
+#: qcsrc/common/notifications.qh:641
 #, c-format
 msgid ""
 "^F2^COUNT^BG until weapon change...\n"
 "Next weapon: ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:624
+#: qcsrc/common/notifications.qh:642
 #, c-format
 msgid "^F2Active weapon: ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:625
+#: qcsrc/common/notifications.qh:643
 msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:626
+#: qcsrc/common/notifications.qh:644
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "Keep fragging until we have a winner!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:626
+#: qcsrc/common/notifications.qh:644
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "Keep scoring until we have a winner!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:627
+#: qcsrc/common/notifications.qh:645
 #, c-format
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "^BGAdded ^F4%s^BG to the game!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:628
+#: qcsrc/common/notifications.qh:646
 msgid "^F2Invisibility has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:629
+#: qcsrc/common/notifications.qh:647
 msgid "^F2Shield has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:630
+#: qcsrc/common/notifications.qh:648
 msgid "^F2Speed has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:631
+#: qcsrc/common/notifications.qh:649
 msgid "^F2Strength has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:632
+#: qcsrc/common/notifications.qh:650
 msgid "^F2You are invisible"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:633
+#: qcsrc/common/notifications.qh:651
 msgid "^F2Shield surrounds you"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:634
+#: qcsrc/common/notifications.qh:652
 msgid "^F2You are on speed"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:635
+#: qcsrc/common/notifications.qh:653
 msgid "^F2Strength infuses your weapons with devastating power"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:636
+#: qcsrc/common/notifications.qh:654
 msgid "^F2The race is over, finish your lap!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:637
+#: qcsrc/common/notifications.qh:655
 msgid "^F2Superweapons have broken down"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:638
+#: qcsrc/common/notifications.qh:656
 msgid "^F2Superweapons have been lost"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:639
+#: qcsrc/common/notifications.qh:657
 msgid "^F2You now have a superweapon"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:640
+#: qcsrc/common/notifications.qh:658
 msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:641
+#: qcsrc/common/notifications.qh:659
 msgid "^K1Changing team in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:642
+#: qcsrc/common/notifications.qh:660
 msgid "^K1Spectating in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:643
+#: qcsrc/common/notifications.qh:661
 msgid "^K1Suicide in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:644
+#: qcsrc/common/notifications.qh:662
 msgid "^F4Timeout begins in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:645
+#: qcsrc/common/notifications.qh:663
 msgid "^F4Timeout ends in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:907 qcsrc/common/notifications.qh:908
+#: qcsrc/common/notifications.qh:937 qcsrc/common/notifications.qh:938
 #, c-format
 msgid " (near %s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:915 qcsrc/common/notifications.qh:916
+#: qcsrc/common/notifications.qh:945 qcsrc/common/notifications.qh:946
 msgid "primary"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:915 qcsrc/common/notifications.qh:916
+#: qcsrc/common/notifications.qh:945 qcsrc/common/notifications.qh:946
 msgid "secondary"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:926
+#: qcsrc/common/notifications.qh:956
 #, c-format
 msgid " ^F1(Press %s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:935
+#: qcsrc/common/notifications.qh:965
 #, c-format
 msgid " with %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 #, c-format
 msgid "%s^K1 made a TRIPLE FRAG! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 #, c-format
 msgid "%s^K1 made a TRIPLE SCORE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 msgid "TRIPLE FRAG! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 #, c-format
 msgid "%s^K1 made FIVE SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 #, c-format
 msgid "%s^K1 unlocked RAGE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 msgid "RAGE! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 #, c-format
 msgid "%s^K1 made TEN SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 #, c-format
 msgid "%s^K1 started a MASSACRE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 msgid "MASSACRE! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 #, c-format
 msgid "%s^K1 executed MAYHEM! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 #, c-format
 msgid "%s^K1 made FIFTEEN SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 msgid "MAYHEM! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 #, c-format
 msgid "%s^K1 is a BERSERKER! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 #, c-format
 msgid "%s^K1 made TWENTY SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 msgid "BERSERKER! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 #, c-format
 msgid "%s^K1 inflicts CARNAGE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 #, c-format
 msgid "%s^K1 made TWENTY FIVE SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 msgid "CARNAGE! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 #, c-format
 msgid "%s^K1 made THIRTY SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 #, c-format
 msgid "%s^K1 unleashes ARMAGEDDON! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 msgid "ARMAGEDDON! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:956
+#: qcsrc/common/notifications.qh:986
 #, c-format
 msgid "%s(^F1Bot^BG)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:958
+#: qcsrc/common/notifications.qh:988
 #, c-format
 msgid "%s(Ping ^F1%d^BG)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:964
+#: qcsrc/common/notifications.qh:994
 #, c-format
 msgid ""
 "\n"
 "(Health ^1%d^BG / Armor ^2%d^BG)%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:966
+#: qcsrc/common/notifications.qh:996
 #, c-format
 msgid ""
 "\n"
 "(^F4Dead^BG)%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1003 qcsrc/common/notifications.qh:1016
+#: qcsrc/common/notifications.qh:1033 qcsrc/common/notifications.qh:1046
 #, c-format
 msgid "%d score spree! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1015
+#: qcsrc/common/notifications.qh:1045
 #, c-format
 msgid "%d frag spree! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1028
+#: qcsrc/common/notifications.qh:1058
 msgid "First blood! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1028
+#: qcsrc/common/notifications.qh:1058
 msgid "First score! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1032
+#: qcsrc/common/notifications.qh:1062
 msgid "First casualty! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1032
+#: qcsrc/common/notifications.qh:1062
 msgid "First victim! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1073
+#: qcsrc/common/notifications.qh:1103
 #, c-format
 msgid "%s^K1 has %d frags in a row! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1074
+#: qcsrc/common/notifications.qh:1104
 #, c-format
 msgid "%s^K1 made %d scores in a row! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1092
+#: qcsrc/common/notifications.qh:1122
 #, c-format
 msgid "%s^K1 drew first blood! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1093
+#: qcsrc/common/notifications.qh:1123
 #, c-format
 msgid "%s^K1 got the first score! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1109
+#: qcsrc/common/notifications.qh:1139
 #, c-format
 msgid ", ending their %d frag spree"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1110
+#: qcsrc/common/notifications.qh:1140
 #, c-format
 msgid ", ending their %d score spree"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1124
+#: qcsrc/common/notifications.qh:1154
 #, c-format
 msgid ", losing their %d frag spree"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1125
+#: qcsrc/common/notifications.qh:1155
 #, c-format
 msgid ", losing their %d score spree"
 msgstr ""
@@ -3133,11 +3133,11 @@ msgstr ""
 msgid "%d (%s)"
 msgstr ""
 
-#: qcsrc/menu/item/textslider.c:29 qcsrc/menu/item/textslider.c:31
+#: qcsrc/menu/item/textslider.c:31 qcsrc/menu/item/textslider.c:33
 msgid "custom"
 msgstr ""
 
-#: qcsrc/menu/menu.qc:56
+#: qcsrc/menu/menu.qc:59
 #, c-format
 msgid "^4MQC Build information: ^1%s\n"
 msgstr ""
@@ -3184,7 +3184,7 @@ msgstr ""
 #: 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_sandboxtools.c:89
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:90
 #: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:77
 #: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:21
 msgid "OK"
@@ -3236,33 +3236,33 @@ msgstr ""
 msgid "Ammo Panel"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:23
 msgid "Ammunition display:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:26
 msgid "Show only current ammo type"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:28
-msgid "Align icon:"
-msgstr ""
-
 #: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:36
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:28
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:40
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:28
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:40
-msgid "Left"
+msgid "Align icon:"
 msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:30
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:38
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:29
 #: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:41
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:29
 #: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:41
+msgid "Left"
+msgstr ""
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:42
 msgid "Right"
 msgstr ""
 
@@ -3270,28 +3270,28 @@ msgstr ""
 msgid "Centerprint"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:24
 msgid "Message duration:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:27
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:28
 msgid "Fade time:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:32
 msgid "Flip messages order"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:34
 msgid "Text alignment:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:38
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:51
 msgid "Center"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:41
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:42
 msgid "Font scale:"
 msgstr ""
 
@@ -3299,19 +3299,19 @@ msgstr ""
 msgid "Chat Panel"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:23
 msgid "Chat entries:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:26
 msgid "Chat size:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:30
 msgid "Chat lifetime:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:34
 msgid "Chat beep sound"
 msgstr ""
 
@@ -3319,11 +3319,11 @@ msgstr ""
 msgid "Engine Info Panel"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:23
 msgid "Engine info:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:26
 msgid "Use an averaging algorithm for fps"
 msgstr ""
 
@@ -3331,36 +3331,36 @@ msgstr ""
 msgid "Health/Armor Panel"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:22
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:23
 msgid "Enable status bar"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:24
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:25
 msgid "Status bar alignment:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:32
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:42
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:32
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:43
 msgid "Inward"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:34
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:43
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:34
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:44
 msgid "Outward"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:37
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:38
 msgid "Icon alignment:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:46
 msgid "Flip health and armor positions"
 msgstr ""
 
@@ -3368,11 +3368,11 @@ msgstr ""
 msgid "Info Messages Panel"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:23
 msgid "Info messages:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:26
 msgid "Flip align"
 msgstr ""
 
@@ -3384,23 +3384,23 @@ msgstr ""
 msgid "Notification Panel"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:23
 msgid "Notifications:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:26
 msgid "Also print notifications to the console"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:29
 msgid "Flip notify order"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:32
 msgid "Entry lifetime:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:36
 msgid "Entry fadetime:"
 msgstr ""
 
@@ -3408,96 +3408,96 @@ msgstr ""
 msgid "Physics Panel"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:22
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:22
 msgid "Panel disabled"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
 msgid "Panel enabled"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
 msgid "Panel enabled even observing"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:26
 msgid "Panel enabled only in Race/CTS"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:32
 msgid "Status bar"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:49
 msgid "Left align"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:53
 msgid "Right align"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
 msgid "Inward align"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:37
 msgid "Outward align"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:41
 msgid "Flip speed/acceleration positions"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
 #: qcsrc/menu/xonotic/dialog_settings_misc.c:29
 msgid "Speed:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:46
 msgid "Include vertical speed"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:56
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:57
 msgid "Speed unit:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:58
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
 msgid "qu/s"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
 msgid "m/s"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
 msgid "km/h"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
 msgid "mph"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:63
 msgid "knots"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:64
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:65
 msgid "Show"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:67
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:68
 msgid "Top speed"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:73
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
 msgid "Acceleration:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:75
 msgid "Include vertical acceleration"
 msgstr ""
 
@@ -3505,7 +3505,7 @@ msgstr ""
 msgid "Powerups Panel"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:46
 msgid "Flip strength and shield positions"
 msgstr ""
 
@@ -3513,16 +3513,16 @@ msgstr ""
 msgid "Pressed Keys Panel"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
 msgid "Panel enabled when spectating"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:24
 msgid "Panel always enabled"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:31
 msgid "Forced aspect:"
 msgstr ""
 
@@ -3534,68 +3534,68 @@ msgstr ""
 msgid "Radar Panel"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
 msgid "Panel enabled in teamgames"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:30
 msgid "Radar:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:32
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:43
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:82
+#: 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
 msgid "Alpha:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:37
 msgid "Rotation:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:39
 msgid "Forward"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:40
 msgid "West"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:41
 msgid "South"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:41
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:42
 msgid "East"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:43
 msgid "North"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:46
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:47
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:63
 msgid "Scale:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:50
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:51
 msgid "Zoom mode:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:52
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:53
 msgid "Zoomed in"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:53
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:54
 msgid "Zoomed out"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:54
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:55
 msgid "Always zoomed"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:55
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:56
 msgid "Never zoomed"
 msgstr ""
 
@@ -3603,23 +3603,23 @@ msgstr ""
 msgid "Score Panel"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:23
 msgid "Score:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
 msgid "Rankings:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
 msgid "Off"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
 msgid "And me"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:29
 msgid "Pure"
 msgstr ""
 
@@ -3627,11 +3627,11 @@ msgstr ""
 msgid "Timer Panel"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:23
 msgid "Timer:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:26
 msgid "Show elapsed time"
 msgstr ""
 
@@ -3639,7 +3639,7 @@ msgstr ""
 msgid "Vote Panel"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:23
 msgid "Alpha after voting:"
 msgstr ""
 
@@ -3647,76 +3647,76 @@ msgstr ""
 msgid "Weapons Panel"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:25
 msgid "Fade out after:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:26
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:27
 msgid "Never"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:29
 #, c-format
 msgid "%ds"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:32
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:33
 msgid "Fade effect:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
 msgid "EF^None"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:37
 msgid "Alpha"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
 msgid "Slide"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:39
 msgid "EF^Both"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:43
 msgid "Weapon icons:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46
 msgid "Show only owned weapons"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:48
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
 msgid "Show weapon ID as:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
 msgid "SHOWAS^None"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
 msgid "Number"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:52
 msgid "Bind"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:54
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
 msgid "Show Accuracy"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:56
 msgid "Show Ammo"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:58
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:59
 msgid "Ammo bar color:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:64
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:65
 msgid "Ammo bar alpha:"
 msgstr ""
 
@@ -3724,85 +3724,85 @@ msgstr ""
 msgid "Panel HUD Setup"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:21
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:22
 msgid "Panel background defaults:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:23 qcsrc/menu/xonotic/util.qc:683
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:24 qcsrc/menu/xonotic/util.qc:683
 msgid "Background:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:25
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:37
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:52
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:686
+#: 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
 msgid "Disable"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:30
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:691
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:31
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:78 qcsrc/menu/xonotic/util.qc:691
 msgid "Color:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:699
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:36 qcsrc/menu/xonotic/util.qc:699
 msgid "Border size:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:50
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:89
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:51
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:90
 msgid "Team color:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:725
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:59 qcsrc/menu/xonotic/util.qc:725
 msgid "Test team color in configure mode"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:728
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:62 qcsrc/menu/xonotic/util.qc:728
 msgid "Padding:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:68
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:69
 msgid "HUD Dock:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:70
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71
 msgid "DOCK^Disabled"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72
 msgid "DOCK^Small"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73
 msgid "DOCK^Medium"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:74
 msgid "DOCK^Large"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:96
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:97
 msgid "Grid settings:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:99
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:100
 msgid "Snap panels to grid"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:102
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:103
 msgid "Grid size:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:103
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:104
 msgid "X:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:109
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:110
 msgid "Y:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:117
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:118
 msgid "Exit setup"
 msgstr ""
 
@@ -4387,7 +4387,7 @@ msgid "Key:"
 msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:61
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:19
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:20
 msgid "Model:"
 msgstr ""
 
@@ -4762,127 +4762,127 @@ msgstr ""
 msgid "Sandbox Tools"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:24
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:25
 msgid "Spawn"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:25
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:26
 msgid "Remove *"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:27
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:28
 msgid "Copy *"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:28
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:29
 msgid "Paste"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:30
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:31
 msgid "Bone:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:35
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:36
 msgid "Set * as child"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:36
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:37
 msgid "Attach to *"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:38
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:39
 msgid "Detach from *"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:41
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:42
 msgid "Visual object properties for *:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:43
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:44
 msgid "Set skin:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:45
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:46
 msgid "Set alpha:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:48
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:49
 msgid "Set color main:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:50
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:51
 msgid "Set color glow:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:54
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:55
 msgid "Set frame:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:58
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:59
 msgid "Physical object properties for *:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:60
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:61
 msgid "Set material:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:66
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:67
 msgid "Set solidity:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:67
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:68
 msgid "Non-solid"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:68
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:69
 msgid "Solid"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:69
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:70
 msgid "Set physics:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:70
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:71
 msgid "Static"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:71
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:72
 msgid "Movable"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:72
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:73
 msgid "Physical"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:74
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:75
 msgid "Set scale:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:76
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:77
 msgid "Set force:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:80
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:81
 msgid "Claim *"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:82
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:83
 msgid "* object info"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:83
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:84
 msgid "* mesh info"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:84
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:85
 msgid "* attachment info"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:85
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:86
 msgid "Show help"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:86
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:87
 msgid "* is the object you are facing"
 msgstr ""
 
@@ -5879,27 +5879,27 @@ msgstr ""
 msgid "Team Selection"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:41
+#: qcsrc/menu/xonotic/dialog_teamselect.c:42
 msgid "join 'best' team (auto-select)"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:45
+#: qcsrc/menu/xonotic/dialog_teamselect.c:46
 msgid "red"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:46
+#: qcsrc/menu/xonotic/dialog_teamselect.c:47
 msgid "blue"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:47
+#: qcsrc/menu/xonotic/dialog_teamselect.c:48
 msgid "yellow"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:48
+#: qcsrc/menu/xonotic/dialog_teamselect.c:49
 msgid "pink"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:51
+#: qcsrc/menu/xonotic/dialog_teamselect.c:52
 msgid "spectate"
 msgstr ""
 
@@ -5995,7 +5995,12 @@ msgstr ""
 msgid "%s dB"
 msgstr ""
 
-#: qcsrc/menu/xonotic/slider_resolution.c:72
+#: qcsrc/menu/xonotic/slider_resolution.c:103
+#, c-format
+msgid "%dx%d (%d:%d)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_resolution.c:106
 #, c-format
 msgid "%dx%d"
 msgstr ""
index 1873efefaec4dcc6dea7544a5fa155850ad62588..298c140b0a3782fb640f1ecb8d28b7a220d1f4cf 100644 (file)
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Xonotic\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-09-13 10:31+0200\n"
-"PO-Revision-Date: 2013-09-13 08:33+0000\n"
+"POT-Creation-Date: 2013-10-03 11:55+0200\n"
+"PO-Revision-Date: 2013-10-03 10:08+0000\n"
 "Last-Translator: divVerent <divVerent@xonotic.org>\n"
 "Language-Team: Portuguese (http://www.transifex.com/projects/p/xonotic/"
 "language/pt/)\n"
@@ -1230,7 +1230,7 @@ msgstr ""
 msgid "@!#%'n Tuba Throwing"
 msgstr "@!#%'n Tuba Throwing"
 
-#: qcsrc/common/mapinfo.qc:1105 qcsrc/menu/xonotic/skinlist.c:166
+#: qcsrc/common/mapinfo.qc:1109 qcsrc/menu/xonotic/skinlist.c:166
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
@@ -1304,1773 +1304,1773 @@ msgstr ""
 msgid "^7%s (^3%d sec left)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:330
+#: qcsrc/common/notifications.qh:342
 #, c-format
 msgid "^BG%s^BG captured the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:331
+#: qcsrc/common/notifications.qh:343
 #, c-format
 msgid ""
 "^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
 "%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:332
+#: qcsrc/common/notifications.qh:344
 #, c-format
 msgid "^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:333
+#: qcsrc/common/notifications.qh:345
 #, c-format
 msgid ""
 "^BG%s^BG captured the ^TC^TT^BG flag in ^F2%s^BG seconds, failing to break "
 "^BG%s^BG's previous record of ^F1%s^BG seconds"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:334
+#: qcsrc/common/notifications.qh:346
 msgid "^BGThe ^TC^TT^BG flag was returned to base by its owner"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:335
+#: qcsrc/common/notifications.qh:347
 msgid "^BGThe ^TC^TT^BG flag was destroyed and returned to base"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:336
+#: qcsrc/common/notifications.qh:348
 msgid "^BGThe ^TC^TT^BG flag was dropped in the base and returned itself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:337
+#: qcsrc/common/notifications.qh:349
 msgid ""
 "^BGThe ^TC^TT^BG flag fell somewhere it couldn't be reached and returned to "
 "base"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:338
+#: qcsrc/common/notifications.qh:350
 #, c-format
 msgid ""
 "^BGThe ^TC^TT^BG flag became impatient after ^F1%.2f^BG seconds and returned "
 "itself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:339
+#: qcsrc/common/notifications.qh:351
 msgid "^BGThe ^TC^TT^BG flag has returned to the base"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:340
+#: qcsrc/common/notifications.qh:352
 #, c-format
 msgid "^BG%s^BG lost the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:341
+#: qcsrc/common/notifications.qh:353
 #, c-format
 msgid "^BG%s^BG got the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:342
+#: qcsrc/common/notifications.qh:354
 #, c-format
 msgid "^BG%s^BG returned the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:343
+#: qcsrc/common/notifications.qh:355
 #, c-format
 msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:344
+#: qcsrc/common/notifications.qh:356
 #, c-format
 msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:345
+#: qcsrc/common/notifications.qh:357
 #, c-format
 msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:346
+#: qcsrc/common/notifications.qh:358
 #, c-format
 msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:346
+#: qcsrc/common/notifications.qh:358
 #, c-format
 msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:347
+#: qcsrc/common/notifications.qh:359
 #, c-format
 msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:348
+#: qcsrc/common/notifications.qh:360
 #, c-format
 msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:349
+#: qcsrc/common/notifications.qh:361
 #, c-format
 msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:350
+#: qcsrc/common/notifications.qh:362
 #, c-format
 msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:351
+#: qcsrc/common/notifications.qh:363
 #, c-format
 msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:352
+#: qcsrc/common/notifications.qh:364
 #, c-format
 msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:352
+#: qcsrc/common/notifications.qh:364
 #, c-format
 msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:353
+#: qcsrc/common/notifications.qh:365
 #, c-format
 msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:354
+#: qcsrc/common/notifications.qh:366
 #, c-format
 msgid ""
 "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:355
+#: qcsrc/common/notifications.qh:367
 #, c-format
 msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:356
+#: qcsrc/common/notifications.qh:368
 #, c-format
 msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:357
+#: qcsrc/common/notifications.qh:369
 #, c-format
 msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:358
+#: qcsrc/common/notifications.qh:370
 #, c-format
 msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:359
+#: qcsrc/common/notifications.qh:371
 #, c-format
 msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:360
+#: qcsrc/common/notifications.qh:372
 #, c-format
 msgid ""
 "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:361
+#: qcsrc/common/notifications.qh:373
 #, c-format
 msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:362
+#: qcsrc/common/notifications.qh:374
 #, c-format
 msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:363
+#: qcsrc/common/notifications.qh:375
 #, c-format
 msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:364
+#: qcsrc/common/notifications.qh:376
 #, c-format
 msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:365
+#: qcsrc/common/notifications.qh:377
 #, c-format
 msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:366
+#: qcsrc/common/notifications.qh:378
 #, c-format
 msgid "^BG%s%s^K1 was thrown into a world of hurt by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:367
+#: qcsrc/common/notifications.qh:379
 #, c-format
 msgid "^BG%s^K1 was moved into the %s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:368
+#: qcsrc/common/notifications.qh:380
 #, c-format
 msgid "^BG%s^K1 became enemies with the Lord of Teamplay%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:369
+#: qcsrc/common/notifications.qh:381
 #, c-format
 msgid "^BG%s^K1 thought they found a nice camping ground%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:370
+#: qcsrc/common/notifications.qh:382
 #, c-format
 msgid "^BG%s^K1 unfairly eliminated themself%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:371
+#: qcsrc/common/notifications.qh:383
 #, c-format
 msgid "^BG%s^K1 %s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:372
+#: qcsrc/common/notifications.qh:384
 #, c-format
 msgid "^BG%s^K1 couldn't catch their breath%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:372
+#: qcsrc/common/notifications.qh:384
 #, c-format
 msgid "^BG%s^K1 was in the water for too long%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:373
+#: qcsrc/common/notifications.qh:385
 #, c-format
 msgid "^BG%s^K1 hit the ground with a bit too much force%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:373
+#: qcsrc/common/notifications.qh:385
 #, c-format
 msgid "^BG%s^K1 hit the ground with a crunch%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:374
+#: qcsrc/common/notifications.qh:386
 #, c-format
 msgid "^BG%s^K1 became a bit too crispy%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:374
+#: qcsrc/common/notifications.qh:386
 #, c-format
 msgid "^BG%s^K1 felt a little hot%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:375
+#: qcsrc/common/notifications.qh:387
 #, c-format
 msgid "^BG%s^K1 died%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:376
+#: qcsrc/common/notifications.qh:388
 #, c-format
 msgid "^BG%s^K1 found a hot place%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:376
+#: qcsrc/common/notifications.qh:388
 #, c-format
 msgid "^BG%s^K1 turned into hot slag%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:377
+#: qcsrc/common/notifications.qh:389
 #, c-format
 msgid "^BG%s^K1 mastered the art of self-nading%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:378
+#: qcsrc/common/notifications.qh:390
 #, c-format
 msgid "^BG%s^K1 died%s%s. What's the point of living without ammo?"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:378
+#: qcsrc/common/notifications.qh:390
 #, c-format
 msgid "^BG%s^K1 ran out of ammo%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:379
+#: qcsrc/common/notifications.qh:391
 #, c-format
 msgid "^BG%s^K1 rotted away%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:380
+#: qcsrc/common/notifications.qh:392
 #, c-format
 msgid "^BG%s^K1 became a shooting star%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:393
 #, c-format
 msgid "^BG%s^K1 was slimed%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:394
 #, c-format
 msgid "^BG%s^K1 couldn't take it anymore%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:395
 #, c-format
 msgid "^BG%s^K1 is now preserved for centuries to come%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:396
 #, c-format
 msgid "^BG%s^K1 switched to the %s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:397
 #, c-format
 msgid "^BG%s^K1 died in an accident%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:398
 #, c-format
 msgid "^BG%s^K1 ran into a turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:399
 #, c-format
 msgid "^BG%s^K1 was blasted away by an eWheel turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:400
 #, c-format
 msgid "^BG%s^K1 got caught up in the FLAC turret fire%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:401
 #, c-format
 msgid "^BG%s^K1 was blasted away by a Hellion turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:402
 #, c-format
 msgid "^BG%s^K1 could not hide from the Hunter turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:403
 #, c-format
 msgid "^BG%s^K1 was riddled full of holes by a Machinegun turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:404
 #, c-format
 msgid "^BG%s^K1 got turned into smoldering gibs by an MLRS turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:405
 #, c-format
 msgid "^BG%s^K1 was phased out by a turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:406
 #, c-format
 msgid "^BG%s^K1 got served some superheated plasma from a turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:407
 #, c-format
 msgid "^BG%s^K1 was electrocuted by a Tesla turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:408
 #, c-format
 msgid "^BG%s^K1 got served a lead enrichment by a Walker turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:409
 #, c-format
 msgid "^BG%s^K1 was impaled by a Walker turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:410
 #, c-format
 msgid "^BG%s^K1 was blasted away by a Walker turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:411
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Bumblebee explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:412
 #, c-format
 msgid "^BG%s^K1 was crushed by a vehicle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:401
+#: qcsrc/common/notifications.qh:413
 #, c-format
 msgid "^BG%s^K1 was caught in a Raptor cluster bomb%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:402
+#: qcsrc/common/notifications.qh:414
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Raptor explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:403
+#: qcsrc/common/notifications.qh:415
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Spiderbot explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:404
+#: qcsrc/common/notifications.qh:416
 #, c-format
 msgid "^BG%s^K1 was blasted to bits by a Spiderbot rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:405
+#: qcsrc/common/notifications.qh:417
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Racer explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:406
+#: qcsrc/common/notifications.qh:418
 #, c-format
 msgid "^BG%s^K1 couldn't find shelter from a Racer rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:407
+#: qcsrc/common/notifications.qh:419
 #, c-format
 msgid "^BG%s^K1 was in the wrong place%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:408
+#: qcsrc/common/notifications.qh:420
 #, c-format
 msgid "^BG%s^K1 was betrayed by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:409
+#: qcsrc/common/notifications.qh:421
 #, c-format
 msgid "^BG%s^K1 was frozen by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:410
+#: qcsrc/common/notifications.qh:422
 #, c-format
 msgid "^BG%s^K3 was revived by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:411
+#: qcsrc/common/notifications.qh:423
 #, c-format
 msgid "^BG%s^K3 was revived by falling"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:412
+#: qcsrc/common/notifications.qh:424
 #, c-format
 msgid "^BG%s^K3 was automatically revived after %s second(s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:413 qcsrc/common/notifications.qh:594
+#: qcsrc/common/notifications.qh:425 qcsrc/common/notifications.qh:612
 msgid "^TC^TT^BG team wins the round"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:414 qcsrc/common/notifications.qh:595
+#: qcsrc/common/notifications.qh:426 qcsrc/common/notifications.qh:613
 #, c-format
 msgid "^BG%s^BG wins the round"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:415 qcsrc/common/notifications.qh:524
+#: qcsrc/common/notifications.qh:427 qcsrc/common/notifications.qh:542
 msgid "^BGRound tied"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:416 qcsrc/common/notifications.qh:525
+#: qcsrc/common/notifications.qh:428 qcsrc/common/notifications.qh:543
 msgid "^BGRound over, there's no winner"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:417
+#: qcsrc/common/notifications.qh:429
 #, c-format
 msgid "^BG%s^K1 froze themself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:418
+#: qcsrc/common/notifications.qh:430
 #, c-format
 msgid "^BGGodmode saved you %s units of damage, cheater!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:419 qcsrc/common/notifications.qh:598
+#: qcsrc/common/notifications.qh:431 qcsrc/common/notifications.qh:616
 #, c-format
 msgid "^BGYou do not have the ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:420 qcsrc/common/notifications.qh:599
+#: qcsrc/common/notifications.qh:432 qcsrc/common/notifications.qh:617
 #, c-format
 msgid "^BGYou dropped the ^F1%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:421 qcsrc/common/notifications.qh:600
+#: qcsrc/common/notifications.qh:433 qcsrc/common/notifications.qh:618
 #, c-format
 msgid "^BGYou got the ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:422 qcsrc/common/notifications.qh:601
+#: qcsrc/common/notifications.qh:434 qcsrc/common/notifications.qh:619
 #, c-format
 msgid "^BGYou don't have enough ammo for the ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:423 qcsrc/common/notifications.qh:602
+#: qcsrc/common/notifications.qh:435 qcsrc/common/notifications.qh:620
 #, c-format
 msgid "^F1%s %s^BG is unable to fire, but its ^F1%s^BG can"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:424 qcsrc/common/notifications.qh:603
+#: qcsrc/common/notifications.qh:436 qcsrc/common/notifications.qh:621
 #, c-format
 msgid "^F1%s^BG is ^F4not available^BG on this map"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:425
+#: qcsrc/common/notifications.qh:437
 #, c-format
 msgid "^BG%s^F3 connected%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:426
+#: qcsrc/common/notifications.qh:438
 #, c-format
 msgid "^BG%s^F3 connected and joined the ^TC^TT team"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:427
+#: qcsrc/common/notifications.qh:439
 #, c-format
 msgid "^BG%s^F3 is now playing"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:428 qcsrc/common/notifications.qh:606
+#: qcsrc/common/notifications.qh:440 qcsrc/common/notifications.qh:624
 #, c-format
 msgid "^BG%s^BG has dropped the ball!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:429 qcsrc/common/notifications.qh:607
+#: qcsrc/common/notifications.qh:441 qcsrc/common/notifications.qh:625
 #, c-format
 msgid "^BG%s^BG has picked up the ball!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:430
+#: qcsrc/common/notifications.qh:442
 #, c-format
 msgid "^BG%s^BG captured the keys for the ^TC^TT team"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:431
+#: qcsrc/common/notifications.qh:443
 #, c-format
 msgid "^BG%s^BG dropped the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:432
+#: qcsrc/common/notifications.qh:444
 #, c-format
 msgid "^BG%s^BG lost the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:433
+#: qcsrc/common/notifications.qh:445
 #, c-format
 msgid "^BG%s^BG picked up the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:434
+#: qcsrc/common/notifications.qh:446
 #, c-format
 msgid "^BG%s^F3 forfeited"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:435
+#: qcsrc/common/notifications.qh:447
 #, c-format
 msgid "^BG%s^F3 has no more lives left"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:436
+#: qcsrc/common/notifications.qh:448
 #, c-format
 msgid "^BG%s^K1 picked up Invisibility"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:437
+#: qcsrc/common/notifications.qh:449
 #, c-format
 msgid "^BG%s^K1 picked up Shield"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:438
+#: qcsrc/common/notifications.qh:450
 #, c-format
 msgid "^BG%s^K1 picked up Speed"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:439
+#: qcsrc/common/notifications.qh:451
 #, c-format
 msgid "^BG%s^K1 picked up Strength"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:440
+#: qcsrc/common/notifications.qh:452
 #, c-format
 msgid "^BG%s^F3 disconnected"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:441
+#: qcsrc/common/notifications.qh:453
 #, c-format
 msgid "^BG%s^F3 was kicked for idling"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:442
+#: qcsrc/common/notifications.qh:454
 msgid ""
 "^F2You were kicked from the server because you are a spectator and "
 "spectators aren't allowed at the moment."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:443
+#: qcsrc/common/notifications.qh:455
 #, c-format
 msgid "^BG%s^F3 is now spectating"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:444
+#: qcsrc/common/notifications.qh:456
 #, c-format
 msgid "^BG%s^BG has abandoned the race"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:445
+#: qcsrc/common/notifications.qh:457
 #, c-format
 msgid "^BG%s^BG couldn't break their %s%s^BG place record of %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:446
+#: qcsrc/common/notifications.qh:458
 #, c-format
 msgid "^BG%s^BG couldn't break the %s%s^BG place record of %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:447
+#: qcsrc/common/notifications.qh:459
 #, c-format
 msgid "^BG%s^BG has finished the race"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:448
+#: qcsrc/common/notifications.qh:460
 #, c-format
 msgid "^BG%s^BG broke %s^BG's %s%s^BG place record with %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:449
+#: qcsrc/common/notifications.qh:461
 #, c-format
 msgid "^BG%s^BG improved their %s%s^BG place record with %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:450
+#: qcsrc/common/notifications.qh:462
 #, c-format
 msgid ""
 "^BG%s^BG scored a new record with ^F2%s^BG, but unfortunately lacks a UID "
 "and will be lost."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:451
+#: qcsrc/common/notifications.qh:463
 #, c-format
 msgid "^BG%s^BG set the %s%s^BG place record with %s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:452
+#: qcsrc/common/notifications.qh:464
 msgid "^TC^TT ^BGteam scores!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:453
+#: qcsrc/common/notifications.qh:465
 #, 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 ""
 
-#: qcsrc/common/notifications.qh:454
+#: qcsrc/common/notifications.qh:466
 #, c-format
 msgid "^BG%s^K1 picked up a Superweapon"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:455
+#: qcsrc/common/notifications.qh:467
 #, c-format
 msgid ""
 "^F4NOTE: ^BGThe server is running ^F1Xonotic %s (beta)^BG, you have "
 "^F2Xonotic %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:456
+#: qcsrc/common/notifications.qh:468
 #, c-format
 msgid ""
 "^F4NOTE: ^BGThe server is running ^F1Xonotic %s^BG, you have ^F2Xonotic %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:457
+#: qcsrc/common/notifications.qh:469
 #, c-format
 msgid ""
 "^F4NOTE: ^F1Xonotic %s^BG is out, and you still have ^F2Xonotic %s^BG - get "
 "the update from ^F3http://www.xonotic.org/^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:458
+#: qcsrc/common/notifications.qh:470
 #, c-format
 msgid "^F3SVQC Build information: ^F4%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:459
+#: qcsrc/common/notifications.qh:471
 #, c-format
 msgid ""
 "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Accordeon%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:460
+#: qcsrc/common/notifications.qh:472
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Accordeon%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:461
+#: qcsrc/common/notifications.qh:473
 #, c-format
 msgid "^BG%s%s^K1 felt the strong pull of ^BG%s^K1's Crylink%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:462
+#: qcsrc/common/notifications.qh:474
 #, c-format
 msgid "^BG%s^K1 felt the strong pull of their Crylink%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:463
+#: qcsrc/common/notifications.qh:475
 #, c-format
 msgid "^BG%s%s^K1 was blasted by ^BG%s^K1's Electro bolt%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:464
+#: qcsrc/common/notifications.qh:476
 #, c-format
 msgid "^BG%s%s^K1 felt the electrifying air of ^BG%s^K1's Electro combo%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:465
+#: qcsrc/common/notifications.qh:477
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Electro plasma%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:466
+#: qcsrc/common/notifications.qh:478
 #, c-format
 msgid "^BG%s^K1 played with Electro plasma%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:467
+#: qcsrc/common/notifications.qh:479
 #, c-format
 msgid "^BG%s^K1 could not remember where they put their Electro plasma%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:468
+#: qcsrc/common/notifications.qh:480
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's fireball%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:469
+#: qcsrc/common/notifications.qh:481
 #, c-format
 msgid "^BG%s%s^K1 got burnt by ^BG%s^K1's firemine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:470
+#: qcsrc/common/notifications.qh:482
 #, c-format
 msgid "^BG%s^K1 should have used a smaller gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:471
+#: qcsrc/common/notifications.qh:483
 #, c-format
 msgid "^BG%s^K1 forgot about their firemine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:472
+#: qcsrc/common/notifications.qh:484
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by a burst of ^BG%s^K1's Hagar rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:473
+#: qcsrc/common/notifications.qh:485
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Hagar rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:474
+#: qcsrc/common/notifications.qh:486
 #, c-format
 msgid "^BG%s^K1 played with tiny Hagar rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:475
+#: qcsrc/common/notifications.qh:487
 #, c-format
 msgid "^BG%s%s^K1 was cut down with ^BG%s^K1's HLAC%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:476
+#: qcsrc/common/notifications.qh:488
 #, c-format
 msgid "^BG%s^K1 got a little jumpy with their HLAC%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:477
+#: qcsrc/common/notifications.qh:489
 #, c-format
 msgid "^BG%s%s^K1 was caught in ^BG%s^K1's Hook gravity bomb%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:478
+#: qcsrc/common/notifications.qh:490
 #, c-format
 msgid ""
 "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Klein Bottle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:479
+#: qcsrc/common/notifications.qh:491
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Klein Bottle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:480
+#: qcsrc/common/notifications.qh:492
 #, c-format
 msgid "^BG%s%s^K1 was shot to death by ^BG%s^K1's Laser%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:481
+#: qcsrc/common/notifications.qh:493
 #, c-format
 msgid "^BG%s^K1 shot themself to hell with their Laser%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:482
+#: qcsrc/common/notifications.qh:494
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's mine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:483
+#: qcsrc/common/notifications.qh:495
 #, c-format
 msgid "^BG%s^K1 forgot about their mine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:484
+#: qcsrc/common/notifications.qh:496
 #, c-format
 msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Minstanex%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:485
+#: qcsrc/common/notifications.qh:497
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Mortar grenade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:486
+#: qcsrc/common/notifications.qh:498
 #, c-format
 msgid "^BG%s%s^K1 ate ^BG%s^K1's Mortar grenade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:487
+#: qcsrc/common/notifications.qh:499
 #, c-format
 msgid "^BG%s^K1 didn't see their own Mortar grenade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:488
+#: qcsrc/common/notifications.qh:500
 #, c-format
 msgid "^BG%s^K1 blew themself up with their own Mortar%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:489
+#: qcsrc/common/notifications.qh:501
 #, c-format
 msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Nex%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:490
+#: qcsrc/common/notifications.qh:502
 #, c-format
 msgid "^BG%s%s^K1 was sniped with a Rifle by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:491
+#: qcsrc/common/notifications.qh:503
 #, c-format
 msgid "^BG%s%s^K1 died in ^BG%s^K1's Rifle bullet hail%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:492
+#: qcsrc/common/notifications.qh:504
 #, c-format
 msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle bullet hail%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:493
+#: qcsrc/common/notifications.qh:505
 #, c-format
 msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:494
+#: qcsrc/common/notifications.qh:506
 #, c-format
 msgid "^BG%s%s^K1 ate ^BG%s^K1's rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:495
+#: qcsrc/common/notifications.qh:507
 #, c-format
 msgid "^BG%s%s^K1 got too close ^BG%s^K1's rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:496
+#: qcsrc/common/notifications.qh:508
 #, c-format
 msgid "^BG%s^K1 blew themself up with their Rocketlauncher%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:497
+#: qcsrc/common/notifications.qh:509
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Seeker rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:498
+#: qcsrc/common/notifications.qh:510
 #, c-format
 msgid "^BG%s%s^K1 was tagged by ^BG%s^K1's Seeker%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:499
+#: qcsrc/common/notifications.qh:511
 #, c-format
 msgid "^BG%s^K1 played with tiny Seeker rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:500
+#: qcsrc/common/notifications.qh:512
 #, c-format
 msgid "^BG%s%s^K1 was gunned down by ^BG%s^K1's Shotgun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:501
+#: qcsrc/common/notifications.qh:513
 #, c-format
 msgid "^BG%s%s^K1 slapped ^BG%s^K1 around a bit with a large Shotgun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:502
+#: qcsrc/common/notifications.qh:514
 #, c-format
 msgid "^BG%s^K1 is now thinking with portals%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:503
+#: qcsrc/common/notifications.qh:515
 #, c-format
 msgid "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Tuba%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:504
+#: qcsrc/common/notifications.qh:516
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Tuba%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:505
+#: qcsrc/common/notifications.qh:517
 #, c-format
 msgid "^BG%s%s^K1 was sniped by ^BG%s^K1's Machine Gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:506
+#: qcsrc/common/notifications.qh:518
 #, c-format
 msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:518
+#: qcsrc/common/notifications.qh:536
 msgid "^BGYou are attacking!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:519
+#: qcsrc/common/notifications.qh:537
 msgid "^BGYou are defending!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:520
+#: qcsrc/common/notifications.qh:538
 msgid "^F4Begin!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:521
+#: qcsrc/common/notifications.qh:539
 msgid "^F4Game starts in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:522
+#: qcsrc/common/notifications.qh:540
 msgid "^F4Round starts in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:523
+#: qcsrc/common/notifications.qh:541
 msgid "^F4Round cannot start"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:526
+#: qcsrc/common/notifications.qh:544
 msgid "^F2Don't camp!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:527
+#: qcsrc/common/notifications.qh:545
 msgid ""
 "^BGYou are now free.\n"
 "^BGFeel free to ^F2try to capture^BG the flag again\n"
 "^BGif you think you will succeed."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:528
+#: qcsrc/common/notifications.qh:546
 msgid ""
 "^BGYou are now ^F1shielded^BG from the flag\n"
 "^BGfor ^F2too many unsuccessful attempts^BG to capture.\n"
 "^BGMake some defensive scores before trying again."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:529
+#: qcsrc/common/notifications.qh:547
 msgid "^BGYou captured the ^TC^TT^BG flag!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:530
+#: qcsrc/common/notifications.qh:548
 #, c-format
 msgid "^BGToo many flag throws! Throwing disabled for %s."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:531
+#: qcsrc/common/notifications.qh:549
 #, c-format
 msgid "^BG%s^BG passed the ^TC^TT^BG flag to %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:532
+#: qcsrc/common/notifications.qh:550
 #, c-format
 msgid "^BGYou received the ^TC^TT^BG flag from %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:533
+#: qcsrc/common/notifications.qh:551
 #, c-format
 msgid "^BG%s^BG requests you to pass the flag%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:534
+#: qcsrc/common/notifications.qh:552
 #, c-format
 msgid "^BGRequesting %s^BG to pass you the flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:535
+#: qcsrc/common/notifications.qh:553
 #, c-format
 msgid "^BGYou passed the ^TC^TT^BG flag to %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:536
+#: qcsrc/common/notifications.qh:554
 msgid "^BGYou got the ^TC^TT^BG flag!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:537
+#: qcsrc/common/notifications.qh:555
 #, c-format
 msgid "^BGThe %senemy^BG got your flag! Retrieve it!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:538
+#: qcsrc/common/notifications.qh:556
 #, c-format
 msgid "^BGThe %senemy (^BG%s%s)^BG got your flag! Retrieve it!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:539
+#: qcsrc/common/notifications.qh:557
 #, c-format
 msgid "^BGYour %steam mate^BG got the flag! Protect them!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:540
+#: qcsrc/common/notifications.qh:558
 #, c-format
 msgid "^BGYour %steam mate (^BG%s%s)^BG got the flag! Protect them!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:541
+#: qcsrc/common/notifications.qh:559
 msgid "^BGYou returned the ^TC^TT^BG flag!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:542
+#: qcsrc/common/notifications.qh:560
 msgid "^BGStalemate! Enemies can now see you on radar!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:543
+#: qcsrc/common/notifications.qh:561
 msgid "^BGStalemate! Flag carriers can now be seen by enemies on radar!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:544
+#: qcsrc/common/notifications.qh:562
 #, c-format
 msgid "^K3%sYou fragged ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:544
+#: qcsrc/common/notifications.qh:562
 #, c-format
 msgid "^K3%sYou scored against ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:545
+#: qcsrc/common/notifications.qh:563
 #, c-format
 msgid "^K1%sYou were fragged by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:545
+#: qcsrc/common/notifications.qh:563
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:546
+#: qcsrc/common/notifications.qh:564
 #, c-format
 msgid "^K1%sYou were fragged by ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:546
+#: qcsrc/common/notifications.qh:564
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:547
+#: qcsrc/common/notifications.qh:565
 #, c-format
 msgid "^K3%sYou fragged ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:547
+#: qcsrc/common/notifications.qh:565
 #, c-format
 msgid "^K3%sYou scored against ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:548
+#: qcsrc/common/notifications.qh:566
 #, c-format
 msgid "^K1%sYou scored against ^BG%s^K1 while they were typing"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:548
+#: qcsrc/common/notifications.qh:566
 #, c-format
 msgid "^K1%sYou typefragged ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:549
+#: qcsrc/common/notifications.qh:567
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^K1 while typing!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:549
+#: qcsrc/common/notifications.qh:567
 #, c-format
 msgid "^K1%sYou were typefragged by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:550
+#: qcsrc/common/notifications.qh:568
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^K1 while typing^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:550
+#: qcsrc/common/notifications.qh:568
 #, c-format
 msgid "^K1%sYou were typefragged by ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:551
+#: qcsrc/common/notifications.qh:569
 #, c-format
 msgid "^K1%sYou scored against ^BG%s^K1 while they were typing^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:551
+#: qcsrc/common/notifications.qh:569
 #, c-format
 msgid "^K1%sYou typefragged ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:552
+#: qcsrc/common/notifications.qh:570
 msgid "^BGPress ^F2DROPWEAPON^BG again to toss the nade!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:553
+#: qcsrc/common/notifications.qh:571
 #, c-format
 msgid ""
 "^BGYou have been moved into a different team\n"
 "You are now on: %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:554
+#: qcsrc/common/notifications.qh:572
 msgid "^K1Don't go against your team mates!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:554
+#: qcsrc/common/notifications.qh:572
 msgid "^K1Don't shoot your team mates!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:555
+#: qcsrc/common/notifications.qh:573
 msgid "^K1Die camper!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:555
+#: qcsrc/common/notifications.qh:573
 msgid "^K1Reconsider your tactics, camper!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:556
+#: qcsrc/common/notifications.qh:574
 msgid "^K1You unfairly eliminated yourself!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:557
+#: qcsrc/common/notifications.qh:575
 #, c-format
 msgid "^K1You were %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:558
+#: qcsrc/common/notifications.qh:576
 msgid "^K1You couldn't catch your breath!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:559
+#: qcsrc/common/notifications.qh:577
 msgid "^K1You hit the ground with a crunch!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:560
+#: qcsrc/common/notifications.qh:578
 msgid "^K1You felt a little too hot!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:560
+#: qcsrc/common/notifications.qh:578
 msgid "^K1You got a little bit too crispy!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:561
+#: qcsrc/common/notifications.qh:579
 msgid "^K1You killed your own dumb self!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:561
+#: qcsrc/common/notifications.qh:579
 msgid "^K1You need to be more careful!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:562
+#: qcsrc/common/notifications.qh:580
 msgid "^K1You couldn't stand the heat!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:563
+#: qcsrc/common/notifications.qh:581
 msgid "^K1Tastes like chicken!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:563
+#: qcsrc/common/notifications.qh:581
 msgid "^K1You forgot to put the pin back in!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:564
+#: qcsrc/common/notifications.qh:582
 msgid "^K1You are respawning for running out of ammo..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:564
+#: qcsrc/common/notifications.qh:582
 msgid "^K1You were killed for running out of ammo..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:565
+#: qcsrc/common/notifications.qh:583
 msgid "^K1You grew too old without taking your medicine"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:565
+#: qcsrc/common/notifications.qh:583
 msgid "^K1You need to preserve your health"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:566
+#: qcsrc/common/notifications.qh:584
 msgid "^K1You became a shooting star!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:567
+#: qcsrc/common/notifications.qh:585
 msgid "^K1You melted away in slime!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:568
+#: qcsrc/common/notifications.qh:586
 msgid "^K1You committed suicide!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:568
+#: qcsrc/common/notifications.qh:586
 msgid "^K1You ended it all!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:569
+#: qcsrc/common/notifications.qh:587
 msgid "^K1You got stuck in a swamp!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:570
+#: qcsrc/common/notifications.qh:588
 #, c-format
 msgid "^BGYou are now on: %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:571
+#: qcsrc/common/notifications.qh:589
 msgid "^K1You died in an accident!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:572
+#: qcsrc/common/notifications.qh:590
 msgid "^K1You had an unfortunate run in with a turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:572
+#: qcsrc/common/notifications.qh:590
 msgid "^K1You were fragged by a turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:573
+#: qcsrc/common/notifications.qh:591
 msgid "^K1You had an unfortunate run in with an eWheel turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:573
+#: qcsrc/common/notifications.qh:591
 msgid "^K1You were fragged by an eWheel turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:574
+#: qcsrc/common/notifications.qh:592
 msgid "^K1You had an unfortunate run in with a Walker turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:574
+#: qcsrc/common/notifications.qh:592
 msgid "^K1You were fragged by a Walker turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:575
+#: qcsrc/common/notifications.qh:593
 msgid "^K1You got caught in the blast of a Bumblebee explosion!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:576
+#: qcsrc/common/notifications.qh:594
 msgid "^K1You were crushed by a vehicle!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:577
+#: qcsrc/common/notifications.qh:595
 msgid "^K1You were caught in a Raptor cluster bomb!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:578
+#: qcsrc/common/notifications.qh:596
 msgid "^K1You got caught in the blast of a Raptor explosion!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:579
+#: qcsrc/common/notifications.qh:597
 msgid "^K1You got caught in the blast of a Spiderbot explosion!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:580
+#: qcsrc/common/notifications.qh:598
 msgid "^K1You were blasted to bits by a Spiderbot rocket!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:581
+#: qcsrc/common/notifications.qh:599
 msgid "^K1You got caught in the blast of a Racer explosion!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:582
+#: qcsrc/common/notifications.qh:600
 msgid "^K1You couldn't find shelter from a Racer rocket!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:583
+#: qcsrc/common/notifications.qh:601
 msgid "^K1Watch your step!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:584
+#: qcsrc/common/notifications.qh:602
 #, c-format
 msgid "^K1Moron! You fragged ^BG%s^K1, a team mate!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:584
+#: qcsrc/common/notifications.qh:602
 #, c-format
 msgid "^K1Moron! You went against ^BG%s^K1, a team mate!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:585
+#: qcsrc/common/notifications.qh:603
 #, c-format
 msgid "^K1You were fragged by ^BG%s^K1, a team mate"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:585
+#: qcsrc/common/notifications.qh:603
 #, c-format
 msgid "^K1You were scored against by ^BG%s^K1, a team mate"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:586
+#: qcsrc/common/notifications.qh:604
 msgid ""
 "^K1Stop idling!\n"
 "^BGDisconnecting in ^COUNT..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:587
+#: qcsrc/common/notifications.qh:605
 msgid "^F2You picked up some extra lives"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:588
+#: qcsrc/common/notifications.qh:606
 #, c-format
 msgid "^K3You froze ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:589
+#: qcsrc/common/notifications.qh:607
 #, c-format
 msgid "^K1You were frozen by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:590
+#: qcsrc/common/notifications.qh:608
 #, c-format
 msgid "^K3You revived ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:591
+#: qcsrc/common/notifications.qh:609
 msgid "^K3You revived yourself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:592
+#: qcsrc/common/notifications.qh:610
 #, c-format
 msgid "^K3You were revived by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:593
+#: qcsrc/common/notifications.qh:611
 #, c-format
 msgid "^K3You were automatically revived after %s second(s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:596
+#: qcsrc/common/notifications.qh:614
 msgid "^K1You froze yourself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:597
+#: qcsrc/common/notifications.qh:615
 msgid "^K1Round already started, you spawn as frozen"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:604
+#: qcsrc/common/notifications.qh:622
 msgid ""
 "^K1No spawnpoints available!\n"
 "Hope your team can fix it..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:605
+#: qcsrc/common/notifications.qh:623
 msgid ""
 "^K1You may not join the game at this time.\n"
 "The player limit reached maximum capacity."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:608
+#: qcsrc/common/notifications.qh:626
 msgid "^BGKilling people while you don't have the ball gives no points!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:609
+#: qcsrc/common/notifications.qh:627
 msgid ""
 "^BGAll keys are in your team's hands!\n"
 "Help the key carriers to meet!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:610
+#: qcsrc/common/notifications.qh:628
 msgid ""
 "^BGAll keys are in ^TC^TT team^BG's hands!\n"
 "Interfere ^F4NOW^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:611
+#: qcsrc/common/notifications.qh:629
 msgid ""
 "^BGAll keys are in your team's hands!\n"
 "Meet the other key carriers ^F4NOW^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:612
+#: qcsrc/common/notifications.qh:630
 msgid "^F4Round will start in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:613
+#: qcsrc/common/notifications.qh:631
 msgid "^BGScanning frequency range..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:614
+#: qcsrc/common/notifications.qh:632
 msgid "^BGYou are starting with the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:615 qcsrc/common/notifications.qh:616
+#: qcsrc/common/notifications.qh:633 qcsrc/common/notifications.qh:634
 #, c-format
 msgid ""
 "^BGWaiting for players to join...\n"
 "Need active players for: %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:617
+#: qcsrc/common/notifications.qh:635
 #, c-format
 msgid "^BGWaiting for %s player(s) to join..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:618
+#: qcsrc/common/notifications.qh:636
 msgid "^F4^COUNT^BG left to find some ammo!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:619
+#: qcsrc/common/notifications.qh:637
 msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:619
+#: qcsrc/common/notifications.qh:637
 msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:620
+#: qcsrc/common/notifications.qh:638
 #, c-format
 msgid "^F2Extra lives remaining: ^K1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:621
+#: qcsrc/common/notifications.qh:639
 msgid "^BGSecondary fire inflicts no damage!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:622
+#: qcsrc/common/notifications.qh:640
 #, c-format
 msgid "^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:623
+#: qcsrc/common/notifications.qh:641
 #, c-format
 msgid ""
 "^F2^COUNT^BG until weapon change...\n"
 "Next weapon: ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:624
+#: qcsrc/common/notifications.qh:642
 #, c-format
 msgid "^F2Active weapon: ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:625
+#: qcsrc/common/notifications.qh:643
 msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:626
+#: qcsrc/common/notifications.qh:644
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "Keep fragging until we have a winner!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:626
+#: qcsrc/common/notifications.qh:644
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "Keep scoring until we have a winner!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:627
+#: qcsrc/common/notifications.qh:645
 #, c-format
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "^BGAdded ^F4%s^BG to the game!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:628
+#: qcsrc/common/notifications.qh:646
 msgid "^F2Invisibility has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:629
+#: qcsrc/common/notifications.qh:647
 msgid "^F2Shield has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:630
+#: qcsrc/common/notifications.qh:648
 msgid "^F2Speed has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:631
+#: qcsrc/common/notifications.qh:649
 msgid "^F2Strength has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:632
+#: qcsrc/common/notifications.qh:650
 msgid "^F2You are invisible"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:633
+#: qcsrc/common/notifications.qh:651
 msgid "^F2Shield surrounds you"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:634
+#: qcsrc/common/notifications.qh:652
 msgid "^F2You are on speed"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:635
+#: qcsrc/common/notifications.qh:653
 msgid "^F2Strength infuses your weapons with devastating power"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:636
+#: qcsrc/common/notifications.qh:654
 msgid "^F2The race is over, finish your lap!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:637
+#: qcsrc/common/notifications.qh:655
 msgid "^F2Superweapons have broken down"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:638
+#: qcsrc/common/notifications.qh:656
 msgid "^F2Superweapons have been lost"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:639
+#: qcsrc/common/notifications.qh:657
 msgid "^F2You now have a superweapon"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:640
+#: qcsrc/common/notifications.qh:658
 msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:641
+#: qcsrc/common/notifications.qh:659
 msgid "^K1Changing team in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:642
+#: qcsrc/common/notifications.qh:660
 msgid "^K1Spectating in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:643
+#: qcsrc/common/notifications.qh:661
 msgid "^K1Suicide in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:644
+#: qcsrc/common/notifications.qh:662
 msgid "^F4Timeout begins in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:645
+#: qcsrc/common/notifications.qh:663
 msgid "^F4Timeout ends in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:907 qcsrc/common/notifications.qh:908
+#: qcsrc/common/notifications.qh:937 qcsrc/common/notifications.qh:938
 #, c-format
 msgid " (near %s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:915 qcsrc/common/notifications.qh:916
+#: qcsrc/common/notifications.qh:945 qcsrc/common/notifications.qh:946
 msgid "primary"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:915 qcsrc/common/notifications.qh:916
+#: qcsrc/common/notifications.qh:945 qcsrc/common/notifications.qh:946
 msgid "secondary"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:926
+#: qcsrc/common/notifications.qh:956
 #, c-format
 msgid " ^F1(Press %s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:935
+#: qcsrc/common/notifications.qh:965
 #, c-format
 msgid " with %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 #, c-format
 msgid "%s^K1 made a TRIPLE FRAG! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 #, c-format
 msgid "%s^K1 made a TRIPLE SCORE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 msgid "TRIPLE FRAG! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 #, c-format
 msgid "%s^K1 made FIVE SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 #, c-format
 msgid "%s^K1 unlocked RAGE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 msgid "RAGE! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 #, c-format
 msgid "%s^K1 made TEN SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 #, c-format
 msgid "%s^K1 started a MASSACRE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 msgid "MASSACRE! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 #, c-format
 msgid "%s^K1 executed MAYHEM! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 #, c-format
 msgid "%s^K1 made FIFTEEN SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 msgid "MAYHEM! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 #, c-format
 msgid "%s^K1 is a BERSERKER! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 #, c-format
 msgid "%s^K1 made TWENTY SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 msgid "BERSERKER! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 #, c-format
 msgid "%s^K1 inflicts CARNAGE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 #, c-format
 msgid "%s^K1 made TWENTY FIVE SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 msgid "CARNAGE! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 #, c-format
 msgid "%s^K1 made THIRTY SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 #, c-format
 msgid "%s^K1 unleashes ARMAGEDDON! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 msgid "ARMAGEDDON! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:956
+#: qcsrc/common/notifications.qh:986
 #, c-format
 msgid "%s(^F1Bot^BG)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:958
+#: qcsrc/common/notifications.qh:988
 #, c-format
 msgid "%s(Ping ^F1%d^BG)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:964
+#: qcsrc/common/notifications.qh:994
 #, c-format
 msgid ""
 "\n"
 "(Health ^1%d^BG / Armor ^2%d^BG)%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:966
+#: qcsrc/common/notifications.qh:996
 #, c-format
 msgid ""
 "\n"
 "(^F4Dead^BG)%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1003 qcsrc/common/notifications.qh:1016
+#: qcsrc/common/notifications.qh:1033 qcsrc/common/notifications.qh:1046
 #, c-format
 msgid "%d score spree! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1015
+#: qcsrc/common/notifications.qh:1045
 #, c-format
 msgid "%d frag spree! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1028
+#: qcsrc/common/notifications.qh:1058
 msgid "First blood! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1028
+#: qcsrc/common/notifications.qh:1058
 msgid "First score! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1032
+#: qcsrc/common/notifications.qh:1062
 msgid "First casualty! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1032
+#: qcsrc/common/notifications.qh:1062
 msgid "First victim! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1073
+#: qcsrc/common/notifications.qh:1103
 #, c-format
 msgid "%s^K1 has %d frags in a row! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1074
+#: qcsrc/common/notifications.qh:1104
 #, c-format
 msgid "%s^K1 made %d scores in a row! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1092
+#: qcsrc/common/notifications.qh:1122
 #, c-format
 msgid "%s^K1 drew first blood! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1093
+#: qcsrc/common/notifications.qh:1123
 #, c-format
 msgid "%s^K1 got the first score! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1109
+#: qcsrc/common/notifications.qh:1139
 #, c-format
 msgid ", ending their %d frag spree"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1110
+#: qcsrc/common/notifications.qh:1140
 #, c-format
 msgid ", ending their %d score spree"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1124
+#: qcsrc/common/notifications.qh:1154
 #, c-format
 msgid ", losing their %d frag spree"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1125
+#: qcsrc/common/notifications.qh:1155
 #, c-format
 msgid ", losing their %d score spree"
 msgstr ""
@@ -3138,11 +3138,11 @@ msgstr "Item %d"
 msgid "%d (%s)"
 msgstr "%d (%s)"
 
-#: qcsrc/menu/item/textslider.c:29 qcsrc/menu/item/textslider.c:31
+#: qcsrc/menu/item/textslider.c:31 qcsrc/menu/item/textslider.c:33
 msgid "custom"
 msgstr "modificado"
 
-#: qcsrc/menu/menu.qc:56
+#: qcsrc/menu/menu.qc:59
 #, c-format
 msgid "^4MQC Build information: ^1%s\n"
 msgstr "^4MQC Informação da Build %s\n"
@@ -3189,7 +3189,7 @@ msgstr "Créditos"
 #: 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_sandboxtools.c:89
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:90
 #: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:77
 #: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:21
 msgid "OK"
@@ -3243,33 +3243,33 @@ msgstr "Guardar Definições"
 msgid "Ammo Panel"
 msgstr "Painel de munições"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:23
 msgid "Ammunition display:"
 msgstr "Mostrar munições:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:26
 msgid "Show only current ammo type"
 msgstr "Mostrar apenas o tipo de munição actual"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
 msgid "Align icon:"
 msgstr "Alinhar icones"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:36
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:28
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:40
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:28
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:40
-msgid "Left"
-msgstr "Esquerda"
-
 #: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:30
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:38
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:29
 #: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:41
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:29
 #: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:41
+msgid "Left"
+msgstr "Esquerda"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:42
 msgid "Right"
 msgstr "Direita"
 
@@ -3277,28 +3277,28 @@ msgstr "Direita"
 msgid "Centerprint"
 msgstr "Centro"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:24
 msgid "Message duration:"
 msgstr "Duração da mensagem:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:27
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:28
 msgid "Fade time:"
 msgstr "Desaparecimento de cada entrada:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:32
 msgid "Flip messages order"
 msgstr "Trocar ordem de notificações"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:34
 msgid "Text alignment:"
 msgstr "Alinhamento do Texto"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:38
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:51
 msgid "Center"
 msgstr "Centro"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:41
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:42
 msgid "Font scale:"
 msgstr "Tamanho de letra:"
 
@@ -3306,19 +3306,19 @@ msgstr "Tamanho de letra:"
 msgid "Chat Panel"
 msgstr "Painel de Conversa"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:23
 msgid "Chat entries:"
 msgstr "Entradas na Conversa:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:26
 msgid "Chat size:"
 msgstr "Tamanho da Conversa:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:30
 msgid "Chat lifetime:"
 msgstr "Tempo de vida da Conversa:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:34
 msgid "Chat beep sound"
 msgstr "Som de aviso de Conversa"
 
@@ -3326,11 +3326,11 @@ msgstr "Som de aviso de Conversa"
 msgid "Engine Info Panel"
 msgstr "Painel de Informação do Motor"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:23
 msgid "Engine info:"
 msgstr "Informação do Motor:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:26
 msgid "Use an averaging algorithm for fps"
 msgstr "Usar um algorítmo médio para os fps"
 
@@ -3338,36 +3338,36 @@ msgstr "Usar um algorítmo médio para os fps"
 msgid "Health/Armor Panel"
 msgstr "Painel Vida/Armadura"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:22
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:23
 msgid "Enable status bar"
 msgstr "Activar barra de estado"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:24
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:25
 msgid "Status bar alignment:"
 msgstr "Alinhar barra de estado:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:32
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:42
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:32
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:43
 msgid "Inward"
 msgstr "Para Dentro"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:34
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:43
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:34
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:44
 msgid "Outward"
 msgstr "Para Fora"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:37
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:38
 msgid "Icon alignment:"
 msgstr "Alinhamento dos Icones"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:46
 msgid "Flip health and armor positions"
 msgstr "Trocar posição da vida e armadura"
 
@@ -3375,11 +3375,11 @@ msgstr "Trocar posição da vida e armadura"
 msgid "Info Messages Panel"
 msgstr "Painel de Info de Mensagens"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:23
 msgid "Info messages:"
 msgstr "Informação de mensagens:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:26
 msgid "Flip align"
 msgstr "Trocar alinhamento"
 
@@ -3391,23 +3391,23 @@ msgstr "Painel dos Icones de Mod"
 msgid "Notification Panel"
 msgstr "Painel de Notificações"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:23
 msgid "Notifications:"
 msgstr "Notificações:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:26
 msgid "Also print notifications to the console"
 msgstr "Imprimir notificações na consola também"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:29
 msgid "Flip notify order"
 msgstr "Trocar ordem de notificações"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:32
 msgid "Entry lifetime:"
 msgstr "Tempo de vida de cada entrada:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:36
 msgid "Entry fadetime:"
 msgstr "Desaparecimento de cada entrada:"
 
@@ -3415,96 +3415,96 @@ msgstr "Desaparecimento de cada entrada:"
 msgid "Physics Panel"
 msgstr "Painel de Física"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:22
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:22
 msgid "Panel disabled"
 msgstr "Painel desactivado"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
 msgid "Panel enabled"
 msgstr "Painel activado"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
 msgid "Panel enabled even observing"
 msgstr "Painel activado quando espectador"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:26
 msgid "Panel enabled only in Race/CTS"
 msgstr "Painel activo apenas em jogos de Corrida/CTS"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:32
 msgid "Status bar"
 msgstr "Barra de estado"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:49
 msgid "Left align"
 msgstr "Alinhamento à esquerda"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:53
 msgid "Right align"
 msgstr "Alinhamento à direita"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
 msgid "Inward align"
 msgstr "Para Dentro"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:37
 msgid "Outward align"
 msgstr "Para Fora"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:41
 msgid "Flip speed/acceleration positions"
 msgstr "Trocar posição da velocidade e aceleração"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
 #: qcsrc/menu/xonotic/dialog_settings_misc.c:29
 msgid "Speed:"
 msgstr "Velocidade:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:46
 msgid "Include vertical speed"
 msgstr "Incluir velocidade vertical"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:56
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:57
 msgid "Speed unit:"
 msgstr "Unidade de velocidade:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:58
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
 msgid "qu/s"
 msgstr "qu/s"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
 msgid "m/s"
 msgstr "m/s"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
 msgid "km/h"
 msgstr "km/h"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
 msgid "mph"
 msgstr "mph"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:63
 msgid "knots"
 msgstr "nós"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:64
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:65
 msgid "Show"
 msgstr "Mostrar"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:67
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:68
 msgid "Top speed"
 msgstr "Velocidade Máxima:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:73
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
 msgid "Acceleration:"
 msgstr "Aceleração:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:75
 msgid "Include vertical acceleration"
 msgstr "Incluir aceleração vertical"
 
@@ -3512,7 +3512,7 @@ msgstr "Incluir aceleração vertical"
 msgid "Powerups Panel"
 msgstr "Painel de Powerups"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:46
 msgid "Flip strength and shield positions"
 msgstr "Trocar posição do escudo e da força"
 
@@ -3520,16 +3520,16 @@ msgstr "Trocar posição do escudo e da força"
 msgid "Pressed Keys Panel"
 msgstr "Painel das Teclas Pressionadas"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
 msgid "Panel enabled when spectating"
 msgstr "Painel activado quando espectador"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:24
 msgid "Panel always enabled"
 msgstr "Painel sempre activado"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:31
 msgid "Forced aspect:"
 msgstr "Forçar aspecto:"
 
@@ -3541,68 +3541,68 @@ msgstr "Painel do Cronómetro de Corrida"
 msgid "Radar Panel"
 msgstr "Painel do Radar"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
 msgid "Panel enabled in teamgames"
 msgstr "Painel activo em jogos de equipa"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:30
 msgid "Radar:"
 msgstr "Radar:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:32
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:43
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:82
+#: 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
 msgid "Alpha:"
 msgstr "Alfa:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:37
 msgid "Rotation:"
 msgstr "Rotação:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:39
 msgid "Forward"
 msgstr "Para a frente"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:40
 msgid "West"
 msgstr "Para oeste"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:41
 msgid "South"
 msgstr "Para sul"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:41
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:42
 msgid "East"
 msgstr "Para este"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:43
 msgid "North"
 msgstr "Para norte"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:46
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:47
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:63
 msgid "Scale:"
 msgstr "Escala:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:50
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:51
 msgid "Zoom mode:"
 msgstr "Modo de ampliação:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:52
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:53
 msgid "Zoomed in"
 msgstr "Ampliado"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:53
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:54
 msgid "Zoomed out"
 msgstr "Não-Ampliado"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:54
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:55
 msgid "Always zoomed"
 msgstr "Sempre ampliado"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:55
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:56
 msgid "Never zoomed"
 msgstr "Nunca ampliado"
 
@@ -3610,23 +3610,23 @@ msgstr "Nunca ampliado"
 msgid "Score Panel"
 msgstr "Painel de Pontos"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:23
 msgid "Score:"
 msgstr "Pontuação:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
 msgid "Rankings:"
 msgstr "Tabela Classficativa:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
 msgid "Off"
 msgstr "Desligado"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
 msgid "And me"
 msgstr "E eu"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:29
 msgid "Pure"
 msgstr "Puro"
 
@@ -3634,11 +3634,11 @@ msgstr "Puro"
 msgid "Timer Panel"
 msgstr "Painel Temporizador"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:23
 msgid "Timer:"
 msgstr "Temporizador:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:26
 msgid "Show elapsed time"
 msgstr "Mostrar tempo passado"
 
@@ -3646,7 +3646,7 @@ msgstr "Mostrar tempo passado"
 msgid "Vote Panel"
 msgstr "Painel de votos"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:23
 msgid "Alpha after voting:"
 msgstr "Alfa após votagem:"
 
@@ -3654,76 +3654,76 @@ msgstr "Alfa após votagem:"
 msgid "Weapons Panel"
 msgstr "Painel das Armas"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:25
 msgid "Fade out after:"
 msgstr "Desaparecer após:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:26
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:27
 msgid "Never"
 msgstr "Nunca"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:29
 #, c-format
 msgid "%ds"
 msgstr "%ds"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:32
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:33
 msgid "Fade effect:"
 msgstr "Efeito de desaparecimento"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
 msgid "EF^None"
 msgstr "Nenhum"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:37
 msgid "Alpha"
 msgstr "Alfa"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
 msgid "Slide"
 msgstr "Deslocador"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:39
 msgid "EF^Both"
 msgstr "Ambos"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:43
 msgid "Weapon icons:"
 msgstr "Icones das armas"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46
 msgid "Show only owned weapons"
 msgstr "Mostrar armas obtidas"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:48
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
 msgid "Show weapon ID as:"
 msgstr "Mostra o ID da arma como:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
 msgid "SHOWAS^None"
 msgstr "Nenhum"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
 msgid "Number"
 msgstr "Número"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:52
 msgid "Bind"
 msgstr "Ligar"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:54
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
 msgid "Show Accuracy"
 msgstr "Mostrar Pontaria"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:56
 msgid "Show Ammo"
 msgstr "Mostrar Munições"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:58
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:59
 msgid "Ammo bar color:"
 msgstr "Cor da barra de munições:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:64
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:65
 msgid "Ammo bar alpha:"
 msgstr "Cor da barra alfa:"
 
@@ -3731,85 +3731,85 @@ msgstr "Cor da barra alfa:"
 msgid "Panel HUD Setup"
 msgstr "Configuração do painel do HUD"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:21
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:22
 msgid "Panel background defaults:"
 msgstr "Fundo do painel por defeito:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:23 qcsrc/menu/xonotic/util.qc:683
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:24 qcsrc/menu/xonotic/util.qc:683
 msgid "Background:"
 msgstr "Fundo:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:25
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:37
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:52
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:686
+#: 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
 msgid "Disable"
 msgstr "Desactivar"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:30
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:691
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:31
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:78 qcsrc/menu/xonotic/util.qc:691
 msgid "Color:"
 msgstr "Cor:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:699
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:36 qcsrc/menu/xonotic/util.qc:699
 msgid "Border size:"
 msgstr "Tamanho do limite:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:50
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:89
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:51
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:90
 msgid "Team color:"
 msgstr "Cor da Equipa:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:725
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:59 qcsrc/menu/xonotic/util.qc:725
 msgid "Test team color in configure mode"
 msgstr "Testa cor da equipa no modo de configuração"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:728
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:62 qcsrc/menu/xonotic/util.qc:728
 msgid "Padding:"
 msgstr "Padding:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:68
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:69
 msgid "HUD Dock:"
 msgstr "Local do HUD:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:70
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71
 msgid "DOCK^Disabled"
 msgstr "Desligado"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72
 msgid "DOCK^Small"
 msgstr "Pequena"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73
 msgid "DOCK^Medium"
 msgstr "Média"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:74
 msgid "DOCK^Large"
 msgstr "Grande"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:96
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:97
 msgid "Grid settings:"
 msgstr "Definições da Rede:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:99
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:100
 msgid "Snap panels to grid"
 msgstr "Fixar paineis à Rede"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:102
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:103
 msgid "Grid size:"
 msgstr "Tamanho da Rede:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:103
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:104
 msgid "X:"
 msgstr "X:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:109
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:110
 msgid "Y:"
 msgstr "Y:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:117
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:118
 msgid "Exit setup"
 msgstr "Sair da configuração"
 
@@ -4394,7 +4394,7 @@ msgid "Key:"
 msgstr "Chave:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:61
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:19
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:20
 msgid "Model:"
 msgstr "Modelo:"
 
@@ -4769,127 +4769,127 @@ msgstr "Não"
 msgid "Sandbox Tools"
 msgstr "Ferramentas Sandbox"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:24
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:25
 msgid "Spawn"
 msgstr "Spawn"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:25
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:26
 msgid "Remove *"
 msgstr "Remover *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:27
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:28
 msgid "Copy *"
 msgstr "Copiar *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:28
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:29
 msgid "Paste"
 msgstr "Colar"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:30
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:31
 msgid "Bone:"
 msgstr "Osso:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:35
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:36
 msgid "Set * as child"
 msgstr "Por * como child"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:36
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:37
 msgid "Attach to *"
 msgstr "Juntar a *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:38
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:39
 msgid "Detach from *"
 msgstr "Separar de *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:41
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:42
 msgid "Visual object properties for *:"
 msgstr "Propriedades de objecto visual para *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:43
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:44
 msgid "Set skin:"
 msgstr "Skin:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:45
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:46
 msgid "Set alpha:"
 msgstr "Definir alfa:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:48
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:49
 msgid "Set color main:"
 msgstr "Cor Principal:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:50
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:51
 msgid "Set color glow:"
 msgstr "Cor - Brilho:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:54
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:55
 msgid "Set frame:"
 msgstr "Por moldura:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:58
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:59
 msgid "Physical object properties for *:"
 msgstr "Propriedades de objecto fisico *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:60
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:61
 msgid "Set material:"
 msgstr "Definir material:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:66
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:67
 msgid "Set solidity:"
 msgstr "Definir Solidez:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:67
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:68
 msgid "Non-solid"
 msgstr "Não sólido"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:68
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:69
 msgid "Solid"
 msgstr "Sólido"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:69
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:70
 msgid "Set physics:"
 msgstr "Definir física:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:70
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:71
 msgid "Static"
 msgstr "Estática"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:71
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:72
 msgid "Movable"
 msgstr "Movível"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:72
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:73
 msgid "Physical"
 msgstr "Físico"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:74
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:75
 msgid "Set scale:"
 msgstr "Escala:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:76
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:77
 msgid "Set force:"
 msgstr "Definir força:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:80
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:81
 msgid "Claim *"
 msgstr "Resgatar*"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:82
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:83
 msgid "* object info"
 msgstr "Informações de objecto *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:83
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:84
 msgid "* mesh info"
 msgstr "Informações de mesh *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:84
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:85
 msgid "* attachment info"
 msgstr "Informações de extras *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:85
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:86
 msgid "Show help"
 msgstr "Mostrar ajuda"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:86
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:87
 msgid "* is the object you are facing"
 msgstr "* é o objecto para o qual está virado"
 
@@ -5886,27 +5886,27 @@ msgstr "Vencedor"
 msgid "Team Selection"
 msgstr "Selecção de Equipa"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:41
+#: qcsrc/menu/xonotic/dialog_teamselect.c:42
 msgid "join 'best' team (auto-select)"
 msgstr "juntar 'melhor' equipa (selecção automática)"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:45
+#: qcsrc/menu/xonotic/dialog_teamselect.c:46
 msgid "red"
 msgstr "vermelha"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:46
+#: qcsrc/menu/xonotic/dialog_teamselect.c:47
 msgid "blue"
 msgstr "azul"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:47
+#: qcsrc/menu/xonotic/dialog_teamselect.c:48
 msgid "yellow"
 msgstr "amarela"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:48
+#: qcsrc/menu/xonotic/dialog_teamselect.c:49
 msgid "pink"
 msgstr "rosa"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:51
+#: qcsrc/menu/xonotic/dialog_teamselect.c:52
 msgid "spectate"
 msgstr "espectador"
 
@@ -6006,7 +6006,12 @@ msgstr ""
 msgid "%s dB"
 msgstr "%s dB"
 
-#: qcsrc/menu/xonotic/slider_resolution.c:72
+#: qcsrc/menu/xonotic/slider_resolution.c:103
+#, c-format
+msgid "%dx%d (%d:%d)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_resolution.c:106
 #, c-format
 msgid "%dx%d"
 msgstr "%dx%d"
index ebaeea49dce990cb5bef56a3a25a955232804595..5842a38dbaf634ea3ba8250ef173cd52c5c14e8f 100644 (file)
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Xonotic\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-09-13 10:31+0200\n"
-"PO-Revision-Date: 2013-09-13 08:33+0000\n"
+"POT-Creation-Date: 2013-10-03 11:55+0200\n"
+"PO-Revision-Date: 2013-10-03 10:08+0000\n"
 "Last-Translator: divVerent <divVerent@xonotic.org>\n"
 "Language-Team: Romanian (http://www.transifex.com/projects/p/xonotic/"
 "language/ro/)\n"
@@ -1232,7 +1232,7 @@ msgstr ""
 msgid "@!#%'n Tuba Throwing"
 msgstr "Arunca @!#%'n Tuba"
 
-#: qcsrc/common/mapinfo.qc:1105 qcsrc/menu/xonotic/skinlist.c:166
+#: qcsrc/common/mapinfo.qc:1109 qcsrc/menu/xonotic/skinlist.c:166
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
@@ -1306,1773 +1306,1773 @@ msgstr ""
 msgid "^7%s (^3%d sec left)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:330
+#: qcsrc/common/notifications.qh:342
 #, c-format
 msgid "^BG%s^BG captured the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:331
+#: qcsrc/common/notifications.qh:343
 #, c-format
 msgid ""
 "^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
 "%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:332
+#: qcsrc/common/notifications.qh:344
 #, c-format
 msgid "^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:333
+#: qcsrc/common/notifications.qh:345
 #, c-format
 msgid ""
 "^BG%s^BG captured the ^TC^TT^BG flag in ^F2%s^BG seconds, failing to break "
 "^BG%s^BG's previous record of ^F1%s^BG seconds"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:334
+#: qcsrc/common/notifications.qh:346
 msgid "^BGThe ^TC^TT^BG flag was returned to base by its owner"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:335
+#: qcsrc/common/notifications.qh:347
 msgid "^BGThe ^TC^TT^BG flag was destroyed and returned to base"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:336
+#: qcsrc/common/notifications.qh:348
 msgid "^BGThe ^TC^TT^BG flag was dropped in the base and returned itself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:337
+#: qcsrc/common/notifications.qh:349
 msgid ""
 "^BGThe ^TC^TT^BG flag fell somewhere it couldn't be reached and returned to "
 "base"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:338
+#: qcsrc/common/notifications.qh:350
 #, c-format
 msgid ""
 "^BGThe ^TC^TT^BG flag became impatient after ^F1%.2f^BG seconds and returned "
 "itself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:339
+#: qcsrc/common/notifications.qh:351
 msgid "^BGThe ^TC^TT^BG flag has returned to the base"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:340
+#: qcsrc/common/notifications.qh:352
 #, c-format
 msgid "^BG%s^BG lost the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:341
+#: qcsrc/common/notifications.qh:353
 #, c-format
 msgid "^BG%s^BG got the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:342
+#: qcsrc/common/notifications.qh:354
 #, c-format
 msgid "^BG%s^BG returned the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:343
+#: qcsrc/common/notifications.qh:355
 #, c-format
 msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:344
+#: qcsrc/common/notifications.qh:356
 #, c-format
 msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:345
+#: qcsrc/common/notifications.qh:357
 #, c-format
 msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:346
+#: qcsrc/common/notifications.qh:358
 #, c-format
 msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:346
+#: qcsrc/common/notifications.qh:358
 #, c-format
 msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:347
+#: qcsrc/common/notifications.qh:359
 #, c-format
 msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:348
+#: qcsrc/common/notifications.qh:360
 #, c-format
 msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:349
+#: qcsrc/common/notifications.qh:361
 #, c-format
 msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:350
+#: qcsrc/common/notifications.qh:362
 #, c-format
 msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:351
+#: qcsrc/common/notifications.qh:363
 #, c-format
 msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:352
+#: qcsrc/common/notifications.qh:364
 #, c-format
 msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:352
+#: qcsrc/common/notifications.qh:364
 #, c-format
 msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:353
+#: qcsrc/common/notifications.qh:365
 #, c-format
 msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:354
+#: qcsrc/common/notifications.qh:366
 #, c-format
 msgid ""
 "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:355
+#: qcsrc/common/notifications.qh:367
 #, c-format
 msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:356
+#: qcsrc/common/notifications.qh:368
 #, c-format
 msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:357
+#: qcsrc/common/notifications.qh:369
 #, c-format
 msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:358
+#: qcsrc/common/notifications.qh:370
 #, c-format
 msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:359
+#: qcsrc/common/notifications.qh:371
 #, c-format
 msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:360
+#: qcsrc/common/notifications.qh:372
 #, c-format
 msgid ""
 "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:361
+#: qcsrc/common/notifications.qh:373
 #, c-format
 msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:362
+#: qcsrc/common/notifications.qh:374
 #, c-format
 msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:363
+#: qcsrc/common/notifications.qh:375
 #, c-format
 msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:364
+#: qcsrc/common/notifications.qh:376
 #, c-format
 msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:365
+#: qcsrc/common/notifications.qh:377
 #, c-format
 msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:366
+#: qcsrc/common/notifications.qh:378
 #, c-format
 msgid "^BG%s%s^K1 was thrown into a world of hurt by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:367
+#: qcsrc/common/notifications.qh:379
 #, c-format
 msgid "^BG%s^K1 was moved into the %s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:368
+#: qcsrc/common/notifications.qh:380
 #, c-format
 msgid "^BG%s^K1 became enemies with the Lord of Teamplay%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:369
+#: qcsrc/common/notifications.qh:381
 #, c-format
 msgid "^BG%s^K1 thought they found a nice camping ground%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:370
+#: qcsrc/common/notifications.qh:382
 #, c-format
 msgid "^BG%s^K1 unfairly eliminated themself%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:371
+#: qcsrc/common/notifications.qh:383
 #, c-format
 msgid "^BG%s^K1 %s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:372
+#: qcsrc/common/notifications.qh:384
 #, c-format
 msgid "^BG%s^K1 couldn't catch their breath%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:372
+#: qcsrc/common/notifications.qh:384
 #, c-format
 msgid "^BG%s^K1 was in the water for too long%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:373
+#: qcsrc/common/notifications.qh:385
 #, c-format
 msgid "^BG%s^K1 hit the ground with a bit too much force%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:373
+#: qcsrc/common/notifications.qh:385
 #, c-format
 msgid "^BG%s^K1 hit the ground with a crunch%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:374
+#: qcsrc/common/notifications.qh:386
 #, c-format
 msgid "^BG%s^K1 became a bit too crispy%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:374
+#: qcsrc/common/notifications.qh:386
 #, c-format
 msgid "^BG%s^K1 felt a little hot%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:375
+#: qcsrc/common/notifications.qh:387
 #, c-format
 msgid "^BG%s^K1 died%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:376
+#: qcsrc/common/notifications.qh:388
 #, c-format
 msgid "^BG%s^K1 found a hot place%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:376
+#: qcsrc/common/notifications.qh:388
 #, c-format
 msgid "^BG%s^K1 turned into hot slag%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:377
+#: qcsrc/common/notifications.qh:389
 #, c-format
 msgid "^BG%s^K1 mastered the art of self-nading%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:378
+#: qcsrc/common/notifications.qh:390
 #, c-format
 msgid "^BG%s^K1 died%s%s. What's the point of living without ammo?"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:378
+#: qcsrc/common/notifications.qh:390
 #, c-format
 msgid "^BG%s^K1 ran out of ammo%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:379
+#: qcsrc/common/notifications.qh:391
 #, c-format
 msgid "^BG%s^K1 rotted away%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:380
+#: qcsrc/common/notifications.qh:392
 #, c-format
 msgid "^BG%s^K1 became a shooting star%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:393
 #, c-format
 msgid "^BG%s^K1 was slimed%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:394
 #, c-format
 msgid "^BG%s^K1 couldn't take it anymore%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:395
 #, c-format
 msgid "^BG%s^K1 is now preserved for centuries to come%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:396
 #, c-format
 msgid "^BG%s^K1 switched to the %s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:397
 #, c-format
 msgid "^BG%s^K1 died in an accident%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:398
 #, c-format
 msgid "^BG%s^K1 ran into a turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:399
 #, c-format
 msgid "^BG%s^K1 was blasted away by an eWheel turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:400
 #, c-format
 msgid "^BG%s^K1 got caught up in the FLAC turret fire%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:401
 #, c-format
 msgid "^BG%s^K1 was blasted away by a Hellion turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:402
 #, c-format
 msgid "^BG%s^K1 could not hide from the Hunter turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:403
 #, c-format
 msgid "^BG%s^K1 was riddled full of holes by a Machinegun turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:404
 #, c-format
 msgid "^BG%s^K1 got turned into smoldering gibs by an MLRS turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:405
 #, c-format
 msgid "^BG%s^K1 was phased out by a turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:406
 #, c-format
 msgid "^BG%s^K1 got served some superheated plasma from a turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:407
 #, c-format
 msgid "^BG%s^K1 was electrocuted by a Tesla turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:408
 #, c-format
 msgid "^BG%s^K1 got served a lead enrichment by a Walker turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:409
 #, c-format
 msgid "^BG%s^K1 was impaled by a Walker turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:410
 #, c-format
 msgid "^BG%s^K1 was blasted away by a Walker turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:411
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Bumblebee explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:412
 #, c-format
 msgid "^BG%s^K1 was crushed by a vehicle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:401
+#: qcsrc/common/notifications.qh:413
 #, c-format
 msgid "^BG%s^K1 was caught in a Raptor cluster bomb%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:402
+#: qcsrc/common/notifications.qh:414
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Raptor explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:403
+#: qcsrc/common/notifications.qh:415
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Spiderbot explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:404
+#: qcsrc/common/notifications.qh:416
 #, c-format
 msgid "^BG%s^K1 was blasted to bits by a Spiderbot rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:405
+#: qcsrc/common/notifications.qh:417
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Racer explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:406
+#: qcsrc/common/notifications.qh:418
 #, c-format
 msgid "^BG%s^K1 couldn't find shelter from a Racer rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:407
+#: qcsrc/common/notifications.qh:419
 #, c-format
 msgid "^BG%s^K1 was in the wrong place%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:408
+#: qcsrc/common/notifications.qh:420
 #, c-format
 msgid "^BG%s^K1 was betrayed by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:409
+#: qcsrc/common/notifications.qh:421
 #, c-format
 msgid "^BG%s^K1 was frozen by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:410
+#: qcsrc/common/notifications.qh:422
 #, c-format
 msgid "^BG%s^K3 was revived by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:411
+#: qcsrc/common/notifications.qh:423
 #, c-format
 msgid "^BG%s^K3 was revived by falling"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:412
+#: qcsrc/common/notifications.qh:424
 #, c-format
 msgid "^BG%s^K3 was automatically revived after %s second(s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:413 qcsrc/common/notifications.qh:594
+#: qcsrc/common/notifications.qh:425 qcsrc/common/notifications.qh:612
 msgid "^TC^TT^BG team wins the round"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:414 qcsrc/common/notifications.qh:595
+#: qcsrc/common/notifications.qh:426 qcsrc/common/notifications.qh:613
 #, c-format
 msgid "^BG%s^BG wins the round"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:415 qcsrc/common/notifications.qh:524
+#: qcsrc/common/notifications.qh:427 qcsrc/common/notifications.qh:542
 msgid "^BGRound tied"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:416 qcsrc/common/notifications.qh:525
+#: qcsrc/common/notifications.qh:428 qcsrc/common/notifications.qh:543
 msgid "^BGRound over, there's no winner"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:417
+#: qcsrc/common/notifications.qh:429
 #, c-format
 msgid "^BG%s^K1 froze themself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:418
+#: qcsrc/common/notifications.qh:430
 #, c-format
 msgid "^BGGodmode saved you %s units of damage, cheater!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:419 qcsrc/common/notifications.qh:598
+#: qcsrc/common/notifications.qh:431 qcsrc/common/notifications.qh:616
 #, c-format
 msgid "^BGYou do not have the ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:420 qcsrc/common/notifications.qh:599
+#: qcsrc/common/notifications.qh:432 qcsrc/common/notifications.qh:617
 #, c-format
 msgid "^BGYou dropped the ^F1%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:421 qcsrc/common/notifications.qh:600
+#: qcsrc/common/notifications.qh:433 qcsrc/common/notifications.qh:618
 #, c-format
 msgid "^BGYou got the ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:422 qcsrc/common/notifications.qh:601
+#: qcsrc/common/notifications.qh:434 qcsrc/common/notifications.qh:619
 #, c-format
 msgid "^BGYou don't have enough ammo for the ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:423 qcsrc/common/notifications.qh:602
+#: qcsrc/common/notifications.qh:435 qcsrc/common/notifications.qh:620
 #, c-format
 msgid "^F1%s %s^BG is unable to fire, but its ^F1%s^BG can"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:424 qcsrc/common/notifications.qh:603
+#: qcsrc/common/notifications.qh:436 qcsrc/common/notifications.qh:621
 #, c-format
 msgid "^F1%s^BG is ^F4not available^BG on this map"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:425
+#: qcsrc/common/notifications.qh:437
 #, c-format
 msgid "^BG%s^F3 connected%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:426
+#: qcsrc/common/notifications.qh:438
 #, c-format
 msgid "^BG%s^F3 connected and joined the ^TC^TT team"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:427
+#: qcsrc/common/notifications.qh:439
 #, c-format
 msgid "^BG%s^F3 is now playing"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:428 qcsrc/common/notifications.qh:606
+#: qcsrc/common/notifications.qh:440 qcsrc/common/notifications.qh:624
 #, c-format
 msgid "^BG%s^BG has dropped the ball!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:429 qcsrc/common/notifications.qh:607
+#: qcsrc/common/notifications.qh:441 qcsrc/common/notifications.qh:625
 #, c-format
 msgid "^BG%s^BG has picked up the ball!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:430
+#: qcsrc/common/notifications.qh:442
 #, c-format
 msgid "^BG%s^BG captured the keys for the ^TC^TT team"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:431
+#: qcsrc/common/notifications.qh:443
 #, c-format
 msgid "^BG%s^BG dropped the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:432
+#: qcsrc/common/notifications.qh:444
 #, c-format
 msgid "^BG%s^BG lost the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:433
+#: qcsrc/common/notifications.qh:445
 #, c-format
 msgid "^BG%s^BG picked up the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:434
+#: qcsrc/common/notifications.qh:446
 #, c-format
 msgid "^BG%s^F3 forfeited"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:435
+#: qcsrc/common/notifications.qh:447
 #, c-format
 msgid "^BG%s^F3 has no more lives left"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:436
+#: qcsrc/common/notifications.qh:448
 #, c-format
 msgid "^BG%s^K1 picked up Invisibility"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:437
+#: qcsrc/common/notifications.qh:449
 #, c-format
 msgid "^BG%s^K1 picked up Shield"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:438
+#: qcsrc/common/notifications.qh:450
 #, c-format
 msgid "^BG%s^K1 picked up Speed"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:439
+#: qcsrc/common/notifications.qh:451
 #, c-format
 msgid "^BG%s^K1 picked up Strength"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:440
+#: qcsrc/common/notifications.qh:452
 #, c-format
 msgid "^BG%s^F3 disconnected"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:441
+#: qcsrc/common/notifications.qh:453
 #, c-format
 msgid "^BG%s^F3 was kicked for idling"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:442
+#: qcsrc/common/notifications.qh:454
 msgid ""
 "^F2You were kicked from the server because you are a spectator and "
 "spectators aren't allowed at the moment."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:443
+#: qcsrc/common/notifications.qh:455
 #, c-format
 msgid "^BG%s^F3 is now spectating"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:444
+#: qcsrc/common/notifications.qh:456
 #, c-format
 msgid "^BG%s^BG has abandoned the race"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:445
+#: qcsrc/common/notifications.qh:457
 #, c-format
 msgid "^BG%s^BG couldn't break their %s%s^BG place record of %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:446
+#: qcsrc/common/notifications.qh:458
 #, c-format
 msgid "^BG%s^BG couldn't break the %s%s^BG place record of %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:447
+#: qcsrc/common/notifications.qh:459
 #, c-format
 msgid "^BG%s^BG has finished the race"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:448
+#: qcsrc/common/notifications.qh:460
 #, c-format
 msgid "^BG%s^BG broke %s^BG's %s%s^BG place record with %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:449
+#: qcsrc/common/notifications.qh:461
 #, c-format
 msgid "^BG%s^BG improved their %s%s^BG place record with %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:450
+#: qcsrc/common/notifications.qh:462
 #, c-format
 msgid ""
 "^BG%s^BG scored a new record with ^F2%s^BG, but unfortunately lacks a UID "
 "and will be lost."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:451
+#: qcsrc/common/notifications.qh:463
 #, c-format
 msgid "^BG%s^BG set the %s%s^BG place record with %s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:452
+#: qcsrc/common/notifications.qh:464
 msgid "^TC^TT ^BGteam scores!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:453
+#: qcsrc/common/notifications.qh:465
 #, 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 ""
 
-#: qcsrc/common/notifications.qh:454
+#: qcsrc/common/notifications.qh:466
 #, c-format
 msgid "^BG%s^K1 picked up a Superweapon"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:455
+#: qcsrc/common/notifications.qh:467
 #, c-format
 msgid ""
 "^F4NOTE: ^BGThe server is running ^F1Xonotic %s (beta)^BG, you have "
 "^F2Xonotic %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:456
+#: qcsrc/common/notifications.qh:468
 #, c-format
 msgid ""
 "^F4NOTE: ^BGThe server is running ^F1Xonotic %s^BG, you have ^F2Xonotic %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:457
+#: qcsrc/common/notifications.qh:469
 #, c-format
 msgid ""
 "^F4NOTE: ^F1Xonotic %s^BG is out, and you still have ^F2Xonotic %s^BG - get "
 "the update from ^F3http://www.xonotic.org/^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:458
+#: qcsrc/common/notifications.qh:470
 #, c-format
 msgid "^F3SVQC Build information: ^F4%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:459
+#: qcsrc/common/notifications.qh:471
 #, c-format
 msgid ""
 "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Accordeon%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:460
+#: qcsrc/common/notifications.qh:472
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Accordeon%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:461
+#: qcsrc/common/notifications.qh:473
 #, c-format
 msgid "^BG%s%s^K1 felt the strong pull of ^BG%s^K1's Crylink%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:462
+#: qcsrc/common/notifications.qh:474
 #, c-format
 msgid "^BG%s^K1 felt the strong pull of their Crylink%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:463
+#: qcsrc/common/notifications.qh:475
 #, c-format
 msgid "^BG%s%s^K1 was blasted by ^BG%s^K1's Electro bolt%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:464
+#: qcsrc/common/notifications.qh:476
 #, c-format
 msgid "^BG%s%s^K1 felt the electrifying air of ^BG%s^K1's Electro combo%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:465
+#: qcsrc/common/notifications.qh:477
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Electro plasma%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:466
+#: qcsrc/common/notifications.qh:478
 #, c-format
 msgid "^BG%s^K1 played with Electro plasma%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:467
+#: qcsrc/common/notifications.qh:479
 #, c-format
 msgid "^BG%s^K1 could not remember where they put their Electro plasma%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:468
+#: qcsrc/common/notifications.qh:480
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's fireball%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:469
+#: qcsrc/common/notifications.qh:481
 #, c-format
 msgid "^BG%s%s^K1 got burnt by ^BG%s^K1's firemine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:470
+#: qcsrc/common/notifications.qh:482
 #, c-format
 msgid "^BG%s^K1 should have used a smaller gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:471
+#: qcsrc/common/notifications.qh:483
 #, c-format
 msgid "^BG%s^K1 forgot about their firemine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:472
+#: qcsrc/common/notifications.qh:484
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by a burst of ^BG%s^K1's Hagar rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:473
+#: qcsrc/common/notifications.qh:485
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Hagar rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:474
+#: qcsrc/common/notifications.qh:486
 #, c-format
 msgid "^BG%s^K1 played with tiny Hagar rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:475
+#: qcsrc/common/notifications.qh:487
 #, c-format
 msgid "^BG%s%s^K1 was cut down with ^BG%s^K1's HLAC%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:476
+#: qcsrc/common/notifications.qh:488
 #, c-format
 msgid "^BG%s^K1 got a little jumpy with their HLAC%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:477
+#: qcsrc/common/notifications.qh:489
 #, c-format
 msgid "^BG%s%s^K1 was caught in ^BG%s^K1's Hook gravity bomb%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:478
+#: qcsrc/common/notifications.qh:490
 #, c-format
 msgid ""
 "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Klein Bottle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:479
+#: qcsrc/common/notifications.qh:491
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Klein Bottle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:480
+#: qcsrc/common/notifications.qh:492
 #, c-format
 msgid "^BG%s%s^K1 was shot to death by ^BG%s^K1's Laser%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:481
+#: qcsrc/common/notifications.qh:493
 #, c-format
 msgid "^BG%s^K1 shot themself to hell with their Laser%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:482
+#: qcsrc/common/notifications.qh:494
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's mine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:483
+#: qcsrc/common/notifications.qh:495
 #, c-format
 msgid "^BG%s^K1 forgot about their mine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:484
+#: qcsrc/common/notifications.qh:496
 #, c-format
 msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Minstanex%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:485
+#: qcsrc/common/notifications.qh:497
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Mortar grenade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:486
+#: qcsrc/common/notifications.qh:498
 #, c-format
 msgid "^BG%s%s^K1 ate ^BG%s^K1's Mortar grenade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:487
+#: qcsrc/common/notifications.qh:499
 #, c-format
 msgid "^BG%s^K1 didn't see their own Mortar grenade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:488
+#: qcsrc/common/notifications.qh:500
 #, c-format
 msgid "^BG%s^K1 blew themself up with their own Mortar%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:489
+#: qcsrc/common/notifications.qh:501
 #, c-format
 msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Nex%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:490
+#: qcsrc/common/notifications.qh:502
 #, c-format
 msgid "^BG%s%s^K1 was sniped with a Rifle by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:491
+#: qcsrc/common/notifications.qh:503
 #, c-format
 msgid "^BG%s%s^K1 died in ^BG%s^K1's Rifle bullet hail%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:492
+#: qcsrc/common/notifications.qh:504
 #, c-format
 msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle bullet hail%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:493
+#: qcsrc/common/notifications.qh:505
 #, c-format
 msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:494
+#: qcsrc/common/notifications.qh:506
 #, c-format
 msgid "^BG%s%s^K1 ate ^BG%s^K1's rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:495
+#: qcsrc/common/notifications.qh:507
 #, c-format
 msgid "^BG%s%s^K1 got too close ^BG%s^K1's rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:496
+#: qcsrc/common/notifications.qh:508
 #, c-format
 msgid "^BG%s^K1 blew themself up with their Rocketlauncher%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:497
+#: qcsrc/common/notifications.qh:509
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Seeker rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:498
+#: qcsrc/common/notifications.qh:510
 #, c-format
 msgid "^BG%s%s^K1 was tagged by ^BG%s^K1's Seeker%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:499
+#: qcsrc/common/notifications.qh:511
 #, c-format
 msgid "^BG%s^K1 played with tiny Seeker rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:500
+#: qcsrc/common/notifications.qh:512
 #, c-format
 msgid "^BG%s%s^K1 was gunned down by ^BG%s^K1's Shotgun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:501
+#: qcsrc/common/notifications.qh:513
 #, c-format
 msgid "^BG%s%s^K1 slapped ^BG%s^K1 around a bit with a large Shotgun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:502
+#: qcsrc/common/notifications.qh:514
 #, c-format
 msgid "^BG%s^K1 is now thinking with portals%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:503
+#: qcsrc/common/notifications.qh:515
 #, c-format
 msgid "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Tuba%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:504
+#: qcsrc/common/notifications.qh:516
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Tuba%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:505
+#: qcsrc/common/notifications.qh:517
 #, c-format
 msgid "^BG%s%s^K1 was sniped by ^BG%s^K1's Machine Gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:506
+#: qcsrc/common/notifications.qh:518
 #, c-format
 msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:518
+#: qcsrc/common/notifications.qh:536
 msgid "^BGYou are attacking!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:519
+#: qcsrc/common/notifications.qh:537
 msgid "^BGYou are defending!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:520
+#: qcsrc/common/notifications.qh:538
 msgid "^F4Begin!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:521
+#: qcsrc/common/notifications.qh:539
 msgid "^F4Game starts in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:522
+#: qcsrc/common/notifications.qh:540
 msgid "^F4Round starts in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:523
+#: qcsrc/common/notifications.qh:541
 msgid "^F4Round cannot start"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:526
+#: qcsrc/common/notifications.qh:544
 msgid "^F2Don't camp!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:527
+#: qcsrc/common/notifications.qh:545
 msgid ""
 "^BGYou are now free.\n"
 "^BGFeel free to ^F2try to capture^BG the flag again\n"
 "^BGif you think you will succeed."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:528
+#: qcsrc/common/notifications.qh:546
 msgid ""
 "^BGYou are now ^F1shielded^BG from the flag\n"
 "^BGfor ^F2too many unsuccessful attempts^BG to capture.\n"
 "^BGMake some defensive scores before trying again."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:529
+#: qcsrc/common/notifications.qh:547
 msgid "^BGYou captured the ^TC^TT^BG flag!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:530
+#: qcsrc/common/notifications.qh:548
 #, c-format
 msgid "^BGToo many flag throws! Throwing disabled for %s."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:531
+#: qcsrc/common/notifications.qh:549
 #, c-format
 msgid "^BG%s^BG passed the ^TC^TT^BG flag to %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:532
+#: qcsrc/common/notifications.qh:550
 #, c-format
 msgid "^BGYou received the ^TC^TT^BG flag from %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:533
+#: qcsrc/common/notifications.qh:551
 #, c-format
 msgid "^BG%s^BG requests you to pass the flag%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:534
+#: qcsrc/common/notifications.qh:552
 #, c-format
 msgid "^BGRequesting %s^BG to pass you the flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:535
+#: qcsrc/common/notifications.qh:553
 #, c-format
 msgid "^BGYou passed the ^TC^TT^BG flag to %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:536
+#: qcsrc/common/notifications.qh:554
 msgid "^BGYou got the ^TC^TT^BG flag!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:537
+#: qcsrc/common/notifications.qh:555
 #, c-format
 msgid "^BGThe %senemy^BG got your flag! Retrieve it!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:538
+#: qcsrc/common/notifications.qh:556
 #, c-format
 msgid "^BGThe %senemy (^BG%s%s)^BG got your flag! Retrieve it!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:539
+#: qcsrc/common/notifications.qh:557
 #, c-format
 msgid "^BGYour %steam mate^BG got the flag! Protect them!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:540
+#: qcsrc/common/notifications.qh:558
 #, c-format
 msgid "^BGYour %steam mate (^BG%s%s)^BG got the flag! Protect them!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:541
+#: qcsrc/common/notifications.qh:559
 msgid "^BGYou returned the ^TC^TT^BG flag!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:542
+#: qcsrc/common/notifications.qh:560
 msgid "^BGStalemate! Enemies can now see you on radar!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:543
+#: qcsrc/common/notifications.qh:561
 msgid "^BGStalemate! Flag carriers can now be seen by enemies on radar!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:544
+#: qcsrc/common/notifications.qh:562
 #, c-format
 msgid "^K3%sYou fragged ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:544
+#: qcsrc/common/notifications.qh:562
 #, c-format
 msgid "^K3%sYou scored against ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:545
+#: qcsrc/common/notifications.qh:563
 #, c-format
 msgid "^K1%sYou were fragged by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:545
+#: qcsrc/common/notifications.qh:563
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:546
+#: qcsrc/common/notifications.qh:564
 #, c-format
 msgid "^K1%sYou were fragged by ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:546
+#: qcsrc/common/notifications.qh:564
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:547
+#: qcsrc/common/notifications.qh:565
 #, c-format
 msgid "^K3%sYou fragged ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:547
+#: qcsrc/common/notifications.qh:565
 #, c-format
 msgid "^K3%sYou scored against ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:548
+#: qcsrc/common/notifications.qh:566
 #, c-format
 msgid "^K1%sYou scored against ^BG%s^K1 while they were typing"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:548
+#: qcsrc/common/notifications.qh:566
 #, c-format
 msgid "^K1%sYou typefragged ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:549
+#: qcsrc/common/notifications.qh:567
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^K1 while typing!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:549
+#: qcsrc/common/notifications.qh:567
 #, c-format
 msgid "^K1%sYou were typefragged by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:550
+#: qcsrc/common/notifications.qh:568
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^K1 while typing^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:550
+#: qcsrc/common/notifications.qh:568
 #, c-format
 msgid "^K1%sYou were typefragged by ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:551
+#: qcsrc/common/notifications.qh:569
 #, c-format
 msgid "^K1%sYou scored against ^BG%s^K1 while they were typing^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:551
+#: qcsrc/common/notifications.qh:569
 #, c-format
 msgid "^K1%sYou typefragged ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:552
+#: qcsrc/common/notifications.qh:570
 msgid "^BGPress ^F2DROPWEAPON^BG again to toss the nade!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:553
+#: qcsrc/common/notifications.qh:571
 #, c-format
 msgid ""
 "^BGYou have been moved into a different team\n"
 "You are now on: %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:554
+#: qcsrc/common/notifications.qh:572
 msgid "^K1Don't go against your team mates!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:554
+#: qcsrc/common/notifications.qh:572
 msgid "^K1Don't shoot your team mates!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:555
+#: qcsrc/common/notifications.qh:573
 msgid "^K1Die camper!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:555
+#: qcsrc/common/notifications.qh:573
 msgid "^K1Reconsider your tactics, camper!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:556
+#: qcsrc/common/notifications.qh:574
 msgid "^K1You unfairly eliminated yourself!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:557
+#: qcsrc/common/notifications.qh:575
 #, c-format
 msgid "^K1You were %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:558
+#: qcsrc/common/notifications.qh:576
 msgid "^K1You couldn't catch your breath!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:559
+#: qcsrc/common/notifications.qh:577
 msgid "^K1You hit the ground with a crunch!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:560
+#: qcsrc/common/notifications.qh:578
 msgid "^K1You felt a little too hot!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:560
+#: qcsrc/common/notifications.qh:578
 msgid "^K1You got a little bit too crispy!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:561
+#: qcsrc/common/notifications.qh:579
 msgid "^K1You killed your own dumb self!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:561
+#: qcsrc/common/notifications.qh:579
 msgid "^K1You need to be more careful!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:562
+#: qcsrc/common/notifications.qh:580
 msgid "^K1You couldn't stand the heat!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:563
+#: qcsrc/common/notifications.qh:581
 msgid "^K1Tastes like chicken!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:563
+#: qcsrc/common/notifications.qh:581
 msgid "^K1You forgot to put the pin back in!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:564
+#: qcsrc/common/notifications.qh:582
 msgid "^K1You are respawning for running out of ammo..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:564
+#: qcsrc/common/notifications.qh:582
 msgid "^K1You were killed for running out of ammo..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:565
+#: qcsrc/common/notifications.qh:583
 msgid "^K1You grew too old without taking your medicine"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:565
+#: qcsrc/common/notifications.qh:583
 msgid "^K1You need to preserve your health"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:566
+#: qcsrc/common/notifications.qh:584
 msgid "^K1You became a shooting star!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:567
+#: qcsrc/common/notifications.qh:585
 msgid "^K1You melted away in slime!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:568
+#: qcsrc/common/notifications.qh:586
 msgid "^K1You committed suicide!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:568
+#: qcsrc/common/notifications.qh:586
 msgid "^K1You ended it all!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:569
+#: qcsrc/common/notifications.qh:587
 msgid "^K1You got stuck in a swamp!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:570
+#: qcsrc/common/notifications.qh:588
 #, c-format
 msgid "^BGYou are now on: %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:571
+#: qcsrc/common/notifications.qh:589
 msgid "^K1You died in an accident!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:572
+#: qcsrc/common/notifications.qh:590
 msgid "^K1You had an unfortunate run in with a turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:572
+#: qcsrc/common/notifications.qh:590
 msgid "^K1You were fragged by a turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:573
+#: qcsrc/common/notifications.qh:591
 msgid "^K1You had an unfortunate run in with an eWheel turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:573
+#: qcsrc/common/notifications.qh:591
 msgid "^K1You were fragged by an eWheel turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:574
+#: qcsrc/common/notifications.qh:592
 msgid "^K1You had an unfortunate run in with a Walker turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:574
+#: qcsrc/common/notifications.qh:592
 msgid "^K1You were fragged by a Walker turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:575
+#: qcsrc/common/notifications.qh:593
 msgid "^K1You got caught in the blast of a Bumblebee explosion!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:576
+#: qcsrc/common/notifications.qh:594
 msgid "^K1You were crushed by a vehicle!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:577
+#: qcsrc/common/notifications.qh:595
 msgid "^K1You were caught in a Raptor cluster bomb!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:578
+#: qcsrc/common/notifications.qh:596
 msgid "^K1You got caught in the blast of a Raptor explosion!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:579
+#: qcsrc/common/notifications.qh:597
 msgid "^K1You got caught in the blast of a Spiderbot explosion!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:580
+#: qcsrc/common/notifications.qh:598
 msgid "^K1You were blasted to bits by a Spiderbot rocket!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:581
+#: qcsrc/common/notifications.qh:599
 msgid "^K1You got caught in the blast of a Racer explosion!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:582
+#: qcsrc/common/notifications.qh:600
 msgid "^K1You couldn't find shelter from a Racer rocket!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:583
+#: qcsrc/common/notifications.qh:601
 msgid "^K1Watch your step!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:584
+#: qcsrc/common/notifications.qh:602
 #, c-format
 msgid "^K1Moron! You fragged ^BG%s^K1, a team mate!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:584
+#: qcsrc/common/notifications.qh:602
 #, c-format
 msgid "^K1Moron! You went against ^BG%s^K1, a team mate!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:585
+#: qcsrc/common/notifications.qh:603
 #, c-format
 msgid "^K1You were fragged by ^BG%s^K1, a team mate"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:585
+#: qcsrc/common/notifications.qh:603
 #, c-format
 msgid "^K1You were scored against by ^BG%s^K1, a team mate"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:586
+#: qcsrc/common/notifications.qh:604
 msgid ""
 "^K1Stop idling!\n"
 "^BGDisconnecting in ^COUNT..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:587
+#: qcsrc/common/notifications.qh:605
 msgid "^F2You picked up some extra lives"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:588
+#: qcsrc/common/notifications.qh:606
 #, c-format
 msgid "^K3You froze ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:589
+#: qcsrc/common/notifications.qh:607
 #, c-format
 msgid "^K1You were frozen by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:590
+#: qcsrc/common/notifications.qh:608
 #, c-format
 msgid "^K3You revived ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:591
+#: qcsrc/common/notifications.qh:609
 msgid "^K3You revived yourself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:592
+#: qcsrc/common/notifications.qh:610
 #, c-format
 msgid "^K3You were revived by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:593
+#: qcsrc/common/notifications.qh:611
 #, c-format
 msgid "^K3You were automatically revived after %s second(s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:596
+#: qcsrc/common/notifications.qh:614
 msgid "^K1You froze yourself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:597
+#: qcsrc/common/notifications.qh:615
 msgid "^K1Round already started, you spawn as frozen"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:604
+#: qcsrc/common/notifications.qh:622
 msgid ""
 "^K1No spawnpoints available!\n"
 "Hope your team can fix it..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:605
+#: qcsrc/common/notifications.qh:623
 msgid ""
 "^K1You may not join the game at this time.\n"
 "The player limit reached maximum capacity."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:608
+#: qcsrc/common/notifications.qh:626
 msgid "^BGKilling people while you don't have the ball gives no points!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:609
+#: qcsrc/common/notifications.qh:627
 msgid ""
 "^BGAll keys are in your team's hands!\n"
 "Help the key carriers to meet!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:610
+#: qcsrc/common/notifications.qh:628
 msgid ""
 "^BGAll keys are in ^TC^TT team^BG's hands!\n"
 "Interfere ^F4NOW^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:611
+#: qcsrc/common/notifications.qh:629
 msgid ""
 "^BGAll keys are in your team's hands!\n"
 "Meet the other key carriers ^F4NOW^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:612
+#: qcsrc/common/notifications.qh:630
 msgid "^F4Round will start in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:613
+#: qcsrc/common/notifications.qh:631
 msgid "^BGScanning frequency range..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:614
+#: qcsrc/common/notifications.qh:632
 msgid "^BGYou are starting with the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:615 qcsrc/common/notifications.qh:616
+#: qcsrc/common/notifications.qh:633 qcsrc/common/notifications.qh:634
 #, c-format
 msgid ""
 "^BGWaiting for players to join...\n"
 "Need active players for: %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:617
+#: qcsrc/common/notifications.qh:635
 #, c-format
 msgid "^BGWaiting for %s player(s) to join..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:618
+#: qcsrc/common/notifications.qh:636
 msgid "^F4^COUNT^BG left to find some ammo!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:619
+#: qcsrc/common/notifications.qh:637
 msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:619
+#: qcsrc/common/notifications.qh:637
 msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:620
+#: qcsrc/common/notifications.qh:638
 #, c-format
 msgid "^F2Extra lives remaining: ^K1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:621
+#: qcsrc/common/notifications.qh:639
 msgid "^BGSecondary fire inflicts no damage!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:622
+#: qcsrc/common/notifications.qh:640
 #, c-format
 msgid "^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:623
+#: qcsrc/common/notifications.qh:641
 #, c-format
 msgid ""
 "^F2^COUNT^BG until weapon change...\n"
 "Next weapon: ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:624
+#: qcsrc/common/notifications.qh:642
 #, c-format
 msgid "^F2Active weapon: ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:625
+#: qcsrc/common/notifications.qh:643
 msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:626
+#: qcsrc/common/notifications.qh:644
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "Keep fragging until we have a winner!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:626
+#: qcsrc/common/notifications.qh:644
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "Keep scoring until we have a winner!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:627
+#: qcsrc/common/notifications.qh:645
 #, c-format
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "^BGAdded ^F4%s^BG to the game!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:628
+#: qcsrc/common/notifications.qh:646
 msgid "^F2Invisibility has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:629
+#: qcsrc/common/notifications.qh:647
 msgid "^F2Shield has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:630
+#: qcsrc/common/notifications.qh:648
 msgid "^F2Speed has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:631
+#: qcsrc/common/notifications.qh:649
 msgid "^F2Strength has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:632
+#: qcsrc/common/notifications.qh:650
 msgid "^F2You are invisible"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:633
+#: qcsrc/common/notifications.qh:651
 msgid "^F2Shield surrounds you"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:634
+#: qcsrc/common/notifications.qh:652
 msgid "^F2You are on speed"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:635
+#: qcsrc/common/notifications.qh:653
 msgid "^F2Strength infuses your weapons with devastating power"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:636
+#: qcsrc/common/notifications.qh:654
 msgid "^F2The race is over, finish your lap!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:637
+#: qcsrc/common/notifications.qh:655
 msgid "^F2Superweapons have broken down"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:638
+#: qcsrc/common/notifications.qh:656
 msgid "^F2Superweapons have been lost"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:639
+#: qcsrc/common/notifications.qh:657
 msgid "^F2You now have a superweapon"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:640
+#: qcsrc/common/notifications.qh:658
 msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:641
+#: qcsrc/common/notifications.qh:659
 msgid "^K1Changing team in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:642
+#: qcsrc/common/notifications.qh:660
 msgid "^K1Spectating in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:643
+#: qcsrc/common/notifications.qh:661
 msgid "^K1Suicide in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:644
+#: qcsrc/common/notifications.qh:662
 msgid "^F4Timeout begins in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:645
+#: qcsrc/common/notifications.qh:663
 msgid "^F4Timeout ends in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:907 qcsrc/common/notifications.qh:908
+#: qcsrc/common/notifications.qh:937 qcsrc/common/notifications.qh:938
 #, c-format
 msgid " (near %s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:915 qcsrc/common/notifications.qh:916
+#: qcsrc/common/notifications.qh:945 qcsrc/common/notifications.qh:946
 msgid "primary"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:915 qcsrc/common/notifications.qh:916
+#: qcsrc/common/notifications.qh:945 qcsrc/common/notifications.qh:946
 msgid "secondary"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:926
+#: qcsrc/common/notifications.qh:956
 #, c-format
 msgid " ^F1(Press %s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:935
+#: qcsrc/common/notifications.qh:965
 #, c-format
 msgid " with %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 #, c-format
 msgid "%s^K1 made a TRIPLE FRAG! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 #, c-format
 msgid "%s^K1 made a TRIPLE SCORE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 msgid "TRIPLE FRAG! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 #, c-format
 msgid "%s^K1 made FIVE SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 #, c-format
 msgid "%s^K1 unlocked RAGE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 msgid "RAGE! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 #, c-format
 msgid "%s^K1 made TEN SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 #, c-format
 msgid "%s^K1 started a MASSACRE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 msgid "MASSACRE! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 #, c-format
 msgid "%s^K1 executed MAYHEM! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 #, c-format
 msgid "%s^K1 made FIFTEEN SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 msgid "MAYHEM! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 #, c-format
 msgid "%s^K1 is a BERSERKER! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 #, c-format
 msgid "%s^K1 made TWENTY SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 msgid "BERSERKER! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 #, c-format
 msgid "%s^K1 inflicts CARNAGE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 #, c-format
 msgid "%s^K1 made TWENTY FIVE SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 msgid "CARNAGE! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 #, c-format
 msgid "%s^K1 made THIRTY SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 #, c-format
 msgid "%s^K1 unleashes ARMAGEDDON! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 msgid "ARMAGEDDON! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:956
+#: qcsrc/common/notifications.qh:986
 #, c-format
 msgid "%s(^F1Bot^BG)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:958
+#: qcsrc/common/notifications.qh:988
 #, c-format
 msgid "%s(Ping ^F1%d^BG)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:964
+#: qcsrc/common/notifications.qh:994
 #, c-format
 msgid ""
 "\n"
 "(Health ^1%d^BG / Armor ^2%d^BG)%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:966
+#: qcsrc/common/notifications.qh:996
 #, c-format
 msgid ""
 "\n"
 "(^F4Dead^BG)%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1003 qcsrc/common/notifications.qh:1016
+#: qcsrc/common/notifications.qh:1033 qcsrc/common/notifications.qh:1046
 #, c-format
 msgid "%d score spree! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1015
+#: qcsrc/common/notifications.qh:1045
 #, c-format
 msgid "%d frag spree! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1028
+#: qcsrc/common/notifications.qh:1058
 msgid "First blood! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1028
+#: qcsrc/common/notifications.qh:1058
 msgid "First score! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1032
+#: qcsrc/common/notifications.qh:1062
 msgid "First casualty! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1032
+#: qcsrc/common/notifications.qh:1062
 msgid "First victim! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1073
+#: qcsrc/common/notifications.qh:1103
 #, c-format
 msgid "%s^K1 has %d frags in a row! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1074
+#: qcsrc/common/notifications.qh:1104
 #, c-format
 msgid "%s^K1 made %d scores in a row! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1092
+#: qcsrc/common/notifications.qh:1122
 #, c-format
 msgid "%s^K1 drew first blood! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1093
+#: qcsrc/common/notifications.qh:1123
 #, c-format
 msgid "%s^K1 got the first score! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1109
+#: qcsrc/common/notifications.qh:1139
 #, c-format
 msgid ", ending their %d frag spree"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1110
+#: qcsrc/common/notifications.qh:1140
 #, c-format
 msgid ", ending their %d score spree"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1124
+#: qcsrc/common/notifications.qh:1154
 #, c-format
 msgid ", losing their %d frag spree"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1125
+#: qcsrc/common/notifications.qh:1155
 #, c-format
 msgid ", losing their %d score spree"
 msgstr ""
@@ -3139,11 +3139,11 @@ msgstr "Obiect %d"
 msgid "%d (%s)"
 msgstr "%d (%s)"
 
-#: qcsrc/menu/item/textslider.c:29 qcsrc/menu/item/textslider.c:31
+#: qcsrc/menu/item/textslider.c:31 qcsrc/menu/item/textslider.c:33
 msgid "custom"
 msgstr "personalizat"
 
-#: qcsrc/menu/menu.qc:56
+#: qcsrc/menu/menu.qc:59
 #, c-format
 msgid "^4MQC Build information: ^1%s\n"
 msgstr "^4MQC Informatii compilare: %s\n"
@@ -3190,7 +3190,7 @@ msgstr "Credite"
 #: 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_sandboxtools.c:89
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:90
 #: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:77
 #: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:21
 msgid "OK"
@@ -3245,33 +3245,33 @@ msgstr "Salvare setari"
 msgid "Ammo Panel"
 msgstr "Fereastra Munitii"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:23
 msgid "Ammunition display:"
 msgstr "Afisaj mutitii:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:26
 msgid "Show only current ammo type"
 msgstr "Afiseaza numai munitia armei selectate"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
 msgid "Align icon:"
 msgstr "Aliniere icon:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:36
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:28
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:40
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:28
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:40
-msgid "Left"
-msgstr "Stanga"
-
 #: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:30
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:38
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:29
 #: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:41
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:29
 #: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:41
+msgid "Left"
+msgstr "Stanga"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:42
 msgid "Right"
 msgstr "Dreapta"
 
@@ -3279,28 +3279,28 @@ msgstr "Dreapta"
 msgid "Centerprint"
 msgstr "Text centru"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:24
 msgid "Message duration:"
 msgstr "Durata mesaj:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:27
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:28
 msgid "Fade time:"
 msgstr "Durata atenuare:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:32
 msgid "Flip messages order"
 msgstr "Inversare ordine mesaje"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:34
 msgid "Text alignment:"
 msgstr "Aliniere text:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:38
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:51
 msgid "Center"
 msgstr "Centru:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:41
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:42
 msgid "Font scale:"
 msgstr "Marime font:"
 
@@ -3308,19 +3308,19 @@ msgstr "Marime font:"
 msgid "Chat Panel"
 msgstr "Fereastra Chat"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:23
 msgid "Chat entries:"
 msgstr "Intrari chat:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:26
 msgid "Chat size:"
 msgstr "Marime chat:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:30
 msgid "Chat lifetime:"
 msgstr "Durata chat:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:34
 msgid "Chat beep sound"
 msgstr "Sunet chat:"
 
@@ -3328,11 +3328,11 @@ msgstr "Sunet chat:"
 msgid "Engine Info Panel"
 msgstr "Fereastra Informatii Motor"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:23
 msgid "Engine info:"
 msgstr "Informatii motor:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:26
 msgid "Use an averaging algorithm for fps"
 msgstr "Utilizare algoritm centrare FPS"
 
@@ -3340,36 +3340,36 @@ msgstr "Utilizare algoritm centrare FPS"
 msgid "Health/Armor Panel"
 msgstr "Fereastra Viata/Armura"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:22
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:23
 msgid "Enable status bar"
 msgstr "Activare bara de statut"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:24
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:25
 msgid "Status bar alignment:"
 msgstr "Aliniere bara de statut:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:32
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:42
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:32
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:43
 msgid "Inward"
 msgstr "Interior"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:34
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:43
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:34
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:44
 msgid "Outward"
 msgstr "Exterior"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:37
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:38
 msgid "Icon alignment:"
 msgstr "Aliniere iconuri:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:46
 msgid "Flip health and armor positions"
 msgstr "Oglindire pozitie viata/armura"
 
@@ -3377,11 +3377,11 @@ msgstr "Oglindire pozitie viata/armura"
 msgid "Info Messages Panel"
 msgstr "Fereastra Informatii"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:23
 msgid "Info messages:"
 msgstr "Informatii:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:26
 msgid "Flip align"
 msgstr "Oglindire pozitie"
 
@@ -3393,23 +3393,23 @@ msgstr "Fereastra Iconuri Moduri"
 msgid "Notification Panel"
 msgstr "Fereastra Notificatii"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:23
 msgid "Notifications:"
 msgstr "Notificatii:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:26
 msgid "Also print notifications to the console"
 msgstr "Printare notificatii si in consola"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:29
 msgid "Flip notify order"
 msgstr "Inversare ordine notificatii"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:32
 msgid "Entry lifetime:"
 msgstr "Durata notificare:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:36
 msgid "Entry fadetime:"
 msgstr "Durata atenuare notificatie:"
 
@@ -3417,96 +3417,96 @@ msgstr "Durata atenuare notificatie:"
 msgid "Physics Panel"
 msgstr "Panou Fizici"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:22
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:22
 msgid "Panel disabled"
 msgstr "Dezactivata"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
 msgid "Panel enabled"
 msgstr "Panou activ"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
 msgid "Panel enabled even observing"
 msgstr "Panou activ si spectatorilor"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:26
 msgid "Panel enabled only in Race/CTS"
 msgstr "Panou activ numai in Cursa/CTS"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:32
 msgid "Status bar"
 msgstr "Bara statut"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:49
 msgid "Left align"
 msgstr "Aliniere stanga"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:53
 msgid "Right align"
 msgstr "Aliniere dreapta"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
 msgid "Inward align"
 msgstr "Aliniere interioara"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:37
 msgid "Outward align"
 msgstr "Aliniere exterioara"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:41
 msgid "Flip speed/acceleration positions"
 msgstr "Inversare pozitie viteza/acceleratie"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
 #: qcsrc/menu/xonotic/dialog_settings_misc.c:29
 msgid "Speed:"
 msgstr "Viteza:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:46
 msgid "Include vertical speed"
 msgstr "Include viteza verticala"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:56
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:57
 msgid "Speed unit:"
 msgstr "Unitate viteza"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:58
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
 msgid "qu/s"
 msgstr "qu/s"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
 msgid "m/s"
 msgstr "m/s"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
 msgid "km/h"
 msgstr "km/h"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
 msgid "mph"
 msgstr "mph"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:63
 msgid "knots"
 msgstr "noduri"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:64
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:65
 msgid "Show"
 msgstr "Afiseaza"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:67
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:68
 msgid "Top speed"
 msgstr "Viteza maxima:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:73
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
 msgid "Acceleration:"
 msgstr "Acceleratie:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:75
 msgid "Include vertical acceleration"
 msgstr "Include acceleratia verticala"
 
@@ -3514,7 +3514,7 @@ msgstr "Include acceleratia verticala"
 msgid "Powerups Panel"
 msgstr "Fereastra Powerup"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:46
 msgid "Flip strength and shield positions"
 msgstr "Oglindire pozitie iconuri"
 
@@ -3522,16 +3522,16 @@ msgstr "Oglindire pozitie iconuri"
 msgid "Pressed Keys Panel"
 msgstr "Fereastra Taste Apasate"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
 msgid "Panel enabled when spectating"
 msgstr "Activa pentru spectatori"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:24
 msgid "Panel always enabled"
 msgstr "Mereu activa"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:31
 msgid "Forced aspect:"
 msgstr "Aspect fortat:"
 
@@ -3543,68 +3543,68 @@ msgstr "Fereastra Timp Curse"
 msgid "Radar Panel"
 msgstr "Fereastra Radar"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
 msgid "Panel enabled in teamgames"
 msgstr "Activa in jocuri de echipa"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:30
 msgid "Radar:"
 msgstr "Radar:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:32
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:43
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:82
+#: 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
 msgid "Alpha:"
 msgstr "Opacitate:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:37
 msgid "Rotation:"
 msgstr "Rotatie:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:39
 msgid "Forward"
 msgstr "Inainte"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:40
 msgid "West"
 msgstr "Vest"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:41
 msgid "South"
 msgstr "Sud"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:41
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:42
 msgid "East"
 msgstr "Est"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:43
 msgid "North"
 msgstr "Nord"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:46
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:47
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:63
 msgid "Scale:"
 msgstr "Marime:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:50
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:51
 msgid "Zoom mode:"
 msgstr "Modalitate Zoom:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:52
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:53
 msgid "Zoomed in"
 msgstr "In interior"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:53
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:54
 msgid "Zoomed out"
 msgstr "In exterior"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:54
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:55
 msgid "Always zoomed"
 msgstr "Permanent activ"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:55
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:56
 msgid "Never zoomed"
 msgstr "Niciodata activ"
 
@@ -3612,23 +3612,23 @@ msgstr "Niciodata activ"
 msgid "Score Panel"
 msgstr "Fereastra Scor"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:23
 msgid "Score:"
 msgstr "Scor:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
 msgid "Rankings:"
 msgstr "Clasificari:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
 msgid "Off"
 msgstr "Dezactivat"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
 msgid "And me"
 msgstr "Si eu"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:29
 msgid "Pure"
 msgstr "Pur"
 
@@ -3636,11 +3636,11 @@ msgstr "Pur"
 msgid "Timer Panel"
 msgstr "Fereastra Timp"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:23
 msgid "Timer:"
 msgstr "Timp:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:26
 msgid "Show elapsed time"
 msgstr "Afisaj timp ramas"
 
@@ -3648,7 +3648,7 @@ msgstr "Afisaj timp ramas"
 msgid "Vote Panel"
 msgstr "Fereastra Voturi"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:23
 msgid "Alpha after voting:"
 msgstr "Opacitate dupa vot:"
 
@@ -3656,76 +3656,76 @@ msgstr "Opacitate dupa vot:"
 msgid "Weapons Panel"
 msgstr "Fereastra Arme"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:25
 msgid "Fade out after:"
 msgstr "Atenuare opacitate dupa:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:26
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:27
 msgid "Never"
 msgstr "Niciodata"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:29
 #, c-format
 msgid "%ds"
 msgstr "%ds"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:32
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:33
 msgid "Fade effect:"
 msgstr "Atenuare opacitate:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
 msgid "EF^None"
 msgstr "Nici una"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:37
 msgid "Alpha"
 msgstr "Opacitate"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
 msgid "Slide"
 msgstr "Glisare"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:39
 msgid "EF^Both"
 msgstr "Ambele"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:43
 msgid "Weapon icons:"
 msgstr "Iconuri arme:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46
 msgid "Show only owned weapons"
 msgstr "Afiseaza numai armele detinute"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:48
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
 msgid "Show weapon ID as:"
 msgstr "Afisaj ID arme ca:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
 msgid "SHOWAS^None"
 msgstr "Nici una"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
 msgid "Number"
 msgstr "Numar"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:52
 msgid "Bind"
 msgstr "Tasta"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:54
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
 msgid "Show Accuracy"
 msgstr "Afisaj Acuratete"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:56
 msgid "Show Ammo"
 msgstr "Afisaj Munitie"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:58
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:59
 msgid "Ammo bar color:"
 msgstr "Culoare bara munitie:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:64
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:65
 msgid "Ammo bar alpha:"
 msgstr "Opacitate bara munitie:"
 
@@ -3733,85 +3733,85 @@ msgstr "Opacitate bara munitie:"
 msgid "Panel HUD Setup"
 msgstr "Configurate Interfata (HUD)"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:21
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:22
 msgid "Panel background defaults:"
 msgstr "Setari normale fond:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:23 qcsrc/menu/xonotic/util.qc:683
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:24 qcsrc/menu/xonotic/util.qc:683
 msgid "Background:"
 msgstr "Fundal:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:25
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:37
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:52
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:686
+#: 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
 msgid "Disable"
 msgstr "Dezactivat"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:30
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:691
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:31
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:78 qcsrc/menu/xonotic/util.qc:691
 msgid "Color:"
 msgstr "Culoare:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:699
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:36 qcsrc/menu/xonotic/util.qc:699
 msgid "Border size:"
 msgstr "Marime borduri:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:50
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:89
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:51
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:90
 msgid "Team color:"
 msgstr "Culoare echipa:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:725
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:59 qcsrc/menu/xonotic/util.qc:725
 msgid "Test team color in configure mode"
 msgstr "Testare culoare echipa in timpul configurarii"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:728
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:62 qcsrc/menu/xonotic/util.qc:728
 msgid "Padding:"
 msgstr "Ajustare:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:68
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:69
 msgid "HUD Dock:"
 msgstr "Magnet ferestre:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:70
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71
 msgid "DOCK^Disabled"
 msgstr "Dezactivat"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72
 msgid "DOCK^Small"
 msgstr "Mic"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73
 msgid "DOCK^Medium"
 msgstr "Mediu"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:74
 msgid "DOCK^Large"
 msgstr "Mare"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:96
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:97
 msgid "Grid settings:"
 msgstr "Setari grila:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:99
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:100
 msgid "Snap panels to grid"
 msgstr "Utilizare grila pentru ferestre"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:102
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:103
 msgid "Grid size:"
 msgstr "Marime grila:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:103
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:104
 msgid "X:"
 msgstr "X:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:109
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:110
 msgid "Y:"
 msgstr "Y:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:117
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:118
 msgid "Exit setup"
 msgstr "Iesire configurare"
 
@@ -4396,7 +4396,7 @@ msgid "Key:"
 msgstr "Cheie:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:61
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:19
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:20
 msgid "Model:"
 msgstr "Model:"
 
@@ -4771,127 +4771,127 @@ msgstr "Nu"
 msgid "Sandbox Tools"
 msgstr "Utilitati Sandbox"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:24
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:25
 msgid "Spawn"
 msgstr "Creaza"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:25
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:26
 msgid "Remove *"
 msgstr "Sterge *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:27
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:28
 msgid "Copy *"
 msgstr "Copiaza *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:28
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:29
 msgid "Paste"
 msgstr "Creaza copie"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:30
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:31
 msgid "Bone:"
 msgstr "Os:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:35
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:36
 msgid "Set * as child"
 msgstr "Marcheaza * ca atasament"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:36
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:37
 msgid "Attach to *"
 msgstr "Atasaza pe *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:38
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:39
 msgid "Detach from *"
 msgstr "Detaseaza de pe *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:41
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:42
 msgid "Visual object properties for *:"
 msgstr "Propietati vizuale pentru *:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:43
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:44
 msgid "Set skin:"
 msgstr "Seteaza skin:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:45
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:46
 msgid "Set alpha:"
 msgstr "Seteaza opacitate:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:48
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:49
 msgid "Set color main:"
 msgstr "Seteaza culoare principala:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:50
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:51
 msgid "Set color glow:"
 msgstr "Seteaza culoare stralucire:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:54
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:55
 msgid "Set frame:"
 msgstr "Setare animatie:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:58
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:59
 msgid "Physical object properties for *:"
 msgstr "Proprietati fizice pentru *:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:60
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:61
 msgid "Set material:"
 msgstr "Setare material:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:66
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:67
 msgid "Set solidity:"
 msgstr "Seteaza soliditate:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:67
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:68
 msgid "Non-solid"
 msgstr "Non-solid"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:68
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:69
 msgid "Solid"
 msgstr "Solid"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:69
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:70
 msgid "Set physics:"
 msgstr "Setare fizici:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:70
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:71
 msgid "Static"
 msgstr "Static"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:71
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:72
 msgid "Movable"
 msgstr "Poate fi mutat"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:72
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:73
 msgid "Physical"
 msgstr "Fizic"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:74
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:75
 msgid "Set scale:"
 msgstr "Seteaza marime:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:76
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:77
 msgid "Set force:"
 msgstr "Setare forta:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:80
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:81
 msgid "Claim *"
 msgstr "Clameaza *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:82
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:83
 msgid "* object info"
 msgstr "Informatii obiect *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:83
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:84
 msgid "* mesh info"
 msgstr "Informatii model *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:84
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:85
 msgid "* attachment info"
 msgstr "Informatii atasamente *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:85
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:86
 msgid "Show help"
 msgstr "Afisaj ajutor"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:86
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:87
 msgid "* is the object you are facing"
 msgstr "* este obiectul la care te uiti"
 
@@ -5888,27 +5888,27 @@ msgstr "Castigator"
 msgid "Team Selection"
 msgstr "Selectie echipa"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:41
+#: qcsrc/menu/xonotic/dialog_teamselect.c:42
 msgid "join 'best' team (auto-select)"
 msgstr "cea mai potrivita echipa (selectie automata)"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:45
+#: qcsrc/menu/xonotic/dialog_teamselect.c:46
 msgid "red"
 msgstr "rosu"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:46
+#: qcsrc/menu/xonotic/dialog_teamselect.c:47
 msgid "blue"
 msgstr "albastru"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:47
+#: qcsrc/menu/xonotic/dialog_teamselect.c:48
 msgid "yellow"
 msgstr "galben"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:48
+#: qcsrc/menu/xonotic/dialog_teamselect.c:49
 msgid "pink"
 msgstr "roz"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:51
+#: qcsrc/menu/xonotic/dialog_teamselect.c:52
 msgid "spectate"
 msgstr "spectator"
 
@@ -6008,7 +6008,12 @@ msgstr ""
 msgid "%s dB"
 msgstr "%s dB"
 
-#: qcsrc/menu/xonotic/slider_resolution.c:72
+#: qcsrc/menu/xonotic/slider_resolution.c:103
+#, c-format
+msgid "%dx%d (%d:%d)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_resolution.c:106
 #, c-format
 msgid "%dx%d"
 msgstr "%dx%d"
index 37022f04290419de2f6edd69cdb47f3aaef7837f..f01625e079918f2ffe33ba978504b6e23c8894ea 100644 (file)
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Xonotic\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-09-13 10:31+0200\n"
-"PO-Revision-Date: 2013-09-13 08:33+0000\n"
+"POT-Creation-Date: 2013-10-03 11:55+0200\n"
+"PO-Revision-Date: 2013-10-03 10:08+0000\n"
 "Last-Translator: divVerent <divVerent@xonotic.org>\n"
 "Language-Team: Russian (http://www.transifex.com/projects/p/xonotic/language/"
 "ru/)\n"
@@ -1232,7 +1232,7 @@ msgstr "%dй"
 msgid "@!#%'n Tuba Throwing"
 msgstr "@!#%'n Швыряние Тубой"
 
-#: qcsrc/common/mapinfo.qc:1105 qcsrc/menu/xonotic/skinlist.c:166
+#: qcsrc/common/mapinfo.qc:1109 qcsrc/menu/xonotic/skinlist.c:166
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
@@ -1306,968 +1306,968 @@ msgstr "^1Уведомления от сервера:"
 msgid "^7%s (^3%d sec left)"
 msgstr "^7%s (^3%d секунд осталось)"
 
-#: qcsrc/common/notifications.qh:330
+#: qcsrc/common/notifications.qh:342
 #, c-format
 msgid "^BG%s^BG captured the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:331
+#: qcsrc/common/notifications.qh:343
 #, c-format
 msgid ""
 "^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
 "%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:332
+#: qcsrc/common/notifications.qh:344
 #, c-format
 msgid "^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:333
+#: qcsrc/common/notifications.qh:345
 #, c-format
 msgid ""
 "^BG%s^BG captured the ^TC^TT^BG flag in ^F2%s^BG seconds, failing to break "
 "^BG%s^BG's previous record of ^F1%s^BG seconds"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:334
+#: qcsrc/common/notifications.qh:346
 msgid "^BGThe ^TC^TT^BG flag was returned to base by its owner"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:335
+#: qcsrc/common/notifications.qh:347
 msgid "^BGThe ^TC^TT^BG flag was destroyed and returned to base"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:336
+#: qcsrc/common/notifications.qh:348
 msgid "^BGThe ^TC^TT^BG flag was dropped in the base and returned itself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:337
+#: qcsrc/common/notifications.qh:349
 msgid ""
 "^BGThe ^TC^TT^BG flag fell somewhere it couldn't be reached and returned to "
 "base"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:338
+#: qcsrc/common/notifications.qh:350
 #, c-format
 msgid ""
 "^BGThe ^TC^TT^BG flag became impatient after ^F1%.2f^BG seconds and returned "
 "itself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:339
+#: qcsrc/common/notifications.qh:351
 msgid "^BGThe ^TC^TT^BG flag has returned to the base"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:340
+#: qcsrc/common/notifications.qh:352
 #, c-format
 msgid "^BG%s^BG lost the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:341
+#: qcsrc/common/notifications.qh:353
 #, c-format
 msgid "^BG%s^BG got the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:342
+#: qcsrc/common/notifications.qh:354
 #, c-format
 msgid "^BG%s^BG returned the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:343
+#: qcsrc/common/notifications.qh:355
 #, c-format
 msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:344
+#: qcsrc/common/notifications.qh:356
 #, c-format
 msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:345
+#: qcsrc/common/notifications.qh:357
 #, c-format
 msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:346
+#: qcsrc/common/notifications.qh:358
 #, c-format
 msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:346
+#: qcsrc/common/notifications.qh:358
 #, c-format
 msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:347
+#: qcsrc/common/notifications.qh:359
 #, c-format
 msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:348
+#: qcsrc/common/notifications.qh:360
 #, c-format
 msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:349
+#: qcsrc/common/notifications.qh:361
 #, c-format
 msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:350
+#: qcsrc/common/notifications.qh:362
 #, c-format
 msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:351
+#: qcsrc/common/notifications.qh:363
 #, c-format
 msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:352
+#: qcsrc/common/notifications.qh:364
 #, c-format
 msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:352
+#: qcsrc/common/notifications.qh:364
 #, c-format
 msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:353
+#: qcsrc/common/notifications.qh:365
 #, c-format
 msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:354
+#: qcsrc/common/notifications.qh:366
 #, c-format
 msgid ""
 "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:355
+#: qcsrc/common/notifications.qh:367
 #, c-format
 msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:356
+#: qcsrc/common/notifications.qh:368
 #, c-format
 msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:357
+#: qcsrc/common/notifications.qh:369
 #, c-format
 msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:358
+#: qcsrc/common/notifications.qh:370
 #, c-format
 msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:359
+#: qcsrc/common/notifications.qh:371
 #, c-format
 msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:360
+#: qcsrc/common/notifications.qh:372
 #, c-format
 msgid ""
 "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:361
+#: qcsrc/common/notifications.qh:373
 #, c-format
 msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:362
+#: qcsrc/common/notifications.qh:374
 #, c-format
 msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:363
+#: qcsrc/common/notifications.qh:375
 #, c-format
 msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:364
+#: qcsrc/common/notifications.qh:376
 #, c-format
 msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:365
+#: qcsrc/common/notifications.qh:377
 #, c-format
 msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:366
+#: qcsrc/common/notifications.qh:378
 #, c-format
 msgid "^BG%s%s^K1 was thrown into a world of hurt by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:367
+#: qcsrc/common/notifications.qh:379
 #, c-format
 msgid "^BG%s^K1 was moved into the %s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:368
+#: qcsrc/common/notifications.qh:380
 #, c-format
 msgid "^BG%s^K1 became enemies with the Lord of Teamplay%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:369
+#: qcsrc/common/notifications.qh:381
 #, c-format
 msgid "^BG%s^K1 thought they found a nice camping ground%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:370
+#: qcsrc/common/notifications.qh:382
 #, c-format
 msgid "^BG%s^K1 unfairly eliminated themself%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:371
+#: qcsrc/common/notifications.qh:383
 #, c-format
 msgid "^BG%s^K1 %s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:372
+#: qcsrc/common/notifications.qh:384
 #, c-format
 msgid "^BG%s^K1 couldn't catch their breath%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:372
+#: qcsrc/common/notifications.qh:384
 #, c-format
 msgid "^BG%s^K1 was in the water for too long%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:373
+#: qcsrc/common/notifications.qh:385
 #, c-format
 msgid "^BG%s^K1 hit the ground with a bit too much force%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:373
+#: qcsrc/common/notifications.qh:385
 #, c-format
 msgid "^BG%s^K1 hit the ground with a crunch%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:374
+#: qcsrc/common/notifications.qh:386
 #, c-format
 msgid "^BG%s^K1 became a bit too crispy%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:374
+#: qcsrc/common/notifications.qh:386
 #, c-format
 msgid "^BG%s^K1 felt a little hot%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:375
+#: qcsrc/common/notifications.qh:387
 #, c-format
 msgid "^BG%s^K1 died%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:376
+#: qcsrc/common/notifications.qh:388
 #, c-format
 msgid "^BG%s^K1 found a hot place%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:376
+#: qcsrc/common/notifications.qh:388
 #, c-format
 msgid "^BG%s^K1 turned into hot slag%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:377
+#: qcsrc/common/notifications.qh:389
 #, c-format
 msgid "^BG%s^K1 mastered the art of self-nading%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:378
+#: qcsrc/common/notifications.qh:390
 #, c-format
 msgid "^BG%s^K1 died%s%s. What's the point of living without ammo?"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:378
+#: qcsrc/common/notifications.qh:390
 #, c-format
 msgid "^BG%s^K1 ran out of ammo%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:379
+#: qcsrc/common/notifications.qh:391
 #, c-format
 msgid "^BG%s^K1 rotted away%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:380
+#: qcsrc/common/notifications.qh:392
 #, c-format
 msgid "^BG%s^K1 became a shooting star%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:393
 #, c-format
 msgid "^BG%s^K1 was slimed%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:394
 #, c-format
 msgid "^BG%s^K1 couldn't take it anymore%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:395
 #, c-format
 msgid "^BG%s^K1 is now preserved for centuries to come%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:396
 #, c-format
 msgid "^BG%s^K1 switched to the %s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:397
 #, c-format
 msgid "^BG%s^K1 died in an accident%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:398
 #, c-format
 msgid "^BG%s^K1 ran into a turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:399
 #, c-format
 msgid "^BG%s^K1 was blasted away by an eWheel turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:400
 #, c-format
 msgid "^BG%s^K1 got caught up in the FLAC turret fire%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:401
 #, c-format
 msgid "^BG%s^K1 was blasted away by a Hellion turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:402
 #, c-format
 msgid "^BG%s^K1 could not hide from the Hunter turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:403
 #, c-format
 msgid "^BG%s^K1 was riddled full of holes by a Machinegun turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:404
 #, c-format
 msgid "^BG%s^K1 got turned into smoldering gibs by an MLRS turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:405
 #, c-format
 msgid "^BG%s^K1 was phased out by a turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:406
 #, c-format
 msgid "^BG%s^K1 got served some superheated plasma from a turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:407
 #, c-format
 msgid "^BG%s^K1 was electrocuted by a Tesla turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:408
 #, c-format
 msgid "^BG%s^K1 got served a lead enrichment by a Walker turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:409
 #, c-format
 msgid "^BG%s^K1 was impaled by a Walker turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:410
 #, c-format
 msgid "^BG%s^K1 was blasted away by a Walker turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:411
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Bumblebee explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:412
 #, c-format
 msgid "^BG%s^K1 was crushed by a vehicle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:401
+#: qcsrc/common/notifications.qh:413
 #, c-format
 msgid "^BG%s^K1 was caught in a Raptor cluster bomb%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:402
+#: qcsrc/common/notifications.qh:414
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Raptor explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:403
+#: qcsrc/common/notifications.qh:415
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Spiderbot explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:404
+#: qcsrc/common/notifications.qh:416
 #, c-format
 msgid "^BG%s^K1 was blasted to bits by a Spiderbot rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:405
+#: qcsrc/common/notifications.qh:417
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Racer explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:406
+#: qcsrc/common/notifications.qh:418
 #, c-format
 msgid "^BG%s^K1 couldn't find shelter from a Racer rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:407
+#: qcsrc/common/notifications.qh:419
 #, c-format
 msgid "^BG%s^K1 was in the wrong place%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:408
+#: qcsrc/common/notifications.qh:420
 #, c-format
 msgid "^BG%s^K1 was betrayed by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:409
+#: qcsrc/common/notifications.qh:421
 #, c-format
 msgid "^BG%s^K1 was frozen by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:410
+#: qcsrc/common/notifications.qh:422
 #, c-format
 msgid "^BG%s^K3 was revived by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:411
+#: qcsrc/common/notifications.qh:423
 #, c-format
 msgid "^BG%s^K3 was revived by falling"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:412
+#: qcsrc/common/notifications.qh:424
 #, c-format
 msgid "^BG%s^K3 was automatically revived after %s second(s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:413 qcsrc/common/notifications.qh:594
+#: qcsrc/common/notifications.qh:425 qcsrc/common/notifications.qh:612
 msgid "^TC^TT^BG team wins the round"
 msgstr "^TC^TT^BG команда выиграла этот раунд"
 
-#: qcsrc/common/notifications.qh:414 qcsrc/common/notifications.qh:595
+#: qcsrc/common/notifications.qh:426 qcsrc/common/notifications.qh:613
 #, c-format
 msgid "^BG%s^BG wins the round"
 msgstr "^BG%s^BG выиграл этот раунд"
 
-#: qcsrc/common/notifications.qh:415 qcsrc/common/notifications.qh:524
+#: qcsrc/common/notifications.qh:427 qcsrc/common/notifications.qh:542
 msgid "^BGRound tied"
 msgstr "^BGНичья"
 
-#: qcsrc/common/notifications.qh:416 qcsrc/common/notifications.qh:525
+#: qcsrc/common/notifications.qh:428 qcsrc/common/notifications.qh:543
 msgid "^BGRound over, there's no winner"
 msgstr "^BGРаунд окончен, победитель не определён"
 
-#: qcsrc/common/notifications.qh:417
+#: qcsrc/common/notifications.qh:429
 #, c-format
 msgid "^BG%s^K1 froze themself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:418
+#: qcsrc/common/notifications.qh:430
 #, c-format
 msgid "^BGGodmode saved you %s units of damage, cheater!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:419 qcsrc/common/notifications.qh:598
+#: qcsrc/common/notifications.qh:431 qcsrc/common/notifications.qh:616
 #, c-format
 msgid "^BGYou do not have the ^F1%s"
 msgstr "^BGУ вас отсутствует ^F1%s"
 
-#: qcsrc/common/notifications.qh:420 qcsrc/common/notifications.qh:599
+#: qcsrc/common/notifications.qh:432 qcsrc/common/notifications.qh:617
 #, c-format
 msgid "^BGYou dropped the ^F1%s^BG%s"
 msgstr "^BGВы выбросили ^F1%s^BG%s"
 
-#: qcsrc/common/notifications.qh:421 qcsrc/common/notifications.qh:600
+#: qcsrc/common/notifications.qh:433 qcsrc/common/notifications.qh:618
 #, c-format
 msgid "^BGYou got the ^F1%s"
 msgstr "^BGВы подобрали ^F1%s"
 
-#: qcsrc/common/notifications.qh:422 qcsrc/common/notifications.qh:601
+#: qcsrc/common/notifications.qh:434 qcsrc/common/notifications.qh:619
 #, c-format
 msgid "^BGYou don't have enough ammo for the ^F1%s"
 msgstr "^BGУ вас недостаточно патронов для ^F1%s"
 
-#: qcsrc/common/notifications.qh:423 qcsrc/common/notifications.qh:602
+#: qcsrc/common/notifications.qh:435 qcsrc/common/notifications.qh:620
 #, c-format
 msgid "^F1%s %s^BG is unable to fire, but its ^F1%s^BG can"
 msgstr "^F1%s %s^BG режим огня невозможен, но вы можете использовать ^F1%s^BG"
 
-#: qcsrc/common/notifications.qh:424 qcsrc/common/notifications.qh:603
+#: qcsrc/common/notifications.qh:436 qcsrc/common/notifications.qh:621
 #, c-format
 msgid "^F1%s^BG is ^F4not available^BG on this map"
 msgstr "^F1%s^BG ^F4отсутствует^BG на этой карте"
 
-#: qcsrc/common/notifications.qh:425
+#: qcsrc/common/notifications.qh:437
 #, c-format
 msgid "^BG%s^F3 connected%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:426
+#: qcsrc/common/notifications.qh:438
 #, c-format
 msgid "^BG%s^F3 connected and joined the ^TC^TT team"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:427
+#: qcsrc/common/notifications.qh:439
 #, c-format
 msgid "^BG%s^F3 is now playing"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:428 qcsrc/common/notifications.qh:606
+#: qcsrc/common/notifications.qh:440 qcsrc/common/notifications.qh:624
 #, c-format
 msgid "^BG%s^BG has dropped the ball!"
 msgstr "^BG%s^BG Потерял мяч!"
 
-#: qcsrc/common/notifications.qh:429 qcsrc/common/notifications.qh:607
+#: qcsrc/common/notifications.qh:441 qcsrc/common/notifications.qh:625
 #, c-format
 msgid "^BG%s^BG has picked up the ball!"
 msgstr "^BG%s^BG Завладел мячом!"
 
-#: qcsrc/common/notifications.qh:430
+#: qcsrc/common/notifications.qh:442
 #, c-format
 msgid "^BG%s^BG captured the keys for the ^TC^TT team"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:431
+#: qcsrc/common/notifications.qh:443
 #, c-format
 msgid "^BG%s^BG dropped the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:432
+#: qcsrc/common/notifications.qh:444
 #, c-format
 msgid "^BG%s^BG lost the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:433
+#: qcsrc/common/notifications.qh:445
 #, c-format
 msgid "^BG%s^BG picked up the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:434
+#: qcsrc/common/notifications.qh:446
 #, c-format
 msgid "^BG%s^F3 forfeited"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:435
+#: qcsrc/common/notifications.qh:447
 #, c-format
 msgid "^BG%s^F3 has no more lives left"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:436
+#: qcsrc/common/notifications.qh:448
 #, c-format
 msgid "^BG%s^K1 picked up Invisibility"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:437
+#: qcsrc/common/notifications.qh:449
 #, c-format
 msgid "^BG%s^K1 picked up Shield"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:438
+#: qcsrc/common/notifications.qh:450
 #, c-format
 msgid "^BG%s^K1 picked up Speed"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:439
+#: qcsrc/common/notifications.qh:451
 #, c-format
 msgid "^BG%s^K1 picked up Strength"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:440
+#: qcsrc/common/notifications.qh:452
 #, c-format
 msgid "^BG%s^F3 disconnected"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:441
+#: qcsrc/common/notifications.qh:453
 #, c-format
 msgid "^BG%s^F3 was kicked for idling"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:442
+#: qcsrc/common/notifications.qh:454
 msgid ""
 "^F2You were kicked from the server because you are a spectator and "
 "spectators aren't allowed at the moment."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:443
+#: qcsrc/common/notifications.qh:455
 #, c-format
 msgid "^BG%s^F3 is now spectating"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:444
+#: qcsrc/common/notifications.qh:456
 #, c-format
 msgid "^BG%s^BG has abandoned the race"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:445
+#: qcsrc/common/notifications.qh:457
 #, c-format
 msgid "^BG%s^BG couldn't break their %s%s^BG place record of %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:446
+#: qcsrc/common/notifications.qh:458
 #, c-format
 msgid "^BG%s^BG couldn't break the %s%s^BG place record of %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:447
+#: qcsrc/common/notifications.qh:459
 #, c-format
 msgid "^BG%s^BG has finished the race"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:448
+#: qcsrc/common/notifications.qh:460
 #, c-format
 msgid "^BG%s^BG broke %s^BG's %s%s^BG place record with %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:449
+#: qcsrc/common/notifications.qh:461
 #, c-format
 msgid "^BG%s^BG improved their %s%s^BG place record with %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:450
+#: qcsrc/common/notifications.qh:462
 #, c-format
 msgid ""
 "^BG%s^BG scored a new record with ^F2%s^BG, but unfortunately lacks a UID "
 "and will be lost."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:451
+#: qcsrc/common/notifications.qh:463
 #, c-format
 msgid "^BG%s^BG set the %s%s^BG place record with %s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:452
+#: qcsrc/common/notifications.qh:464
 msgid "^TC^TT ^BGteam scores!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:453
+#: qcsrc/common/notifications.qh:465
 #, 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 ""
 
-#: qcsrc/common/notifications.qh:454
+#: qcsrc/common/notifications.qh:466
 #, c-format
 msgid "^BG%s^K1 picked up a Superweapon"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:455
+#: qcsrc/common/notifications.qh:467
 #, c-format
 msgid ""
 "^F4NOTE: ^BGThe server is running ^F1Xonotic %s (beta)^BG, you have "
 "^F2Xonotic %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:456
+#: qcsrc/common/notifications.qh:468
 #, c-format
 msgid ""
 "^F4NOTE: ^BGThe server is running ^F1Xonotic %s^BG, you have ^F2Xonotic %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:457
+#: qcsrc/common/notifications.qh:469
 #, c-format
 msgid ""
 "^F4NOTE: ^F1Xonotic %s^BG is out, and you still have ^F2Xonotic %s^BG - get "
 "the update from ^F3http://www.xonotic.org/^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:458
+#: qcsrc/common/notifications.qh:470
 #, c-format
 msgid "^F3SVQC Build information: ^F4%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:459
+#: qcsrc/common/notifications.qh:471
 #, c-format
 msgid ""
 "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Accordeon%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:460
+#: qcsrc/common/notifications.qh:472
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Accordeon%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:461
+#: qcsrc/common/notifications.qh:473
 #, c-format
 msgid "^BG%s%s^K1 felt the strong pull of ^BG%s^K1's Crylink%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:462
+#: qcsrc/common/notifications.qh:474
 #, c-format
 msgid "^BG%s^K1 felt the strong pull of their Crylink%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:463
+#: qcsrc/common/notifications.qh:475
 #, c-format
 msgid "^BG%s%s^K1 was blasted by ^BG%s^K1's Electro bolt%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:464
+#: qcsrc/common/notifications.qh:476
 #, c-format
 msgid "^BG%s%s^K1 felt the electrifying air of ^BG%s^K1's Electro combo%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:465
+#: qcsrc/common/notifications.qh:477
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Electro plasma%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:466
+#: qcsrc/common/notifications.qh:478
 #, c-format
 msgid "^BG%s^K1 played with Electro plasma%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:467
+#: qcsrc/common/notifications.qh:479
 #, c-format
 msgid "^BG%s^K1 could not remember where they put their Electro plasma%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:468
+#: qcsrc/common/notifications.qh:480
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's fireball%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:469
+#: qcsrc/common/notifications.qh:481
 #, c-format
 msgid "^BG%s%s^K1 got burnt by ^BG%s^K1's firemine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:470
+#: qcsrc/common/notifications.qh:482
 #, c-format
 msgid "^BG%s^K1 should have used a smaller gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:471
+#: qcsrc/common/notifications.qh:483
 #, c-format
 msgid "^BG%s^K1 forgot about their firemine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:472
+#: qcsrc/common/notifications.qh:484
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by a burst of ^BG%s^K1's Hagar rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:473
+#: qcsrc/common/notifications.qh:485
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Hagar rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:474
+#: qcsrc/common/notifications.qh:486
 #, c-format
 msgid "^BG%s^K1 played with tiny Hagar rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:475
+#: qcsrc/common/notifications.qh:487
 #, c-format
 msgid "^BG%s%s^K1 was cut down with ^BG%s^K1's HLAC%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:476
+#: qcsrc/common/notifications.qh:488
 #, c-format
 msgid "^BG%s^K1 got a little jumpy with their HLAC%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:477
+#: qcsrc/common/notifications.qh:489
 #, c-format
 msgid "^BG%s%s^K1 was caught in ^BG%s^K1's Hook gravity bomb%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:478
+#: qcsrc/common/notifications.qh:490
 #, c-format
 msgid ""
 "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Klein Bottle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:479
+#: qcsrc/common/notifications.qh:491
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Klein Bottle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:480
+#: qcsrc/common/notifications.qh:492
 #, c-format
 msgid "^BG%s%s^K1 was shot to death by ^BG%s^K1's Laser%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:481
+#: qcsrc/common/notifications.qh:493
 #, c-format
 msgid "^BG%s^K1 shot themself to hell with their Laser%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:482
+#: qcsrc/common/notifications.qh:494
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's mine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:483
+#: qcsrc/common/notifications.qh:495
 #, c-format
 msgid "^BG%s^K1 forgot about their mine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:484
+#: qcsrc/common/notifications.qh:496
 #, c-format
 msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Minstanex%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:485
+#: qcsrc/common/notifications.qh:497
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Mortar grenade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:486
+#: qcsrc/common/notifications.qh:498
 #, c-format
 msgid "^BG%s%s^K1 ate ^BG%s^K1's Mortar grenade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:487
+#: qcsrc/common/notifications.qh:499
 #, c-format
 msgid "^BG%s^K1 didn't see their own Mortar grenade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:488
+#: qcsrc/common/notifications.qh:500
 #, c-format
 msgid "^BG%s^K1 blew themself up with their own Mortar%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:489
+#: qcsrc/common/notifications.qh:501
 #, c-format
 msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Nex%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:490
+#: qcsrc/common/notifications.qh:502
 #, c-format
 msgid "^BG%s%s^K1 was sniped with a Rifle by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:491
+#: qcsrc/common/notifications.qh:503
 #, c-format
 msgid "^BG%s%s^K1 died in ^BG%s^K1's Rifle bullet hail%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:492
+#: qcsrc/common/notifications.qh:504
 #, c-format
 msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle bullet hail%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:493
+#: qcsrc/common/notifications.qh:505
 #, c-format
 msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:494
+#: qcsrc/common/notifications.qh:506
 #, c-format
 msgid "^BG%s%s^K1 ate ^BG%s^K1's rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:495
+#: qcsrc/common/notifications.qh:507
 #, c-format
 msgid "^BG%s%s^K1 got too close ^BG%s^K1's rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:496
+#: qcsrc/common/notifications.qh:508
 #, c-format
 msgid "^BG%s^K1 blew themself up with their Rocketlauncher%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:497
+#: qcsrc/common/notifications.qh:509
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Seeker rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:498
+#: qcsrc/common/notifications.qh:510
 #, c-format
 msgid "^BG%s%s^K1 was tagged by ^BG%s^K1's Seeker%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:499
+#: qcsrc/common/notifications.qh:511
 #, c-format
 msgid "^BG%s^K1 played with tiny Seeker rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:500
+#: qcsrc/common/notifications.qh:512
 #, c-format
 msgid "^BG%s%s^K1 was gunned down by ^BG%s^K1's Shotgun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:501
+#: qcsrc/common/notifications.qh:513
 #, c-format
 msgid "^BG%s%s^K1 slapped ^BG%s^K1 around a bit with a large Shotgun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:502
+#: qcsrc/common/notifications.qh:514
 #, c-format
 msgid "^BG%s^K1 is now thinking with portals%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:503
+#: qcsrc/common/notifications.qh:515
 #, c-format
 msgid "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Tuba%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:504
+#: qcsrc/common/notifications.qh:516
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Tuba%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:505
+#: qcsrc/common/notifications.qh:517
 #, c-format
 msgid "^BG%s%s^K1 was sniped by ^BG%s^K1's Machine Gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:506
+#: qcsrc/common/notifications.qh:518
 #, c-format
 msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:518
+#: qcsrc/common/notifications.qh:536
 msgid "^BGYou are attacking!"
 msgstr "^BGВы атакуете!"
 
-#: qcsrc/common/notifications.qh:519
+#: qcsrc/common/notifications.qh:537
 msgid "^BGYou are defending!"
 msgstr "^BGВы защищаете!"
 
-#: qcsrc/common/notifications.qh:520
+#: qcsrc/common/notifications.qh:538
 msgid "^F4Begin!"
 msgstr "^F4Начали!"
 
-#: qcsrc/common/notifications.qh:521
+#: qcsrc/common/notifications.qh:539
 msgid "^F4Game starts in ^COUNT"
 msgstr "^F4Игра начнётся через ^COUNT"
 
-#: qcsrc/common/notifications.qh:522
+#: qcsrc/common/notifications.qh:540
 msgid "^F4Round starts in ^COUNT"
 msgstr "^F4Раунд не может быть начат"
 
-#: qcsrc/common/notifications.qh:523
+#: qcsrc/common/notifications.qh:541
 msgid "^F4Round cannot start"
 msgstr "^F4Раунд не может быть начат"
 
-#: qcsrc/common/notifications.qh:526
+#: qcsrc/common/notifications.qh:544
 msgid "^F2Don't camp!"
 msgstr "^F2Не кемперите!"
 
-#: qcsrc/common/notifications.qh:527
+#: qcsrc/common/notifications.qh:545
 msgid ""
 "^BGYou are now free.\n"
 "^BGFeel free to ^F2try to capture^BG the flag again\n"
@@ -2277,7 +2277,7 @@ msgstr ""
 "^BGВы можете ^F2попробовать захватить^BG флаг снова,\n"
 "^BGесли вы уверены в своих силах."
 
-#: qcsrc/common/notifications.qh:528
+#: qcsrc/common/notifications.qh:546
 msgid ""
 "^BGYou are now ^F1shielded^BG from the flag\n"
 "^BGfor ^F2too many unsuccessful attempts^BG to capture.\n"
@@ -2287,163 +2287,163 @@ msgstr ""
 "^BGтак как вы^F2провалили множество попыток^BG захватить его.\n"
 "^BGПрежде чем попытаться снова, вы должны заработать очки в защите."
 
-#: qcsrc/common/notifications.qh:529
+#: qcsrc/common/notifications.qh:547
 msgid "^BGYou captured the ^TC^TT^BG flag!"
 msgstr "^BGВы захватили ^TC^TT^BG флаг!"
 
-#: qcsrc/common/notifications.qh:530
+#: qcsrc/common/notifications.qh:548
 #, c-format
 msgid "^BGToo many flag throws! Throwing disabled for %s."
 msgstr "^BGВы бросали флаг слишком часто! Бросить снова можно будет через %s."
 
-#: qcsrc/common/notifications.qh:531
+#: qcsrc/common/notifications.qh:549
 #, c-format
 msgid "^BG%s^BG passed the ^TC^TT^BG flag to %s"
 msgstr "^BG%s^BG передал ^TC^TT^BG флаг %s"
 
-#: qcsrc/common/notifications.qh:532
+#: qcsrc/common/notifications.qh:550
 #, c-format
 msgid "^BGYou received the ^TC^TT^BG flag from %s"
 msgstr "^BGВы получили ^TC^TT^BG флаг от %s"
 
-#: qcsrc/common/notifications.qh:533
+#: qcsrc/common/notifications.qh:551
 #, c-format
 msgid "^BG%s^BG requests you to pass the flag%s"
 msgstr "^BG%s^BG просит вас передать флаг%s"
 
-#: qcsrc/common/notifications.qh:534
+#: qcsrc/common/notifications.qh:552
 #, c-format
 msgid "^BGRequesting %s^BG to pass you the flag"
 msgstr "^BGВы просите %s^BG передать вам флаг"
 
-#: qcsrc/common/notifications.qh:535
+#: qcsrc/common/notifications.qh:553
 #, c-format
 msgid "^BGYou passed the ^TC^TT^BG flag to %s"
 msgstr "^BGВы передали ^TC^TT^BG флаг %s"
 
-#: qcsrc/common/notifications.qh:536
+#: qcsrc/common/notifications.qh:554
 msgid "^BGYou got the ^TC^TT^BG flag!"
 msgstr "^BGВы забрали ^TC^TT^BG флаг!"
 
-#: qcsrc/common/notifications.qh:537
+#: qcsrc/common/notifications.qh:555
 #, c-format
 msgid "^BGThe %senemy^BG got your flag! Retrieve it!"
 msgstr "^BG%sпротивник^BG забрал ваш флаг! Верните его!"
 
-#: qcsrc/common/notifications.qh:538
+#: qcsrc/common/notifications.qh:556
 #, c-format
 msgid "^BGThe %senemy (^BG%s%s)^BG got your flag! Retrieve it!"
 msgstr "^BG%sпротивник (^BG%s%s)^BG забрал ваш флаг! Верните его!"
 
-#: qcsrc/common/notifications.qh:539
+#: qcsrc/common/notifications.qh:557
 #, c-format
 msgid "^BGYour %steam mate^BG got the flag! Protect them!"
 msgstr "^BGВаш %sтоварищ по команде^BG заполучил флаг! Защищайте его!"
 
-#: qcsrc/common/notifications.qh:540
+#: qcsrc/common/notifications.qh:558
 #, c-format
 msgid "^BGYour %steam mate (^BG%s%s)^BG got the flag! Protect them!"
 msgstr ""
 "^BGВаш %sтоварищ по команде (^BG%s%s)^BG заполучил флаг! Защищайте его!"
 
-#: qcsrc/common/notifications.qh:541
+#: qcsrc/common/notifications.qh:559
 msgid "^BGYou returned the ^TC^TT^BG flag!"
 msgstr "^BGВы вернули ^TC^TT^BG флаг!"
 
-#: qcsrc/common/notifications.qh:542
+#: qcsrc/common/notifications.qh:560
 msgid "^BGStalemate! Enemies can now see you on radar!"
 msgstr "^BGПат! Теперь противники могут видеть вас на карте!"
 
-#: qcsrc/common/notifications.qh:543
+#: qcsrc/common/notifications.qh:561
 msgid "^BGStalemate! Flag carriers can now be seen by enemies on radar!"
 msgstr ""
 "^BGПат! Теперь противники могут видет тех, кто забрал их флаг на карте!"
 
-#: qcsrc/common/notifications.qh:544
+#: qcsrc/common/notifications.qh:562
 #, c-format
 msgid "^K3%sYou fragged ^BG%s"
 msgstr "^K3%sВы убили ^BG%s"
 
-#: qcsrc/common/notifications.qh:544
+#: qcsrc/common/notifications.qh:562
 #, c-format
 msgid "^K3%sYou scored against ^BG%s"
 msgstr "^K3%sВы отыграли очко у ^BG%s"
 
-#: qcsrc/common/notifications.qh:545
+#: qcsrc/common/notifications.qh:563
 #, c-format
 msgid "^K1%sYou were fragged by ^BG%s"
 msgstr "^K1%sВы были убиты ^BG%s"
 
-#: qcsrc/common/notifications.qh:545
+#: qcsrc/common/notifications.qh:563
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s"
 msgstr "^K1%sВы проиграли очко ^BG%s"
 
-#: qcsrc/common/notifications.qh:546
+#: qcsrc/common/notifications.qh:564
 #, c-format
 msgid "^K1%sYou were fragged by ^BG%s^BG%s"
 msgstr "^K1%sВы были убиты ^BG%s^BG%s"
 
-#: qcsrc/common/notifications.qh:546
+#: qcsrc/common/notifications.qh:564
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^BG%s"
 msgstr "^K1%sВы проиграли очко ^BG%s^BG%s"
 
-#: qcsrc/common/notifications.qh:547
+#: qcsrc/common/notifications.qh:565
 #, c-format
 msgid "^K3%sYou fragged ^BG%s^BG%s"
 msgstr "^K3%sВы убили ^BG%s^BG%s"
 
-#: qcsrc/common/notifications.qh:547
+#: qcsrc/common/notifications.qh:565
 #, c-format
 msgid "^K3%sYou scored against ^BG%s^BG%s"
 msgstr "^K3%sВы отыграли очко у ^BG%s^BG%s"
 
-#: qcsrc/common/notifications.qh:548
+#: qcsrc/common/notifications.qh:566
 #, c-format
 msgid "^K1%sYou scored against ^BG%s^K1 while they were typing"
 msgstr "^K1%sВы отыграли очко у ^BG%s^K1 пока они писали"
 
-#: qcsrc/common/notifications.qh:548
+#: qcsrc/common/notifications.qh:566
 #, c-format
 msgid "^K1%sYou typefragged ^BG%s"
 msgstr "^K1%sВы убили ^BG%s ^BGпока он писал"
 
-#: qcsrc/common/notifications.qh:549
+#: qcsrc/common/notifications.qh:567
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^K1 while typing!"
 msgstr "^K1%sВы проиграли очко ^BG%s^K1 пока писали!"
 
-#: qcsrc/common/notifications.qh:549
+#: qcsrc/common/notifications.qh:567
 #, c-format
 msgid "^K1%sYou were typefragged by ^BG%s"
 msgstr "^K1%sПока вы писали, вас убил ^BG%s"
 
-#: qcsrc/common/notifications.qh:550
+#: qcsrc/common/notifications.qh:568
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^K1 while typing^BG%s"
 msgstr "^K1%sВы проиграли очко ^BG%s^K1 пока писали^BG%s"
 
-#: qcsrc/common/notifications.qh:550
+#: qcsrc/common/notifications.qh:568
 #, c-format
 msgid "^K1%sYou were typefragged by ^BG%s^BG%s"
 msgstr "^K1%sПока вы писали, вас убил ^BG%s^BG%s"
 
-#: qcsrc/common/notifications.qh:551
+#: qcsrc/common/notifications.qh:569
 #, c-format
 msgid "^K1%sYou scored against ^BG%s^K1 while they were typing^BG%s"
 msgstr "^K1%sВы убили ^BG%s^K1 пока они писали^BG%s"
 
-#: qcsrc/common/notifications.qh:551
+#: qcsrc/common/notifications.qh:569
 #, c-format
 msgid "^K1%sYou typefragged ^BG%s^BG%s"
 msgstr "^K1%sВы убили ^BG%s^BG%s пока он писал"
 
-#: qcsrc/common/notifications.qh:552
+#: qcsrc/common/notifications.qh:570
 msgid "^BGPress ^F2DROPWEAPON^BG again to toss the nade!"
 msgstr "^BGНажмите кнопку ^F2БРОСИТЬ ОРУЖИЕ^BG снова чтобы бросить гранату!"
 
-#: qcsrc/common/notifications.qh:553
+#: qcsrc/common/notifications.qh:571
 #, c-format
 msgid ""
 "^BGYou have been moved into a different team\n"
@@ -2452,193 +2452,193 @@ msgstr ""
 "^BGВы были перемещены в другую команду\n"
 "Теперь вы в: %s"
 
-#: qcsrc/common/notifications.qh:554
+#: qcsrc/common/notifications.qh:572
 msgid "^K1Don't go against your team mates!"
 msgstr "^K1Не убивайте товарищей по команде!"
 
-#: qcsrc/common/notifications.qh:554
+#: qcsrc/common/notifications.qh:572
 msgid "^K1Don't shoot your team mates!"
 msgstr "^K1Не стреляйте в своих товарищей по команде!"
 
-#: qcsrc/common/notifications.qh:555
+#: qcsrc/common/notifications.qh:573
 msgid "^K1Die camper!"
 msgstr "^K1Умри, кемпер!"
 
-#: qcsrc/common/notifications.qh:555
+#: qcsrc/common/notifications.qh:573
 msgid "^K1Reconsider your tactics, camper!"
 msgstr "^K1Хорошо подумай над своей тактикой, кемпер!"
 
-#: qcsrc/common/notifications.qh:556
+#: qcsrc/common/notifications.qh:574
 msgid "^K1You unfairly eliminated yourself!"
 msgstr "^K1Вы коварно самоликвидировались !"
 
-#: qcsrc/common/notifications.qh:557
+#: qcsrc/common/notifications.qh:575
 #, c-format
 msgid "^K1You were %s"
 msgstr "^K1Вы были %s"
 
-#: qcsrc/common/notifications.qh:558
+#: qcsrc/common/notifications.qh:576
 msgid "^K1You couldn't catch your breath!"
 msgstr "^K1Вы не смогли отдышаться!"
 
-#: qcsrc/common/notifications.qh:559
+#: qcsrc/common/notifications.qh:577
 msgid "^K1You hit the ground with a crunch!"
 msgstr "^K1Вас с хрустом расплющило по земле!"
 
-#: qcsrc/common/notifications.qh:560
+#: qcsrc/common/notifications.qh:578
 msgid "^K1You felt a little too hot!"
 msgstr "^K1Вам немного жарковато!"
 
-#: qcsrc/common/notifications.qh:560
+#: qcsrc/common/notifications.qh:578
 msgid "^K1You got a little bit too crispy!"
 msgstr "^K1Кажется, вы немного хрустите!"
 
-#: qcsrc/common/notifications.qh:561
+#: qcsrc/common/notifications.qh:579
 msgid "^K1You killed your own dumb self!"
 msgstr "^K1Вы совершили бессмысленное самоубийство!"
 
-#: qcsrc/common/notifications.qh:561
+#: qcsrc/common/notifications.qh:579
 msgid "^K1You need to be more careful!"
 msgstr "^K1Вам нужно быть поосторожнее!"
 
-#: qcsrc/common/notifications.qh:562
+#: qcsrc/common/notifications.qh:580
 msgid "^K1You couldn't stand the heat!"
 msgstr "^K1У вас нет сил терпеть такой жар!"
 
-#: qcsrc/common/notifications.qh:563
+#: qcsrc/common/notifications.qh:581
 msgid "^K1Tastes like chicken!"
 msgstr "^K1На вкус как цыплёнок!"
 
-#: qcsrc/common/notifications.qh:563
+#: qcsrc/common/notifications.qh:581
 msgid "^K1You forgot to put the pin back in!"
 msgstr "^K1Вы забыли вставить чеку обратно в гранату!"
 
-#: qcsrc/common/notifications.qh:564
+#: qcsrc/common/notifications.qh:582
 msgid "^K1You are respawning for running out of ammo..."
 msgstr "^K1Вы будете перерождены, так как у вас закончились патроны..."
 
-#: qcsrc/common/notifications.qh:564
+#: qcsrc/common/notifications.qh:582
 msgid "^K1You were killed for running out of ammo..."
 msgstr "^K1Вы были убиты за то, что у вас кончились патроны..."
 
-#: qcsrc/common/notifications.qh:565
+#: qcsrc/common/notifications.qh:583
 msgid "^K1You grew too old without taking your medicine"
 msgstr "^K1Вы прожили слишком долго, для человека не принимающего лекарств"
 
-#: qcsrc/common/notifications.qh:565
+#: qcsrc/common/notifications.qh:583
 msgid "^K1You need to preserve your health"
 msgstr "^K1Берегите своё здоровье"
 
-#: qcsrc/common/notifications.qh:566
+#: qcsrc/common/notifications.qh:584
 msgid "^K1You became a shooting star!"
 msgstr "^K1Вы окочурились!"
 
-#: qcsrc/common/notifications.qh:567
+#: qcsrc/common/notifications.qh:585
 msgid "^K1You melted away in slime!"
 msgstr "^K1Вас растворило в слизи!"
 
-#: qcsrc/common/notifications.qh:568
+#: qcsrc/common/notifications.qh:586
 msgid "^K1You committed suicide!"
 msgstr "^K1Вы совершили самоубийство!"
 
-#: qcsrc/common/notifications.qh:568
+#: qcsrc/common/notifications.qh:586
 msgid "^K1You ended it all!"
 msgstr "^K1Вы расстались с жизнью!"
 
-#: qcsrc/common/notifications.qh:569
+#: qcsrc/common/notifications.qh:587
 msgid "^K1You got stuck in a swamp!"
 msgstr "^K1Вы застряли в болоте!"
 
-#: qcsrc/common/notifications.qh:570
+#: qcsrc/common/notifications.qh:588
 #, c-format
 msgid "^BGYou are now on: %s"
 msgstr "^BGСейчас вы на: %s"
 
-#: qcsrc/common/notifications.qh:571
+#: qcsrc/common/notifications.qh:589
 msgid "^K1You died in an accident!"
 msgstr "^K1ВЫ погибли в результате несчастного случая!"
 
-#: qcsrc/common/notifications.qh:572
+#: qcsrc/common/notifications.qh:590
 msgid "^K1You had an unfortunate run in with a turret!"
 msgstr "^K1Ваша встреча с турелью закончилась неудачно!"
 
-#: qcsrc/common/notifications.qh:572
+#: qcsrc/common/notifications.qh:590
 msgid "^K1You were fragged by a turret!"
 msgstr "^K1Вы были убиты турелью!"
 
-#: qcsrc/common/notifications.qh:573
+#: qcsrc/common/notifications.qh:591
 msgid "^K1You had an unfortunate run in with an eWheel turret!"
 msgstr "^K1Ваша встреча с турелью eWheel закончилась неудачно!"
 
-#: qcsrc/common/notifications.qh:573
+#: qcsrc/common/notifications.qh:591
 msgid "^K1You were fragged by an eWheel turret!"
 msgstr "^K1Вы были убиты турелью eWheel!"
 
-#: qcsrc/common/notifications.qh:574
+#: qcsrc/common/notifications.qh:592
 msgid "^K1You had an unfortunate run in with a Walker turret!"
 msgstr "^K1Ваша встреча с турелью Walker закончилась неудачно!"
 
-#: qcsrc/common/notifications.qh:574
+#: qcsrc/common/notifications.qh:592
 msgid "^K1You were fragged by a Walker turret!"
 msgstr "^K1Вы были убиты турелью Walker!"
 
-#: qcsrc/common/notifications.qh:575
+#: qcsrc/common/notifications.qh:593
 msgid "^K1You got caught in the blast of a Bumblebee explosion!"
 msgstr "^K1Вас задело взрывной волной от Bumblebee!"
 
-#: qcsrc/common/notifications.qh:576
+#: qcsrc/common/notifications.qh:594
 msgid "^K1You were crushed by a vehicle!"
 msgstr "^K1Вы были раздавлены весом тяжёлой машины!"
 
-#: qcsrc/common/notifications.qh:577
+#: qcsrc/common/notifications.qh:595
 msgid "^K1You were caught in a Raptor cluster bomb!"
 msgstr "^K1Вас накрыло кассетными бомбами с Raptor'а!"
 
-#: qcsrc/common/notifications.qh:578
+#: qcsrc/common/notifications.qh:596
 msgid "^K1You got caught in the blast of a Raptor explosion!"
 msgstr "^K1Вас задело взрывной волной от Raptor'a!"
 
-#: qcsrc/common/notifications.qh:579
+#: qcsrc/common/notifications.qh:597
 msgid "^K1You got caught in the blast of a Spiderbot explosion!"
 msgstr "^K1Вас задело взрывной волной от Spiderbot'a!"
 
-#: qcsrc/common/notifications.qh:580
+#: qcsrc/common/notifications.qh:598
 msgid "^K1You were blasted to bits by a Spiderbot rocket!"
 msgstr "^K1Ракета Spiderbot'а порвала вас на мелкие кусочки!"
 
-#: qcsrc/common/notifications.qh:581
+#: qcsrc/common/notifications.qh:599
 msgid "^K1You got caught in the blast of a Racer explosion!"
 msgstr "^K1Вас задело взрывной волной от Racer'а!"
 
-#: qcsrc/common/notifications.qh:582
+#: qcsrc/common/notifications.qh:600
 msgid "^K1You couldn't find shelter from a Racer rocket!"
 msgstr "^K1Вы не смогли укрыться от ракеты Racer'а!"
 
-#: qcsrc/common/notifications.qh:583
+#: qcsrc/common/notifications.qh:601
 msgid "^K1Watch your step!"
 msgstr "^K1Смотри куда идёшь!"
 
-#: qcsrc/common/notifications.qh:584
+#: qcsrc/common/notifications.qh:602
 #, c-format
 msgid "^K1Moron! You fragged ^BG%s^K1, a team mate!"
 msgstr "^K1Кретин! Ты убил ^BG%s^K1, своего товарища по команде!"
 
-#: qcsrc/common/notifications.qh:584
+#: qcsrc/common/notifications.qh:602
 #, c-format
 msgid "^K1Moron! You went against ^BG%s^K1, a team mate!"
 msgstr "^K1Кретин! Ты напал на ^BG%s^K1, своего товарища по команде!"
 
-#: qcsrc/common/notifications.qh:585
+#: qcsrc/common/notifications.qh:603
 #, c-format
 msgid "^K1You were fragged by ^BG%s^K1, a team mate"
 msgstr "^K1Вы были убиты ^BG%s^K1, вашим товарищем по команде"
 
-#: qcsrc/common/notifications.qh:585
+#: qcsrc/common/notifications.qh:603
 #, c-format
 msgid "^K1You were scored against by ^BG%s^K1, a team mate"
 msgstr "^K1Вы проиграли очко ^BG%s^K1, своему товарищу по команде"
 
-#: qcsrc/common/notifications.qh:586
+#: qcsrc/common/notifications.qh:604
 msgid ""
 "^K1Stop idling!\n"
 "^BGDisconnecting in ^COUNT..."
@@ -2646,48 +2646,48 @@ msgstr ""
 "^K1Хватит бездельничать!\n"
 "^BGРассоединение через ^COUNT..."
 
-#: qcsrc/common/notifications.qh:587
+#: qcsrc/common/notifications.qh:605
 msgid "^F2You picked up some extra lives"
 msgstr "^F2Вы подобрали несколько дополнительных жизней"
 
-#: qcsrc/common/notifications.qh:588
+#: qcsrc/common/notifications.qh:606
 #, c-format
 msgid "^K3You froze ^BG%s"
 msgstr "^K3Вы заморозили ^BG%s"
 
-#: qcsrc/common/notifications.qh:589
+#: qcsrc/common/notifications.qh:607
 #, c-format
 msgid "^K1You were frozen by ^BG%s"
 msgstr "^K1Вы были заморожены ^BG%s"
 
-#: qcsrc/common/notifications.qh:590
+#: qcsrc/common/notifications.qh:608
 #, c-format
 msgid "^K3You revived ^BG%s"
 msgstr "^K3Вы оживили ^BG%s"
 
-#: qcsrc/common/notifications.qh:591
+#: qcsrc/common/notifications.qh:609
 msgid "^K3You revived yourself"
 msgstr "^K3Вы оживили сами себя"
 
-#: qcsrc/common/notifications.qh:592
+#: qcsrc/common/notifications.qh:610
 #, c-format
 msgid "^K3You were revived by ^BG%s"
 msgstr "^K3Вы были оживлены ^BG%s"
 
-#: qcsrc/common/notifications.qh:593
+#: qcsrc/common/notifications.qh:611
 #, c-format
 msgid "^K3You were automatically revived after %s second(s)"
 msgstr "^K3Вы были автоматически оживлены после %s секунд(ы) ожидания"
 
-#: qcsrc/common/notifications.qh:596
+#: qcsrc/common/notifications.qh:614
 msgid "^K1You froze yourself"
 msgstr "^K1Вы заморозили сами себя"
 
-#: qcsrc/common/notifications.qh:597
+#: qcsrc/common/notifications.qh:615
 msgid "^K1Round already started, you spawn as frozen"
 msgstr "^K1Раунд уже начался, вы были возрождены замороженным"
 
-#: qcsrc/common/notifications.qh:604
+#: qcsrc/common/notifications.qh:622
 msgid ""
 "^K1No spawnpoints available!\n"
 "Hope your team can fix it..."
@@ -2695,7 +2695,7 @@ msgstr ""
 "^K1Вас негде возродить!\n"
 "Остаётся надеяться что ваша команда сможет это исправить..."
 
-#: qcsrc/common/notifications.qh:605
+#: qcsrc/common/notifications.qh:623
 msgid ""
 "^K1You may not join the game at this time.\n"
 "The player limit reached maximum capacity."
@@ -2703,11 +2703,11 @@ msgstr ""
 "^K1Вы не можете присоединиться к игре в данный момент.\n"
 "Превышено максимальное количество игроков."
 
-#: qcsrc/common/notifications.qh:608
+#: qcsrc/common/notifications.qh:626
 msgid "^BGKilling people while you don't have the ball gives no points!"
 msgstr "^BGПока мяч находится не у вас, вы очки за убийства не начисляются!"
 
-#: qcsrc/common/notifications.qh:609
+#: qcsrc/common/notifications.qh:627
 msgid ""
 "^BGAll keys are in your team's hands!\n"
 "Help the key carriers to meet!"
@@ -2715,7 +2715,7 @@ msgstr ""
 "^BGВсе ключи у членов вашей команды!\n"
 "Теперь вам нужно встретиться!"
 
-#: qcsrc/common/notifications.qh:610
+#: qcsrc/common/notifications.qh:628
 msgid ""
 "^BGAll keys are in ^TC^TT team^BG's hands!\n"
 "Interfere ^F4NOW^BG!"
@@ -2723,7 +2723,7 @@ msgstr ""
 "^BG^TC^TT команда^BG собрала все ключи!\n"
 "Помешайте им встретиться. ^F4БЫСТРО^BG!"
 
-#: qcsrc/common/notifications.qh:611
+#: qcsrc/common/notifications.qh:629
 msgid ""
 "^BGAll keys are in your team's hands!\n"
 "Meet the other key carriers ^F4NOW^BG!"
@@ -2731,19 +2731,19 @@ msgstr ""
 "^BGВсе ключи у членов вашей команды\n"
 "Встретьтесь с ними. ^F4БЫСТРО^BG!"
 
-#: qcsrc/common/notifications.qh:612
+#: qcsrc/common/notifications.qh:630
 msgid "^F4Round will start in ^COUNT"
 msgstr "^F4Раунд начнётся через ^COUNT"
 
-#: qcsrc/common/notifications.qh:613
+#: qcsrc/common/notifications.qh:631
 msgid "^BGScanning frequency range..."
 msgstr "^BGСканирование частотного диапазона..."
 
-#: qcsrc/common/notifications.qh:614
+#: qcsrc/common/notifications.qh:632
 msgid "^BGYou are starting with the ^TC^TT Key"
 msgstr "^BGВы держите ^TC^TT Ключ"
 
-#: qcsrc/common/notifications.qh:615 qcsrc/common/notifications.qh:616
+#: qcsrc/common/notifications.qh:633 qcsrc/common/notifications.qh:634
 #, c-format
 msgid ""
 "^BGWaiting for players to join...\n"
@@ -2752,38 +2752,38 @@ msgstr ""
 "^BGОжидание игроков...\n"
 "Активные игроки необходимы для: %s"
 
-#: qcsrc/common/notifications.qh:617
+#: qcsrc/common/notifications.qh:635
 #, c-format
 msgid "^BGWaiting for %s player(s) to join..."
 msgstr "^BGОжидаем присоединения %s игроков(а)..."
 
-#: qcsrc/common/notifications.qh:618
+#: qcsrc/common/notifications.qh:636
 msgid "^F4^COUNT^BG left to find some ammo!"
 msgstr "^F4^COUNT^BG осталось на поиск патронов!"
 
-#: qcsrc/common/notifications.qh:619
+#: qcsrc/common/notifications.qh:637
 msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
 msgstr "^BGНайдите патронов, иначе вы умрёте через ^F4^COUNT^BG!"
 
-#: qcsrc/common/notifications.qh:619
+#: qcsrc/common/notifications.qh:637
 msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
 msgstr "^BGРаздобудьте патронов! Осталось ^F4^COUNT^BG!"
 
-#: qcsrc/common/notifications.qh:620
+#: qcsrc/common/notifications.qh:638
 #, c-format
 msgid "^F2Extra lives remaining: ^K1%s"
 msgstr "^F2Осталось дополнительных жизней: ^K1%s"
 
-#: qcsrc/common/notifications.qh:621
+#: qcsrc/common/notifications.qh:639
 msgid "^BGSecondary fire inflicts no damage!"
 msgstr "^BGАльтернативный режим огня не наносит урона!"
 
-#: qcsrc/common/notifications.qh:622
+#: qcsrc/common/notifications.qh:640
 #, c-format
 msgid "^BG%s"
 msgstr "^BG%s"
 
-#: qcsrc/common/notifications.qh:623
+#: qcsrc/common/notifications.qh:641
 #, c-format
 msgid ""
 "^F2^COUNT^BG until weapon change...\n"
@@ -2792,16 +2792,16 @@ msgstr ""
 "^F2^COUNT^BG до смены оружия...\n"
 "Следующее оружие: ^F1%s"
 
-#: qcsrc/common/notifications.qh:624
+#: qcsrc/common/notifications.qh:642
 #, c-format
 msgid "^F2Active weapon: ^F1%s"
 msgstr "^F2Текущее оружие: ^F1%s"
 
-#: qcsrc/common/notifications.qh:625
+#: qcsrc/common/notifications.qh:643
 msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
 msgstr "^BGНажмите кнопку ^F2БРОСИТЬ ОРУЖИЕ^BG снова чтобы бросить гранату!"
 
-#: qcsrc/common/notifications.qh:626
+#: qcsrc/common/notifications.qh:644
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "Keep fragging until we have a winner!"
@@ -2809,7 +2809,7 @@ msgstr ""
 "^F2Продолжаем играть в ^F4ОВЕРТАЙМЕ^F2!\n"
 "Убивайте противников, пока не определится победитель!"
 
-#: qcsrc/common/notifications.qh:626
+#: qcsrc/common/notifications.qh:644
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "Keep scoring until we have a winner!"
@@ -2817,7 +2817,7 @@ msgstr ""
 "^F2Продолжаем играть в ^F4ОВЕРТАЙМЕ^F2!\n"
 "Зарабатывайте очки, пока не определится победитель!"
 
-#: qcsrc/common/notifications.qh:627
+#: qcsrc/common/notifications.qh:645
 #, c-format
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
@@ -2826,210 +2826,210 @@ msgstr ""
 "^F2Продолжаем играть в ^F4ОВЕРТАЙМЕ^F2!\n"
 "^BGК игровому времени добавлено ^F4%s^BG!"
 
-#: qcsrc/common/notifications.qh:628
+#: qcsrc/common/notifications.qh:646
 msgid "^F2Invisibility has worn off"
 msgstr "^F2Действие Невидимости закончилось"
 
-#: qcsrc/common/notifications.qh:629
+#: qcsrc/common/notifications.qh:647
 msgid "^F2Shield has worn off"
 msgstr "^F2Действие Щита закончилось"
 
-#: qcsrc/common/notifications.qh:630
+#: qcsrc/common/notifications.qh:648
 msgid "^F2Speed has worn off"
 msgstr "^F2Действие Скорости закончилось"
 
-#: qcsrc/common/notifications.qh:631
+#: qcsrc/common/notifications.qh:649
 msgid "^F2Strength has worn off"
 msgstr "^F2Действие Силы закончилось"
 
-#: qcsrc/common/notifications.qh:632
+#: qcsrc/common/notifications.qh:650
 msgid "^F2You are invisible"
 msgstr "^F2Вы невидимы"
 
-#: qcsrc/common/notifications.qh:633
+#: qcsrc/common/notifications.qh:651
 msgid "^F2Shield surrounds you"
 msgstr "^F2Вас окружает щит"
 
-#: qcsrc/common/notifications.qh:634
+#: qcsrc/common/notifications.qh:652
 msgid "^F2You are on speed"
 msgstr "^F2Ваша скорость передвижения повышена"
 
-#: qcsrc/common/notifications.qh:635
+#: qcsrc/common/notifications.qh:653
 msgid "^F2Strength infuses your weapons with devastating power"
 msgstr "^F2Сила придаёт разрушительную мощь вашему оружие"
 
-#: qcsrc/common/notifications.qh:636
+#: qcsrc/common/notifications.qh:654
 msgid "^F2The race is over, finish your lap!"
 msgstr "^F2Гонка окончена, завершите ваш круг!"
 
-#: qcsrc/common/notifications.qh:637
+#: qcsrc/common/notifications.qh:655
 msgid "^F2Superweapons have broken down"
 msgstr "^F2Супероружие разрушилось"
 
-#: qcsrc/common/notifications.qh:638
+#: qcsrc/common/notifications.qh:656
 msgid "^F2Superweapons have been lost"
 msgstr "^F2Супероружие потеряно"
 
-#: qcsrc/common/notifications.qh:639
+#: qcsrc/common/notifications.qh:657
 msgid "^F2You now have a superweapon"
 msgstr "^F2Вы получили супероружие"
 
-#: qcsrc/common/notifications.qh:640
+#: qcsrc/common/notifications.qh:658
 msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
 msgstr "^K1Переход в ^TC^TT^K1 через ^COUNT"
 
-#: qcsrc/common/notifications.qh:641
+#: qcsrc/common/notifications.qh:659
 msgid "^K1Changing team in ^COUNT"
 msgstr "^K1Смена команды через ^COUNT"
 
-#: qcsrc/common/notifications.qh:642
+#: qcsrc/common/notifications.qh:660
 msgid "^K1Spectating in ^COUNT"
 msgstr "^K1Вы станете наблюдателем через ^COUNT"
 
-#: qcsrc/common/notifications.qh:643
+#: qcsrc/common/notifications.qh:661
 msgid "^K1Suicide in ^COUNT"
 msgstr "^K1Вы совершите самоубийство через ^COUNT"
 
-#: qcsrc/common/notifications.qh:644
+#: qcsrc/common/notifications.qh:662
 msgid "^F4Timeout begins in ^COUNT"
 msgstr "^F4Тайм-аут начнётся через ^COUNT"
 
-#: qcsrc/common/notifications.qh:645
+#: qcsrc/common/notifications.qh:663
 msgid "^F4Timeout ends in ^COUNT"
 msgstr "^F4Тайм-аут законится через ^COUNT"
 
-#: qcsrc/common/notifications.qh:907 qcsrc/common/notifications.qh:908
+#: qcsrc/common/notifications.qh:937 qcsrc/common/notifications.qh:938
 #, c-format
 msgid " (near %s)"
 msgstr " (возле %s)"
 
-#: qcsrc/common/notifications.qh:915 qcsrc/common/notifications.qh:916
+#: qcsrc/common/notifications.qh:945 qcsrc/common/notifications.qh:946
 msgid "primary"
 msgstr "основной"
 
-#: qcsrc/common/notifications.qh:915 qcsrc/common/notifications.qh:916
+#: qcsrc/common/notifications.qh:945 qcsrc/common/notifications.qh:946
 msgid "secondary"
 msgstr "альтернативный"
 
-#: qcsrc/common/notifications.qh:926
+#: qcsrc/common/notifications.qh:956
 #, c-format
 msgid " ^F1(Press %s)"
 msgstr " ^F1(Нажмите %s)"
 
-#: qcsrc/common/notifications.qh:935
+#: qcsrc/common/notifications.qh:965
 #, c-format
 msgid " with %s"
 msgstr " с %s"
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 #, c-format
 msgid "%s^K1 made a TRIPLE FRAG! %s^BG"
 msgstr "%s^K1 совершил ТРОЙНОЕ УБИЙСТВО! %s^BG"
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 #, c-format
 msgid "%s^K1 made a TRIPLE SCORE! %s^BG"
 msgstr "%s^K1 набрал ТРИ ОЧКА! %s^BG"
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 msgid "TRIPLE FRAG! "
 msgstr "ТРОЙНОЕ УБИЙСТВО! "
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 #, c-format
 msgid "%s^K1 made FIVE SCORES IN A ROW! %s^BG"
 msgstr "%s^K1 набрал ПЯТЬ ОЧКОВ ПОДРЯД! %s^BG"
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 #, c-format
 msgid "%s^K1 unlocked RAGE! %s^BG"
 msgstr "%s^K1 высвободил свою ЯРОСТЬ! %s^BG"
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 msgid "RAGE! "
 msgstr "ЯРОСТЬ! "
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 #, c-format
 msgid "%s^K1 made TEN SCORES IN A ROW! %s^BG"
 msgstr "%s^K1 набрал ДЕСЯТЬ ОЧКОВ ПОДРЯД! %s^BG"
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 #, c-format
 msgid "%s^K1 started a MASSACRE! %s^BG"
 msgstr "%s^K1 начал РЕЗНЮ! %s^BG"
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 msgid "MASSACRE! "
 msgstr "РЕЗНЯ! "
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 #, c-format
 msgid "%s^K1 executed MAYHEM! %s^BG"
 msgstr "%s^K1 творит БЕСПРЕДЕЛ! %s^BG"
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 #, c-format
 msgid "%s^K1 made FIFTEEN SCORES IN A ROW! %s^BG"
 msgstr "%s^K1 набрал ПЯТНАДЦАТЬ ОЧКОВ ПОДРЯД! %s^BG"
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 msgid "MAYHEM! "
 msgstr "БЕСПРЕДЕЛ! "
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 #, c-format
 msgid "%s^K1 is a BERSERKER! %s^BG"
 msgstr "%s^K1 БЕРСЕРКЕР! %s^BG"
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 #, c-format
 msgid "%s^K1 made TWENTY SCORES IN A ROW! %s^BG"
 msgstr "%s^K1 набрал ДВАДЦАТЬ ОЧКОВ ПОДРЯД! %s^BG"
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 msgid "BERSERKER! "
 msgstr "БЕРСЕРКЕР! "
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 #, c-format
 msgid "%s^K1 inflicts CARNAGE! %s^BG"
 msgstr "%s^K1 начинает БОЙНЮ! %s^BG"
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 #, c-format
 msgid "%s^K1 made TWENTY FIVE SCORES IN A ROW! %s^BG"
 msgstr "%s^K1 набрал ДВАДЦАТЬ ПЯТЬ ОЧКОВ ПОДРЯД! %s^BG"
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 msgid "CARNAGE! "
 msgstr "БОЙНЯ! "
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 #, c-format
 msgid "%s^K1 made THIRTY SCORES IN A ROW! %s^BG"
 msgstr "%s^K1 набрал ТРИДЦАТЬ ОЧКОВ ПОДРЯД! %s^BG"
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 #, c-format
 msgid "%s^K1 unleashes ARMAGEDDON! %s^BG"
 msgstr "%s^K1 предрекает АРМАГЕДДОН! %s^BG"
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 msgid "ARMAGEDDON! "
 msgstr "АРМАГЕДДОН! "
 
-#: qcsrc/common/notifications.qh:956
+#: qcsrc/common/notifications.qh:986
 #, c-format
 msgid "%s(^F1Bot^BG)"
 msgstr "%s(^F1Бот^BG)"
 
-#: qcsrc/common/notifications.qh:958
+#: qcsrc/common/notifications.qh:988
 #, c-format
 msgid "%s(Ping ^F1%d^BG)"
 msgstr "%s(Пинг ^F1%d^BG)"
 
-#: qcsrc/common/notifications.qh:964
+#: qcsrc/common/notifications.qh:994
 #, c-format
 msgid ""
 "\n"
@@ -3038,7 +3038,7 @@ msgstr ""
 "\n"
 "(Здоровье ^1%d^BG / Броня ^2%d^BG)%s"
 
-#: qcsrc/common/notifications.qh:966
+#: qcsrc/common/notifications.qh:996
 #, c-format
 msgid ""
 "\n"
@@ -3047,68 +3047,68 @@ msgstr ""
 "\n"
 "(^F4Мёртв^BG)%s"
 
-#: qcsrc/common/notifications.qh:1003 qcsrc/common/notifications.qh:1016
+#: qcsrc/common/notifications.qh:1033 qcsrc/common/notifications.qh:1046
 #, c-format
 msgid "%d score spree! "
 msgstr "%d очков подряд! "
 
-#: qcsrc/common/notifications.qh:1015
+#: qcsrc/common/notifications.qh:1045
 #, c-format
 msgid "%d frag spree! "
 msgstr "%d убийств подряд! "
 
-#: qcsrc/common/notifications.qh:1028
+#: qcsrc/common/notifications.qh:1058
 msgid "First blood! "
 msgstr "Первая кровь! "
 
-#: qcsrc/common/notifications.qh:1028
+#: qcsrc/common/notifications.qh:1058
 msgid "First score! "
 msgstr "Первое очко! "
 
-#: qcsrc/common/notifications.qh:1032
+#: qcsrc/common/notifications.qh:1062
 msgid "First casualty! "
 msgstr "Первая смерть! "
 
-#: qcsrc/common/notifications.qh:1032
+#: qcsrc/common/notifications.qh:1062
 msgid "First victim! "
 msgstr "Первая жертва! "
 
-#: qcsrc/common/notifications.qh:1073
+#: qcsrc/common/notifications.qh:1103
 #, c-format
 msgid "%s^K1 has %d frags in a row! %s^BG"
 msgstr "%s^K1 совершил %d убийств подряд! %s^BG"
 
-#: qcsrc/common/notifications.qh:1074
+#: qcsrc/common/notifications.qh:1104
 #, c-format
 msgid "%s^K1 made %d scores in a row! %s^BG"
 msgstr "%s^K1 набрал %d очков подряд! %s^BG"
 
-#: qcsrc/common/notifications.qh:1092
+#: qcsrc/common/notifications.qh:1122
 #, c-format
 msgid "%s^K1 drew first blood! %s^BG"
 msgstr "%s^K1 пролил первую кровь! %s^BG"
 
-#: qcsrc/common/notifications.qh:1093
+#: qcsrc/common/notifications.qh:1123
 #, c-format
 msgid "%s^K1 got the first score! %s^BG"
 msgstr "%s^K1 получил первое очко! %s^BG"
 
-#: qcsrc/common/notifications.qh:1109
+#: qcsrc/common/notifications.qh:1139
 #, c-format
 msgid ", ending their %d frag spree"
 msgstr ", прервав серию из %d убийств подряд"
 
-#: qcsrc/common/notifications.qh:1110
+#: qcsrc/common/notifications.qh:1140
 #, c-format
 msgid ", ending their %d score spree"
 msgstr ", прервав серию из %d очков подряд"
 
-#: qcsrc/common/notifications.qh:1124
+#: qcsrc/common/notifications.qh:1154
 #, c-format
 msgid ", losing their %d frag spree"
 msgstr ", окончив свою серию из %d убийств подряд"
 
-#: qcsrc/common/notifications.qh:1125
+#: qcsrc/common/notifications.qh:1155
 #, c-format
 msgid ", losing their %d score spree"
 msgstr ", прервав свою серию из %d очков подряд"
@@ -3174,11 +3174,11 @@ msgstr "Предмет %d"
 msgid "%d (%s)"
 msgstr "%d (%s)"
 
-#: qcsrc/menu/item/textslider.c:29 qcsrc/menu/item/textslider.c:31
+#: qcsrc/menu/item/textslider.c:31 qcsrc/menu/item/textslider.c:33
 msgid "custom"
 msgstr "особо"
 
-#: qcsrc/menu/menu.qc:56
+#: qcsrc/menu/menu.qc:59
 #, c-format
 msgid "^4MQC Build information: ^1%s\n"
 msgstr "^4Сведения о сборке MQC: ^1%s\n"
@@ -3225,7 +3225,7 @@ msgstr "Разработчики"
 #: 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_sandboxtools.c:89
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:90
 #: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:77
 #: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:21
 msgid "OK"
@@ -3279,33 +3279,33 @@ msgstr "Сохранить настройки"
 msgid "Ammo Panel"
 msgstr "Панель боеприпасов"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:23
 msgid "Ammunition display:"
 msgstr "Показ боеприпасов:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:26
 msgid "Show only current ammo type"
 msgstr "Показывать только текущий вид боеприпасов"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
 msgid "Align icon:"
 msgstr "Выровнять иконки:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:36
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:28
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:40
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:28
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:40
-msgid "Left"
-msgstr "Слева"
-
 #: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:30
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:38
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:29
 #: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:41
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:29
 #: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:41
+msgid "Left"
+msgstr "Слева"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:42
 msgid "Right"
 msgstr "Справа"
 
@@ -3313,28 +3313,28 @@ msgstr "Справа"
 msgid "Centerprint"
 msgstr "Главные сообщения"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:24
 msgid "Message duration:"
 msgstr "Длительность сообщения:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:27
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:28
 msgid "Fade time:"
 msgstr "Время исчезновения:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:32
 msgid "Flip messages order"
 msgstr "Обратить порядок уведомлений"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:34
 msgid "Text alignment:"
 msgstr "Выравнивание текста:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:38
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:51
 msgid "Center"
 msgstr "По центру"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:41
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:42
 msgid "Font scale:"
 msgstr "Размер шрифта:"
 
@@ -3342,19 +3342,19 @@ msgstr "Размер шрифта:"
 msgid "Chat Panel"
 msgstr "Панель чата"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:23
 msgid "Chat entries:"
 msgstr "Записи в чате:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:26
 msgid "Chat size:"
 msgstr "Размер чата:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:30
 msgid "Chat lifetime:"
 msgstr "Время жизни:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:34
 msgid "Chat beep sound"
 msgstr "Звук чата"
 
@@ -3362,11 +3362,11 @@ msgstr "Звук чата"
 msgid "Engine Info Panel"
 msgstr "Панель сведений о движке"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:23
 msgid "Engine info:"
 msgstr "Сведения о движке:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:26
 msgid "Use an averaging algorithm for fps"
 msgstr "Исп. алгоритм усреднения для FPS"
 
@@ -3374,36 +3374,36 @@ msgstr "Исп. алгоритм усреднения для FPS"
 msgid "Health/Armor Panel"
 msgstr "Панель здоровья/брони"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:22
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:23
 msgid "Enable status bar"
 msgstr "Включить полосу состояния"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:24
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:25
 msgid "Status bar alignment:"
 msgstr "Выравнивание полосы состояния:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:32
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:42
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:32
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:43
 msgid "Inward"
 msgstr "Внутрь"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:34
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:43
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:34
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:44
 msgid "Outward"
 msgstr "Наружу"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:37
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:38
 msgid "Icon alignment:"
 msgstr "Выравнивание иконок:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:46
 msgid "Flip health and armor positions"
 msgstr "Поменять местами здоровье и броню"
 
@@ -3411,11 +3411,11 @@ msgstr "Поменять местами здоровье и броню"
 msgid "Info Messages Panel"
 msgstr "Панель информационных сообщений"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:23
 msgid "Info messages:"
 msgstr "Инф. сообщения:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:26
 msgid "Flip align"
 msgstr "Перевернуть выравнивание"
 
@@ -3427,23 +3427,23 @@ msgstr "Панель иконок мода"
 msgid "Notification Panel"
 msgstr "Панель уведомлений"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:23
 msgid "Notifications:"
 msgstr "Уведомления:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:26
 msgid "Also print notifications to the console"
 msgstr "Также показывать уведомления в консоли"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:29
 msgid "Flip notify order"
 msgstr "Обратить порядок уведомлений"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:32
 msgid "Entry lifetime:"
 msgstr "Время видимости:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:36
 msgid "Entry fadetime:"
 msgstr "Время исчезновения:"
 
@@ -3451,96 +3451,96 @@ msgstr "Время исчезновения:"
 msgid "Physics Panel"
 msgstr "Панель физики"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:22
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:22
 msgid "Panel disabled"
 msgstr "Отключена"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
 msgid "Panel enabled"
 msgstr "Включена"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
 msgid "Panel enabled even observing"
 msgstr "Включена при наблюдении"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:26
 msgid "Panel enabled only in Race/CTS"
 msgstr "Панель включена в командных играх"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:32
 msgid "Status bar"
 msgstr "Включить полосу состояния"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:49
 msgid "Left align"
 msgstr "Слева"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:53
 msgid "Right align"
 msgstr "Справа"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
 msgid "Inward align"
 msgstr "Внутрь"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:37
 msgid "Outward align"
 msgstr "Наружу"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:41
 msgid "Flip speed/acceleration positions"
 msgstr "Поменять местами скорость и ускорение"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
 #: qcsrc/menu/xonotic/dialog_settings_misc.c:29
 msgid "Speed:"
 msgstr "Скорость:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:46
 msgid "Include vertical speed"
 msgstr "С вертикальной скоростью"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:56
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:57
 msgid "Speed unit:"
 msgstr "Единица скорости:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:58
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
 msgid "qu/s"
 msgstr "qu/s"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
 msgid "m/s"
 msgstr "м/с"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
 msgid "km/h"
 msgstr "км/ч"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
 msgid "mph"
 msgstr "м/ч"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:63
 msgid "knots"
 msgstr "узлы"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:64
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:65
 msgid "Show"
 msgstr "Показывать"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:67
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:68
 msgid "Top speed"
 msgstr "Максимум скорости"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:73
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
 msgid "Acceleration:"
 msgstr "Ускорение:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:75
 msgid "Include vertical acceleration"
 msgstr "С вертикальним ускорением"
 
@@ -3548,7 +3548,7 @@ msgstr "С вертикальним ускорением"
 msgid "Powerups Panel"
 msgstr "Панель бонусов"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:46
 msgid "Flip strength and shield positions"
 msgstr "Поменять местами Силу и Щит"
 
@@ -3556,16 +3556,16 @@ msgstr "Поменять местами Силу и Щит"
 msgid "Pressed Keys Panel"
 msgstr "Панель нажатых кнопок"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
 msgid "Panel enabled when spectating"
 msgstr "Включена при наблюдении"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:24
 msgid "Panel always enabled"
 msgstr "Всегда включена"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:31
 msgid "Forced aspect:"
 msgstr "Соотношение:"
 
@@ -3577,68 +3577,68 @@ msgstr "Панель Гоночного Таймера"
 msgid "Radar Panel"
 msgstr "Панель радара"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
 msgid "Panel enabled in teamgames"
 msgstr "Панель включена в командных играх"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:30
 msgid "Radar:"
 msgstr "Радар:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:32
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:43
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:82
+#: 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
 msgid "Alpha:"
 msgstr "Прозрачность:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:37
 msgid "Rotation:"
 msgstr "Поворот:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:39
 msgid "Forward"
 msgstr "Взгляд"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:40
 msgid "West"
 msgstr "Запад"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:41
 msgid "South"
 msgstr "Юг"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:41
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:42
 msgid "East"
 msgstr "Восток"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:43
 msgid "North"
 msgstr "Север"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:46
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:47
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:63
 msgid "Scale:"
 msgstr "Размер:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:50
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:51
 msgid "Zoom mode:"
 msgstr "Режим увел.:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:52
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:53
 msgid "Zoomed in"
 msgstr "Приближён"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:53
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:54
 msgid "Zoomed out"
 msgstr "Не приближён"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:54
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:55
 msgid "Always zoomed"
 msgstr "Всегда приближён"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:55
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:56
 msgid "Never zoomed"
 msgstr "Никогда не приближён"
 
@@ -3646,23 +3646,23 @@ msgstr "Никогда не приближён"
 msgid "Score Panel"
 msgstr "Таблица Очков"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:23
 msgid "Score:"
 msgstr "Очки:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
 msgid "Rankings:"
 msgstr "Рейтинг:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
 msgid "Off"
 msgstr "Отключено"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
 msgid "And me"
 msgstr "И мне"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:29
 msgid "Pure"
 msgstr "Чистый"
 
@@ -3670,11 +3670,11 @@ msgstr "Чистый"
 msgid "Timer Panel"
 msgstr "Панель таймера"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:23
 msgid "Timer:"
 msgstr "Таймер:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:26
 msgid "Show elapsed time"
 msgstr "Показывать прошедшее время"
 
@@ -3682,7 +3682,7 @@ msgstr "Показывать прошедшее время"
 msgid "Vote Panel"
 msgstr "Панель голосования"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:23
 msgid "Alpha after voting:"
 msgstr "Прозр. после голосования:"
 
@@ -3690,76 +3690,76 @@ msgstr "Прозр. после голосования:"
 msgid "Weapons Panel"
 msgstr "Панель оружия"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:25
 msgid "Fade out after:"
 msgstr "Исчезать после:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:26
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:27
 msgid "Never"
 msgstr "Никогда"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:29
 #, c-format
 msgid "%ds"
 msgstr "%dс"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:32
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:33
 msgid "Fade effect:"
 msgstr "Эффект исчезновения:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
 msgid "EF^None"
 msgstr "Отсутствует"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:37
 msgid "Alpha"
 msgstr "Исчезновение"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
 msgid "Slide"
 msgstr "Скольжение"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:39
 msgid "EF^Both"
 msgstr "Оба"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:43
 msgid "Weapon icons:"
 msgstr "Иконки оружия:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46
 msgid "Show only owned weapons"
 msgstr "Показывать только свое оружие"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:48
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
 msgid "Show weapon ID as:"
 msgstr "Показывать ID оружия как:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
 msgid "SHOWAS^None"
 msgstr "Не показывать"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
 msgid "Number"
 msgstr "Число"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:52
 msgid "Bind"
 msgstr "Привязка"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:54
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
 msgid "Show Accuracy"
 msgstr "Показывать Точность"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:56
 msgid "Show Ammo"
 msgstr "Показывать Боеприпасы"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:58
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:59
 msgid "Ammo bar color:"
 msgstr "Цвет полосы боеприпасов:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:64
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:65
 msgid "Ammo bar alpha:"
 msgstr "Прозрачность полосы боеприпасов:"
 
@@ -3767,85 +3767,85 @@ msgstr "Прозрачность полосы боеприпасов:"
 msgid "Panel HUD Setup"
 msgstr "Настройка панелей HUD"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:21
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:22
 msgid "Panel background defaults:"
 msgstr "Фон по умолчанию:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:23 qcsrc/menu/xonotic/util.qc:683
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:24 qcsrc/menu/xonotic/util.qc:683
 msgid "Background:"
 msgstr "Фон:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:25
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:37
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:52
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:686
+#: 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
 msgid "Disable"
 msgstr "Отключить"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:30
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:691
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:31
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:78 qcsrc/menu/xonotic/util.qc:691
 msgid "Color:"
 msgstr "Цвет:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:699
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:36 qcsrc/menu/xonotic/util.qc:699
 msgid "Border size:"
 msgstr "Ширина краёв:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:50
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:89
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:51
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:90
 msgid "Team color:"
 msgstr "Цвет команды:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:725
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:59 qcsrc/menu/xonotic/util.qc:725
 msgid "Test team color in configure mode"
 msgstr "Проверить цвет команды в режиме настройки"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:728
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:62 qcsrc/menu/xonotic/util.qc:728
 msgid "Padding:"
 msgstr "Отступ:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:68
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:69
 msgid "HUD Dock:"
 msgstr "Область HUD:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:70
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71
 msgid "DOCK^Disabled"
 msgstr "Отключено"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72
 msgid "DOCK^Small"
 msgstr "Небольшая"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73
 msgid "DOCK^Medium"
 msgstr "Средняя"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:74
 msgid "DOCK^Large"
 msgstr "Большая"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:96
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:97
 msgid "Grid settings:"
 msgstr "Настройки сетки:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:99
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:100
 msgid "Snap panels to grid"
 msgstr "Передвижение панелей по сетке"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:102
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:103
 msgid "Grid size:"
 msgstr "Шаг сетки:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:103
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:104
 msgid "X:"
 msgstr "X:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:109
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:110
 msgid "Y:"
 msgstr "Y:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:117
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:118
 msgid "Exit setup"
 msgstr "Выйти из настроек"
 
@@ -4430,7 +4430,7 @@ msgid "Key:"
 msgstr "Ключ:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:61
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:19
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:20
 msgid "Model:"
 msgstr "Модель:"
 
@@ -4805,127 +4805,127 @@ msgstr "Нет"
 msgid "Sandbox Tools"
 msgstr "Инструменты песочницы"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:24
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:25
 msgid "Spawn"
 msgstr "Новое"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:25
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:26
 msgid "Remove *"
 msgstr "Убрать"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:27
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:28
 msgid "Copy *"
 msgstr "Копировать"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:28
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:29
 msgid "Paste"
 msgstr "Вставить"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:30
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:31
 msgid "Bone:"
 msgstr "Кость:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:35
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:36
 msgid "Set * as child"
 msgstr "Установить * как подчинённого"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:36
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:37
 msgid "Attach to *"
 msgstr "Прикрепить к *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:38
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:39
 msgid "Detach from *"
 msgstr "Открепить от *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:41
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:42
 msgid "Visual object properties for *:"
 msgstr "Визуальные свойства для *:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:43
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:44
 msgid "Set skin:"
 msgstr "Оформления:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:45
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:46
 msgid "Set alpha:"
 msgstr "Установить прозрачность:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:48
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:49
 msgid "Set color main:"
 msgstr "Установить главный цвет:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:50
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:51
 msgid "Set color glow:"
 msgstr "Цвет люминофора:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:54
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:55
 msgid "Set frame:"
 msgstr "Рама:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:58
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:59
 msgid "Physical object properties for *:"
 msgstr "Физические свойства для *:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:60
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:61
 msgid "Set material:"
 msgstr "Определить материал:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:66
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:67
 msgid "Set solidity:"
 msgstr "Установить прочность:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:67
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:68
 msgid "Non-solid"
 msgstr "Не твердый"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:68
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:69
 msgid "Solid"
 msgstr "Твердый"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:69
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:70
 msgid "Set physics:"
 msgstr "Установить физику:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:70
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:71
 msgid "Static"
 msgstr "Статический"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:71
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:72
 msgid "Movable"
 msgstr "Динамический"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:72
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:73
 msgid "Physical"
 msgstr "Физика"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:74
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:75
 msgid "Set scale:"
 msgstr "Установить размер:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:76
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:77
 msgid "Set force:"
 msgstr "Сила:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:80
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:81
 msgid "Claim *"
 msgstr "Взять *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:82
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:83
 msgid "* object info"
 msgstr "свойства объекта *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:83
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:84
 msgid "* mesh info"
 msgstr "свойство модели *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:84
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:85
 msgid "* attachment info"
 msgstr "* свойства прикрепления"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:85
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:86
 msgid "Show help"
 msgstr "Показывать помощь"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:86
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:87
 msgid "* is the object you are facing"
 msgstr "* это объект перед вами"
 
@@ -5922,27 +5922,27 @@ msgstr "Победитель"
 msgid "Team Selection"
 msgstr "Выбор команды"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:41
+#: qcsrc/menu/xonotic/dialog_teamselect.c:42
 msgid "join 'best' team (auto-select)"
 msgstr "присоединиться к 'лучшей' команде (автовыбор)"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:45
+#: qcsrc/menu/xonotic/dialog_teamselect.c:46
 msgid "red"
 msgstr "красная"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:46
+#: qcsrc/menu/xonotic/dialog_teamselect.c:47
 msgid "blue"
 msgstr "синяя"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:47
+#: qcsrc/menu/xonotic/dialog_teamselect.c:48
 msgid "yellow"
 msgstr "жёлтая"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:48
+#: qcsrc/menu/xonotic/dialog_teamselect.c:49
 msgid "pink"
 msgstr "розовая"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:51
+#: qcsrc/menu/xonotic/dialog_teamselect.c:52
 msgid "spectate"
 msgstr "наблюдать"
 
@@ -6042,7 +6042,12 @@ msgstr "%.2f %%"
 msgid "%s dB"
 msgstr "%s дБ"
 
-#: qcsrc/menu/xonotic/slider_resolution.c:72
+#: qcsrc/menu/xonotic/slider_resolution.c:103
+#, c-format
+msgid "%dx%d (%d:%d)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_resolution.c:106
 #, c-format
 msgid "%dx%d"
 msgstr "%dx%d"
index 814725708e0cb7773a0f70fb87223626f2f4db54..b6423751cf52fbd2232aabd87c1be35cf56d9a67 100644 (file)
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Xonotic\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-09-13 10:31+0200\n"
-"PO-Revision-Date: 2013-09-13 08:33+0000\n"
+"POT-Creation-Date: 2013-10-03 11:55+0200\n"
+"PO-Revision-Date: 2013-10-03 10:08+0000\n"
 "Last-Translator: divVerent <divVerent@xonotic.org>\n"
 "Language-Team: Swedish (http://www.transifex.com/projects/p/xonotic/language/"
 "sv/)\n"
@@ -1230,7 +1230,7 @@ msgstr ""
 msgid "@!#%'n Tuba Throwing"
 msgstr "@!#%'n Tubakastning"
 
-#: qcsrc/common/mapinfo.qc:1105 qcsrc/menu/xonotic/skinlist.c:166
+#: qcsrc/common/mapinfo.qc:1109 qcsrc/menu/xonotic/skinlist.c:166
 #, c-format
 msgid "%s: %s"
 msgstr ""
@@ -1304,1773 +1304,1773 @@ msgstr ""
 msgid "^7%s (^3%d sec left)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:330
+#: qcsrc/common/notifications.qh:342
 #, c-format
 msgid "^BG%s^BG captured the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:331
+#: qcsrc/common/notifications.qh:343
 #, c-format
 msgid ""
 "^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
 "%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:332
+#: qcsrc/common/notifications.qh:344
 #, c-format
 msgid "^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:333
+#: qcsrc/common/notifications.qh:345
 #, c-format
 msgid ""
 "^BG%s^BG captured the ^TC^TT^BG flag in ^F2%s^BG seconds, failing to break "
 "^BG%s^BG's previous record of ^F1%s^BG seconds"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:334
+#: qcsrc/common/notifications.qh:346
 msgid "^BGThe ^TC^TT^BG flag was returned to base by its owner"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:335
+#: qcsrc/common/notifications.qh:347
 msgid "^BGThe ^TC^TT^BG flag was destroyed and returned to base"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:336
+#: qcsrc/common/notifications.qh:348
 msgid "^BGThe ^TC^TT^BG flag was dropped in the base and returned itself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:337
+#: qcsrc/common/notifications.qh:349
 msgid ""
 "^BGThe ^TC^TT^BG flag fell somewhere it couldn't be reached and returned to "
 "base"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:338
+#: qcsrc/common/notifications.qh:350
 #, c-format
 msgid ""
 "^BGThe ^TC^TT^BG flag became impatient after ^F1%.2f^BG seconds and returned "
 "itself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:339
+#: qcsrc/common/notifications.qh:351
 msgid "^BGThe ^TC^TT^BG flag has returned to the base"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:340
+#: qcsrc/common/notifications.qh:352
 #, c-format
 msgid "^BG%s^BG lost the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:341
+#: qcsrc/common/notifications.qh:353
 #, c-format
 msgid "^BG%s^BG got the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:342
+#: qcsrc/common/notifications.qh:354
 #, c-format
 msgid "^BG%s^BG returned the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:343
+#: qcsrc/common/notifications.qh:355
 #, c-format
 msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:344
+#: qcsrc/common/notifications.qh:356
 #, c-format
 msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:345
+#: qcsrc/common/notifications.qh:357
 #, c-format
 msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:346
+#: qcsrc/common/notifications.qh:358
 #, c-format
 msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:346
+#: qcsrc/common/notifications.qh:358
 #, c-format
 msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:347
+#: qcsrc/common/notifications.qh:359
 #, c-format
 msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:348
+#: qcsrc/common/notifications.qh:360
 #, c-format
 msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:349
+#: qcsrc/common/notifications.qh:361
 #, c-format
 msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:350
+#: qcsrc/common/notifications.qh:362
 #, c-format
 msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:351
+#: qcsrc/common/notifications.qh:363
 #, c-format
 msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:352
+#: qcsrc/common/notifications.qh:364
 #, c-format
 msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:352
+#: qcsrc/common/notifications.qh:364
 #, c-format
 msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:353
+#: qcsrc/common/notifications.qh:365
 #, c-format
 msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:354
+#: qcsrc/common/notifications.qh:366
 #, c-format
 msgid ""
 "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:355
+#: qcsrc/common/notifications.qh:367
 #, c-format
 msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:356
+#: qcsrc/common/notifications.qh:368
 #, c-format
 msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:357
+#: qcsrc/common/notifications.qh:369
 #, c-format
 msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:358
+#: qcsrc/common/notifications.qh:370
 #, c-format
 msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:359
+#: qcsrc/common/notifications.qh:371
 #, c-format
 msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:360
+#: qcsrc/common/notifications.qh:372
 #, c-format
 msgid ""
 "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:361
+#: qcsrc/common/notifications.qh:373
 #, c-format
 msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:362
+#: qcsrc/common/notifications.qh:374
 #, c-format
 msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:363
+#: qcsrc/common/notifications.qh:375
 #, c-format
 msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:364
+#: qcsrc/common/notifications.qh:376
 #, c-format
 msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:365
+#: qcsrc/common/notifications.qh:377
 #, c-format
 msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:366
+#: qcsrc/common/notifications.qh:378
 #, c-format
 msgid "^BG%s%s^K1 was thrown into a world of hurt by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:367
+#: qcsrc/common/notifications.qh:379
 #, c-format
 msgid "^BG%s^K1 was moved into the %s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:368
+#: qcsrc/common/notifications.qh:380
 #, c-format
 msgid "^BG%s^K1 became enemies with the Lord of Teamplay%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:369
+#: qcsrc/common/notifications.qh:381
 #, c-format
 msgid "^BG%s^K1 thought they found a nice camping ground%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:370
+#: qcsrc/common/notifications.qh:382
 #, c-format
 msgid "^BG%s^K1 unfairly eliminated themself%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:371
+#: qcsrc/common/notifications.qh:383
 #, c-format
 msgid "^BG%s^K1 %s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:372
+#: qcsrc/common/notifications.qh:384
 #, c-format
 msgid "^BG%s^K1 couldn't catch their breath%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:372
+#: qcsrc/common/notifications.qh:384
 #, c-format
 msgid "^BG%s^K1 was in the water for too long%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:373
+#: qcsrc/common/notifications.qh:385
 #, c-format
 msgid "^BG%s^K1 hit the ground with a bit too much force%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:373
+#: qcsrc/common/notifications.qh:385
 #, c-format
 msgid "^BG%s^K1 hit the ground with a crunch%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:374
+#: qcsrc/common/notifications.qh:386
 #, c-format
 msgid "^BG%s^K1 became a bit too crispy%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:374
+#: qcsrc/common/notifications.qh:386
 #, c-format
 msgid "^BG%s^K1 felt a little hot%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:375
+#: qcsrc/common/notifications.qh:387
 #, c-format
 msgid "^BG%s^K1 died%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:376
+#: qcsrc/common/notifications.qh:388
 #, c-format
 msgid "^BG%s^K1 found a hot place%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:376
+#: qcsrc/common/notifications.qh:388
 #, c-format
 msgid "^BG%s^K1 turned into hot slag%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:377
+#: qcsrc/common/notifications.qh:389
 #, c-format
 msgid "^BG%s^K1 mastered the art of self-nading%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:378
+#: qcsrc/common/notifications.qh:390
 #, c-format
 msgid "^BG%s^K1 died%s%s. What's the point of living without ammo?"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:378
+#: qcsrc/common/notifications.qh:390
 #, c-format
 msgid "^BG%s^K1 ran out of ammo%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:379
+#: qcsrc/common/notifications.qh:391
 #, c-format
 msgid "^BG%s^K1 rotted away%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:380
+#: qcsrc/common/notifications.qh:392
 #, c-format
 msgid "^BG%s^K1 became a shooting star%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:393
 #, c-format
 msgid "^BG%s^K1 was slimed%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:394
 #, c-format
 msgid "^BG%s^K1 couldn't take it anymore%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:395
 #, c-format
 msgid "^BG%s^K1 is now preserved for centuries to come%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:396
 #, c-format
 msgid "^BG%s^K1 switched to the %s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:397
 #, c-format
 msgid "^BG%s^K1 died in an accident%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:398
 #, c-format
 msgid "^BG%s^K1 ran into a turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:399
 #, c-format
 msgid "^BG%s^K1 was blasted away by an eWheel turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:400
 #, c-format
 msgid "^BG%s^K1 got caught up in the FLAC turret fire%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:401
 #, c-format
 msgid "^BG%s^K1 was blasted away by a Hellion turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:402
 #, c-format
 msgid "^BG%s^K1 could not hide from the Hunter turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:403
 #, c-format
 msgid "^BG%s^K1 was riddled full of holes by a Machinegun turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:404
 #, c-format
 msgid "^BG%s^K1 got turned into smoldering gibs by an MLRS turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:405
 #, c-format
 msgid "^BG%s^K1 was phased out by a turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:406
 #, c-format
 msgid "^BG%s^K1 got served some superheated plasma from a turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:407
 #, c-format
 msgid "^BG%s^K1 was electrocuted by a Tesla turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:408
 #, c-format
 msgid "^BG%s^K1 got served a lead enrichment by a Walker turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:409
 #, c-format
 msgid "^BG%s^K1 was impaled by a Walker turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:410
 #, c-format
 msgid "^BG%s^K1 was blasted away by a Walker turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:411
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Bumblebee explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:412
 #, c-format
 msgid "^BG%s^K1 was crushed by a vehicle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:401
+#: qcsrc/common/notifications.qh:413
 #, c-format
 msgid "^BG%s^K1 was caught in a Raptor cluster bomb%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:402
+#: qcsrc/common/notifications.qh:414
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Raptor explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:403
+#: qcsrc/common/notifications.qh:415
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Spiderbot explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:404
+#: qcsrc/common/notifications.qh:416
 #, c-format
 msgid "^BG%s^K1 was blasted to bits by a Spiderbot rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:405
+#: qcsrc/common/notifications.qh:417
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Racer explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:406
+#: qcsrc/common/notifications.qh:418
 #, c-format
 msgid "^BG%s^K1 couldn't find shelter from a Racer rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:407
+#: qcsrc/common/notifications.qh:419
 #, c-format
 msgid "^BG%s^K1 was in the wrong place%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:408
+#: qcsrc/common/notifications.qh:420
 #, c-format
 msgid "^BG%s^K1 was betrayed by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:409
+#: qcsrc/common/notifications.qh:421
 #, c-format
 msgid "^BG%s^K1 was frozen by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:410
+#: qcsrc/common/notifications.qh:422
 #, c-format
 msgid "^BG%s^K3 was revived by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:411
+#: qcsrc/common/notifications.qh:423
 #, c-format
 msgid "^BG%s^K3 was revived by falling"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:412
+#: qcsrc/common/notifications.qh:424
 #, c-format
 msgid "^BG%s^K3 was automatically revived after %s second(s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:413 qcsrc/common/notifications.qh:594
+#: qcsrc/common/notifications.qh:425 qcsrc/common/notifications.qh:612
 msgid "^TC^TT^BG team wins the round"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:414 qcsrc/common/notifications.qh:595
+#: qcsrc/common/notifications.qh:426 qcsrc/common/notifications.qh:613
 #, c-format
 msgid "^BG%s^BG wins the round"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:415 qcsrc/common/notifications.qh:524
+#: qcsrc/common/notifications.qh:427 qcsrc/common/notifications.qh:542
 msgid "^BGRound tied"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:416 qcsrc/common/notifications.qh:525
+#: qcsrc/common/notifications.qh:428 qcsrc/common/notifications.qh:543
 msgid "^BGRound over, there's no winner"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:417
+#: qcsrc/common/notifications.qh:429
 #, c-format
 msgid "^BG%s^K1 froze themself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:418
+#: qcsrc/common/notifications.qh:430
 #, c-format
 msgid "^BGGodmode saved you %s units of damage, cheater!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:419 qcsrc/common/notifications.qh:598
+#: qcsrc/common/notifications.qh:431 qcsrc/common/notifications.qh:616
 #, c-format
 msgid "^BGYou do not have the ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:420 qcsrc/common/notifications.qh:599
+#: qcsrc/common/notifications.qh:432 qcsrc/common/notifications.qh:617
 #, c-format
 msgid "^BGYou dropped the ^F1%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:421 qcsrc/common/notifications.qh:600
+#: qcsrc/common/notifications.qh:433 qcsrc/common/notifications.qh:618
 #, c-format
 msgid "^BGYou got the ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:422 qcsrc/common/notifications.qh:601
+#: qcsrc/common/notifications.qh:434 qcsrc/common/notifications.qh:619
 #, c-format
 msgid "^BGYou don't have enough ammo for the ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:423 qcsrc/common/notifications.qh:602
+#: qcsrc/common/notifications.qh:435 qcsrc/common/notifications.qh:620
 #, c-format
 msgid "^F1%s %s^BG is unable to fire, but its ^F1%s^BG can"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:424 qcsrc/common/notifications.qh:603
+#: qcsrc/common/notifications.qh:436 qcsrc/common/notifications.qh:621
 #, c-format
 msgid "^F1%s^BG is ^F4not available^BG on this map"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:425
+#: qcsrc/common/notifications.qh:437
 #, c-format
 msgid "^BG%s^F3 connected%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:426
+#: qcsrc/common/notifications.qh:438
 #, c-format
 msgid "^BG%s^F3 connected and joined the ^TC^TT team"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:427
+#: qcsrc/common/notifications.qh:439
 #, c-format
 msgid "^BG%s^F3 is now playing"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:428 qcsrc/common/notifications.qh:606
+#: qcsrc/common/notifications.qh:440 qcsrc/common/notifications.qh:624
 #, c-format
 msgid "^BG%s^BG has dropped the ball!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:429 qcsrc/common/notifications.qh:607
+#: qcsrc/common/notifications.qh:441 qcsrc/common/notifications.qh:625
 #, c-format
 msgid "^BG%s^BG has picked up the ball!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:430
+#: qcsrc/common/notifications.qh:442
 #, c-format
 msgid "^BG%s^BG captured the keys for the ^TC^TT team"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:431
+#: qcsrc/common/notifications.qh:443
 #, c-format
 msgid "^BG%s^BG dropped the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:432
+#: qcsrc/common/notifications.qh:444
 #, c-format
 msgid "^BG%s^BG lost the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:433
+#: qcsrc/common/notifications.qh:445
 #, c-format
 msgid "^BG%s^BG picked up the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:434
+#: qcsrc/common/notifications.qh:446
 #, c-format
 msgid "^BG%s^F3 forfeited"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:435
+#: qcsrc/common/notifications.qh:447
 #, c-format
 msgid "^BG%s^F3 has no more lives left"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:436
+#: qcsrc/common/notifications.qh:448
 #, c-format
 msgid "^BG%s^K1 picked up Invisibility"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:437
+#: qcsrc/common/notifications.qh:449
 #, c-format
 msgid "^BG%s^K1 picked up Shield"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:438
+#: qcsrc/common/notifications.qh:450
 #, c-format
 msgid "^BG%s^K1 picked up Speed"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:439
+#: qcsrc/common/notifications.qh:451
 #, c-format
 msgid "^BG%s^K1 picked up Strength"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:440
+#: qcsrc/common/notifications.qh:452
 #, c-format
 msgid "^BG%s^F3 disconnected"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:441
+#: qcsrc/common/notifications.qh:453
 #, c-format
 msgid "^BG%s^F3 was kicked for idling"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:442
+#: qcsrc/common/notifications.qh:454
 msgid ""
 "^F2You were kicked from the server because you are a spectator and "
 "spectators aren't allowed at the moment."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:443
+#: qcsrc/common/notifications.qh:455
 #, c-format
 msgid "^BG%s^F3 is now spectating"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:444
+#: qcsrc/common/notifications.qh:456
 #, c-format
 msgid "^BG%s^BG has abandoned the race"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:445
+#: qcsrc/common/notifications.qh:457
 #, c-format
 msgid "^BG%s^BG couldn't break their %s%s^BG place record of %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:446
+#: qcsrc/common/notifications.qh:458
 #, c-format
 msgid "^BG%s^BG couldn't break the %s%s^BG place record of %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:447
+#: qcsrc/common/notifications.qh:459
 #, c-format
 msgid "^BG%s^BG has finished the race"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:448
+#: qcsrc/common/notifications.qh:460
 #, c-format
 msgid "^BG%s^BG broke %s^BG's %s%s^BG place record with %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:449
+#: qcsrc/common/notifications.qh:461
 #, c-format
 msgid "^BG%s^BG improved their %s%s^BG place record with %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:450
+#: qcsrc/common/notifications.qh:462
 #, c-format
 msgid ""
 "^BG%s^BG scored a new record with ^F2%s^BG, but unfortunately lacks a UID "
 "and will be lost."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:451
+#: qcsrc/common/notifications.qh:463
 #, c-format
 msgid "^BG%s^BG set the %s%s^BG place record with %s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:452
+#: qcsrc/common/notifications.qh:464
 msgid "^TC^TT ^BGteam scores!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:453
+#: qcsrc/common/notifications.qh:465
 #, 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 ""
 
-#: qcsrc/common/notifications.qh:454
+#: qcsrc/common/notifications.qh:466
 #, c-format
 msgid "^BG%s^K1 picked up a Superweapon"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:455
+#: qcsrc/common/notifications.qh:467
 #, c-format
 msgid ""
 "^F4NOTE: ^BGThe server is running ^F1Xonotic %s (beta)^BG, you have "
 "^F2Xonotic %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:456
+#: qcsrc/common/notifications.qh:468
 #, c-format
 msgid ""
 "^F4NOTE: ^BGThe server is running ^F1Xonotic %s^BG, you have ^F2Xonotic %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:457
+#: qcsrc/common/notifications.qh:469
 #, c-format
 msgid ""
 "^F4NOTE: ^F1Xonotic %s^BG is out, and you still have ^F2Xonotic %s^BG - get "
 "the update from ^F3http://www.xonotic.org/^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:458
+#: qcsrc/common/notifications.qh:470
 #, c-format
 msgid "^F3SVQC Build information: ^F4%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:459
+#: qcsrc/common/notifications.qh:471
 #, c-format
 msgid ""
 "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Accordeon%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:460
+#: qcsrc/common/notifications.qh:472
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Accordeon%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:461
+#: qcsrc/common/notifications.qh:473
 #, c-format
 msgid "^BG%s%s^K1 felt the strong pull of ^BG%s^K1's Crylink%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:462
+#: qcsrc/common/notifications.qh:474
 #, c-format
 msgid "^BG%s^K1 felt the strong pull of their Crylink%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:463
+#: qcsrc/common/notifications.qh:475
 #, c-format
 msgid "^BG%s%s^K1 was blasted by ^BG%s^K1's Electro bolt%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:464
+#: qcsrc/common/notifications.qh:476
 #, c-format
 msgid "^BG%s%s^K1 felt the electrifying air of ^BG%s^K1's Electro combo%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:465
+#: qcsrc/common/notifications.qh:477
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Electro plasma%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:466
+#: qcsrc/common/notifications.qh:478
 #, c-format
 msgid "^BG%s^K1 played with Electro plasma%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:467
+#: qcsrc/common/notifications.qh:479
 #, c-format
 msgid "^BG%s^K1 could not remember where they put their Electro plasma%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:468
+#: qcsrc/common/notifications.qh:480
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's fireball%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:469
+#: qcsrc/common/notifications.qh:481
 #, c-format
 msgid "^BG%s%s^K1 got burnt by ^BG%s^K1's firemine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:470
+#: qcsrc/common/notifications.qh:482
 #, c-format
 msgid "^BG%s^K1 should have used a smaller gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:471
+#: qcsrc/common/notifications.qh:483
 #, c-format
 msgid "^BG%s^K1 forgot about their firemine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:472
+#: qcsrc/common/notifications.qh:484
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by a burst of ^BG%s^K1's Hagar rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:473
+#: qcsrc/common/notifications.qh:485
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Hagar rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:474
+#: qcsrc/common/notifications.qh:486
 #, c-format
 msgid "^BG%s^K1 played with tiny Hagar rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:475
+#: qcsrc/common/notifications.qh:487
 #, c-format
 msgid "^BG%s%s^K1 was cut down with ^BG%s^K1's HLAC%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:476
+#: qcsrc/common/notifications.qh:488
 #, c-format
 msgid "^BG%s^K1 got a little jumpy with their HLAC%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:477
+#: qcsrc/common/notifications.qh:489
 #, c-format
 msgid "^BG%s%s^K1 was caught in ^BG%s^K1's Hook gravity bomb%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:478
+#: qcsrc/common/notifications.qh:490
 #, c-format
 msgid ""
 "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Klein Bottle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:479
+#: qcsrc/common/notifications.qh:491
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Klein Bottle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:480
+#: qcsrc/common/notifications.qh:492
 #, c-format
 msgid "^BG%s%s^K1 was shot to death by ^BG%s^K1's Laser%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:481
+#: qcsrc/common/notifications.qh:493
 #, c-format
 msgid "^BG%s^K1 shot themself to hell with their Laser%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:482
+#: qcsrc/common/notifications.qh:494
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's mine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:483
+#: qcsrc/common/notifications.qh:495
 #, c-format
 msgid "^BG%s^K1 forgot about their mine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:484
+#: qcsrc/common/notifications.qh:496
 #, c-format
 msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Minstanex%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:485
+#: qcsrc/common/notifications.qh:497
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Mortar grenade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:486
+#: qcsrc/common/notifications.qh:498
 #, c-format
 msgid "^BG%s%s^K1 ate ^BG%s^K1's Mortar grenade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:487
+#: qcsrc/common/notifications.qh:499
 #, c-format
 msgid "^BG%s^K1 didn't see their own Mortar grenade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:488
+#: qcsrc/common/notifications.qh:500
 #, c-format
 msgid "^BG%s^K1 blew themself up with their own Mortar%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:489
+#: qcsrc/common/notifications.qh:501
 #, c-format
 msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Nex%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:490
+#: qcsrc/common/notifications.qh:502
 #, c-format
 msgid "^BG%s%s^K1 was sniped with a Rifle by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:491
+#: qcsrc/common/notifications.qh:503
 #, c-format
 msgid "^BG%s%s^K1 died in ^BG%s^K1's Rifle bullet hail%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:492
+#: qcsrc/common/notifications.qh:504
 #, c-format
 msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle bullet hail%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:493
+#: qcsrc/common/notifications.qh:505
 #, c-format
 msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:494
+#: qcsrc/common/notifications.qh:506
 #, c-format
 msgid "^BG%s%s^K1 ate ^BG%s^K1's rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:495
+#: qcsrc/common/notifications.qh:507
 #, c-format
 msgid "^BG%s%s^K1 got too close ^BG%s^K1's rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:496
+#: qcsrc/common/notifications.qh:508
 #, c-format
 msgid "^BG%s^K1 blew themself up with their Rocketlauncher%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:497
+#: qcsrc/common/notifications.qh:509
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Seeker rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:498
+#: qcsrc/common/notifications.qh:510
 #, c-format
 msgid "^BG%s%s^K1 was tagged by ^BG%s^K1's Seeker%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:499
+#: qcsrc/common/notifications.qh:511
 #, c-format
 msgid "^BG%s^K1 played with tiny Seeker rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:500
+#: qcsrc/common/notifications.qh:512
 #, c-format
 msgid "^BG%s%s^K1 was gunned down by ^BG%s^K1's Shotgun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:501
+#: qcsrc/common/notifications.qh:513
 #, c-format
 msgid "^BG%s%s^K1 slapped ^BG%s^K1 around a bit with a large Shotgun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:502
+#: qcsrc/common/notifications.qh:514
 #, c-format
 msgid "^BG%s^K1 is now thinking with portals%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:503
+#: qcsrc/common/notifications.qh:515
 #, c-format
 msgid "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Tuba%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:504
+#: qcsrc/common/notifications.qh:516
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Tuba%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:505
+#: qcsrc/common/notifications.qh:517
 #, c-format
 msgid "^BG%s%s^K1 was sniped by ^BG%s^K1's Machine Gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:506
+#: qcsrc/common/notifications.qh:518
 #, c-format
 msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:518
+#: qcsrc/common/notifications.qh:536
 msgid "^BGYou are attacking!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:519
+#: qcsrc/common/notifications.qh:537
 msgid "^BGYou are defending!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:520
+#: qcsrc/common/notifications.qh:538
 msgid "^F4Begin!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:521
+#: qcsrc/common/notifications.qh:539
 msgid "^F4Game starts in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:522
+#: qcsrc/common/notifications.qh:540
 msgid "^F4Round starts in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:523
+#: qcsrc/common/notifications.qh:541
 msgid "^F4Round cannot start"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:526
+#: qcsrc/common/notifications.qh:544
 msgid "^F2Don't camp!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:527
+#: qcsrc/common/notifications.qh:545
 msgid ""
 "^BGYou are now free.\n"
 "^BGFeel free to ^F2try to capture^BG the flag again\n"
 "^BGif you think you will succeed."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:528
+#: qcsrc/common/notifications.qh:546
 msgid ""
 "^BGYou are now ^F1shielded^BG from the flag\n"
 "^BGfor ^F2too many unsuccessful attempts^BG to capture.\n"
 "^BGMake some defensive scores before trying again."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:529
+#: qcsrc/common/notifications.qh:547
 msgid "^BGYou captured the ^TC^TT^BG flag!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:530
+#: qcsrc/common/notifications.qh:548
 #, c-format
 msgid "^BGToo many flag throws! Throwing disabled for %s."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:531
+#: qcsrc/common/notifications.qh:549
 #, c-format
 msgid "^BG%s^BG passed the ^TC^TT^BG flag to %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:532
+#: qcsrc/common/notifications.qh:550
 #, c-format
 msgid "^BGYou received the ^TC^TT^BG flag from %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:533
+#: qcsrc/common/notifications.qh:551
 #, c-format
 msgid "^BG%s^BG requests you to pass the flag%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:534
+#: qcsrc/common/notifications.qh:552
 #, c-format
 msgid "^BGRequesting %s^BG to pass you the flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:535
+#: qcsrc/common/notifications.qh:553
 #, c-format
 msgid "^BGYou passed the ^TC^TT^BG flag to %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:536
+#: qcsrc/common/notifications.qh:554
 msgid "^BGYou got the ^TC^TT^BG flag!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:537
+#: qcsrc/common/notifications.qh:555
 #, c-format
 msgid "^BGThe %senemy^BG got your flag! Retrieve it!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:538
+#: qcsrc/common/notifications.qh:556
 #, c-format
 msgid "^BGThe %senemy (^BG%s%s)^BG got your flag! Retrieve it!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:539
+#: qcsrc/common/notifications.qh:557
 #, c-format
 msgid "^BGYour %steam mate^BG got the flag! Protect them!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:540
+#: qcsrc/common/notifications.qh:558
 #, c-format
 msgid "^BGYour %steam mate (^BG%s%s)^BG got the flag! Protect them!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:541
+#: qcsrc/common/notifications.qh:559
 msgid "^BGYou returned the ^TC^TT^BG flag!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:542
+#: qcsrc/common/notifications.qh:560
 msgid "^BGStalemate! Enemies can now see you on radar!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:543
+#: qcsrc/common/notifications.qh:561
 msgid "^BGStalemate! Flag carriers can now be seen by enemies on radar!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:544
+#: qcsrc/common/notifications.qh:562
 #, c-format
 msgid "^K3%sYou fragged ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:544
+#: qcsrc/common/notifications.qh:562
 #, c-format
 msgid "^K3%sYou scored against ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:545
+#: qcsrc/common/notifications.qh:563
 #, c-format
 msgid "^K1%sYou were fragged by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:545
+#: qcsrc/common/notifications.qh:563
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:546
+#: qcsrc/common/notifications.qh:564
 #, c-format
 msgid "^K1%sYou were fragged by ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:546
+#: qcsrc/common/notifications.qh:564
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:547
+#: qcsrc/common/notifications.qh:565
 #, c-format
 msgid "^K3%sYou fragged ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:547
+#: qcsrc/common/notifications.qh:565
 #, c-format
 msgid "^K3%sYou scored against ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:548
+#: qcsrc/common/notifications.qh:566
 #, c-format
 msgid "^K1%sYou scored against ^BG%s^K1 while they were typing"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:548
+#: qcsrc/common/notifications.qh:566
 #, c-format
 msgid "^K1%sYou typefragged ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:549
+#: qcsrc/common/notifications.qh:567
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^K1 while typing!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:549
+#: qcsrc/common/notifications.qh:567
 #, c-format
 msgid "^K1%sYou were typefragged by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:550
+#: qcsrc/common/notifications.qh:568
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^K1 while typing^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:550
+#: qcsrc/common/notifications.qh:568
 #, c-format
 msgid "^K1%sYou were typefragged by ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:551
+#: qcsrc/common/notifications.qh:569
 #, c-format
 msgid "^K1%sYou scored against ^BG%s^K1 while they were typing^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:551
+#: qcsrc/common/notifications.qh:569
 #, c-format
 msgid "^K1%sYou typefragged ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:552
+#: qcsrc/common/notifications.qh:570
 msgid "^BGPress ^F2DROPWEAPON^BG again to toss the nade!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:553
+#: qcsrc/common/notifications.qh:571
 #, c-format
 msgid ""
 "^BGYou have been moved into a different team\n"
 "You are now on: %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:554
+#: qcsrc/common/notifications.qh:572
 msgid "^K1Don't go against your team mates!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:554
+#: qcsrc/common/notifications.qh:572
 msgid "^K1Don't shoot your team mates!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:555
+#: qcsrc/common/notifications.qh:573
 msgid "^K1Die camper!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:555
+#: qcsrc/common/notifications.qh:573
 msgid "^K1Reconsider your tactics, camper!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:556
+#: qcsrc/common/notifications.qh:574
 msgid "^K1You unfairly eliminated yourself!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:557
+#: qcsrc/common/notifications.qh:575
 #, c-format
 msgid "^K1You were %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:558
+#: qcsrc/common/notifications.qh:576
 msgid "^K1You couldn't catch your breath!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:559
+#: qcsrc/common/notifications.qh:577
 msgid "^K1You hit the ground with a crunch!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:560
+#: qcsrc/common/notifications.qh:578
 msgid "^K1You felt a little too hot!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:560
+#: qcsrc/common/notifications.qh:578
 msgid "^K1You got a little bit too crispy!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:561
+#: qcsrc/common/notifications.qh:579
 msgid "^K1You killed your own dumb self!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:561
+#: qcsrc/common/notifications.qh:579
 msgid "^K1You need to be more careful!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:562
+#: qcsrc/common/notifications.qh:580
 msgid "^K1You couldn't stand the heat!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:563
+#: qcsrc/common/notifications.qh:581
 msgid "^K1Tastes like chicken!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:563
+#: qcsrc/common/notifications.qh:581
 msgid "^K1You forgot to put the pin back in!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:564
+#: qcsrc/common/notifications.qh:582
 msgid "^K1You are respawning for running out of ammo..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:564
+#: qcsrc/common/notifications.qh:582
 msgid "^K1You were killed for running out of ammo..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:565
+#: qcsrc/common/notifications.qh:583
 msgid "^K1You grew too old without taking your medicine"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:565
+#: qcsrc/common/notifications.qh:583
 msgid "^K1You need to preserve your health"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:566
+#: qcsrc/common/notifications.qh:584
 msgid "^K1You became a shooting star!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:567
+#: qcsrc/common/notifications.qh:585
 msgid "^K1You melted away in slime!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:568
+#: qcsrc/common/notifications.qh:586
 msgid "^K1You committed suicide!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:568
+#: qcsrc/common/notifications.qh:586
 msgid "^K1You ended it all!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:569
+#: qcsrc/common/notifications.qh:587
 msgid "^K1You got stuck in a swamp!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:570
+#: qcsrc/common/notifications.qh:588
 #, c-format
 msgid "^BGYou are now on: %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:571
+#: qcsrc/common/notifications.qh:589
 msgid "^K1You died in an accident!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:572
+#: qcsrc/common/notifications.qh:590
 msgid "^K1You had an unfortunate run in with a turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:572
+#: qcsrc/common/notifications.qh:590
 msgid "^K1You were fragged by a turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:573
+#: qcsrc/common/notifications.qh:591
 msgid "^K1You had an unfortunate run in with an eWheel turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:573
+#: qcsrc/common/notifications.qh:591
 msgid "^K1You were fragged by an eWheel turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:574
+#: qcsrc/common/notifications.qh:592
 msgid "^K1You had an unfortunate run in with a Walker turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:574
+#: qcsrc/common/notifications.qh:592
 msgid "^K1You were fragged by a Walker turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:575
+#: qcsrc/common/notifications.qh:593
 msgid "^K1You got caught in the blast of a Bumblebee explosion!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:576
+#: qcsrc/common/notifications.qh:594
 msgid "^K1You were crushed by a vehicle!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:577
+#: qcsrc/common/notifications.qh:595
 msgid "^K1You were caught in a Raptor cluster bomb!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:578
+#: qcsrc/common/notifications.qh:596
 msgid "^K1You got caught in the blast of a Raptor explosion!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:579
+#: qcsrc/common/notifications.qh:597
 msgid "^K1You got caught in the blast of a Spiderbot explosion!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:580
+#: qcsrc/common/notifications.qh:598
 msgid "^K1You were blasted to bits by a Spiderbot rocket!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:581
+#: qcsrc/common/notifications.qh:599
 msgid "^K1You got caught in the blast of a Racer explosion!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:582
+#: qcsrc/common/notifications.qh:600
 msgid "^K1You couldn't find shelter from a Racer rocket!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:583
+#: qcsrc/common/notifications.qh:601
 msgid "^K1Watch your step!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:584
+#: qcsrc/common/notifications.qh:602
 #, c-format
 msgid "^K1Moron! You fragged ^BG%s^K1, a team mate!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:584
+#: qcsrc/common/notifications.qh:602
 #, c-format
 msgid "^K1Moron! You went against ^BG%s^K1, a team mate!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:585
+#: qcsrc/common/notifications.qh:603
 #, c-format
 msgid "^K1You were fragged by ^BG%s^K1, a team mate"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:585
+#: qcsrc/common/notifications.qh:603
 #, c-format
 msgid "^K1You were scored against by ^BG%s^K1, a team mate"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:586
+#: qcsrc/common/notifications.qh:604
 msgid ""
 "^K1Stop idling!\n"
 "^BGDisconnecting in ^COUNT..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:587
+#: qcsrc/common/notifications.qh:605
 msgid "^F2You picked up some extra lives"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:588
+#: qcsrc/common/notifications.qh:606
 #, c-format
 msgid "^K3You froze ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:589
+#: qcsrc/common/notifications.qh:607
 #, c-format
 msgid "^K1You were frozen by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:590
+#: qcsrc/common/notifications.qh:608
 #, c-format
 msgid "^K3You revived ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:591
+#: qcsrc/common/notifications.qh:609
 msgid "^K3You revived yourself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:592
+#: qcsrc/common/notifications.qh:610
 #, c-format
 msgid "^K3You were revived by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:593
+#: qcsrc/common/notifications.qh:611
 #, c-format
 msgid "^K3You were automatically revived after %s second(s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:596
+#: qcsrc/common/notifications.qh:614
 msgid "^K1You froze yourself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:597
+#: qcsrc/common/notifications.qh:615
 msgid "^K1Round already started, you spawn as frozen"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:604
+#: qcsrc/common/notifications.qh:622
 msgid ""
 "^K1No spawnpoints available!\n"
 "Hope your team can fix it..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:605
+#: qcsrc/common/notifications.qh:623
 msgid ""
 "^K1You may not join the game at this time.\n"
 "The player limit reached maximum capacity."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:608
+#: qcsrc/common/notifications.qh:626
 msgid "^BGKilling people while you don't have the ball gives no points!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:609
+#: qcsrc/common/notifications.qh:627
 msgid ""
 "^BGAll keys are in your team's hands!\n"
 "Help the key carriers to meet!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:610
+#: qcsrc/common/notifications.qh:628
 msgid ""
 "^BGAll keys are in ^TC^TT team^BG's hands!\n"
 "Interfere ^F4NOW^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:611
+#: qcsrc/common/notifications.qh:629
 msgid ""
 "^BGAll keys are in your team's hands!\n"
 "Meet the other key carriers ^F4NOW^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:612
+#: qcsrc/common/notifications.qh:630
 msgid "^F4Round will start in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:613
+#: qcsrc/common/notifications.qh:631
 msgid "^BGScanning frequency range..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:614
+#: qcsrc/common/notifications.qh:632
 msgid "^BGYou are starting with the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:615 qcsrc/common/notifications.qh:616
+#: qcsrc/common/notifications.qh:633 qcsrc/common/notifications.qh:634
 #, c-format
 msgid ""
 "^BGWaiting for players to join...\n"
 "Need active players for: %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:617
+#: qcsrc/common/notifications.qh:635
 #, c-format
 msgid "^BGWaiting for %s player(s) to join..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:618
+#: qcsrc/common/notifications.qh:636
 msgid "^F4^COUNT^BG left to find some ammo!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:619
+#: qcsrc/common/notifications.qh:637
 msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:619
+#: qcsrc/common/notifications.qh:637
 msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:620
+#: qcsrc/common/notifications.qh:638
 #, c-format
 msgid "^F2Extra lives remaining: ^K1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:621
+#: qcsrc/common/notifications.qh:639
 msgid "^BGSecondary fire inflicts no damage!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:622
+#: qcsrc/common/notifications.qh:640
 #, c-format
 msgid "^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:623
+#: qcsrc/common/notifications.qh:641
 #, c-format
 msgid ""
 "^F2^COUNT^BG until weapon change...\n"
 "Next weapon: ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:624
+#: qcsrc/common/notifications.qh:642
 #, c-format
 msgid "^F2Active weapon: ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:625
+#: qcsrc/common/notifications.qh:643
 msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:626
+#: qcsrc/common/notifications.qh:644
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "Keep fragging until we have a winner!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:626
+#: qcsrc/common/notifications.qh:644
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "Keep scoring until we have a winner!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:627
+#: qcsrc/common/notifications.qh:645
 #, c-format
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "^BGAdded ^F4%s^BG to the game!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:628
+#: qcsrc/common/notifications.qh:646
 msgid "^F2Invisibility has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:629
+#: qcsrc/common/notifications.qh:647
 msgid "^F2Shield has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:630
+#: qcsrc/common/notifications.qh:648
 msgid "^F2Speed has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:631
+#: qcsrc/common/notifications.qh:649
 msgid "^F2Strength has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:632
+#: qcsrc/common/notifications.qh:650
 msgid "^F2You are invisible"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:633
+#: qcsrc/common/notifications.qh:651
 msgid "^F2Shield surrounds you"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:634
+#: qcsrc/common/notifications.qh:652
 msgid "^F2You are on speed"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:635
+#: qcsrc/common/notifications.qh:653
 msgid "^F2Strength infuses your weapons with devastating power"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:636
+#: qcsrc/common/notifications.qh:654
 msgid "^F2The race is over, finish your lap!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:637
+#: qcsrc/common/notifications.qh:655
 msgid "^F2Superweapons have broken down"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:638
+#: qcsrc/common/notifications.qh:656
 msgid "^F2Superweapons have been lost"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:639
+#: qcsrc/common/notifications.qh:657
 msgid "^F2You now have a superweapon"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:640
+#: qcsrc/common/notifications.qh:658
 msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:641
+#: qcsrc/common/notifications.qh:659
 msgid "^K1Changing team in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:642
+#: qcsrc/common/notifications.qh:660
 msgid "^K1Spectating in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:643
+#: qcsrc/common/notifications.qh:661
 msgid "^K1Suicide in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:644
+#: qcsrc/common/notifications.qh:662
 msgid "^F4Timeout begins in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:645
+#: qcsrc/common/notifications.qh:663
 msgid "^F4Timeout ends in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:907 qcsrc/common/notifications.qh:908
+#: qcsrc/common/notifications.qh:937 qcsrc/common/notifications.qh:938
 #, c-format
 msgid " (near %s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:915 qcsrc/common/notifications.qh:916
+#: qcsrc/common/notifications.qh:945 qcsrc/common/notifications.qh:946
 msgid "primary"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:915 qcsrc/common/notifications.qh:916
+#: qcsrc/common/notifications.qh:945 qcsrc/common/notifications.qh:946
 msgid "secondary"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:926
+#: qcsrc/common/notifications.qh:956
 #, c-format
 msgid " ^F1(Press %s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:935
+#: qcsrc/common/notifications.qh:965
 #, c-format
 msgid " with %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 #, c-format
 msgid "%s^K1 made a TRIPLE FRAG! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 #, c-format
 msgid "%s^K1 made a TRIPLE SCORE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 msgid "TRIPLE FRAG! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 #, c-format
 msgid "%s^K1 made FIVE SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 #, c-format
 msgid "%s^K1 unlocked RAGE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 msgid "RAGE! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 #, c-format
 msgid "%s^K1 made TEN SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 #, c-format
 msgid "%s^K1 started a MASSACRE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 msgid "MASSACRE! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 #, c-format
 msgid "%s^K1 executed MAYHEM! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 #, c-format
 msgid "%s^K1 made FIFTEEN SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 msgid "MAYHEM! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 #, c-format
 msgid "%s^K1 is a BERSERKER! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 #, c-format
 msgid "%s^K1 made TWENTY SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 msgid "BERSERKER! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 #, c-format
 msgid "%s^K1 inflicts CARNAGE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 #, c-format
 msgid "%s^K1 made TWENTY FIVE SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 msgid "CARNAGE! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 #, c-format
 msgid "%s^K1 made THIRTY SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 #, c-format
 msgid "%s^K1 unleashes ARMAGEDDON! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 msgid "ARMAGEDDON! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:956
+#: qcsrc/common/notifications.qh:986
 #, c-format
 msgid "%s(^F1Bot^BG)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:958
+#: qcsrc/common/notifications.qh:988
 #, c-format
 msgid "%s(Ping ^F1%d^BG)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:964
+#: qcsrc/common/notifications.qh:994
 #, c-format
 msgid ""
 "\n"
 "(Health ^1%d^BG / Armor ^2%d^BG)%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:966
+#: qcsrc/common/notifications.qh:996
 #, c-format
 msgid ""
 "\n"
 "(^F4Dead^BG)%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1003 qcsrc/common/notifications.qh:1016
+#: qcsrc/common/notifications.qh:1033 qcsrc/common/notifications.qh:1046
 #, c-format
 msgid "%d score spree! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1015
+#: qcsrc/common/notifications.qh:1045
 #, c-format
 msgid "%d frag spree! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1028
+#: qcsrc/common/notifications.qh:1058
 msgid "First blood! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1028
+#: qcsrc/common/notifications.qh:1058
 msgid "First score! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1032
+#: qcsrc/common/notifications.qh:1062
 msgid "First casualty! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1032
+#: qcsrc/common/notifications.qh:1062
 msgid "First victim! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1073
+#: qcsrc/common/notifications.qh:1103
 #, c-format
 msgid "%s^K1 has %d frags in a row! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1074
+#: qcsrc/common/notifications.qh:1104
 #, c-format
 msgid "%s^K1 made %d scores in a row! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1092
+#: qcsrc/common/notifications.qh:1122
 #, c-format
 msgid "%s^K1 drew first blood! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1093
+#: qcsrc/common/notifications.qh:1123
 #, c-format
 msgid "%s^K1 got the first score! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1109
+#: qcsrc/common/notifications.qh:1139
 #, c-format
 msgid ", ending their %d frag spree"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1110
+#: qcsrc/common/notifications.qh:1140
 #, c-format
 msgid ", ending their %d score spree"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1124
+#: qcsrc/common/notifications.qh:1154
 #, c-format
 msgid ", losing their %d frag spree"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1125
+#: qcsrc/common/notifications.qh:1155
 #, c-format
 msgid ", losing their %d score spree"
 msgstr ""
@@ -3138,11 +3138,11 @@ msgstr "Sak %d"
 msgid "%d (%s)"
 msgstr "%d (%s)"
 
-#: qcsrc/menu/item/textslider.c:29 qcsrc/menu/item/textslider.c:31
+#: qcsrc/menu/item/textslider.c:31 qcsrc/menu/item/textslider.c:33
 msgid "custom"
 msgstr "anpassad"
 
-#: qcsrc/menu/menu.qc:56
+#: qcsrc/menu/menu.qc:59
 #, c-format
 msgid "^4MQC Build information: ^1%s\n"
 msgstr "^4MQC Bygg information: ^1%s\n"
@@ -3189,7 +3189,7 @@ msgstr "Tack till"
 #: 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_sandboxtools.c:89
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:90
 #: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:77
 #: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:21
 msgid "OK"
@@ -3245,33 +3245,33 @@ msgstr ""
 msgid "Ammo Panel"
 msgstr "Ammunution Panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:23
 msgid "Ammunition display:"
 msgstr "Ammunution display:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:26
 msgid "Show only current ammo type"
 msgstr "Visa endast det nuvarande ammunutiontypen."
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
 msgid "Align icon:"
 msgstr "Justera ikon:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:36
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:28
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:40
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:28
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:40
-msgid "Left"
-msgstr "Vänster"
-
 #: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:30
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:38
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:29
 #: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:41
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:29
 #: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:41
+msgid "Left"
+msgstr "Vänster"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:42
 msgid "Right"
 msgstr "Höger"
 
@@ -3279,28 +3279,28 @@ msgstr "Höger"
 msgid "Centerprint"
 msgstr "Centrera textningen"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:24
 msgid "Message duration:"
 msgstr "Meddelandets gång:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:27
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:28
 msgid "Fade time:"
 msgstr "Tona ut efter:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:32
 msgid "Flip messages order"
 msgstr "Vänd meddelandenas ordning"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:34
 msgid "Text alignment:"
 msgstr "Textplacering:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:38
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:51
 msgid "Center"
 msgstr "Centrera"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:41
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:42
 msgid "Font scale:"
 msgstr "Typsnittets skala:"
 
@@ -3308,19 +3308,19 @@ msgstr "Typsnittets skala:"
 msgid "Chat Panel"
 msgstr "Chat Panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:23
 msgid "Chat entries:"
 msgstr "Chattens poster:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:26
 msgid "Chat size:"
 msgstr "Chattens storlek:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:30
 msgid "Chat lifetime:"
 msgstr "Chattens visningstid:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:34
 msgid "Chat beep sound"
 msgstr "Chat ljud"
 
@@ -3328,11 +3328,11 @@ msgstr "Chat ljud"
 msgid "Engine Info Panel"
 msgstr "Motor Info Panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:23
 msgid "Engine info:"
 msgstr "Motor info:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:26
 msgid "Use an averaging algorithm for fps"
 msgstr "Använd en genomsnittlig algorithm för fps"
 
@@ -3340,36 +3340,36 @@ msgstr "Använd en genomsnittlig algorithm för fps"
 msgid "Health/Armor Panel"
 msgstr "Liv/Rustning Panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:22
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:23
 msgid "Enable status bar"
 msgstr "Aktivera statusfältet"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:24
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:25
 msgid "Status bar alignment:"
 msgstr "Statusfältets placering:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:32
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:42
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:32
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:43
 msgid "Inward"
 msgstr "Inåt"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:34
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:43
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:34
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:44
 msgid "Outward"
 msgstr "Utåt"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:37
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:38
 msgid "Icon alignment:"
 msgstr "Ikon placering:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:46
 msgid "Flip health and armor positions"
 msgstr "Vänd liv och rustnings position"
 
@@ -3377,11 +3377,11 @@ msgstr "Vänd liv och rustnings position"
 msgid "Info Messages Panel"
 msgstr "Info Meddelanden Panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:23
 msgid "Info messages:"
 msgstr "Info meddelanden:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:26
 msgid "Flip align"
 msgstr "Vänd placering"
 
@@ -3393,23 +3393,23 @@ msgstr "Mod Ikons Panel"
 msgid "Notification Panel"
 msgstr "Notifikations Panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:23
 msgid "Notifications:"
 msgstr "Notifikationer:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:26
 msgid "Also print notifications to the console"
 msgstr "Texta även notifikationer i konsolen"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:29
 msgid "Flip notify order"
 msgstr "Vänd notifierings ordning"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:32
 msgid "Entry lifetime:"
 msgstr "Posts visningstid:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:36
 msgid "Entry fadetime:"
 msgstr "Posts uttoning:"
 
@@ -3417,96 +3417,96 @@ msgstr "Posts uttoning:"
 msgid "Physics Panel"
 msgstr "Fysik Panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:22
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:22
 msgid "Panel disabled"
 msgstr "Panel avaktiverad"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
 msgid "Panel enabled"
 msgstr "Panel aktiverad"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
 msgid "Panel enabled even observing"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:26
 msgid "Panel enabled only in Race/CTS"
 msgstr "Panel endast tillgänglig i Race/CTS"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:32
 msgid "Status bar"
 msgstr "Statusfält"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:49
 msgid "Left align"
 msgstr "Vänsterplacerad"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:53
 msgid "Right align"
 msgstr "Högerplacerad"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
 msgid "Inward align"
 msgstr "Injusterad"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:37
 msgid "Outward align"
 msgstr "Utjusterad"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:41
 msgid "Flip speed/acceleration positions"
 msgstr "Vänd hastighet/acceleration positioner"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
 #: qcsrc/menu/xonotic/dialog_settings_misc.c:29
 msgid "Speed:"
 msgstr "Hastighet:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:46
 msgid "Include vertical speed"
 msgstr "Inkludera vertikal hastighet"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:56
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:57
 msgid "Speed unit:"
 msgstr "Hastighetsenhet"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:58
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
 msgid "qu/s"
 msgstr "qu/s"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
 msgid "m/s"
 msgstr "m/s"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
 msgid "km/h"
 msgstr "km/h"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
 msgid "mph"
 msgstr "mph"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:63
 msgid "knots"
 msgstr "knop"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:64
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:65
 msgid "Show"
 msgstr "Visa"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:67
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:68
 msgid "Top speed"
 msgstr "Topphastighet"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:73
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
 msgid "Acceleration:"
 msgstr "Acceleration:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:75
 msgid "Include vertical acceleration"
 msgstr "Inkludera vertikal acceleration"
 
@@ -3514,7 +3514,7 @@ msgstr "Inkludera vertikal acceleration"
 msgid "Powerups Panel"
 msgstr "Powerups Panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:46
 msgid "Flip strength and shield positions"
 msgstr "Vänd styrka och skölds positioner"
 
@@ -3522,16 +3522,16 @@ msgstr "Vänd styrka och skölds positioner"
 msgid "Pressed Keys Panel"
 msgstr "Nedtryckta Knappar Panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
 msgid "Panel enabled when spectating"
 msgstr "Panel aktiverad när åskådar"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:24
 msgid "Panel always enabled"
 msgstr "Panel alltid aktiverad"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:31
 msgid "Forced aspect:"
 msgstr "Fast aspekt:"
 
@@ -3543,68 +3543,68 @@ msgstr "Race Tidtagare Panel"
 msgid "Radar Panel"
 msgstr "Radar Panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
 msgid "Panel enabled in teamgames"
 msgstr "Panel aktiverad i lagspel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:30
 msgid "Radar:"
 msgstr "Radar:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:32
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:43
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:82
+#: 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
 msgid "Alpha:"
 msgstr "Alfa:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:37
 msgid "Rotation:"
 msgstr "Rotation:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:39
 msgid "Forward"
 msgstr "Framåt"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:40
 msgid "West"
 msgstr "Väst"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:41
 msgid "South"
 msgstr "Syd"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:41
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:42
 msgid "East"
 msgstr "Öst"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:43
 msgid "North"
 msgstr "Nord"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:46
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:47
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:63
 msgid "Scale:"
 msgstr "Skala:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:50
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:51
 msgid "Zoom mode:"
 msgstr "Zoomläge:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:52
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:53
 msgid "Zoomed in"
 msgstr "Inzoomad"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:53
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:54
 msgid "Zoomed out"
 msgstr "Utzoomad"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:54
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:55
 msgid "Always zoomed"
 msgstr "Alltid inzoomad"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:55
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:56
 msgid "Never zoomed"
 msgstr "Aldrig inzoomad"
 
@@ -3612,23 +3612,23 @@ msgstr "Aldrig inzoomad"
 msgid "Score Panel"
 msgstr "Poängpanel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:23
 msgid "Score:"
 msgstr "Poäng:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
 msgid "Rankings:"
 msgstr "Rankning:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
 msgid "Off"
 msgstr "Av"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
 msgid "And me"
 msgstr "Och jag"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:29
 msgid "Pure"
 msgstr "Hel"
 
@@ -3636,11 +3636,11 @@ msgstr "Hel"
 msgid "Timer Panel"
 msgstr "Tidspanel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:23
 msgid "Timer:"
 msgstr "Tidtagare:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:26
 msgid "Show elapsed time"
 msgstr "Visa förfluten tid"
 
@@ -3648,7 +3648,7 @@ msgstr "Visa förfluten tid"
 msgid "Vote Panel"
 msgstr "Röstnings Panel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:23
 msgid "Alpha after voting:"
 msgstr "Alfa efter röstning:"
 
@@ -3656,76 +3656,76 @@ msgstr "Alfa efter röstning:"
 msgid "Weapons Panel"
 msgstr "Vapenpanel"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:25
 msgid "Fade out after:"
 msgstr "Tona ut efter:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:26
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:27
 msgid "Never"
 msgstr "Aldrig"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:29
 #, c-format
 msgid "%ds"
 msgstr "%ds"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:32
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:33
 msgid "Fade effect:"
 msgstr "Uttoningseffekt:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
 msgid "EF^None"
 msgstr "EF^Inget"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:37
 msgid "Alpha"
 msgstr "Alfa"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
 msgid "Slide"
 msgstr "Glid"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:39
 msgid "EF^Both"
 msgstr "EF^Båda"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:43
 msgid "Weapon icons:"
 msgstr "Vapenikoner:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46
 msgid "Show only owned weapons"
 msgstr "Visa endast tillgängliga vapen"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:48
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
 msgid "Show weapon ID as:"
 msgstr "Visa vapen-ID som:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
 msgid "SHOWAS^None"
 msgstr "SHOWAS^Inget"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
 msgid "Number"
 msgstr "Nummer"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:52
 msgid "Bind"
 msgstr "Koppla"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:54
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
 msgid "Show Accuracy"
 msgstr "Visa Sikte"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:56
 msgid "Show Ammo"
 msgstr "Visa Ammunition"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:58
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:59
 msgid "Ammo bar color:"
 msgstr "Ammunitionsfältets färg:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:64
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:65
 msgid "Ammo bar alpha:"
 msgstr "Ammunitionsfältets alfa:"
 
@@ -3733,85 +3733,85 @@ msgstr "Ammunitionsfältets alfa:"
 msgid "Panel HUD Setup"
 msgstr "Panel HUD Inställningar"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:21
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:22
 msgid "Panel background defaults:"
 msgstr "Panel bakgrunds standardinställningar:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:23 qcsrc/menu/xonotic/util.qc:683
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:24 qcsrc/menu/xonotic/util.qc:683
 msgid "Background:"
 msgstr "Bakgrund:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:25
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:37
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:52
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:686
+#: 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
 msgid "Disable"
 msgstr "Inaktivera"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:30
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:691
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:31
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:78 qcsrc/menu/xonotic/util.qc:691
 msgid "Color:"
 msgstr "Färg:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:699
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:36 qcsrc/menu/xonotic/util.qc:699
 msgid "Border size:"
 msgstr "Ramstorlek:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:50
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:89
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:51
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:90
 msgid "Team color:"
 msgstr "Lagets färg:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:725
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:59 qcsrc/menu/xonotic/util.qc:725
 msgid "Test team color in configure mode"
 msgstr "Testa lagfärg i konfigureringsläge"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:728
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:62 qcsrc/menu/xonotic/util.qc:728
 msgid "Padding:"
 msgstr "Utfyllnad:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:68
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:69
 msgid "HUD Dock:"
 msgstr "HUD Docka:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:70
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71
 msgid "DOCK^Disabled"
 msgstr "DOCK^Inaktiverad"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72
 msgid "DOCK^Small"
 msgstr "DOCK^Liten"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73
 msgid "DOCK^Medium"
 msgstr "DOCK^Medium"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:74
 msgid "DOCK^Large"
 msgstr "DOCK^Stor"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:96
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:97
 msgid "Grid settings:"
 msgstr "Rutnäts inställningar:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:99
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:100
 msgid "Snap panels to grid"
 msgstr "Knäpp paneler till rutnätet"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:102
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:103
 msgid "Grid size:"
 msgstr "Rutnätsstorlek:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:103
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:104
 msgid "X:"
 msgstr "X:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:109
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:110
 msgid "Y:"
 msgstr "Y:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:117
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:118
 msgid "Exit setup"
 msgstr "Lämna inställningar"
 
@@ -4396,7 +4396,7 @@ msgid "Key:"
 msgstr "Nyckel:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:61
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:19
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:20
 msgid "Model:"
 msgstr "Modell:"
 
@@ -4771,127 +4771,127 @@ msgstr "Nej"
 msgid "Sandbox Tools"
 msgstr "Sandbox Verktyg"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:24
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:25
 msgid "Spawn"
 msgstr "Spawn"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:25
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:26
 msgid "Remove *"
 msgstr "Ta bort *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:27
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:28
 msgid "Copy *"
 msgstr "Kopiera *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:28
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:29
 msgid "Paste"
 msgstr "Klistra"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:30
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:31
 msgid "Bone:"
 msgstr "Ben:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:35
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:36
 msgid "Set * as child"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:36
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:37
 msgid "Attach to *"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:38
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:39
 msgid "Detach from *"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:41
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:42
 msgid "Visual object properties for *:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:43
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:44
 msgid "Set skin:"
 msgstr "Sätt skinn:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:45
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:46
 msgid "Set alpha:"
 msgstr "Sätt alfa:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:48
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:49
 msgid "Set color main:"
 msgstr "Sätt huvudfärg:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:50
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:51
 msgid "Set color glow:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:54
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:55
 msgid "Set frame:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:58
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:59
 msgid "Physical object properties for *:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:60
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:61
 msgid "Set material:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:66
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:67
 msgid "Set solidity:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:67
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:68
 msgid "Non-solid"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:68
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:69
 msgid "Solid"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:69
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:70
 msgid "Set physics:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:70
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:71
 msgid "Static"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:71
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:72
 msgid "Movable"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:72
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:73
 msgid "Physical"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:74
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:75
 msgid "Set scale:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:76
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:77
 msgid "Set force:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:80
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:81
 msgid "Claim *"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:82
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:83
 msgid "* object info"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:83
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:84
 msgid "* mesh info"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:84
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:85
 msgid "* attachment info"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:85
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:86
 msgid "Show help"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:86
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:87
 msgid "* is the object you are facing"
 msgstr ""
 
@@ -5888,27 +5888,27 @@ msgstr "Vinnare"
 msgid "Team Selection"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:41
+#: qcsrc/menu/xonotic/dialog_teamselect.c:42
 msgid "join 'best' team (auto-select)"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:45
+#: qcsrc/menu/xonotic/dialog_teamselect.c:46
 msgid "red"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:46
+#: qcsrc/menu/xonotic/dialog_teamselect.c:47
 msgid "blue"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:47
+#: qcsrc/menu/xonotic/dialog_teamselect.c:48
 msgid "yellow"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:48
+#: qcsrc/menu/xonotic/dialog_teamselect.c:49
 msgid "pink"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:51
+#: qcsrc/menu/xonotic/dialog_teamselect.c:52
 msgid "spectate"
 msgstr ""
 
@@ -6004,7 +6004,12 @@ msgstr ""
 msgid "%s dB"
 msgstr ""
 
-#: qcsrc/menu/xonotic/slider_resolution.c:72
+#: qcsrc/menu/xonotic/slider_resolution.c:103
+#, c-format
+msgid "%dx%d (%d:%d)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_resolution.c:106
 #, c-format
 msgid "%dx%d"
 msgstr ""
index 52a88327aa77573fffea6e79b41f6d0bc8998695..6fd482673f0bda535779ade3640d69dc92027dc5 100644 (file)
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Xonotic\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-09-13 10:31+0200\n"
-"PO-Revision-Date: 2013-09-13 08:33+0000\n"
+"POT-Creation-Date: 2013-10-03 11:55+0200\n"
+"PO-Revision-Date: 2013-10-03 10:08+0000\n"
 "Last-Translator: divVerent <divVerent@xonotic.org>\n"
 "Language-Team: Ukrainian (http://www.transifex.com/projects/p/xonotic/"
 "language/uk/)\n"
@@ -1232,7 +1232,7 @@ msgstr ""
 msgid "@!#%'n Tuba Throwing"
 msgstr "@!#%'n Tuba Throwing"
 
-#: qcsrc/common/mapinfo.qc:1105 qcsrc/menu/xonotic/skinlist.c:166
+#: qcsrc/common/mapinfo.qc:1109 qcsrc/menu/xonotic/skinlist.c:166
 #, c-format
 msgid "%s: %s"
 msgstr "%s: %s"
@@ -1306,968 +1306,968 @@ msgstr "^1Повідомлення сервера:"
 msgid "^7%s (^3%d sec left)"
 msgstr "^7%s (^3%d секунд залишилось)"
 
-#: qcsrc/common/notifications.qh:330
+#: qcsrc/common/notifications.qh:342
 #, c-format
 msgid "^BG%s^BG captured the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:331
+#: qcsrc/common/notifications.qh:343
 #, c-format
 msgid ""
 "^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG"
 "%s^BG's previous record of ^F2%s^BG seconds"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:332
+#: qcsrc/common/notifications.qh:344
 #, c-format
 msgid "^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:333
+#: qcsrc/common/notifications.qh:345
 #, c-format
 msgid ""
 "^BG%s^BG captured the ^TC^TT^BG flag in ^F2%s^BG seconds, failing to break "
 "^BG%s^BG's previous record of ^F1%s^BG seconds"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:334
+#: qcsrc/common/notifications.qh:346
 msgid "^BGThe ^TC^TT^BG flag was returned to base by its owner"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:335
+#: qcsrc/common/notifications.qh:347
 msgid "^BGThe ^TC^TT^BG flag was destroyed and returned to base"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:336
+#: qcsrc/common/notifications.qh:348
 msgid "^BGThe ^TC^TT^BG flag was dropped in the base and returned itself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:337
+#: qcsrc/common/notifications.qh:349
 msgid ""
 "^BGThe ^TC^TT^BG flag fell somewhere it couldn't be reached and returned to "
 "base"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:338
+#: qcsrc/common/notifications.qh:350
 #, c-format
 msgid ""
 "^BGThe ^TC^TT^BG flag became impatient after ^F1%.2f^BG seconds and returned "
 "itself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:339
+#: qcsrc/common/notifications.qh:351
 msgid "^BGThe ^TC^TT^BG flag has returned to the base"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:340
+#: qcsrc/common/notifications.qh:352
 #, c-format
 msgid "^BG%s^BG lost the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:341
+#: qcsrc/common/notifications.qh:353
 #, c-format
 msgid "^BG%s^BG got the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:342
+#: qcsrc/common/notifications.qh:354
 #, c-format
 msgid "^BG%s^BG returned the ^TC^TT^BG flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:343
+#: qcsrc/common/notifications.qh:355
 #, c-format
 msgid "^BG%s%s^K1 was unfairly eliminated by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:344
+#: qcsrc/common/notifications.qh:356
 #, c-format
 msgid "^BG%s%s^K1 was drowned by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:345
+#: qcsrc/common/notifications.qh:357
 #, c-format
 msgid "^BG%s%s^K1 was grounded by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:346
+#: qcsrc/common/notifications.qh:358
 #, c-format
 msgid "^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:346
+#: qcsrc/common/notifications.qh:358
 #, c-format
 msgid "^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:347
+#: qcsrc/common/notifications.qh:359
 #, c-format
 msgid "^BG%s%s^K1 was cooked by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:348
+#: qcsrc/common/notifications.qh:360
 #, c-format
 msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:349
+#: qcsrc/common/notifications.qh:361
 #, c-format
 msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:350
+#: qcsrc/common/notifications.qh:362
 #, c-format
 msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:351
+#: qcsrc/common/notifications.qh:363
 #, c-format
 msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:352
+#: qcsrc/common/notifications.qh:364
 #, c-format
 msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:352
+#: qcsrc/common/notifications.qh:364
 #, c-format
 msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:353
+#: qcsrc/common/notifications.qh:365
 #, c-format
 msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:354
+#: qcsrc/common/notifications.qh:366
 #, c-format
 msgid ""
 "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:355
+#: qcsrc/common/notifications.qh:367
 #, c-format
 msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:356
+#: qcsrc/common/notifications.qh:368
 #, c-format
 msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:357
+#: qcsrc/common/notifications.qh:369
 #, c-format
 msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:358
+#: qcsrc/common/notifications.qh:370
 #, c-format
 msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:359
+#: qcsrc/common/notifications.qh:371
 #, c-format
 msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:360
+#: qcsrc/common/notifications.qh:372
 #, c-format
 msgid ""
 "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:361
+#: qcsrc/common/notifications.qh:373
 #, c-format
 msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:362
+#: qcsrc/common/notifications.qh:374
 #, c-format
 msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:363
+#: qcsrc/common/notifications.qh:375
 #, c-format
 msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:364
+#: qcsrc/common/notifications.qh:376
 #, c-format
 msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:365
+#: qcsrc/common/notifications.qh:377
 #, c-format
 msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:366
+#: qcsrc/common/notifications.qh:378
 #, c-format
 msgid "^BG%s%s^K1 was thrown into a world of hurt by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:367
+#: qcsrc/common/notifications.qh:379
 #, c-format
 msgid "^BG%s^K1 was moved into the %s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:368
+#: qcsrc/common/notifications.qh:380
 #, c-format
 msgid "^BG%s^K1 became enemies with the Lord of Teamplay%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:369
+#: qcsrc/common/notifications.qh:381
 #, c-format
 msgid "^BG%s^K1 thought they found a nice camping ground%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:370
+#: qcsrc/common/notifications.qh:382
 #, c-format
 msgid "^BG%s^K1 unfairly eliminated themself%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:371
+#: qcsrc/common/notifications.qh:383
 #, c-format
 msgid "^BG%s^K1 %s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:372
+#: qcsrc/common/notifications.qh:384
 #, c-format
 msgid "^BG%s^K1 couldn't catch their breath%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:372
+#: qcsrc/common/notifications.qh:384
 #, c-format
 msgid "^BG%s^K1 was in the water for too long%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:373
+#: qcsrc/common/notifications.qh:385
 #, c-format
 msgid "^BG%s^K1 hit the ground with a bit too much force%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:373
+#: qcsrc/common/notifications.qh:385
 #, c-format
 msgid "^BG%s^K1 hit the ground with a crunch%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:374
+#: qcsrc/common/notifications.qh:386
 #, c-format
 msgid "^BG%s^K1 became a bit too crispy%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:374
+#: qcsrc/common/notifications.qh:386
 #, c-format
 msgid "^BG%s^K1 felt a little hot%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:375
+#: qcsrc/common/notifications.qh:387
 #, c-format
 msgid "^BG%s^K1 died%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:376
+#: qcsrc/common/notifications.qh:388
 #, c-format
 msgid "^BG%s^K1 found a hot place%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:376
+#: qcsrc/common/notifications.qh:388
 #, c-format
 msgid "^BG%s^K1 turned into hot slag%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:377
+#: qcsrc/common/notifications.qh:389
 #, c-format
 msgid "^BG%s^K1 mastered the art of self-nading%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:378
+#: qcsrc/common/notifications.qh:390
 #, c-format
 msgid "^BG%s^K1 died%s%s. What's the point of living without ammo?"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:378
+#: qcsrc/common/notifications.qh:390
 #, c-format
 msgid "^BG%s^K1 ran out of ammo%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:379
+#: qcsrc/common/notifications.qh:391
 #, c-format
 msgid "^BG%s^K1 rotted away%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:380
+#: qcsrc/common/notifications.qh:392
 #, c-format
 msgid "^BG%s^K1 became a shooting star%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:393
 #, c-format
 msgid "^BG%s^K1 was slimed%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:394
 #, c-format
 msgid "^BG%s^K1 couldn't take it anymore%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:395
 #, c-format
 msgid "^BG%s^K1 is now preserved for centuries to come%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:396
 #, c-format
 msgid "^BG%s^K1 switched to the %s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:397
 #, c-format
 msgid "^BG%s^K1 died in an accident%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:398
 #, c-format
 msgid "^BG%s^K1 ran into a turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:399
 #, c-format
 msgid "^BG%s^K1 was blasted away by an eWheel turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:400
 #, c-format
 msgid "^BG%s^K1 got caught up in the FLAC turret fire%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:401
 #, c-format
 msgid "^BG%s^K1 was blasted away by a Hellion turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:402
 #, c-format
 msgid "^BG%s^K1 could not hide from the Hunter turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:403
 #, c-format
 msgid "^BG%s^K1 was riddled full of holes by a Machinegun turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:404
 #, c-format
 msgid "^BG%s^K1 got turned into smoldering gibs by an MLRS turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:405
 #, c-format
 msgid "^BG%s^K1 was phased out by a turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:406
 #, c-format
 msgid "^BG%s^K1 got served some superheated plasma from a turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:407
 #, c-format
 msgid "^BG%s^K1 was electrocuted by a Tesla turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:408
 #, c-format
 msgid "^BG%s^K1 got served a lead enrichment by a Walker turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:409
 #, c-format
 msgid "^BG%s^K1 was impaled by a Walker turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:410
 #, c-format
 msgid "^BG%s^K1 was blasted away by a Walker turret%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:411
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Bumblebee explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:412
 #, c-format
 msgid "^BG%s^K1 was crushed by a vehicle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:401
+#: qcsrc/common/notifications.qh:413
 #, c-format
 msgid "^BG%s^K1 was caught in a Raptor cluster bomb%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:402
+#: qcsrc/common/notifications.qh:414
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Raptor explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:403
+#: qcsrc/common/notifications.qh:415
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Spiderbot explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:404
+#: qcsrc/common/notifications.qh:416
 #, c-format
 msgid "^BG%s^K1 was blasted to bits by a Spiderbot rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:405
+#: qcsrc/common/notifications.qh:417
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Racer explosion%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:406
+#: qcsrc/common/notifications.qh:418
 #, c-format
 msgid "^BG%s^K1 couldn't find shelter from a Racer rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:407
+#: qcsrc/common/notifications.qh:419
 #, c-format
 msgid "^BG%s^K1 was in the wrong place%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:408
+#: qcsrc/common/notifications.qh:420
 #, c-format
 msgid "^BG%s^K1 was betrayed by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:409
+#: qcsrc/common/notifications.qh:421
 #, c-format
 msgid "^BG%s^K1 was frozen by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:410
+#: qcsrc/common/notifications.qh:422
 #, c-format
 msgid "^BG%s^K3 was revived by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:411
+#: qcsrc/common/notifications.qh:423
 #, c-format
 msgid "^BG%s^K3 was revived by falling"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:412
+#: qcsrc/common/notifications.qh:424
 #, c-format
 msgid "^BG%s^K3 was automatically revived after %s second(s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:413 qcsrc/common/notifications.qh:594
+#: qcsrc/common/notifications.qh:425 qcsrc/common/notifications.qh:612
 msgid "^TC^TT^BG team wins the round"
 msgstr "^TC^TT^BG команда виграє раунд"
 
-#: qcsrc/common/notifications.qh:414 qcsrc/common/notifications.qh:595
+#: qcsrc/common/notifications.qh:426 qcsrc/common/notifications.qh:613
 #, c-format
 msgid "^BG%s^BG wins the round"
 msgstr "^BG%s^BG виграє раунд"
 
-#: qcsrc/common/notifications.qh:415 qcsrc/common/notifications.qh:524
+#: qcsrc/common/notifications.qh:427 qcsrc/common/notifications.qh:542
 msgid "^BGRound tied"
 msgstr "^BGНічия"
 
-#: qcsrc/common/notifications.qh:416 qcsrc/common/notifications.qh:525
+#: qcsrc/common/notifications.qh:428 qcsrc/common/notifications.qh:543
 msgid "^BGRound over, there's no winner"
 msgstr "^BGРаунд завершено, переможця немає"
 
-#: qcsrc/common/notifications.qh:417
+#: qcsrc/common/notifications.qh:429
 #, c-format
 msgid "^BG%s^K1 froze themself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:418
+#: qcsrc/common/notifications.qh:430
 #, c-format
 msgid "^BGGodmode saved you %s units of damage, cheater!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:419 qcsrc/common/notifications.qh:598
+#: qcsrc/common/notifications.qh:431 qcsrc/common/notifications.qh:616
 #, c-format
 msgid "^BGYou do not have the ^F1%s"
 msgstr "^BGВи не маєте ^F1%s"
 
-#: qcsrc/common/notifications.qh:420 qcsrc/common/notifications.qh:599
+#: qcsrc/common/notifications.qh:432 qcsrc/common/notifications.qh:617
 #, c-format
 msgid "^BGYou dropped the ^F1%s^BG%s"
 msgstr "^BGВи втратили ^F1%s^BG%s"
 
-#: qcsrc/common/notifications.qh:421 qcsrc/common/notifications.qh:600
+#: qcsrc/common/notifications.qh:433 qcsrc/common/notifications.qh:618
 #, c-format
 msgid "^BGYou got the ^F1%s"
 msgstr "^BGВи отримали ^F1%s"
 
-#: qcsrc/common/notifications.qh:422 qcsrc/common/notifications.qh:601
+#: qcsrc/common/notifications.qh:434 qcsrc/common/notifications.qh:619
 #, c-format
 msgid "^BGYou don't have enough ammo for the ^F1%s"
 msgstr "^BGУ вас недостатньо набоїв для ^F1%s"
 
-#: qcsrc/common/notifications.qh:423 qcsrc/common/notifications.qh:602
+#: qcsrc/common/notifications.qh:435 qcsrc/common/notifications.qh:620
 #, c-format
 msgid "^F1%s %s^BG is unable to fire, but its ^F1%s^BG can"
 msgstr "^F1%s %s^BG не може стріляти, але ^F1%s^BG може"
 
-#: qcsrc/common/notifications.qh:424 qcsrc/common/notifications.qh:603
+#: qcsrc/common/notifications.qh:436 qcsrc/common/notifications.qh:621
 #, c-format
 msgid "^F1%s^BG is ^F4not available^BG on this map"
 msgstr "^F1%s^BG ^F4недоступний(а)^BG на цій мапі"
 
-#: qcsrc/common/notifications.qh:425
+#: qcsrc/common/notifications.qh:437
 #, c-format
 msgid "^BG%s^F3 connected%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:426
+#: qcsrc/common/notifications.qh:438
 #, c-format
 msgid "^BG%s^F3 connected and joined the ^TC^TT team"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:427
+#: qcsrc/common/notifications.qh:439
 #, c-format
 msgid "^BG%s^F3 is now playing"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:428 qcsrc/common/notifications.qh:606
+#: qcsrc/common/notifications.qh:440 qcsrc/common/notifications.qh:624
 #, c-format
 msgid "^BG%s^BG has dropped the ball!"
 msgstr "^BG%s^BG втратив м'яча!"
 
-#: qcsrc/common/notifications.qh:429 qcsrc/common/notifications.qh:607
+#: qcsrc/common/notifications.qh:441 qcsrc/common/notifications.qh:625
 #, c-format
 msgid "^BG%s^BG has picked up the ball!"
 msgstr "^BG%s^BG заволодів м'ячем!"
 
-#: qcsrc/common/notifications.qh:430
+#: qcsrc/common/notifications.qh:442
 #, c-format
 msgid "^BG%s^BG captured the keys for the ^TC^TT team"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:431
+#: qcsrc/common/notifications.qh:443
 #, c-format
 msgid "^BG%s^BG dropped the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:432
+#: qcsrc/common/notifications.qh:444
 #, c-format
 msgid "^BG%s^BG lost the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:433
+#: qcsrc/common/notifications.qh:445
 #, c-format
 msgid "^BG%s^BG picked up the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:434
+#: qcsrc/common/notifications.qh:446
 #, c-format
 msgid "^BG%s^F3 forfeited"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:435
+#: qcsrc/common/notifications.qh:447
 #, c-format
 msgid "^BG%s^F3 has no more lives left"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:436
+#: qcsrc/common/notifications.qh:448
 #, c-format
 msgid "^BG%s^K1 picked up Invisibility"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:437
+#: qcsrc/common/notifications.qh:449
 #, c-format
 msgid "^BG%s^K1 picked up Shield"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:438
+#: qcsrc/common/notifications.qh:450
 #, c-format
 msgid "^BG%s^K1 picked up Speed"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:439
+#: qcsrc/common/notifications.qh:451
 #, c-format
 msgid "^BG%s^K1 picked up Strength"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:440
+#: qcsrc/common/notifications.qh:452
 #, c-format
 msgid "^BG%s^F3 disconnected"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:441
+#: qcsrc/common/notifications.qh:453
 #, c-format
 msgid "^BG%s^F3 was kicked for idling"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:442
+#: qcsrc/common/notifications.qh:454
 msgid ""
 "^F2You were kicked from the server because you are a spectator and "
 "spectators aren't allowed at the moment."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:443
+#: qcsrc/common/notifications.qh:455
 #, c-format
 msgid "^BG%s^F3 is now spectating"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:444
+#: qcsrc/common/notifications.qh:456
 #, c-format
 msgid "^BG%s^BG has abandoned the race"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:445
+#: qcsrc/common/notifications.qh:457
 #, c-format
 msgid "^BG%s^BG couldn't break their %s%s^BG place record of %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:446
+#: qcsrc/common/notifications.qh:458
 #, c-format
 msgid "^BG%s^BG couldn't break the %s%s^BG place record of %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:447
+#: qcsrc/common/notifications.qh:459
 #, c-format
 msgid "^BG%s^BG has finished the race"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:448
+#: qcsrc/common/notifications.qh:460
 #, c-format
 msgid "^BG%s^BG broke %s^BG's %s%s^BG place record with %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:449
+#: qcsrc/common/notifications.qh:461
 #, c-format
 msgid "^BG%s^BG improved their %s%s^BG place record with %s%s %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:450
+#: qcsrc/common/notifications.qh:462
 #, c-format
 msgid ""
 "^BG%s^BG scored a new record with ^F2%s^BG, but unfortunately lacks a UID "
 "and will be lost."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:451
+#: qcsrc/common/notifications.qh:463
 #, c-format
 msgid "^BG%s^BG set the %s%s^BG place record with %s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:452
+#: qcsrc/common/notifications.qh:464
 msgid "^TC^TT ^BGteam scores!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:453
+#: qcsrc/common/notifications.qh:465
 #, 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 ""
 
-#: qcsrc/common/notifications.qh:454
+#: qcsrc/common/notifications.qh:466
 #, c-format
 msgid "^BG%s^K1 picked up a Superweapon"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:455
+#: qcsrc/common/notifications.qh:467
 #, c-format
 msgid ""
 "^F4NOTE: ^BGThe server is running ^F1Xonotic %s (beta)^BG, you have "
 "^F2Xonotic %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:456
+#: qcsrc/common/notifications.qh:468
 #, c-format
 msgid ""
 "^F4NOTE: ^BGThe server is running ^F1Xonotic %s^BG, you have ^F2Xonotic %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:457
+#: qcsrc/common/notifications.qh:469
 #, c-format
 msgid ""
 "^F4NOTE: ^F1Xonotic %s^BG is out, and you still have ^F2Xonotic %s^BG - get "
 "the update from ^F3http://www.xonotic.org/^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:458
+#: qcsrc/common/notifications.qh:470
 #, c-format
 msgid "^F3SVQC Build information: ^F4%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:459
+#: qcsrc/common/notifications.qh:471
 #, c-format
 msgid ""
 "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Accordeon%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:460
+#: qcsrc/common/notifications.qh:472
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Accordeon%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:461
+#: qcsrc/common/notifications.qh:473
 #, c-format
 msgid "^BG%s%s^K1 felt the strong pull of ^BG%s^K1's Crylink%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:462
+#: qcsrc/common/notifications.qh:474
 #, c-format
 msgid "^BG%s^K1 felt the strong pull of their Crylink%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:463
+#: qcsrc/common/notifications.qh:475
 #, c-format
 msgid "^BG%s%s^K1 was blasted by ^BG%s^K1's Electro bolt%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:464
+#: qcsrc/common/notifications.qh:476
 #, c-format
 msgid "^BG%s%s^K1 felt the electrifying air of ^BG%s^K1's Electro combo%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:465
+#: qcsrc/common/notifications.qh:477
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Electro plasma%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:466
+#: qcsrc/common/notifications.qh:478
 #, c-format
 msgid "^BG%s^K1 played with Electro plasma%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:467
+#: qcsrc/common/notifications.qh:479
 #, c-format
 msgid "^BG%s^K1 could not remember where they put their Electro plasma%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:468
+#: qcsrc/common/notifications.qh:480
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's fireball%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:469
+#: qcsrc/common/notifications.qh:481
 #, c-format
 msgid "^BG%s%s^K1 got burnt by ^BG%s^K1's firemine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:470
+#: qcsrc/common/notifications.qh:482
 #, c-format
 msgid "^BG%s^K1 should have used a smaller gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:471
+#: qcsrc/common/notifications.qh:483
 #, c-format
 msgid "^BG%s^K1 forgot about their firemine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:472
+#: qcsrc/common/notifications.qh:484
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by a burst of ^BG%s^K1's Hagar rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:473
+#: qcsrc/common/notifications.qh:485
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Hagar rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:474
+#: qcsrc/common/notifications.qh:486
 #, c-format
 msgid "^BG%s^K1 played with tiny Hagar rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:475
+#: qcsrc/common/notifications.qh:487
 #, c-format
 msgid "^BG%s%s^K1 was cut down with ^BG%s^K1's HLAC%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:476
+#: qcsrc/common/notifications.qh:488
 #, c-format
 msgid "^BG%s^K1 got a little jumpy with their HLAC%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:477
+#: qcsrc/common/notifications.qh:489
 #, c-format
 msgid "^BG%s%s^K1 was caught in ^BG%s^K1's Hook gravity bomb%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:478
+#: qcsrc/common/notifications.qh:490
 #, c-format
 msgid ""
 "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Klein Bottle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:479
+#: qcsrc/common/notifications.qh:491
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Klein Bottle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:480
+#: qcsrc/common/notifications.qh:492
 #, c-format
 msgid "^BG%s%s^K1 was shot to death by ^BG%s^K1's Laser%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:481
+#: qcsrc/common/notifications.qh:493
 #, c-format
 msgid "^BG%s^K1 shot themself to hell with their Laser%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:482
+#: qcsrc/common/notifications.qh:494
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's mine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:483
+#: qcsrc/common/notifications.qh:495
 #, c-format
 msgid "^BG%s^K1 forgot about their mine%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:484
+#: qcsrc/common/notifications.qh:496
 #, c-format
 msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Minstanex%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:485
+#: qcsrc/common/notifications.qh:497
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Mortar grenade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:486
+#: qcsrc/common/notifications.qh:498
 #, c-format
 msgid "^BG%s%s^K1 ate ^BG%s^K1's Mortar grenade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:487
+#: qcsrc/common/notifications.qh:499
 #, c-format
 msgid "^BG%s^K1 didn't see their own Mortar grenade%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:488
+#: qcsrc/common/notifications.qh:500
 #, c-format
 msgid "^BG%s^K1 blew themself up with their own Mortar%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:489
+#: qcsrc/common/notifications.qh:501
 #, c-format
 msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Nex%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:490
+#: qcsrc/common/notifications.qh:502
 #, c-format
 msgid "^BG%s%s^K1 was sniped with a Rifle by ^BG%s^K1%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:491
+#: qcsrc/common/notifications.qh:503
 #, c-format
 msgid "^BG%s%s^K1 died in ^BG%s^K1's Rifle bullet hail%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:492
+#: qcsrc/common/notifications.qh:504
 #, c-format
 msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle bullet hail%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:493
+#: qcsrc/common/notifications.qh:505
 #, c-format
 msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:494
+#: qcsrc/common/notifications.qh:506
 #, c-format
 msgid "^BG%s%s^K1 ate ^BG%s^K1's rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:495
+#: qcsrc/common/notifications.qh:507
 #, c-format
 msgid "^BG%s%s^K1 got too close ^BG%s^K1's rocket%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:496
+#: qcsrc/common/notifications.qh:508
 #, c-format
 msgid "^BG%s^K1 blew themself up with their Rocketlauncher%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:497
+#: qcsrc/common/notifications.qh:509
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Seeker rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:498
+#: qcsrc/common/notifications.qh:510
 #, c-format
 msgid "^BG%s%s^K1 was tagged by ^BG%s^K1's Seeker%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:499
+#: qcsrc/common/notifications.qh:511
 #, c-format
 msgid "^BG%s^K1 played with tiny Seeker rockets%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:500
+#: qcsrc/common/notifications.qh:512
 #, c-format
 msgid "^BG%s%s^K1 was gunned down by ^BG%s^K1's Shotgun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:501
+#: qcsrc/common/notifications.qh:513
 #, c-format
 msgid "^BG%s%s^K1 slapped ^BG%s^K1 around a bit with a large Shotgun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:502
+#: qcsrc/common/notifications.qh:514
 #, c-format
 msgid "^BG%s^K1 is now thinking with portals%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:503
+#: qcsrc/common/notifications.qh:515
 #, c-format
 msgid "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Tuba%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:504
+#: qcsrc/common/notifications.qh:516
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Tuba%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:505
+#: qcsrc/common/notifications.qh:517
 #, c-format
 msgid "^BG%s%s^K1 was sniped by ^BG%s^K1's Machine Gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:506
+#: qcsrc/common/notifications.qh:518
 #, c-format
 msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:518
+#: qcsrc/common/notifications.qh:536
 msgid "^BGYou are attacking!"
 msgstr "^BGВи нападаєте!"
 
-#: qcsrc/common/notifications.qh:519
+#: qcsrc/common/notifications.qh:537
 msgid "^BGYou are defending!"
 msgstr "^BGВи захищаєтесь!"
 
-#: qcsrc/common/notifications.qh:520
+#: qcsrc/common/notifications.qh:538
 msgid "^F4Begin!"
 msgstr "^F4Починайте!"
 
-#: qcsrc/common/notifications.qh:521
+#: qcsrc/common/notifications.qh:539
 msgid "^F4Game starts in ^COUNT"
 msgstr "^F4Гра почнеться через ^COUNT"
 
-#: qcsrc/common/notifications.qh:522
+#: qcsrc/common/notifications.qh:540
 msgid "^F4Round starts in ^COUNT"
 msgstr "^F4Раунд почнеться через ^COUNT"
 
-#: qcsrc/common/notifications.qh:523
+#: qcsrc/common/notifications.qh:541
 msgid "^F4Round cannot start"
 msgstr "^F4Раунд не може початися"
 
-#: qcsrc/common/notifications.qh:526
+#: qcsrc/common/notifications.qh:544
 msgid "^F2Don't camp!"
 msgstr "^F2Не кемперіть!"
 
-#: qcsrc/common/notifications.qh:527
+#: qcsrc/common/notifications.qh:545
 msgid ""
 "^BGYou are now free.\n"
 "^BGFeel free to ^F2try to capture^BG the flag again\n"
@@ -2277,7 +2277,7 @@ msgstr ""
 "^BGМоже те знову ^F2спробувати^BG захопити прапор\n"
 "^BGякщо гадаєте, що вам це вдасться."
 
-#: qcsrc/common/notifications.qh:528
+#: qcsrc/common/notifications.qh:546
 msgid ""
 "^BGYou are now ^F1shielded^BG from the flag\n"
 "^BGfor ^F2too many unsuccessful attempts^BG to capture.\n"
@@ -2287,163 +2287,163 @@ msgstr ""
 "^BGза ^F2багато невдалих спроб^BG захопити його.\n"
 "^BGСпробуйте заробити кілька очок у захисті, перш ніж пробувати знову."
 
-#: qcsrc/common/notifications.qh:529
+#: qcsrc/common/notifications.qh:547
 msgid "^BGYou captured the ^TC^TT^BG flag!"
 msgstr "^BGВи захопили ^TC^TT^BG прапор!"
 
-#: qcsrc/common/notifications.qh:530
+#: qcsrc/common/notifications.qh:548
 #, c-format
 msgid "^BGToo many flag throws! Throwing disabled for %s."
 msgstr "^BGЗанадто багато кидків прапору! Кидання недоступне на %s."
 
-#: qcsrc/common/notifications.qh:531
+#: qcsrc/common/notifications.qh:549
 #, c-format
 msgid "^BG%s^BG passed the ^TC^TT^BG flag to %s"
 msgstr "^BG%s^BG передав ^TC^TT^BG прапор до %s"
 
-#: qcsrc/common/notifications.qh:532
+#: qcsrc/common/notifications.qh:550
 #, c-format
 msgid "^BGYou received the ^TC^TT^BG flag from %s"
 msgstr "^BGВи отримали ^TC^TT^BG прапор від %s"
 
-#: qcsrc/common/notifications.qh:533
+#: qcsrc/common/notifications.qh:551
 #, c-format
 msgid "^BG%s^BG requests you to pass the flag%s"
 msgstr "^BG%s^BG просить вас передати прапор%s"
 
-#: qcsrc/common/notifications.qh:534
+#: qcsrc/common/notifications.qh:552
 #, c-format
 msgid "^BGRequesting %s^BG to pass you the flag"
 msgstr "^BGПросить %s^BG передати вам прапор"
 
-#: qcsrc/common/notifications.qh:535
+#: qcsrc/common/notifications.qh:553
 #, c-format
 msgid "^BGYou passed the ^TC^TT^BG flag to %s"
 msgstr "^BGВи передали ^TC^TT^BG прапор до %s"
 
-#: qcsrc/common/notifications.qh:536
+#: qcsrc/common/notifications.qh:554
 msgid "^BGYou got the ^TC^TT^BG flag!"
 msgstr "^BGВи отримали ^TC^TT^BG прапор!"
 
-#: qcsrc/common/notifications.qh:537
+#: qcsrc/common/notifications.qh:555
 #, c-format
 msgid "^BGThe %senemy^BG got your flag! Retrieve it!"
 msgstr "^BG%sПротивник^BG захопив ваш прапор! Поверніть його!"
 
-#: qcsrc/common/notifications.qh:538
+#: qcsrc/common/notifications.qh:556
 #, c-format
 msgid "^BGThe %senemy (^BG%s%s)^BG got your flag! Retrieve it!"
 msgstr "^BG%sПротивник (^BG%s%s)^BG захопив ваш прапор! Поверніть його!"
 
-#: qcsrc/common/notifications.qh:539
+#: qcsrc/common/notifications.qh:557
 #, c-format
 msgid "^BGYour %steam mate^BG got the flag! Protect them!"
 msgstr "^BGВаш %sтовариш по команді^BG захопив прапор! Захищайте його!"
 
-#: qcsrc/common/notifications.qh:540
+#: qcsrc/common/notifications.qh:558
 #, c-format
 msgid "^BGYour %steam mate (^BG%s%s)^BG got the flag! Protect them!"
 msgstr ""
 "^BGВаш %sтовариш по команді (^BG%s%s)^BG захопив прапор! Захищайте його!"
 
-#: qcsrc/common/notifications.qh:541
+#: qcsrc/common/notifications.qh:559
 msgid "^BGYou returned the ^TC^TT^BG flag!"
 msgstr "^BGВи повернули ^TC^TT^BG прапор!"
 
-#: qcsrc/common/notifications.qh:542
+#: qcsrc/common/notifications.qh:560
 msgid "^BGStalemate! Enemies can now see you on radar!"
 msgstr "^BGПатова ситуація! Противники тепер можуть бачити вас на радарі!"
 
-#: qcsrc/common/notifications.qh:543
+#: qcsrc/common/notifications.qh:561
 msgid "^BGStalemate! Flag carriers can now be seen by enemies on radar!"
 msgstr ""
 "^BGПатова ситуація! Противники тепер можуть бачити носіїв прапорів на радарі!"
 
-#: qcsrc/common/notifications.qh:544
+#: qcsrc/common/notifications.qh:562
 #, c-format
 msgid "^K3%sYou fragged ^BG%s"
 msgstr "^K3%sВи фрагнули ^BG%s"
 
-#: qcsrc/common/notifications.qh:544
+#: qcsrc/common/notifications.qh:562
 #, c-format
 msgid "^K3%sYou scored against ^BG%s"
 msgstr "^K3%sВи виграли очко у ^BG%s"
 
-#: qcsrc/common/notifications.qh:545
+#: qcsrc/common/notifications.qh:563
 #, c-format
 msgid "^K1%sYou were fragged by ^BG%s"
 msgstr "^K1%sВас фрагнув ^BG%s"
 
-#: qcsrc/common/notifications.qh:545
+#: qcsrc/common/notifications.qh:563
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s"
 msgstr "^K1%sВи програли очко ^BG%s"
 
-#: qcsrc/common/notifications.qh:546
+#: qcsrc/common/notifications.qh:564
 #, c-format
 msgid "^K1%sYou were fragged by ^BG%s^BG%s"
 msgstr "^K1%sВас фрагнув ^BG%s^BG%s"
 
-#: qcsrc/common/notifications.qh:546
+#: qcsrc/common/notifications.qh:564
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^BG%s"
 msgstr "^K1%sВи програли очко ^BG%s^BG%s"
 
-#: qcsrc/common/notifications.qh:547
+#: qcsrc/common/notifications.qh:565
 #, c-format
 msgid "^K3%sYou fragged ^BG%s^BG%s"
 msgstr "^K3%sВи фрагнули ^BG%s^BG%s"
 
-#: qcsrc/common/notifications.qh:547
+#: qcsrc/common/notifications.qh:565
 #, c-format
 msgid "^K3%sYou scored against ^BG%s^BG%s"
 msgstr "^K3%sВи виграли очко у ^BG%s^BG%s"
 
-#: qcsrc/common/notifications.qh:548
+#: qcsrc/common/notifications.qh:566
 #, c-format
 msgid "^K1%sYou scored against ^BG%s^K1 while they were typing"
 msgstr "^K1%sВи виграли очко у ^BG%s^K1 поки він писав"
 
-#: qcsrc/common/notifications.qh:548
+#: qcsrc/common/notifications.qh:566
 #, c-format
 msgid "^K1%sYou typefragged ^BG%s"
 msgstr "^K1%sВи чатфрагнули ^BG%s"
 
-#: qcsrc/common/notifications.qh:549
+#: qcsrc/common/notifications.qh:567
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^K1 while typing!"
 msgstr "^K1%sВи програли очко у ^BG%s^K1 поки писали!"
 
-#: qcsrc/common/notifications.qh:549
+#: qcsrc/common/notifications.qh:567
 #, c-format
 msgid "^K1%sYou were typefragged by ^BG%s"
 msgstr "^K1%sВас чатфрагнув ^BG%s"
 
-#: qcsrc/common/notifications.qh:550
+#: qcsrc/common/notifications.qh:568
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^K1 while typing^BG%s"
 msgstr "^K1%sВи програли очко ^BG%s^K1 поки писали^BG%s"
 
-#: qcsrc/common/notifications.qh:550
+#: qcsrc/common/notifications.qh:568
 #, c-format
 msgid "^K1%sYou were typefragged by ^BG%s^BG%s"
 msgstr "^K1%sВас чатфрагнув ^BG%s^BG%s"
 
-#: qcsrc/common/notifications.qh:551
+#: qcsrc/common/notifications.qh:569
 #, c-format
 msgid "^K1%sYou scored against ^BG%s^K1 while they were typing^BG%s"
 msgstr "^K1%sВи виграли очко у ^BG%s^K1 поки він писав^BG%s"
 
-#: qcsrc/common/notifications.qh:551
+#: qcsrc/common/notifications.qh:569
 #, c-format
 msgid "^K1%sYou typefragged ^BG%s^BG%s"
 msgstr "^K1%sВи чатфрагнули ^BG%s^BG%s"
 
-#: qcsrc/common/notifications.qh:552
+#: qcsrc/common/notifications.qh:570
 msgid "^BGPress ^F2DROPWEAPON^BG again to toss the nade!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:553
+#: qcsrc/common/notifications.qh:571
 #, c-format
 msgid ""
 "^BGYou have been moved into a different team\n"
@@ -2452,193 +2452,193 @@ msgstr ""
 "^BGВас автоматично переведено до іншої команди\n"
 "Тепер ви у: %s"
 
-#: qcsrc/common/notifications.qh:554
+#: qcsrc/common/notifications.qh:572
 msgid "^K1Don't go against your team mates!"
 msgstr "^K1Не воюйте зі своїми товаришами по команді!"
 
-#: qcsrc/common/notifications.qh:554
+#: qcsrc/common/notifications.qh:572
 msgid "^K1Don't shoot your team mates!"
 msgstr "^K1Не стріляйте у своїх товаришів по команді!"
 
-#: qcsrc/common/notifications.qh:555
+#: qcsrc/common/notifications.qh:573
 msgid "^K1Die camper!"
 msgstr "^K1Помри, кемпер!"
 
-#: qcsrc/common/notifications.qh:555
+#: qcsrc/common/notifications.qh:573
 msgid "^K1Reconsider your tactics, camper!"
 msgstr "^K1Знайди собі кращу тактику, кемпер!"
 
-#: qcsrc/common/notifications.qh:556
+#: qcsrc/common/notifications.qh:574
 msgid "^K1You unfairly eliminated yourself!"
 msgstr "^K1Ви нечесно вбили себе!"
 
-#: qcsrc/common/notifications.qh:557
+#: qcsrc/common/notifications.qh:575
 #, c-format
 msgid "^K1You were %s"
 msgstr "^K1Вас %s"
 
-#: qcsrc/common/notifications.qh:558
+#: qcsrc/common/notifications.qh:576
 msgid "^K1You couldn't catch your breath!"
 msgstr "^K1Ви не змогли перевести дух!"
 
-#: qcsrc/common/notifications.qh:559
+#: qcsrc/common/notifications.qh:577
 msgid "^K1You hit the ground with a crunch!"
 msgstr "^K1Ви із тріском вдарились об землю!"
 
-#: qcsrc/common/notifications.qh:560
+#: qcsrc/common/notifications.qh:578
 msgid "^K1You felt a little too hot!"
 msgstr "K1Вам стало занадто гаряче!"
 
-#: qcsrc/common/notifications.qh:560
+#: qcsrc/common/notifications.qh:578
 msgid "^K1You got a little bit too crispy!"
 msgstr "^K1Ви стали занадто хрустким!"
 
-#: qcsrc/common/notifications.qh:561
+#: qcsrc/common/notifications.qh:579
 msgid "^K1You killed your own dumb self!"
 msgstr "^K1Ви вбили самі себе!"
 
-#: qcsrc/common/notifications.qh:561
+#: qcsrc/common/notifications.qh:579
 msgid "^K1You need to be more careful!"
 msgstr "^K1Вам треба бути обережнішими!"
 
-#: qcsrc/common/notifications.qh:562
+#: qcsrc/common/notifications.qh:580
 msgid "^K1You couldn't stand the heat!"
 msgstr "^K1Ви не витримали жар!"
 
-#: qcsrc/common/notifications.qh:563
+#: qcsrc/common/notifications.qh:581
 msgid "^K1Tastes like chicken!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:563
+#: qcsrc/common/notifications.qh:581
 msgid "^K1You forgot to put the pin back in!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:564
+#: qcsrc/common/notifications.qh:582
 msgid "^K1You are respawning for running out of ammo..."
 msgstr "^K1Ви почнете з початку за витрату всіх набоїв..."
 
-#: qcsrc/common/notifications.qh:564
+#: qcsrc/common/notifications.qh:582
 msgid "^K1You were killed for running out of ammo..."
 msgstr "^K1Вас вбито за витрату всіх набоїв..."
 
-#: qcsrc/common/notifications.qh:565
+#: qcsrc/common/notifications.qh:583
 msgid "^K1You grew too old without taking your medicine"
 msgstr "^K1Без ліків ви швидко зістарились"
 
-#: qcsrc/common/notifications.qh:565
+#: qcsrc/common/notifications.qh:583
 msgid "^K1You need to preserve your health"
 msgstr "^K1Вам слід берегти своє здоров'я"
 
-#: qcsrc/common/notifications.qh:566
+#: qcsrc/common/notifications.qh:584
 msgid "^K1You became a shooting star!"
 msgstr "^K1Ви перетворилися на падаючу зірку!"
 
-#: qcsrc/common/notifications.qh:567
+#: qcsrc/common/notifications.qh:585
 msgid "^K1You melted away in slime!"
 msgstr "^K1Ви розтанули у слизі!"
 
-#: qcsrc/common/notifications.qh:568
+#: qcsrc/common/notifications.qh:586
 msgid "^K1You committed suicide!"
 msgstr "K1Ви скоїли самогубство!"
 
-#: qcsrc/common/notifications.qh:568
+#: qcsrc/common/notifications.qh:586
 msgid "^K1You ended it all!"
 msgstr "^K1Ви припинили все це!"
 
-#: qcsrc/common/notifications.qh:569
+#: qcsrc/common/notifications.qh:587
 msgid "^K1You got stuck in a swamp!"
 msgstr "^K1Ви застрягли у болоті!"
 
-#: qcsrc/common/notifications.qh:570
+#: qcsrc/common/notifications.qh:588
 #, c-format
 msgid "^BGYou are now on: %s"
 msgstr "^BGВи зараз на: %s"
 
-#: qcsrc/common/notifications.qh:571
+#: qcsrc/common/notifications.qh:589
 msgid "^K1You died in an accident!"
 msgstr "^K1Ви загинули у нещасному випадку!"
 
-#: qcsrc/common/notifications.qh:572
+#: qcsrc/common/notifications.qh:590
 msgid "^K1You had an unfortunate run in with a turret!"
 msgstr "^K1Вам не пощастило зустрітися з туреллю!"
 
-#: qcsrc/common/notifications.qh:572
+#: qcsrc/common/notifications.qh:590
 msgid "^K1You were fragged by a turret!"
 msgstr "^K1Вас фрагнула турель!"
 
-#: qcsrc/common/notifications.qh:573
+#: qcsrc/common/notifications.qh:591
 msgid "^K1You had an unfortunate run in with an eWheel turret!"
 msgstr "^K1Вам не пощастило зустрітися з туреллю eWheel!"
 
-#: qcsrc/common/notifications.qh:573
+#: qcsrc/common/notifications.qh:591
 msgid "^K1You were fragged by an eWheel turret!"
 msgstr "^K1Вас фрагнула турель eWheel!"
 
-#: qcsrc/common/notifications.qh:574
+#: qcsrc/common/notifications.qh:592
 msgid "^K1You had an unfortunate run in with a Walker turret!"
 msgstr "^K1Вам не пощастило зустрітися з туреллю Walker!"
 
-#: qcsrc/common/notifications.qh:574
+#: qcsrc/common/notifications.qh:592
 msgid "^K1You were fragged by a Walker turret!"
 msgstr "^K1Вас фрагнула турель Walker!"
 
-#: qcsrc/common/notifications.qh:575
+#: qcsrc/common/notifications.qh:593
 msgid "^K1You got caught in the blast of a Bumblebee explosion!"
 msgstr "^K1Ви загинули у вибуху Bumblebee!"
 
-#: qcsrc/common/notifications.qh:576
+#: qcsrc/common/notifications.qh:594
 msgid "^K1You were crushed by a vehicle!"
 msgstr "^K1Вас розчавила машина!"
 
-#: qcsrc/common/notifications.qh:577
+#: qcsrc/common/notifications.qh:595
 msgid "^K1You were caught in a Raptor cluster bomb!"
 msgstr "^K1Ви опинилися біля кластерної бомби Raptor!"
 
-#: qcsrc/common/notifications.qh:578
+#: qcsrc/common/notifications.qh:596
 msgid "^K1You got caught in the blast of a Raptor explosion!"
 msgstr "^K1Ви загинули у вибуху Raptor!"
 
-#: qcsrc/common/notifications.qh:579
+#: qcsrc/common/notifications.qh:597
 msgid "^K1You got caught in the blast of a Spiderbot explosion!"
 msgstr "^K1Ви загинули у вибуху Spiderbot!"
 
-#: qcsrc/common/notifications.qh:580
+#: qcsrc/common/notifications.qh:598
 msgid "^K1You were blasted to bits by a Spiderbot rocket!"
 msgstr "^K1Вас рознесло на шматки ракетами Spiderbot!"
 
-#: qcsrc/common/notifications.qh:581
+#: qcsrc/common/notifications.qh:599
 msgid "^K1You got caught in the blast of a Racer explosion!"
 msgstr "K1Ви загинули у вибуху Racer!"
 
-#: qcsrc/common/notifications.qh:582
+#: qcsrc/common/notifications.qh:600
 msgid "^K1You couldn't find shelter from a Racer rocket!"
 msgstr "^K1Ви не змогли знайти захист від ракети Racer!"
 
-#: qcsrc/common/notifications.qh:583
+#: qcsrc/common/notifications.qh:601
 msgid "^K1Watch your step!"
 msgstr "^K1Дивіться під ноги!"
 
-#: qcsrc/common/notifications.qh:584
+#: qcsrc/common/notifications.qh:602
 #, c-format
 msgid "^K1Moron! You fragged ^BG%s^K1, a team mate!"
 msgstr "^K1Дурень! Ви фрагнули ^BG%s^K1, товариша по команді!"
 
-#: qcsrc/common/notifications.qh:584
+#: qcsrc/common/notifications.qh:602
 #, c-format
 msgid "^K1Moron! You went against ^BG%s^K1, a team mate!"
 msgstr "^K1Дурень! You went against ^BG%s^K1, товариша по команді!"
 
-#: qcsrc/common/notifications.qh:585
+#: qcsrc/common/notifications.qh:603
 #, c-format
 msgid "^K1You were fragged by ^BG%s^K1, a team mate"
 msgstr "^K1Вас фрагнув ^BG%s^K1, ваш товариш по команді"
 
-#: qcsrc/common/notifications.qh:585
+#: qcsrc/common/notifications.qh:603
 #, c-format
 msgid "^K1You were scored against by ^BG%s^K1, a team mate"
 msgstr "^K1Ви програли очко ^BG%s^K1, товаришу по команді"
 
-#: qcsrc/common/notifications.qh:586
+#: qcsrc/common/notifications.qh:604
 msgid ""
 "^K1Stop idling!\n"
 "^BGDisconnecting in ^COUNT..."
@@ -2646,48 +2646,48 @@ msgstr ""
 "^K1Годі ледарювати!\n"
 "^BGРоз'єднання через ^COUNT..."
 
-#: qcsrc/common/notifications.qh:587
+#: qcsrc/common/notifications.qh:605
 msgid "^F2You picked up some extra lives"
 msgstr "^F2Ви підняли кілька додаткових життів"
 
-#: qcsrc/common/notifications.qh:588
+#: qcsrc/common/notifications.qh:606
 #, c-format
 msgid "^K3You froze ^BG%s"
 msgstr "^K3Ви заморозили ^BG%s"
 
-#: qcsrc/common/notifications.qh:589
+#: qcsrc/common/notifications.qh:607
 #, c-format
 msgid "^K1You were frozen by ^BG%s"
 msgstr "^K1Вас заморозив ^BG%s"
 
-#: qcsrc/common/notifications.qh:590
+#: qcsrc/common/notifications.qh:608
 #, c-format
 msgid "^K3You revived ^BG%s"
 msgstr "K3Ви оживили ^BG%s"
 
-#: qcsrc/common/notifications.qh:591
+#: qcsrc/common/notifications.qh:609
 msgid "^K3You revived yourself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:592
+#: qcsrc/common/notifications.qh:610
 #, c-format
 msgid "^K3You were revived by ^BG%s"
 msgstr "K3Вас оживив ^BG%s"
 
-#: qcsrc/common/notifications.qh:593
+#: qcsrc/common/notifications.qh:611
 #, c-format
 msgid "^K3You were automatically revived after %s second(s)"
 msgstr "K3Вас автоматично оживили після %s секунд(и)"
 
-#: qcsrc/common/notifications.qh:596
+#: qcsrc/common/notifications.qh:614
 msgid "^K1You froze yourself"
 msgstr "^K1Ви заморозили самі себе"
 
-#: qcsrc/common/notifications.qh:597
+#: qcsrc/common/notifications.qh:615
 msgid "^K1Round already started, you spawn as frozen"
 msgstr "^K1Раунд вже почався, ви починаєте вже замороженим"
 
-#: qcsrc/common/notifications.qh:604
+#: qcsrc/common/notifications.qh:622
 msgid ""
 "^K1No spawnpoints available!\n"
 "Hope your team can fix it..."
@@ -2695,7 +2695,7 @@ msgstr ""
 "^K1Жодна точка відродження недоступна!\n"
 "Надійтесь на свою команду..."
 
-#: qcsrc/common/notifications.qh:605
+#: qcsrc/common/notifications.qh:623
 msgid ""
 "^K1You may not join the game at this time.\n"
 "The player limit reached maximum capacity."
@@ -2703,11 +2703,11 @@ msgstr ""
 "^K1Зараз ви не зможете приєднатися до гри.\n"
 "Досягнуто ліміту гравців."
 
-#: qcsrc/common/notifications.qh:608
+#: qcsrc/common/notifications.qh:626
 msgid "^BGKilling people while you don't have the ball gives no points!"
 msgstr "^BGВбивство людей коли ви не володієте м'ячем не приносить очок!"
 
-#: qcsrc/common/notifications.qh:609
+#: qcsrc/common/notifications.qh:627
 msgid ""
 "^BGAll keys are in your team's hands!\n"
 "Help the key carriers to meet!"
@@ -2715,7 +2715,7 @@ msgstr ""
 "^BGВаша команда володіє всіма ключами!\n"
 "Допоможіть носіям ключів зустрітися!"
 
-#: qcsrc/common/notifications.qh:610
+#: qcsrc/common/notifications.qh:628
 msgid ""
 "^BGAll keys are in ^TC^TT team^BG's hands!\n"
 "Interfere ^F4NOW^BG!"
@@ -2723,7 +2723,7 @@ msgstr ""
 "^BGВсі ключі зараз у руках ^TC^TT команди!^BG\n"
 "Ви маєте зупинити їх ^F4НЕГАЙНО^BG!"
 
-#: qcsrc/common/notifications.qh:611
+#: qcsrc/common/notifications.qh:629
 msgid ""
 "^BGAll keys are in your team's hands!\n"
 "Meet the other key carriers ^F4NOW^BG!"
@@ -2731,19 +2731,19 @@ msgstr ""
 "^BGВсі ключі в руках вашої команди!\n"
 "Зустріньтесь з іншими носіями ключів ^F4НЕГАЙНО^BG!"
 
-#: qcsrc/common/notifications.qh:612
+#: qcsrc/common/notifications.qh:630
 msgid "^F4Round will start in ^COUNT"
 msgstr "^F4Раунд почнеться через ^COUNT"
 
-#: qcsrc/common/notifications.qh:613
+#: qcsrc/common/notifications.qh:631
 msgid "^BGScanning frequency range..."
 msgstr "^BGСканується діапазон частот..."
 
-#: qcsrc/common/notifications.qh:614
+#: qcsrc/common/notifications.qh:632
 msgid "^BGYou are starting with the ^TC^TT Key"
 msgstr "^BGВи починаєте з ^TC^TT ключем"
 
-#: qcsrc/common/notifications.qh:615 qcsrc/common/notifications.qh:616
+#: qcsrc/common/notifications.qh:633 qcsrc/common/notifications.qh:634
 #, c-format
 msgid ""
 "^BGWaiting for players to join...\n"
@@ -2752,38 +2752,38 @@ msgstr ""
 "^BGОчікування приєднання гравців...\n"
 "Потрібні активні гравця для: %s"
 
-#: qcsrc/common/notifications.qh:617
+#: qcsrc/common/notifications.qh:635
 #, c-format
 msgid "^BGWaiting for %s player(s) to join..."
 msgstr "^BGОчікування приєднання %s гравця(ців)..."
 
-#: qcsrc/common/notifications.qh:618
+#: qcsrc/common/notifications.qh:636
 msgid "^F4^COUNT^BG left to find some ammo!"
 msgstr "^F4^COUNT^BG залишилось часу щоб знайти набої!"
 
-#: qcsrc/common/notifications.qh:619
+#: qcsrc/common/notifications.qh:637
 msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
 msgstr "^BGЗнайдіть набої або загиньте через ^F4^COUNT^BG!"
 
-#: qcsrc/common/notifications.qh:619
+#: qcsrc/common/notifications.qh:637
 msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
 msgstr "^BGЗнайдіть набої! ^F4^COUNT^BG залишилось!"
 
-#: qcsrc/common/notifications.qh:620
+#: qcsrc/common/notifications.qh:638
 #, c-format
 msgid "^F2Extra lives remaining: ^K1%s"
 msgstr "^F2Додаткових життів залишилось: ^K1%s"
 
-#: qcsrc/common/notifications.qh:621
+#: qcsrc/common/notifications.qh:639
 msgid "^BGSecondary fire inflicts no damage!"
 msgstr "^BGДодатковий режим вогню не завдає шкоди!"
 
-#: qcsrc/common/notifications.qh:622
+#: qcsrc/common/notifications.qh:640
 #, c-format
 msgid "^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:623
+#: qcsrc/common/notifications.qh:641
 #, c-format
 msgid ""
 "^F2^COUNT^BG until weapon change...\n"
@@ -2792,16 +2792,16 @@ msgstr ""
 "^F2^COUNT^BG до зміни зброї...\n"
 "Наступна зброя: ^F1%s"
 
-#: qcsrc/common/notifications.qh:624
+#: qcsrc/common/notifications.qh:642
 #, c-format
 msgid "^F2Active weapon: ^F1%s"
 msgstr "^F2Поточна зброя: ^F1%s"
 
-#: qcsrc/common/notifications.qh:625
+#: qcsrc/common/notifications.qh:643
 msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:626
+#: qcsrc/common/notifications.qh:644
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "Keep fragging until we have a winner!"
@@ -2809,7 +2809,7 @@ msgstr ""
 "^F2Почався ^F4ДОДАТКОВИЙ ЧАС^F2!\n"
 "Продовжуйте боротьбу доки не визначиться переможець!"
 
-#: qcsrc/common/notifications.qh:626
+#: qcsrc/common/notifications.qh:644
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "Keep scoring until we have a winner!"
@@ -2817,7 +2817,7 @@ msgstr ""
 "^F2Почався ^F4ДОДАТКОВИЙ ЧАС^F2!\n"
 "Продовжуйте набирати очки доки не визначиться переможець!"
 
-#: qcsrc/common/notifications.qh:627
+#: qcsrc/common/notifications.qh:645
 #, c-format
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
@@ -2826,210 +2826,210 @@ msgstr ""
 "^F2Йде ^F4ДОДАТКОВИЙ ЧАС^F2!\n"
 "^BGДодано ^F4%s^BG у гру!"
 
-#: qcsrc/common/notifications.qh:628
+#: qcsrc/common/notifications.qh:646
 msgid "^F2Invisibility has worn off"
 msgstr "^F2Невидимість вичерпалася"
 
-#: qcsrc/common/notifications.qh:629
+#: qcsrc/common/notifications.qh:647
 msgid "^F2Shield has worn off"
 msgstr "^F2Щит вичерпався"
 
-#: qcsrc/common/notifications.qh:630
+#: qcsrc/common/notifications.qh:648
 msgid "^F2Speed has worn off"
 msgstr "^F2Швидкість вичерпалася"
 
-#: qcsrc/common/notifications.qh:631
+#: qcsrc/common/notifications.qh:649
 msgid "^F2Strength has worn off"
 msgstr "^F2Сила вичерпалася"
 
-#: qcsrc/common/notifications.qh:632
+#: qcsrc/common/notifications.qh:650
 msgid "^F2You are invisible"
 msgstr "^F2Ви невидимі"
 
-#: qcsrc/common/notifications.qh:633
+#: qcsrc/common/notifications.qh:651
 msgid "^F2Shield surrounds you"
 msgstr "^F2Вас оточує щит"
 
-#: qcsrc/common/notifications.qh:634
+#: qcsrc/common/notifications.qh:652
 msgid "^F2You are on speed"
 msgstr "^F2Ви прискоренні"
 
-#: qcsrc/common/notifications.qh:635
+#: qcsrc/common/notifications.qh:653
 msgid "^F2Strength infuses your weapons with devastating power"
 msgstr "^F2Сила надає вашій зброї руйнівної потужності"
 
-#: qcsrc/common/notifications.qh:636
+#: qcsrc/common/notifications.qh:654
 msgid "^F2The race is over, finish your lap!"
 msgstr "^F2Гонка закінчилася, завершуйте своє коло!"
 
-#: qcsrc/common/notifications.qh:637
+#: qcsrc/common/notifications.qh:655
 msgid "^F2Superweapons have broken down"
 msgstr "^F2Суперзброя зламалася"
 
-#: qcsrc/common/notifications.qh:638
+#: qcsrc/common/notifications.qh:656
 msgid "^F2Superweapons have been lost"
 msgstr "^F2Суперзброя втрачена"
 
-#: qcsrc/common/notifications.qh:639
+#: qcsrc/common/notifications.qh:657
 msgid "^F2You now have a superweapon"
 msgstr "^F2Ви отримали суперзброю"
 
-#: qcsrc/common/notifications.qh:640
+#: qcsrc/common/notifications.qh:658
 msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
 msgstr "^K1Перехід до ^TC^TT^K1 через ^COUNT"
 
-#: qcsrc/common/notifications.qh:641
+#: qcsrc/common/notifications.qh:659
 msgid "^K1Changing team in ^COUNT"
 msgstr "^K1Зміна команди через ^COUNT"
 
-#: qcsrc/common/notifications.qh:642
+#: qcsrc/common/notifications.qh:660
 msgid "^K1Spectating in ^COUNT"
 msgstr "^K1Спостереження через ^COUNT"
 
-#: qcsrc/common/notifications.qh:643
+#: qcsrc/common/notifications.qh:661
 msgid "^K1Suicide in ^COUNT"
 msgstr "^K1Самогубство через ^COUNT"
 
-#: qcsrc/common/notifications.qh:644
+#: qcsrc/common/notifications.qh:662
 msgid "^F4Timeout begins in ^COUNT"
 msgstr "^F4Тайм-аут почнеться через ^COUNT"
 
-#: qcsrc/common/notifications.qh:645
+#: qcsrc/common/notifications.qh:663
 msgid "^F4Timeout ends in ^COUNT"
 msgstr "^F4Тайм-аут закінчиться через ^COUNT"
 
-#: qcsrc/common/notifications.qh:907 qcsrc/common/notifications.qh:908
+#: qcsrc/common/notifications.qh:937 qcsrc/common/notifications.qh:938
 #, c-format
 msgid " (near %s)"
 msgstr " (біля %s)"
 
-#: qcsrc/common/notifications.qh:915 qcsrc/common/notifications.qh:916
+#: qcsrc/common/notifications.qh:945 qcsrc/common/notifications.qh:946
 msgid "primary"
 msgstr "основний режим вогню"
 
-#: qcsrc/common/notifications.qh:915 qcsrc/common/notifications.qh:916
+#: qcsrc/common/notifications.qh:945 qcsrc/common/notifications.qh:946
 msgid "secondary"
 msgstr "додатковий режим вогню"
 
-#: qcsrc/common/notifications.qh:926
+#: qcsrc/common/notifications.qh:956
 #, c-format
 msgid " ^F1(Press %s)"
 msgstr " ^F1(Натисніть %s)"
 
-#: qcsrc/common/notifications.qh:935
+#: qcsrc/common/notifications.qh:965
 #, c-format
 msgid " with %s"
 msgstr " з %s"
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 #, c-format
 msgid "%s^K1 made a TRIPLE FRAG! %s^BG"
 msgstr "%s^K1 зробив ПОТРІЙНИЙ ФРАГ! %s^BG"
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 #, c-format
 msgid "%s^K1 made a TRIPLE SCORE! %s^BG"
 msgstr "%s^K1 заробив ПОТРІЙНЕ ОЧКО! %s^BG"
 
-#: qcsrc/common/notifications.qh:944
+#: qcsrc/common/notifications.qh:974
 msgid "TRIPLE FRAG! "
 msgstr "ПОТРІЙНИЙ ФРАГ!"
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 #, c-format
 msgid "%s^K1 made FIVE SCORES IN A ROW! %s^BG"
 msgstr "%s^K1 заробив П'ЯТЬ ОЧОК ПІДРЯД %s^BG"
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 #, c-format
 msgid "%s^K1 unlocked RAGE! %s^BG"
 msgstr "%s^K1 відімкнув ЛЮТЬ! %s^BG"
 
-#: qcsrc/common/notifications.qh:945
+#: qcsrc/common/notifications.qh:975
 msgid "RAGE! "
 msgstr "ЛЮТЬ!"
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 #, c-format
 msgid "%s^K1 made TEN SCORES IN A ROW! %s^BG"
 msgstr "%s^K1 заробив ДЕСЯТЬ ОЧОК ПІДРЯД! %s^BG"
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 #, c-format
 msgid "%s^K1 started a MASSACRE! %s^BG"
 msgstr "%s^K1 почав РІЗАНИНУ! %s^BG"
 
-#: qcsrc/common/notifications.qh:946
+#: qcsrc/common/notifications.qh:976
 msgid "MASSACRE! "
 msgstr "РІЗАНИНА!"
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 #, c-format
 msgid "%s^K1 executed MAYHEM! %s^BG"
 msgstr "%s^K1 створив ХАОС! %s^BG"
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 #, c-format
 msgid "%s^K1 made FIFTEEN SCORES IN A ROW! %s^BG"
 msgstr "%s^K1 заробив П'ЯТНАДЦАТЬ ОЧОК ПІДРЯД! %s^BG"
 
-#: qcsrc/common/notifications.qh:947
+#: qcsrc/common/notifications.qh:977
 msgid "MAYHEM! "
 msgstr "ХАОС!"
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 #, c-format
 msgid "%s^K1 is a BERSERKER! %s^BG"
 msgstr "%s^K1 став БЕРСЕРКОМ! %s^BG"
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 #, c-format
 msgid "%s^K1 made TWENTY SCORES IN A ROW! %s^BG"
 msgstr "%s^K1 заробив ДВАДЦЯТЬ ОЧОК ПІДРЯД! %s^BG"
 
-#: qcsrc/common/notifications.qh:948
+#: qcsrc/common/notifications.qh:978
 msgid "BERSERKER! "
 msgstr "БЕРСЕРК!"
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 #, c-format
 msgid "%s^K1 inflicts CARNAGE! %s^BG"
 msgstr "%s^K1 скоїв МАСОВЕ ВБИВСТВО! %s^BG"
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 #, c-format
 msgid "%s^K1 made TWENTY FIVE SCORES IN A ROW! %s^BG"
 msgstr "%s^K1 заробив ДВАДЦЯТЬ П'ЯТЬ ОЧОК ПІДРЯД! %s^BG"
 
-#: qcsrc/common/notifications.qh:949
+#: qcsrc/common/notifications.qh:979
 msgid "CARNAGE! "
 msgstr "МАСОВЕ ВБИВСТВО!"
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 #, c-format
 msgid "%s^K1 made THIRTY SCORES IN A ROW! %s^BG"
 msgstr "%s^K1 заробив ТРИДЦЯТЬ ОЧОК ПІДРЯД! %s^BG"
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 #, c-format
 msgid "%s^K1 unleashes ARMAGEDDON! %s^BG"
 msgstr "%s^K1 почав АРМАГЕДДОН! %s^BG"
 
-#: qcsrc/common/notifications.qh:950
+#: qcsrc/common/notifications.qh:980
 msgid "ARMAGEDDON! "
 msgstr "АРМАГЕДДОН!"
 
-#: qcsrc/common/notifications.qh:956
+#: qcsrc/common/notifications.qh:986
 #, c-format
 msgid "%s(^F1Bot^BG)"
 msgstr "%s(^F1Бот^BG)"
 
-#: qcsrc/common/notifications.qh:958
+#: qcsrc/common/notifications.qh:988
 #, c-format
 msgid "%s(Ping ^F1%d^BG)"
 msgstr "%s(Пінг ^F1%d^BG)"
 
-#: qcsrc/common/notifications.qh:964
+#: qcsrc/common/notifications.qh:994
 #, c-format
 msgid ""
 "\n"
@@ -3038,7 +3038,7 @@ msgstr ""
 "\n"
 "(Здоров'я ^1%d^BG / Броня ^2%d^BG)%s"
 
-#: qcsrc/common/notifications.qh:966
+#: qcsrc/common/notifications.qh:996
 #, c-format
 msgid ""
 "\n"
@@ -3047,68 +3047,68 @@ msgstr ""
 "\n"
 "(^F4Мертвий^BG)%s"
 
-#: qcsrc/common/notifications.qh:1003 qcsrc/common/notifications.qh:1016
+#: qcsrc/common/notifications.qh:1033 qcsrc/common/notifications.qh:1046
 #, c-format
 msgid "%d score spree! "
 msgstr "%d череда очок! "
 
-#: qcsrc/common/notifications.qh:1015
+#: qcsrc/common/notifications.qh:1045
 #, c-format
 msgid "%d frag spree! "
 msgstr "%d череда фрагів! "
 
-#: qcsrc/common/notifications.qh:1028
+#: qcsrc/common/notifications.qh:1058
 msgid "First blood! "
 msgstr "Перша кров! "
 
-#: qcsrc/common/notifications.qh:1028
+#: qcsrc/common/notifications.qh:1058
 msgid "First score! "
 msgstr "Перше очко! "
 
-#: qcsrc/common/notifications.qh:1032
+#: qcsrc/common/notifications.qh:1062
 msgid "First casualty! "
 msgstr "Перший вбитий! "
 
-#: qcsrc/common/notifications.qh:1032
+#: qcsrc/common/notifications.qh:1062
 msgid "First victim! "
 msgstr "Перша жертва! "
 
-#: qcsrc/common/notifications.qh:1073
+#: qcsrc/common/notifications.qh:1103
 #, c-format
 msgid "%s^K1 has %d frags in a row! %s^BG"
 msgstr "%s^K1 має %d фрагів підряд! %s^BG"
 
-#: qcsrc/common/notifications.qh:1074
+#: qcsrc/common/notifications.qh:1104
 #, c-format
 msgid "%s^K1 made %d scores in a row! %s^BG"
 msgstr "%s^K1 заробив %d очок підряд! %s^BG"
 
-#: qcsrc/common/notifications.qh:1092
+#: qcsrc/common/notifications.qh:1122
 #, c-format
 msgid "%s^K1 drew first blood! %s^BG"
 msgstr "%s^K1 пролив першу кров! %s^BG"
 
-#: qcsrc/common/notifications.qh:1093
+#: qcsrc/common/notifications.qh:1123
 #, c-format
 msgid "%s^K1 got the first score! %s^BG"
 msgstr "%s^K1 заробив перше очко! %s^BG"
 
-#: qcsrc/common/notifications.qh:1109
+#: qcsrc/common/notifications.qh:1139
 #, c-format
 msgid ", ending their %d frag spree"
 msgstr ", зупиняючи %d череду фрагів"
 
-#: qcsrc/common/notifications.qh:1110
+#: qcsrc/common/notifications.qh:1140
 #, c-format
 msgid ", ending their %d score spree"
 msgstr ", зупиняючи %d череду очок"
 
-#: qcsrc/common/notifications.qh:1124
+#: qcsrc/common/notifications.qh:1154
 #, c-format
 msgid ", losing their %d frag spree"
 msgstr ", втрачаючи %d череду фрагів"
 
-#: qcsrc/common/notifications.qh:1125
+#: qcsrc/common/notifications.qh:1155
 #, c-format
 msgid ", losing their %d score spree"
 msgstr ", втрачаючи %d череду очків"
@@ -3174,11 +3174,11 @@ msgstr "Предмет %d"
 msgid "%d (%s)"
 msgstr "%d (%s)"
 
-#: qcsrc/menu/item/textslider.c:29 qcsrc/menu/item/textslider.c:31
+#: qcsrc/menu/item/textslider.c:31 qcsrc/menu/item/textslider.c:33
 msgid "custom"
 msgstr "особливо"
 
-#: qcsrc/menu/menu.qc:56
+#: qcsrc/menu/menu.qc:59
 #, c-format
 msgid "^4MQC Build information: ^1%s\n"
 msgstr "^4Відомості про збірку MQC: ^1%s\n"
@@ -3225,7 +3225,7 @@ msgstr "Розробники"
 #: 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_sandboxtools.c:89
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:90
 #: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:77
 #: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:21
 msgid "OK"
@@ -3279,33 +3279,33 @@ msgstr "Зберегти налаштування"
 msgid "Ammo Panel"
 msgstr "Панель боєзапасу"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:23
 msgid "Ammunition display:"
 msgstr "Показ амуніції:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:26
 msgid "Show only current ammo type"
 msgstr "Показувати тільки поточний тип боєприпасів"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
 msgid "Align icon:"
 msgstr "Вирівнювання іконок:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:36
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:28
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:40
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:28
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:40
-msgid "Left"
-msgstr "Ліворуч"
-
 #: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:30
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:38
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:29
 #: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:41
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:29
 #: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:41
+msgid "Left"
+msgstr "Ліворуч"
+
+#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:42
 msgid "Right"
 msgstr "Праворуч"
 
@@ -3313,28 +3313,28 @@ msgstr "Праворуч"
 msgid "Centerprint"
 msgstr "Основні повідомлення"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:24
 msgid "Message duration:"
 msgstr "Тривалість життя повідомлень:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:27
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:28
 msgid "Fade time:"
 msgstr "Час зникнення:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:32
 msgid "Flip messages order"
 msgstr "Поміняти місцями порядок повідомлень"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:34
 msgid "Text alignment:"
 msgstr "Вирівнювання тексту:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:38
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:51
 msgid "Center"
 msgstr "По центру"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:41
+#: qcsrc/menu/xonotic/dialog_hudpanel_centerprint.c:42
 msgid "Font scale:"
 msgstr "Масштаб шрифту:"
 
@@ -3342,19 +3342,19 @@ msgstr "Масштаб шрифту:"
 msgid "Chat Panel"
 msgstr "Панель чату"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:23
 msgid "Chat entries:"
 msgstr "Кількість записів:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:26
 msgid "Chat size:"
 msgstr "Розмір чату:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:30
 msgid "Chat lifetime:"
 msgstr "Тривалість чату:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:34
 msgid "Chat beep sound"
 msgstr "Звук у чаті"
 
@@ -3362,11 +3362,11 @@ msgstr "Звук у чаті"
 msgid "Engine Info Panel"
 msgstr "Панель інформації рушія"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:23
 msgid "Engine info:"
 msgstr "Інформація про рушій:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:26
 msgid "Use an averaging algorithm for fps"
 msgstr "Використовувати усереднюючий алгоритм для кадрів за секунду"
 
@@ -3374,36 +3374,36 @@ msgstr "Використовувати усереднюючий алгоритм
 msgid "Health/Armor Panel"
 msgstr "Панель здоров'я та броні"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:22
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:23
 msgid "Enable status bar"
 msgstr "Увімкнути смугу статусу"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:24
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:25
 msgid "Status bar alignment:"
 msgstr "Вирівнювання смуги статусу:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:32
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:42
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:32
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:43
 msgid "Inward"
 msgstr "Всередину"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:34
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:43
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:34
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:43
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:44
 msgid "Outward"
 msgstr "Назовні"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:37
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:38
 msgid "Icon alignment:"
 msgstr "Вирівнювання іконок:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:46
 msgid "Flip health and armor positions"
 msgstr "Поміняти місцями позиції здоров'я та броні"
 
@@ -3411,11 +3411,11 @@ msgstr "Поміняти місцями позиції здоров'я та бр
 msgid "Info Messages Panel"
 msgstr "Панель інформаційних повідомлень"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:23
 msgid "Info messages:"
 msgstr "Інформаційні повідомлення:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:26
 msgid "Flip align"
 msgstr "Поміняти місцями вирівнювання"
 
@@ -3427,23 +3427,23 @@ msgstr "Панель іконок модів"
 msgid "Notification Panel"
 msgstr "Панель сповіщень"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:23
 msgid "Notifications:"
 msgstr "Сповіщення:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:26
 msgid "Also print notifications to the console"
 msgstr "Також друкувати сповіщення до консолі"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:29
 msgid "Flip notify order"
 msgstr "Поміняти місцями порядок сповіщень"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:32
 msgid "Entry lifetime:"
 msgstr "Час існування запису:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:36
 msgid "Entry fadetime:"
 msgstr "Час зникнення запису:"
 
@@ -3451,96 +3451,96 @@ msgstr "Час зникнення запису:"
 msgid "Physics Panel"
 msgstr "Панель фізики"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:22
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:22
 msgid "Panel disabled"
 msgstr "Панель вимкнута"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
 msgid "Panel enabled"
 msgstr "Увімкнути панель"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
 msgid "Panel enabled even observing"
 msgstr "Увімкнути панель під час спостерігання"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:26
 msgid "Panel enabled only in Race/CTS"
 msgstr "Увімкнути панель тільки під час Гонки/CTS"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:31
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:32
 msgid "Status bar"
 msgstr "Смуга статусу"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:33
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:49
 msgid "Left align"
 msgstr "Вирівнювати ліворуч"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:34
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:53
 msgid "Right align"
 msgstr "Вирівнювати праворуч"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
 msgid "Inward align"
 msgstr "Вирівнювати всередину"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:37
 msgid "Outward align"
 msgstr "Вирівнюванти назовні"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:41
 msgid "Flip speed/acceleration positions"
 msgstr "Поміняти місцями позиції швидкості та акселерації"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:44
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
 #: qcsrc/menu/xonotic/dialog_settings_misc.c:29
 msgid "Speed:"
 msgstr "Швидкість:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:46
 msgid "Include vertical speed"
 msgstr "Включаючи вертикальну швидкість"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:56
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:57
 msgid "Speed unit:"
 msgstr "Одиниця швидкості:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:58
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
 msgid "qu/s"
 msgstr "qu/с"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:59
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
 msgid "m/s"
 msgstr "м/с"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:60
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
 msgid "km/h"
 msgstr "км/с"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:61
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
 msgid "mph"
 msgstr "милі"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:62
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:63
 msgid "knots"
 msgstr "вузли"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:64
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:65
 msgid "Show"
 msgstr "Показувати"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:67
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:68
 msgid "Top speed"
 msgstr "Найвища швидкість"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:73
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
 msgid "Acceleration:"
 msgstr "Прискорення:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:74
+#: qcsrc/menu/xonotic/dialog_hudpanel_physics.c:75
 msgid "Include vertical acceleration"
 msgstr "Включаючи вертикальне прискорення"
 
@@ -3548,7 +3548,7 @@ msgstr "Включаючи вертикальне прискорення"
 msgid "Powerups Panel"
 msgstr "Панель підсилень"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:46
 msgid "Flip strength and shield positions"
 msgstr "Поміняти місцями позиції Сили та Щита"
 
@@ -3556,16 +3556,16 @@ msgstr "Поміняти місцями позиції Сили та Щита"
 msgid "Pressed Keys Panel"
 msgstr "Панель натиснутих клавіш"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
 msgid "Panel enabled when spectating"
 msgstr "Панель працює під час спостерігання"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:24
 msgid "Panel always enabled"
 msgstr "Панель завжди працює"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:30
+#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:31
 msgid "Forced aspect:"
 msgstr "Примусовий аспект:"
 
@@ -3577,68 +3577,68 @@ msgstr "Панель таймера гонки"
 msgid "Radar Panel"
 msgstr "Панель радару"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23
 msgid "Panel enabled in teamgames"
 msgstr "Панель працюватиме у командних матчах"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:29
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:30
 msgid "Radar:"
 msgstr "Радар:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:32
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:43
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:82
+#: 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
 msgid "Alpha:"
 msgstr "Прозорість:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:37
 msgid "Rotation:"
 msgstr "Обертання:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:39
 msgid "Forward"
 msgstr "Вперед"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:39
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:40
 msgid "West"
 msgstr "Захід"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:40
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:41
 msgid "South"
 msgstr "Південь"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:41
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:42
 msgid "East"
 msgstr "Схід"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:43
 msgid "North"
 msgstr "Північ"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:46
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:47
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_hud.c:63
 msgid "Scale:"
 msgstr "Масштаб:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:50
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:51
 msgid "Zoom mode:"
 msgstr "Спосіб зуму:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:52
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:53
 msgid "Zoomed in"
 msgstr "Наближення"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:53
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:54
 msgid "Zoomed out"
 msgstr "Віддалення"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:54
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:55
 msgid "Always zoomed"
 msgstr "Завжди із зумом"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:55
+#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:56
 msgid "Never zoomed"
 msgstr "Ніколи із зумом"
 
@@ -3646,23 +3646,23 @@ msgstr "Ніколи із зумом"
 msgid "Score Panel"
 msgstr "Панель рахунку"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:23
 msgid "Score:"
 msgstr "Рахунок:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
 msgid "Rankings:"
 msgstr "Місця:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:26
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
 msgid "Off"
 msgstr "Вимкнуто"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:27
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
 msgid "And me"
 msgstr "І я"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:29
 msgid "Pure"
 msgstr "Чистий"
 
@@ -3670,11 +3670,11 @@ msgstr "Чистий"
 msgid "Timer Panel"
 msgstr "Панель таймеру"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:23
 msgid "Timer:"
 msgstr "Таймер:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:25
+#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:26
 msgid "Show elapsed time"
 msgstr "Показувати час що минув"
 
@@ -3682,7 +3682,7 @@ msgstr "Показувати час що минув"
 msgid "Vote Panel"
 msgstr "Панель голосування"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:22
+#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:23
 msgid "Alpha after voting:"
 msgstr "Прозорість після голосування:"
 
@@ -3690,76 +3690,76 @@ msgstr "Прозорість після голосування:"
 msgid "Weapons Panel"
 msgstr "Панель зброї"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:24
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:25
 msgid "Fade out after:"
 msgstr "Зникати після:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:26
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:27
 msgid "Never"
 msgstr "Ніколи"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:28
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:29
 #, c-format
 msgid "%ds"
 msgstr "%ds"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:32
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:33
 msgid "Fade effect:"
 msgstr "Ефект зникнення:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
 msgid "EF^None"
 msgstr "Немає"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:36
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:37
 msgid "Alpha"
 msgstr "Прозорість"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:37
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
 msgid "Slide"
 msgstr "Ковзання"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:38
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:39
 msgid "EF^Both"
 msgstr "Ковзання та прозорість"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:42
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:43
 msgid "Weapon icons:"
 msgstr "Іконки зброї:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46
 msgid "Show only owned weapons"
 msgstr "Показувати тільки зброю в наявності"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:48
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
 msgid "Show weapon ID as:"
 msgstr "Ідентифікувати зброю за:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
 msgid "SHOWAS^None"
 msgstr "Вимкнуто"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
 msgid "Number"
 msgstr "Номером"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:51
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:52
 msgid "Bind"
 msgstr "Клавішею"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:54
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
 msgid "Show Accuracy"
 msgstr "Показувати влучність"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:55
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:56
 msgid "Show Ammo"
 msgstr "Показувати боєзапас"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:58
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:59
 msgid "Ammo bar color:"
 msgstr "Колір смуги боєприпасів:"
 
-#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:64
+#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:65
 msgid "Ammo bar alpha:"
 msgstr "Прозорість смуги боєприпасів:"
 
@@ -3767,85 +3767,85 @@ msgstr "Прозорість смуги боєприпасів:"
 msgid "Panel HUD Setup"
 msgstr "Налаштування панелі HUD"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:21
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:22
 msgid "Panel background defaults:"
 msgstr "Фон панелі за замовчуванням:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:23 qcsrc/menu/xonotic/util.qc:683
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:24 qcsrc/menu/xonotic/util.qc:683
 msgid "Background:"
 msgstr "Фон:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:25
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:37
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:52
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:686
+#: 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
 msgid "Disable"
 msgstr "Вимкнути"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:30
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:691
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:31
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:78 qcsrc/menu/xonotic/util.qc:691
 msgid "Color:"
 msgstr "Колір:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:699
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:36 qcsrc/menu/xonotic/util.qc:699
 msgid "Border size:"
 msgstr "Розмір обвідки:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:50
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:89
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:51
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:90
 msgid "Team color:"
 msgstr "Колір команди:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:725
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:59 qcsrc/menu/xonotic/util.qc:725
 msgid "Test team color in configure mode"
 msgstr "Протестувати колір команди у конфігураційному режимі"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:728
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:62 qcsrc/menu/xonotic/util.qc:728
 msgid "Padding:"
 msgstr "Підкладка:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:68
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:69
 msgid "HUD Dock:"
 msgstr "Док HUD:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:70
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71
 msgid "DOCK^Disabled"
 msgstr "Вимкнуто"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72
 msgid "DOCK^Small"
 msgstr "Маленький"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73
 msgid "DOCK^Medium"
 msgstr "Середній"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:74
 msgid "DOCK^Large"
 msgstr "Великий"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:96
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:97
 msgid "Grid settings:"
 msgstr "Налаштування решітки:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:99
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:100
 msgid "Snap panels to grid"
 msgstr "Прікріпляти панелі до решітки"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:102
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:103
 msgid "Grid size:"
 msgstr "Розмір решітки:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:103
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:104
 msgid "X:"
 msgstr "X:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:109
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:110
 msgid "Y:"
 msgstr "Y:"
 
-#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:117
+#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:118
 msgid "Exit setup"
 msgstr "Вийти з налаштувань"
 
@@ -4430,7 +4430,7 @@ msgid "Key:"
 msgstr "Ключ:"
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:61
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:19
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:20
 msgid "Model:"
 msgstr "Модель:"
 
@@ -4805,127 +4805,127 @@ msgstr "Ні"
 msgid "Sandbox Tools"
 msgstr "Інструменти Пісочниці"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:24
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:25
 msgid "Spawn"
 msgstr "Створити"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:25
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:26
 msgid "Remove *"
 msgstr "Прибрати *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:27
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:28
 msgid "Copy *"
 msgstr "Скопіювати *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:28
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:29
 msgid "Paste"
 msgstr "Вставити"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:30
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:31
 msgid "Bone:"
 msgstr "Кістка:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:35
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:36
 msgid "Set * as child"
 msgstr "Зробити * дитям"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:36
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:37
 msgid "Attach to *"
 msgstr "Прикріпити до *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:38
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:39
 msgid "Detach from *"
 msgstr "Відокремити від *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:41
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:42
 msgid "Visual object properties for *:"
 msgstr "Візуальні властивості об'єкту для *:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:43
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:44
 msgid "Set skin:"
 msgstr "Встановити скин:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:45
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:46
 msgid "Set alpha:"
 msgstr "Встановити прозорість:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:48
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:49
 msgid "Set color main:"
 msgstr "Встановити основний колір:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:50
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:51
 msgid "Set color glow:"
 msgstr "Встановити колір свічення:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:54
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:55
 msgid "Set frame:"
 msgstr "Встановити кадр:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:58
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:59
 msgid "Physical object properties for *:"
 msgstr "Фізичні властивості об'єкта для *:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:60
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:61
 msgid "Set material:"
 msgstr "Встановити матеріал:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:66
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:67
 msgid "Set solidity:"
 msgstr "Встановити твердість:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:67
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:68
 msgid "Non-solid"
 msgstr "Нетверде"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:68
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:69
 msgid "Solid"
 msgstr "Тверде"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:69
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:70
 msgid "Set physics:"
 msgstr "Встановити фізику:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:70
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:71
 msgid "Static"
 msgstr "Нерухоме"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:71
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:72
 msgid "Movable"
 msgstr "Рухоме"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:72
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:73
 msgid "Physical"
 msgstr "Фізичне"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:74
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:75
 msgid "Set scale:"
 msgstr "Встановити масштаб:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:76
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:77
 msgid "Set force:"
 msgstr "Встановити силу:"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:80
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:81
 msgid "Claim *"
 msgstr "Взяти *"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:82
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:83
 msgid "* object info"
 msgstr "* інформація об'єкта"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:83
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:84
 msgid "* mesh info"
 msgstr "* інформація меша"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:84
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:85
 msgid "* attachment info"
 msgstr "* інформація прикріплення"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:85
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:86
 msgid "Show help"
 msgstr "Показувати допомогу"
 
-#: qcsrc/menu/xonotic/dialog_sandboxtools.c:86
+#: qcsrc/menu/xonotic/dialog_sandboxtools.c:87
 msgid "* is the object you are facing"
 msgstr "* це об'єкт перед вами"
 
@@ -5922,27 +5922,27 @@ msgstr "Переможець"
 msgid "Team Selection"
 msgstr "Вибір команди"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:41
+#: qcsrc/menu/xonotic/dialog_teamselect.c:42
 msgid "join 'best' team (auto-select)"
 msgstr "обрати підхожу команду (автовибір)"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:45
+#: qcsrc/menu/xonotic/dialog_teamselect.c:46
 msgid "red"
 msgstr "червона"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:46
+#: qcsrc/menu/xonotic/dialog_teamselect.c:47
 msgid "blue"
 msgstr "синя"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:47
+#: qcsrc/menu/xonotic/dialog_teamselect.c:48
 msgid "yellow"
 msgstr "жовта"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:48
+#: qcsrc/menu/xonotic/dialog_teamselect.c:49
 msgid "pink"
 msgstr "рожева"
 
-#: qcsrc/menu/xonotic/dialog_teamselect.c:51
+#: qcsrc/menu/xonotic/dialog_teamselect.c:52
 msgid "spectate"
 msgstr "спостерігати"
 
@@ -6042,7 +6042,12 @@ msgstr ""
 msgid "%s dB"
 msgstr "%s дБ"
 
-#: qcsrc/menu/xonotic/slider_resolution.c:72
+#: qcsrc/menu/xonotic/slider_resolution.c:103
+#, c-format
+msgid "%dx%d (%d:%d)"
+msgstr ""
+
+#: qcsrc/menu/xonotic/slider_resolution.c:106
 #, c-format
 msgid "%dx%d"
 msgstr "%dx%d"
index 28c1af69dadf7a009b3da3fe094d7116640ff7a9..2814738e764f9f5a21be5d55d91ffe1584246356 100644 (file)
@@ -93,11 +93,14 @@ vid_fullscreen 1
 vid_width 1024
 vid_height 768
 vid_pixelheight 1
+vid_resizable 0 // cannot be turned on before it is sure it cannot cause a r_restart
+vid_desktopfullscreen 1
 prvm_language en
 set _menu_prvm_language ""
 set _menu_vid_width "$vid_width"
 set _menu_vid_height "$vid_height"
 set _menu_vid_pixelheight "$vid_pixelheight"
+set _menu_vid_desktopfullscreen "$vid_desktopfullscreen"
 seta menu_vid_scale 0
 seta menu_vid_allowdualscreenresolution 0
 // 2D resolution 800x600
@@ -110,6 +113,36 @@ v_deathtilt 0 // needed for spectators (who are dead to avoid prediction)
 exec sRGB-disable.cfg
 vid_sRGB_fallback 2
 r_hdr_glowintensity 1
+// #define Image_LinearFloatFromsRGBFloat(c) (((c) <= 0.04045f) ? (c) * (1.0f / 12.92f) : (float)pow(((c) + 0.055f)*(1.0f/1.055f), 2.4f))
+set rpn_sRGB_to_linear "dup 0.055 add 1.055 div 2.4 pow exch 12.92 div dup 0.0031308 gt when"
+// #define Image_sRGBFloatFromLinearFloat(c) (((c) < 0.0031308f) ? (c) * 12.92f : 1.055f * (float)pow((c), 1.0f/2.4f) - 0.055f)
+set rpn_linear_to_sRGB "dup 1.0 2.4 div pow 1.055 mul 0.055 sub exch 12.92 mul dup 0.04045 ge when"
+
+// -nosRGB to -sRGB sky shader conversion:
+//
+// q3map_sunExt 1 0.6875 0.375 340 25 47 0 16
+//                                    ^^ elevation
+//                             ^^^ sunlight
+// q3map_skylight 110 3
+//                ^^^ skylight
+//
+// With that, do (the last parameter is the ratio of skylight you assume hits
+// the surfaces, about 0.25 for inner surfaces near sky, about 1.00 on
+// terrain):
+// ]skybox_nosRGB_to_sRGB 340 47 110 0.25
+// rpn: still on stack: new_sunlight:
+// rpn: still on stack: 380.464142
+// rpn: still on stack: new_skylight:
+// rpn: still on stack: 9.32523632
+//
+// The equivalent -sRGB shader then will have:
+//
+// q3map_sunExt 1 0.6875 0.375 380.464142 25 47 0 16
+// q3map_skylight 9.32523632 3
+alias skybox_nosRGB_to_sRGB "rpn $3 402.123 $4 div div $rpn_sRGB_to_linear 402.123 $4 div mul /new_skylight: $3 402.123 $4 div div $1 256 div $2 0.017453 mul sin mul add $rpn_sRGB_to_linear $3 402.123 $4 div div $rpn_sRGB_to_linear sub 256 mul $2 0.017453 mul sin div /new_sunlight:"
+
+set cl_orthoview 0 "enable top-down view of the map- meant to be used for radar map images (note: orthoview sets cvars temporarily, requires restart to return them to normal)"
+set cl_orthoview_nofog 1 "disable fog while in orthoview-- note, should not be enabled on ALL maps, i.e. oilrig works fine with this disabled"
 
 // these settings determine how much the view is affected by movement/damage
 cl_smoothviewheight 0.05 // time of the averaging to the viewheight value so that it creates a smooth transition for crouching and such. 0 for instant transition
@@ -207,7 +240,7 @@ set g_maxplayers_spectator_blocktime 5      "if the players voted for the \"nospectat
 set g_warmup 0 "split the game into a warmup- and match-stage when set to 1"
 set g_warmup_limit 0   "if set to -1 the warmup-stage is not affected by any timelimit, if set to 0 the usual timelimit also affects warmup-stage, otherwise warmup will be limited to this time in SECONDS (useful for public matches)"
 set g_warmup_allow_timeout 0   "if set to 1 timeouts can also be called in the warmup-stage, when sv_timeout is set to 1"
-set g_warmup_allguns 1 "if set players start with all guns in warmup mode"
+set g_warmup_allguns 1 "provide more weapons on start while in warmup: 0 = normal start weapons, 1 = all guns available on the map, 2 = all normal weapons"
 set g_warmup_majority_factor 0.8 "minimum percentage of players ready needed for warmup to end"
 
 set g_chat_nospectators 0      "if 0 spec/observer chat is always visible to the player, if 1 it is never visible to players, if 2 it is only visible to players during warmup stage"
@@ -370,7 +403,6 @@ pausable 0
 set g_spawnshieldtime 1 "number of seconds you are invincible after you spawned, this shield is lost after you fire"
 set g_antilag 2        "AntiLag (0 = no AntiLag, 1 = verified client side hit scan, 2 = server side hit scan in the past, 3 = unverified client side hit scan)"
 set g_antilag_nudge 0 "don't touch"
-set g_antilag_bullets 1 "Bullets AntiLag (0 = no AntiLag, 1 = server side hit scan in the past) - DO NOT TOUCH (severely changes weapon balance)"
 set g_shootfromclient 2 "let client decide if it has the gun left or right; if set to 2, center handedness is allowed; see also cl_gunalign"
 set g_shootfromeye 0 "shots are fired from your eye/crosshair; visual gun position can still be influenced by cl_gunalign 1 and 2"
 set g_shootfromcenter 0 "weapon gets moved to the center, shots still come from the barrel of your weapon; visual gun position can still be influenced by cl_gunalign 1 and 2"
@@ -428,8 +460,6 @@ bind f7 menu_showsandboxtools
 set g_playerclip_collisions 1 "0 = disable collision testing against playerclips, might be useful on some defrag maps"
 set g_botclip_collisions 1 "0 = disable collision testing against botclips, might be useful on some defrag maps"
 
-set welcome_message_time 8
-
 set g_grappling_hook 0 "let players spawn with the grappling hook which allows them to pull themselves up"
 
 set g_spawn_alloweffects 1 "allow clients to enable spawn point and event effects such as particles and sounds, see cl_spawn_ cvars for more info"
@@ -437,6 +467,7 @@ set g_spawn_furthest 1 "this amount of the spawns shall be far away from any pla
 set g_spawn_useallspawns 0 "use all spawns, e.g. also team spawns in non-teamplay, and all spawns, even enemy spawns, in teamplay"
 // respawn delay
 set g_respawn_delay 2 "number of seconds you have to wait before you can respawn again"
+set g_respawn_delay_max 0 "number of seconds you can wait before you're forced to respawn (only effective with g_forced_respawn 1)"
 set g_respawn_waves 0 "respawn in waves (every n seconds), intended to decrease overwhelming base attacks"
 
 // overtime
@@ -920,7 +951,7 @@ seta scoreboard_border_thickness 1 "scoreboard border thickness"
 seta scoreboard_accuracy_border_thickness 1 "accuracy stats border thickness"
 seta scoreboard_accuracy_doublerows 0 "use two rows instead of one"
 seta scoreboard_accuracy_nocolors 0 "don't use colors displaying accuracy stats"
-seta scoreboard_accuracy 0 "show weapon accuracy stats panel on scoreboard; colors can be configured with accuracy_color* cvars"
+seta scoreboard_accuracy 1 "show weapon accuracy stats panel on scoreboard; colors can be configured with accuracy_color* cvars"
 seta scoreboard_color_bg_r 0 "red color component of the scoreboard background"
 seta scoreboard_color_bg_g 0.4 "green color component of the scoreboard background"
 seta scoreboard_color_bg_b 0.6 "blue color component of the scoreboard background"
@@ -950,6 +981,28 @@ seta menu_slist_showfull 1 "show servers even if they are full and have no slots
 seta menu_slist_showempty 1 "show servers even if they are no empty and have no opponents to play against"
 seta menu_slist_modfilter "" // set to either: !modname or modname. modname of = means "same as we are running now".
 
+// other serverlist cvars
+seta menu_slist_categories 1
+seta menu_slist_categories_onlyifmultiple 1
+seta menu_slist_purethreshold 0
+seta menu_slist_modimpurity 0
+seta menu_slist_recommendations 3
+seta menu_slist_recommendations_maxping 150
+seta menu_slist_recommendations_minfreeslots 1
+seta menu_slist_recommendations_minhumans 0
+seta menu_slist_recommendations_purethreshold -1
+
+// serverlist category override cvars
+seta menu_slist_categories_CAT_FAVORITED_override ""
+seta menu_slist_categories_CAT_RECOMMENDED_override ""
+seta menu_slist_categories_CAT_NORMAL_override ""
+seta menu_slist_categories_CAT_SERVERS_override "CAT_NORMAL"
+seta menu_slist_categories_CAT_XPM_override "CAT_NORMAL"
+seta menu_slist_categories_CAT_MODIFIED_override ""
+seta menu_slist_categories_CAT_OVERKILL_override ""
+seta menu_slist_categories_CAT_MINSTAGIB_override ""
+seta menu_slist_categories_CAT_DEFRAG_override ""
+
 seta menu_weaponarena ""
 
 seta menu_maxplayers 16 "maxplayers value when the menu starts a game"
@@ -1139,32 +1192,9 @@ set g_showweaponspawns 1 "display sprites for weapon spawns found on the map whe
 //   Quake-Joule:  1 qJ  = 1 qN * 1 qu
 //   Quake-Pascal: 1 qPa = 1 qN / 1 qu^2
 
-set g_ballistics_materialconstant 1414213562
-set g_ballistics_mindistance 16
+set g_ballistics_mindistance 2 // enable ballistics starting from 2 qu
 set g_ballistics_density_player 0.50 // players are 2x as easy to pass as walls
 set g_ballistics_density_corpse 0.10 // corpses are 10x as easy to pass as walls
-// unit: qJ / qu^3 (energy needed per volume unit of solid to push/burn away
-// parameter: bullet constant: mass / area in g/qu^2
-// = mass / (pi/4 * caliber^2)
-// with caliber in inches, mass in grams:
-// = 1.273239544735163 * mass / caliber^2
-// with caliber in inches, mass in grains:
-// = 0.082633246453312 * mass / caliber^2
-
-// bullet max travel distance inside solid:
-//   0.5 * v^2 * bulletconstant / g_ballistics_materialconstant
-
-// some bullet constants:
-//   http://hypertextbook.com/facts/2000/ShantayArmstrong.shtml
-//     second bullet: caliber .45, mass 16.2g, bullet constant 101.859163578813
-//     third bullet: caliber .338, mass 16.2g, bullet constant 180.5476053421592
-//     fourth bullet: caliber .25, mass 2.3g, bullet constant 46.85521524625399
-//   http://en.wikipedia.org/wiki/.50_BMG
-//     caliber .5, 360 grains, bullet constant 118.9918748927693
-//   AK-47:
-//     caliber .3, 62 grains, bullet constant 56.92512533450383
-//   .3 winchester magnum:
-//     caliber .3, 150 grains, bullet constant 137.7220774221867
 
 set cl_stripcolorcodes 0       "experimental feature (notes: strips ALL color codes from messages!)"
 
@@ -1386,7 +1416,7 @@ sv_cullentities_trace 1
 r_cullentities_trace 0
 
 // less "lagging" of other players, but also less PL tolerant... let's try this
-sv_clmovement_inputtimeout 0.07 // more than 2, less than 3 server frames
+sv_clmovement_inputtimeout 0.066 // slightly less than 2 frames, so only one frame can be compensated
 
 // exact gloss looks better, e.g. on g-23
 r_shadow_glossexact 1
index 665fa558490b75fac0e554e8f8badc87cc00e218..feed7488b5c2681d4e78565c600d6cf69a2350e0 100644 (file)
@@ -27,7 +27,6 @@ alias cl_hook_gamestart_tdm
 alias cl_hook_gamestart_dom
 alias cl_hook_gamestart_ctf
 alias cl_hook_gamestart_lms
-alias cl_hook_gamestart_arena
 alias cl_hook_gamestart_ca
 alias cl_hook_gamestart_kh
 alias cl_hook_gamestart_ons
@@ -48,7 +47,6 @@ alias sv_hook_gamestart_tdm
 alias sv_hook_gamestart_dom
 alias sv_hook_gamestart_ctf
 alias sv_hook_gamestart_lms
-alias sv_hook_gamestart_arena
 alias sv_hook_gamestart_ca
 alias sv_hook_gamestart_kh
 alias sv_hook_gamestart_ons
@@ -73,8 +71,6 @@ seta fraglimit_override -1    "Frag limit overriding the mapinfo specified one (use
 seta leadlimit_override -1     "Lead limit overriding the mapinfo specified one (use 0 to play without limit, and -1 to use the mapinfo's limit)"
 seta capturelimit_override -1  "Capture limit overriding the mapinfo specified one (use 0 to play without limit, and -1 to use the mapinfo's limit)"
 seta captureleadlimit_override -1      "Capture llead imit overriding the mapinfo specified one (use 0 to play without limit, and -1 to use the mapinfo's limit)"
-seta g_arena_point_limit -1    "Arena point limit overriding the mapinfo specified one (use 0 to play without limit, and -1 to use the mapinfo's limit)"
-seta g_arena_point_leadlimit -1        "Arena point lead limit overriding the mapinfo specified one (use 0 to play without limit, and -1 to use the mapinfo's limit)"
 seta g_domination_point_limit -1       "Domination point limit overriding the mapinfo specified one (use 0 to play without limit, and -1 to use the mapinfo's limit)"
 seta g_domination_point_leadlimit -1   "Domination point lead limit overriding the mapinfo specified one (use 0 to play without limit, and -1 to use the mapinfo's limit)"
 seta g_keyhunt_point_limit -1  "Keyhunt point limit overriding the mapinfo specified one (use 0 to play without limit, and -1 to use the mapinfo's limit)"
@@ -110,9 +106,6 @@ set g_ka_weapon_stay 0
 set g_kh_respawn_delay 0
 set g_kh_respawn_waves 0
 set g_kh_weapon_stay 0
-set g_arena_respawn_delay 0
-set g_arena_respawn_waves 0
-set g_arena_weapon_stay 0
 set g_ca_respawn_delay 0
 set g_ca_respawn_waves 0
 set g_ca_weapon_stay 0
@@ -136,16 +129,6 @@ set g_ft_respawn_delay 0
 set g_ft_weapon_stay 0
 
 
-// =======
-//  arena
-// =======
-set g_arena 0 "Arena: many one-on-one rounds are played to find the winner"
-set g_arena_maxspawned 2       "maximum number of players to spawn at once (the rest is spectating, waiting for their turn)"
-set g_arena_roundbased 1       "if disabled, the next player will spawn as soon as someone dies"
-set g_arena_round_timelimit 180
-set g_arena_warmup 5   "time, newly spawned players have to prepare themselves in round based matches"
-
-
 // =========
 //  assault
 // =========
@@ -166,7 +149,6 @@ seta g_ca_teams_override 0
 set g_ca_teams 0
 
 
-
 // ==================
 //  capture the flag
 // ==================
diff --git a/gfx/menu/luminos/gametype_arena.tga b/gfx/menu/luminos/gametype_arena.tga
deleted file mode 100644 (file)
index f49fa28..0000000
Binary files a/gfx/menu/luminos/gametype_arena.tga and /dev/null differ
index e79dba0e099fd157d28f4c8f7ad7692b3568f7c1..5e311c9090adaef842639e5a1d0dc5165e559423 100755 (executable)
@@ -126,7 +126,7 @@ COLOR_SERVERINFO_IP             '1 0.4375 0'
 
 // item: server list
 ALPHA_SERVERLIST_FULL           0.4
-ALPHA_SERVERLIST_EMPTY          0.7
+ALPHA_SERVERLIST_EMPTY          0.6
 COLOR_SERVERLIST_LOWPING        '0 1 0'
 COLOR_SERVERLIST_MEDPING        '1 0.75 0'
 COLOR_SERVERLIST_HIGHPING       '1 0 0'
diff --git a/gfx/menu/wickedx/gametype_arena.tga b/gfx/menu/wickedx/gametype_arena.tga
deleted file mode 100644 (file)
index f49fa28..0000000
Binary files a/gfx/menu/wickedx/gametype_arena.tga and /dev/null differ
diff --git a/gfx/menu/xaw/gametype_arena.tga b/gfx/menu/xaw/gametype_arena.tga
deleted file mode 100644 (file)
index ca720bc..0000000
Binary files a/gfx/menu/xaw/gametype_arena.tga and /dev/null differ
index 327cdd1a2aa2029548b651bc4daf28548bf6fe7c..9835f41ddbcf157823668587d557f82359cdeb23 100644 (file)
@@ -84,12 +84,10 @@ set g_balance_rifle_primary_shots 1
 set g_balance_rifle_primary_damage 80
 set g_balance_rifle_primary_spread 0
 set g_balance_rifle_primary_force 100
-set g_balance_rifle_primary_speed 40000
-set g_balance_rifle_primary_lifetime 5
 set g_balance_rifle_primary_refire 1.2
 set g_balance_rifle_primary_animtime 0.4
 set g_balance_rifle_primary_ammo 10
-set g_balance_rifle_primary_bulletconstant 110 // 62.2qu
+set g_balance_rifle_primary_solidpenetration 62.2
 set g_balance_rifle_primary_burstcost 0
 set g_balance_rifle_primary_bullethail 0 // empty magazine on shot
 set g_balance_rifle_secondary 1
@@ -99,12 +97,10 @@ set g_balance_rifle_secondary_shots 4
 set g_balance_rifle_secondary_damage 20
 set g_balance_rifle_secondary_spread 0.04
 set g_balance_rifle_secondary_force 50
-set g_balance_rifle_secondary_speed 20000
-set g_balance_rifle_secondary_lifetime 5
 set g_balance_rifle_secondary_refire 0.9
 set g_balance_rifle_secondary_animtime 0.3
 set g_balance_rifle_secondary_ammo 10
-set g_balance_rifle_secondary_bulletconstant 110 // 15.5qu
+set g_balance_rifle_secondary_solidpenetration 15.5
 set g_balance_rifle_secondary_burstcost 0
 set g_balance_rifle_secondary_bullethail 0 // empty magazine on shot
 set g_balance_rifle_switchdelay_drop 0.2
index a10ccd2fd11f5ed318068b0c60e18807f0c14495..833787328efe69d58f57cf868a9e798e184dca32 100644 (file)
@@ -1,6 +1,6 @@
 SCM := $(shell if [ -d .svn ]; then echo svn; elif [ -d ../.git ]; then echo git; fi)
 PERL ?= perl
-QCCFLAGS_WATERMARK ?= -DWATERMARK='"$(shell git describe)"' -DCVAR_POPCON=1
+QCCFLAGS_WATERMARK ?= -DWATERMARK='"$(shell git describe)"'
 QCC ?= gmqcc
 
 QCCVERSIONFILE := qccversion.$(shell $(QCC) --version > qccversion.txt && git hash-object qccversion.txt)
index 8e36cc9b549a85873c0ea2ecca3c0bb4ee69eddc..3206e923c37bd2a1d284bb337db11420905cbac8 100644 (file)
@@ -5,7 +5,7 @@
 entity clearentity_ent;
 void clearentity(entity e)
 {
-       if not(clearentity_ent)
+       if (!clearentity_ent)
        {
                clearentity_ent = spawn();
                clearentity_ent.classname = "clearentity";
@@ -53,7 +53,7 @@ void CSQC_Init(void)
        check_unacceptable_compiler_bugs();
 
 #ifdef WATERMARK
-       print(sprintf(_("^4CSQC Build information: ^1%s\n"), WATERMARK));
+       printf(_("^4CSQC Build information: ^1%s\n"), WATERMARK);
 #endif
 
        float i;
@@ -81,7 +81,7 @@ void CSQC_Init(void)
        //registercommand("hud_configure");
        //registercommand("hud_save");
        //registercommand("menu_action");
-       
+
        ConsoleCommand_macro_init();
 
        registercvar("hud_usecsqc", "1");
@@ -125,13 +125,13 @@ void CSQC_Init(void)
        turrets_precache();
        Tuba_Precache();
        CSQCPlayer_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"); }
        }
-       
+
        get_mi_min_max_texcoords(1); // try the CLEVER way first
        minimapname = strcat("gfx/", mi_shortname, "_radar.tga");
        shortmapname = mi_shortname;
@@ -187,11 +187,11 @@ void Shutdown(void)
        if(autocvar_chase_active < 0)
                cvar_set("chase_active", "0");
 
-       if not(isdemo())
+       if (!isdemo())
        {
-               if not(calledhooks & HOOK_START)
+               if (!(calledhooks & HOOK_START))
                        localcmd("\n_cl_hook_gamestart nop\n");
-               if not(calledhooks & HOOK_END)
+               if (!(calledhooks & HOOK_END))
                        localcmd("\ncl_hook_gameend\n");
        }
 }
@@ -213,7 +213,7 @@ float SetTeam(entity o, float Team)
                        default:
                                if(GetTeam(Team, false) == world)
                                {
-                                       print(sprintf(_("trying to switch to unsupported team %d\n"), Team));
+                                       printf(_("trying to switch to unsupported team %d\n"), Team);
                                        Team = NUM_SPECTATOR;
                                }
                                break;
@@ -229,7 +229,7 @@ float SetTeam(entity o, float Team)
                        default:
                                if(GetTeam(Team, false) == world)
                                {
-                                       print(sprintf(_("trying to switch to unsupported team %d\n"), Team));
+                                       printf(_("trying to switch to unsupported team %d\n"), Team);
                                        Team = NUM_SPECTATOR;
                                }
                                break;
@@ -247,7 +247,7 @@ float SetTeam(entity o, float Team)
        }
        else
        {
-               if not(o.has_team)
+               if (!o.has_team)
                {
                        o.team = Team;
                        tm = GetTeam(Team, true);
@@ -288,10 +288,10 @@ void Playerchecker_Think()
                }
                else
                {
-                       if not(e.sort_prev)
+                       if (!e.sort_prev)
                        {
                                // player connected
-                               if not(e)
+                               if (!e)
                                        playerslots[i] = e = spawn();
                                e.sv_entnum = i;
                                e.ping = 0;
@@ -424,7 +424,7 @@ void Ent_ReadPlayerScore()
        if(!isNew && n != self.sv_entnum)
        {
                //print("A CSQC entity changed its owner!\n");
-               print(sprintf("A CSQC entity changed its owner! (edict: %d, classname: %s)\n", num_for_edict(self), self.classname));
+               printf("A CSQC entity changed its owner! (edict: %d, classname: %s)\n", num_for_edict(self), self.classname);
                isNew = true;
                Ent_Remove();
                self.enttype = ENT_CLIENT_SCORES;
@@ -433,13 +433,13 @@ void Ent_ReadPlayerScore()
 
        self.sv_entnum = n;
 
-       if not(playerslots[self.sv_entnum])
+       if (!(playerslots[self.sv_entnum]))
                playerslots[self.sv_entnum] = spawn();
        o = self.owner = playerslots[self.sv_entnum];
        o.sv_entnum = self.sv_entnum;
        o.gotscores = 1;
 
-       //if not(o.sort_prev)
+       //if (!o.sort_prev)
        //      RegisterPlayer(o);
        //playerchecker will do this for us later, if it has not already done so
 
@@ -588,7 +588,7 @@ void Ent_Nagger()
                {
                        f = ReadByte();
                        for(j = i-1, b = 1; b < 256; b *= 2, ++j)
-                               if not(f & b)
+                               if (!(f & b))
                                        if(playerslots[j])
                                                playerslots[j].ready = 0;
                }
@@ -651,7 +651,7 @@ void Ent_ReadSpawnPoint(float is_new) // entity for spawnpoint
        spn_origin_x = ReadShort();
        spn_origin_y = ReadShort();
        spn_origin_z = ReadShort();
-       
+
        if(is_new)
        {
                self.origin = spn_origin;
@@ -682,12 +682,12 @@ void Ent_ReadSpawnPoint(float is_new) // entity for spawnpoint
                                }
                        }
                        else { self.cnt = particleeffectnum("spawn_point_neutral"); }
-                       
+
                        self.draw = Spawn_Draw;
                }
        }
 
-       //print(sprintf("Ent_ReadSpawnPoint(is_new = %d); origin = %s, team = %d, effect = %d\n", is_new, vtos(self.origin), teamnum, self.cnt));
+       //printf("Ent_ReadSpawnPoint(is_new = %d); origin = %s, team = %d, effect = %d\n", is_new, vtos(self.origin), teamnum, self.cnt);
 }
 
 void Ent_ReadSpawnEvent(float is_new)
@@ -696,7 +696,7 @@ void Ent_ReadSpawnEvent(float is_new)
        // this way the server can disable the sending of
        // spawn origin or such to clients if wanted.
        float entnum = ReadByte();
-       
+
        if(entnum)
        {
                self.origin_x = ReadShort();
@@ -724,7 +724,7 @@ void Ent_ReadSpawnEvent(float is_new)
                        }
                }
        }
-       
+
        // local spawn actions
        if(is_new && (!entnum || (entnum == player_localentnum)))
        {
@@ -737,8 +737,8 @@ void Ent_ReadSpawnEvent(float is_new)
                        button_zoom = FALSE;
                }
        }
-       
-       //print(sprintf("Ent_ReadSpawnEvent(is_new = %d); origin = %s, entnum = %d, localentnum = %d\n", is_new, vtos(self.origin), entnum, player_localentnum));
+
+       //printf("Ent_ReadSpawnEvent(is_new = %d); origin = %s, entnum = %d, localentnum = %d\n", is_new, vtos(self.origin), entnum, player_localentnum);
 }
 
 // CSQC_Ent_Update : Called every frame that the server has indicated an update to the SSQC / CSQC entity has occured.
@@ -753,7 +753,7 @@ void CSQC_Ent_Update(float bIsNewEntity)
        t = ReadByte();
 
        if(autocvar_developer_csqcentities)
-               print(sprintf("CSQC_Ent_Update(%d) with self=%i self.entnum=%d self.enttype=%d t=%d\n", bIsNewEntity, self, self.entnum, self.enttype, t));
+               printf("CSQC_Ent_Update(%d) with self=%i self.entnum=%d self.enttype=%d t=%d\n", bIsNewEntity, self, self.entnum, self.enttype, t);
 
        // set up the "time" global for received entities to be correct for interpolation purposes
        savetime = time;
@@ -774,7 +774,7 @@ void CSQC_Ent_Update(float bIsNewEntity)
                if(t != self.enttype || bIsNewEntity)
                {
                        //print("A CSQC entity changed its type!\n");
-                       print(sprintf("A CSQC entity changed its type! (edict: %d, server: %d, type: %d -> %d)\n", num_for_edict(self), self.entnum, self.enttype, t));
+                       printf("A CSQC entity changed its type! (edict: %d, server: %d, type: %d -> %d)\n", num_for_edict(self), self.entnum, self.enttype, t);
                        Ent_Remove();
                        clearentity(self);
                        bIsNewEntity = 1;
@@ -784,7 +784,7 @@ void CSQC_Ent_Update(float bIsNewEntity)
        {
                if(!bIsNewEntity)
                {
-                       print(sprintf("A CSQC entity appeared out of nowhere! (edict: %d, server: %d, type: %d)\n", num_for_edict(self), self.entnum, t));
+                       printf("A CSQC entity appeared out of nowhere! (edict: %d, server: %d, type: %d)\n", num_for_edict(self), self.entnum, t);
                        bIsNewEntity = 1;
                }
        }
@@ -822,9 +822,9 @@ void CSQC_Ent_Update(float bIsNewEntity)
                case ENT_CLIENT_GAUNTLET: Ent_ReadHook(bIsNewEntity, ENT_CLIENT_GAUNTLET); 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_TURRET: ent_turret(); break;
                case ENT_CLIENT_MODEL: CSQCModel_Read(bIsNewEntity); break;
-               case ENT_CLIENT_ITEM: ItemRead(bIsNewEntity); break;  
+               case ENT_CLIENT_ITEM: ItemRead(bIsNewEntity); break;
                case ENT_CLIENT_BUMBLE_RAYGUN: bumble_raygun_read(bIsNewEntity); break;
                case ENT_CLIENT_SPAWNPOINT: Ent_ReadSpawnPoint(bIsNewEntity); break;
                case ENT_CLIENT_SPAWNEVENT: Ent_ReadSpawnEvent(bIsNewEntity); break;
@@ -868,7 +868,7 @@ void Ent_Remove()
 void CSQC_Ent_Remove()
 {
        if(autocvar_developer_csqcentities)
-               print(sprintf("CSQC_Ent_Remove() with self=%i self.entnum=%d self.enttype=%d\n", self, self.entnum, self.enttype));
+               printf("CSQC_Ent_Remove() with self=%i self.entnum=%d self.enttype=%d\n", self, self.entnum, self.enttype);
 
        if(wasfreed(self))
        {
@@ -882,7 +882,7 @@ void CSQC_Ent_Remove()
 
 void Gamemode_Init()
 {
-       if not(isdemo())
+       if (!isdemo())
        {
                if(!(calledhooks & HOOK_START))
                        localcmd("\n_cl_hook_gamestart ", MapInfo_Type_ToString(gametype), "\n");
@@ -893,7 +893,7 @@ void Gamemode_Init()
 void CSQC_Parse_StuffCmd(string strMessage)
 {
        if(autocvar_developer_csqcentities)
-               print(sprintf("CSQC_Parse_StuffCmd(\"%s\")\n", strMessage));
+               printf("CSQC_Parse_StuffCmd(\"%s\")\n", strMessage);
 
        localcmd(strMessage);
 }
@@ -901,7 +901,7 @@ void CSQC_Parse_StuffCmd(string strMessage)
 void CSQC_Parse_Print(string strMessage)
 {
        if(autocvar_developer_csqcentities)
-               print(sprintf("CSQC_Parse_Print(\"%s\")\n", strMessage));
+               printf("CSQC_Parse_Print(\"%s\")\n", strMessage);
 
        print(ColorTranslateRGB(strMessage));
 }
@@ -910,7 +910,7 @@ void CSQC_Parse_Print(string strMessage)
 void CSQC_Parse_CenterPrint(string strMessage)
 {
        if(autocvar_developer_csqcentities)
-               print(sprintf("CSQC_Parse_CenterPrint(\"%s\")\n", strMessage));
+               printf("CSQC_Parse_CenterPrint(\"%s\")\n", strMessage);
 
        centerprint_hud(strMessage);
 }
@@ -921,8 +921,10 @@ void Fog_Force()
 {
        // TODO somehow thwart prvm_globalset client ...
 
-       if(forcefog != "")
-               localcmd(strcat(notranslate_fogcmd1, forcefog, notranslate_fogcmd2));
+       if(autocvar_cl_orthoview && autocvar_cl_orthoview_nofog)
+               { localcmd("\nr_drawfog 0\n"); }
+       else if(forcefog != "")
+               { localcmd(strcat(notranslate_fogcmd1, forcefog, notranslate_fogcmd2)); }
 }
 
 void Gamemode_Init();
@@ -1159,7 +1161,7 @@ void Net_ReadPingPLReport()
        pi = ReadShort();
        pl = ReadByte();
        ml = ReadByte();
-       if not(playerslots[e])
+       if (!(playerslots[e]))
                return;
        playerslots[e].ping = pi;
        playerslots[e].ping_packetloss = pl / 255.0;
@@ -1199,7 +1201,7 @@ float CSQC_Parse_TempEntity()
                nTEID = ReadByte();
 
        if(autocvar_developer_csqcentities)
-               print(sprintf("CSQC_Parse_TempEntity() with nTEID=%d\n", nTEID));
+               printf("CSQC_Parse_TempEntity() with nTEID=%d\n", nTEID);
 
                // NOTE: Could just do return instead of break...
        switch(nTEID)
@@ -1216,10 +1218,6 @@ float CSQC_Parse_TempEntity()
                        Net_ReadRace();
                        bHandled = true;
                        break;
-               case TE_CSQC_ZCURVEPARTICLES:
-                       Net_ReadZCurveParticles();
-                       bHandled = true;
-                       break;
                case TE_CSQC_NEXGUNBEAMPARTICLE:
                        Net_ReadNexgunBeamParticle();
                        bHandled = true;
index 46920a4174db384323cdbf66f5119b2c1658e468..41cec30bf011b78d3c8968f714c3b206523070a3 100644 (file)
@@ -127,8 +127,8 @@ vector GetCurrentFov(float fov)
        else if(autocvar_cl_spawnzoom && zoomin_effect)
        {
                float spawnzoomfactor = bound(1, autocvar_cl_spawnzoom_factor, 16);
-               
-               current_viewzoom += (autocvar_cl_spawnzoom_speed * (spawnzoomfactor - current_viewzoom) * drawframetime); 
+
+               current_viewzoom += (autocvar_cl_spawnzoom_speed * (spawnzoomfactor - current_viewzoom) * drawframetime);
                current_viewzoom = bound(1 / spawnzoomfactor, current_viewzoom, 1);
                if(current_viewzoom == 1) { zoomin_effect = 0; }
        }
@@ -161,7 +161,7 @@ vector GetCurrentFov(float fov)
                setsensitivityscale(pow(current_viewzoom, 1 - zoomsensitivity));
        else
                setsensitivityscale(1);
-               
+
        makevectors(view_angles);
 
        if(autocvar_cl_velocityzoom && autocvar_cl_velocityzoom_type) // _type = 0 disables velocity zoom too
@@ -180,11 +180,11 @@ vector GetCurrentFov(float fov)
                                case 1: default: curspeed = vlen(v); break;
                        }
                }
-               
+
                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);
-               
+
                //print(ftos(avgspeed), " avgspeed, ", ftos(curspeed), " curspeed, ", ftos(velocityzoom), " return\n"); // for debugging
        }
        else
@@ -199,6 +199,17 @@ vector GetCurrentFov(float fov)
        return '1 0 0' * fovx + '0 1 0' * fovy;
 }
 
+vector GetOrthoviewFOV(vector ov_worldmin, vector ov_worldmax, vector ov_mid, vector ov_org)
+{
+       float fovx, fovy;
+       float width = (ov_worldmax_x - ov_worldmin_x);
+       float height = (ov_worldmax_y - ov_worldmin_y);
+       float distance_to_middle_of_world = vlen(ov_mid - ov_org);
+       fovx = atan2(width/2, distance_to_middle_of_world) / M_PI * 360.0;
+       fovy = atan2(height/2, distance_to_middle_of_world) / M_PI * 360.0;
+       return '1 0 0' * fovx + '0 1 0' * fovy;
+}
+
 // this function must match W_SetupShot!
 float zoomscript_caught;
 
@@ -307,13 +318,15 @@ float TrueAimCheck()
                        break;
        }
 
+       vector traceorigin = getplayerorigin(player_localentnum-1) + (eZ * getstati(STAT_VIEWHEIGHT));
+
        vecs = decompressShotOrigin(getstati(STAT_SHOTORG));
 
-       traceline(view_origin, view_origin + view_forward * MAX_SHOT_DISTANCE, mv, ta);
+       traceline(traceorigin, traceorigin + view_forward * MAX_SHOT_DISTANCE, mv, ta);
        trueaimpoint = trace_endpos;
 
-       if(vlen(trueaimpoint - view_origin) < g_trueaim_minrange)
-               trueaimpoint = view_origin + view_forward * g_trueaim_minrange;
+       if(vlen(trueaimpoint - traceorigin) < g_trueaim_minrange)
+               trueaimpoint = traceorigin + view_forward * g_trueaim_minrange;
 
        if(vecs_x > 0)
                vecs_y = -vecs_y;
@@ -321,7 +334,7 @@ float TrueAimCheck()
                vecs = '0 0 0';
 
        dv = view_right * vecs_y + view_up * vecs_z;
-       w_shotorg = view_origin + dv;
+       w_shotorg = traceorigin + dv;
 
        // now move the vecs forward as much as requested if possible
        tracebox(w_shotorg, mi, ma, w_shotorg + view_forward * (vecs_x + nudge), MOVE_NORMAL, ta); // FIXME this MOVE_NORMAL part will misbehave a little in csqc
@@ -479,7 +492,7 @@ void CSQC_UpdateView(float w, float h)
        // 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)
+               if(((spectatee_status >= 0 && (autocvar_cl_eventchase_death && is_dead)) || intermission) && !autocvar_cl_orthoview)
                {
                        // 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);
@@ -548,6 +561,60 @@ void CSQC_UpdateView(float w, float h)
        WarpZone_FixView();
        //WarpZone_FixPMove();
 
+       vector ov_org = '0 0 0';
+       vector ov_mid = '0 0 0';
+       vector ov_worldmin = '0 0 0';
+       vector ov_worldmax = '0 0 0';
+       if(autocvar_cl_orthoview)
+       {
+               ov_worldmin = mi_picmin;
+               ov_worldmax = mi_picmax;
+
+               float ov_width = (ov_worldmax_x - ov_worldmin_x);
+               float ov_height = (ov_worldmax_y - ov_worldmin_y);
+               float ov_distance = (max(vid_width, vid_height) * max(ov_width, ov_height));
+
+               ov_mid = ((ov_worldmax + ov_worldmin) * 0.5);
+               ov_org = vec3(ov_mid_x, ov_mid_y, (ov_mid_z + ov_distance));
+
+               float ov_nearest = vlen(ov_org - vec3(
+                       bound(ov_worldmin_x, ov_org_x, ov_worldmax_x),
+                       bound(ov_worldmin_y, ov_org_y, ov_worldmax_y),
+                       bound(ov_worldmin_z, ov_org_z, ov_worldmax_z)
+               ));
+
+               float ov_furthest = 0;
+               float dist = 0;
+
+               if((dist = vlen(vec3(ov_worldmin_x, ov_worldmin_y, ov_worldmin_z) - ov_org)) > ov_furthest) { ov_furthest = dist; }
+               if((dist = vlen(vec3(ov_worldmax_x, ov_worldmin_y, ov_worldmin_z) - ov_org)) > ov_furthest) { ov_furthest = dist; }
+               if((dist = vlen(vec3(ov_worldmin_x, ov_worldmax_y, ov_worldmin_z) - ov_org)) > ov_furthest) { ov_furthest = dist; }
+               if((dist = vlen(vec3(ov_worldmin_x, ov_worldmin_y, ov_worldmax_z) - ov_org)) > ov_furthest) { ov_furthest = dist; }
+               if((dist = vlen(vec3(ov_worldmax_x, ov_worldmax_y, ov_worldmin_z) - ov_org)) > ov_furthest) { ov_furthest = dist; }
+               if((dist = vlen(vec3(ov_worldmin_x, ov_worldmax_y, ov_worldmax_z) - ov_org)) > ov_furthest) { ov_furthest = dist; }
+               if((dist = vlen(vec3(ov_worldmax_x, ov_worldmin_y, ov_worldmax_z) - ov_org)) > ov_furthest) { ov_furthest = dist; }
+               if((dist = vlen(vec3(ov_worldmax_x, ov_worldmax_y, ov_worldmax_z) - ov_org)) > ov_furthest) { ov_furthest = dist; }
+
+               cvar_settemp("r_nearclip", ftos(ov_nearest));
+               cvar_settemp("r_farclip_base", ftos(ov_furthest));
+               cvar_settemp("r_farclip_world", "0");
+               cvar_settemp("r_novis", "1");
+               cvar_settemp("r_useportalculling", "0");
+               cvar_settemp("r_useinfinitefarclip", "0");
+
+               setproperty(VF_ORIGIN, ov_org);
+               setproperty(VF_ANGLES, '90 0 0');
+
+               #if 0
+               printf("OrthoView: org = %s, angles = %s, distance = %f, nearest = %f, furthest = %f\n",
+                       vtos(ov_org),
+                       vtos(getpropertyvec(VF_ANGLES)),
+                       ov_distance,
+                       ov_nearest,
+                       ov_furthest);
+               #endif
+       }
+
        // Render the Scene
        view_origin = getpropertyvec(VF_ORIGIN);
        view_angles = getpropertyvec(VF_ANGLES);
@@ -689,7 +756,8 @@ void CSQC_UpdateView(float w, float h)
        vid_conheight = autocvar_vid_conheight;
        vid_pixelheight = autocvar_vid_pixelheight;
 
-       setproperty(VF_FOV, GetCurrentFov(fov));
+       if(autocvar_cl_orthoview) { setproperty(VF_FOV, GetOrthoviewFOV(ov_worldmin, ov_worldmax, ov_mid, ov_org)); }
+       else { setproperty(VF_FOV, GetCurrentFov(fov)); }
 
        // Camera for demo playback
        if(camera_active)
@@ -745,7 +813,7 @@ void CSQC_UpdateView(float w, float h)
        drawstring('0 0 0', "", '1 1 0', '1 1 1', 0, 0);
 
        if(autocvar_r_fakelight >= 2 || autocvar_r_fullbright)
-       if not(serverflags & SERVERFLAG_ALLOW_FULLBRIGHT)
+       if (!(serverflags & SERVERFLAG_ALLOW_FULLBRIGHT))
        {
                // apply night vision effect
                vector tc_00, tc_01, tc_10, tc_11;
@@ -797,7 +865,7 @@ void CSQC_UpdateView(float w, float h)
                R_PolygonVertex(autocvar_vid_conheight * '0 1 0', tc_01, rgb, a);
                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
@@ -810,7 +878,7 @@ void CSQC_UpdateView(float w, float h)
                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_stretch)
@@ -1022,13 +1090,13 @@ void CSQC_UpdateView(float w, float h)
                        old_bluralpha = 0;
                }
 
-               // edge detection postprocess handling done second (used by hud_powerup) 
+               // edge detection postprocess handling done second (used by hud_powerup)
                float sharpen_intensity = 0, strength_finished = getstatf(STAT_STRENGTH_FINISHED), invincible_finished = getstatf(STAT_INVINCIBLE_FINISHED);
                if (strength_finished - time > 0) { sharpen_intensity += (strength_finished - time); }
                if (invincible_finished - time > 0) { sharpen_intensity += (invincible_finished - time); }
-               
+
                sharpen_intensity = bound(0, ((getstati(STAT_HEALTH) > 0) ? sharpen_intensity : 0), 5); // Check to see if player is alive (if not, set 0) - also bound to fade out starting at 5 seconds.
-               
+
                if(autocvar_hud_powerup && sharpen_intensity > 0)
                {
                        if(sharpen_intensity != old_sharpen_intensity) // reduce cvar_set spam as much as possible
@@ -1072,15 +1140,15 @@ void CSQC_UpdateView(float w, float h)
        {
                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(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;
        }
 
@@ -1102,11 +1170,11 @@ void CSQC_UpdateView(float w, float h)
                                CSQC_common_hud();
 
                // crosshair goes VERY LAST
-               if(!scoreboard_active && !camera_active && intermission != 2 && spectatee_status != -1 && hud == HUD_NORMAL) 
+               if(!scoreboard_active && !camera_active && intermission != 2 && spectatee_status != -1 && hud == HUD_NORMAL)
                {
-                       if not(autocvar_crosshair_enabled) // main toggle for crosshair rendering
+                       if (!autocvar_crosshair_enabled) // main toggle for crosshair rendering
                                return;
-                               
+
                        string wcross_style;
                        float wcross_alpha, wcross_resolution;
                        wcross_style = autocvar_crosshair;
@@ -1170,7 +1238,7 @@ void CSQC_UpdateView(float w, float h)
                                }
                        }
 
-                       //print(sprintf("crosshair style: %s\n", wcross_style));
+                       //printf("crosshair style: %s\n", wcross_style);
                        wcross_name = strcat("gfx/crosshair", wcross_style);
 
                        // MAIN CROSSHAIR COLOR DECISION
@@ -1259,12 +1327,12 @@ void CSQC_UpdateView(float w, float h)
                        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;
                                }
 
@@ -1279,12 +1347,12 @@ void CSQC_UpdateView(float w, float h)
                        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;
                                }
 
@@ -1379,12 +1447,12 @@ void CSQC_UpdateView(float w, float h)
                                        // 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; 
+                                               if (nex_chargepool || use_nex_chargepool) {
+                                                       use_nex_chargepool = 1;
                                                        ring_inner_value = nex_chargepool;
-                                               } else { 
+                                               } 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_value = bound(0, autocvar_crosshair_ring_nex_currentcharge_scale * (nex_charge - nex_charge_movingavg), 1);
                                                }
 
                                                ring_inner_alpha = autocvar_crosshair_ring_nex_inner_alpha;
@@ -1397,7 +1465,7 @@ void CSQC_UpdateView(float w, float h)
                                                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) 
+                                       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;
@@ -1412,7 +1480,7 @@ void CSQC_UpdateView(float w, float h)
                                                ring_image = "gfx/crosshair_ring.tga";
                                        }
 
-                                       if(autocvar_crosshair_ring_reload && weapon_clipsize) // forces there to be only an ammo ring 
+                                       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;
@@ -1431,11 +1499,11 @@ void CSQC_UpdateView(float w, float h)
                                        if(autocvar_crosshair_effect_time > 0)
                                        {
                                                f = (time - wcross_name_changestarttime) / autocvar_crosshair_effect_time;
-                                               if not(f < 1)
+                                               if (!(f < 1))
                                                {
                                                        wcross_ring_prev = ((ring_image) ? TRUE : FALSE);
                                                }
-                                               
+
                                                if(wcross_ring_prev)
                                                {
                                                        if(f < 1)
@@ -1497,10 +1565,10 @@ void CSQC_UpdateView(float w, float h)
                                {
                                        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;
@@ -1564,9 +1632,9 @@ void CSQC_UpdateView(float w, float h)
 
        if(autocvar__hud_configure)
                HUD_Panel_Mouse();
-    
+
     if(hud && !intermission)
-    {        
+    {
         if(hud == HUD_SPIDERBOT)
             CSQC_SPIDER_HUD();
         else if(hud == HUD_WAKIZASHI)
@@ -1578,9 +1646,9 @@ void CSQC_UpdateView(float w, float h)
         else if(hud == HUD_BUMBLEBEE_GUN)
             CSQC_BUMBLE_GUN_HUD();
     }
-       
+
        cl_notice_run();
-       
+
        // let's reset the view back to normal for the end
        setproperty(VF_MIN, '0 0 0');
        setproperty(VF_SIZE, '1 0 0' * w + '0 1 0' * h);
index b53c04da052b048a233054639cbf659480d3cc34..35077496911a9ea8f8f56664068d3cd06437e3f0 100644 (file)
@@ -1,6 +1,6 @@
 float announcer_1min;
 float announcer_5min;
-void Announcer_Countdown() 
+void Announcer_Countdown()
 {
        float starttime = getstatf(STAT_GAMESTARTTIME);
        float roundstarttime = getstatf(STAT_ROUNDSTARTTIME);
@@ -20,8 +20,8 @@ void Announcer_Countdown()
 
        if(countdown <= 0) // countdown has finished, starttime is now
        {
-               Local_Notification(MSG_CENTER, CENTER_COUNTDOWN_BEGIN); 
-               Local_Notification(MSG_MULTI, MULTI_COUNTDOWN_BEGIN); 
+               Local_Notification(MSG_CENTER, CENTER_COUNTDOWN_BEGIN);
+               Local_Notification(MSG_MULTI, MULTI_COUNTDOWN_BEGIN);
                remove(self);
                return;
        }
@@ -50,22 +50,22 @@ void Announcer_Countdown()
  * and STAT_FRAGLIMIT to be auto-sent)
  */
  float previous_game_starttime;
-void Announcer_Gamestart() 
+void Announcer_Gamestart()
 {
        float startTime = getstatf(STAT_GAMESTARTTIME);
        float roundstarttime = getstatf(STAT_ROUNDSTARTTIME);
        if(roundstarttime > startTime)
                startTime = roundstarttime;
 
-       if(previous_game_starttime != startTime) 
+       if(previous_game_starttime != startTime)
        {
                if((time + 5.0) < startTime) // if connecting to server while restart was active don't always play prepareforbattle
                        Local_Notification(MSG_ANNCE, ANNCE_PREPARE);
 
-               if(time < startTime) 
+               if(time < startTime)
                {
                        entity e = find(world, classname, "announcer_countdown");
-                       if not(e)
+                       if (!e)
                        {
                                e = spawn();
                                e.classname = "announcer_countdown";
@@ -74,39 +74,39 @@ void Announcer_Gamestart()
                        e.nextthink = startTime - floor(startTime - time); //synchronize nextthink to startTime
                }
        }
-       
+
        previous_game_starttime = startTime;
 }
 
 
 // Plays the 1 minute or 5 minutes (of maptime) remaining sound, if client wants it
-void Announcer_Time() 
+void Announcer_Time()
 {
        float timelimit = getstatf(STAT_TIMELIMIT);
        float timeleft = max(0, timelimit * 60 + getstatf(STAT_GAMESTARTTIME) - time);
        float warmup_timeleft = 0;
-       
-       if(warmup_stage) 
+
+       if(warmup_stage)
                if(autocvar_g_warmup_limit > 0)
-                       warmup_timeleft = max(0, autocvar_g_warmup_limit + getstatf(STAT_GAMESTARTTIME) - time); 
+                       warmup_timeleft = max(0, autocvar_g_warmup_limit + getstatf(STAT_GAMESTARTTIME) - time);
 
        // 5 minute check
-       if(autocvar_cl_announcer_maptime >= 2) 
+       if(autocvar_cl_announcer_maptime >= 2)
        {
                // make sure that after connect (and e.g. 4 minutes left) we will not get a wrong sound
                if(announcer_5min)
                {
-                       if(((!warmup_stage || autocvar_g_warmup_limit == 0) && timeleft > 300) 
+                       if(((!warmup_stage || autocvar_g_warmup_limit == 0) && timeleft > 300)
                                || (warmup_stage && autocvar_g_warmup_limit > 0 && warmup_timeleft > 300))
                                        announcer_5min = FALSE;
                }
-               else 
+               else
                {
-                       if(((!warmup_stage || autocvar_g_warmup_limit == 0) && timelimit > 0 && timeleft < 300 && timeleft > 299) 
+                       if(((!warmup_stage || autocvar_g_warmup_limit == 0) && timelimit > 0 && timeleft < 300 && timeleft > 299)
                                || (warmup_stage && autocvar_g_warmup_limit > 0 && warmup_timeleft < 300 && warmup_timeleft > 299))
                        {
                                //if we're in warmup mode, check whether there's a warmup timelimit
-                               if not(autocvar_g_warmup_limit == -1 && warmup_stage) 
+                               if(!(autocvar_g_warmup_limit == -1 && warmup_stage))
                                {
                                        announcer_5min = TRUE;
                                        Local_Notification(MSG_ANNCE, ANNCE_REMAINING_MIN_5);
@@ -120,15 +120,15 @@ void Announcer_Time()
        {
                if (announcer_1min)
                {
-                       if(((!warmup_stage || autocvar_g_warmup_limit == 0) && timeleft > 60) 
+                       if(((!warmup_stage || autocvar_g_warmup_limit == 0) && timeleft > 60)
                                || (warmup_stage && autocvar_g_warmup_limit > 0 && warmup_timeleft > 60))
                                        announcer_1min = FALSE;
                }
-               else if(((!warmup_stage || autocvar_g_warmup_limit == 0) && timelimit > 0 && timeleft < 60) 
+               else if(((!warmup_stage || autocvar_g_warmup_limit == 0) && timelimit > 0 && timeleft < 60)
                        || (warmup_stage && autocvar_g_warmup_limit > 0 && warmup_timeleft < 60))
                {
                        // if we're in warmup mode, check whether there's a warmup timelimit
-                       if not(autocvar_g_warmup_limit == -1 && warmup_stage) 
+                       if(!(autocvar_g_warmup_limit == -1 && warmup_stage))
                        {
                                announcer_1min = TRUE;
                                Local_Notification(MSG_ANNCE, ANNCE_REMAINING_MIN_1);
index 8175695abb0ac5ef0a4c033e671a742a907776fb..43aab6ae44c73f3c2b0c598bbe4ae3d72014248e 100644 (file)
@@ -54,6 +54,8 @@ float autocvar_cl_gunalign;
 float autocvar_cl_hidewaypoints;
 float autocvar_cl_lockview;
 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_quality;
@@ -337,7 +339,7 @@ float autocvar_hud_panel_weapons_timeout;
 float autocvar_hud_panel_weapons_timeout_effect;
 float autocvar_hud_panel_weapons_timeout_fadebgmin;
 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_in = 0.25;
 var float autocvar_hud_panel_weapons_timeout_speed_out = 0.75;
 float autocvar_hud_progressbar_alpha;
 float autocvar_hud_showbinds;
index 694bc0cc6f960169a3f61628b8541b482c5151ca..9d024941e6bf00d4b8c7f53133deca7535edbde4 100644 (file)
@@ -17,10 +17,10 @@ float GetAttackDecaySustainAmplitude(float a, float d, float s, float t)
        //   attack: from 0 to 1, in time a for a full length
        //   decay: from 1 to s, in time d
        //   sustain: s
-       
+
        if(t < 0)
                return 0;
-       
+
        if(a)
                if(t <= a)
                        return t / a;
@@ -38,10 +38,10 @@ float GetReleaseAmplitude(float d, float s, float r, float t)
 
        if(!r)
                return 0;
-       
+
        if(t > r)
                return 0;
-       
+
        releaseval = s * (1 - t / r);
 
        if(t < -d)
@@ -70,7 +70,7 @@ float GetReleaseTime(float d, float s, float r, float amp)
 
        if(!s)
                return 0;
-       
+
        // if amp > s, we may be in the attack or in the prolonged decay curve
        releasetime = (1 - amp / s) * r;
 
@@ -131,7 +131,7 @@ void BGMScript_InitEntity(entity e)
                e.bgmscriptline = e.bgmscriptline0 = i;
                if(i >= bgmscriptbufsize)
                {
-                       print(sprintf("ERROR: bgmscript does not define %s\n", e.bgmscript));
+                       printf("ERROR: bgmscript does not define %s\n", e.bgmscript);
                        strunzone(e.bgmscript);
                        e.bgmscript = string_null;
                }
@@ -172,7 +172,7 @@ float BGMScript(entity e)
 
        if(e.bgmscript == "")
                return 1;
-       
+
        if(autocvar_bgmvolume <= 0)
                return -1;
 
index cbf294fa8a2f6598851d29f1f098dad3e121d524..9aae77dde687ef5417a61b71ae29b4524365e963 100644 (file)
@@ -37,9 +37,9 @@ void LocalCommand_blurtest(float request)
                        blurtest_radius = stof(argv(2));
                        blurtest_power = stof(argv(3));
                        print("Enabled blurtest\n");
-                       return; 
+                       return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -117,7 +117,7 @@ void LocalCommand_create_scrshot_ent(float request)
                        float fh;
                        string filename = strcat(MapInfo_Map_bspname, "_scrshot_ent.txt");
                        fh = fopen(filename, FILE_WRITE);
-                       
+
                        if(fh >= 0)
                        {
                                fputs(fh, "{\n");
@@ -125,9 +125,9 @@ void LocalCommand_create_scrshot_ent(float request)
                                fputs(fh, strcat("\"origin\" \"", strcat(ftos(view_origin_x), " ", ftos(view_origin_y), " ", ftos(view_origin_z)), "\"\n"));
                                fputs(fh, strcat("\"angles\" \"", strcat(ftos(view_angles_x), " ", ftos(view_angles_y), " ", ftos(view_angles_z)), "\"\n"));
                                fputs(fh, "}\n");
-                               
+
                                print("Completed screenshot entity dump in ^2data/data/", MapInfo_Map_bspname, "_scrshot_ent.txt^7.\n");
-                               
+
                                fclose(fh);
                        }
                        else
@@ -136,7 +136,7 @@ void LocalCommand_create_scrshot_ent(float request)
                        }
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -155,7 +155,7 @@ void LocalCommand_debugmodel(float request, float argc)
                {
                        string modelname = argv(1);
                        entity debugmodel_entity;
-                       
+
                        debugmodel_entity = spawn();
                        precache_model(modelname);
                        setmodel(debugmodel_entity, modelname);
@@ -163,10 +163,10 @@ void LocalCommand_debugmodel(float request, float argc)
                        debugmodel_entity.angles = view_angles;
                        debugmodel_entity.draw = DrawDebugModel;
                        debugmodel_entity.classname = "debugmodel";
-                       
-                       return; 
+
+                       return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -185,18 +185,18 @@ void LocalCommand_handlevote(float request, float argc)
                {
                        float vote_selection;
                        string vote_string;
-                       
+
                        if(InterpretBoolean(argv(1)))
                        {
-                               vote_selection = 2; 
+                               vote_selection = 2;
                                vote_string = "yes";
                        }
                        else
                        {
-                               vote_selection = 1; 
-                               vote_string = "no"; 
+                               vote_selection = 1;
+                               vote_string = "no";
                        }
-                       
+
                        if(vote_selection)
                        {
                                if(uid2name_dialog) // handled by "uid2name" option
@@ -208,11 +208,11 @@ void LocalCommand_handlevote(float request, float argc)
                                        uid2name_dialog = 0;
                                }
                                else { localcmd(strcat("cmd vote ", vote_string, "\n")); }
-                               
+
                                return;
                        }
                }
-                       
+
                default:
                        print("Incorrect parameters for ^2handlevote^7\n");
                case CMD_REQUEST_USAGE:
@@ -237,7 +237,7 @@ void LocalCommand_hud(float request, float argc)
                                        cvar_set("_hud_configure", ftos(!autocvar__hud_configure));
                                        return;
                                }
-                               
+
                                case "save":
                                {
                                        if(argv(2))
@@ -250,10 +250,10 @@ void LocalCommand_hud(float request, float argc)
                                                break; // go to usage, we're missing the paramater needed here.
                                        }
                                }
-                               
+
                                case "scoreboard_columns_set":
                                {
-                                       Cmd_HUD_SetFields(argc); 
+                                       Cmd_HUD_SetFields(argc);
                                        return;
                                }
 
@@ -262,7 +262,7 @@ void LocalCommand_hud(float request, float argc)
                                        Cmd_HUD_Help();
                                        return;
                                }
-                               
+
                                case "radar":
                                {
                                        if(argv(2))
@@ -273,7 +273,7 @@ void LocalCommand_hud(float request, float argc)
                                }
                        }
                }
-                       
+
                default:
                        print("Incorrect parameters for ^2hud^7\n");
                case CMD_REQUEST_USAGE:
@@ -298,10 +298,10 @@ void LocalCommand_localprint(float request, float argc)
                        if(argv(1))
                        {
                                centerprint_hud(argv(1));
-                               return; 
+                               return;
                        }
                }
-                       
+
                default:
                        print("Incorrect parameters for ^2localprint^7\n");
                case CMD_REQUEST_USAGE:
@@ -322,10 +322,10 @@ void LocalCommand_mv_download(float request, float argc)
                        if(argv(1))
                        {
                                Cmd_MapVote_MapDownload(argc);
-                               return; 
+                               return;
                        }
                }
-                       
+
                default:
                        print("Incorrect parameters for ^2mv_download^7\n");
                case CMD_REQUEST_USAGE:
@@ -348,18 +348,18 @@ void LocalCommand_sendcvar(float request, float argc)
                                // W_FixWeaponOrder will trash argv, so save what we need.
                                string thiscvar = strzone(argv(1));
                                string s = cvar_string(thiscvar);
-                               
+
                                if(thiscvar == "cl_weaponpriority")
                                        s = W_FixWeaponOrder(W_NumberWeaponOrder(s), 1);
                                else if(substring(thiscvar, 0, 17) == "cl_weaponpriority" && strlen(thiscvar) == 18)
                                        s = W_FixWeaponOrder(W_NumberWeaponOrder(s), 0);
-                                       
+
                                localcmd("cmd sentcvar ", thiscvar, " \"", s, "\"\n");
                                strunzone(thiscvar);
-                               return; 
+                               return;
                        }
                }
-                       
+
                default:
                        print("Incorrect parameters for ^2sendcvar^7\n");
                case CMD_REQUEST_USAGE:
@@ -379,10 +379,10 @@ void LocalCommand_(float request)
        {
                case CMD_REQUEST_COMMAND:
                {
-                       
-                       return; 
+
+                       return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -411,15 +411,15 @@ void LocalCommand_(float request)
        CLIENT_COMMAND("mv_download", LocalCommand_mv_download(request, arguments), "Retrieve mapshot picture from the server") \
        CLIENT_COMMAND("sendcvar", LocalCommand_sendcvar(request, arguments), "Send a cvar to the server (like weaponpriority)") \
        /* nothing */
-       
+
 void LocalCommand_macro_help()
 {
        #define CLIENT_COMMAND(name,function,description) \
                { if(strtolower(description) != "") { print("  ^2", name, "^7: ", description, "\n"); } }
-               
+
        CLIENT_COMMANDS(0, 0)
        #undef CLIENT_COMMAND
-       
+
        return;
 }
 
@@ -427,10 +427,10 @@ float LocalCommand_macro_command(float argc)
 {
        #define CLIENT_COMMAND(name,function,description) \
                { if(name == strtolower(argv(0))) { function; return TRUE; } }
-               
+
        CLIENT_COMMANDS(CMD_REQUEST_COMMAND, argc)
        #undef CLIENT_COMMAND
-       
+
        return FALSE;
 }
 
@@ -438,10 +438,10 @@ float LocalCommand_macro_usage(float argc)
 {
        #define CLIENT_COMMAND(name,function,description) \
                { if(name == strtolower(argv(1))) { function; return TRUE; } }
-               
+
        CLIENT_COMMANDS(CMD_REQUEST_USAGE, argc)
        #undef CLIENT_COMMAND
-       
+
        return FALSE;
 }
 
@@ -449,10 +449,10 @@ void LocalCommand_macro_write_aliases(float fh)
 {
        #define CLIENT_COMMAND(name,function,description) \
                { if(strtolower(description) != "") { CMD_Write_Alias("qc_cmd_cl", name, description); } }
-               
+
        CLIENT_COMMANDS(0, 0)
        #undef CLIENT_COMMAND
-       
+
        return;
 }
 
@@ -468,24 +468,24 @@ void GameCommand(string command)
 
        // Guide for working with argc arguments by example:
        // argc:   1    - 2      - 3     - 4
-       // argv:   0    - 1      - 2     - 3 
+       // argv:   0    - 1      - 2     - 3
        // cmd     vote - master - login - password
 
-       if(strtolower(argv(0)) == "help") 
+       if(strtolower(argv(0)) == "help")
        {
-               if(argc == 1) 
+               if(argc == 1)
                {
                        print("\nClient console commands:\n");
                        LocalCommand_macro_help();
 
                        print("\nGeneric commands shared by all programs:\n");
                        GenericCommand_macro_help();
-                       
+
                        print("\nUsage:^3 cl_cmd COMMAND...^7, where possible commands are listed above.\n");
                        print("For help about a specific command, type cl_cmd help COMMAND\n");
-                       
+
                        return;
-               } 
+               }
                else if(GenericCommand_macro_usage(argc)) // Instead of trying to call a command, we're going to see detailed information about it
                {
                        return;
@@ -494,8 +494,8 @@ void GameCommand(string command)
                {
                        return;
                }
-       } 
-       else if(GenericCommand(command)) 
+       }
+       else if(GenericCommand(command))
        {
                return; // handled by common/command/generic.qc
        }
@@ -503,10 +503,10 @@ void GameCommand(string command)
        {
                return; // handled by one of the above LocalCommand_* functions
        }
-       
+
        // nothing above caught the command, must be invalid
        print(((command != "") ? strcat("Unknown client command \"", command, "\"") : "No command provided"), ". For a list of supported commands, try cl_cmd help.\n");
-       
+
        return;
 }
 
@@ -523,7 +523,7 @@ void GameCommand(string command)
        CONSOLE_COMMAND("+showaccuracy", { scoreboard_showaccuracy = TRUE; }) \
        CONSOLE_COMMAND("-showaccuracy", { scoreboard_showaccuracy = FALSE; }) \
        /* nothing */
-       
+
 #define CONSOLE_COMMANDS_MOVEMENT \
        CONSOLE_COMMAND("+forward", { ++camera_direction_x; }) \
        CONSOLE_COMMAND("-forward", { --camera_direction_x; }) \
@@ -551,7 +551,7 @@ void ConsoleCommand_macro_init()
 
        CONSOLE_COMMANDS_NORMAL
        #undef CONSOLE_COMMAND
-       
+
        // then init movement commands
        #ifndef CAMERATEST
        if(isdemo())
@@ -565,7 +565,7 @@ void ConsoleCommand_macro_init()
        #ifndef CAMERATEST
        }
        #endif
-       
+
        return;
 }
 
@@ -573,10 +573,10 @@ float ConsoleCommand_macro_normal(float argc)
 {
        #define CONSOLE_COMMAND(name,execution) \
                { if(name == strtolower(argv(0))) { { execution } return TRUE; } }
-               
+
        CONSOLE_COMMANDS_NORMAL
        #undef CONSOLE_COMMAND
-       
+
        return FALSE;
 }
 
@@ -590,7 +590,7 @@ float ConsoleCommand_macro_movement(float argc)
                CONSOLE_COMMANDS_MOVEMENT
                #undef CONSOLE_COMMAND
        }
-       
+
        return FALSE;
 }
 
@@ -612,7 +612,7 @@ float CSQC_ConsoleCommand(string command)
        {
                return TRUE;
        }
-       
+
        // Return value should be 1 if CSQC handled the command, otherwise return 0 to have the engine handle it.
 
        return FALSE;
index 0016196bac4f615bb0df44c5893d771ec95f0d49..3889603aa8867679a4ba23cc4cf6d69150664f6e 100644 (file)
@@ -39,7 +39,7 @@ const float           VF_PERSPECTIVE                                  = 200;  //(float)
 const float            VF_CL_VIEWANGLES                                = 33;   //(vector)
 const float            VF_CL_VIEWANGLES_X                              = 34;   //(float)
 const float            VF_CL_VIEWANGLES_Y                              = 35;   //(float)
-const float            VF_CL_VIEWANGLES_Z                              = 36;   //(float) 
+const float            VF_CL_VIEWANGLES_Z                              = 36;   //(float)
 
 // Server Autosent Stat Constants
 const float            STAT_HEALTH                                             = 0;
index b2c98e4ed4aab27040de2b888c0a6ef1a5f3431c..6f008fb541a118c53c2a10cf0513d64fffe61dd9 100644 (file)
@@ -93,7 +93,7 @@ string forceplayermodels_goodmodel;
 float forceplayermodels_goodmodelindex;
 
 .vector glowmod;
-.vector old_glowmod; 
+.vector old_glowmod;
 
 void CSQCPlayer_ModelAppearance_PreUpdate(void)
 {
@@ -114,14 +114,14 @@ void CSQCPlayer_ModelAppearance_PostUpdate(void)
                self.forceplayermodels_isgoodmodel = fexists(self.forceplayermodels_savemodel);
                self.forceplayermodels_isgoodmodel_mdl = self.forceplayermodels_savemodel;
                if(!self.forceplayermodels_isgoodmodel)
-                       print(sprintf("Warning: missing model %s has been used\n", self.forceplayermodels_savemodel));
+                       printf("Warning: missing model %s has been used\n", self.forceplayermodels_savemodel);
        }
 }
 void CSQCPlayer_ModelAppearance_Apply(float islocalplayer)
 {
        // FORCEMODEL
        // which one is ALWAYS good?
-       if not(forceplayermodels_goodmodel)
+       if (!forceplayermodels_goodmodel)
        {
                entity e;
                e = spawn();
@@ -180,7 +180,7 @@ void CSQCPlayer_ModelAppearance_Apply(float islocalplayer)
        float isfriend;
        float cm;
        cm = self.forceplayermodels_savecolormap;
-       cm = (cm >= 1024) ? cm : (stof(getplayerkeyvalue(self.colormap - 1, "colors")) + 1024);
+       cm = (cm >= 1024) ? cm : (stof(getplayerkeyvalue(cm - 1, "colors")) + 1024);
 
        if(teamplay)
                isfriend = (cm == 1024 + 17 * myteam);
@@ -283,7 +283,7 @@ void CSQCPlayer_ModelAppearance_Apply(float islocalplayer)
                        // Fade out to black now...
                        if(self.old_glowmod == '0 0 0') { self.old_glowmod = self.glowmod; }
                        self.colormap = 0;
-                       
+
                        self.glowmod = self.old_glowmod * bound(0, 1 - (time - self.death_time) / autocvar_cl_deathglow, 1);
                        self.glowmod_x = max(self.glowmod_x, 0.0001);
                        self.glowmod_y = max(self.glowmod_y, 0.0001);
@@ -292,7 +292,7 @@ void CSQCPlayer_ModelAppearance_Apply(float islocalplayer)
                else if(self.old_glowmod != '0 0 0') { self.old_glowmod = '0 0 0'; }
        }
 
-       //print(sprintf("CSQCPlayer_ModelAppearance_Apply(): state = %s, colormap = %f, glowmod = %s\n", (self.csqcmodel_isdead ? "DEAD" : "ALIVE"), self.colormap, vtos(self.glowmod)));
+       //printf("CSQCPlayer_ModelAppearance_Apply(): state = %s, colormap = %f, glowmod = %s\n", (self.csqcmodel_isdead ? "DEAD" : "ALIVE"), self.colormap, vtos(self.glowmod));
 }
 
 // FEATURE: fallback frames
@@ -362,7 +362,7 @@ float CSQCPlayer_FallbackFrame(float f)
                case 29: return 4; // anim_duckwalkbackright -> anim_duckwalk
                case 30: return 4; // anim_duckwalkbackleft -> anim_duckwalk
        }
-       print(sprintf("Frame %d missing in model %s, and we have no fallback - FAIL!\n", f, self.model));
+       printf("Frame %d missing in model %s, and we have no fallback - FAIL!\n", f, self.model);
        return f;
 }
 void CSQCPlayer_FallbackFrame_Apply(void)
@@ -493,7 +493,7 @@ void CSQCModel_Effects_Apply(void)
        self.renderflags &= ~(RF_DEPTHHACK | RF_ADDITIVE | RF_FULLBRIGHT | EF_NOSHADOW | RF_USEAXIS);
        self.effects = 0;
        self.traileffect = 0;
-                       
+
        if(eff & EF_BRIGHTFIELD)
                self.traileffect = particleeffectnum("TR_NEXUIZPLASMA");
        // ignoring EF_MUZZLEFLASH
@@ -610,7 +610,22 @@ void CSQCModel_Hook_PreDraw(float isplayer)
                CSQCPlayer_ModelAppearance_Apply(self.entnum == player_localnum + 1);
                CSQCPlayer_LOD_Apply();
                if(!isplayer)
+               {
+                       skeleton_loadinfo(self);
+                       float doblend = (self.bone_upperbody >= 0);
                        CSQCPlayer_FallbackFrame_Apply();
+                       if(doblend)
+                       {
+                               skeleton_from_frames(self, self.csqcmodel_isdead);
+                       }
+                       else
+                       {
+                               free_skeleton_from_frames(self);
+                               // just in case, clear these (we're animating in frame and frame3)
+                               self.lerpfrac = 0;
+                               self.lerpfrac4 = 0;
+                       }
+               }
                else
                {
                        // we know that frame3 and frame4 fields, used by InterpolateAnimation, are left alone - but that is all we know!
index cd7ac7bfa468a1e8422ddb7c131bc9784a0e6436..cc3653db4d2deb21a79aaa188112f83b7e3ae6ec 100644 (file)
@@ -85,7 +85,7 @@ void DamageEffect(vector hitorg, float dmg, float type, float specnum)
        e = get_weaponinfo(type);
 
        effectname = strcat("damage_", e.netname);
-       
+
        // if damage was dealt with a bullet weapon, our effect is blood
        // since blood is species dependent, include the species tag
        if(type == WEP_SHOTGUN || type == WEP_UZI || type == WEP_RIFLE)
@@ -133,7 +133,7 @@ void Ent_DamageInfo(float isNew)
        force = decompressShortVector(ReadShort());
        species = ReadByte();
 
-       if not(isNew)
+       if (!isNew)
                return;
 
        if(rad < 0)
@@ -143,7 +143,7 @@ void Ent_DamageInfo(float isNew)
        }
        else
                forcemul = 1;
-       
+
        for(self = findradius(w_org, rad + MAX_DAMAGEEXTRARADIUS); self; self = self.chain)
        {
                // attached ents suck
@@ -198,7 +198,7 @@ void Ent_DamageInfo(float isNew)
        }
 
        self = oldself;
-       
+
        if(DEATH_ISVEHICLE(w_deathtype))
        {
                traceline(w_org - normalize(force) * 16, w_org + normalize(force) * 16, MOVE_NOMONSTERS, world);
@@ -206,14 +206,14 @@ void Ent_DamageInfo(float isNew)
                        w_backoff = trace_plane_normal;
                else
                        w_backoff = -1 * normalize(w_org - (w_org + normalize(force) * 16));
-               
+
                setorigin(self, w_org + w_backoff * 2); // for sound() calls
-               
+
                switch(w_deathtype)
                {
                        case DEATH_VH_CRUSH:
                                break;
-                               
+
                        // spiderbot
                        case DEATH_VH_SPID_MINIGUN:
                                string _snd;
@@ -229,7 +229,7 @@ void Ent_DamageInfo(float isNew)
                                sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_MIN);
                                pointparticles(particleeffectnum("explosion_big"), self.origin, w_backoff * 1000, 1);
                                break;
-            
+
                        case DEATH_VH_WAKI_GUN:
                                sound(self, CH_SHOTS, "weapons/laserimpact.wav", VOL_BASE, ATTEN_NORM);
                                pointparticles(particleeffectnum("wakizashi_gun_impact"), self.origin, w_backoff * 1000, 1);
@@ -242,7 +242,7 @@ void Ent_DamageInfo(float isNew)
                                sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_MIN);
                                pointparticles(particleeffectnum("explosion_big"), self.origin, w_backoff * 1000, 1);
                                break;
-                               
+
                        case DEATH_VH_RAPT_CANNON:
                                sound(self, CH_SHOTS, "weapons/laserimpact.wav", VOL_BASE, ATTEN_NORM);
                                pointparticles(particleeffectnum("raptor_cannon_impact"), self.origin, w_backoff * 1000, 1);
@@ -273,8 +273,8 @@ void Ent_DamageInfo(float isNew)
                                break;
                }
        }
-       
-       
+
+
        if(DEATH_ISTURRET(w_deathtype))
        {
                string _snd;
@@ -283,22 +283,22 @@ void Ent_DamageInfo(float isNew)
                        w_backoff = trace_plane_normal;
                else
                        w_backoff = -1 * normalize(w_org - (w_org + normalize(force) * 16));
-               
+
                setorigin(self, w_org + w_backoff * 2); // for sound() calls
-               
+
                switch(w_deathtype)
-               {   
+               {
                         case DEATH_TURRET_EWHEEL:
                                sound(self, CH_SHOTS, "weapons/laserimpact.wav", VOL_BASE, ATTEN_MIN);
                                pointparticles(particleeffectnum("laser_impact"), self.origin, w_backoff * 1000, 1);
                                break;
-                        
+
                         case DEATH_TURRET_FLAC:
                                pointparticles(particleeffectnum("hagar_explode"), w_org, '0 0 0', 1);
                                _snd = strcat("weapons/hagexp", ftos(1 + rint(random() * 2)), ".waw");
                                sound(self, CH_SHOTS, _snd, VOL_BASE, ATTEN_NORM);
                                break;
-                               
+
                         case DEATH_TURRET_MLRS:
                         case DEATH_TURRET_HK:
                         case DEATH_TURRET_WALK_ROCKET:
@@ -306,19 +306,19 @@ void Ent_DamageInfo(float isNew)
                                sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_MIN);
                                pointparticles(particleeffectnum("rocket_explode"), self.origin, w_backoff * 1000, 1);
                                break;
-                        
+
                         case DEATH_TURRET_MACHINEGUN:
                         case DEATH_TURRET_WALK_GUN:
                                _snd = strcat("weapons/ric", ftos(1 + rint(random() * 2)), ".waw");
                                sound(self, CH_SHOTS, _snd, VOL_BASE, ATTEN_NORM);
                                pointparticles(particleeffectnum("machinegun_impact"), self.origin, w_backoff * 1000, 1);
                                break;
-                                                 
+
                         case DEATH_TURRET_PLASMA:
                                sound(self, CH_SHOTS, "weapons/electro_impact.wav", VOL_BASE, ATTEN_MIN);
                                pointparticles(particleeffectnum("electro_impact"), self.origin, w_backoff * 1000, 1);
                                break;
-                                                 
+
                         case DEATH_TURRET_WALK_MEELE:
                                sound(self, CH_SHOTS, "weapons/ric1.wav", VOL_BASE, ATTEN_MIN);
                                pointparticles(particleeffectnum("TE_SPARK"), self.origin, w_backoff * 1000, 1);
@@ -326,17 +326,17 @@ void Ent_DamageInfo(float isNew)
 
                         case DEATH_TURRET_PHASER:
                                break;
-                               
+
                         case DEATH_TURRET_TESLA:
                                te_smallflash(self.origin);
                                break;
 
                }
        }
-       
+
        // TODO spawn particle effects and sounds based on w_deathtype
        if(!DEATH_ISSPECIAL(w_deathtype))
-       if not(hitplayer && !rad) // don't show ground impacts for hitscan weapons if a player was hit
+       if(!hitplayer || rad) // don't show ground impacts for hitscan weapons if a player was hit
        {
                float hitwep;
 
index afd61edab20461e3c61d67efcb0d819ccf4e6f89..835d14a1ee6f3b6d9336ae96ffdbef27ac6c6cc6 100644 (file)
@@ -176,7 +176,7 @@ void Ent_GibSplash(float isNew)
        {
                if(cl_gentle_gibs == 2)
                        gentle_prefix = "";
-               else if(cl_gentle_gibs == 3) 
+               else if(cl_gentle_gibs == 3)
                        gentle_prefix = "happy_";
        }
        else if(autocvar_cl_particlegibs)
@@ -185,7 +185,7 @@ void Ent_GibSplash(float isNew)
                gentle_prefix = "particlegibs_";
        }
 
-       if not(cl_gentle_gibs || autocvar_cl_gentle)
+       if (!(cl_gentle_gibs || autocvar_cl_gentle))
                amount *= 1 - autocvar_cl_nogibs;
 
        if(autocvar_ekg)
index ab489153011cb2303905e28d04f3ce16d90be8ee..196730a72dde016cbe3fd28308955ed2c2de6ee1 100644 (file)
@@ -8,7 +8,7 @@ void Draw_CylindricLine(vector from, vector to, float thickness, string texture,
 {
        // I want to draw a quad...
        // from and to are MIDPOINTS.
-       
+
        vector axis, thickdir, A, B, C, D;
        float length_tex;
 
index d151a535678400ace2f7465b2a802b3bbdfb3bd6..252142506f88731b28e21e679c0bd5d84b7d52b2 100644 (file)
@@ -142,16 +142,16 @@ float stringwidth_nocolors(string s, vector theSize)
        return stringwidth(s, FALSE, theSize);
 }
 
-void drawstringright(vector position, string text, vector scale, vector rgb, float theAlpha, float flag)
+void drawstringright(vector position, string text, vector theScale, vector rgb, float theAlpha, float flag)
 {
-       position_x -= 2 / 3 * strlen(text) * scale_x;
-       drawstring(position, text, scale, rgb, theAlpha, flag);
+       position_x -= 2 / 3 * strlen(text) * theScale_x;
+       drawstring(position, text, theScale, rgb, theAlpha, flag);
 }
 
-void drawstringcenter(vector position, string text, vector scale, vector rgb, float theAlpha, float flag)
+void drawstringcenter(vector position, string text, vector theScale, vector rgb, float theAlpha, float flag)
 {
-       position_x = 0.5 * (vid_conwidth - 0.6025 * strlen(text) * scale_x);
-       drawstring(position, text, scale, rgb, theAlpha, flag);
+       position_x = 0.5 * (vid_conwidth - 0.6025 * strlen(text) * theScale_x);
+       drawstring(position, text, theScale, rgb, theAlpha, flag);
 }
 
 // return the string of the onscreen race timer
@@ -242,7 +242,7 @@ float GetPlayerColorForce(float i)
 
 float GetPlayerColor(float i)
 {
-       if not(playerslots[i].gotscores) // unconnected
+       if(!playerslots[i].gotscores) // unconnected
                return NUM_SPECTATOR;
        else if(stof(getplayerkeyvalue(i, "frags")) == FRAGS_SPECTATOR)
                return NUM_SPECTATOR;
@@ -734,12 +734,12 @@ void HUD_Weapons(void)
 
                // skip this weapon if we don't own it (and onlyowned is enabled)-- or if weapons_complainbubble is showing for this weapon
                if(autocvar_hud_panel_weapons_onlyowned)
-               if not((weapons_stat & WepSet_FromWeapon(self.weapon)) || (self.weapon == complain_weapon))
+               if (!((weapons_stat & WepSet_FromWeapon(self.weapon)) || (self.weapon == complain_weapon)))
                        continue;
 
                // figure out the drawing position of weapon
-               weapon_pos = (panel_pos 
-                       + eX * column * weapon_size_x 
+               weapon_pos = (panel_pos
+                       + eX * column * weapon_size_x
                        + eY * row * weapon_size_y);
 
                // draw background behind currently selected weapon
@@ -1133,7 +1133,7 @@ void HUD_Powerups(void)
        {
                if(!autocvar_hud_panel_powerups) return;
                if(spectatee_status == -1) return;
-               if not(getstati(STAT_ITEMS, 0, 24) & (IT_STRENGTH | IT_INVINCIBLE | IT_SUPERWEAPON)) return;
+               if(!(getstati(STAT_ITEMS, 0, 24) & (IT_STRENGTH | IT_INVINCIBLE | IT_SUPERWEAPON))) return;
                if (getstati(STAT_HEALTH) <= 0) return;
 
                strength_time = bound(0, getstatf(STAT_STRENGTH_FINISHED) - time, 99);
@@ -1416,7 +1416,7 @@ void HUD_HealthArmor(void)
        if(autocvar_hud_panel_healtharmor == 2) // combined health and armor display
        {
                vector v;
-               v = healtharmor_maxdamage(health, armor, armorblockpercent);
+               v = healtharmor_maxdamage(health, armor, armorblockpercent, DEATH_WEAPON);
 
                float x;
                x = floor(v_x + 1);
@@ -1543,7 +1543,7 @@ void HUD_HealthArmor(void)
                                        {
                                                float BLINK_FACTOR = 0.15;
                                                float BLINK_BASE = 0.85;
-                                               float BLINK_FREQ = 9; 
+                                               float BLINK_FREQ = 9;
                                                pain_health_alpha = BLINK_BASE + BLINK_FACTOR * cos(time * BLINK_FREQ);
                                        }
                                }
@@ -1664,7 +1664,7 @@ void HUD_Notify(void)
        float entries, height;
        entries = bound(1, floor(KN_MAX_ENTRIES * mySize_y/mySize_x), KN_MAX_ENTRIES);
        height = mySize_y/entries;
-       
+
        vector fontsize;
        float fontheight = height * autocvar_hud_panel_notify_fontsize;
        fontsize = '0.5 0.5 0' * fontheight;
@@ -1726,7 +1726,7 @@ void HUD_Notify(void)
                        {
                                break;
                        }
-                       
+
                        attacker = notify_attackers[j];
                        victim = notify_victims[j];
                        icon = notify_icon[j];
@@ -1865,10 +1865,10 @@ void HUD_Radar(void)
                panel_size_y = bound(0.2, panel_size_y, 1) * vid_conheight;
                panel_pos_x = (vid_conwidth - panel_size_x) / 2;
                panel_pos_y = (vid_conheight - panel_size_y) / 2;
-               
+
                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
-               
+
                switch(hud_panel_radar_maximized_zoommode)
                {
                        default:
@@ -1885,7 +1885,7 @@ void HUD_Radar(void)
                                f = 1;
                                break;
                }
-               
+
                switch(hud_panel_radar_maximized_rotation)
                {
                        case 0:
@@ -1914,7 +1914,7 @@ void HUD_Radar(void)
                                f = 1;
                                break;
                }
-               
+
                switch(hud_panel_radar_rotation)
                {
                        case 0:
@@ -2297,7 +2297,7 @@ void HUD_Score(void)
                        score = tm.(teamscores[ts_primary]);
                        if(autocvar__hud_configure)
                                score = 123;
-                       
+
                        if (score > max_fragcount)
                                max_fragcount = score;
 
@@ -2752,7 +2752,7 @@ void HUD_Mod_CTF(vector pos, vector mySize)
        stat_items = getstati(STAT_ITEMS, 0, 24);
        redflag = (stat_items/IT_RED_FLAG_TAKEN) & 3;
        blueflag = (stat_items/IT_BLUE_FLAG_TAKEN) & 3;
-       
+
        if(redflag || blueflag)
                mod_active = 1;
        else
@@ -3029,29 +3029,29 @@ void HUD_Mod_KH(vector pos, vector mySize)
 float kaball_prevstatus; // last remembered status
 float kaball_statuschange_time; // time when the status changed
 
-// we don't need to reset for keepaway since it immediately 
+// we don't need to reset for keepaway since it immediately
 // autocorrects prevstatus as to if the player has the ball or not
 
 void HUD_Mod_Keepaway(vector pos, vector mySize)
 {
        mod_active = 1; // keepaway should always show the mod HUD
-       
+
        float BLINK_FACTOR = 0.15;
        float BLINK_BASE = 0.85;
-       float BLINK_FREQ = 5; 
+       float BLINK_FREQ = 5;
        float kaball_alpha = BLINK_BASE + BLINK_FACTOR * cos(time * BLINK_FREQ);
-       
+
        float stat_items = getstati(STAT_ITEMS, 0, 24);
        float kaball = (stat_items/IT_KEY1) & 1;
-       
+
        if(kaball != kaball_prevstatus)
        {
                kaball_statuschange_time = time;
                kaball_prevstatus = kaball;
        }
-       
+
        vector kaball_pos, kaball_size;
-       
+
        if(mySize_x > mySize_y) {
                kaball_pos = pos + eX * 0.25 * mySize_x;
                kaball_size = eX * 0.5 * mySize_x + eY * mySize_y;
@@ -3059,13 +3059,13 @@ void HUD_Mod_Keepaway(vector pos, vector mySize)
                kaball_pos = pos + eY * 0.25 * mySize_y;
                kaball_size = eY * 0.5 * mySize_y + eX * mySize_x;
        }
-       
+
        float kaball_statuschange_elapsedtime = time - kaball_statuschange_time;
        float f = bound(0, kaball_statuschange_elapsedtime*2, 1);
-       
+
        if(kaball_prevstatus && f < 1)
                drawpic_aspect_skin_expanding(kaball_pos, "keepawayball_carrying", kaball_size, '1 1 1', panel_fg_alpha * kaball_alpha, DRAWFLAG_NORMAL, f);
-       
+
        if(kaball)
                drawpic_aspect_skin(pos, "keepawayball_carrying", eX * mySize_x + eY * mySize_y, '1 1 1', panel_fg_alpha * kaball_alpha * f, DRAWFLAG_NORMAL);
 }
@@ -3123,7 +3123,7 @@ void HUD_Mod_Race(vector pos, vector mySize)
        float f; // yet another function has this
        score = me.(scores[ps_primary]);
 
-       if not((scores_flags[ps_primary] & SFL_TIME) && !teamplay) // race/cts record display on HUD
+       if(!(scores_flags[ps_primary] & SFL_TIME) || teamplay) // race/cts record display on HUD
                return; // no records in the actual race
 
        // clientside personal record
@@ -3591,7 +3591,7 @@ void HUD_EngineInfo(void)
                frametimeavg = (frametimeavg + frametimeavg1 + frametimeavg2 + currentframetime)/4; // average three frametimes into framecounter for slightly more stable fps readings :P
                frametimeavg2 = frametimeavg1;
                frametimeavg1 = frametimeavg;
-               
+
                float weight;
                weight = cvar("hud_panel_engineinfo_framecounter_exponentialmovingaverage_new_weight");
                if(currentframetime > 0.0001) // filter out insane values which sometimes seem to occur and throw off the average? If you are getting 10,000 fps or more, then you don't need a framerate counter.
@@ -3669,7 +3669,7 @@ void HUD_InfoMessages(void)
 
        vector fontsize;
        fontsize = '0.20 0.20 0' * mySize_y;
-       
+
        float a;
        a = panel_fg_alpha;
 
@@ -3704,9 +3704,7 @@ void HUD_InfoMessages(void)
                        s = sprintf(_("^1Press ^3%s^1 for gamemode info"), getcommandkey("server info", "+show_info"));
                        drawInfoMessage(s)
 
-                       if(gametype == MAPINFO_TYPE_ARENA)
-                               s = _("^1Wait for your turn to join");
-                       else if(gametype == MAPINFO_TYPE_LMS)
+                       if(gametype == MAPINFO_TYPE_LMS)
                        {
                                entity sk;
                                sk = playerslots[player_localnum];
@@ -3795,7 +3793,7 @@ void HUD_InfoMessages(void)
                        }
                }
        }
-       else 
+       else
        {
                s = _("^7Press ^3ESC ^7to show HUD options.");
                drawInfoMessage(s)
@@ -3871,7 +3869,7 @@ void HUD_Physics(void)
                        conversion_factor = 0.0254 * 1.943844492; // 1 m/s = 1.943844492 knots, because 1 knot = 1.852 km/h
                        break;
        }
-       
+
        vector vel = (csqcplayer ? csqcplayer.velocity : pmove_vel);
 
        float max_speed = floor( autocvar_hud_panel_physics_speed_max * conversion_factor + 0.5 );
@@ -3894,9 +3892,9 @@ void HUD_Physics(void)
                        acceleration = (vlen(vel) - vlen(acc_prevspeed));
                else
                        acceleration = (vlen(vel - '0 0 1' * vel_z) - vlen(acc_prevspeed - '0 0 1' * acc_prevspeed_z));
-               
+
                acceleration = acceleration * (1 / max(0.0001, f)) * (0.0254 / 9.80665);
-               
+
                acc_prevspeed = vel;
                acc_prevtime = time;
 
@@ -4097,7 +4095,7 @@ float centerprint_showing;
 
 void centerprint_generic(float new_id, string strMessage, float duration, float countdown_num)
 {
-       //print(sprintf("centerprint_generic(%d, '%s^7', %d, %d);\n", new_id, strMessage, duration, countdown_num));
+       //printf("centerprint_generic(%d, '%s^7', %d, %d);\n", new_id, strMessage, duration, countdown_num);
        float i, j;
 
        if(strMessage == "" && new_id == 0)
@@ -4229,9 +4227,9 @@ void HUD_CenterPrint (void)
                if (scoreboard_bottom >= 0.96 * vid_conheight)
                        return;
                vector target_pos;
-               
+
                target_pos = eY * scoreboard_bottom + eX * 0.5 * (vid_conwidth - panel_size_x);
-               
+
                if(target_pos_y > panel_pos_y)
                {
                        panel_pos = panel_pos + (target_pos - panel_pos) * sqrt(scoreboard_fade_alpha);
@@ -4263,8 +4261,7 @@ void HUD_CenterPrint (void)
        float a, sz, align, current_msg_pos_y = 0, msg_size;
        vector pos;
        string ts;
-
-       n = -1; // if no msg will be displayed, n stays -1
+       float all_messages_expired = TRUE;
 
        pos = panel_pos;
        if (autocvar_hud_panel_centerprint_flip)
@@ -4287,31 +4284,36 @@ void HUD_CenterPrint (void)
                                continue;
                }
 
+               all_messages_expired = FALSE;
 
-               // fade the centerprint_hud in/out 
-               if(centerprint_time[j] < 0)
-                       a = bound(0, (time - centerprint_expire_time[j]) / max(0.0001, autocvar_hud_panel_centerprint_fade_in), 1);
-               else if(centerprint_expire_time[j] - autocvar_hud_panel_centerprint_fade_out > time)
-                       a = bound(0, (time - (centerprint_expire_time[j] - centerprint_time[j])) / max(0.0001, autocvar_hud_panel_centerprint_fade_in), 1);
-               else if(centerprint_expire_time[j] > time)
+               // fade the centerprint_hud in/out
+               if(centerprint_time[j] < 0)  // Expired but forced. Expire time is the fade-in time.
+                       a = (time - centerprint_expire_time[j]) / max(0.0001, autocvar_hud_panel_centerprint_fade_in);
+               else if(centerprint_expire_time[j] - autocvar_hud_panel_centerprint_fade_out > time)  // Regularily printed. Not fading out yet.
+                       a = (time - (centerprint_expire_time[j] - centerprint_time[j])) / max(0.0001, autocvar_hud_panel_centerprint_fade_in);
+               else // Expiring soon, so fade it out.
                        a = (centerprint_expire_time[j] - time) / max(0.0001, autocvar_hud_panel_centerprint_fade_out);
-               else
-                       a = 0;
-               
+
+               if (a <= 0.5/255.0)  // Guaranteed invisible - don't show.
+                       continue;
+               if (a > 1)
+                       a = 1;
+
                // set the size from fading in/out before subsequent fading
-               sz = autocvar_hud_panel_centerprint_fade_minfontsize + a * (1 - autocvar_hud_panel_centerprint_fade_minfontsize); 
-               
+               sz = autocvar_hud_panel_centerprint_fade_minfontsize + a * (1 - autocvar_hud_panel_centerprint_fade_minfontsize);
+
                // also fade it based on positioning
                if(autocvar_hud_panel_centerprint_fade_subsequent)
                {
                        a = a * bound(autocvar_hud_panel_centerprint_fade_subsequent_passone_minalpha, (1 - (g / max(1, autocvar_hud_panel_centerprint_fade_subsequent_passone))), 1); // pass one: all messages after the first have half theAlpha
                        a = a * bound(autocvar_hud_panel_centerprint_fade_subsequent_passtwo_minalpha, (1 - (g / max(1, autocvar_hud_panel_centerprint_fade_subsequent_passtwo))), 1); // pass two: after that, gradually lower theAlpha even more for each message
                }
-               
+               a *= panel_fg_alpha;
+
                // finally set the size based on the new theAlpha from subsequent fading
-               sz = sz * (autocvar_hud_panel_centerprint_fade_subsequent_minfontsize + a * (1 - autocvar_hud_panel_centerprint_fade_subsequent_minfontsize)); 
+               sz = sz * (autocvar_hud_panel_centerprint_fade_subsequent_minfontsize + a * (1 - autocvar_hud_panel_centerprint_fade_subsequent_minfontsize));
                drawfontscale = sz * '1 1 0';
-               
+
                if (centerprint_countdown_num[j])
                        n = tokenizebyseparator(strreplace("^COUNT", count_seconds(centerprint_countdown_num[j]), centerprint_messages[j]), "\n");
                else
@@ -4346,7 +4348,8 @@ void HUD_CenterPrint (void)
                                {
                                        if (align)
                                                pos_x = panel_pos_x + (panel_size_x - stringwidth(ts, TRUE, fontsize)) * align;
-                                       drawcolorcodedstring(pos + eY * 0.5 * (1 - sz) * fontsize_y, ts, fontsize, a * panel_fg_alpha, DRAWFLAG_NORMAL);
+                                       if (a > 0.5/255.0)  // Otherwise guaranteed invisible - don't show. This is checked a second time after some multiplications with other factors were done so temporary changes of these cannot cause flicker.
+                                               drawcolorcodedstring(pos + eY * 0.5 * (1 - sz) * fontsize_y, ts, fontsize, a, DRAWFLAG_NORMAL);
                                        pos_y += fontsize_y;
                                }
                                else
@@ -4354,15 +4357,15 @@ void HUD_CenterPrint (void)
                        }
                }
 
-               ++g; // move next position number up 
-               
+               ++g; // move next position number up
+
                msg_size = pos_y - msg_size;
                if (autocvar_hud_panel_centerprint_flip)
                {
                        pos_y = current_msg_pos_y - CENTERPRINT_SPACING * fontsize_y;
                        if (a < 1 && centerprint_msgID[j] == 0) // messages with id can be replaced just after they are faded out, so never move over them the next messages
                                pos_y += (msg_size + CENTERPRINT_SPACING * fontsize_y) * (1 - sqrt(sz));
-                               
+
                        if (pos_y < panel_pos_y) // check if the next message can be shown
                        {
                                drawfontscale = '1 1 0';
@@ -4374,7 +4377,7 @@ void HUD_CenterPrint (void)
                        pos_y += CENTERPRINT_SPACING * fontsize_y;
                        if (a < 1 && centerprint_msgID[j] == 0) // messages with id can be replaced just after they are faded out, so never move over them the next messages
                                pos_y -= (msg_size + CENTERPRINT_SPACING * fontsize_y) * (1 - sqrt(sz));
-                               
+
                        if(pos_y > panel_pos_y + panel_size_y - fontsize_y) // check if the next message can be shown
                        {
                                drawfontscale = '1 1 0';
@@ -4383,7 +4386,7 @@ void HUD_CenterPrint (void)
                }
        }
        drawfontscale = '1 1 0';
-       if (n == -1)
+       if (all_messages_expired)
        {
                centerprint_showing = FALSE;
                reset_centerprint_messages();
index db9405ef6af6039b968176b9de277fb0aae5820b..c2432b97c78191d5d8b38304cf14c414bf66b707 100644 (file)
@@ -132,7 +132,7 @@ float current_player;
                hud_panelent.panel_draw = ##draw_func; \
                ++HUD_PANEL_NUM; \
        } \
-       ACCUMULATE_FUNCTION(RegisterHUD_Panels, RegisterHUD_Panel_##NAME)
+       ACCUMULATE_FUNCTION(RegisterHUD_Panels, RegisterHUD_Panel_##NAME);
 
 HUD_PANELS
 #undef HUD_PANEL
@@ -344,7 +344,7 @@ if(panel.update_time <= time) { \
                strunzone(panel.current_panel_bg); \
        if(panel_bg == "")\
        {\
-               /*print(sprintf("^xf08 %s panel: panel_bg is empty\n", panel.panel_name));*/\
+               /*printf("^xf08 %s panel: panel_bg is empty\n", panel.panel_name);*/\
                panel_bg = "0";\
        }\
        panel.current_panel_bg = strzone(panel_bg); \
@@ -361,7 +361,7 @@ if(panel.update_time <= time) { \
        panel_bg = panel.current_panel_bg; \
        if(panel.current_panel_bg == "")\
        {\
-               /*print(sprintf("^xf08 %s panel: panel.current_panel_bg is empty\n", panel.panel_name));*/\
+               /*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; \
index ca8ec19c1ab51cbf33cba4eb27c119b3ae413016..d361454843feea745f877ba898872a4dd2ea467a 100644 (file)
@@ -131,7 +131,7 @@ void HUD_Panel_ExportCfg(string cfgname)
                                        HUD_Write_PanelCvar_q("_maximized_scale");
                                        HUD_Write_PanelCvar_q("_maximized_size");
                                        HUD_Write_PanelCvar_q("_maximized_rotation");
-                                       HUD_Write_PanelCvar_q("_maximized_zoommode"); 
+                                       HUD_Write_PanelCvar_q("_maximized_zoommode");
                                        break;
                                case HUD_PANEL_SCORE:
                                        HUD_Write_PanelCvar_q("_rankings");
@@ -193,11 +193,11 @@ void HUD_Panel_ExportCfg(string cfgname)
                }
                HUD_Write("menu_sync\n"); // force the menu to reread the cvars, so that the dialogs are updated
 
-               print(sprintf(_("^2Successfully exported to %s! (Note: It's saved in data/data/)\n"), filename));
+               printf(_("^2Successfully exported to %s! (Note: It's saved in data/data/)\n"), filename);
                fclose(fh);
        }
        else
-               print(sprintf(_("^1Couldn't write to %s\n"), filename));
+               printf(_("^1Couldn't write to %s\n"), filename);
 }
 
 void HUD_Configure_Exit_Force()
@@ -978,7 +978,7 @@ void HUD_Panel_FirstInDrawQ(float id)
        }
        // now save the new top id
        panel_order[0] = id;
-       
+
        // let's save them into the cvar by some strcat trickery
        string s = "";
        for(i = 0; i < HUD_PANEL_NUM; ++i)
@@ -1087,10 +1087,10 @@ void HUD_Panel_Mouse()
        if(autocvar__menu_alpha == 1)
                return;
 
-       if not(autocvar_hud_cursormode)
+       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);
        }
index 49aa033c17ae3092f4acd65adbe9b151d424c98c..f6b3fc4cbe7894392a38fd455dacbe77d800a0dc 100644 (file)
@@ -52,7 +52,7 @@ void Draw_Laser()
                        Draw_CylindricLine(self.origin, trace_endpos, self.scale, "particles/laserbeam", 0, time * 3, self.colormod, 0.5, DRAWFLAG_ADDITIVE, view_origin);
                }
        }
-       if not(trace_dphitq3surfaceflags & (Q3SURFACEFLAG_SKY | Q3SURFACEFLAG_NOIMPACT))
+       if (!(trace_dphitq3surfaceflags & (Q3SURFACEFLAG_SKY | Q3SURFACEFLAG_NOIMPACT)))
        {
                if(self.cnt >= 0)
                        pointparticles(self.cnt, trace_endpos, trace_plane_normal, drawframetime * 1000);
index 107b25d712ad523caeeb3002f122fa18b1c0c2b4..8caeb01d524064f51c3191440555c0cd814ce0e3 100644 (file)
@@ -56,16 +56,16 @@ void MapVote_DrawMapItem(vector pos, float isize, float tsize, string map, strin
        vector rgb;
        string label;
        float text_size;
-       
+
        isize -= hud_fontsize_y; // respect the text when calculating the image size
 
        rgb = MapVote_RGB(id, count);
-       
+
        img_size_y = isize;
        img_size_x = isize / 0.75; // 4:3 x can be stretched easily, height is defined in isize
 
        pos_y = pos_y + img_size_y;
-       
+
        label = MapVote_FormatMapItem(id, map, count, tsize, hud_fontsize);
 
        text_size = stringwidth(label, false, hud_fontsize);
@@ -78,7 +78,7 @@ void MapVote_DrawMapItem(vector pos, float isize, float tsize, string map, strin
 
        pos_x -= text_size*0.5;
        drawstring(pos, label, hud_fontsize, rgb, theAlpha, DRAWFLAG_NORMAL);
-       
+
        pos_x = pos_x + text_size*0.5 - img_size_x*0.5;
        pos_y = pos_y - img_size_y;
 
@@ -110,15 +110,15 @@ void MapVote_DrawAbstain(vector pos, float isize, float tsize, float count, floa
        vector rgb;
        float text_size;
        string label;
-       
+
        rgb = MapVote_RGB(id, count);
 
        pos_y = pos_y + hud_fontsize_y;
-       
+
        label = MapVote_FormatMapItem(id, _("Don't care"), count, tsize, hud_fontsize);
 
        text_size = stringwidth(label, false, hud_fontsize);
-       
+
        pos_x -= text_size*0.5;
        drawstring(pos, label, hud_fontsize, rgb, 1, DRAWFLAG_NORMAL);
 }
@@ -176,10 +176,10 @@ void MapVote_Draw()
        if(!mv_active)
                return;
 
-       if not(autocvar_hud_cursormode)
+       if (!autocvar_hud_cursormode)
        {
                mv_mousepos = mv_mousepos + getmousepos();
-               
+
                mv_mousepos_x = bound(0, mv_mousepos_x, vid_conwidth);
                mv_mousepos_y = bound(0, mv_mousepos_y, vid_conheight);
        }
@@ -273,12 +273,12 @@ void Cmd_MapVote_MapDownload(float argc)
                print(_("mv_mapdownload: ^3You're not supposed to use this command on your own!\n"));
                return;
        }
-       
+
        id = stof(argv(1));
        for(pak = mv_pk3list; pak; pak = pak.chain)
                if(pak.sv_entnum == id)
                        break;
-       
+
        if(!pak || pak.sv_entnum != id) {
                print(_("^1Error:^7 Couldn't find pak index.\n"));
                return;
@@ -301,10 +301,10 @@ void MapVote_CheckPK3(string pic, string pk3, float id)
        pak.netname = pk3;
        pak.message = pic;
        pak.sv_entnum = id;
-       
+
        pak.chain = mv_pk3list;
        mv_pk3list = pak;
-       
+
        if(pk3 != "")
        {
                localcmd(strcat("\ncurl --pak ", pk3, "; wait; cl_cmd mv_download ", ftos(id), "\n"));
@@ -367,10 +367,10 @@ void MapVote_Init()
                mv_maps_mask = ReadByte();
        else
                mv_maps_mask = ReadShort();
-       
+
        // 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)
        {
                mv_votes[i] = 0;
@@ -380,7 +380,7 @@ void MapVote_Init()
                        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));
@@ -470,7 +470,7 @@ void MapVote_UpdateMask()
 
        // remove votes that no longer apply
        for(i = 0, power = 1; i < mv_num_maps; ++i, power *= 2)
-               if not(mv_maps_mask & power)
+               if (!(mv_maps_mask & power))
                        mv_votes[i] = -1;
 
        mv_top2_time = time;
index 926e11399d39d370321183122dc2aff49e3fd498..61e527cf1fbc69ade54b71368eb0e0c6fa563ab7 100644 (file)
@@ -111,7 +111,7 @@ entity GetTeam(float Team, float add)
        num = (Team == NUM_SPECTATOR) ? 16 : Team;
        if(teamslots[num])
                return teamslots[num];
-       if not(add)
+       if (!add)
                return world;
        tm = spawn();
        tm.team = Team;
@@ -302,18 +302,18 @@ var string _drawpic_picpath;
                _drawpic_picpath = string_null;\
        } while(0)
 
-void drawpic_aspect_skin_expanding(vector position, string pic, vector scale, vector rgb, float theAlpha, float flag, float fadelerp)
+void drawpic_aspect_skin_expanding(vector position, string pic, vector theScale, vector rgb, float theAlpha, float flag, float fadelerp)
 {
        float sz;
        sz = expandingbox_sizefactor_from_fadelerp(fadelerp);
 
-       drawpic_aspect_skin(position + expandingbox_resize_centered_box_offset(sz, scale, 1), pic, scale * sz, rgb, theAlpha * (1 - fadelerp), flag);
+       drawpic_aspect_skin(position + expandingbox_resize_centered_box_offset(sz, theScale, 1), pic, theScale * sz, rgb, theAlpha * (1 - fadelerp), flag);
 }
 
-void drawpic_aspect_skin_expanding_two(vector position, string pic, vector scale, vector rgb, float theAlpha, float flag, float fadelerp)
+void drawpic_aspect_skin_expanding_two(vector position, string pic, vector theScale, vector rgb, float theAlpha, float flag, float fadelerp)
 {
-       drawpic_aspect_skin_expanding(position, pic, scale, rgb, theAlpha, flag, fadelerp);
-       drawpic_skin(position, pic, scale, rgb, theAlpha * fadelerp, flag);
+       drawpic_aspect_skin_expanding(position, pic, theScale, rgb, theAlpha, flag, fadelerp);
+       drawpic_skin(position, pic, theScale, rgb, theAlpha * fadelerp, flag);
 }
 #define SET_POS_AND_SZ_Y_ASPECT(allow_colors)\
        float textaspect, oldsz;\
@@ -341,14 +341,14 @@ void drawcolorcodedstring_aspect(vector pos, string text, vector sz, float theAl
 }
 
 vector drawfontscale;
-void drawstring_expanding(vector position, string text, vector scale, vector rgb, float theAlpha, float flag, float fadelerp)
+void drawstring_expanding(vector position, string text, vector theScale, vector rgb, float theAlpha, float flag, float fadelerp)
 {
        float sz;
        sz = expandingbox_sizefactor_from_fadelerp(fadelerp);
 
        drawfontscale = sz * '1 1 0';
        dummyfunction(0, 0, 0, 0, 0, 0, 0, 0);
-       drawstring(position + expandingbox_resize_centered_box_offset(sz, scale, stringwidth(text, FALSE, scale * (sz / drawfontscale_x)) / (scale_x * sz)), text, scale * (sz / drawfontscale_x), rgb, theAlpha * (1 - fadelerp), flag);
+       drawstring(position + expandingbox_resize_centered_box_offset(sz, theScale, stringwidth(text, FALSE, theScale * (sz / drawfontscale_x)) / (theScale_x * sz)), text, theScale * (sz / drawfontscale_x), rgb, theAlpha * (1 - fadelerp), flag);
        // width parameter:
        //    (scale_x * sz / drawfontscale_x) * drawfontscale_x * SIZE1 / (scale_x * sz)
        //    SIZE1
@@ -361,14 +361,14 @@ void drawstring_aspect_expanding(vector pos, string text, vector sz, vector colo
        drawstring_expanding(pos, text, '1 1 0' * sz_y, color, theAlpha, drawflag, fadelerp);
 }
 
-void drawcolorcodedstring_expanding(vector position, string text, vector scale, float theAlpha, float flag, float fadelerp)
+void drawcolorcodedstring_expanding(vector position, string text, vector theScale, float theAlpha, float flag, float fadelerp)
 {
        float sz;
        sz = expandingbox_sizefactor_from_fadelerp(fadelerp);
 
        drawfontscale = sz * '1 1 0';
        dummyfunction(0, 0, 0, 0, 0, 0, 0, 0);
-       drawcolorcodedstring(position + expandingbox_resize_centered_box_offset(sz, scale, stringwidth(text, TRUE, scale * (sz / drawfontscale_x)) / (scale_x * sz)), text, scale * (sz / drawfontscale_x), theAlpha * (1 - fadelerp), flag);
+       drawcolorcodedstring(position + expandingbox_resize_centered_box_offset(sz, theScale, stringwidth(text, TRUE, theScale * (sz / drawfontscale_x)) / (theScale_x * sz)), text, theScale * (sz / drawfontscale_x), theAlpha * (1 - fadelerp), flag);
        drawfontscale = '1 1 0';
 }
 
@@ -385,7 +385,7 @@ float PolyDrawModelSurface(entity e, float i_s)
        vector tri;
        string tex;
        tex = getsurfacetexture(e, i_s);
-       if not(tex)
+       if (!tex)
                return 0; // this is beyond the last one
        n_t = getsurfacenumtriangles(e, i_s);
        for(i_t = 0; i_t < n_t; ++i_t)
@@ -573,14 +573,25 @@ vector getplayerorigin(float pl)
        return GETPLAYERORIGIN_ERROR;
 }
 
+float getplayeralpha(float pl)
+{
+       entity e;
+
+       e = CSQCModel_server2csqc(pl + 1);
+       if(e)
+               return e.alpha;
+
+       return 1;
+}
+
 float getplayerisdead(float pl)
 {
        entity e;
-       
+
        e = CSQCModel_server2csqc(pl + 1);
        if(e)
                return e.csqcmodel_isdead;
-       
+
        return FALSE;
 }
 
@@ -601,7 +612,7 @@ void URI_Get_Callback(float id, float status, string data)
        }
        else
        {
-               print(sprintf("Received HTTP request data for an invalid id %d.\n", id));
+               printf("Received HTTP request data for an invalid id %d.\n", id);
        }
 }
 
index 0622aafe31903e567870fc064d63fb8eb6256fe8..402e44cac83210d5a10485cfbf47845f9bbde998 100644 (file)
@@ -128,7 +128,7 @@ float _Movetype_TestEntityPosition(vector ofs) // SV_TestEntityPosition
        vector org;
        float cont;
        org = self.move_origin + ofs;
-       
+
        cont = self.dphitcontentsmask;
        self.dphitcontentsmask = DPCONTENTS_SOLID;
        tracebox(self.move_origin, self.mins, self.maxs, self.move_origin, MOVE_NOMONSTERS, self);
@@ -160,10 +160,10 @@ float _Movetype_UnstickEntity() // SV_UnstickEntity
                if(!_Movetype_TestEntityPosition('0 0 -1' * i)) goto success;
                if(!_Movetype_TestEntityPosition('0 0 1' * i)) goto success;
        }
-       dprint(sprintf(_("Can't unstick an entity (edict: %d, classname: %s, origin: %s)\n"), num_for_edict(self), self.classname, vtos(self.move_origin)));
+       dprintf(_("Can't unstick an entity (edict: %d, classname: %s, origin: %s)\n"), num_for_edict(self), self.classname, vtos(self.move_origin));
        return FALSE;
 :success
-       dprint(sprintf(_("Sucessfully unstuck an entity (edict: %d, classname: %s, origin: %s)\n"), num_for_edict(self), self.classname, vtos(self.move_origin)));
+       dprintf(_("Sucessfully unstuck an entity (edict: %d, classname: %s, origin: %s)\n"), num_for_edict(self), self.classname, vtos(self.move_origin));
        _Movetype_LinkEdict(TRUE);
        return TRUE;
 }
@@ -264,7 +264,7 @@ void _Movetype_Physics_Toss(float dt) // SV_Physics_Toss
                _Movetype_PushEntity(move, TRUE);
                if(wasfreed(self))
                        return;
-       
+
                if(trace_startsolid)
                {
                        _Movetype_UnstickEntity();
index 00343a432d30d431f8a9f7de4a2acd274b507680..8751cc0c5535c107d2e4de8b43d2f033c232e408 100644 (file)
@@ -225,64 +225,6 @@ void Ent_RainOrSnow()
                self.draw = Draw_Snow;
 }
 
-entity zcurve;
-void zcurveparticles(float effectnum, vector start, vector end, float end_dz, float speed, float depth)
-{
-       // end_dz:
-       //   IF IT WERE A STRAIGHT LINE, it'd end end_dz above end
-
-       vector mid;
-       mid = (start + end) * 0.5;
-
-       end_dz *= 0.25;
-       mid_z += end_dz;
-
-       --depth;
-       if(depth < 0 || normalize(mid - start) * normalize(end - start) > 0.999999)
-       // TODO make this a variable threshold
-       // currently: 0.081 degrees
-       // 0.99999 would be 0.256 degrees and is visible
-       {
-               zcurve.velocity = speed * normalize(end - start);
-               trailparticles(zcurve, effectnum, start, end);
-       }
-       else
-       {
-               zcurveparticles(effectnum, start, mid, end_dz, speed, depth);
-               zcurveparticles(effectnum, mid, end, end_dz, speed, depth);
-       }
-}
-
-void Net_ReadZCurveParticles()
-{
-       vector start, end;
-       float end_dz;
-       float effectnum, speed;
-
-       if(!zcurve)
-       {
-               zcurve = spawn();
-               zcurve.classname = "zcurve";
-       }
-
-       effectnum = ReadShort();
-
-       start_x = ReadCoord();
-       start_y = ReadCoord();
-       start_z = ReadCoord();
-
-       do
-       {
-               end_x = ReadCoord();
-               end_y = ReadCoord();
-               end_z = ReadCoord();
-               end_dz = ReadCoord();
-               speed = ReadShort();
-               zcurveparticles(effectnum, start, end, end_dz, 16 * (speed & 0x7FFF), 5); // at most 32 segments
-       }
-       while(!(speed & 0x8000));
-}
-
 void Net_ReadNexgunBeamParticle()
 {
        vector shotorg, endpos;
@@ -290,9 +232,9 @@ void Net_ReadNexgunBeamParticle()
        shotorg_x = ReadCoord(); shotorg_y = ReadCoord(); shotorg_z = ReadCoord();
        endpos_x = ReadCoord(); endpos_y = ReadCoord(); endpos_z = ReadCoord();
        charge = ReadByte() / 255.0;
-       
+
        pointparticles(particleeffectnum("nex_muzzleflash"), shotorg, normalize(endpos - shotorg) * 1000, 1);
-       
+
        //draw either the old v2.3 beam or the new beam
        charge = sqrt(charge); // divide evenly among trail spacing and alpha
        particles_alphamin = particles_alphamax = particles_fade = charge;
index 7784fc1f693fe2bb54674220bb47c4ace5f57162..ad5e23aa88335e382a221201828870ad848af471 100644 (file)
@@ -84,8 +84,8 @@ void skel_set_boneabs(float s, float bone, vector absorg)
 
        /*
        vector neworg = skel_get_boneabs(s, bone);
-       print(sprintf("ANG: want: %v, got: %v\n", absang, fixedvectoangles2(v_forward, v_up)));
-       print(sprintf("ORG: want: %v, got: %v\n", absorg, neworg));
+       printf("ANG: want: %v, got: %v\n", absang, fixedvectoangles2(v_forward, v_up));
+       printf("ORG: want: %v, got: %v\n", absorg, neworg);
        */
 }
 
@@ -150,8 +150,8 @@ void skeleton_from_frames(entity e, float is_dead)
                        e.lerpfrac3 = 0;
                        e.lerpfrac4 = savelerpfrac4 * 2;
                }
-               //print(sprintf("Run: bone %d to %d, type %d\n", firstbone + 1, bone, bonetype));
-               //print(sprintf("frame %d %d %d %d lerpfrac * %d %d %d\n", e.frame, e.frame2, e.frame3, e.frame4, e.lerpfrac, e.lerpfrac3, e.lerpfrac4));
+               //printf("Run: bone %d to %d, type %d\n", firstbone + 1, bone, bonetype);
+               //printf("frame %d %d %d %d lerpfrac * %d %d %d\n", e.frame, e.frame2, e.frame3, e.frame4, e.lerpfrac, e.lerpfrac3, e.lerpfrac4);
                skel_build(s, e, m, 0, firstbone + 1, bone);
        }
        e.lerpfrac = savelerpfrac;
index 114f0a5b5c77fdd666db5ae4953b653fa40302e5..fa61033f653b48f75947c6b95ea7a2e062ae8f0b 100644 (file)
@@ -121,5 +121,3 @@ tturrets.qc
 
 player_skeleton.qc
 ../common/animdecide.qc
-
-../common/if-this-file-errors-scroll-up-and-fix-the-warnings.fteqccfail
index b86c234bdbba9062e6b121cb745efc96050a6351..52f6e2324b5ecd578a15b1556e9ce90279fefc45 100644 (file)
@@ -111,7 +111,7 @@ void Projectile_Draw()
                        case PROJECTILE_NADE_PINK:
                        case PROJECTILE_NADE_BURN:
                        case PROJECTILE_NADE:
-                               rot = self.avelocity; 
+                               rot = self.avelocity;
                                break;
                        case PROJECTILE_HOOKBOMB:
                                rot = '1000 0 0'; // forward
@@ -167,10 +167,7 @@ void Projectile_Draw()
 
        switch(self.cnt)
        {
-               case PROJECTILE_BULLET_GLOWING:
-               case PROJECTILE_BULLET_GLOWING_TRACER:
-                       adddynamiclight(self.origin, 50 * a, '1 1 0');
-                       break;
+               // Possibly add dlights here.
                default:
                        break;
        }
@@ -292,9 +289,6 @@ void Ent_Projectile()
                {
                        case PROJECTILE_ELECTRO: setmodel(self, "models/ebomb.mdl");self.traileffect = particleeffectnum("TR_NEXUIZPLASMA"); break;
                        case PROJECTILE_ROCKET: setmodel(self, "models/rocket.md3");self.traileffect = particleeffectnum("TR_ROCKET"); self.scale = 2; break;
-                       case PROJECTILE_BULLET: setmodel(self, "models/tracer.mdl");self.traileffect = particleeffectnum("tr_bullet"); break;
-                       case PROJECTILE_BULLET_GLOWING: setmodel(self, "models/tracer.mdl");self.traileffect = particleeffectnum("tr_rifle_weak"); break;
-                       case PROJECTILE_BULLET_GLOWING_TRACER: setmodel(self, "models/tracer.mdl");self.traileffect = particleeffectnum("tr_rifle"); break;
                        case PROJECTILE_CRYLINK: setmodel(self, "models/plasmatrail.mdl");self.traileffect = particleeffectnum("TR_CRYLINKPLASMA"); break;
                        case PROJECTILE_CRYLINK_BOUNCING: setmodel(self, "models/plasmatrail.mdl");self.traileffect = particleeffectnum("TR_CRYLINKPLASMA"); break;
                        case PROJECTILE_ELECTRO_BEAM: setmodel(self, "models/elaser.mdl");self.traileffect = particleeffectnum("TR_NEXUIZPLASMA"); break;
@@ -324,7 +318,7 @@ void Ent_Projectile()
 
                        case PROJECTILE_BUMBLE_GUN: setmodel(self, "models/elaser.mdl");self.traileffect = particleeffectnum("TR_NEXUIZPLASMA"); break;
                        case PROJECTILE_BUMBLE_BEAM: setmodel(self, "models/elaser.mdl");self.traileffect = particleeffectnum("TR_NEXUIZPLASMA"); break;
-                       
+
                        case PROJECTILE_NADE_RED: setmodel(self, "models/weapons/v_ok_grenade.md3");self.traileffect = particleeffectnum("nade_red"); break;
                        case PROJECTILE_NADE_RED_BURN: setmodel(self, "models/weapons/v_ok_grenade.md3");self.traileffect = particleeffectnum("nade_red_burn"); break;
                        case PROJECTILE_NADE_BLUE: setmodel(self, "models/weapons/v_ok_grenade.md3");self.traileffect = particleeffectnum("nade_blue"); break;
@@ -467,7 +461,7 @@ void Ent_Projectile()
                                break;
             case PROJECTILE_WAKIROCKET:
                 loopsound(self, CH_SHOTS_SINGLE, "weapons/tag_rocket_fly.wav", VOL_BASE, ATTEN_NORM);
-                               break;            
+                               break;
             /*
             case PROJECTILE_WAKICANNON:
                                break;
@@ -523,7 +517,7 @@ void Projectile_Precache()
        precache_model("models/rocket.md3");
        precache_model("models/tagrocket.md3");
        precache_model("models/tracer.mdl");
-       
+
        precache_model("models/weapons/v_ok_grenade.md3");
 
        precache_sound("weapons/electro_fly.wav");
index 339c8b29bc62fdf7dcb9bb4087c35ccee6a07cfc..8a7d3fd49fd8976d83dc2651cfc0ad5bce69e749 100644 (file)
@@ -375,7 +375,7 @@ void Cmd_HUD_SetFields(float argc)
                        pattern = substring(str, 0, slash);
                        str = substring(str, slash + 1, strlen(str) - (slash + 1));
 
-                       if not(isGametypeInFilter(gametype, teamplay, FALSE, pattern))
+                       if (!isGametypeInFilter(gametype, teamplay, FALSE, pattern))
                                continue;
                }
 
@@ -409,8 +409,8 @@ void Cmd_HUD_SetFields(float argc)
                        }
                        else
                        {
-                               if not(nocomplain)
-                                       print(sprintf("^1Error:^7 Unknown score field: '%s'\n", str));
+                               if (!nocomplain)
+                                       printf("^1Error:^7 Unknown score field: '%s'\n", str);
                                continue;
                        }
 :found
@@ -481,7 +481,7 @@ void Cmd_HUD_SetFields(float argc)
                        hud_size[hud_num_fields] = stringwidth(hud_title[hud_num_fields], FALSE, hud_fontsize);
                        hud_field[hud_num_fields] = ps_secondary;
                        ++hud_num_fields;
-                       print(sprintf("fixed missing field '%s'\n", scores_label[ps_secondary]));
+                       printf("fixed missing field '%s'\n", scores_label[ps_secondary]);
                }
                if(!have_primary)
                {
@@ -490,7 +490,7 @@ void Cmd_HUD_SetFields(float argc)
                        hud_size[hud_num_fields] = stringwidth(hud_title[hud_num_fields], FALSE, hud_fontsize);
                        hud_field[hud_num_fields] = ps_primary;
                        ++hud_num_fields;
-                       print(sprintf("fixed missing field '%s'\n", scores_label[ps_primary]));
+                       printf("fixed missing field '%s'\n", scores_label[ps_primary]);
                }
        }
 
@@ -526,7 +526,7 @@ string HUD_GetField(entity pl, float field)
        switch(field)
        {
                case SP_PING:
-                       if not(pl.gotscores)
+                       if (!pl.gotscores)
                                return "\xEE\x82\x8D\xEE\x82\x8D\xEE\x82\x8D"; // >>> sign
                        //str = getplayerkeyvalue(pl.sv_entnum, "ping");
                        f = pl.ping;
@@ -537,7 +537,7 @@ string HUD_GetField(entity pl, float field)
                        return ftos(f);
 
                case SP_PL:
-                       if not(pl.gotscores)
+                       if (!pl.gotscores)
                                return _("N/A");
                        f = pl.ping_packetloss;
                        tmp = pl.ping_movementloss;
@@ -586,7 +586,7 @@ string HUD_GetField(entity pl, float field)
                        } else
                                str = sprintf("%.1f", num/denom);
                        return str;
-                       
+
                case SP_SUM:
                        f = pl.(scores[SP_KILLS]);
                        f -= pl.(scores[SP_DEATHS]);
@@ -1024,7 +1024,7 @@ vector HUD_DrawScoreboardAccuracyStats(vector pos, vector rgb, vector bg_size)
        for(i = WEP_FIRST; i <= WEP_LAST; ++i)
        {
                self = get_weaponinfo(i);
-               if not(self.weapon)
+               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
                        continue;
@@ -1081,7 +1081,7 @@ vector HUD_DrawKeyValue(vector pos, string key, string value) {
        drawstring(pos, value, hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL);
        pos_x = px;
        pos_y+= hud_fontsize_y;
-       
+
        return pos;
 }
 
@@ -1098,14 +1098,14 @@ vector HUD_DrawMapStats(vector pos, vector rgb, vector bg_size) {
        rows = (stat_secrets_total ? 1 : 0);
 
        // if no rows, return
-       if not(rows)
+       if (!rows)
                return pos;
 
        //  draw table header
        drawstring(pos, _("Map stats:"), hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL);
        pos_y += 1.25 * hud_fontsize_y + autocvar_scoreboard_border_thickness;
-       
-       // draw table   
+
+       // draw table
        vector tmp = '0 0 0';
        tmp_x = sbwidth;
        tmp_y = hud_fontsize_y * rows;
@@ -1119,7 +1119,7 @@ vector HUD_DrawMapStats(vector pos, vector rgb, vector bg_size) {
        // draw secrets
        val = sprintf("%d/%d", stat_secrets_found, stat_secrets_total);
        pos = HUD_DrawKeyValue(pos, _("Secrets found:"), val);
-       
+
        // update position
        pos_y += 1.25 * hud_fontsize_y;
        return pos;
@@ -1207,7 +1207,7 @@ void HUD_DrawScoreboard()
                        scoreboard_fade_alpha = 0;
        }
 
-       if not(scoreboard_fade_alpha)
+       if (!scoreboard_fade_alpha)
                return;
 
        HUD_UpdatePlayerTeams();
@@ -1316,7 +1316,7 @@ void HUD_DrawScoreboard()
                        pos = HUD_DrawScoreboardAccuracyStats(pos, rgb, bg_size);
        }
 
-               
+
        if(teamplay)
                pos = HUD_DrawMapStats(pos, Team_ColorRGB(myteam), bg_size);
        else
@@ -1364,14 +1364,14 @@ void HUD_DrawScoreboard()
                                str = strcat(str, _(" or"));
                        if(teamplay)
                        {
-                               str = strcat(str, sprintf(_(" until ^3%s %s^7"), ScoreString(teamscores_flags[ts_primary], fl), 
+                               str = strcat(str, sprintf(_(" until ^3%s %s^7"), ScoreString(teamscores_flags[ts_primary], fl),
                                        (teamscores_label[ts_primary] == "score")   ? CTX(_("SCO^points")) :
                                        (teamscores_label[ts_primary] == "fastest") ? CTX(_("SCO^is beaten")) :
                                        TranslateScoresLabel(teamscores_label[ts_primary])));
                        }
                        else
                        {
-                               str = strcat(str, sprintf(_(" until ^3%s %s^7"), ScoreString(scores_flags[ps_primary], fl), 
+                               str = strcat(str, sprintf(_(" until ^3%s %s^7"), ScoreString(scores_flags[ps_primary], fl),
                                        (scores_label[ps_primary] == "score")   ? CTX(_("SCO^points")) :
                                        (scores_label[ps_primary] == "fastest") ? CTX(_("SCO^is beaten")) :
                                        TranslateScoresLabel(scores_label[ps_primary])));
@@ -1383,14 +1383,14 @@ void HUD_DrawScoreboard()
                                str = strcat(str, _(" or"));
                        if(teamplay)
                        {
-                               str = strcat(str, sprintf(_(" until a lead of ^3%s %s^7"), ScoreString(teamscores_flags[ts_primary], ll), 
+                               str = strcat(str, sprintf(_(" until a lead of ^3%s %s^7"), ScoreString(teamscores_flags[ts_primary], ll),
                                        (teamscores_label[ts_primary] == "score")   ? CTX(_("SCO^points")) :
                                        (teamscores_label[ts_primary] == "fastest") ? CTX(_("SCO^is beaten")) :
                                        TranslateScoresLabel(teamscores_label[ts_primary])));
                        }
                        else
                        {
-                               str = strcat(str, sprintf(_(" until a lead of ^3%s %s^7"), ScoreString(scores_flags[ps_primary], ll), 
+                               str = strcat(str, sprintf(_(" until a lead of ^3%s %s^7"), ScoreString(scores_flags[ps_primary], ll),
                                        (scores_label[ps_primary] == "score")   ? CTX(_("SCO^points")) :
                                        (scores_label[ps_primary] == "fastest") ? CTX(_("SCO^is beaten")) :
                                        TranslateScoresLabel(scores_label[ps_primary])));
@@ -1410,7 +1410,7 @@ void HUD_DrawScoreboard()
                        // a negative number means we are awaiting respawn, time value is still the same
                        respawn_time *= -1; // remove mark now that we checked it
                        respawn_time = max(time, respawn_time); // don't show a negative value while the server is respawning the player (lag)
-                       
+
                        str = sprintf(_("^1Respawning in ^3%s^1..."),
                                (autocvar_scoreboard_respawntime_decimals ?
                                        count_seconds_decs(respawn_time - time, autocvar_scoreboard_respawntime_decimals)
index f20f143b0315497e797817c0533a55b8a8f8966a..413eaaf54714170958e354c59a6d5cf39c1bdffb 100644 (file)
@@ -13,13 +13,13 @@ void Draw_ShowNames(entity ent)
 {
        if(!autocvar_hud_shownames)
                return;
-       
+
 #ifdef COMPAT_XON050_ENGINE
        if((ent.sv_entnum == player_localentnum) || (ent.sv_entnum == spectatee_status)) // ent is me or person i'm spectating
 #else
        if(ent.sv_entnum == player_localentnum) // ent is me or person i'm spectating
 #endif
-               if not (autocvar_hud_shownames_self && autocvar_chase_active) 
+               if(!(autocvar_hud_shownames_self && autocvar_chase_active))
                        return;
 
        makevectors(view_angles);
@@ -27,7 +27,7 @@ void Draw_ShowNames(entity ent)
        if(ent.sameteam || (!ent.sameteam && autocvar_hud_shownames_enemies))
        {
                ent.origin_z += autocvar_hud_shownames_offset;
-       
+
                float hit;
                if(ent.sameteam && !autocvar_hud_shownames_crosshairdistance)
                {
@@ -45,9 +45,9 @@ void Draw_ShowNames(entity ent)
                // handle tag fading
                float overlap = FALSE, onscreen, crosshairdistance;
                vector o, eo;
-               
+
                o = project_3d_to_2d(ent.origin);
-               
+
                if(autocvar_hud_shownames_antioverlap)
                {
                        // fade tag out if another tag that is closer to you overlaps
@@ -57,7 +57,7 @@ void Draw_ShowNames(entity ent)
                                if(e == ent)
                                        continue;
                                eo = project_3d_to_2d(e.origin);
-                               if not(eo_z < 0 || eo_x < 0 || eo_y < 0 || eo_x > vid_conwidth || eo_y > vid_conheight)
+                               if (!(eo_z < 0 || eo_x < 0 || eo_y < 0 || eo_x > vid_conwidth || eo_y > vid_conheight))
                                {
                                        eo_z = 0;
                                        if(vlen((eX * o_x + eY * o_y) - eo) < autocvar_hud_shownames_antioverlap_distance && vlen(ent.origin - view_origin) > vlen(e.origin - view_origin))
@@ -71,38 +71,42 @@ void Draw_ShowNames(entity ent)
 
                onscreen = (o_z >= 0 && o_x >= 0 && o_y >= 0 && o_x <= vid_conwidth && o_y <= vid_conheight);
                crosshairdistance = sqrt( pow(o_x - vid_conwidth/2, 2) + pow(o_y - vid_conheight/2, 2) );
-               
+
                if(autocvar_hud_shownames_crosshairdistance)
                {
                        if(autocvar_hud_shownames_crosshairdistance > crosshairdistance)
                                ent.pointtime = time;
-                               
-                       if not(ent.pointtime + autocvar_hud_shownames_crosshairdistance_time > time)
+
+                       if (!(ent.pointtime + autocvar_hud_shownames_crosshairdistance_time > time))
                                overlap = TRUE;
                        else
                                overlap = (autocvar_hud_shownames_crosshairdistance_antioverlap ? overlap : FALSE); // override what antioverlap says unless allowed by cvar.
                }
-               
+
                if(!ent.fadedelay)
                        ent.fadedelay = time + SHOWNAMES_FADEDELAY;
 
                if(!ent.sameteam && (!onscreen || !hit)) // out of view, fade out
-               { 
-                       ent.alpha = max(0, ent.alpha - SHOWNAMES_FADESPEED * frametime); 
+               {
+                       ent.alpha = max(0, ent.alpha - SHOWNAMES_FADESPEED * frametime);
                        ent.fadedelay = 0; // reset fade in delay, enemy has left the view
                }
                else if(ent.csqcmodel_isdead) // dead player, fade out slowly
-                       ent.alpha = max(0, ent.alpha - SHOWNAMES_FADESPEED * 0.25 * frametime); 
+                       ent.alpha = max(0, ent.alpha - SHOWNAMES_FADESPEED * 0.25 * frametime);
                else if(overlap) // tag overlap detected, fade out
-                       ent.alpha = max(0, ent.alpha - SHOWNAMES_FADESPEED * frametime); 
+                       ent.alpha = max(0, ent.alpha - SHOWNAMES_FADESPEED * frametime);
                else if(ent.sameteam) // fade in for team mates
                        ent.alpha = min(1, ent.alpha + SHOWNAMES_FADESPEED * frametime);
                else if(time > ent.fadedelay) // fade in for enemies
                        ent.alpha = min(1, ent.alpha + SHOWNAMES_FADESPEED * frametime);
 
-               if(!ent.alpha)
+               // multiply by player alpha
+               if(!ent.sameteam || (ent.sv_entnum == player_localentnum))
+                       ent.alpha *= getplayeralpha(ent.sv_entnum-1);
+
+               if(ent.alpha < ALPHA_MIN_VISIBLE)
                        return;
-               
+
                float dist;
                dist = vlen(ent.origin - view_origin);
 
@@ -218,7 +222,7 @@ void Draw_ShowNames_All()
                setorigin(e, getplayerorigin(i));
                if(e.origin == GETPLAYERORIGIN_ERROR)
                        continue;
-                       
+
                e.csqcmodel_isdead = getplayerisdead(i);
 
                Draw_ShowNames(e);
index f30e77af424007e8aebd4d8805c1fea2e19359f8..fa116dc731625ccc8e99afba627bd59049681004 100644 (file)
@@ -91,7 +91,7 @@ void Net_TargetMusic()
                sound(e, CH_BGM_SINGLE, e.noise, 0, ATTEN_NONE);
                if(getsoundtime(e, CH_BGM_SINGLE) < 0)
                {
-                       print(sprintf(_("Cannot initialize sound %s\n"), e.noise));
+                       printf(_("Cannot initialize sound %s\n"), e.noise);
                        strunzone(e.noise);
                        e.noise = string_null;
                }
@@ -180,7 +180,7 @@ void Ent_ReadTriggerMusic()
                        sound(self, CH_BGM_SINGLE, self.noise, 0, ATTEN_NONE);
                        if(getsoundtime(self, CH_BGM_SINGLE) < 0)
                        {
-                               print(sprintf(_("Cannot initialize sound %s\n"), self.noise));
+                               printf(_("Cannot initialize sound %s\n"), self.noise);
                                strunzone(self.noise);
                                self.noise = string_null;
                        }
index 161bfa385a1b3f1c32690429fbdecbdb231d93e1..ba640068ef82e7db0495d4b23d0a06850da215de 100644 (file)
@@ -14,7 +14,7 @@ void turrets_precache()
 }
 
 void turret_precache(float _tid)
-{    
+{
     if (!turret_is_precache[TID_COMMON])
     {
         precache_sound ("weapons/rocket_impact.wav");
@@ -38,13 +38,13 @@ void turret_precache(float _tid)
     {
         case TID_EWHEEL:
             precache_model ("models/turrets/ewheel-base2.md3");
-            precache_model ("models/turrets/ewheel-gun1.md3");            
+            precache_model ("models/turrets/ewheel-gun1.md3");
             break;
         case TID_FLAC:
             precache_model ("models/turrets/flac.md3");
             break;
         case TID_FUSION:
-            precache_model ("models/turrets/reactor.md3");    
+            precache_model ("models/turrets/reactor.md3");
             break;
         case TID_HELLION:
             precache_model ("models/turrets/hellion.md3");
@@ -79,7 +79,7 @@ void turret_precache(float _tid)
             precache_model ("models/turrets/walker_body.md3");
             precache_sound ("weapons/uzi_fire.wav");
             break;
-    }    
+    }
     turret_is_precache[_tid] = TRUE;
 }
 
@@ -148,19 +148,19 @@ void turret_tid2info(float _tid)
             tid2info_min = '-70 -70 0';
             tid2info_max = '70 70 95';
             break;
-    }    
+    }
 }
 
 void turret_remove()
-{    
+{
     remove(self.tur_head);
     //remove(self.enemy);
-    self.tur_head = world;    
+    self.tur_head = world;
 }
 
 .vector glowmod;
 void turret_changeteam()
-{      
+{
        switch(self.team - 1)
        {
         case NUM_TEAM_1: // Red
@@ -183,46 +183,46 @@ void turret_changeteam()
             self.teamradar_color = '1 0 1';
             break;
        }
-       
+
        if(self.team)
         self.colormap = 1024 + (self.team - 1) * 17;
-       
+
        self.tur_head.colormap = self.colormap;
        self.tur_head.glowmod = self.glowmod;
-       
+
 }
 
 void turret_head_draw()
-{    
+{
     self.drawmask = MASK_NORMAL;
 }
 
 void turret_draw()
-{        
+{
     float dt;
 
     dt = time - self.move_time;
     self.move_time = time;
     if(dt <= 0)
         return;
-    
+
     self.tur_head.angles += dt * self.tur_head.move_avelocity;
 
     if (self.health < 127)
     {
         dt = random();
-        
+
         if(dt < 0.03)
-            te_spark(self.origin + '0 0 40', randomvec() * 256 + '0 0 256', 16);        
+            te_spark(self.origin + '0 0 40', randomvec() * 256 + '0 0 256', 16);
     }
-    
+
     if(self.health < 85)
     if(dt < 0.01)
         pointparticles(particleeffectnum("smoke_large"), (self.origin + (randomvec() * 80)), '0 0 0', 1);
-    
+
     if(self.health < 32)
     if(dt < 0.015)
-        pointparticles(particleeffectnum("smoke_small"), (self.origin + (randomvec() * 80)), '0 0 0', 1);        
+        pointparticles(particleeffectnum("smoke_small"), (self.origin + (randomvec() * 80)), '0 0 0', 1);
 
 }
 
@@ -230,33 +230,33 @@ void turret_draw2d()
 {
        if(self.netname == "")
            return;
-       
+
        if(!autocvar_g_waypointsprite_turrets)
                return;
-               
+
     if(autocvar_cl_hidewaypoints)
-        return; 
+        return;
 
        float dist = vlen(self.origin - view_origin);
-    float t = (GetPlayerColor(player_localnum) + 1);   
+    float t = (GetPlayerColor(player_localnum) + 1);
 
        vector o;
        string txt;
-       
+
        if(autocvar_cl_vehicles_hud_tactical)
        if(dist < 10240 && t != self.team)
        {
         // TODO: Vehicle tactical hud
         o = project_3d_to_2d(self.origin + '0 0 32');
-        if(o_z < 0 
-        || o_x < (vid_conwidth * waypointsprite_edgeoffset_left) 
-        || o_y < (vid_conheight * waypointsprite_edgeoffset_top) 
-        || o_x > (vid_conwidth - (vid_conwidth * waypointsprite_edgeoffset_right))  
+        if(o_z < 0
+        || o_x < (vid_conwidth * waypointsprite_edgeoffset_left)
+        || o_y < (vid_conheight * waypointsprite_edgeoffset_top)
+        || o_x > (vid_conwidth - (vid_conwidth * waypointsprite_edgeoffset_right))
         || o_y > (vid_conheight - (vid_conheight * waypointsprite_edgeoffset_bottom)))
             return; // Dont draw wp's for turrets out of view
         o_z = 0;
         if(hud != HUD_NORMAL)
-        {        
+        {
             switch(hud)
             {
                 case HUD_SPIDERBOT:
@@ -267,14 +267,14 @@ void turret_draw2d()
                         txt = "gfx/vehicles/vth-mover.tga";
                     else
                         txt = "gfx/vehicles/vth-stationary.tga";
-                        
+
                     vector pz = drawgetimagesize(txt) * 0.25;
                     drawpic(o - pz * 0.5, txt, pz , '1 1 1', 0.75, DRAWFLAG_NORMAL);
                     break;
             }
         }
        }
-    
+
        if(dist > self.maxdistance)
         return;
 
@@ -282,7 +282,7 @@ void turret_draw2d()
        float a = self.alpha * autocvar_hud_panel_fg_alpha;
        vector rgb = spritelookupcolor(spriteimage, self.teamradar_color);
 
-       
+
        if(self.maxdistance > waypointsprite_normdistance)
                a *= pow(bound(0, (self.maxdistance - dist) / (self.maxdistance - waypointsprite_normdistance), 1), waypointsprite_distancealphaexponent);
        else if(self.maxdistance > 0)
@@ -291,7 +291,7 @@ void turret_draw2d()
        if(rgb == '0 0 0')
        {
                self.teamradar_color = '1 0 1';
-               print(sprintf("WARNING: sprite of name %s has no color, using pink so you notice it\n", spriteimage)); 
+               printf("WARNING: sprite of name %s has no color, using pink so you notice it\n", spriteimage);
        }
 
        txt = self.netname;
@@ -299,18 +299,18 @@ void turret_draw2d()
                txt = _("Spam");
        else
                txt = spritelookuptext(spriteimage);
-       
+
        if(time - floor(time) > 0.5 && t == self.team)
        {
                if(self.helpme && time < self.helpme)
                {
                    a *= SPRITE_HELPME_BLINK;
                    txt = sprintf(_("%s under attack!"), txt);
-               }                       
+               }
                else
                        a *= spritelookupblinkvalue(spriteimage);
        }
-       
+
        if(autocvar_g_waypointsprite_uppercase)
                txt = strtoupper(txt);
 
@@ -322,23 +322,23 @@ void turret_draw2d()
 
        if(a <= 0)
            return;
-               
+
        rgb = fixrgbexcess(rgb);
 
        o = project_3d_to_2d(self.origin + '0 0 64');
-       if(o_z < 0 
-       || o_x < (vid_conwidth * waypointsprite_edgeoffset_left) 
-       || o_y < (vid_conheight * waypointsprite_edgeoffset_top) 
-       || o_x > (vid_conwidth - (vid_conwidth * waypointsprite_edgeoffset_right))  
+       if(o_z < 0
+       || o_x < (vid_conwidth * waypointsprite_edgeoffset_left)
+       || o_y < (vid_conheight * waypointsprite_edgeoffset_top)
+       || o_x > (vid_conwidth - (vid_conwidth * waypointsprite_edgeoffset_right))
        || o_y > (vid_conheight - (vid_conheight * waypointsprite_edgeoffset_bottom)))
            return; // Dont draw wp's for turrets out of view
 
        o_z = 0;
 
        float edgedistance_min, crosshairdistance;
-               edgedistance_min = min((o_y - (vid_conheight * waypointsprite_edgeoffset_top)), 
+               edgedistance_min = min((o_y - (vid_conheight * waypointsprite_edgeoffset_top)),
        (o_x - (vid_conwidth * waypointsprite_edgeoffset_left)),
-       (vid_conwidth - (vid_conwidth * waypointsprite_edgeoffset_right)) - o_x, 
+       (vid_conwidth - (vid_conwidth * waypointsprite_edgeoffset_right)) - o_x,
        (vid_conheight - (vid_conheight * waypointsprite_edgeoffset_bottom)) - o_y);
 
        float vidscale = max(vid_conwidth / vid_width, vid_conheight / vid_height);
@@ -361,7 +361,7 @@ void turret_draw2d()
                t = t * (1 - (1 - waypointsprite_crosshairfadescale) * (1 - bound(0, crosshairdistance/waypointsprite_crosshairfadedistance, 1)));
        }
 
-       o = drawspritearrow(o, M_PI, rgb, a, SPRITE_ARROW_SCALE * t);       
+       o = drawspritearrow(o, M_PI, rgb, a, SPRITE_ARROW_SCALE * t);
     o = drawspritetext(o, M_PI, (SPRITE_HEALTHBAR_WIDTH + 2 * SPRITE_HEALTHBAR_BORDER) * t, rgb, a, waypointsprite_fontsize * '1 1 0', txt);
     drawhealthbar(
             o,
@@ -383,50 +383,50 @@ void turret_draw2d()
 }
 
 void turret_walker_draw()
-{        
+{
     float dt;
-            
+
     dt = time - self.move_time;
     self.move_time = time;
     if(dt <= 0)
         return;
-    
+
     fixedmakevectors(self.angles);
     movelib_groundalign4point(300, 100, 0.25, 45);
     setorigin(self, self.origin + self.velocity * dt);
     self.tur_head.angles += dt * self.tur_head.move_avelocity;
     self.angles_y = self.move_angles_y;
-    
+
     if (self.health < 127)
     if(random() < 0.15)
-        te_spark(self.origin + '0 0 40', randomvec() * 256 + '0 0 256', 16);    
+        te_spark(self.origin + '0 0 40', randomvec() * 256 + '0 0 256', 16);
 }
 
 void turret_ewheel_draw()
-{        
+{
     float dt;
-            
+
     dt = time - self.move_time;
     self.move_time = time;
     if(dt <= 0)
         return;
-    
-    fixedmakevectors(self.angles);    
+
+    fixedmakevectors(self.angles);
     setorigin(self, self.origin + self.velocity * dt);
     self.tur_head.angles += dt * self.tur_head.move_avelocity;
     self.angles_y = self.move_angles_y;
-    
+
     if (self.health < 127)
     if(random() < 0.05)
-        te_spark(self.origin + '0 0 40', randomvec() * 256 + '0 0 256', 16);    
+        te_spark(self.origin + '0 0 40', randomvec() * 256 + '0 0 256', 16);
 }
 
 void(entity e, entity tagentity, string tagname) setattachment = #443;
 void turret_construct()
-{    
+{
     if(self.tur_head == world)
         self.tur_head = spawn();
-    
+
     turret_tid2info(self.turret_type);
     self.netname = tid2info_name;
 
@@ -435,12 +435,12 @@ void turret_construct()
     setmodel(self.tur_head, tid2info_head);
     setsize(self, tid2info_min, tid2info_max);
     setsize(self.tur_head, '0 0 0', '0 0 0');
-    
+
     if(self.turret_type == TID_EWHEEL)
         setattachment(self.tur_head, self, "");
     else
         setattachment(self.tur_head, self, "tag_head");
-    
+
     self.tur_head.classname     = "turret_head";
     self.tur_head.owner         = self;
     self.tur_head.move_movetype = MOVETYPE_NOCLIP;
@@ -450,24 +450,24 @@ void turret_construct()
     self.solid                  = SOLID_BBOX;
     self.tur_head.solid         = SOLID_NOT;
     self.movetype               = MOVETYPE_NOCLIP;
-    self.tur_head.movetype      = MOVETYPE_NOCLIP;    
+    self.tur_head.movetype      = MOVETYPE_NOCLIP;
     self.draw                   = turret_draw;
     self.entremove              = turret_remove;
     self.drawmask               = MASK_NORMAL;
     self.tur_head.drawmask      = MASK_NORMAL;
-    self.anim_start_time        = 0;    
+    self.anim_start_time        = 0;
     self.draw2d = turret_draw2d;
     self.maxdistance = autocvar_g_waypointsprite_turrets_maxdist;
     self.teamradar_color = '1 0 0';
     self.alpha = 1;
-    
+
     if(self.turret_type == TID_EWHEEL || self.turret_type == TID_WALKER)
     {
         self.gravity            = 1;
         self.movetype           = MOVETYPE_BOUNCE;
         self.move_movetype      = MOVETYPE_BOUNCE;
-        self.move_origin        = self.origin;                
-        self.move_time          = time;        
+        self.move_origin        = self.origin;
+        self.move_time          = time;
         switch(self.turret_type)
         {
             case TID_EWHEEL:
@@ -476,8 +476,8 @@ void turret_construct()
             case TID_WALKER:
                 self.draw               = turret_walker_draw;
                 break;
-            
-        }        
+
+        }
     }
 }
 
@@ -486,9 +486,9 @@ void turret_gibboom();
 void turret_gib_draw()
 {
     Movetype_Physics_MatchTicrate(autocvar_cl_gibs_ticrate, autocvar_cl_gibs_sloppy);
-    
+
     self.drawmask = MASK_NORMAL;
-       
+
        if(self.cnt)
        {
            if(time >= self.nextthink)
@@ -501,14 +501,14 @@ void turret_gib_draw()
        {
         self.alpha = bound(0, self.nextthink - time, 1);
         if(self.alpha < ALPHA_MIN_VISIBLE)
-            remove(self);          
+            remove(self);
        }
 }
 
 void turret_gibboom()
 {
     float i;
-    
+
     sound (self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM);
     pointparticles(particleeffectnum("rocket_explode"), self.origin, '0 0 0', 1);
 
@@ -519,43 +519,43 @@ void turret_gibboom()
 entity turret_gibtoss(string _model, vector _from, vector _to, vector _cmod, float _explode)
 {
     entity gib;
-    
+
     traceline(_from, _to, MOVE_NOMONSTERS, world);
     if(trace_startsolid)
         return world;
-    
+
     gib = spawn();
     setorigin(gib, _from);
     setmodel(gib, _model);
     gib.colormod    = _cmod;
        gib.solid       = SOLID_CORPSE;
-    gib.draw        = turret_gib_draw;    
+    gib.draw        = turret_gib_draw;
     gib.cnt         = _explode;
     setsize(gib, '-1 -1 -1', '1 1 1');
     if(_explode)
     {
         gib.nextthink = time + 0.2 * (autocvar_cl_gibs_lifetime * (1 + prandom() * 0.15));
         gib.effects = EF_FLAME;
-    }        
+    }
     else
         gib.nextthink = time + autocvar_cl_gibs_lifetime * (1 + prandom() * 0.15);
-    
+
     gib.gravity         = 1;
        gib.move_movetype   = MOVETYPE_BOUNCE;
        gib.move_origin     = _from;
        setorigin(gib,        _from);
-       gib.move_velocity   = _to;      
+       gib.move_velocity   = _to;
        gib.move_avelocity  = prandomvec() * 32;
        gib.move_time       = time;
        gib.damageforcescale = 1;
        gib.classname = "turret_gib";
-       
+
        return gib;
 }
 
 void turret_die()
-{    
-    
+{
+
     sound (self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM);
     pointparticles(particleeffectnum("rocket_explode"), self.origin, '0 0 0', 1);
     turret_tid2info(self.turret_type);
@@ -569,9 +569,9 @@ void turret_die()
         else if (self.turret_type == TID_TESLA)
             turret_gibtoss(tid2info_base, self.origin + '0 0 18', '0 0 200', '-1 -1 -1', FALSE);
         else
-        {        
+        {
             if (random() > 0.5)
-            {            
+            {
                 turret_gibtoss("models/turrets/base-gib2.md3", self.origin + '0 0 8', '0 0 50' + randomvec() * 150, '0 0 0', FALSE);
                 turret_gibtoss("models/turrets/base-gib3.md3", self.origin + '0 0 8', '0 0 50' + randomvec() * 150, '0 0 0', FALSE);
                 turret_gibtoss("models/turrets/base-gib4.md3", self.origin + '0 0 8', '0 0 50' + randomvec() * 150, '0 0 0', FALSE);
@@ -585,11 +585,11 @@ void turret_die()
                 headgib.angles = headgib.move_angles = self.tur_head.angles;
                 headgib.avelocity = headgib.move_avelocity = self.tur_head.move_avelocity + randomvec() * 45;
                 headgib.avelocity_y = headgib.move_avelocity_y = headgib.move_avelocity_y * 5;
-                headgib.gravity = 0.5;        
+                headgib.gravity = 0.5;
             }
         }
     }
-    
+
     setmodel(self, "null");
     setmodel(self.tur_head, "null");
 }
@@ -600,63 +600,63 @@ void ent_turret()
     sf = ReadByte();
 
        if(sf & TNSF_SETUP)
-       {           
+       {
            self.turret_type = ReadByte();
-                   
+
            self.origin_x = ReadCoord();
            self.origin_y = ReadCoord();
            self.origin_z = ReadCoord();
            setorigin(self, self.origin);
-           
+
            self.angles_x = ReadAngle();
            self.angles_y = ReadAngle();
-           
+
            turret_precache(self.turret_type);
            turret_construct();
            self.colormap = 1024;
-           self.glowmod = '0 1 1'; 
+           self.glowmod = '0 1 1';
            self.tur_head.colormap = self.colormap;
            self.tur_head.glowmod = self.glowmod;
     }
-    
+
     if(sf & TNSF_ANG)
     {
         if(self.tur_head == world) // aparenly this can happpen before TNSF_SETUP. great.
             self.tur_head = spawn();
-            
+
         self.tur_head.move_angles_x = ReadShort();
         self.tur_head.move_angles_y = ReadShort();
         //self.tur_head.angles = self.angles + self.tur_head.move_angles;
         self.tur_head.angles = self.tur_head.move_angles;
     }
-    
+
     if(sf & TNSF_AVEL)
     {
         if(self.tur_head == world) // aparenly this can happpen before TNSF_SETUP. great.
             self.tur_head = spawn();
-            
+
         self.tur_head.move_avelocity_x = ReadShort();
-        self.tur_head.move_avelocity_y = ReadShort();            
+        self.tur_head.move_avelocity_y = ReadShort();
     }
-    
+
     if(sf & TNSF_MOVE)
     {
         self.origin_x = ReadShort();
         self.origin_y = ReadShort();
         self.origin_z = ReadShort();
         setorigin(self, self.origin);
-        
+
         self.velocity_x = ReadShort();
         self.velocity_y = ReadShort();
         self.velocity_z = ReadShort();
-        
+
         self.move_angles_y = ReadShort();
-            
+
         self.move_time     = time;
         self.move_velocity = self.velocity;
         self.move_origin   = self.origin;
     }
-        
+
     if(sf & TNSF_ANIM)
     {
         self.frame1time = ReadCoord();
@@ -668,18 +668,18 @@ void ent_turret()
         float _tmp;
         _tmp = ReadByte();
         if(_tmp != self.team)
-        {            
-            self.team = _tmp;                
+        {
+            self.team = _tmp;
             turret_changeteam();
         }
-        
-        _tmp = ReadByte();        
+
+        _tmp = ReadByte();
         if(_tmp == 0 && self.health != 0)
             turret_die();
         else if(self.health && self.health != _tmp)
             self.helpme = servertime + 10;
 
         self.health = _tmp;
-    } 
+    }
     //self.enemy.health = self.health / 255;
 }
index c95185d74cd6340efd98fca485cefac781f9cf2a..d8727e1760b4a05941246d7a96a5c0dcf13fb8de 100644 (file)
@@ -75,7 +75,7 @@ void AuxiliaryXhair_Draw2D()
 
     psize = self.axh_scale * draw_getimagesize(self.axh_image);
     loc = project_3d_to_2d(self.move_origin) - 0.5 * psize;
-    if not (loc_z < 0 || loc_x < 0 || loc_y < 0 || loc_x > vid_conwidth || loc_y > vid_conheight)
+    if (!(loc_z < 0 || loc_x < 0 || loc_y < 0 || loc_x > vid_conwidth || loc_y > vid_conheight))
     {
         loc_z = 0;
         psize_z = 0;
@@ -103,7 +103,7 @@ void Net_AuXair2(float bIsNew)
         axh.alpha                      = 1;
                AuxiliaryXhair[axh_id] = axh;
     }
-    
+
        axh.move_origin_x       = ReadCoord();
        axh.move_origin_y       = ReadCoord();
        axh.move_origin_z       = ReadCoord();
@@ -111,31 +111,31 @@ void Net_AuXair2(float bIsNew)
        axh.colormod_y          = ReadByte() / 255;
        axh.colormod_z          = ReadByte() / 255;
     axh.cnt                    = time;
-    axh.draw2d                 = AuxiliaryXhair_Draw2D;        
+    axh.draw2d                 = AuxiliaryXhair_Draw2D;
 }
 
 void Net_VehicleSetup()
 {
 
     float i;
-    
+
     float hud_id = ReadByte();
-    
+
     // Weapon update?
     if(hud_id > HUD_VEHICLE_LAST)
     {
         weapon2mode = hud_id - HUD_VEHICLE_LAST;
         return;
     }
-    
+
     // hud_id == 0 means we exited a vehicle, so stop alarm sound/s
     if(hud_id == 0)
     {
         sound(self, CH_TRIGGER_SINGLE, "misc/null.wav", VOL_BASEVOICE, ATTEN_NONE);
-        sound(self, CH_PAIN_SINGLE, "misc/null.wav", VOL_BASEVOICE, ATTEN_NONE);    
+        sound(self, CH_PAIN_SINGLE, "misc/null.wav", VOL_BASEVOICE, ATTEN_NONE);
         return;
     }
-    
+
     hud_id  = bound(HUD_VEHICLE_FIRST, hud_id, HUD_VEHICLE_LAST);
 
     // Init auxiliary crosshairs
@@ -191,15 +191,15 @@ void Net_VehicleSetup()
             // Raygun-locked
             AuxiliaryXhair[0].axh_image   = "gfx/vehicles/axh-bracket.tga";
             AuxiliaryXhair[0].axh_scale   = 0.5;
-            
+
             // Gunner1
             AuxiliaryXhair[1].axh_image   = "gfx/vehicles/axh-target.tga";
             AuxiliaryXhair[1].axh_scale   = 0.75;
-            
+
             // Gunner2
             AuxiliaryXhair[2].axh_image   = "gfx/vehicles/axh-target.tga";
             AuxiliaryXhair[2].axh_scale   = 0.75;
-            break;        
+            break;
         case HUD_BUMBLEBEE_GUN:
             // Plasma cannons
             AuxiliaryXhair[0].axh_image   = "gfx/vehicles/axh-bracket.tga";
@@ -248,12 +248,12 @@ void CSQC_BUMBLE_HUD()
 
     pic2size = draw_getimagesize(bumb_ico) * (autocvar_cl_vehicles_hudscale * 0.8);
     picloc = picsize * 0.5 - pic2size * 0.5;
-    
+
     if(vh_health < 0.25)
         drawpic(hudloc + picloc, bumb_ico, pic2size,  '1 0 0' + '0 1 1' * sin(time * 8),  1, DRAWFLAG_NORMAL);
     else
         drawpic(hudloc + picloc, bumb_ico, pic2size,  '1 1 1' * vh_health  + '1 0 0' * (1 - vh_health),  1, DRAWFLAG_NORMAL);
-    
+
     drawpic(hudloc + picloc, bumb_lgun, pic2size, '1 1 1' * energy   + '1 0 0' * (1 - energy),   1, DRAWFLAG_NORMAL);
     drawpic(hudloc + picloc, bumb_lgun, pic2size, '1 1 1' * energy   + '1 0 0' * (1 - energy),   1, DRAWFLAG_NORMAL);
     drawpic(hudloc + picloc, hud_sh, pic2size,  '1 1 1', shield, DRAWFLAG_NORMAL);
@@ -274,9 +274,9 @@ void CSQC_BUMBLE_HUD()
             alarm1time = time + 2;
             sound(self, CH_PAIN_SINGLE, "vehicles/alarm.wav", VOL_BASEVOICE, ATTEN_NONE);
         }
-        
+
         drawpic(hudloc + picloc, hud_hp_ico, picsize, '1 0 0' + '0 1 1' * sin(time * 8), 1, DRAWFLAG_NORMAL);
-    }        
+    }
     else
     {
         drawpic(hudloc + picloc, hud_hp_ico, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
@@ -284,7 +284,7 @@ void CSQC_BUMBLE_HUD()
         {
             sound(self, CH_PAIN_SINGLE, "misc/null.wav", VOL_BASEVOICE, ATTEN_NONE);
             alarm1time = 0;
-        }        
+        }
     }
 
 // Shield bar
@@ -309,15 +309,15 @@ void CSQC_BUMBLE_HUD()
     {
         drawpic(hudloc + picloc, hud_sh_ico, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
         if(alarm2time)
-        {            
+        {
             sound(self, CH_TRIGGER_SINGLE, "misc/null.wav", VOL_BASEVOICE, ATTEN_NONE);
             alarm2time = 0;
         }
     }
-    
+
        ammo1 *= 0.01;
        ammo2 *= 0.01;
-       
+
 // Gunner1 bar
     picsize = draw_getimagesize(hud_ammo1_bar) * autocvar_cl_vehicles_hudscale;
     picloc = '450 69 0' * autocvar_cl_vehicles_hudscale;
@@ -328,11 +328,11 @@ void CSQC_BUMBLE_HUD()
 // Right gunner slot occupied?
        if(!AuxiliaryXhair[1].draw2d)
        {
-               shield = (picsize_x * 0.5) - (0.5 * stringwidth(_("No right gunner!"), FALSE, '1 0 0' * picsize_y + '0 1 0' * picsize_y));                              
+               shield = (picsize_x * 0.5) - (0.5 * stringwidth(_("No right gunner!"), FALSE, '1 0 0' * picsize_y + '0 1 0' * picsize_y));
                drawfill(hudloc + picloc - '0.2 0.2 0', picsize + '0.4 0.4 0', '0.25 0.25 0.25', 0.75, DRAWFLAG_NORMAL);
                drawstring(hudloc + picloc + '1 0 0' * shield, _("No right gunner!"), '1 0 0' * picsize_y + '0 1 0' * picsize_y, '1 0 0' + '0 1 1' * sin(time * 10), 1, DRAWFLAG_NORMAL);
        }
-       
+
 // ..  and icon
     picsize = 1.5 * draw_getimagesize(hud_energy) * autocvar_cl_vehicles_hudscale;
     picloc = '664 60 0' * autocvar_cl_vehicles_hudscale;
@@ -340,7 +340,7 @@ void CSQC_BUMBLE_HUD()
         drawpic(hudloc + picloc, hud_energy, picsize, '1 0 0' + '0 1 1' * sin(time * 8), 1, DRAWFLAG_NORMAL);
     else
         drawpic(hudloc + picloc, hud_energy, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
-       
+
 // Gunner2 bar
     picsize = draw_getimagesize(hud_ammo2_bar) * autocvar_cl_vehicles_hudscale;
     picloc = '450 140 0' * autocvar_cl_vehicles_hudscale;
@@ -350,7 +350,7 @@ void CSQC_BUMBLE_HUD()
 // Left gunner slot occupied?
        if(!AuxiliaryXhair[2].draw2d)
        {
-               shield = (picsize_x * 0.5) - (0.5 * stringwidth(_("No left gunner!"), FALSE, '1 0 0' * picsize_y + '0 1 0' * picsize_y));                               
+               shield = (picsize_x * 0.5) - (0.5 * stringwidth(_("No left gunner!"), FALSE, '1 0 0' * picsize_y + '0 1 0' * picsize_y));
                drawfill(hudloc + picloc - '0.2 0.2 0', picsize + '0.4 0.4 0', '0.25 0.25 0.25', 0.75, DRAWFLAG_NORMAL);
                drawstring(hudloc + picloc + '1 0 0' * shield, _("No left gunner!"), '1 0 0' * picsize_y + '0 1 0' * picsize_y, '1 0 0' + '0 1 1' * sin(time * 10), 1, DRAWFLAG_NORMAL);
        }
@@ -372,7 +372,7 @@ void CSQC_BUMBLE_HUD()
         picsize_y *= 0.5;
         drawpic('0.5 0 0' * (vid_conwidth - picsize_x) + '0 0.5 0' * (vid_conheight - picsize_y), waki_xhair, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
     }
-    
+
 }
 
 void CSQC_BUMBLE_GUN_HUD()
@@ -399,12 +399,12 @@ void CSQC_BUMBLE_GUN_HUD()
 
     pic2size = draw_getimagesize(bumb_gun_ico) * (autocvar_cl_vehicles_hudscale * 0.8);
     picloc = picsize * 0.5 - pic2size * 0.5;
-    
+
     if(vh_health < 0.25)
         drawpic(hudloc + picloc, bumb_gun_ico, pic2size,  '1 0 0' + '0 1 1' * sin(time * 8),  1, DRAWFLAG_NORMAL);
     else
         drawpic(hudloc + picloc, bumb_gun_ico, pic2size,  '1 1 1' * vh_health  + '1 0 0' * (1 - vh_health),  1, DRAWFLAG_NORMAL);
-    
+
     drawpic(hudloc + picloc, bumb_gun_gun, pic2size, '1 1 1' * energy   + '1 0 0' * (1 - energy),   1, DRAWFLAG_NORMAL);
     drawpic(hudloc + picloc, hud_sh, pic2size,  '1 1 1', shield, DRAWFLAG_NORMAL);
 
@@ -424,9 +424,9 @@ void CSQC_BUMBLE_GUN_HUD()
             alarm1time = time + 2;
             sound(self, CH_PAIN_SINGLE, "vehicles/alarm.wav", VOL_BASEVOICE, ATTEN_NONE);
         }
-        
+
         drawpic(hudloc + picloc, hud_hp_ico, picsize, '1 0 0' + '0 1 1' * sin(time * 8), 1, DRAWFLAG_NORMAL);
-    }        
+    }
     else
     {
         drawpic(hudloc + picloc, hud_hp_ico, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
@@ -434,7 +434,7 @@ void CSQC_BUMBLE_GUN_HUD()
         {
             sound(self, CH_PAIN_SINGLE, "misc/null.wav", VOL_BASEVOICE, ATTEN_NONE);
             alarm1time = 0;
-        }        
+        }
     }
 
 // Shield bar
@@ -459,19 +459,19 @@ void CSQC_BUMBLE_GUN_HUD()
     {
         drawpic(hudloc + picloc, hud_sh_ico, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
         if(alarm2time)
-        {            
+        {
             sound(self, CH_TRIGGER_SINGLE, "misc/null.wav", VOL_BASEVOICE, ATTEN_NONE);
             alarm2time = 0;
         }
     }
-    
+
 // Gun bar
     picsize = draw_getimagesize(hud_ammo1_bar) * autocvar_cl_vehicles_hudscale;
     picloc = '450 69 0' * autocvar_cl_vehicles_hudscale;
     drawsetcliparea(hudloc_x + picloc_x, picloc_y, picsize_x * energy, vid_conheight);
     drawpic(hudloc + picloc, hud_ammo1_bar, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
     drawresetcliparea();
-    
+
 // ..  and icon
     picsize = 1.5 * draw_getimagesize(hud_energy) * autocvar_cl_vehicles_hudscale;
     picloc = '664 60 0' * autocvar_cl_vehicles_hudscale;
@@ -524,7 +524,7 @@ void CSQC_SPIDER_HUD()
     if(vh_health < 0.25)
         drawpic(hudloc + picloc, spider_ico, pic2size,  '1 0 0' + '0 1 1' * sin(time * 8),  1, DRAWFLAG_NORMAL);
     else
-        drawpic(hudloc + picloc, spider_ico, pic2size,  '1 1 1' * vh_health  + '1 0 0' * (1 - vh_health),  1, DRAWFLAG_NORMAL);    
+        drawpic(hudloc + picloc, spider_ico, pic2size,  '1 1 1' * vh_health  + '1 0 0' * (1 - vh_health),  1, DRAWFLAG_NORMAL);
     drawpic(hudloc + picloc, spider_rkt, pic2size,  '1 1 1' * reload2 + '1 0 0' * (1 - reload2), 1, DRAWFLAG_NORMAL);
     drawpic(hudloc + picloc, spider_mgun, pic2size, '1 1 1' * ammo1   + '1 0 0' * (1 - ammo1),   1, DRAWFLAG_NORMAL);
     drawpic(hudloc + picloc, hud_sh, pic2size,  '1 1 1', shield, DRAWFLAG_NORMAL);
@@ -544,9 +544,9 @@ void CSQC_SPIDER_HUD()
         {
             alarm1time = time + 2;
             sound(self, CH_PAIN_SINGLE, "vehicles/alarm.wav", VOL_BASEVOICE, ATTEN_NONE);
-        }        
+        }
         drawpic(hudloc + picloc, hud_hp_ico, picsize, '1 0 0' + '0 1 1' * sin(time * 8), 1, DRAWFLAG_NORMAL);
-    }        
+    }
     else
     {
         drawpic(hudloc + picloc, hud_hp_ico, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
@@ -554,7 +554,7 @@ void CSQC_SPIDER_HUD()
         {
             sound(self, CH_PAIN_SINGLE, "misc/null.wav", VOL_BASEVOICE, ATTEN_NONE);
             alarm1time = 0;
-        }        
+        }
     }
 // Shield bar
     picsize = draw_getimagesize(hud_sh_bar) * autocvar_cl_vehicles_hudscale;
@@ -578,7 +578,7 @@ void CSQC_SPIDER_HUD()
     {
         drawpic(hudloc + picloc, hud_sh_ico, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
         if(alarm2time)
-        {            
+        {
             sound(self, CH_TRIGGER_SINGLE, "misc/null.wav", VOL_BASEVOICE, ATTEN_NONE);
             alarm2time = 0;
         }
@@ -710,9 +710,9 @@ void CSQC_RAPTOR_HUD()
             alarm1time = time + 2;
             sound(self, CH_PAIN_SINGLE, "vehicles/alarm.wav", VOL_BASEVOICE, ATTEN_NONE);
         }
-        
+
         drawpic(hudloc + picloc, hud_hp_ico, picsize, '1 0 0' + '0 1 1' * sin(time * 8), 1, DRAWFLAG_NORMAL);
-    }        
+    }
     else
     {
         drawpic(hudloc + picloc, hud_hp_ico, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
@@ -745,12 +745,12 @@ void CSQC_RAPTOR_HUD()
     {
         drawpic(hudloc + picloc, hud_sh_ico, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
         if(alarm2time)
-        {            
+        {
             sound(self, CH_TRIGGER_SINGLE, "misc/null.wav", VOL_BASEVOICE, ATTEN_NONE);
             alarm2time = 0;
         }
     }
-    
+
 // Gun bar
     picsize = draw_getimagesize(hud_ammo1_bar) * autocvar_cl_vehicles_hudscale;
     picloc = '450 69 0' * autocvar_cl_vehicles_hudscale;
@@ -778,7 +778,7 @@ void CSQC_RAPTOR_HUD()
         drawpic(hudloc + picloc, hud_ammo2_ico, pic2size, '1 0 0' + '0 1 1' * sin(time * 8), 1, DRAWFLAG_NORMAL);
     else
         drawpic(hudloc + picloc, hud_ammo2_ico, pic2size, '1 1 1', 1, DRAWFLAG_NORMAL);
-    
+
     if(weapon2mode == RSM_FLARE)
     {
         raptor_xhair =  "gfx/vehicles/axh-bracket.tga";
@@ -786,7 +786,7 @@ void CSQC_RAPTOR_HUD()
     else
     {
         raptor_xhair =  "gfx/vehicles/axh-ring.tga";
-        
+
         // Bombing crosshair
         if(!dropmark)
         {
@@ -808,7 +808,7 @@ void CSQC_RAPTOR_HUD()
             setorigin(dropmark, trace_endpos);
             picsize = draw_getimagesize(raptor_drop) * 0.2;
 
-            if not (where_z < 0 || where_x < 0 || where_y < 0 || where_x > vid_conwidth || where_y > vid_conheight)
+            if (!(where_z < 0 || where_x < 0 || where_y < 0 || where_x > vid_conwidth || where_y > vid_conheight))
             {
                 where_x -= picsize_x * 0.5;
                 where_y -= picsize_y * 0.5;
@@ -825,7 +825,7 @@ void CSQC_RAPTOR_HUD()
                 where = project_3d_to_2d(dropmark.origin);
                 picsize = draw_getimagesize(raptor_drop) * 0.25;
 
-                if not (where_z < 0 || where_x < 0 || where_y < 0 || where_x > vid_conwidth || where_y > vid_conheight)
+                if (!(where_z < 0 || where_x < 0 || where_y < 0 || where_x > vid_conwidth || where_y > vid_conheight))
                 {
                     where_x -= picsize_x * 0.5;
                     where_y -= picsize_y * 0.5;
@@ -835,7 +835,7 @@ void CSQC_RAPTOR_HUD()
             }
         }
     }
-    
+
        if (scoreboard_showscores)
                HUD_DrawScoreboard();
     else
@@ -902,9 +902,9 @@ void CSQC_WAKIZASHI_HUD()
             alarm1time = time + 2;
             sound(self, CH_PAIN_SINGLE, "vehicles/alarm.wav", VOL_BASEVOICE, ATTEN_NONE);
         }
-        
+
         drawpic(hudloc + picloc, hud_hp_ico, picsize, '1 0 0' + '0 1 1' * sin(time * 8), 1, DRAWFLAG_NORMAL);
-    }        
+    }
     else
     {
         drawpic(hudloc + picloc, hud_hp_ico, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
@@ -912,9 +912,9 @@ void CSQC_WAKIZASHI_HUD()
         {
             sound(self, CH_PAIN_SINGLE, "misc/null.wav", VOL_BASEVOICE, ATTEN_NONE);
             alarm1time = 0;
-        }        
+        }
     }
-        
+
 
 // Shield bar
     picsize = draw_getimagesize(hud_sh_bar) * autocvar_cl_vehicles_hudscale;
@@ -938,12 +938,12 @@ void CSQC_WAKIZASHI_HUD()
     {
         drawpic(hudloc + picloc, hud_sh_ico, picsize, '1 1 1', 1, DRAWFLAG_NORMAL);
         if(alarm2time)
-        {            
+        {
             sound(self, CH_TRIGGER_SINGLE, "misc/null.wav", VOL_BASEVOICE, ATTEN_NONE);
             alarm2time = 0;
         }
     }
-    
+
 // Gun bar
     picsize = draw_getimagesize(hud_ammo1_bar) * autocvar_cl_vehicles_hudscale;
     picloc = '450 69 0' * autocvar_cl_vehicles_hudscale;
@@ -992,7 +992,7 @@ void Vehicles_Precache()
        precache_model("models/vehicles/clusterbomb_fragment.md3");
        precache_model("models/vehicles/rocket01.md3");
        precache_model("models/vehicles/rocket02.md3");
-       
+
        precache_sound ("vehicles/alarm.wav");
        precache_sound ("vehicles/alarm_shield.wav");
 }
@@ -1000,12 +1000,12 @@ void Vehicles_Precache()
 void RaptorCBShellfragDraw()
 {
        if(wasfreed(self))
-               return;   
-               
+               return;
+
        Movetype_Physics_MatchTicrate(autocvar_cl_gibs_ticrate, autocvar_cl_gibs_sloppy);
        self.move_avelocity += randomvec() * 15;
        self.renderflags = 0;
-       
+
        if(self.cnt < time)
                self.alpha = bound(0, self.nextthink - time, 1);
 
@@ -1016,7 +1016,7 @@ void RaptorCBShellfragDraw()
 void RaptorCBShellfragToss(vector _org, vector _vel, vector _ang)
 {
     entity sfrag;
-    
+
     sfrag = spawn();
     setmodel(sfrag, "models/vehicles/clusterbomb_fragment.md3");
     setorigin(sfrag, _org);
index a2ace4f46aa95059399d89a0667c74b44dcd8e5b..cde516b623dd0bbeafb6dd5b10c8382c5c491b81 100644 (file)
@@ -96,7 +96,7 @@ void drawhealthbar(vector org, float rot, float h, vector sz, vector hotspot, fl
        o = hotspot;
        ri = '1 0 0';
        up = '0 1 0';
-       
+
        rot = -rot; // rotate by the opposite angle, as our coordinate system is reversed
        o = rotate(o, rot) + org;
        ri = rotate(ri, rot);
@@ -439,10 +439,10 @@ void Draw_WaypointSprite()
                return;
 
        ++waypointsprite_newcount;
-       
+
        float dist;
        dist = vlen(self.origin - view_origin);
-       
+
        float a;
        a = self.alpha * autocvar_hud_panel_fg_alpha;
 
@@ -457,7 +457,7 @@ void Draw_WaypointSprite()
        if(rgb == '0 0 0')
        {
                self.teamradar_color = '1 0 1';
-               print(sprintf("WARNING: sprite of name %s has no color, using pink so you notice it\n", spriteimage)); 
+               printf("WARNING: sprite of name %s has no color, using pink so you notice it\n", spriteimage);
        }
 
        if(time - floor(time) > 0.5)
@@ -483,10 +483,10 @@ void Draw_WaypointSprite()
        float ang;
 
        o = project_3d_to_2d(self.origin);
-       if(o_z < 0 
-       || o_x < (vid_conwidth * waypointsprite_edgeoffset_left) 
-       || o_y < (vid_conheight * waypointsprite_edgeoffset_top) 
-       || o_x > (vid_conwidth - (vid_conwidth * waypointsprite_edgeoffset_right))  
+       if(o_z < 0
+       || o_x < (vid_conwidth * waypointsprite_edgeoffset_left)
+       || o_y < (vid_conheight * waypointsprite_edgeoffset_top)
+       || o_x > (vid_conwidth - (vid_conwidth * waypointsprite_edgeoffset_right))
        || o_y > (vid_conheight - (vid_conheight * waypointsprite_edgeoffset_bottom)))
        {
                // scale it to be just in view
@@ -543,9 +543,9 @@ void Draw_WaypointSprite()
        o_z = 0;
 
        float edgedistance_min, crosshairdistance;
-               edgedistance_min = min((o_y - (vid_conheight * waypointsprite_edgeoffset_top)), 
+               edgedistance_min = min((o_y - (vid_conheight * waypointsprite_edgeoffset_top)),
        (o_x - (vid_conwidth * waypointsprite_edgeoffset_left)),
-       (vid_conwidth - (vid_conwidth * waypointsprite_edgeoffset_right)) - o_x, 
+       (vid_conwidth - (vid_conwidth * waypointsprite_edgeoffset_right)) - o_x,
        (vid_conheight - (vid_conheight * waypointsprite_edgeoffset_bottom)) - o_y);
 
        float vidscale;
@@ -585,7 +585,7 @@ void Draw_WaypointSprite()
        }
 
        o = drawspritearrow(o, ang, rgb, a, SPRITE_ARROW_SCALE * t);
-       
+
        string txt;
        if(autocvar_g_waypointsprite_spam && waypointsprite_count >= autocvar_g_waypointsprite_spam)
                txt = _("Spam");
index 5ab3da67cff47e58a34f3731b1d330d256bb3526..d9864f4da7e1c73fc7300ee69bb61b3589cc051c 100644 (file)
@@ -63,7 +63,7 @@ float CampaignFile_Load(float offset, float n)
 
                                campaign_entries = campaign_entries + 1;
 
-                               if(campaign_entries >= n)                               
+                               if(campaign_entries >= n)
                                        break;
                        }
                        lineno = lineno + 1;
index 4ca8b3780c3d4950c4644be777260836d8da4c01..08b0b69ddffcedd8b52840e40aa601d739d990cb 100644 (file)
@@ -28,7 +28,7 @@ void Curl_URI_Get_Callback(float id, float status, string data)
        do_cvar = curl_uri_get_cvar[i];
        if(status != 0)
        {
-               print(sprintf(_("error: status is %d\n"), status));
+               printf(_("error: status is %d\n"), status);
                if(do_cvar)
                        strunzone(do_cvar);
                return;
@@ -41,7 +41,7 @@ void Curl_URI_Get_Callback(float id, float status, string data)
                strunzone(do_cvar);
        }
        if(!do_exec)
-               if not(do_cvar)
+               if (!do_cvar)
                        print(data);
 }
 
@@ -57,12 +57,12 @@ void GenericCommand_addtolist(float request, float argc)
                case CMD_REQUEST_COMMAND:
                {
                        float i;
-                       
+
                        if(argc >= 2)
                        {
                                string original_cvar = argv(1);
                                string tmp_string = argv(2);
-                               
+
                                if(cvar_string(original_cvar) == "") // cvar was empty
                                {
                                        cvar_set(original_cvar, tmp_string);
@@ -70,17 +70,17 @@ void GenericCommand_addtolist(float request, float argc)
                                else // add it to the end of the list if the list doesn't already have it
                                {
                                        argc = tokenizebyseparator(cvar_string(original_cvar), " ");
-                                       
+
                                        for(i = 0; i < argc; ++i)
                                                if(argv(i) == tmp_string)
                                                        return; // already in list
-                                                       
+
                                        cvar_set(original_cvar, strcat(tmp_string, " ", cvar_string(original_cvar)));
                                }
                                return;
                        }
                }
-                       
+
                default:
                        print("Incorrect parameters for ^2addtolist^7\n");
                case CMD_REQUEST_USAGE:
@@ -162,7 +162,7 @@ void GenericCommand_qc_curl(float request, float argc)
 
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -181,33 +181,33 @@ void GenericCommand_dumpcommands(float request)
                        float fh;
                        string filename = strcat(GetProgramCommandPrefix(), "_dump.txt");
                        fh = fopen(filename, FILE_WRITE);
-                       
+
                        if(fh >= 0)
                        {
                                #ifdef SVQC
                                        CMD_Write("dump of server console commands:\n");
                                        GameCommand_macro_write_aliases(fh);
-                                       
+
                                        CMD_Write("\ndump of networked client only commands:\n");
                                        ClientCommand_macro_write_aliases(fh);
-                                       
+
                                        CMD_Write("\ndump of common commands:\n");
                                        CommonCommand_macro_write_aliases(fh);
 
                                        CMD_Write("\ndump of ban commands:\n");
                                        BanCommand_macro_write_aliases(fh);
                                #endif
-                                                               
+
                                #ifdef CSQC
                                        CMD_Write("dump of client commands:\n");
                                        LocalCommand_macro_write_aliases(fh);
                                #endif
-                               
+
                                CMD_Write("\ndump of generic commands:\n");
                                GenericCommand_macro_write_aliases(fh);
-                               
+
                                print("Completed dump of aliases in ^2data/data/", GetProgramCommandPrefix(), "_dump.txt^7.\n");
-                               
+
                                fclose(fh);
                        }
                        else
@@ -216,7 +216,7 @@ void GenericCommand_dumpcommands(float request)
                        }
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -236,7 +236,7 @@ void GenericCommand_dumpnotifs(float request)
                        #ifndef MENUQC
                        float fh, alsoprint = FALSE;
                        string filename = argv(1);
-                       
+
                        if(filename == "")
                        {
                                filename = "notifications.cfg";
@@ -248,23 +248,23 @@ void GenericCommand_dumpnotifs(float request)
                                alsoprint = TRUE;
                        }
                        fh = fopen(filename, FILE_WRITE);
-                       
+
                        if(fh >= 0)
                        {
                                Dump_Notifications(fh, alsoprint);
-                               print(sprintf("Dumping notifications... File located in ^2data/data/%s^7.\n", filename));
+                               printf("Dumping notifications... File located in ^2data/data/%s^7.\n", filename);
                                fclose(fh);
                        }
                        else
                        {
-                               print(sprintf("^1Error: ^7Could not open file '%s'!\n", filename));
+                               printf("^1Error: ^7Could not open file '%s'!\n", filename);
                        }
                        #else
                        print(_("Notification dump command only works with cl_cmd and sv_cmd.\n"));
                        #endif
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -285,7 +285,7 @@ void GenericCommand_maplist(float request, float argc)
                {
                        string tmp_string;
                        float i;
-                       
+
                        switch(argv(1))
                        {
                                case "add": // appends new maps to the maplist
@@ -297,63 +297,63 @@ void GenericCommand_maplist(float request, float argc)
                                                        print("maplist: ERROR: ", argv(2), " does not exist!\n");
                                                        break;
                                                }
-                                               
+
                                                if(cvar_string("g_maplist") == "")
                                                        cvar_set("g_maplist", argv(2));
                                                else
                                                        cvar_set("g_maplist", strcat(argv(2), " ", cvar_string("g_maplist")));
-                                                       
+
                                                return;
                                        }
                                        break; // go to usage
                                }
-                               
+
                                case "cleanup": // scans maplist and only adds back the ones which are really usable
                                {
                                        MapInfo_Enumerate();
                                        MapInfo_FilterGametype(MapInfo_CurrentGametype(), MapInfo_CurrentFeatures(), MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags(), 0);
                                        argc = tokenizebyseparator(cvar_string("g_maplist"), " ");
-                                       
+
                                        tmp_string = "";
                                        for(i = 0; i < argc; ++i)
                                                if(MapInfo_CheckMap(argv(i)))
                                                        tmp_string = strcat(tmp_string, " ", argv(i));
-                                                       
+
                                        tmp_string = substring(tmp_string, 1, strlen(tmp_string) - 1);
                                        cvar_set("g_maplist", tmp_string);
-                                       
+
                                        return;
                                }
-                               
+
                                case "remove": // scans maplist and only adds back whatever maps were not provided in argv(2)
                                {
                                        if(argc == 3)
                                        {
                                                argc = tokenizebyseparator(cvar_string("g_maplist"), " ");
-                                               
+
                                                tmp_string = "";
                                                for(i = 0; i < argc; ++i)
                                                        if(argv(i) != argv(2))
                                                                tmp_string = strcat(tmp_string, " ", argv(i));
-                                                               
+
                                                tmp_string = substring(tmp_string, 1, strlen(tmp_string) - 1);
                                                cvar_set("g_maplist", tmp_string);
-                                               
+
                                                return;
                                        }
                                        break; // go to usage
                                }
-                               
+
                                case "shuffle": // randomly shuffle the maplist
                                {
                                        cvar_set("g_maplist", shufflewords(cvar_string("g_maplist")));
                                        return;
                                }
-                                       
+
                                default: break;
                        }
                }
-                       
+
                default:
                        print("Incorrect parameters for ^2maplist^7\n");
                case CMD_REQUEST_USAGE:
@@ -376,7 +376,7 @@ void GenericCommand_nextframe(float request, float arguments, string command)
                        queue_to_execute_next_frame(substring(command, argv_start_index(1), argv_end_index(-1) - argv_start_index(1)));
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -399,21 +399,21 @@ void GenericCommand_removefromlist(float request, float argc)
                                string original_cvar = argv(1);
                                string removal = argv(2);
                                string tmp_string;
-                               
+
                                argc = tokenizebyseparator(cvar_string(original_cvar), " ");
-                               
+
                                tmp_string = "";
                                for(i = 0; i < argc; ++i)
                                        if(argv(i) != removal)
                                                tmp_string = strcat(tmp_string, " ", argv(i));
-                                               
+
                                tmp_string = substring(tmp_string, 1, strlen(tmp_string) - 1);
                                cvar_set(original_cvar, tmp_string);
-                               
+
                                return;
                        }
                }
-                       
+
                default:
                        print("Incorrect parameters for ^2removefromlist^7\n");
                case CMD_REQUEST_USAGE:
@@ -433,7 +433,7 @@ void GenericCommand_restartnotifs(float request)
                case CMD_REQUEST_COMMAND:
                {
                        #ifndef MENUQC
-                       print(sprintf(
+                       printf(
                                strcat(
                                        "Restart_Notifications(): Restarting %d notifications... ",
                                        "Counts: MSG_ANNCE = %d, MSG_INFO = %d, MSG_CENTER = %d, MSG_MULTI = %d, MSG_CHOICE = %d\n"
@@ -450,7 +450,7 @@ void GenericCommand_restartnotifs(float request)
                                NOTIF_CENTER_COUNT,
                                NOTIF_MULTI_COUNT,
                                NOTIF_CHOICE_COUNT
-                       ));     
+                       );
                        Destroy_All_Notifications();
                        CALL_ACCUMULATED_FUNCTION(RegisterNotifications);
                        #else
@@ -458,7 +458,7 @@ void GenericCommand_restartnotifs(float request)
                        #endif
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -479,7 +479,7 @@ void GenericCommand_settemp(float request, float argc)
                        {
                                float f = cvar_settemp(argv(1), argv(2));
                                if(f == 1)
-                                       dprint("Creating new settemp tracker for ", argv(1), " and setting it to \"", argv(2), "\" temporarily.\n"); 
+                                       dprint("Creating new settemp tracker for ", argv(1), " and setting it to \"", argv(2), "\" temporarily.\n");
                                else if(f == -1)
                                        dprint("Already had a tracker for ", argv(1), ", updating it to \"", argv(2), "\".\n");
                                // else cvar_settemp itself errors out
@@ -507,15 +507,15 @@ void GenericCommand_settemp_restore(float request, float argc)
                case CMD_REQUEST_COMMAND:
                {
                        float i = cvar_settemp_restore();
-                       
+
                        if(i)
                                dprint("Restored ", ftos(i), " temporary cvar settings to their original values.\n");
                        else
                                dprint("Nothing to restore.\n");
-                       
+
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -543,7 +543,7 @@ void GenericCommand_runtest(float request, float argc)
                                TEST_RunAll();
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -561,10 +561,10 @@ void GenericCommand_(float request)
        {
                case CMD_REQUEST_COMMAND:
                {
-                       
+
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -600,10 +600,10 @@ void GenericCommand_macro_help()
 {
        #define GENERIC_COMMAND(name,function,description) \
                { print("  ^2", name, "^7: ", description, "\n"); }
-               
+
        GENERIC_COMMANDS(0, 0, "")
        #undef GENERIC_COMMAND
-       
+
        return;
 }
 
@@ -611,10 +611,10 @@ float GenericCommand_macro_command(float argc, string command)
 {
        #define GENERIC_COMMAND(name,function,description) \
                { if(name == strtolower(argv(0))) { function; return TRUE; } }
-               
+
        GENERIC_COMMANDS(CMD_REQUEST_COMMAND, argc, command)
        #undef GENERIC_COMMAND
-       
+
        return FALSE;
 }
 
@@ -622,10 +622,10 @@ float GenericCommand_macro_usage(float argc)
 {
        #define GENERIC_COMMAND(name,function,description) \
                { if(name == strtolower(argv(1))) { function; return TRUE; } }
-               
+
        GENERIC_COMMANDS(CMD_REQUEST_USAGE, argc, "")
        #undef GENERIC_COMMAND
-       
+
        return FALSE;
 }
 
@@ -633,18 +633,18 @@ void GenericCommand_macro_write_aliases(float fh)
 {
        #define GENERIC_COMMAND(name,function,description) \
                { CMD_Write_Alias("qc_cmd_svmenu", name, description); }
-       
+
        GENERIC_COMMANDS(0, 0, "")
        #undef GENERIC_COMMAND
-       
+
        return;
 }
-       
+
 
 // ===========================================
 //  Main Common Function For Generic Commands
 // ===========================================
-// Commands spread out among all programs (menu, client, and server) 
+// Commands spread out among all programs (menu, client, and server)
 
 float GenericCommand(string command)
 {
@@ -655,9 +655,9 @@ float GenericCommand(string command)
 
        // Guide for working with argc arguments by example:
        // argc:   1    - 2      - 3     - 4
-       // argv:   0    - 1      - 2     - 3 
+       // argv:   0    - 1      - 2     - 3
        // cmd     vote - master - login - password
-       
+
        if(GenericCommand_macro_command(argc, command)) // continue as usual and scan for normal commands
        {
                return TRUE; // handled by one of the above GenericCommand_* functions
@@ -713,7 +713,7 @@ float GenericCommand(string command)
                // test case for terencehill's color codes
                s = strdecolorize(substring(command, argv_start_index(2), argv_end_index(-1) - argv_start_index(2)));
                s2 = "";
-               
+
                n = strlen(s);
                j = ((6 * max(1, floor(strlen(s)/32 + random() * 2 - 1))) / n) * (1 - 2 * (random() > 0.5));
                f = random() * 6;
index 7ee3d50649b4b533b0e742c512659d167823a376..a61986a8fb14f0739dfa7bb242ec726e55ae2dee 100644 (file)
@@ -4,12 +4,12 @@
 // =========================================================
 
 // Used by other game command systems for common commands,
-// and it returns true if handled, false if not. 
+// and it returns true if handled, false if not.
 // Note: It tokenizes its input, so be careful!
 float GenericCommand(string command);
 
 // Returns command prefix specific for whatever program it is compiled in
-string GetProgramCommandPrefix(void); 
+string GetProgramCommandPrefix(void);
 
 // used by common/command/generic.qc:GenericCommand_dumpcommands to list all commands into a .txt file
 #define CMD_Write(s) fputs(fh, s)
index 5cca2db1ce666145fb7f339925daacaf3ce8f756..223d3264d35fba3bd6cbf9b9ee901e71a7fc3a98 100644 (file)
@@ -3,7 +3,7 @@
 //  Last updated: December 28th, 2011
 // ========================================
 
-string rpn_pop() 
+string rpn_pop()
 {
        if(rpn_sp > 0) {
                --rpn_sp;
@@ -14,7 +14,7 @@ string rpn_pop()
                return "";
        }
 }
-void rpn_push(string s) 
+void rpn_push(string s)
 {
        if(rpn_sp < MAX_RPN_STACK) {
                rpn_stack[rpn_sp] = s;
@@ -24,7 +24,7 @@ void rpn_push(string s)
                rpn_error = TRUE;
        }
 }
-string rpn_get() 
+string rpn_get()
 {
        if(rpn_sp > 0) {
                return rpn_stack[rpn_sp - 1];
@@ -34,7 +34,7 @@ string rpn_get()
                return "";
        }
 }
-void rpn_set(string s) 
+void rpn_set(string s)
 {
        if(rpn_sp > 0) {
                rpn_stack[rpn_sp - 1] = s;
@@ -46,8 +46,8 @@ void rpn_set(string s)
 
 float rpn_getf() { return stof(rpn_get()); }
 float rpn_popf() { return stof(rpn_pop()); }
-void rpn_pushf(float f) { return rpn_push(ftos(f)); }
-void rpn_setf(float f) { return rpn_set(ftos(f)); }
+void rpn_pushf(float f) { return rpn_push(sprintf("%.9g", f)); }
+void rpn_setf(float f) { return rpn_set(sprintf("%.9g", f)); }
 
 void GenericCommand_rpn(float request, float argc, string command)
 {
@@ -58,14 +58,14 @@ void GenericCommand_rpn(float request, float argc, string command)
                        float i, j, f, f2, f3, rpnpos;
                        //vector rgb;
                        string s, s2, rpncmd;
-                       
+
                        if(!rpn_db)
                        {
                                rpn_db = db_create();
                                db_put(rpn_db, "stack.pointer", "0");
                                db_put(rpn_db, "stack.pos", "-1");
                        }
-                       
+
                        if(argc >= 2)
                        {
                                rpn_sp = 0;
@@ -158,6 +158,31 @@ void GenericCommand_rpn(float request, float argc, string command)
                                                f = rpn_popf();
                                                f2 = rpn_getf();
                                                rpn_setf(f2 - f * floor(f2 / f));
+                                       } else if(rpncmd == "pow" || rpncmd == "**") {
+                                               f = rpn_popf();
+                                               rpn_setf(pow(rpn_getf(), f));
+                                       } else if(rpncmd == "bitand" || rpncmd == "&") {
+                                               f = rpn_popf();
+                                               rpn_setf(rpn_getf() & f);
+                                       } else if(rpncmd == "bitor" || rpncmd == "|") {
+                                               f = rpn_popf();
+                                               rpn_setf(rpn_getf() | f);
+                                       } else if(rpncmd == "bitxor" || rpncmd == "^") {
+                                               f = rpn_popf();
+                                               rpn_setf(rpn_getf() ^ f);
+                                       } else if(rpncmd == "and" || rpncmd == "&&") {
+                                               f = rpn_popf();
+                                               rpn_setf(rpn_getf() && f);
+                                       } else if(rpncmd == "or" || rpncmd == "||") {
+                                               f = rpn_popf();
+                                               rpn_setf(rpn_getf() || f);
+                                       } else if(rpncmd == "xor" || rpncmd == "^^") {
+                                               f = rpn_popf();
+                                               rpn_setf(!rpn_getf() != !f);
+                                       } else if(rpncmd == "bitnot") {
+                                               rpn_setf(~rpn_popf());
+                                       } else if(rpncmd == "not") {
+                                               rpn_setf(!rpn_popf());
                                        } else if(rpncmd == "abs") {
                                                rpn_setf(fabs(rpn_getf()));
                                        } else if(rpncmd == "sgn") {
@@ -174,6 +199,14 @@ void GenericCommand_rpn(float request, float argc, string command)
                                                rpn_setf(floor(rpn_getf()));
                                        } else if(rpncmd == "ceil" || rpncmd == "c") {
                                                rpn_setf(ceil(rpn_getf()));
+                                       } else if(rpncmd == "exp") {
+                                               rpn_setf(exp(rpn_getf()));
+                                       } else if(rpncmd == "log") {
+                                               rpn_setf(exp(rpn_getf()));
+                                       } else if(rpncmd == "sin") {
+                                               rpn_setf(sin(rpn_getf()));
+                                       } else if(rpncmd == "cos") {
+                                               rpn_setf(cos(rpn_getf()));
                                        } else if(rpncmd == "max") {
                                                f = rpn_popf();
                                                f2 = rpn_getf();
@@ -189,12 +222,12 @@ void GenericCommand_rpn(float request, float argc, string command)
                                                rpn_setf(bound(f3, f2, f));
                                        } else if(rpncmd == "when") {
                                                f = rpn_popf();
-                                               f2 = rpn_popf();
-                                               f3 = rpn_getf();
+                                               s = rpn_pop();
+                                               s2 = rpn_get();
                                                if(f)
-                                                       rpn_setf(f3);
+                                                       rpn_set(s2);
                                                else
-                                                       rpn_setf(f2);
+                                                       rpn_set(s);
                                        } else if(rpncmd == ">" || rpncmd == "gt") {
                                                f = rpn_popf();
                                                rpn_setf(rpn_getf() > f);
@@ -254,7 +287,7 @@ void GenericCommand_rpn(float request, float argc, string command)
                                                        print("rpn: database underflow\n");
                                                }
                                        } else if(rpncmd == "dbget") {
-                                               
+
                                                i = stof(db_get(rpn_db, "stack.pointer"));
                                                if(i)
                                                {
@@ -288,13 +321,13 @@ void GenericCommand_rpn(float request, float argc, string command)
                                                {
                                                        j = stof(db_get(rpn_db, "stack.pointer"));
                                                        i = stof(db_get(rpn_db, "stack.pos"));
-                                                       
+
                                                        if(i < 0)
                                                        {
                                                                i = 0;
                                                                db_put(rpn_db, "stack.pos", "0");
                                                        }
-                                                       
+
                                                        db_put(rpn_db, "stack.pointer", ftos(j+1));
                                                        for(--j; j >= i; --j)
                                                        {
@@ -371,7 +404,7 @@ void GenericCommand_rpn(float request, float argc, string command)
                                                                i = 0;
                                                        else
                                                                i = stof(s);
-                                                       
+
                                                        j = stof(db_get(rpn_db, "stack.pointer"));
                                                        if(i < 0 || i >= j)
                                                        {
@@ -393,7 +426,7 @@ void GenericCommand_rpn(float request, float argc, string command)
                                                // tokens f..f2 represent s2
                                                // UNION: add all tokens to s that are in s2 but not in s
                                                s = "";
-                                               for(i = 0; i < f; ++i)  
+                                               for(i = 0; i < f; ++i)
                                                        s = strcat(s, " ", argv(i));
                                                for(i = f; i < f2; ++i) {
                                                        for(j = 0; j < f; ++j)
@@ -502,6 +535,11 @@ void GenericCommand_rpn(float request, float argc, string command)
                                        } else if(rpncmd == "sprintf1s") {
                                                s = rpn_pop();
                                                rpn_set(sprintf(s, rpn_get()));
+                                       } else if(rpncmd == "eval") {
+                                               s = rpn_pop();
+                                               command = strcat(s, substring(command, argv_end_index(rpnpos), -1));
+                                               argc = tokenize_console(command);
+                                               rpnpos = -1;
                                        } else {
                                                rpn_push(cvar_string(rpncmd));
                                        }
@@ -517,7 +555,7 @@ void GenericCommand_rpn(float request, float argc, string command)
 
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -528,9 +566,12 @@ void GenericCommand_rpn(float request, float argc, string command)
                        print("    x x exch --------------------------> x x : swap the top two\n");
                        print("    /cvarname load --------------------> x   : loads a cvar\n");
                        print("    /cvarname x def ------------------->     : writes to a cvar\n");
-                       print("    f f add|sub|mul|div|mod|max|min ---> f   : adds/... two numbers\n");
-                       print("    f f eq|ne|gt|ge|lt|le -------------> f   : compares two numbers\n");
+                       print("    f f add|sub|mul|div|mod|pow -------> f   : adds/... two numbers\n");
+                       print("    f f and|or|xor|bitand|bitor|bitxor > f   : logical and bitwise operations\n");
+                       print("    f f eq|ne|gt|ge|lt|le|max|min -----> f   : compares two numbers\n");
                        print("    f neg|abs|sgn|rand|floor|ceil------> f   : negates/... a number\n");
+                       print("    f not|bitnot ----------------------> f   : logical and bitwise negation\n");
+                       print("    f exp|log|sin|cos -----------------> f   : exponential function & Co.\n");
                        print("    f f f bound -----------------------> f   : bounds the middle number\n");
                        print("    f1 f2 b when ----------------------> f   : f1 if b, f2 otherwise\n");
                        print("    s s union|intersection|difference -> s   : set operations\n");
@@ -551,6 +592,7 @@ void GenericCommand_rpn(float request, float argc, string command)
                        print("    s /MD4 digest ---------------------> s   : MD4 digest\n");
                        print("    s /SHA256 digest ------------------> s   : SHA256 digest\n");
                        print("    s /formatstring sprintf1s ---------> s   : sprintf with 1 string (pad, cut)\n");
+                       print("    s eval ---------------------------->     : does something eval\n");
                        print("    Set operations operate on 'such''strings'.\n");
                        print("    Unknown tokens insert their cvar value.\n");
                        return;
index b3dafaaf7ba7293813715bb1d1ae0aa673af8f14..8ae465e54dab91f32187850029b5ffdd0fde0797 100644 (file)
@@ -30,7 +30,6 @@ const float AS_FLOAT = 8;
 
 const float TE_CSQC_PICTURE = 100;
 const float TE_CSQC_RACE = 101;
-const float TE_CSQC_ZCURVEPARTICLES = 102;
 const float TE_CSQC_NEXGUNBEAMPARTICLE = 103;
 const float TE_CSQC_LIGHTNINGARC = 104;
 const float TE_CSQC_TEAMNAGGER = 105;
@@ -327,7 +326,6 @@ const float ATTEN_MAX = 3.984375;
 const float PROJECTILE_ELECTRO = 1;
 const float PROJECTILE_ROCKET = 2;
 const float PROJECTILE_TAG = 3;
-const float PROJECTILE_BULLET = 4;
 const float PROJECTILE_CRYLINK = 5;
 const float PROJECTILE_ELECTRO_BEAM = 6;
 const float PROJECTILE_GRENADE = 7;
@@ -342,11 +340,9 @@ const float PROJECTILE_PORTO_BLUE = 15;
 const float PROJECTILE_HOOKBOMB = 16;
 const float PROJECTILE_HAGAR = 17;
 const float PROJECTILE_HAGAR_BOUNCING = 18;
-const float PROJECTILE_BULLET_GLOWING = 19;
 const float PROJECTILE_CRYLINK_BOUNCING = 20;
 const float PROJECTILE_FIREBALL = 21;
 const float PROJECTILE_FIREMINE = 22;
-const float PROJECTILE_BULLET_GLOWING_TRACER = 23;
 
 const float PROJECTILE_RAPTORCANNON = 24;
 const float PROJECTILE_RAPTORBOMB = 25;
index a74f74e980f467acfe601edf823aab0c60b3ee80..2559bf3acd9ff8e822163d961f61c3e8fbd81d3b 100644 (file)
@@ -50,7 +50,7 @@
                ZCTX(_("CI_SEC^%d seconds")), /* second */ \
                ZCTX(_("CI_THI^%d seconds")), /* third */ \
                ZCTX(_("CI_MUL^%d seconds"))) /* multi */
-               
+
 string count_ordinal(float interval)
 {
        // This function is designed primarily for the English language, it's impossible
@@ -72,7 +72,7 @@ string count_ordinal(float interval)
                }
        }
        else { return sprintf(_("%dth"), interval); }
-       
+
        return "";
 }
 
@@ -88,7 +88,7 @@ string count_fill(float interval, string zeroth, string first, string second, st
        //   1 second
        //   2 seconds
        //   3 seconds
-       //   etc... minutes, hours, days, etc. 
+       //   etc... minutes, hours, days, etc.
 
        switch(floor(interval))
        {
@@ -111,28 +111,28 @@ string process_time(float outputtype, float seconds)
 {
        float tmp_hours = 0, tmp_minutes = 0, tmp_seconds = 0;
        float tmp_years = 0, tmp_weeks = 0, tmp_days = 0;
-       
+
        tmp_seconds = floor(seconds);
 
        if(tmp_seconds)
        {
                tmp_minutes = floor(tmp_seconds / 60);
-               
+
                if(tmp_minutes)
                {
                        tmp_seconds -= (tmp_minutes * 60);
                        tmp_hours = floor(tmp_minutes / 60);
-                       
+
                        if(tmp_hours)
                        {
                                tmp_minutes -= (tmp_hours * 60);
                                tmp_days = floor(tmp_hours / 24);
-                               
+
                                if(tmp_days)
                                {
                                        tmp_hours -= (tmp_days * 24);
                                        tmp_weeks = floor(tmp_days / 7);
-                                       
+
                                        if(tmp_weeks)
                                        {
                                                tmp_days -= (tmp_weeks * 7);
index a9ed986deef9e774a4a3c38b0eaaf50a30dfce82..cfe012275cdeb6105f4009c6e76d79baf46beae4 100644 (file)
@@ -34,6 +34,9 @@
                CSQCMODEL_PROPERTY_SCALED(256, float, ReadByte, WriteByte, glowmod_x, 255, 0, 255) \
                CSQCMODEL_PROPERTY_SCALED(256, float, ReadByte, WriteByte, glowmod_y, 255, 0, 255) \
                CSQCMODEL_PROPERTY_SCALED(256, float, ReadByte, WriteByte, glowmod_z, 255, 0, 255) \
+               CSQCMODEL_PROPERTY_SCALED(256, float, ReadByte, WriteByte, colormod_x, 255, 0, 255) \
+               CSQCMODEL_PROPERTY_SCALED(256, float, ReadByte, WriteByte, colormod_y, 255, 0, 255) \
+               CSQCMODEL_PROPERTY_SCALED(256, float, ReadByte, WriteByte, colormod_z, 255, 0, 255) \
        CSQCMODEL_ENDIF \
        CSQCMODEL_IF(isplayer) \
                CSQCMODEL_PROPERTY(128, float, ReadByte, WriteByte, anim_state) \
@@ -44,8 +47,9 @@
                CSQCMODEL_ENDIF \
                CSQCMODEL_PROPERTY(512, float, ReadChar, WriteChar, anim_upper_action) \
                CSQCMODEL_PROPERTY(512, float, ReadApproxPastTime, WriteApproxPastTime, anim_upper_time) \
-               CSQCMODEL_PROPERTY(1024, float, ReadAngle, WriteAngle, v_angle_x) \
-       CSQCMODEL_ENDIF
+       CSQCMODEL_ENDIF \
+       CSQCMODEL_PROPERTY(1024, float, ReadAngle, WriteAngle, v_angle_x) \
+       CSQCMODEL_PROPERTY_SCALED(4096, float, ReadByte, WriteByte, scale, 16, 0, 255)
 // TODO get rid of colormod/glowmod here, find good solution for nex charge glowmod hack; also get rid of some useless properties on non-players that only exist for CopyBody
 
 // add hook function calls here
index e17cd330e643f16b5e5a720b75c56d5d3f4250ec..4f96f7500eb96fe1faa8a584bdfdbd34de932cf3 100644 (file)
@@ -73,14 +73,12 @@ entity deathtypes[DT_MAX];
                deathtypes[(name - DT_FIRST)] = deathent; \
                deathent.classname = "deathtype"; \
                deathent.nent_name = #name; \
-               #if (msg_death != NO_MSG) \
+               if (msg_death != NO_MSG) \
                        deathent.death_msgself = msg_multi_notifs[msg_death - 1]; \
-               #endif \
-               #if (msg_death_by != NO_MSG) \
+               if (msg_death_by != NO_MSG) \
                        deathent.death_msgmurder = msg_multi_notifs[msg_death_by - 1]; \
-               #endif \
        } \
-       ACCUMULATE_FUNCTION(RegisterDeathtypes, RegisterDeathtype_##name)
+       ACCUMULATE_FUNCTION(RegisterDeathtypes, RegisterDeathtype_##name);
 
 DEATHTYPES
 #undef DEATHTYPE
@@ -98,7 +96,7 @@ string Deathtype_Name(float deathtype)
        if(DEATH_ISSPECIAL(deathtype))
        {
                entity deathent = deathtypes[(deathtype - DT_FIRST)];
-               if not(deathent) { backtrace("Deathtype_Name: Could not find deathtype entity!\n"); return ""; }
+               if (!deathent) { backtrace("Deathtype_Name: Could not find deathtype entity!\n"); return ""; }
                return deathent.nent_name;
        }
        else { return ftos(deathtype); }
index df71154be885faea83287a56d6a131da2746ca21..3fddd70d23187131d433c72d00bbe87691bc5887 100644 (file)
@@ -51,11 +51,11 @@ vector damage_explosion_calcpush(vector explosion_f, vector target_v, float spee
        v = explosion_calcpush(explosion_f * speedfactor, m, target_v, 1, 0);
        // the factor we then get is:
        //   1
-       print(sprintf("MASS: %f\nv: %v -> %v\nENERGY BEFORE == %f + %f = %f\nENERGY AFTER >= %f\n",
+       printf("MASS: %f\nv: %v -> %v\nENERGY BEFORE == %f + %f = %f\nENERGY AFTER >= %f\n",
                m,
                target_v, target_v + v,
                target_v * target_v, m * explosion_f * speedfactor * explosion_f * speedfactor, target_v * target_v + m * explosion_f * speedfactor * explosion_f * speedfactor,
-               (target_v + v) * (target_v + v)));
+               (target_v + v) * (target_v + v));
        return v;
 #endif
        return explosion_f * explosion_calcpush_getmultiplier(explosion_f * speedfactor, target_v);
diff --git a/qcsrc/common/if-this-file-errors-scroll-up-and-fix-the-warnings.fteqccfail b/qcsrc/common/if-this-file-errors-scroll-up-and-fix-the-warnings.fteqccfail
deleted file mode 100644 (file)
index e69de29..0000000
index 45510437fcf50e830ad97026d587040468495423..35cc00232bfd329eab32beeb5907f6707852f7aa 100644 (file)
@@ -136,7 +136,7 @@ void register_weapons_done();
 #include "../server/w_all.qc"
 
 #undef REGISTER_WEAPON
-ACCUMULATE_FUNCTION(RegisterWeapons, register_weapons_done)
+ACCUMULATE_FUNCTION(RegisterWeapons, register_weapons_done);
 
 
 string W_FixWeaponOrder(string order, float complete);
index 16e572615b1ca4899f9a1fbfc13261339c34f267..21263719b32d035697b8d12cb13fe4926cde81c0 100644 (file)
@@ -84,7 +84,7 @@ float MapInfo_Cache_Retrieve(string map)
 
 // GLOB HANDLING (for all BSP files)
 float _MapInfo_globopen;
-float _MapInfo_globcount; 
+float _MapInfo_globcount;
 float _MapInfo_globhandle;
 string _MapInfo_GlobItem(float i)
 {
@@ -141,7 +141,7 @@ float _MapInfo_FilterList_cmp(float i, float j, entity pass)
 float MapInfo_FilterGametype(float pGametype, float pFeatures, float pFlagsRequired, float pFlagsForbidden, float pAbortOnGenerate)
 {
        float i, j;
-       if not(_MapInfo_filtered_allocated)
+       if (!_MapInfo_filtered_allocated)
        {
                _MapInfo_filtered_allocated = 1;
                _MapInfo_filtered = buf_create();
@@ -164,7 +164,7 @@ float MapInfo_FilterGametype(float pGametype, float pFeatures, float pFlagsRequi
        }
        MapInfo_count = j + 1;
        MapInfo_ClearTemps();
-       
+
        // sometimes the glob isn't sorted nicely, so fix it here...
        heapsort(MapInfo_count, _MapInfo_FilterList_swap, _MapInfo_FilterList_cmp, world);
 
@@ -257,7 +257,7 @@ float _MapInfo_Generate(string pFilename) // 0: failure, 1: ok ent, 2: ok bsp
 
        for(;;)
        {
-               if not((s = fgets(fh)))
+               if (!((s = fgets(fh))))
                        break;
                if(inWorldspawn == 1)
                        if(startsWith(s, "}"))
@@ -370,8 +370,6 @@ float _MapInfo_Generate(string pFilename) // 0: failure, 1: ok ent, 2: ok bsp
                        MapInfo_Map_supportedGametypes |= MAPINFO_TYPE_FREEZETAG;
                        MapInfo_Map_supportedGametypes |= MAPINFO_TYPE_CA;
                }
-               if(                     diameter < 4096)
-                       MapInfo_Map_supportedGametypes |= MAPINFO_TYPE_ARENA;
                if(spawnpoints >= 12 && diameter > 5120)
                        MapInfo_Map_supportedGametypes |= MAPINFO_TYPE_KEYHUNT;
        }
@@ -416,7 +414,6 @@ string _MapInfo_GetDefault(float t)
                case MAPINFO_TYPE_DOMINATION:      return "200 20 0";
                case MAPINFO_TYPE_CTF:             return "300 20 10 0";
                case MAPINFO_TYPE_LMS:             return "9 20 0";
-               case MAPINFO_TYPE_ARENA:           return "10 20 0";
                case MAPINFO_TYPE_CA:              return "10 20 0";
                case MAPINFO_TYPE_KEYHUNT:         return "1000 20 3 0";
                case MAPINFO_TYPE_ASSAULT:         return "20 0";
@@ -442,7 +439,7 @@ void _MapInfo_Map_ApplyGametype(string s, float pWantedType, float pThisType, fl
 
        if(load_default)
                _MapInfo_Map_ApplyGametype(_MapInfo_GetDefault(pThisType), pWantedType, pThisType, FALSE);
-       
+
        if(pWantedType == MAPINFO_TYPE_ASSAULT || pWantedType == MAPINFO_TYPE_ONSLAUGHT || pWantedType == MAPINFO_TYPE_RACE || pWantedType == MAPINFO_TYPE_CTS) // these modes don't use fraglimit
        {
                cvar_set("fraglimit", "0");
@@ -509,7 +506,7 @@ void _MapInfo_Map_ApplyGametype(string s, float pWantedType, float pThisType, fl
                s = cdr(s);
        }
        */
-       
+
        // rc = timelimit timelimit_qualification laps laps_teamplay
        if(pWantedType == MAPINFO_TYPE_RACE)
        {
@@ -694,7 +691,7 @@ float MapInfo_Type_FromString(string t)
 string MapInfo_Type_ToString(float t)
 {
        entity e;
-       if(t == MAPINFO_TYPE_ALL)     
+       if(t == MAPINFO_TYPE_ALL)
                return "all";
        for(e = MapInfo_Type_first; e; e = e.enemy)
                if(t == e.items)
@@ -735,12 +732,12 @@ void _MapInfo_Parse_Settemp(string pFilename, string acl, float type, string s,
        o = strstrofs(s, "\"", 0);
        if(o >= 0)
                s = substring(s, 0, o);
-       
+
        //   remove // comments
        o = strstrofs(s, "//", 0);
        if(o >= 0)
                s = substring(s, 0, o);
-       
+
        //   remove trailing spaces
        while(substring(s, -1, 1) == " ")
                s = substring(s, 0, -2);
@@ -756,7 +753,7 @@ void _MapInfo_Parse_Settemp(string pFilename, string acl, float type, string s,
                        {
                                for(;;)
                                {
-                                       if not((s = fgets(fh)))
+                                       if (!((s = fgets(fh))))
                                                break;
 
                                        // catch different sorts of comments
@@ -784,9 +781,9 @@ void _MapInfo_Parse_Settemp(string pFilename, string acl, float type, string s,
        }
        else if(t == "")
                print("Map ", pFilename, " contains a potentially harmful setting, ignored\n");
-       else if not(cvar_value_issafe(t))
+       else if (!cvar_value_issafe(t))
                print("Map ", pFilename, " contains a potentially harmful setting, ignored\n");
-       else if not (cvar_value_issafe(s))
+       else if (!cvar_value_issafe(s))
                print("Map ", pFilename, " contains a potentially harmful setting, ignored\n");
        else if(matchacl(MAPINFO_SETTEMP_ACL_SYSTEM, t) <= 0)
                print("Map ", pFilename, " contains a potentially harmful setting, ignored\n");
@@ -913,7 +910,7 @@ float MapInfo_Get_ByName_NoFallbacks(string pFilename, float pAllowGenerate, flo
                        else
                                fputs(fh, "// uncomment this if you added turrets: has turrets\n");
                        if(MapInfo_Map_supportedFeatures & MAPINFO_FEATURE_VEHICLES)
-                               fputs(fh, "has weapons\n");
+                               fputs(fh, "has vehicles\n");
                        else
                                fputs(fh, "// uncomment this if you added vehicles: has vehicles\n");
                        if(MapInfo_Map_flags & MAPINFO_FLAG_FRUSTRATING)
@@ -946,7 +943,7 @@ float MapInfo_Get_ByName_NoFallbacks(string pFilename, float pAllowGenerate, flo
        _MapInfo_Map_Reset();
        for(;;)
        {
-               if not((s = fgets(fh)))
+               if (!((s = fgets(fh))))
                        break;
 
                // catch different sorts of comments
@@ -992,6 +989,10 @@ float MapInfo_Get_ByName_NoFallbacks(string pFilename, float pAllowGenerate, flo
                {
                        MapInfo_Map_flags |= MAPINFO_FLAG_FRUSTRATING;
                }
+               else if(t == "noautomaplist")
+               {
+                       MapInfo_Map_flags |= MAPINFO_FLAG_NOAUTOMAPLIST;
+               }
                else if(t == "type")
                {
                        t = car(s); s = cdr(s);
@@ -1074,7 +1075,7 @@ float MapInfo_Get_ByName_NoFallbacks(string pFilename, float pAllowGenerate, flo
                }
                else if(t == "fog")
                {
-                       if not(cvar_value_issafe(s))
+                       if (!cvar_value_issafe(s))
                                print("Map ", pFilename, " contains a potentially harmful fog setting, ignored\n");
                        else
                                MapInfo_Map_fog = s;
@@ -1084,7 +1085,7 @@ float MapInfo_Get_ByName_NoFallbacks(string pFilename, float pAllowGenerate, flo
                        t = car(s); s = cdr(s);
                        if(pGametypeToSet) // FIXME is this check right here?
                        {
-                               if not(cvar_value_issafe(t))
+                               if (!cvar_value_issafe(t))
                                        print("Map ", pFilename, " contains a potentially harmful cdtrack, ignored\n");
                                else
                                        MapInfo_Map_clientstuff = strcat(
@@ -1117,7 +1118,7 @@ float MapInfo_Get_ByName(string pFilename, float pAllowGenerate, float pGametype
        if(cvar("g_tdm_on_dm_maps"))
        {
                // if this is set, all DM maps support TDM too
-               if not(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_TEAM_DEATHMATCH)
+               if (!(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_TEAM_DEATHMATCH))
                        if(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_DEATHMATCH)
                                _MapInfo_Map_ApplyGametypeEx ("", pGametypeToSet, MAPINFO_TYPE_TEAM_DEATHMATCH);
        }
@@ -1247,7 +1248,7 @@ void MapInfo_LoadMap(string s, float reinit)
        //      print("EMERGENCY: can't play the selected map in the given game mode. Falling back to DM.\n");
        //      MapInfo_SwitchGameType(MAPINFO_TYPE_DEATHMATCH);
        //}
-       
+
        cvar_settemp_restore();
        if(reinit)
                localcmd(strcat("\nmap ", s, "\n"));
@@ -1365,11 +1366,11 @@ float MapInfo_ForbiddenFlags()
        f = MAPINFO_FLAG_FORBIDDEN;
 
 #ifndef MENUQC
-       if not(cvar("g_maplist_allow_hidden"))
+       if (!cvar("g_maplist_allow_hidden"))
 #endif
                f |= MAPINFO_FLAG_HIDDEN;
 
-       if not(cvar("g_maplist_allow_frustrating"))
+       if (!cvar("g_maplist_allow_frustrating"))
                f |= MAPINFO_FLAG_FRUSTRATING;
 
        return f;
index db08fdf07c6a71116099cfa384d325ba19230ac6..eb93b8de817df90c268d3d4fa51b589bb68a6f18 100644 (file)
@@ -33,49 +33,46 @@ entity MapInfo_Type_last;
 #define IS_GAMETYPE(NAME) \
        (MapInfo_LoadedGametype == MAPINFO_TYPE_##NAME)
 
-REGISTER_GAMETYPE(_("Deathmatch"),dm,g_dm,DEATHMATCH,"timelimit=20 pointlimit=30 leadlimit=0")
+REGISTER_GAMETYPE(_("Deathmatch"),dm,g_dm,DEATHMATCH,"timelimit=20 pointlimit=30 leadlimit=0");
 #define g_dm IS_GAMETYPE(DEATHMATCH)
 
-REGISTER_GAMETYPE(_("Last Man Standing"),lms,g_lms,LMS,"timelimit=20 lives=9 leadlimit=0")
+REGISTER_GAMETYPE(_("Last Man Standing"),lms,g_lms,LMS,"timelimit=20 lives=9 leadlimit=0");
 #define g_lms IS_GAMETYPE(LMS)
 
-REGISTER_GAMETYPE(_("Arena"),arena,g_arena,ARENA,"timelimit=20 pointlimit=10 leadlimit=0")
-#define g_arena IS_GAMETYPE(ARENA)
-
-REGISTER_GAMETYPE(_("Race"),rc,g_race,RACE,"timelimit=20 qualifying_timelimit=5 laplimit=7 teamlaplimit=15 leadlimit=0")
+REGISTER_GAMETYPE(_("Race"),rc,g_race,RACE,"timelimit=20 qualifying_timelimit=5 laplimit=7 teamlaplimit=15 leadlimit=0");
 #define g_race IS_GAMETYPE(RACE)
 
-REGISTER_GAMETYPE(_("Race CTS"),cts,g_cts,CTS,"timelimit=20 skill=-1")
+REGISTER_GAMETYPE(_("Race CTS"),cts,g_cts,CTS,"timelimit=20 skill=-1");
 #define g_cts IS_GAMETYPE(CTS)
 
-REGISTER_GAMETYPE(_("Team Deathmatch"),tdm,g_tdm,TEAM_DEATHMATCH,"timelimit=20 pointlimit=50 teams=2 leadlimit=0")
+REGISTER_GAMETYPE(_("Team Deathmatch"),tdm,g_tdm,TEAM_DEATHMATCH,"timelimit=20 pointlimit=50 teams=2 leadlimit=0");
 #define g_tdm IS_GAMETYPE(TEAM_DEATHMATCH)
 
-REGISTER_GAMETYPE(_("Capture the Flag"),ctf,g_ctf,CTF,"timelimit=20 caplimit=10 leadlimit=0")
+REGISTER_GAMETYPE(_("Capture the Flag"),ctf,g_ctf,CTF,"timelimit=20 caplimit=10 leadlimit=0");
 #define g_ctf IS_GAMETYPE(CTF)
 
-REGISTER_GAMETYPE(_("Clan Arena"),ca,g_ca,CA,"timelimit=20 pointlimit=10 leadlimit=0")
+REGISTER_GAMETYPE(_("Clan Arena"),ca,g_ca,CA,"timelimit=20 pointlimit=10 leadlimit=0");
 #define g_ca IS_GAMETYPE(CA)
 
-REGISTER_GAMETYPE(_("Domination"),dom,g_domination,DOMINATION,"timelimit=20 pointlimit=200 teams=2 leadlimit=0")
+REGISTER_GAMETYPE(_("Domination"),dom,g_domination,DOMINATION,"timelimit=20 pointlimit=200 teams=2 leadlimit=0");
 #define g_domination IS_GAMETYPE(DOMINATION)
 
-REGISTER_GAMETYPE(_("Key Hunt"),kh,g_keyhunt,KEYHUNT,"timelimit=20 pointlimit=1000 teams=3 leadlimit=0")
+REGISTER_GAMETYPE(_("Key Hunt"),kh,g_keyhunt,KEYHUNT,"timelimit=20 pointlimit=1000 teams=3 leadlimit=0");
 #define g_keyhunt IS_GAMETYPE(KEYHUNT)
 
-REGISTER_GAMETYPE(_("Assault"),as,g_assault,ASSAULT,"timelimit=20")
+REGISTER_GAMETYPE(_("Assault"),as,g_assault,ASSAULT,"timelimit=20");
 #define g_assault IS_GAMETYPE(ASSAULT)
 
-REGISTER_GAMETYPE(_("Onslaught"),ons,g_onslaught,ONSLAUGHT,"timelimit=20")
+REGISTER_GAMETYPE(_("Onslaught"),ons,g_onslaught,ONSLAUGHT,"timelimit=20");
 #define g_onslaught IS_GAMETYPE(ONSLAUGHT)
 
-REGISTER_GAMETYPE(_("Nexball"),nb,g_nexball,NEXBALL,"timelimit=20 pointlimit=5 leadlimit=0")
+REGISTER_GAMETYPE(_("Nexball"),nb,g_nexball,NEXBALL,"timelimit=20 pointlimit=5 leadlimit=0");
 #define g_nexball IS_GAMETYPE(NEXBALL)
 
-REGISTER_GAMETYPE(_("Freeze Tag"),ft,g_freezetag,FREEZETAG,"timelimit=20 pointlimit=10 teams=2 leadlimit=0")
+REGISTER_GAMETYPE(_("Freeze Tag"),ft,g_freezetag,FREEZETAG,"timelimit=20 pointlimit=10 teams=2 leadlimit=0");
 #define g_freezetag IS_GAMETYPE(FREEZETAG)
 
-REGISTER_GAMETYPE(_("Keepaway"),ka,g_keepaway,KEEPAWAY,"timelimit=20 pointlimit=30")
+REGISTER_GAMETYPE(_("Keepaway"),ka,g_keepaway,KEEPAWAY,"timelimit=20 pointlimit=30");
 #define g_keepaway IS_GAMETYPE(KEEPAWAY)
 
 const float MAPINFO_FEATURE_WEAPONS       = 1; // not defined for minstagib-only maps
@@ -85,6 +82,7 @@ const float MAPINFO_FEATURE_TURRETS       = 4;
 const float MAPINFO_FLAG_HIDDEN           = 1; // not in lsmaps/menu/vcall/etc., can just be changed to manually
 const float MAPINFO_FLAG_FORBIDDEN        = 2; // don't even allow the map by a cvar setting that allows hidden maps
 const float MAPINFO_FLAG_FRUSTRATING      = 4; // this map is near impossible to play, enable at your own risk
+const float MAPINFO_FLAG_NOAUTOMAPLIST    = 8; // do not include when automatically building maplist (counts as hidden for maplist building purposes)
 
 float MapInfo_count;
 
index 625e091dcc68994ca9a3e5bdd8f4a327f3a1cff9..caaae8b4967bfa70c214d998ab05efc5aeacb94b 100644 (file)
@@ -5,10 +5,10 @@ void sv_notice_join_think()
     float argc = tokenizebyseparator(autocvar_sv_join_notices, "|");
     if(argc > 0)
     {
-        float i; 
-        for(i = argc - 1; i >= 0; --i)    
+        float i;
+        for(i = argc - 1; i >= 0; --i)
             sv_notice_to(self.owner, argv(i), autocvar_sv_join_notices_time, FALSE);
-    }    
+    }
     remove(self);
 }
 
@@ -21,7 +21,7 @@ void sv_notice_join()
     entity n = spawn();
     n.owner = self;
     n.think = sv_notice_join_think;
-    n.nextthink = time + 1;    
+    n.nextthink = time + 1;
 }
 
 void sv_notice_to(entity _to, string _notice, float _howlong, float _modal)
@@ -39,7 +39,7 @@ void sv_notice_toall(string _notice, float _howlong, float _modal)
     entity _head;
     FOR_EACH_REALCLIENT(_head)
         sv_notice_to(_head, _notice, _howlong, _modal);
-    
+
 }
 
 #endif // SVQC
@@ -65,52 +65,52 @@ float cl_notice_run()
     entity _notes;
     string _notice;
     float m = FALSE;
-    
+
     _notes = findchain(classname, "sv_notice");
     if(!_notes)
         return FALSE;
     #define M1 30
     #define M2 10
-    
+
     vector v1, v2 = '0 0 0', v3;
     v1 = '1 1 0' * M1;
     v2_x = vid_conwidth - (2 * M1);
     v2_y = vid_conheight - (2 * M1);
-    
+
     drawfill(v1, v2, '0 0 0', 0.5, DRAWFLAG_NORMAL);
     v1 = '1 1 0' * (M1 + M2);
     v2_x = vid_conwidth - (2 * (M1 + M2));
     v2_y = vid_conheight - (2 * (M1 + M2));
     drawfill(v1, v2, '0.5 0.5 0.5', 0.5, DRAWFLAG_NORMAL);
     v3 = v1 + '10 10 0';
-    
+
     #define OUT(s,z) drawcolorcodedstring(v3, s, '1 1 0' * z, 1, DRAWFLAG_NORMAL); v3_y += z + 4
-    
+
     OUT(_("^1Server notices:"), 32);
-    
+
     //drawcolorcodedstring(v1 + '5 5 0', "^1Server notices:", '32 32 0', 1, DRAWFLAG_NORMAL);
     while(_notes)
     {
-   
+
         _notice = sprintf(_("^7%s (^3%d sec left)"), _notes.netname , rint(_notes.alpha - time));
         OUT(_notice, 16);
 
-        if(_notes.skin) 
+        if(_notes.skin)
             m = TRUE;
-        
+
         if(_notes.alpha <= time)
         {
             _notes.think = SUB_Remove;
             _notes.nextthink = time;
         }
-        
-        _notes = _notes.chain;        
+
+        _notes = _notes.chain;
     }
-    
+
     #undef OUT
     #undef M1
     #undef M2
-    
+
     return m;
 }
 
index c2420d4435ba7bdc7ca4647edcbfb015164ba9eb..4fd6e1f25dcc37373a00a04a565aec114867ddb2 100644 (file)
@@ -88,38 +88,38 @@ string Notification_CheckArgs(
                                { checkargs = sprintf("%sNo client provided!", checkargs); }
                        break;
                }
-               
+
                case NOTIF_ALL_EXCEPT:
                {
                        if(IS_NOT_A_CLIENT(client))
                                { checkargs = sprintf("%sException can't be a non-client!", checkargs); }
                        break;
                }
-               
+
                case NOTIF_ALL:
                {
                        if(client)
                                { checkargs = sprintf("%sEntity provided when world was required!", checkargs); }
                        break;
                }
-               
+
                case NOTIF_TEAM:
                {
-                       if not(teamplay)
+                       if (!teamplay)
                                { checkargs = sprintf("%sTeamplay not active!", checkargs); }
-                       //else if not(client.team) { checkargs = sprintf("%sNo team provided!", checkargs); }
+                       //else if (!client.team) { checkargs = sprintf("%sNo team provided!", checkargs); }
                        break;
                }
-               
+
                case NOTIF_TEAM_EXCEPT:
                {
-                       if not(teamplay)
+                       if (!teamplay)
                                { checkargs = sprintf("%sTeamplay not active!", checkargs); }
                        else if(IS_NOT_A_CLIENT(client))
                                { checkargs = sprintf("%sException can't be a non-client!", checkargs); }
                        break;
                }
-               
+
                default: { checkargs = sprintf("%sImproper broadcast: %d!", checkargs, broadcast); break; }
        }
        return checkargs;
@@ -225,12 +225,12 @@ void Destroy_All_Notifications(void)
 {
        entity notif;
        float i;
-       
+
        #define DESTROY_LOOP(type,count) \
                for(i = 1; i <= count; ++i) \
                { \
                        notif = Get_Notif_Ent(type, i); \
-                       if not(notif) { backtrace("Destroy_All_Notifications(): Missing notification entity!\n"); return; } \
+                       if (!notif) { backtrace("Destroy_All_Notifications(): Missing notification entity!\n"); return; } \
                        Destroy_Notification_Entity(notif); \
                }
 
@@ -281,7 +281,7 @@ string Process_Notif_Line(
        // done to both MSG_INFO and MSG_CENTER
        if(substring(input, (strlen(input) - 1), 1) == "\n")
        {
-               print(sprintf(
+               printf(
                        strcat(
                                "^1TRAILING NEW LINE AT END OF NOTIFICATION: ",
                                "^7net_type = %s, net_name = %s, string = %s.\n"
@@ -289,7 +289,7 @@ string Process_Notif_Line(
                        notiftype,
                        notifname,
                        stringtype
-               ));
+               );
                notif_error = TRUE;
                input = substring(input, 1, (strlen(input) - 1));
        }
@@ -316,7 +316,7 @@ string Process_Notif_Args(
                        {
                                if(sel_num == NOTIF_MAX_ARGS)
                                {
-                                       print(sprintf(
+                                       printf(
                                                strcat(
                                                        "^1NOTIFICATION HAS TOO MANY ARGUMENTS: ",
                                                        "^7net_type = %s, net_name = %s, max args = %d.\n"
@@ -324,22 +324,31 @@ string Process_Notif_Args(
                                                notiftype,
                                                notifname,
                                                NOTIF_MAX_ARGS
-                                       ));
+                                       );
                                        notif_error = TRUE;
                                        break;
                                }
 
                                switch(strtolower(selected))
                                {
-                                       #define ARG_CASE(prog,selected,result) \
-                                               #if (prog != ARG_DC) \
-                                                       case selected: { ++sel_num; break; } \
-                                               #endif
+                                       #define ARG_CASE_ARG_CS_SV_HA(selected,result) case selected: { ++sel_num; break; }
+                                       #define ARG_CASE_ARG_CS_SV_DC(selected,result) case selected: { ++sel_num; break; }
+                                       #define ARG_CASE_ARG_CS_SV(selected,result)    case selected: { ++sel_num; break; }
+                                       #define ARG_CASE_ARG_CS(selected,result)       case selected: { ++sel_num; break; }
+                                       #define ARG_CASE_ARG_SV(selected,result)       case selected: { ++sel_num; break; }
+                                       #define ARG_CASE_ARG_DC(selected,result)
+                                       #define ARG_CASE(prog,selected,result)         ARG_CASE_##prog(selected,result)
                                        NOTIF_ARGUMENT_LIST
                                        #undef ARG_CASE
+                                       #undef ARG_CASE_ARG_DC
+                                       #undef ARG_CASE_ARG_SV
+                                       #undef ARG_CASE_ARG_CS
+                                       #undef ARG_CASE_ARG_CS_SV
+                                       #undef ARG_CASE_ARG_CS_SV_DC
+                                       #undef ARG_CASE_ARG_CS_SV_HA
                                        default:
                                        {
-                                               print(sprintf(
+                                               printf(
                                                        strcat(
                                                                "^1NOTIFICATION WITH UNKNOWN TOKEN IN ARGUMENT STRING: ",
                                                                "^7net_type = %s, net_name = %s, args arg = '%s'.\n"
@@ -347,7 +356,7 @@ string Process_Notif_Args(
                                                        notiftype,
                                                        notifname,
                                                        selected
-                                               ));
+                                               );
                                                notif_error = TRUE;
                                                break;
                                        }
@@ -358,7 +367,7 @@ string Process_Notif_Args(
                        {
                                if(sel_num == NOTIF_MAX_HUDARGS)
                                {
-                                       print(sprintf(
+                                       printf(
                                                strcat(
                                                        "^1NOTIFICATION HAS TOO MANY ARGUMENTS: ",
                                                        "^7net_type = %s, net_name = %s, max hudargs = %d.\n"
@@ -366,22 +375,31 @@ string Process_Notif_Args(
                                                notiftype,
                                                notifname,
                                                NOTIF_MAX_HUDARGS
-                                       ));
+                                       );
                                        notif_error = TRUE;
                                        break;
                                }
 
                                switch(strtolower(selected))
                                {
-                                       #define ARG_CASE(prog,selected,result) \
-                                               #if (prog == ARG_CS_SV_HA) \
-                                                       case selected: { ++sel_num; break; } \
-                                               #endif
+                                       #define ARG_CASE_ARG_CS_SV_HA(selected,result) case selected: { ++sel_num; break; }
+                                       #define ARG_CASE_ARG_CS_SV_DC(selected,result)
+                                       #define ARG_CASE_ARG_CS_SV(selected,result)
+                                       #define ARG_CASE_ARG_CS(selected,result)
+                                       #define ARG_CASE_ARG_SV(selected,result)
+                                       #define ARG_CASE_ARG_DC(selected,result)
+                                       #define ARG_CASE(prog,selected,result)         ARG_CASE_##prog(selected,result)
                                        NOTIF_ARGUMENT_LIST
                                        #undef ARG_CASE
+                                       #undef ARG_CASE_ARG_DC
+                                       #undef ARG_CASE_ARG_SV
+                                       #undef ARG_CASE_ARG_CS
+                                       #undef ARG_CASE_ARG_CS_SV
+                                       #undef ARG_CASE_ARG_CS_SV_DC
+                                       #undef ARG_CASE_ARG_CS_SV_HA
                                        default:
                                        {
-                                               print(sprintf(
+                                               printf(
                                                        strcat(
                                                                "^1NOTIFICATION WITH UNKNOWN TOKEN IN ARGUMENT STRING: ",
                                                                "^7net_type = %s, net_name = %s, hudargs arg = '%s'.\n"
@@ -389,18 +407,18 @@ string Process_Notif_Args(
                                                        notiftype,
                                                        notifname,
                                                        selected
-                                               ));
+                                               );
                                                notif_error = TRUE;
                                                break;
                                        }
                                }
                                break;
                        }
-                       case 3: // durcnt 
+                       case 3: // durcnt
                        {
                                if(sel_num == NOTIF_MAX_DURCNT)
                                {
-                                       print(sprintf(
+                                       printf(
                                                strcat(
                                                        "^1NOTIFICATION HAS TOO MANY ARGUMENTS: ",
                                                        "^7net_type = %s, net_name = %s, max durcnt = %d.\n"
@@ -408,25 +426,34 @@ string Process_Notif_Args(
                                                notiftype,
                                                notifname,
                                                NOTIF_MAX_DURCNT
-                                       ));
+                                       );
                                        notif_error = TRUE;
                                        break;
                                }
 
                                switch(strtolower(selected))
                                {
-                                       #define ARG_CASE(prog,selected,result) \
-                                               #if (prog == ARG_CS_SV_DC) || (prog == ARG_DC) \
-                                                       case selected: { ++sel_num; break; } \
-                                               #endif
+                                       #define ARG_CASE_ARG_CS_SV_HA(selected,result)
+                                       #define ARG_CASE_ARG_CS_SV_DC(selected,result) case selected: { ++sel_num; break; }
+                                       #define ARG_CASE_ARG_CS_SV(selected,result)
+                                       #define ARG_CASE_ARG_CS(selected,result)
+                                       #define ARG_CASE_ARG_SV(selected,result)
+                                       #define ARG_CASE_ARG_DC(selected,result)       case selected: { ++sel_num; break; }
+                                       #define ARG_CASE(prog,selected,result)         ARG_CASE_##prog(selected,result)
                                        NOTIF_ARGUMENT_LIST
                                        #undef ARG_CASE
+                                       #undef ARG_CASE_ARG_DC
+                                       #undef ARG_CASE_ARG_SV
+                                       #undef ARG_CASE_ARG_CS
+                                       #undef ARG_CASE_ARG_CS_SV
+                                       #undef ARG_CASE_ARG_CS_SV_DC
+                                       #undef ARG_CASE_ARG_CS_SV_HA
                                        default:
                                        {
                                                if(ftos(stof(selected)) != "") { ++sel_num; }
                                                else
                                                {
-                                                       print(sprintf(
+                                                       printf(
                                                                strcat(
                                                                        "^1NOTIFICATION WITH UNKNOWN TOKEN IN ARGUMENT STRING: ",
                                                                        "^7net_type = %s, net_name = %s, durcnt arg = '%s'.\n"
@@ -434,7 +461,7 @@ string Process_Notif_Args(
                                                                notiftype,
                                                                notifname,
                                                                selected
-                                                       ));
+                                                       );
                                                        notif_error = TRUE;
                                                }
                                                break;
@@ -456,7 +483,7 @@ void Create_Notification_Entity(
        float strnum,
        float flnum,
        /* MSG_ANNCE */
-       float channel, 
+       float channel,
        string snd,
        float vol,
        float position,
@@ -534,7 +561,7 @@ void Create_Notification_Entity(
        notif.nent_type = typeid;
        notif.nent_id = nameid;
        notif.nent_name = strzone(namestring);
-       
+
        string typestring = Get_Notif_TypeName(typeid);
 
        // Other pre-notif-setup requisites
@@ -549,7 +576,7 @@ void Create_Notification_Entity(
                {
                        // Set MSG_ANNCE information and handle precaching
                        #ifdef CSQC
-                       if not(GENTLE && (var_cvar == 1))
+                       if (!(GENTLE && (var_cvar == 1)))
                        {
                                if(snd != "")
                                {
@@ -564,14 +591,14 @@ void Create_Notification_Entity(
                                }
                                else
                                {
-                                       print(sprintf(
+                                       printf(
                                                strcat(
                                                        "^1NOTIFICATION WITH NO SOUND: ",
                                                        "^7net_type = %s, net_name = %s.\n"
                                                ),
                                                typestring,
                                                namestring
-                                       ));
+                                       );
                                        notif_error = TRUE;
                                }
                        }
@@ -582,7 +609,7 @@ void Create_Notification_Entity(
 
                        break;
                }
-               
+
                case MSG_INFO:
                case MSG_CENTER:
                {
@@ -611,7 +638,7 @@ void Create_Notification_Entity(
                                        }
                                        else if((hudargs == "") && (durcnt ==""))
                                        {
-                                               print(sprintf(
+                                               printf(
                                                        strcat(
                                                                "^1NOTIFICATION HAS ARG COUNTS BUT NO ARGS OR HUDARGS OR DURCNT: ",
                                                                "^7net_type = %s, net_name = %s, strnum = %d, flnum = %d\n"
@@ -620,7 +647,7 @@ void Create_Notification_Entity(
                                                        namestring,
                                                        strnum,
                                                        flnum
-                                               ));
+                                               );
                                                notif_error = TRUE;
                                        }
                                }
@@ -641,31 +668,31 @@ void Create_Notification_Entity(
                                {
                                        notif.nent_hudargs = strzone(
                                                Process_Notif_Args(2, hudargs, typestring, namestring));
-                                               
+
                                        if(icon != "") { notif.nent_icon = strzone(icon); }
                                        else
                                        {
-                                               print(sprintf(
+                                               printf(
                                                        strcat(
                                                                "^1NOTIFICATION HAS HUDARGS BUT NO ICON: ",
                                                                "^7net_type = %s, net_name = %s.\n"
                                                        ),
                                                        typestring,
                                                        namestring
-                                               ));
+                                               );
                                                notif_error = TRUE;
                                        }
                                }
                                else if(icon != "")
                                {
-                                       print(sprintf(
+                                       printf(
                                                strcat(
                                                        "^1NOTIFICATION HAS ICON BUT NO HUDARGS: ",
                                                        "^7net_type = %s, net_name = %s.\n"
                                                ),
                                                typestring,
                                                namestring
-                                       ));
+                                       );
                                        notif_error = TRUE;
                                }
 
@@ -673,21 +700,21 @@ void Create_Notification_Entity(
                                {
                                        notif.nent_durcnt = strzone(
                                                Process_Notif_Args(3, durcnt, typestring, namestring));
-                                               
+
                                        if(cpid != NO_MSG) { notif.nent_cpid = cpid; }
                                        else
                                        {
-                                               print(sprintf(
+                                               printf(
                                                        strcat(
                                                                "^1NOTIFICATION HAS DURCNT BUT NO CPID: ",
                                                                "^7net_type = %s, net_name = %s.\n"
                                                        ),
                                                        typestring,
                                                        namestring
-                                               ));
+                                               );
                                                notif_error = TRUE;
                                        }
-                               } 
+                               }
                                else if(cpid != NO_MSG) { notif.nent_cpid = cpid; }
                                #endif
 
@@ -713,20 +740,20 @@ void Create_Notification_Entity(
                                        else if(normal != "") { SET_NOTIF_STRING(normal, "NORMAL") }
                                }
                                else if(normal != "") { SET_NOTIF_STRING(normal, "NORMAL") }
-                               
+
                                #undef SET_NOTIF_STRING
 
                                // Check to make sure a string was chosen
                                if(notif.nent_string == "")
                                {
-                                       print(sprintf(
+                                       printf(
                                                strcat(
                                                        "^1EMPTY NOTIFICATION: ",
                                                        "^7net_type = %s, net_name = %s.\n"
                                                ),
                                                typestring,
                                                namestring
-                                       ));
+                                       );
                                        notif_error = TRUE;
                                }
                        }
@@ -739,43 +766,43 @@ void Create_Notification_Entity(
                        // Set MSG_MULTI string/float counts
                        if((anncename == NO_MSG) && (infoname == NO_MSG) && (centername == NO_MSG))
                        {
-                               print(sprintf(
+                               printf(
                                        strcat(
                                                "^1NOTIFICATION WITH NO SUBCALLS: ",
                                                "^7net_type = %s, net_name = %s.\n"
                                        ),
                                        typestring,
                                        namestring
-                               ));
+                               );
                                notif_error = TRUE;
                        }
                        else
                        {
                                // announcements don't actually need any arguments, so lets not even count them.
                                if(anncename != NO_MSG) { notif.nent_msgannce = msg_annce_notifs[anncename - 1]; }
-                               
+
                                float infoname_stringcount = 0, infoname_floatcount = 0;
                                float centername_stringcount = 0, centername_floatcount = 0;
-                               
+
                                if(infoname != NO_MSG)
                                {
                                        notif.nent_msginfo = msg_info_notifs[infoname - 1];
                                        infoname_stringcount = notif.nent_msginfo.nent_stringcount;
                                        infoname_floatcount = notif.nent_msginfo.nent_floatcount;
                                }
-                               
+
                                if(centername != NO_MSG)
                                {
                                        notif.nent_msgcenter = msg_center_notifs[centername - 1];
                                        centername_stringcount = notif.nent_msgcenter.nent_stringcount;
                                        centername_floatcount = notif.nent_msgcenter.nent_floatcount;
                                }
-                               
+
                                // set the requirements of THIS notification to the totals of its subcalls
                                notif.nent_stringcount = max(infoname_stringcount, centername_stringcount);
                                notif.nent_floatcount = max(infoname_floatcount, centername_floatcount);
                        }
-                       
+
                        break;
                }
 
@@ -783,14 +810,14 @@ void Create_Notification_Entity(
                {
                        if((chtype == NO_MSG) || (optiona == NO_MSG) || (optionb == NO_MSG))
                        {
-                               print(sprintf(
+                               printf(
                                        strcat(
                                                "^1NOTIFICATION IS MISSING CHOICE PARAMS: ",
                                                "^7net_type = %s, net_name = %s.\n"
                                        ),
                                        typestring,
                                        namestring
-                               ));
+                               );
                                notif_error = TRUE;
                        }
                        else
@@ -821,7 +848,7 @@ void Create_Notification_Entity(
                                                notif.nent_optionb = msg_multi_notifs[optionb - 1];
                                                break;
                                        }
-                                       case MSG_CHOICE: // should we REALLY allow nested options?... 
+                                       case MSG_CHOICE: // should we REALLY allow nested options?...
                                        {
                                                notif.nent_optiona = msg_choice_notifs[optiona - 1];
                                                notif.nent_optionb = msg_choice_notifs[optionb - 1];
@@ -830,14 +857,14 @@ void Create_Notification_Entity(
 
                                        default:
                                        {
-                                               print(sprintf(
+                                               printf(
                                                        strcat(
                                                                "^1NOTIFICATION WITH IMPROPER TYPE: ",
                                                                "^7net_type = %d, net_name = %s.\n"
                                                        ),
                                                        typeid,
                                                        namestring
-                                               ));
+                                               );
                                                notif_error = TRUE;
                                                break;
                                        }
@@ -846,7 +873,7 @@ void Create_Notification_Entity(
                                notif.nent_challow_var = challow_var; // 0: never allowed, 1: allowed in warmup, 2: always allowed
                                notif.nent_stringcount = max(notif.nent_optiona.nent_stringcount, notif.nent_optionb.nent_stringcount);
                                notif.nent_floatcount = max(notif.nent_optiona.nent_floatcount, notif.nent_optionb.nent_floatcount);
-                               
+
                                /*#ifdef NOTIFICATIONS_DEBUG
                                Debug_Notification(sprintf(
                                        "Create_Notification_Entity(...): MSG_CHOICE: %s\n%s\n%s\n",
@@ -870,23 +897,23 @@ void Create_Notification_Entity(
                        }
                        break;
                }
-               
+
                default:
                {
-                       print(sprintf(
+                       printf(
                                strcat(
                                        "^1NOTIFICATION WITH IMPROPER TYPE: ",
                                        "^7net_type = %d, net_name = %s.\n"
                                ),
                                typeid,
                                namestring
-                       ));
+                       );
                        notif_error = TRUE;
                        break;
                }
        }
 
-       // now check to see if any errors happened 
+       // now check to see if any errors happened
        if(notif_error)
        {
                notif.nent_enabled = FALSE; // disable the notification so it can't cause trouble
@@ -977,8 +1004,8 @@ void Dump_Notifications(float fh, float alsoprint)
        for(i = 1; i <= NOTIF_ANNCE_COUNT; ++i)
        {
                e = Get_Notif_Ent(MSG_ANNCE, i);
-               if not(e) { backtrace("Dump_Notifications(): Missing notification entity!\n"); return; }
-               
+               if (!e) { backtrace("Dump_Notifications(): Missing notification entity!\n"); return; }
+
                NOTIF_WRITE_ENTITY(
                        "Notification control cvar: 0 = disabled, 1 = enabled if gentle mode is off, 2 = always enabled)"
                );
@@ -988,8 +1015,8 @@ void Dump_Notifications(float fh, float alsoprint)
        for(i = 1; i <= NOTIF_INFO_COUNT; ++i)
        {
                e = Get_Notif_Ent(MSG_INFO, i);
-               if not(e) { backtrace("Dump_Notifications(): Missing notification entity!\n"); return; }
-               
+               if (!e) { backtrace("Dump_Notifications(): Missing notification entity!\n"); return; }
+
                NOTIF_WRITE_ENTITY(
                        "Notification control cvar: 0 = off, 1 = print to console, "
                        "2 = print to console and chatbox (if notification_allow_chatboxprint is enabled)"
@@ -1000,8 +1027,8 @@ void Dump_Notifications(float fh, float alsoprint)
        for(i = 1; i <= NOTIF_CENTER_COUNT; ++i)
        {
                e = Get_Notif_Ent(MSG_CENTER, i);
-               if not(e) { backtrace("Dump_Notifications(): Missing notification entity!\n"); return; }
-               
+               if (!e) { backtrace("Dump_Notifications(): Missing notification entity!\n"); return; }
+
                NOTIF_WRITE_ENTITY(
                        "Notification control cvar: 0 = off, 1 = centerprint"
                );
@@ -1011,8 +1038,8 @@ void Dump_Notifications(float fh, float alsoprint)
        for(i = 1; i <= NOTIF_MULTI_COUNT; ++i)
        {
                e = Get_Notif_Ent(MSG_MULTI, i);
-               if not(e) { backtrace("Dump_Notifications(): Missing notification entity!\n"); return; }
-               
+               if (!e) { backtrace("Dump_Notifications(): Missing notification entity!\n"); return; }
+
                NOTIF_WRITE_ENTITY(
                        "Notification control cvar: 0 = off, 1 = trigger subcalls"
                );
@@ -1022,8 +1049,8 @@ void Dump_Notifications(float fh, float alsoprint)
        for(i = 1; i <= NOTIF_CHOICE_COUNT; ++i)
        {
                e = Get_Notif_Ent(MSG_CHOICE, i);
-               if not(e) { backtrace("Dump_Notifications(): Missing notification entity!\n"); return; }
-               
+               if (!e) { backtrace("Dump_Notifications(): Missing notification entity!\n"); return; }
+
                NOTIF_WRITE_ENTITY_CHOICE(
                        "Notification control cvar: 0 = off, 1 = trigger option A subcall, 2 = trigger option B subcall",
                        "Notification control cvar: 0 = off, 1 = allowed in warmup mode, 2 = always allowed"
@@ -1032,84 +1059,84 @@ void Dump_Notifications(float fh, float alsoprint)
 
        // edit these to match whichever cvars are used for specific notification options
        NOTIF_WRITE("\n// HARD CODED notification variables:\n");
-       
+
        NOTIF_WRITE_HARDCODED(
                "allow_chatboxprint", "1",
                "Allow notifications to be printed to chat box by setting notification cvar to 2 "
                "(You can also set this cvar to 2 to force ALL notifications to be printed to the chatbox)"
        );
-       
+
        NOTIF_WRITE_HARDCODED(
                "debug", "0",
                "Print extra debug information on all notification function calls "
                "(Requires -DNOTIFICATIONS_DEBUG flag to be enabled on QCSRC compilation)... "
                "0 = disabled, 1 = dprint, 2 = print"
        );
-       
+
        NOTIF_WRITE_HARDCODED(
                "errors_are_fatal", "1",
                "If a notification fails upon initialization, cause a Host_Error to stop the program"
        );
-       
+
        NOTIF_WRITE_HARDCODED(
                "item_centerprinttime", "1.5",
                "How long to show item information centerprint messages (like 'You got the Electro' or such)"
        );
-       
+
        NOTIF_WRITE_HARDCODED(
                "lifetime_mapload", "10",
                "Amount of time that notification entities last immediately at mapload (in seconds) "
                "to help prevent notifications from being lost on early init (like gamestart countdown)"
        );
-       
+
        NOTIF_WRITE_HARDCODED(
                "lifetime_runtime", "0.5",
                "Amount of time that notification entities last on the server during runtime (In seconds)"
        );
-       
+
        NOTIF_WRITE_HARDCODED(
                "server_allows_location", "1",
                "Server side cvar for allowing death messages to show location information too"
        );
-       
+
        NOTIF_WRITE_HARDCODED(
                "show_location", "0",
                "Append location information to MSG_INFO death/kill messages"
        );
-       
+
        NOTIF_WRITE_HARDCODED(
                "show_location_string", "",
                "Replacement string piped into sprintf, "
                "so you can do different messages like this: ' at the %s' or ' (near %s)'"
        );
-       
+
        NOTIF_WRITE_HARDCODED(
                "show_sprees", "1",
                "Print information about sprees in death/kill messages"
        );
-       
+
        NOTIF_WRITE_HARDCODED(
                "show_sprees_center", "1",
                "Show spree information in MSG_CENTER messages... "
                "0 = off, 1 = target (but only for first victim) and attacker"
        );
-       
+
        NOTIF_WRITE_HARDCODED(
                "show_sprees_center_specialonly", "1",
                "Don't show spree information in MSG_CENTER messages if it isn't an achievement"
        );
-       
+
        NOTIF_WRITE_HARDCODED(
                "show_sprees_info", "3",
                "Show spree information in MSG_INFO messages... "
                "0 = off, 1 = target only, 2 = attacker only, 3 = target and attacker"
        );
-       
+
        NOTIF_WRITE_HARDCODED(
                "show_sprees_info_newline", "1",
                "Show attacker spree information for MSG_INFO messages on a separate line than the death notification itself"
        );
-       
+
        NOTIF_WRITE_HARDCODED(
                "show_sprees_info_specialonly", "1",
                "Don't show attacker spree information in MSG_INFO messages if it isn't an achievement"
@@ -1133,7 +1160,7 @@ void Dump_Notifications(float fh, float alsoprint)
                NOTIF_MULTI_COUNT,
                NOTIF_CHOICE_COUNT
        ));
-       
+
        return;
        #undef NOTIF_WRITE_HARDCODED
        #undef NOTIF_WRITE_ENTITY
@@ -1157,7 +1184,7 @@ void Debug_Notification(string input)
 #endif
 
 string Local_Notification_sprintf(
-       string input, string args, 
+       string input, string args,
        string s1, string s2, string s3, string s4,
        float f1, float f2, float f3, float f4)
 {
@@ -1170,7 +1197,7 @@ string Local_Notification_sprintf(
                sprintf("%d, %d, %d, %d", f1, f2, f3, f4)
        ));
        #endif
-       
+
        string selected;
        float sel_num;
        for(sel_num = 0; sel_num < NOTIF_MAX_ARGS; ++sel_num) { arg_slot[sel_num] = ""; }
@@ -1183,18 +1210,30 @@ string Local_Notification_sprintf(
                NOTIF_HIT_MAX(NOTIF_MAX_ARGS, "Local_Notification_sprintf")
                switch(strtolower(selected))
                {
-                       #define ARG_CASE(prog,selected,result) \
-                               #ifdef CSQC \
-                                       #if (prog != ARG_SV) && (prog != ARG_DC) \
-                                               case selected: { arg_slot[sel_num] = result; ++sel_num; break; } \
-                                       #endif \
-                               #else \
-                                       #if (prog != ARG_CS) && (prog != ARG_DC) \
-                                               case selected: { arg_slot[sel_num] = result; ++sel_num; break; } \
-                                       #endif \
-                               #endif
+                       #ifdef CSQC
+                       #define ARG_CASE_ARG_CS_SV_HA(selected,result) case selected: { arg_slot[sel_num] = result; ++sel_num; break; }
+                       #define ARG_CASE_ARG_CS_SV_DC(selected,result) case selected: { arg_slot[sel_num] = result; ++sel_num; break; }
+                       #define ARG_CASE_ARG_CS_SV(selected,result)    case selected: { arg_slot[sel_num] = result; ++sel_num; break; }
+                       #define ARG_CASE_ARG_CS(selected,result)       case selected: { arg_slot[sel_num] = result; ++sel_num; break; }
+                       #define ARG_CASE_ARG_SV(selected,result)
+                       #define ARG_CASE_ARG_DC(selected,result)
+                       #else
+                       #define ARG_CASE_ARG_CS_SV_HA(selected,result) case selected: { arg_slot[sel_num] = result; ++sel_num; break; }
+                       #define ARG_CASE_ARG_CS_SV_DC(selected,result) case selected: { arg_slot[sel_num] = result; ++sel_num; break; }
+                       #define ARG_CASE_ARG_CS_SV(selected,result)    case selected: { arg_slot[sel_num] = result; ++sel_num; break; }
+                       #define ARG_CASE_ARG_CS(selected,result)
+                       #define ARG_CASE_ARG_SV(selected,result)       case selected: { arg_slot[sel_num] = result; ++sel_num; break; }
+                       #define ARG_CASE_ARG_DC(selected,result)
+                       #endif
+                       #define ARG_CASE(prog,selected,result)         ARG_CASE_##prog(selected,result)
                        NOTIF_ARGUMENT_LIST
                        #undef ARG_CASE
+                       #undef ARG_CASE_ARG_DC
+                       #undef ARG_CASE_ARG_SV
+                       #undef ARG_CASE_ARG_CS
+                       #undef ARG_CASE_ARG_CS_SV
+                       #undef ARG_CASE_ARG_CS_SV_DC
+                       #undef ARG_CASE_ARG_CS_SV_HA
                        default: NOTIF_HIT_UNKNOWN(NOTIF_MAX_ARGS, "Local_Notification_sprintf")
                }
        }
@@ -1230,7 +1269,7 @@ void Local_Notification_sound(
                        soundposition
                ));
                #endif
-               
+
                sound(
                        world,
                        soundchannel,
@@ -1242,7 +1281,7 @@ void Local_Notification_sound(
                        soundvolume,
                        soundposition
                );
-               
+
                if(prev_soundfile) { strunzone(prev_soundfile); }
                prev_soundfile = strzone(soundfile);
                prev_soundtime = time;
@@ -1273,7 +1312,8 @@ void Local_Notification_sound(
 
 void Local_Notification_HUD_Notify_Push(
        string icon, string hudargs,
-       string s1, string s2, string s3, string s4)
+       string s1, string s2, string s3, string s4,
+       float f1, float f2, float f3, float f4)
 {
        string selected;
        float sel_num;
@@ -1285,21 +1325,31 @@ void Local_Notification_HUD_Notify_Push(
                NOTIF_HIT_MAX(NOTIF_MAX_HUDARGS, "Local_Notification_HUD_Notify_Push")
                switch(strtolower(selected))
                {
-                       #define ARG_CASE(prog,selected,result) \
-                               #if (prog == ARG_CS_SV_HA) \
-                                       case selected: { arg_slot[sel_num] = result; ++sel_num; break; } \
-                               #endif
+                       #define ARG_CASE_ARG_CS_SV_HA(selected,result) case selected: { arg_slot[sel_num] = result; ++sel_num; break; }
+                       #define ARG_CASE_ARG_CS_SV_DC(selected,result)
+                       #define ARG_CASE_ARG_CS_SV(selected,result)
+                       #define ARG_CASE_ARG_CS(selected,result)
+                       #define ARG_CASE_ARG_SV(selected,result)
+                       #define ARG_CASE_ARG_DC(selected,result)
+                       #define ARG_CASE(prog,selected,result)         ARG_CASE_##prog(selected,result)
                        NOTIF_ARGUMENT_LIST
                        #undef ARG_CASE
+                       #undef ARG_CASE_ARG_DC
+                       #undef ARG_CASE_ARG_SV
+                       #undef ARG_CASE_ARG_CS
+                       #undef ARG_CASE_ARG_CS_SV
+                       #undef ARG_CASE_ARG_CS_SV_DC
+                       #undef ARG_CASE_ARG_CS_SV_HA
                        default: NOTIF_HIT_UNKNOWN(NOTIF_MAX_HUDARGS, "Local_Notification_HUD_Notify_Push")
                }
        }
        #ifdef NOTIFICATIONS_DEBUG
        Debug_Notification(sprintf(
-               "Local_Notification_HUD_Notify_Push('%s^7', '%s', %s, %s);\n",
+               "Local_Notification_HUD_Notify_Push('%s^7', '%s', %s, %s, %s);\n",
                icon,
                hudargs,
                MakeConsoleSafe(sprintf("'%s^7', '%s^7', '%s^7', '%s^7'", s1, s2, s3, s4)),
+               sprintf("%d, %d, %d, %d", f1, f2, f3, f4),
                MakeConsoleSafe(sprintf("'%s^7', '%s^7'", stof(arg_slot[0]), stof(arg_slot[1])))
        ));
        #endif
@@ -1320,12 +1370,21 @@ void Local_Notification_centerprint_generic(
                NOTIF_HIT_MAX(NOTIF_MAX_DURCNT, "Local_Notification_centerprint_generic")
                switch(strtolower(selected))
                {
-                       #define ARG_CASE(prog,selected,result) \
-                               #if (prog == ARG_CS_SV_DC) || (prog == ARG_DC) \
-                                       case selected: { arg_slot[sel_num] = result; ++sel_num; break; } \
-                               #endif
+                       #define ARG_CASE_ARG_CS_SV_HA(selected,result)
+                       #define ARG_CASE_ARG_CS_SV_DC(selected,result) case selected: { arg_slot[sel_num] = result; ++sel_num; break; }
+                       #define ARG_CASE_ARG_CS_SV(selected,result)
+                       #define ARG_CASE_ARG_CS(selected,result)
+                       #define ARG_CASE_ARG_SV(selected,result)
+                       #define ARG_CASE_ARG_DC(selected,result)       case selected: { arg_slot[sel_num] = result; ++sel_num; break; }
+                       #define ARG_CASE(prog,selected,result)         ARG_CASE_##prog(selected,result)
                        NOTIF_ARGUMENT_LIST
                        #undef ARG_CASE
+                       #undef ARG_CASE_ARG_DC
+                       #undef ARG_CASE_ARG_SV
+                       #undef ARG_CASE_ARG_CS
+                       #undef ARG_CASE_ARG_CS_SV
+                       #undef ARG_CASE_ARG_CS_SV_DC
+                       #undef ARG_CASE_ARG_CS_SV_HA
                        default:
                        {
                                if(ftos(stof(selected)) != "") { arg_slot[sel_num] = selected; ++sel_num; }
@@ -1362,7 +1421,7 @@ void Local_Notification(float net_type, float net_name, ...count)
                #endif
                return;
        }
-       
+
        // check supplied type and name for errors
        string checkargs = Notification_CheckArgs_TypeName(net_type, net_name);
        if(checkargs != "")
@@ -1380,7 +1439,7 @@ void Local_Notification(float net_type, float net_name, ...count)
 
        // retreive entity of this notification
        entity notif = Get_Notif_Ent(net_type, net_name);
-       if not(notif)
+       if (!notif)
        {
                #ifdef NOTIFICATIONS_DEBUG
                Debug_Notification(sprintf(
@@ -1394,7 +1453,7 @@ void Local_Notification(float net_type, float net_name, ...count)
        }
 
        // check if the notification is enabled
-       if not(notif.nent_enabled)
+       if (!notif.nent_enabled)
        {
                #ifdef NOTIFICATIONS_DEBUG
                Debug_Notification(sprintf(
@@ -1424,13 +1483,13 @@ void Local_Notification(float net_type, float net_name, ...count)
                sprintf("%d, %d, %d, %d", f1, f2, f3, f4)
        ));
        #endif
-       
+
        if((notif.nent_stringcount + notif.nent_floatcount) > count)
        {
                backtrace(sprintf(
                        strcat(
                                "Not enough arguments for Local_Notification(%s, %s, ...)! ",
-                               "stringcount(%d) + floatcount(%d) > count(%d)\n", 
+                               "stringcount(%d) + floatcount(%d) > count(%d)\n",
                                "Check the definition and function call for accuracy...?\n"
                        ),
                        Get_Notif_TypeName(net_type),
@@ -1457,7 +1516,7 @@ void Local_Notification(float net_type, float net_name, ...count)
                ));
                return;
        }
-       
+
        switch(net_type)
        {
                case MSG_ANNCE:
@@ -1474,35 +1533,36 @@ void Local_Notification(float net_type, float net_name, ...count)
                        #endif
                        break;
                }
-               
+
                case MSG_INFO:
                {
                        print(
                                Local_Notification_sprintf(
                                        notif.nent_string,
-                                       notif.nent_args, 
+                                       notif.nent_args,
                                        s1, s2, s3, s4,
                                        f1, f2, f3, f4)
                        );
-                       #ifdef CSQC 
+                       #ifdef CSQC
                        if(notif.nent_icon != "")
                        {
                                Local_Notification_HUD_Notify_Push(
                                        notif.nent_icon,
                                        notif.nent_hudargs,
-                                       s1, s2, s3, s4);
-                       } 
-                       #endif 
+                                       s1, s2, s3, s4,
+                                       f1, f2, f3, f4);
+                       }
+                       #endif
                        break;
                }
-               
+
                #ifdef CSQC
                case MSG_CENTER:
                {
                        Local_Notification_centerprint_generic(
                                Local_Notification_sprintf(
                                        notif.nent_string,
-                                       notif.nent_args, 
+                                       notif.nent_args,
                                        s1, s2, s3, s4,
                                        f1, f2, f3, f4),
                                notif.nent_durcnt,
@@ -1511,7 +1571,7 @@ void Local_Notification(float net_type, float net_name, ...count)
                        break;
                }
                #endif
-               
+
                case MSG_MULTI:
                {
                        if(notif.nent_msginfo)
@@ -1519,9 +1579,9 @@ void Local_Notification(float net_type, float net_name, ...count)
                        {
                                Local_Notification_WOVA(
                                        MSG_INFO,
-                                       notif.nent_msginfo.nent_id, 
-                                       notif.nent_msginfo.nent_stringcount, 
-                                       notif.nent_msginfo.nent_floatcount, 
+                                       notif.nent_msginfo.nent_id,
+                                       notif.nent_msginfo.nent_stringcount,
+                                       notif.nent_msginfo.nent_floatcount,
                                        s1, s2, s3, s4,
                                        f1, f2, f3, f4);
                        }
@@ -1531,8 +1591,8 @@ void Local_Notification(float net_type, float net_name, ...count)
                        {
                                Local_Notification_WOVA(
                                        MSG_ANNCE,
-                                       notif.nent_msgannce.nent_id, 
-                                       0, 0, 
+                                       notif.nent_msgannce.nent_id,
+                                       0, 0,
                                        "", "", "", "",
                                        0, 0, 0, 0);
                        }
@@ -1541,11 +1601,11 @@ void Local_Notification(float net_type, float net_name, ...count)
                        {
                                Local_Notification_WOVA(
                                        MSG_CENTER,
-                                       notif.nent_msgcenter.nent_id, 
-                                       notif.nent_msgcenter.nent_stringcount, 
-                                       notif.nent_msgcenter.nent_floatcount, 
+                                       notif.nent_msgcenter.nent_id,
+                                       notif.nent_msgcenter.nent_stringcount,
+                                       notif.nent_msgcenter.nent_floatcount,
                                        s1, s2, s3, s4,
-                                       f1, f2, f3, f4); 
+                                       f1, f2, f3, f4);
                        }
                        #endif
                        break;
@@ -1554,7 +1614,7 @@ void Local_Notification(float net_type, float net_name, ...count)
                case MSG_CHOICE:
                {
                        entity found_choice;
-                       
+
                        if(notif.nent_challow_var && (warmup_stage || (notif.nent_challow_var == 2)))
                        {
                                switch(cvar_string(sprintf("notification_%s", notif.nent_name)))
@@ -1565,19 +1625,19 @@ void Local_Notification(float net_type, float net_name, ...count)
                                }
                        }
                        else { found_choice = notif.nent_optiona; }
-                       
+
                        Local_Notification_WOVA(
                                found_choice.nent_type,
-                               found_choice.nent_id, 
-                               found_choice.nent_stringcount, 
-                               found_choice.nent_floatcount, 
+                               found_choice.nent_id,
+                               found_choice.nent_stringcount,
+                               found_choice.nent_floatcount,
                                s1, s2, s3, s4,
-                               f1, f2, f3, f4); 
+                               f1, f2, f3, f4);
                }
        }
 }
 
-// WOVA = Without Variable Arguments 
+// WOVA = Without Variable Arguments
 void Local_Notification_WOVA(
        float net_type, float net_name,
        float stringcount, float floatcount,
@@ -1616,7 +1676,7 @@ void Read_Notification(float is_new)
                        net_name
                ));
                #endif
-               
+
                if(is_new)
                {
                        if(net_name == 0) { reset_centerprint_messages(); }
@@ -1632,13 +1692,13 @@ void Read_Notification(float is_new)
                                        is_new,
                                        time
                                ));
-                       } 
+                       }
                }
        }
        else
        {
                notif = Get_Notif_Ent(net_type, net_name);
-               if not(notif) { backtrace("Read_Notification: Could not find notification entity!\n"); return; }
+               if (!notif) { backtrace("Read_Notification: Could not find notification entity!\n"); return; }
 
                #ifdef NOTIFICATIONS_DEBUG
                Debug_Notification(sprintf(
@@ -1658,7 +1718,7 @@ void Read_Notification(float is_new)
                float f2 = ((1 < notif.nent_floatcount) ? ReadLong() : 0);
                float f3 = ((2 < notif.nent_floatcount) ? ReadLong() : 0);
                float f4 = ((3 < notif.nent_floatcount) ? ReadLong() : 0);
-       
+
                if(is_new)
                {
                        Local_Notification_WOVA(
@@ -1675,8 +1735,8 @@ void Read_Notification(float is_new)
 #ifdef SVQC
 void Net_Notification_Remove()
 {
-       if not(self) { backtrace(sprintf("Net_Notification_Remove() at %f: Missing self!?\n", time)); return; }
-       
+       if (!self) { backtrace(sprintf("Net_Notification_Remove() at %f: Missing self!?\n", time)); return; }
+
        #ifdef NOTIFICATIONS_DEBUG
        Debug_Notification(sprintf(
                "Net_Notification_Remove() at %f: %s '%s - %s' notification\n",
@@ -1686,7 +1746,7 @@ void Net_Notification_Remove()
                self.owner.nent_name
        ));
        #endif
-       
+
        float i;
        for(i = 0; i < 4; ++i) { if(self.nent_strings[i]) { strunzone(self.nent_strings[i]); } }
        remove(self);
@@ -1700,7 +1760,7 @@ float Net_Write_Notification(entity client, float sf)
                WriteByte(MSG_ENTITY, ENT_CLIENT_NOTIFICATION);
                WriteByte(MSG_ENTITY, self.nent_net_type);
                WriteShort(MSG_ENTITY, self.nent_net_name);
-               for(i = 0; i < self.nent_stringcount; ++i) { WriteString(MSG_ENTITY, self.nent_strings[i]); } 
+               for(i = 0; i < self.nent_stringcount; ++i) { WriteString(MSG_ENTITY, self.nent_strings[i]); }
                for(i = 0; i < self.nent_floatcount; ++i) { WriteLong(MSG_ENTITY, self.nent_floats[i]); }
                return TRUE;
        }
@@ -1720,13 +1780,13 @@ void Kill_Notification(
                net_name
        ));
        #endif
-       
+
        string checkargs = Notification_CheckArgs(broadcast, client, 1, 1);
        if(checkargs != "") { backtrace(sprintf("Incorrect usage of Kill_Notification: %s\n", checkargs)); return; }
 
        entity notif, net_notif;
        float killed_cpid = NO_CPID;
-       
+
        switch(net_type)
        {
                case 0:
@@ -1734,14 +1794,14 @@ void Kill_Notification(
                        killed_cpid = 0; // kill ALL centerprints
                        break;
                }
-               
+
                case MSG_CENTER:
                {
                        if(net_name)
                        {
                                entity notif = Get_Notif_Ent(net_type, net_name);
-                               if not(notif) { backtrace("Kill_Notification: Could not find notification entity!\n"); return; }
-                               
+                               if (!notif) { backtrace("Kill_Notification: Could not find notification entity!\n"); return; }
+
                                if(notif.nent_cpid)
                                        killed_cpid = notif.nent_cpid;
                                else
@@ -1819,7 +1879,7 @@ void Send_Notification(
                #endif
                return;
        }
-       
+
        // check supplied broadcast, target, type, and name for errors
        string checkargs = Notification_CheckArgs(broadcast, client, net_type, net_name);
        if(checkargs != "")
@@ -1839,7 +1899,7 @@ void Send_Notification(
 
        // retreive entity of this notification
        entity notif = Get_Notif_Ent(net_type, net_name);
-       if not(notif)
+       if (!notif)
        {
                #ifdef NOTIFICATIONS_DEBUG
                Debug_Notification(sprintf(
@@ -1883,7 +1943,7 @@ void Send_Notification(
                backtrace(sprintf(
                        strcat(
                                "Not enough arguments for Send_Notification(%s, ...)! ",
-                               "stringcount(%d) + floatcount(%d) > count(%d)\n", 
+                               "stringcount(%d) + floatcount(%d) > count(%d)\n",
                                "Check the definition and function call for accuracy...?\n"
                        ),
                        sprintf(
@@ -1962,7 +2022,7 @@ void Send_Notification(
                // It's slow, but it's better than the alternatives:
                //   1. Constantly networking all info and letting client decide
                //   2. Manually handling each separate call on per-usage basis (See old CTF usage of verbose)
-               entity found_choice; 
+               entity found_choice;
 
                #define RECURSE_FROM_CHOICE(ent,action) \
                        if(notif.nent_challow_var && (warmup_stage || (notif.nent_challow_var == 2))) \
@@ -2014,7 +2074,7 @@ void Send_Notification(
                net_notif.nent_net_name = net_name;
                net_notif.nent_stringcount = notif.nent_stringcount;
                net_notif.nent_floatcount = notif.nent_floatcount;
-               
+
                float i;
                for(i = 0; i < net_notif.nent_stringcount; ++i)
                        { net_notif.nent_strings[i] = strzone(...(i, string)); }
@@ -2028,13 +2088,13 @@ void Send_Notification(
                                (time + autocvar_notification_lifetime_runtime)
                                :
                                autocvar_notification_lifetime_mapload
-                       ); 
+                       );
 
                Net_LinkEntity(net_notif, FALSE, 0, Net_Write_Notification);
        }
 }
 
-// WOVA = Without Variable Arguments 
+// WOVA = Without Variable Arguments
 void Send_Notification_WOVA(
        float broadcast, entity client,
        float net_type, float net_name,
@@ -2059,7 +2119,7 @@ void Send_Notification_WOVA(
                sprintf("%d, %d, %d, %d", f1, f2, f3, f4)
        ));
        #endif
-       
+
        #define VARITEM(stringc,floatc,args) \
                if((stringcount == stringc) && (floatcount == floatc)) \
                        { Send_Notification(broadcast, client, net_type, net_name, args); return; }
@@ -2068,7 +2128,7 @@ void Send_Notification_WOVA(
        Send_Notification(broadcast, client, net_type, net_name); // some notifications don't have any arguments at all
 }
 
-// WOCOVA = Without Counts Or Variable Arguments 
+// WOCOVA = Without Counts Or Variable Arguments
 void Send_Notification_WOCOVA(
        float broadcast, entity client,
        float net_type, float net_name,
@@ -2076,7 +2136,7 @@ void Send_Notification_WOCOVA(
        float f1, float f2, float f3, float f4)
 {
        entity notif = Get_Notif_Ent(net_type, net_name);
-       
+
        #ifdef NOTIFICATIONS_DEBUG
        Debug_Notification(sprintf(
                "Send_Notification_WOCOVA(%s, %s, %s);\n",
@@ -2091,7 +2151,7 @@ void Send_Notification_WOCOVA(
                sprintf("%d, %d, %d, %d", f1, f2, f3, f4)
        ));
        #endif
-       
+
        #define VARITEM(stringc,floatc,args) \
                if((notif.nent_stringcount == stringc) && (notif.nent_floatcount == floatc)) \
                        { Send_Notification(broadcast, client, net_type, net_name, args); return; }
index 95341c1fa49e0fe1eb73c5121092d65e1edc5d8b..c5abd2c57a3579c8e24aa940120ff570e5368fa6 100644 (file)
@@ -5,7 +5,7 @@
 
 // main types/groups of notifications
 #define MSG_ANNCE 1 // "Global" AND "personal" announcer messages
-#define MSG_INFO 2 // "Global" information messages 
+#define MSG_INFO 2 // "Global" information messages
 #define MSG_CENTER 3 // "Personal" centerprint messages
 #define MSG_CENTER_CPID 4 // Kill centerprint message
 #define MSG_MULTI 5 // Subcall MSG_INFO and/or MSG_CENTER notifications
@@ -51,7 +51,7 @@ void Create_Notification_Entity(
        float strnum,
        float flnum,
        /* MSG_ANNCE */
-       float channel, 
+       float channel,
        string snd,
        float vol,
        float position,
@@ -188,7 +188,7 @@ void Send_Notification_WOCOVA(
 
  Check out the definitions in util.qc/util.qh/teams.qh for string CCR(...) and
  string TCR(...) to better understand how these code replacements work.
+
  Additionally, you can find all the definitions and explanations for
  the argument values and what they return down below in this file.
 
@@ -217,15 +217,21 @@ void Send_Notification_WOCOVA(
       If you send a notification with mismatching arguments, Send_Notification() will error.
 */
 
-#define MULTITEAM_ANNCE(default,prefix,teams,channel,sound,volume,position) \
+#define MULTITEAM_ANNCE2(default,prefix,channel,sound,volume,position) \
+       MSG_ANNCE_NOTIF(default, prefix##RED, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_1)), volume, position) \
+       MSG_ANNCE_NOTIF(default, prefix##BLUE, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_2)), volume, position)
+#define MULTITEAM_ANNCE3(default,prefix,channel,sound,volume,position) \
        MSG_ANNCE_NOTIF(default, prefix##RED, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_1)), volume, position) \
        MSG_ANNCE_NOTIF(default, prefix##BLUE, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_2)), volume, position) \
-       #if teams >= 3 \
-               MSG_ANNCE_NOTIF(default, prefix##YELLOW, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_3)), volume, position) \
-       #endif \
-       #if teams >= 4 \
-               MSG_ANNCE_NOTIF(default, prefix##PINK, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_4)), volume, position) \
-       #endif
+       MSG_ANNCE_NOTIF(default, prefix##YELLOW, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_3)), volume, position)
+#define MULTITEAM_ANNCE4(default,prefix,channel,sound,volume,position) \
+       MSG_ANNCE_NOTIF(default, prefix##RED, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_1)), volume, position) \
+       MSG_ANNCE_NOTIF(default, prefix##BLUE, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_2)), volume, position) \
+       MSG_ANNCE_NOTIF(default, prefix##YELLOW, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_3)), volume, position) \
+       MSG_ANNCE_NOTIF(default, prefix##PINK, channel, sprintf(sound, strtolower(STATIC_NAME_TEAM_4)), volume, position)
+#define MULTITEAM_ANNCE(default,prefix,teams,channel,sound,volume,position) \
+       MULTITEAM_ANNCE##teams(default,prefix,channel,sound,volume,position)
+
 #define MSG_ANNCE_NOTIFICATIONS \
        MSG_ANNCE_NOTIF(1, ANNCE_ACHIEVEMENT_AIRSHOT,       CH_INFO, "airshot",           VOL_BASEVOICE, ATTEN_NONE) \
        MSG_ANNCE_NOTIF(1, ANNCE_ACHIEVEMENT_AMAZING,       CH_INFO, "amazing",           VOL_BASEVOICE, ATTEN_NONE) \
@@ -317,15 +323,21 @@ void Send_Notification_WOCOVA(
        MSG_ANNCE_NOTIF(2, ANNCE_VOTE_CALL,                 CH_INFO, "votecall",          VOL_BASEVOICE, ATTEN_NONE) \
        MSG_ANNCE_NOTIF(2, ANNCE_VOTE_FAIL,                 CH_INFO, "votefail",          VOL_BASEVOICE, ATTEN_NONE)
 
-#define MULTITEAM_INFO(default,prefix,teams,strnum,flnum,args,hudargs,icon,normal,gentle) \
+#define MULTITEAM_INFO2(default,prefix,strnum,flnum,args,hudargs,icon,normal,gentle) \
+       MSG_INFO_NOTIF(default, prefix##RED, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_1)), TCR(normal, COL_TEAM_1, strtoupper(NAME_TEAM_1)), TCR(gentle, COL_TEAM_1, strtoupper(NAME_TEAM_1))) \
+       MSG_INFO_NOTIF(default, prefix##BLUE, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_2)), TCR(normal, COL_TEAM_2, strtoupper(NAME_TEAM_2)), TCR(gentle, COL_TEAM_2, strtoupper(NAME_TEAM_2)))
+#define MULTITEAM_INFO3(default,prefix,strnum,flnum,args,hudargs,icon,normal,gentle) \
        MSG_INFO_NOTIF(default, prefix##RED, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_1)), TCR(normal, COL_TEAM_1, strtoupper(NAME_TEAM_1)), TCR(gentle, COL_TEAM_1, strtoupper(NAME_TEAM_1))) \
        MSG_INFO_NOTIF(default, prefix##BLUE, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_2)), TCR(normal, COL_TEAM_2, strtoupper(NAME_TEAM_2)), TCR(gentle, COL_TEAM_2, strtoupper(NAME_TEAM_2))) \
-       #if teams >= 3 \
-               MSG_INFO_NOTIF(default, prefix##YELLOW, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_3)), TCR(normal, COL_TEAM_3, strtoupper(NAME_TEAM_3)), TCR(gentle, COL_TEAM_3, strtoupper(NAME_TEAM_3))) \
-       #endif \
-       #if teams >= 4 \
-               MSG_INFO_NOTIF(default, prefix##PINK, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_4)), TCR(normal, COL_TEAM_4, strtoupper(NAME_TEAM_4)), TCR(gentle, COL_TEAM_4, strtoupper(NAME_TEAM_4))) \
-       #endif
+       MSG_INFO_NOTIF(default, prefix##YELLOW, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_3)), TCR(normal, COL_TEAM_3, strtoupper(NAME_TEAM_3)), TCR(gentle, COL_TEAM_3, strtoupper(NAME_TEAM_3)))
+#define MULTITEAM_INFO4(default,prefix,strnum,flnum,args,hudargs,icon,normal,gentle) \
+       MSG_INFO_NOTIF(default, prefix##RED, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_1)), TCR(normal, COL_TEAM_1, strtoupper(NAME_TEAM_1)), TCR(gentle, COL_TEAM_1, strtoupper(NAME_TEAM_1))) \
+       MSG_INFO_NOTIF(default, prefix##BLUE, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_2)), TCR(normal, COL_TEAM_2, strtoupper(NAME_TEAM_2)), TCR(gentle, COL_TEAM_2, strtoupper(NAME_TEAM_2))) \
+       MSG_INFO_NOTIF(default, prefix##YELLOW, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_3)), TCR(normal, COL_TEAM_3, strtoupper(NAME_TEAM_3)), TCR(gentle, COL_TEAM_3, strtoupper(NAME_TEAM_3))) \
+       MSG_INFO_NOTIF(default, prefix##PINK, strnum, flnum, args, hudargs, sprintf(icon, strtolower(STATIC_NAME_TEAM_4)), TCR(normal, COL_TEAM_4, strtoupper(NAME_TEAM_4)), TCR(gentle, COL_TEAM_4, strtoupper(NAME_TEAM_4)))
+#define MULTITEAM_INFO(default,prefix,teams,strnum,flnum,args,hudargs,icon,normal,gentle) \
+       MULTITEAM_INFO##teams(default,prefix,strnum,flnum,args,hudargs,icon,normal,gentle)
+
 #define MSG_INFO_NOTIFICATIONS \
        MULTITEAM_INFO(1, INFO_CTF_CAPTURE_, 2,                1, 0, "s1", "s1",                        "notify_%s_captured",   _("^BG%s^BG captured the ^TC^TT^BG flag"), "") \
        MULTITEAM_INFO(1, INFO_CTF_CAPTURE_BROKEN_, 2,         2, 2, "s1 f1p2dec s2 f2p2dec", "s1",     "notify_%s_captured",   _("^BG%s^BG captured the ^TC^TT^BG flag in ^F1%s^BG seconds, breaking ^BG%s^BG's previous record of ^F2%s^BG seconds"), "") \
@@ -441,14 +453,14 @@ void Send_Notification_WOCOVA(
        MSG_INFO_NOTIF(2, INFO_QUIT_KICK_IDLING,               1, 0, "s1", "",                          "",                     _("^BG%s^F3 was kicked for idling"), "") \
        MSG_INFO_NOTIF(1, INFO_QUIT_KICK_SPECTATING,           0, 0, "", "",                            "",                     _("^F2You were kicked from the server because you are a spectator and spectators aren't allowed at the moment."), "") \
        MSG_INFO_NOTIF(1, INFO_QUIT_SPECTATE,                  1, 0, "s1", "",                          "",                     _("^BG%s^F3 is now spectating"), "") \
-       MSG_INFO_NOTIF(1, INFO_RACE_ABANDONED,                 1, 0, "s1", "",                                                        "",                      _("^BG%s^BG has abandoned the race"), "") \
-       MSG_INFO_NOTIF(1, INFO_RACE_FAIL_RANKED,               1, 3, "s1 race_col f1ord race_col f3race_time race_diff", "s1",        "race_newfail",          _("^BG%s^BG couldn't break their %s%s^BG place record of %s%s %s"), "") \
-       MSG_INFO_NOTIF(1, INFO_RACE_FAIL_UNRANKED,             1, 3, "s1 race_col f1ord race_col f3race_time race_diff", "s1",        "race_newfail",          _("^BG%s^BG couldn't break the %s%s^BG place record of %s%s %s"), "") \
-       MSG_INFO_NOTIF(1, INFO_RACE_FINISHED,                  1, 0, "s1", "",                                                        "",                      _("^BG%s^BG has finished the race"), "") \
-       MSG_INFO_NOTIF(1, INFO_RACE_NEW_BROKEN,                2, 3, "s1 s2 race_col f1ord race_col f2race_time race_diff", "s1 s2",  "race_newrankyellow",    _("^BG%s^BG broke %s^BG's %s%s^BG place record with %s%s %s"), "") \
-       MSG_INFO_NOTIF(1, INFO_RACE_NEW_IMPROVED,              1, 3, "s1 race_col f1ord race_col f2race_time race_diff", "s1",        "race_newtime",          _("^BG%s^BG improved their %s%s^BG place record with %s%s %s"), "") \
-       MSG_INFO_NOTIF(1, INFO_RACE_NEW_MISSING_UID,           1, 1, "s1 f1race_time", "s1",                                          "race_newfail",          _("^BG%s^BG scored a new record with ^F2%s^BG, but unfortunately lacks a UID and will be lost."), "") \
-       MSG_INFO_NOTIF(1, INFO_RACE_NEW_SET,                   1, 2, "s1 race_col f1ord race_col f2race_time", "s1",                  "race_newrecordserver",  _("^BG%s^BG set the %s%s^BG place record with %s%s"), "") \
+       MSG_INFO_NOTIF(1, INFO_RACE_ABANDONED,                 1, 0, "s1", "",                                                                    "",                      _("^BG%s^BG has abandoned the race"), "") \
+       MSG_INFO_NOTIF(1, INFO_RACE_FAIL_RANKED,               1, 3, "s1 race_col f1ord race_col f3race_time race_diff", "s1 f3race_time",        "race_newfail",          _("^BG%s^BG couldn't break their %s%s^BG place record of %s%s %s"), "") \
+       MSG_INFO_NOTIF(1, INFO_RACE_FAIL_UNRANKED,             1, 3, "s1 race_col f1ord race_col f3race_time race_diff", "s1 f3race_time",        "race_newfail",          _("^BG%s^BG couldn't break the %s%s^BG place record of %s%s %s"), "") \
+       MSG_INFO_NOTIF(1, INFO_RACE_FINISHED,                  1, 0, "s1", "",                                                                    "",                      _("^BG%s^BG has finished the race"), "") \
+       MSG_INFO_NOTIF(1, INFO_RACE_NEW_BROKEN,                2, 3, "s1 s2 race_col f1ord race_col f2race_time race_diff", "s1 f2race_time",     "race_newrankyellow",    _("^BG%s^BG broke %s^BG's %s%s^BG place record with %s%s %s"), "") \
+       MSG_INFO_NOTIF(1, INFO_RACE_NEW_IMPROVED,              1, 3, "s1 race_col f1ord race_col f2race_time race_diff", "s1 f2race_time",        "race_newtime",          _("^BG%s^BG improved their %s%s^BG place record with %s%s %s"), "") \
+       MSG_INFO_NOTIF(1, INFO_RACE_NEW_MISSING_UID,           1, 1, "s1 f1race_time", "s1 f1race_time",                                          "race_newfail",          _("^BG%s^BG scored a new record with ^F2%s^BG, but unfortunately lacks a UID and will be lost."), "") \
+       MSG_INFO_NOTIF(1, INFO_RACE_NEW_SET,                   1, 2, "s1 race_col f1ord race_col f2race_time", "s1 f2race_time",                  "race_newrecordserver",  _("^BG%s^BG set the %s%s^BG place record with %s%s"), "") \
        MULTITEAM_INFO(1, INFO_SCORES_, 4,                     0, 0, "", "",                            "",                     _("^TC^TT ^BGteam scores!"), "") \
        MSG_INFO_NOTIF(1, INFO_SPECTATE_WARNING,               0, 1, "f1secs", "",                      "",                     _("^F2You have to become a player within the next %s, otherwise you will be kicked, because spectating isn't allowed at this time!"), "") \
        MSG_INFO_NOTIF(1, INFO_SUPERWEAPON_PICKUP,             1, 0, "s1", "s1",                        "strength",             _("^BG%s^K1 picked up a Superweapon"), "") \
@@ -503,17 +515,23 @@ void Send_Notification_WOCOVA(
        MSG_INFO_NOTIF(1, INFO_WEAPON_TUBA_MURDER,                   3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weapontuba",             _("^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Tuba%s%s"), "") \
        MSG_INFO_NOTIF(1, INFO_WEAPON_TUBA_SUICIDE,                  2, 1, "s1 s2loc spree_lost", "s1",                 "weapontuba",             _("^BG%s^K1 hurt their own ears with the @!#%%'n Tuba%s%s"), "") \
        MSG_INFO_NOTIF(1, INFO_WEAPON_UZI_MURDER_SNIPE,              3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponuzi",              _("^BG%s%s^K1 was sniped by ^BG%s^K1's Machine Gun%s%s"), "") \
-       MSG_INFO_NOTIF(1, INFO_WEAPON_UZI_MURDER_SPRAY,              3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponuzi",              _("^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"), "") 
+       MSG_INFO_NOTIF(1, INFO_WEAPON_UZI_MURDER_SPRAY,              3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "weaponuzi",              _("^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s"), "")
 
-#define MULTITEAM_CENTER(default,prefix,teams,strnum,flnum,args,cpid,durcnt,normal,gentle) \
+#define MULTITEAM_CENTER2(default,prefix,strnum,flnum,args,cpid,durcnt,normal,gentle) \
+       MSG_CENTER_NOTIF(default, prefix##RED, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_1, strtoupper(NAME_TEAM_1)), TCR(gentle, COL_TEAM_1, strtoupper(NAME_TEAM_1))) \
+       MSG_CENTER_NOTIF(default, prefix##BLUE, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_2, strtoupper(NAME_TEAM_2)), TCR(gentle, COL_TEAM_2, strtoupper(NAME_TEAM_2)))
+#define MULTITEAM_CENTER3(default,prefix,strnum,flnum,args,cpid,durcnt,normal,gentle) \
        MSG_CENTER_NOTIF(default, prefix##RED, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_1, strtoupper(NAME_TEAM_1)), TCR(gentle, COL_TEAM_1, strtoupper(NAME_TEAM_1))) \
        MSG_CENTER_NOTIF(default, prefix##BLUE, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_2, strtoupper(NAME_TEAM_2)), TCR(gentle, COL_TEAM_2, strtoupper(NAME_TEAM_2))) \
-       #if teams >= 3 \
-               MSG_CENTER_NOTIF(default, prefix##YELLOW, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_3, strtoupper(NAME_TEAM_3)), TCR(gentle, COL_TEAM_3, strtoupper(NAME_TEAM_3))) \
-       #endif \
-       #if teams >= 4 \
-               MSG_CENTER_NOTIF(default, prefix##PINK, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_4, strtoupper(NAME_TEAM_4)), TCR(gentle, COL_TEAM_4, strtoupper(NAME_TEAM_4))) \
-       #endif
+       MSG_CENTER_NOTIF(default, prefix##YELLOW, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_3, strtoupper(NAME_TEAM_3)), TCR(gentle, COL_TEAM_3, strtoupper(NAME_TEAM_3)))
+#define MULTITEAM_CENTER4(default,prefix,strnum,flnum,args,cpid,durcnt,normal,gentle) \
+       MSG_CENTER_NOTIF(default, prefix##RED, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_1, strtoupper(NAME_TEAM_1)), TCR(gentle, COL_TEAM_1, strtoupper(NAME_TEAM_1))) \
+       MSG_CENTER_NOTIF(default, prefix##BLUE, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_2, strtoupper(NAME_TEAM_2)), TCR(gentle, COL_TEAM_2, strtoupper(NAME_TEAM_2))) \
+       MSG_CENTER_NOTIF(default, prefix##YELLOW, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_3, strtoupper(NAME_TEAM_3)), TCR(gentle, COL_TEAM_3, strtoupper(NAME_TEAM_3))) \
+       MSG_CENTER_NOTIF(default, prefix##PINK, strnum, flnum, args, cpid, durcnt, TCR(normal, COL_TEAM_4, strtoupper(NAME_TEAM_4)), TCR(gentle, COL_TEAM_4, strtoupper(NAME_TEAM_4)))
+#define MULTITEAM_CENTER(default,prefix,teams,strnum,flnum,args,cpid,durcnt,normal,gentle) \
+       MULTITEAM_CENTER##teams(default,prefix,strnum,flnum,args,cpid,durcnt,normal,gentle)
+
 #define MSG_CENTER_NOTIFICATIONS \
        MSG_CENTER_NOTIF(1, CENTER_ASSAULT_ATTACKING,           0, 0, "",             CPID_ASSAULT_ROLE,   "0 0", _("^BGYou are attacking!"), "") \
        MSG_CENTER_NOTIF(1, CENTER_ASSAULT_DEFENDING,           0, 0, "",             CPID_ASSAULT_ROLE,   "0 0", _("^BGYou are defending!"), "") \
@@ -644,15 +662,21 @@ void Send_Notification_WOCOVA(
        MSG_CENTER_NOTIF(1, CENTER_TIMEOUT_BEGINNING,           0, 1, "",              CPID_TIMEOUT,          "1 f1", _("^F4Timeout begins in ^COUNT"), "") \
        MSG_CENTER_NOTIF(1, CENTER_TIMEOUT_ENDING,              0, 1, "",              CPID_TIMEOUT,          "1 f1", _("^F4Timeout ends in ^COUNT"), "")
 
-#define MULTITEAM_MULTI(default,prefix,teams,anncepre,infopre,centerpre) \
+#define MULTITEAM_MULTI2(default,prefix,anncepre,infopre,centerpre) \
+       MSG_MULTI_NOTIF(default, prefix##RED, anncepre##RED, infopre##RED, centerpre##RED) \
+       MSG_MULTI_NOTIF(default, prefix##BLUE, anncepre##BLUE, infopre##BLUE, centerpre##BLUE)
+#define MULTITEAM_MULTI3(default,prefix,anncepre,infopre,centerpre) \
        MSG_MULTI_NOTIF(default, prefix##RED, anncepre##RED, infopre##RED, centerpre##RED) \
        MSG_MULTI_NOTIF(default, prefix##BLUE, anncepre##BLUE, infopre##BLUE, centerpre##BLUE) \
-       #if teams >= 3 \
-               MSG_MULTI_NOTIF(default, prefix##YELLOW, anncepre##YELLOW, infopre##YELLOW, centerpre##YELLOW) \
-       #endif \
-       #if teams >= 4 \
-               MSG_MULTI_NOTIF(default, prefix##PINK, anncepre##PINK, infopre##PINK, centerpre##PINK) \
-       #endif
+       MSG_MULTI_NOTIF(default, prefix##YELLOW, anncepre##YELLOW, infopre##YELLOW, centerpre##YELLOW)
+#define MULTITEAM_MULTI4(default,prefix,anncepre,infopre,centerpre) \
+       MSG_MULTI_NOTIF(default, prefix##RED, anncepre##RED, infopre##RED, centerpre##RED) \
+       MSG_MULTI_NOTIF(default, prefix##BLUE, anncepre##BLUE, infopre##BLUE, centerpre##BLUE) \
+       MSG_MULTI_NOTIF(default, prefix##YELLOW, anncepre##YELLOW, infopre##YELLOW, centerpre##YELLOW) \
+       MSG_MULTI_NOTIF(default, prefix##PINK, anncepre##PINK, infopre##PINK, centerpre##PINK)
+#define MULTITEAM_MULTI(default,prefix,teams,anncepre,infopre,centerpre) \
+       MULTITEAM_MULTI##teams(default,prefix,anncepre,infopre,centerpre)
+
 #define MSG_MULTI_NOTIFICATIONS \
        MSG_MULTI_NOTIF(1, DEATH_MURDER_CHEAT,                   NO_MSG,        INFO_DEATH_MURDER_CHEAT,                   NO_MSG) \
        MSG_MULTI_NOTIF(1, DEATH_MURDER_DROWN,                   NO_MSG,        INFO_DEATH_MURDER_DROWN,                   NO_MSG) \
@@ -776,15 +800,21 @@ void Send_Notification_WOCOVA(
        MSG_MULTI_NOTIF(1, WEAPON_UZI_MURDER_SNIPE,              NO_MSG,        INFO_WEAPON_UZI_MURDER_SNIPE,              NO_MSG) \
        MSG_MULTI_NOTIF(1, WEAPON_UZI_MURDER_SPRAY,              NO_MSG,        INFO_WEAPON_UZI_MURDER_SPRAY,              NO_MSG)
 
-#define MULTITEAM_CHOICE(default,challow,prefix,teams,chtype,optiona,optionb) \
+#define MULTITEAM_CHOICE2(default,challow,prefix,chtype,optiona,optionb) \
+       MSG_CHOICE_NOTIF(default, challow, prefix##RED, chtype, optiona##RED, optionb##RED) \
+       MSG_CHOICE_NOTIF(default, challow, prefix##BLUE, chtype, optiona##BLUE, optionb##BLUE)
+#define MULTITEAM_CHOICE3(default,challow,prefix,chtype,optiona,optionb) \
        MSG_CHOICE_NOTIF(default, challow, prefix##RED, chtype, optiona##RED, optionb##RED) \
        MSG_CHOICE_NOTIF(default, challow, prefix##BLUE, chtype, optiona##BLUE, optionb##BLUE) \
-       #if teams >= 3 \
-               MSG_CHOICE_NOTIF(default, challow, prefix##YELLOW, chtype, optiona##YELLOW, optionb##YELLOW) \
-       #endif \
-       #if teams >= 4 \
-               MSG_CHOICE_NOTIF(default, challow, prefix##PINK, chtype, optiona##PINK, optionb##PINK) \
-       #endif
+       MSG_CHOICE_NOTIF(default, challow, prefix##YELLOW, chtype, optiona##YELLOW, optionb##YELLOW)
+#define MULTITEAM_CHOICE4(default,challow,prefix,chtype,optiona,optionb) \
+       MSG_CHOICE_NOTIF(default, challow, prefix##RED, chtype, optiona##RED, optionb##RED) \
+       MSG_CHOICE_NOTIF(default, challow, prefix##BLUE, chtype, optiona##BLUE, optionb##BLUE) \
+       MSG_CHOICE_NOTIF(default, challow, prefix##YELLOW, chtype, optiona##YELLOW, optionb##YELLOW) \
+       MSG_CHOICE_NOTIF(default, challow, prefix##PINK, chtype, optiona##PINK, optionb##PINK)
+#define MULTITEAM_CHOICE(default,challow,prefix,teams,chtype,optiona,optionb) \
+       MULTITEAM_CHOICE##teams(default,challow,prefix,chtype,optiona,optionb)
+
 #define MSG_CHOICE_NOTIFICATIONS \
        MULTITEAM_CHOICE(1, 2, CHOICE_CTF_CAPTURE_BROKEN_, 2,    MSG_INFO,    INFO_CTF_CAPTURE_,                INFO_CTF_CAPTURE_BROKEN_) \
        MULTITEAM_CHOICE(1, 2, CHOICE_CTF_CAPTURE_TIME_, 2,      MSG_INFO,    INFO_CTF_CAPTURE_,                INFO_CTF_CAPTURE_TIME_) \
@@ -827,7 +857,7 @@ var float autocvar_notification_item_centerprinttime = 1.5;
 
 // 0 = no, 1 = yes, 2 = forced on for all MSG_INFO notifs
 // DISABLED IN CODE, BUT ENABLED IN CONFIG FOR COMPATIBILITY WITH OLD CLIENTS
-var float autocvar_notification_allow_chatboxprint = 0; 
+var float autocvar_notification_allow_chatboxprint = 0;
 
 var float autocvar_notification_show_sprees_center = TRUE;
 var float autocvar_notification_show_sprees_center_specialonly = TRUE;
@@ -844,14 +874,14 @@ var float autocvar_notification_show_sprees_center_specialonly = TRUE;
  allows for more dynamic data to be inferred by the local
  notification parser, so that the server does not have to network
  anything too crazy on a per-client/per-situation basis.
+
  Pay attention to the CSQC/SVQC relations, some of these are redefined
  in slightly different ways for different programs, this is because the
  server does a more conservative approach to the notifs than the client.
+
  All arguments are swapped into strings, so be sure that your
  sprintf usage matches with proper %s placement.
+
  Argument descriptions:
     s1-s4: string arguments to be literally swapped into sprintf
     s2loc: s2 string of locations of deaths or other events
@@ -917,9 +947,9 @@ string arg_slot[NOTIF_MAX_ARGS];
     ARG_CASE(ARG_CS,        "f1secs",        count_seconds(f1)) \
     ARG_CASE(ARG_CS_SV,     "f1ord",         count_ordinal(f1)) \
     ARG_CASE(ARG_CS,        "f1time",        process_time(2, f1)) \
-    ARG_CASE(ARG_CS_SV,     "f1race_time",   mmssss(f1)) \
-    ARG_CASE(ARG_CS_SV,     "f2race_time",   mmssss(f2)) \
-    ARG_CASE(ARG_CS_SV,     "f3race_time",   mmssss(f3)) \
+    ARG_CASE(ARG_CS_SV_HA,  "f1race_time",   mmssss(f1)) \
+    ARG_CASE(ARG_CS_SV_HA,  "f2race_time",   mmssss(f2)) \
+    ARG_CASE(ARG_CS_SV_HA,  "f3race_time",   mmssss(f3)) \
     ARG_CASE(ARG_CS_SV,     "race_col",      CCR(((f1 == 1) ? "^F1" : "^F2"))) \
     ARG_CASE(ARG_CS_SV,     "race_diff",     ((f2 > f3) ? sprintf(CCR("^1[+%s]"), mmssss(f2 - f3)) : sprintf(CCR("^2[-%s]"), mmssss(f3 - f2)))) \
     ARG_CASE(ARG_CS,        "missing_teams", notif_arg_missing_teams(f1, f2, f3, f4)) \
@@ -960,7 +990,7 @@ string notif_arg_frag_ping(float newline, float fping)
 
 string notif_arg_frag_stats(float fhealth, float farmor, float fping)
 {
-       if not(fhealth < 1)
+       if (!(fhealth < 1))
                return sprintf(CCR(_("\n(Health ^1%d^BG / Armor ^2%d^BG)%s")), fhealth, farmor, notif_arg_frag_ping(FALSE, fping));
        else
                return sprintf(CCR(_("\n(^F4Dead^BG)%s")), notif_arg_frag_ping(FALSE, fping));
@@ -995,19 +1025,19 @@ string notif_arg_missing_teams(float f1, float f2, float f3, float f4)
 string notif_arg_spree_cen(float spree)
 {
        // 0 = off, 1 = target (but only for first victim) and attacker
-       if(autocvar_notification_show_sprees_center) 
+       if(autocvar_notification_show_sprees_center)
        {
                if(spree > 1)
                {
                        #define SPREE_ITEM(counta,countb,center,normal,gentle) \
                                case counta: { return normal_or_gentle(center, sprintf(_("%d score spree! "), spree)); }
-                       
+
                        switch(spree)
                        {
                                KILL_SPREE_LIST
                                default:
                                {
-                                       if not(autocvar_notification_show_sprees_center_specialonly)
+                                       if (!autocvar_notification_show_sprees_center_specialonly)
                                        {
                                                return
                                                        sprintf(
@@ -1017,7 +1047,7 @@ string notif_arg_spree_cen(float spree)
                                                                ),
                                                                spree);
                                        }
-                                       else { return ""; } // don't show spree information if it isn't an achievement 
+                                       else { return ""; } // don't show spree information if it isn't an achievement
                                }
                        }
 
@@ -1044,7 +1074,7 @@ string notif_arg_spree_inf(float type, string input, string player, float spree)
                {
                        // 0 = off, 1 = target only, 2 = attacker only, 3 = target and attacker
                        // this conditional (& 2) is true for 2 and 3
-                       if(autocvar_notification_show_sprees_info & 2) 
+                       if(autocvar_notification_show_sprees_info & 2)
                        {
                                #ifdef CSQC
                                string spree_newline =
@@ -1054,18 +1084,18 @@ string notif_arg_spree_inf(float type, string input, string player, float spree)
                                string spree_newline =
                                        (autocvar_notification_show_sprees_info_newline ? "\n" : "");
                                #endif
-                               
+
                                if(spree > 1)
                                {
                                        #define SPREE_ITEM(counta,countb,center,normal,gentle) \
                                                case counta: { return sprintf(CCR(normal_or_gentle(normal, gentle)), player, spree_newline); }
-                                       
+
                                        switch(spree)
                                        {
                                                KILL_SPREE_LIST
                                                default:
                                                {
-                                                       if not(autocvar_notification_show_sprees_info_specialonly)
+                                                       if (!autocvar_notification_show_sprees_info_specialonly)
                                                        {
                                                                return
                                                                        sprintf(
@@ -1078,7 +1108,7 @@ string notif_arg_spree_inf(float type, string input, string player, float spree)
                                                                                spree_newline
                                                                        );
                                                        }
-                                                       else { return ""; } // don't show spree information if it isn't an achievement 
+                                                       else { return ""; } // don't show spree information if it isn't an achievement
                                                }
                                        }
 
@@ -1250,7 +1280,7 @@ float notif_global_error;
                        NO_MSG,   /* optiona     */ \
                        NO_MSG);  /* optionb     */ \
        } \
-       ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotification_##name)
+       ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotification_##name);
 
 #define MSG_INFO_NOTIF(default,name,strnum,flnum,args,hudargs,icon,normal,gentle) \
        NOTIF_ADD_AUTOCVAR(name, default) \
@@ -1292,7 +1322,7 @@ float notif_global_error;
                        NO_MSG,   /* optiona     */ \
                        NO_MSG);  /* optionb     */ \
        } \
-       ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotification_##name)
+       ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotification_##name);
 
 #define MSG_CENTER_NOTIF(default,name,strnum,flnum,args,cpid,durcnt,normal,gentle) \
        NOTIF_ADD_AUTOCVAR(name, default) \
@@ -1336,7 +1366,7 @@ float notif_global_error;
                        NO_MSG,   /* optiona     */ \
                        NO_MSG);  /* optionb     */ \
        } \
-       ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotification_##name)
+       ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotification_##name);
 
 #define MSG_MULTI_NOTIF(default,name,anncename,infoname,centername) \
        NOTIF_ADD_AUTOCVAR(name, default) \
@@ -1378,7 +1408,7 @@ float notif_global_error;
                        NO_MSG,   /* optiona     */ \
                        NO_MSG);  /* optionb     */ \
        } \
-       ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotification_##name)
+       ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotification_##name);
 
 #define ACVNN(name) autocvar_notification_##name
 
@@ -1423,7 +1453,7 @@ float notif_global_error;
                        optiona,                                 /* optiona     */ \
                        optionb);                                /* optionb     */ \
        } \
-       ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotification_##name)
+       ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotification_##name);
 
 void RegisterNotifications_First()
 {
@@ -1434,9 +1464,9 @@ void RegisterNotifications_First()
        #else
        #define dedi ""
        #endif
-       
-       print(sprintf("Beginning notification initialization on %s%s program...\n", dedi, PROGNAME));
-       
+
+       printf("Beginning notification initialization on %s%s program...\n", dedi, PROGNAME);
+
        // maybe do another implementation of this with checksums? for now, we don't need versioning
        /*if(autocvar_notification_version != NOTIF_VERSION)
        {
@@ -1447,8 +1477,8 @@ void RegisterNotifications_First()
                #endif
                        notif_global_error = TRUE;
 
-               print(sprintf("^1NOTIFICATION VERSION MISMATCH: ^7program = %s, config = %d, code = %d.\n",
-                       PROGNAME, autocvar_notification_version, NOTIF_VERSION));
+               printf("^1NOTIFICATION VERSION MISMATCH: ^7program = %s, config = %d, code = %d.\n",
+                       PROGNAME, autocvar_notification_version, NOTIF_VERSION);
        }*/
 }
 
@@ -1466,13 +1496,13 @@ void RegisterNotifications_Done()
 }
 
 // NOW we actually activate the declarations
-ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotifications_First)
+ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotifications_First);
 MSG_ANNCE_NOTIFICATIONS
 MSG_INFO_NOTIFICATIONS
 MSG_CENTER_NOTIFICATIONS
 MSG_MULTI_NOTIFICATIONS
 MSG_CHOICE_NOTIFICATIONS
-ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotifications_Done)
+ACCUMULATE_FUNCTION(RegisterNotifications, RegisterNotifications_Done);
 #undef MSG_ANNCE_NOTIF
 #undef MSG_INFO_NOTIF
 #undef MSG_CENTER_NOTIF
index ade219a2459f9125677760a348a8895afc9712a7..069904290b7d45361bdb7a1828ead5888bc3bca2 100644 (file)
@@ -50,7 +50,7 @@ string Team_ColorCode(float teamid)
        case NUM_TEAM_3: return COL_TEAM_3;
        case NUM_TEAM_4: return COL_TEAM_4;
        }
-       
+
        return "^7";
 }
 
@@ -76,7 +76,7 @@ string Team_ColorName(float teamid)
        case NUM_TEAM_3: return NAME_TEAM_3;
        case NUM_TEAM_4: return NAME_TEAM_4;
        }
-       
+
     return NAME_NEUTRAL;
 }
 
@@ -90,7 +90,7 @@ string Static_Team_ColorName(float teamid)
        case NUM_TEAM_3: return STATIC_NAME_TEAM_3;
        case NUM_TEAM_4: return STATIC_NAME_TEAM_4;
        }
-       
+
     return NAME_NEUTRAL;
 }
 
@@ -104,7 +104,7 @@ float Team_ColorToTeam(string team_color)
        case "pink": return NUM_TEAM_4;
        case "auto": return 0;
        }
-       
+
        return -1;
 }
 
@@ -117,7 +117,7 @@ float Team_NumberToTeam(float number)
                case 3: return NUM_TEAM_3;
                case 4: return NUM_TEAM_4;
        }
-       
+
        return -1;
 }
 
@@ -130,7 +130,7 @@ float Team_TeamToNumber(float teamid)
                case NUM_TEAM_3: return 3;
                case NUM_TEAM_4: return 4;
        }
-       
+
        return -1;
 }
 
index 15193fd41db338fddd48ba607fd8281bd6ce2ad4..ac792a387ab4e2acfce3408d0e5c819c7b781ff3 100644 (file)
@@ -3,7 +3,7 @@ float TEST_ok;
 
 void TEST_Fail(string cond)
 {
-       print(sprintf("Assertion failed: ", cond));
+       printf("Assertion failed: ", cond);
        //backtrace();
        ++TEST_failed;
 }
@@ -27,29 +27,29 @@ float TEST_RunAll()
        }
        if(f)
        {
-               print(sprintf("%d tests failed\n", f));
+               printf("%d tests failed\n", f);
                return 1;
        }
        else
        {
-               print(sprintf("All tests OK\n", f));
+               printf("All tests OK\n", f);
                return 0;
        }
 }
 
 float TEST_Run(string s)
 {
-       print(sprintf("%s: testing...\n", s));
+       printf("%s: testing...\n", s);
        TEST_failed = TEST_ok = 0;
        callfunction(strcat("_TEST_", s));
        if(TEST_failed > 0)
        {
-               print(sprintf("%s: %d items failed.\n", s, TEST_failed));
+               printf("%s: %d items failed.\n", s, TEST_failed);
                return 0;
        }
        else if(!TEST_ok)
        {
-               print(sprintf("%s: did not complete.\n", s));
+               printf("%s: did not complete.\n", s);
                return 0;
        }
        return 1;
index 9a5e0e7da274c8b1043f3f52ec838b03590919ad..c69d2f44aab4139b44e1da806baa8e6edbb58a7a 100644 (file)
@@ -33,7 +33,7 @@ float url_URI_Get_Callback(float id, float status, string data)
                return 0;
        if(e.url_rbuf >= 0 || e.url_wbuf >= 0)
        {
-               print(sprintf("WARNING: handle %d (%s) has already received data?!?\n", id + NUM_URL_ID, e.url_url));
+               printf("WARNING: handle %d (%s) has already received data?!?\n", id + NUM_URL_ID, e.url_url);
                return 0;
        }
 
index 3912773fba3794cdb2c7c7e838f2948f2472422b..f39c30c0007cb03165d06d181c6c04e534497e25 100644 (file)
@@ -4,7 +4,8 @@
 #endif
 
 // FTEQCC can do this
-#define HAVE_YO_DAWG_CPP
+// #define HAVE_YO_DAWG_CPP
+// No, this is an ex-"feature" and non-C11.
 
 #ifndef NOCOMPAT
 //# define WORKAROUND_XON010
index afd5b3bcd12e3b5971125b2783e0016c95fd16cd..1904e91c1afa1d440c4bcdcfb7bdd4d39e0c811c 100644 (file)
@@ -148,7 +148,7 @@ void wordwrap_cb(string s, float l, void(string) callback)
 float dist_point_line(vector p, vector l0, vector ldir)
 {
        ldir = normalize(ldir);
-       
+
        // remove the component in line direction
        p = p - (p * ldir) * ldir;
 
@@ -241,7 +241,7 @@ vector colormapPaletteColor(float c, float isPants)
 string fstrunzone(string s)
 {
        string sc;
-       if not(s)
+       if (!s)
                return s;
        sc = strcat(s, "");
        strunzone(s);
@@ -264,7 +264,7 @@ void db_save(float db, string pFilename)
 {
        float fh, i, n;
        fh = fopen(pFilename, FILE_WRITE);
-       if(fh < 0) 
+       if(fh < 0)
        {
                print(strcat("^1Can't write DB to ", pFilename));
                return;
@@ -458,7 +458,7 @@ string ScoreString(float pFlags, float pValue)
                valstr = TIME_ENCODED_TOSTRING(pValue);
        else
                valstr = ftos(pValue);
-       
+
        return valstr;
 }
 
@@ -664,7 +664,7 @@ string fixPriorityList(string order, float from, float to, float subtract, float
                                neworder = strcat(neworder, ftos(w), " ");
                }
        }
-       
+
        return substring(neworder, 0, strlen(neworder) - 1);
 }
 
@@ -677,7 +677,7 @@ string mapPriorityList(string order, string(string) mapfunc)
        neworder = "";
        for(i = 0; i < n; ++i)
                neworder = strcat(neworder, mapfunc(argv(i)), " ");
-       
+
        return substring(neworder, 0, strlen(neworder) - 1);
 }
 
@@ -702,7 +702,7 @@ string swapInPriorityList(string order, float i, float j)
                }
                return substring(s, 0, strlen(s) - 1);
        }
-       
+
        return order;
 }
 
@@ -866,7 +866,7 @@ float cvar_settemp(string tmp_cvar, string tmp_value)
 
        created_saved_value = 0;
 
-       if not(tmp_cvar || tmp_value)
+       if (!(tmp_cvar || tmp_value))
        {
                dprint("Error: Invalid usage of cvar_settemp(string, string); !\n");
                return 0;
@@ -874,7 +874,7 @@ float cvar_settemp(string tmp_cvar, string tmp_value)
 
        if(!cvar_type(tmp_cvar))
        {
-               print(sprintf("Error: cvar %s doesn't exist!\n", tmp_cvar));
+               printf("Error: cvar %s doesn't exist!\n", tmp_cvar);
                return 0;
        }
 
@@ -911,7 +911,7 @@ float cvar_settemp_restore()
                        ++i;
                }
                else
-                       print(sprintf("Error: cvar %s doesn't exist anymore! It can still be restored once it's manually recreated.\n", e.netname));
+                       printf("Error: cvar %s doesn't exist anymore! It can still be restored once it's manually recreated.\n", e.netname);
        }
 
        return i;
@@ -1100,7 +1100,7 @@ vector rgb_to_hsv(vector rgb)
                hsv_y = 0;
        else
                hsv_y = 1 - mi/ma;
-       
+
        return hsv;
 }
 
@@ -1118,7 +1118,7 @@ vector rgb_to_hsl(vector rgb)
        ma = max(rgb_x, rgb_y, rgb_z);
 
        hsl_x = rgb_mi_ma_to_hue(rgb, mi, ma);
-       
+
        hsl_z = 0.5 * (mi + ma);
        if(mi == ma)
                hsl_y = 0;
@@ -1126,7 +1126,7 @@ vector rgb_to_hsl(vector rgb)
                hsl_y = (ma - mi) / (2*hsl_z);
        else // if(hsl_z > 0.5)
                hsl_y = (ma - mi) / (2 - 2*hsl_z);
-       
+
        return hsl;
 }
 
@@ -1138,7 +1138,7 @@ vector hsl_to_rgb(vector hsl)
                maminusmi = hsl_y * 2 * hsl_z;
        else
                maminusmi = hsl_y * (2 - 2 * hsl_z);
-       
+
        // hsl_z     = 0.5 * mi + 0.5 * ma
        // maminusmi =     - mi +       ma
        mi = hsl_z - 0.5 * maminusmi;
@@ -1199,7 +1199,7 @@ float textLengthUpToWidth(string theText, float maxWidth, vector theSize, textLe
                // terminate, as the range still halves each time - but nevertheless, it is
                // guaranteed that it finds ONE valid cutoff place (where "left" is in
                // range, and "right" is outside).
-               
+
                // terencehill: the following code detects truncated ^xrgb tags (e.g. ^x or ^x4)
                // and decrease left on the basis of the chars detected of the truncated tag
                // Even if the ^xrgb tag is not complete/correct, left is decreased
@@ -1227,7 +1227,7 @@ float textLengthUpToWidth(string theText, float maxWidth, vector theSize, textLe
                                }
                        }
        }
-       
+
        return left;
 }
 
@@ -1263,7 +1263,7 @@ float textLengthUpToLength(string theText, float maxWidth, textLengthUpToLength_
                // terminate, as the range still halves each time - but nevertheless, it is
                // guaranteed that it finds ONE valid cutoff place (where "left" is in
                // range, and "right" is outside).
-               
+
                // terencehill: the following code detects truncated ^xrgb tags (e.g. ^x or ^x4)
                // and decrease left on the basis of the chars detected of the truncated tag
                // Even if the ^xrgb tag is not complete/correct, left is decreased
@@ -1291,7 +1291,7 @@ float textLengthUpToLength(string theText, float maxWidth, textLengthUpToLength_
                                }
                        }
        }
-       
+
        return left;
 }
 
@@ -1312,7 +1312,7 @@ string find_last_color_code(string s)
                        ++carets;
 
                // check if carets aren't all escaped
-               if (carets == 1 || mod(carets, 2) == 1) // first check is just an optimization
+               if (carets & 1)
                {
                        if(i+1 <= len)
                        if(strstrofs("0123456789", substring(s, i+1, 1), 0) >= 0)
@@ -1338,7 +1338,7 @@ string getWrappedLine(float w, vector theFontSize, textLengthUpToWidth_widthFunc
        string s;
 
        s = getWrappedLine_remaining;
-       
+
        if(w <= 0)
        {
                getWrappedLine_remaining = string_null;
@@ -1384,7 +1384,7 @@ string getWrappedLineLen(float w, textLengthUpToLength_lenFunction_t tw)
        string s;
 
        s = getWrappedLine_remaining;
-       
+
        if(w <= 0)
        {
                getWrappedLine_remaining = string_null;
@@ -1476,7 +1476,7 @@ float isGametypeInFilter(float gt, float tp, float ts, string pattern)
                if(strstrofs(strcat(",", pattern, ","), subpattern2, 0) < 0)
                if(strstrofs(strcat(",", pattern, ","), subpattern3, 0) < 0)
                {
-                       if not(subpattern4)
+                       if (!subpattern4)
                                return 0;
                        if(strstrofs(strcat(",", pattern, ","), subpattern4, 0) < 0)
                                return 0;
@@ -1712,7 +1712,7 @@ void check_unacceptable_compiler_bugs()
                error("fteqcc bug introduced with revision 3178 detected. Please upgrade fteqcc to a later revision, downgrade fteqcc to revision 3177, or pester Spike until he fixes it. You can set _allow_unacceptable_compiler_bugs 1 to skip this check, but expect stuff to be horribly broken then.");
 
        string s = "";
-       if not(s)
+       if (!s)
                error("The empty string counts as false. We do not want that!");
 }
 
@@ -1831,10 +1831,13 @@ void RandomSelection_Add(entity e, float f, string s, float weight, float priori
        }
 }
 
-vector healtharmor_maxdamage(float h, float a, float armorblock)
+#ifndef MENUQC
+vector healtharmor_maxdamage(float h, float a, float armorblock, float deathtype)
 {
        // NOTE: we'll always choose the SMALLER value...
        float healthdamage, armordamage, armorideal;
+       if (deathtype == DEATH_DROWN)  // Why should armor help here...
+               armorblock = 0;
        vector v;
        healthdamage = (h - 1) / (1 - armorblock); // damage we can take if we could use more health
        armordamage = a + (h - 1); // damage we can take if we could use more armor
@@ -1853,14 +1856,17 @@ vector healtharmor_maxdamage(float h, float a, float armorblock)
        return v;
 }
 
-vector healtharmor_applydamage(float a, float armorblock, float damage)
+vector healtharmor_applydamage(float a, float armorblock, float deathtype, float damage)
 {
        vector v;
+       if (deathtype == DEATH_DROWN)  // Why should armor help here...
+               armorblock = 0;
        v_y = bound(0, damage * armorblock, a); // save
        v_x = bound(0, damage - v_y, damage); // take
        v_z = 0;
        return v;
 }
+#endif
 
 string getcurrentmod()
 {
@@ -2046,7 +2052,7 @@ float get_model_parameters(string m, float sk)
        }
        get_model_parameters_fixbone = 0;
 
-       if not(m)
+       if (!m)
                return 1;
 
        if(substring(m, -9, 5) == "_lod1" || substring(m, -9, 5) == "_lod2")
@@ -2317,12 +2323,12 @@ float InterpretBoolean(string input)
                case "true":
                case "on":
                        return TRUE;
-               
+
                case "no":
                case "false":
                case "off":
                        return FALSE;
-               
+
                default: return stof(input);
        }
 }
@@ -2453,7 +2459,7 @@ float cubic_speedfunc_is_sane(float startspeedfactor, float endspeedfactor)
        /*
        // if this is the case, the possible zeros of the first derivative are outside
        // 0..1
-       We can calculate this condition as condition 
+       We can calculate this condition as condition
        if(se <= 3)
                return TRUE;
        */
@@ -2486,6 +2492,28 @@ float cubic_speedfunc_is_sane(float startspeedfactor, float endspeedfactor)
        // (3, [0..3])
        // (3.5, [0.2..2.3])
        // (4, 1)
+
+       /*
+          On another note:
+          inflection point is always at (2s + e - 3) / (3s + 3e - 6).
+
+          s + e - 2 == 0: no inflection
+
+          s + e > 2:
+          0 < inflection < 1 if:
+          0 < 2s + e - 3 < 3s + 3e - 6
+          2s + e > 3 and 2e + s > 3
+
+          s + e < 2:
+          0 < inflection < 1 if:
+          0 > 2s + e - 3 > 3s + 3e - 6
+          2s + e < 3 and 2e + s < 3
+
+          Therefore: there is an inflection point iff:
+          e outside (3 - s)/2 .. 3 - s*2
+
+          in other words, if (s,e) in triangle (1,1)(0,3)(0,1.5) or in triangle (1,1)(3,0)(1.5,0)
+       */
 }
 
 .float FindConnectedComponent_processing;
@@ -2559,12 +2587,12 @@ void backtrace(string msg)
 string CCR(string input)
 {
        // See the autocvar declarations in util.qh for default values
-       
+
        // foreground/normal colors
-       input = strreplace("^F1", strcat("^", autocvar_hud_colorset_foreground_1), input); 
-       input = strreplace("^F2", strcat("^", autocvar_hud_colorset_foreground_2), input); 
-       input = strreplace("^F3", strcat("^", autocvar_hud_colorset_foreground_3), input); 
-       input = strreplace("^F4", strcat("^", autocvar_hud_colorset_foreground_4), input); 
+       input = strreplace("^F1", strcat("^", autocvar_hud_colorset_foreground_1), input);
+       input = strreplace("^F2", strcat("^", autocvar_hud_colorset_foreground_2), input);
+       input = strreplace("^F3", strcat("^", autocvar_hud_colorset_foreground_3), input);
+       input = strreplace("^F4", strcat("^", autocvar_hud_colorset_foreground_4), input);
 
        // "kill" colors
        input = strreplace("^K1", strcat("^", autocvar_hud_colorset_kill_1), input);
@@ -2623,15 +2651,15 @@ float Announcer_PickNumber(float type, float num)
                        switch(num)
                        {
                                case 10: return ANNCE_NUM_GAMESTART_10;
-                               case 9:  return ANNCE_NUM_GAMESTART_9; 
-                               case 8:  return ANNCE_NUM_GAMESTART_8; 
-                               case 7:  return ANNCE_NUM_GAMESTART_7; 
-                               case 6:  return ANNCE_NUM_GAMESTART_6; 
-                               case 5:  return ANNCE_NUM_GAMESTART_5; 
-                               case 4:  return ANNCE_NUM_GAMESTART_4; 
-                               case 3:  return ANNCE_NUM_GAMESTART_3; 
-                               case 2:  return ANNCE_NUM_GAMESTART_2; 
-                               case 1:  return ANNCE_NUM_GAMESTART_1; 
+                               case 9:  return ANNCE_NUM_GAMESTART_9;
+                               case 8:  return ANNCE_NUM_GAMESTART_8;
+                               case 7:  return ANNCE_NUM_GAMESTART_7;
+                               case 6:  return ANNCE_NUM_GAMESTART_6;
+                               case 5:  return ANNCE_NUM_GAMESTART_5;
+                               case 4:  return ANNCE_NUM_GAMESTART_4;
+                               case 3:  return ANNCE_NUM_GAMESTART_3;
+                               case 2:  return ANNCE_NUM_GAMESTART_2;
+                               case 1:  return ANNCE_NUM_GAMESTART_1;
                        }
                        break;
                }
@@ -2640,15 +2668,15 @@ float Announcer_PickNumber(float type, float num)
                        switch(num)
                        {
                                case 10: return ANNCE_NUM_IDLE_10;
-                               case 9:  return ANNCE_NUM_IDLE_9; 
-                               case 8:  return ANNCE_NUM_IDLE_8; 
-                               case 7:  return ANNCE_NUM_IDLE_7; 
-                               case 6:  return ANNCE_NUM_IDLE_6; 
-                               case 5:  return ANNCE_NUM_IDLE_5; 
-                               case 4:  return ANNCE_NUM_IDLE_4; 
-                               case 3:  return ANNCE_NUM_IDLE_3; 
-                               case 2:  return ANNCE_NUM_IDLE_2; 
-                               case 1:  return ANNCE_NUM_IDLE_1; 
+                               case 9:  return ANNCE_NUM_IDLE_9;
+                               case 8:  return ANNCE_NUM_IDLE_8;
+                               case 7:  return ANNCE_NUM_IDLE_7;
+                               case 6:  return ANNCE_NUM_IDLE_6;
+                               case 5:  return ANNCE_NUM_IDLE_5;
+                               case 4:  return ANNCE_NUM_IDLE_4;
+                               case 3:  return ANNCE_NUM_IDLE_3;
+                               case 2:  return ANNCE_NUM_IDLE_2;
+                               case 1:  return ANNCE_NUM_IDLE_1;
                        }
                        break;
                }
@@ -2657,15 +2685,15 @@ float Announcer_PickNumber(float type, float num)
                        switch(num)
                        {
                                case 10: return ANNCE_NUM_KILL_10;
-                               case 9:  return ANNCE_NUM_KILL_9; 
-                               case 8:  return ANNCE_NUM_KILL_8; 
-                               case 7:  return ANNCE_NUM_KILL_7; 
-                               case 6:  return ANNCE_NUM_KILL_6; 
-                               case 5:  return ANNCE_NUM_KILL_5; 
-                               case 4:  return ANNCE_NUM_KILL_4; 
-                               case 3:  return ANNCE_NUM_KILL_3; 
-                               case 2:  return ANNCE_NUM_KILL_2; 
-                               case 1:  return ANNCE_NUM_KILL_1; 
+                               case 9:  return ANNCE_NUM_KILL_9;
+                               case 8:  return ANNCE_NUM_KILL_8;
+                               case 7:  return ANNCE_NUM_KILL_7;
+                               case 6:  return ANNCE_NUM_KILL_6;
+                               case 5:  return ANNCE_NUM_KILL_5;
+                               case 4:  return ANNCE_NUM_KILL_4;
+                               case 3:  return ANNCE_NUM_KILL_3;
+                               case 2:  return ANNCE_NUM_KILL_2;
+                               case 1:  return ANNCE_NUM_KILL_1;
                        }
                        break;
                }
@@ -2674,15 +2702,15 @@ float Announcer_PickNumber(float type, float num)
                        switch(num)
                        {
                                case 10: return ANNCE_NUM_RESPAWN_10;
-                               case 9:  return ANNCE_NUM_RESPAWN_9; 
-                               case 8:  return ANNCE_NUM_RESPAWN_8; 
-                               case 7:  return ANNCE_NUM_RESPAWN_7; 
-                               case 6:  return ANNCE_NUM_RESPAWN_6; 
-                               case 5:  return ANNCE_NUM_RESPAWN_5; 
-                               case 4:  return ANNCE_NUM_RESPAWN_4; 
-                               case 3:  return ANNCE_NUM_RESPAWN_3; 
-                               case 2:  return ANNCE_NUM_RESPAWN_2; 
-                               case 1:  return ANNCE_NUM_RESPAWN_1; 
+                               case 9:  return ANNCE_NUM_RESPAWN_9;
+                               case 8:  return ANNCE_NUM_RESPAWN_8;
+                               case 7:  return ANNCE_NUM_RESPAWN_7;
+                               case 6:  return ANNCE_NUM_RESPAWN_6;
+                               case 5:  return ANNCE_NUM_RESPAWN_5;
+                               case 4:  return ANNCE_NUM_RESPAWN_4;
+                               case 3:  return ANNCE_NUM_RESPAWN_3;
+                               case 2:  return ANNCE_NUM_RESPAWN_2;
+                               case 1:  return ANNCE_NUM_RESPAWN_1;
                        }
                        break;
                }
@@ -2691,15 +2719,15 @@ float Announcer_PickNumber(float type, float num)
                        switch(num)
                        {
                                case 10: return ANNCE_NUM_ROUNDSTART_10;
-                               case 9:  return ANNCE_NUM_ROUNDSTART_9; 
-                               case 8:  return ANNCE_NUM_ROUNDSTART_8; 
-                               case 7:  return ANNCE_NUM_ROUNDSTART_7; 
-                               case 6:  return ANNCE_NUM_ROUNDSTART_6; 
-                               case 5:  return ANNCE_NUM_ROUNDSTART_5; 
-                               case 4:  return ANNCE_NUM_ROUNDSTART_4; 
-                               case 3:  return ANNCE_NUM_ROUNDSTART_3; 
-                               case 2:  return ANNCE_NUM_ROUNDSTART_2; 
-                               case 1:  return ANNCE_NUM_ROUNDSTART_1; 
+                               case 9:  return ANNCE_NUM_ROUNDSTART_9;
+                               case 8:  return ANNCE_NUM_ROUNDSTART_8;
+                               case 7:  return ANNCE_NUM_ROUNDSTART_7;
+                               case 6:  return ANNCE_NUM_ROUNDSTART_6;
+                               case 5:  return ANNCE_NUM_ROUNDSTART_5;
+                               case 4:  return ANNCE_NUM_ROUNDSTART_4;
+                               case 3:  return ANNCE_NUM_ROUNDSTART_3;
+                               case 2:  return ANNCE_NUM_ROUNDSTART_2;
+                               case 1:  return ANNCE_NUM_ROUNDSTART_1;
                        }
                        break;
                }
@@ -2708,15 +2736,15 @@ float Announcer_PickNumber(float type, float num)
                        switch(num)
                        {
                                case 10: return ANNCE_NUM_10;
-                               case 9:  return ANNCE_NUM_9; 
-                               case 8:  return ANNCE_NUM_8; 
-                               case 7:  return ANNCE_NUM_7; 
-                               case 6:  return ANNCE_NUM_6; 
-                               case 5:  return ANNCE_NUM_5; 
-                               case 4:  return ANNCE_NUM_4; 
-                               case 3:  return ANNCE_NUM_3; 
-                               case 2:  return ANNCE_NUM_2; 
-                               case 1:  return ANNCE_NUM_1; 
+                               case 9:  return ANNCE_NUM_9;
+                               case 8:  return ANNCE_NUM_8;
+                               case 7:  return ANNCE_NUM_7;
+                               case 6:  return ANNCE_NUM_6;
+                               case 5:  return ANNCE_NUM_5;
+                               case 4:  return ANNCE_NUM_4;
+                               case 3:  return ANNCE_NUM_3;
+                               case 2:  return ANNCE_NUM_2;
+                               case 1:  return ANNCE_NUM_1;
                        }
                        break;
                }
index 47865428c18f5a8869e295f42a0e99eebfda886f..e4ce0230903c820f7d81568fcb06d7cdde2cc76a 100644 (file)
@@ -6,6 +6,12 @@
 // a dummy macro that prevents the "hanging ;" warning
 #define ENDS_WITH_CURLY_BRACE
 
+#ifdef GMQCC
+# define ACCUMULATE_FUNCTION(func,otherfunc) \
+       [[accumulate]] void func() { otherfunc(); }
+# define CALL_ACCUMULATED_FUNCTION(func) \
+       func()
+#else
 #ifdef HAVE_YO_DAWG_CPP
 // TODO make ascii art pic of xzibit
 // YO DAWG!
@@ -24,7 +30,7 @@
        func()
 #else
 # define ACCUMULATE_FUNCTION(func,otherfunc) \
-       .void _ACCUMULATE_##func##__##otherfunc;
+       .float _ACCUMULATE_##func##__##otherfunc
 void ACCUMULATE_call(string func)
 {
        float i;
@@ -41,11 +47,12 @@ void ACCUMULATE_call(string func)
 # define CALL_ACCUMULATED_FUNCTION(func) \
        ACCUMULATE_call(#func)
 #endif
+#endif
 
 // used for simplifying ACCUMULATE_FUNCTIONs
 #define SET_FIRST_OR_LAST(input,first,count) if(!input) { input = (first + count); }
 #define SET_FIELD_COUNT(field,first,count) if(!field) { field = (first + count); ++count; }
-#define CHECK_MAX_COUNT(name,max,count,type) if(count == max) { error(strcat("Maximum ", type, " hit: ", #name, ": ", ftos(count), ".\n")); }
+#define CHECK_MAX_COUNT(name,max,count,type) if(count > max) { error(strcat("Maximum ", type, " hit: ", #name, ": ", ftos(count), ".\n")); }
 
 // this returns a tempstring containing a copy of s with additional \n newlines added, it also replaces \n in the text with a real newline
 // NOTE: s IS allowed to be a tempstring
@@ -94,7 +101,7 @@ void buf_save(float buf, string filename);
 
 // modulo function
 #ifndef MENUQC
-float mod(float a, float b) { return a - (floor(a / b) * b); }   
+float mod(float a, float b) { return a - (floor(a / b) * b); }
 #endif
 
 #define TIME_TO_NTHS(t,n) floor((t) * (n) + 0.4)
@@ -220,8 +227,10 @@ string RandomSelection_chosen_string;
 void RandomSelection_Init();
 void RandomSelection_Add(entity e, float f, string s, float weight, float priority);
 
-vector healtharmor_maxdamage(float h, float a, float armorblock); // returns vector: maxdamage, armorideal, 1 if fully armored
-vector healtharmor_applydamage(float a, float armorblock, float damage); // returns vector: take, save, 0
+#ifndef MENUQC
+vector healtharmor_maxdamage(float h, float a, float armorblock, float deathtype); // returns vector: maxdamage, armorideal, 1 if fully armored
+vector healtharmor_applydamage(float a, float armorblock, float deathtype, float damage); // returns vector: take, save, 0
+#endif
 
 string getcurrentmod();
 
@@ -358,6 +367,12 @@ void FindConnectedComponent(entity e, .entity fld, findNextEntityNearFunction_t
 // expand multiple arguments into one argument by stripping parenthesis
 #define XPD(...) __VA_ARGS__
 
+// Some common varargs functions. Lowercase as they match C.
+#define printf(...) print(sprintf(__VA_ARGS__))
+#define dprintf(...) dprint(sprintf(__VA_ARGS__))
+#define fprintf(file, ...) fputs(file, sprintf(__VA_ARGS__))
+#define bprintf(...) bprint(sprintf(__VA_ARGS__))
+
 #ifndef MENUQC
 void backtrace(string msg);
 #endif
index 2c7bc2d925da89fc0c1d971ad86e2ca696cddb2c..e04b92ecc8d81f1a587a9959e3e135d97303ba67 100644 (file)
@@ -203,7 +203,7 @@ void CSQCModel_Draw()
 void CSQCModel_Read(float isnew)
 {
        float sf;
-       sf = ReadShort();
+       sf = ReadInt24_t();
 
        // some nice flags for CSQCMODEL_IF and the hooks
        local noref float isplayer = (self.entnum >= 1 && self.entnum <= maxclients);
@@ -236,15 +236,18 @@ void CSQCModel_Read(float isnew)
 #undef CSQCMODEL_IF
 
        if(sf & CSQCMODEL_PROPERTY_MODELINDEX)
+       {
+               vector pmin = self.mins, pmax = self.maxs;
                setmodelindex(self, self.modelindex); // this retrieves the .model key and sets mins/maxs/absmin/absmax
-               // FIXME do we WANT this to override mins/maxs?
+               setsize(self, pmin, pmax);
+       }
 
        if(sf & CSQCMODEL_PROPERTY_TELEPORTED)
        {
                self.iflags |= IFLAG_TELEPORTED;
                self.csqcmodel_teleported = 1;
        }
-       
+
        CSQCModel_InterpolateAnimation_Note(sf);
        InterpolateOrigin_Note();
        CSQCPlayer_PostUpdate();
index 46c312f160ec8e333bd566897cf37aabc559affd..4f7381a4af83fa73047368e1b9bccd5492e1cc09 100644 (file)
@@ -60,13 +60,13 @@ void CSQCPlayer_SetPredictionError(vector o, vector v, float onground_diff)
        // commented out as this one did not help
        if(onground_diff)
        {
-               print(sprintf("ONGROUND MISMATCH: %d x=%v v=%v\n", onground_diff, o, v));
+               printf("ONGROUND MISMATCH: %d x=%v v=%v\n", onground_diff, o, v);
                return;
        }
        */
        if(vlen(o) > 32 || vlen(v) > 192)
        {
-               //print(sprintf("TOO BIG: x=%v v=%v\n", o, v));
+               //printf("TOO BIG: x=%v v=%v\n", o, v);
                return;
        }
 
index f6044cb283f3cf3b9b87959121df6c9abfff81b2..2c13404f5f6f6a4490d26c3a40a9c3011d5cb7e5 100644 (file)
@@ -50,14 +50,15 @@ IN THE SOFTWARE.\
 .float frame2time;
 .float lerpfrac;
 
-#define CSQCMODEL_PROPERTY_FRAME 32768
-#define CSQCMODEL_PROPERTY_TELEPORTED 16384 // the "teleport bit" cancelling interpolation
-#define CSQCMODEL_PROPERTY_MODELINDEX 8192
-#define CSQCMODEL_PROPERTY_ORIGIN 4096
-#define CSQCMODEL_PROPERTY_YAW 2048
-#define CSQCMODEL_PROPERTY_PITCHROLL 1024
-#define CSQCMODEL_PROPERTY_FRAME2 512
-#define CSQCMODEL_PROPERTY_LERPFRAC 256
+#define CSQCMODEL_PROPERTY_FRAME 8388608
+#define CSQCMODEL_PROPERTY_TELEPORTED 4194304 // the "teleport bit" cancelling interpolation
+#define CSQCMODEL_PROPERTY_MODELINDEX 2097152
+#define CSQCMODEL_PROPERTY_ORIGIN 1048576
+#define CSQCMODEL_PROPERTY_YAW 524288
+#define CSQCMODEL_PROPERTY_PITCHROLL 262144
+#define CSQCMODEL_PROPERTY_FRAME2 131072
+#define CSQCMODEL_PROPERTY_LERPFRAC 65536
+#define CSQCMODEL_PROPERTY_SIZE 32768
 
 #define ALLPROPERTIES_COMMON \
        CSQCMODEL_PROPERTY(CSQCMODEL_PROPERTY_FRAME, float, ReadByte, WriteByte, frame) \
@@ -65,6 +66,12 @@ IN THE SOFTWARE.\
        CSQCMODEL_PROPERTY(CSQCMODEL_PROPERTY_ORIGIN, float, ReadCoord, WriteCoord, origin_x) \
        CSQCMODEL_PROPERTY(CSQCMODEL_PROPERTY_ORIGIN, float, ReadCoord, WriteCoord, origin_y) \
        CSQCMODEL_PROPERTY(CSQCMODEL_PROPERTY_ORIGIN, float, ReadCoord, WriteCoord, origin_z) \
+       CSQCMODEL_PROPERTY(CSQCMODEL_PROPERTY_SIZE, float, ReadShort, WriteShort, mins_x) \
+       CSQCMODEL_PROPERTY(CSQCMODEL_PROPERTY_SIZE, float, ReadShort, WriteShort, mins_y) \
+       CSQCMODEL_PROPERTY(CSQCMODEL_PROPERTY_SIZE, float, ReadShort, WriteShort, mins_z) \
+       CSQCMODEL_PROPERTY(CSQCMODEL_PROPERTY_SIZE, float, ReadShort, WriteShort, maxs_x) \
+       CSQCMODEL_PROPERTY(CSQCMODEL_PROPERTY_SIZE, float, ReadShort, WriteShort, maxs_y) \
+       CSQCMODEL_PROPERTY(CSQCMODEL_PROPERTY_SIZE, float, ReadShort, WriteShort, maxs_z) \
        CSQCMODEL_PROPERTY(CSQCMODEL_PROPERTY_PITCHROLL, float, ReadAngle, WriteAngle, angles_x) \
        CSQCMODEL_PROPERTY(CSQCMODEL_PROPERTY_YAW, float, ReadAngle, WriteAngle, angles_y) \
        CSQCMODEL_PROPERTY(CSQCMODEL_PROPERTY_PITCHROLL, float, ReadAngle, WriteAngle, angles_z) \
index 1baad7b98d31e5790ff68a570c3b4e079d960470..ef47a54da35370694038574a498a851092142d86 100644 (file)
@@ -34,7 +34,7 @@ float CSQCModel_Send(entity to, float sf)
        unused_float = isnolocalplayer;
 
        WriteByte(MSG_ENTITY, ENT_CLIENT_MODEL);
-       WriteShort(MSG_ENTITY, sf);
+       WriteInt24_t(MSG_ENTITY, sf);
 
 #define CSQCMODEL_IF(cond) if(cond) {
 #define CSQCMODEL_ENDIF }
@@ -100,7 +100,7 @@ void CSQCModel_CheckUpdate()
        }
 #define CSQCMODEL_PROPERTY_SCALED(flag,t,r,w,f,s,mi,ma) \
        { \
-               t tmp = bound(mi, s * self.f, ma) - mi; \
+               t tmp = rint(bound(mi, s * self.f, ma) - mi); \
                if(tmp != self.csqcmodel_##f) \
                { \
                        self.csqcmodel_##f = tmp; \
index f858afba2fdaa3457f8c1cc33b63dfcf336a9b3c..8f4ec8b414f34fc2a42177f15cda496f59aa1a9b 100644 (file)
@@ -194,7 +194,7 @@ const float VF_DRAWCROSSHAIR        = 21;   //(float)
 const float VF_CL_VIEWANGLES   = 33;   //(vector)
 const float VF_CL_VIEWANGLES_X = 34;   //(float)
 const float VF_CL_VIEWANGLES_Y = 35;   //(float)
-const float VF_CL_VIEWANGLES_Z = 36;   //(float) 
+const float VF_CL_VIEWANGLES_Z = 36;   //(float)
 
 const float VF_PERSPECTIVE      = 200;
 
@@ -291,7 +291,7 @@ const float TE_EXPLOSION2                                   = 12;
        const float TE_EXPLOSIONQUAD                            = 70;
        const float TE_SPIKEQUAD                                        = 58;
        const float TE_SUPERSPIKEQUAD                           = 59;
-       
+
 // PFlags for Dynamic Lights
 const float PFLAGS_NOSHADOW                                    = 1;
 const float PFLAGS_CORONA                                      = 2;
@@ -447,6 +447,7 @@ string(float ccase, float calpha, float cnum, string s, ...) strconv = #224;
 string(float chars, string s, ...) strpad = #225;
 string(string info, string key, string value, ...) infoadd = #226;
 string(string info, string key) infoget = #227;
+float(string s1, string s2) strcmp = #228;
 float(string s1, string s2, float len) strncmp = #228;
 float(string s1, string s2) strcasecmp = #229;
 float(string s1, string s2, float len) strncasecmp = #230;
@@ -656,11 +657,11 @@ float PARTICLE_BEAM = 3;
 float particle_type; // one of PT_
 float particle_blendmode; // one of PBLEND_ values
 float particle_orientation; // one of PARTICLE_ values
-vector particle_color1; 
+vector particle_color1;
 vector particle_color2;
 float particle_tex; // number of chunk in particlefont
 float particle_size;
-float particle_sizeincrease; 
+float particle_sizeincrease;
 float particle_alpha;
 float particle_alphafade;
 float particle_time;
@@ -692,10 +693,10 @@ float(vector org, vector vel) spawnparticle = #527; // returns 0 when failed, 1
 float(vector org, vector vel, float theme) quickparticle = #527; // not reading globals, just theme, returns 0 when failed, 1 when spawned
 float(vector org, vector vel, float delay, float collisiondelay) delayedparticle = #528;
 float(vector org, vector vel, float delay, float collisiondelay, float theme) quickdelayedparticle = #528;
-// description: this builtin provides an easy and flexible way to spawn particles, 
-// it is not created as replace for DP_SV_POINTPARTICLES but as an addition to it. 
+// description: this builtin provides an easy and flexible way to spawn particles,
+// it is not created as replace for DP_SV_POINTPARTICLES but as an addition to it.
 // With this extension you can create a specific particles like rain particles, or entity particles
-// notes: 
+// notes:
 // 1) 0 is default particle template, it could be changed
 // 2) color vectors could have value 0-255 of each component
 // restrictions: max themes could be between 4 and 2048
@@ -805,7 +806,7 @@ vector(float entitynum, float fldnum) getentityvec = #504;
 //darkplaces implementation: Blub\0
 //console commands:
 //  loadfont fontname fontmaps size1 size2 ...
-//   A font can simply be gfx/tgafile (freetype fonts doent need extension), 
+//   A font can simply be gfx/tgafile (freetype fonts doent need extension),
 //   or alternatively you can specify multiple fonts and faces
 //   Like this: gfx/vera-sans:2,gfx/fallback:1
 //   to load face 2 of the font gfx/vera-sans and use face 1
@@ -834,7 +835,7 @@ float FONT_USER6 = 14;     // 'user6', userdefined fonts
 float FONT_USER7 = 15;     // 'user7' slot, userdefined fonts
 //builtin definitions:
 float findfont(string s) = #356; // find font by fontname and return it's index
-float loadfont(string fontname, string fontmaps, string sizes, float slot, float fix_scale, float fix_voffset) = #357; 
+float loadfont(string fontname, string fontmaps, string sizes, float slot, float fix_scale, float fix_voffset) = #357;
 // loads font immediately so stringwidth() function can be used just after builtin call
 // returns a font slotnum (which is used to set drawfont to)
 // first 3 parms are identical to "loadfont" console command ones
@@ -865,7 +866,7 @@ float stringwidth_menu(string text, float allowColorCodes, vector size) = #468;
 //   r_font_postprocess_shadow_y X  : font outline shadow y shift amount, applied during outlining
 //   r_font_postprocess_shadow_z X  : font outline shadow z shift amount, applied during blurring
 //description: engine support for truetype/freetype fonts
-//so .AFM+.PFB/.OTF/.TTF files could be stuffed as fontmaps in loadfont() 
+//so .AFM+.PFB/.OTF/.TTF files could be stuffed as fontmaps in loadfont()
 //(console command version will support them as well)
 
 //DP_CSQC_BINDMAPS
@@ -896,7 +897,7 @@ float(string url, float id, string content_type, string delim, float buf, float
 //constant definitions:
 const float VF_MAINVIEW         = 400;
 //use setproperty(VF_MAINVIEW, 1); before calling R_RenderView for the render
-//that shall become the "main" view, which is e.g. used by PRYDON_CLIENTCURSOR 
+//that shall become the "main" view, which is e.g. used by PRYDON_CLIENTCURSOR
 //this flag is set for the first scene, and not cleared by R_ClearScene
 //this flag is automatically cleared by R_RenderView
 //so when not using this extension, the first view rendered is the main view
index 0a5504392736ebd13e4ee1456a5bb39e80a71950..ef86a02b3e730948844eaf088f86638e877bb2f4 100644 (file)
@@ -436,7 +436,7 @@ void(entity e, entity tagentity, string tagname) setattachment = #443; // attach
 //darkplaces implementation: Blub\0
 //cvar definitions:
 //   utf8_enable: enable utf8 encoding
-//description: utf8 characters are allowed inside cvars, protocol strings, files, progs strings, etc., 
+//description: utf8 characters are allowed inside cvars, protocol strings, files, progs strings, etc.,
 //and count as 1 char for string functions like strlen, substring, etc.
 // note: utf8_enable is run-time cvar, could be changed during execution
 // note: beware that str2chr() could return value bigger than 255 once utf8 is enabled
@@ -498,7 +498,7 @@ void(entity e, entity tagentity, string tagname) setattachment = #443; // attach
 // description: allows alternative 'static' lightstyle syntax : "=value"
 // examples: "=0.5", "=2.0", "=2.75"
 // could be used to control switchable lights or making styled lights with brightness > 2
-// Warning: this extension is experimental. It safely works in CSQC, but SVQC use is limited by the fact 
+// Warning: this extension is experimental. It safely works in CSQC, but SVQC use is limited by the fact
 // that other engines (which do not support this extension) could connect to a game and misunderstand this kind of lightstyle syntax
 
 //DP_LITSPRITES
@@ -1358,14 +1358,14 @@ float(string sample) soundlength = #534; // returns length of sound sample in se
 //syntax of .dpsubs files: each line in .dpsubs file defines 1 subtitle, there are three tokens:
 //   <start> <end> "string"
 //   start: subtitle start time in seconds
-//     end: subtitle time-to-show in seconds, if 0 - subtitle will be showed until next subtitle is started, 
+//     end: subtitle time-to-show in seconds, if 0 - subtitle will be showed until next subtitle is started,
 //          if below 0 - show until next subtitles minus this number of seconds
 //    text: subtitle text, color codes (Q3-style and ^xRGB) are allowed
 //example of subtitle file:
 //   3 0       "Vengeance! Vengeance for my eternity of suffering!"
 //   9 0       "Whelp! As if you knew what eternity was!"
 //   13        0       "Grovel before your true master."
-//   17        0       "Never!" 
+//   17        0       "Never!"
 //   18        7       "I'll hack you from crotch to gizzard and feed what's left of you to your brides..."
 
 //DP_SOLIDCORPSE
@@ -1732,11 +1732,11 @@ const float FORCETYPE_TORQUE = 3;
 .vector massofs;      // offsets a mass center out of object center, if not set a center of model bounds is used
 .float  friction;     // a friction of object, get multiplied by second objects's friction on contact
 .float  bouncefactor;
-.float  bouncestop; 
+.float  bouncestop;
 .float  jointtype;    // type of joint
 .float  forcetype;    // type of force
-.float  erp;          // error restitution parameter, makes ODE solver attempt to fix errors in contacts, 
-                      // bringing together 2 joints or fixing object being stuch in other object, 
+.float  erp;          // error restitution parameter, makes ODE solver attempt to fix errors in contacts,
+                      // bringing together 2 joints or fixing object being stuch in other object,
                                  // a value of 0.1 will fix slightly, a value of 1.0 attempts to fix whole error in one frame
                                  // use with care as high values makes system unstable and likely to explode
 //builtin definitions:
@@ -2426,6 +2426,7 @@ string(float ccase, float calpha, float cnum, string s, ...) strconv = #224; //
 string(float chars, string s, ...) strpad = #225; // pad string with spaces to a specified length, < 0 = left padding, > 0 = right padding
 string(string info, string key, string value, ...) infoadd = #226; // sets or adds a key/value pair to an infostring - note: forbidden characters are \ and "
 string(string info, string key) infoget = #227; // gets a key/value pair in an infostring, returns value or null if not found
+float(string s1, string s2) strcmp = #228; // compare two strings
 float(string s1, string s2, float len) strncmp = #228; // compare two strings up to the specified number of characters, if their length differs and is within the specified limit the result will be negative, otherwise it is the difference in value of their first non-matching character.
 float(string s1, string s2) strcasecmp = #229; // compare two strings with case-insensitive matching, characters a-z are considered equivalent to the matching A-Z character, no other differences, and this does not consider special characters equal even if they look similar
 float(string s1, string s2, float len) strncasecmp = #230; // same as strcasecmp but with a length limit, see strncmp
index 4885f2916c70641ca7488b9fedd016fa7e144551..0d6c253709540b5f4f82ce8a9d50d7472a2dd21f 100644 (file)
@@ -15,9 +15,10 @@ void         end_sys_fields;
 
 void() m_init;
 void(float keynr, float ascii) m_keydown;
-void() m_draw;
+void(float width, float height) m_draw;
 void(float mode) m_toggle;
 void() m_shutdown;
+// optional: float(float) m_gethostcachecategory;
 
 /////////////////////////////////////////////////////////
 // sys constants
@@ -303,7 +304,7 @@ float       drawstring(vector position, string text, vector scale, vector rgb, float a
 float  drawcolorcodedstring(vector position, string text, vector scale, float alpha, float flag) = #467;
 
 vector drawcolorcodedstring2(vector position, string text, vector scale, vector rgb, float alpha, float flag) = #467;
+
 float  drawpic(vector position, string pic, vector size, vector rgb, float alpha, float flag) = #456;
 
 float  drawfill(vector position, vector size, vector rgb, float alpha, float flag) = #457;
@@ -400,6 +401,7 @@ string(float ccase, float calpha, float cnum, string s, ...) strconv = #224;
 string(float chars, string s, ...) strpad = #225;
 string(string info, string key, string value, ...) infoadd = #226;
 string(string info, string key) infoget = #227;
+float(string s1, string s2) strcmp = #228;
 float(string s1, string s2, float len) strncmp = #228;
 float(string s1, string s2) strcasecmp = #229;
 float(string s1, string s2, float len) strncasecmp = #230;
@@ -561,8 +563,11 @@ void       resethostcachemasks(void) = #615;
 void   sethostcachemaskstring(float mask, float fld, string str, float op) = #616;
 void   sethostcachemasknumber(float mask, float fld, float num, float op) = #617;
 void   resorthostcache(void) = #618;
-void   sethostcachesort(float fld, float descending) = #619;
-void   refreshhostcache(void) = #620;
+float SLSF_DESCENDING = 1;
+float SLSF_FAVORITES = 2;
+float SLSF_CATEGORIES = 4;
+void   sethostcachesort(float fld, float slsf) = #619;
+void   refreshhostcache(...) = #620;  // optional boolean argument "clear_list"
 float  gethostcachenumber(float fld, float hostnr) = #621;
 float  gethostcacheindexforkey(string key) = #622;
 void   addwantedhostcachekey(string key) = #623;
index 2c0b1edf38aa33fcd42e6117bf4a5c6c108bd04a..c7499e58e40a8a94ba1f31f2c504f0310bb465a3 100644 (file)
@@ -51,6 +51,12 @@ void GameCommand(string theCommand)
                return;
        }
 
+       if(argv(0) == "update_conwidths_before_vid_restart")
+       {
+               updateConwidths(cvar("vid_width"), cvar("vid_height"), cvar("vid_pixelheight"));
+               return;
+       }
+
        if(argv(0) == "directmenu" || argv(0) == "directpanelhudmenu")
        {
                string filter = string_null;
index 9c0d032432f384a60299fddc697c5b2df918ee06..df93daa6e0bcd3cacaf8fbf57d3ffdbdb0d5ba35 100644 (file)
@@ -276,8 +276,10 @@ void draw_BorderPicture(vector theOrigin, string pic, vector theSize, vector the
 }
 void draw_Text(vector theOrigin, string theText, vector theSize, vector theColor, float theAlpha, float ICanHasKallerz)
 {
-       if(theSize_x <= 0 || theSize_y <= 0)
-               error("Drawing zero size text?\n");
+       if(theSize_x <= 0 || theSize_y <= 0) {
+               dprint("Drawing zero size text?\n");
+               return;
+       }
 
        //float wi;
        //wi = draw_TextWidth(theText, ICanHasKallerz, theSize);
index 6b32bae27080d279c760923b4ddd613868469079..8bbdfa70406e125083dc6572acedf2f123aeb120 100644 (file)
@@ -77,7 +77,7 @@ float Button_mouseRelease(entity me, vector pos)
        me.mouseDrag(me, pos); // verify coordinates
        if(me.pressed)
        {
-               if not(me.disabled)
+               if (!me.disabled)
                {
                        if(cvar("menu_sounds"))
                                localsound("sound/misc/menu2.wav");
@@ -162,7 +162,7 @@ void Button_draw(entity me)
        if(me.clickTime > 0 && me.clickTime <= frametime)
        {
                // keyboard click timer expired? Fire the event then.
-               if not(me.disabled)
+               if (!me.disabled)
                        if(me.onClick)
                                me.onClick(me, me.onClickEntity);
        }
index 6241cee03968c077249d62bfbdcb8b81a91ec3a9..f14a4ceb7c90c949a41ff322e3d2a3258e5e73ba 100644 (file)
@@ -85,7 +85,7 @@ void Container_showNotify(entity me)
 void Container_hideNotify(entity me)
 {
        entity e;
-       if not(me.shown)
+       if (!me.shown)
                return;
        me.shown = 0;
        for(e = me.firstChild; e; e = e.nextSibling)
@@ -347,7 +347,7 @@ void Container_removeItem(entity me, entity other)
 void Container_setFocus(entity me, entity other)
 {
        if(other)
-               if not(me.focused)
+               if (!me.focused)
                        error("Trying to set focus in a non-focused control!");
        if(me.focusedChild == other)
                return;
@@ -385,7 +385,7 @@ void Container_moveItemAfter(entity me, entity other, entity dest)
                n.prevSibling = p;
        else
                me.lastChild = p;
-       
+
        // now other got removed. Insert it behind dest now.
        other.prevSibling = dest;
        if(dest)
index 5fa0103532ca74369d74bca47051f27f85c6aa25..383578781544e96b900cca383fc702c377945de8 100644 (file)
@@ -4,7 +4,7 @@
 // - closable is 0
 // - rootDialog is 0
 // - title is ""
-// - marginTop is 
+// - marginTop is
 // - intendedHeight ends up to be the tab's actual height, or at least close
 // - titleFontSize is 0
 // - marginTop cancels out as much of titleHeight as needed (that is, it should be actualMarginTop - titleHeight)
@@ -135,7 +135,7 @@ void Dialog_configureDialog(entity me)
        me.frame.alpha = me.alpha;
        me.addItem(me, me.frame, '0 0 0', '1 1 0', 1);
 
-       if not(me.titleFontSize)
+       if (!me.titleFontSize)
                me.titleHeight = 0; // no title bar
 
        absWidth = me.intendedWidth * conwidth;
index 614f6d557679a465861e400a8e3cb9e1deebee1a..1c1bf5189bc34a48a824a46f132e96e79e2f83cb 100644 (file)
@@ -260,11 +260,11 @@ void InputBox_draw(entity me)
                vector p;
                vector theTempColor;
                float component;
-               
+
                p = me.realOrigin - eX * me.scrollPos;
                theColor = '1 1 1';
                theAlpha = 1;    //theVariableAlpha = 1; // changes when ^ax found
-               
+
                n = strlen(me.text);
                for(i = 0; i < n; ++i)
                {
@@ -300,24 +300,24 @@ void InputBox_draw(entity me)
                                else if(ch2 == "x") // ^x found
                                {
                                        theColor = '1 1 1';
-                                       
+
                                        component = HEXDIGIT_TO_DEC(substring(me.text, i+2, 1));
                                        if (component >= 0) // ^xr found
                                        {
                                                theTempColor_x = component/15;
-                                               
+
                                                component = HEXDIGIT_TO_DEC(substring(me.text, i+3, 1));
                                                if (component >= 0) // ^xrg found
                                                {
                                                        theTempColor_y = component/15;
-                                                       
+
                                                        component = HEXDIGIT_TO_DEC(substring(me.text, i+4, 1));
                                                        if (component >= 0) // ^xrgb found
                                                        {
                                                                theTempColor_z = component/15;
                                                                theColor = theTempColor;
                                                                w = draw_TextWidth(substring(me.text, i, 5), 0, me.realFontSize);
-                                                               
+
                                                                draw_Fill(p, eX * w + eY * me.realFontSize_y, '1 1 1', 0.5);
                                                                draw_Text(p, substring(me.text, i, 5), me.realFontSize, theColor, 1, 0);    // theVariableAlpha instead of 1 using alpha tags ^ax
                                                                i += 3;
index 4531a1f4e11c2f4917baef0e9d03d4f5bb4ef6f1..0f80c2b503dbd4a40a77d062470108035afc58f2 100644 (file)
@@ -56,7 +56,7 @@ float InputContainer_keyDown(entity me, float scan, float ascii, float shift)
                        {
                                for(ff = f.prevSibling; ff; ff = ff.prevSibling)
                                {
-                                       if not(ff.focusable)
+                                       if (!ff.focusable)
                                                continue;
                                        me.setFocus(me, ff);
                                        return 1;
@@ -66,7 +66,7 @@ float InputContainer_keyDown(entity me, float scan, float ascii, float shift)
                        {
                                for(ff = me.lastChild; ff; ff = ff.prevSibling)
                                {
-                                       if not(ff.focusable)
+                                       if (!ff.focusable)
                                                continue;
                                        me.setFocus(me, ff);
                                        return 1;
@@ -80,7 +80,7 @@ float InputContainer_keyDown(entity me, float scan, float ascii, float shift)
                        {
                                for(ff = f.nextSibling; ff; ff = ff.nextSibling)
                                {
-                                       if not(ff.focusable)
+                                       if (!ff.focusable)
                                                continue;
                                        me.setFocus(me, ff);
                                        return 1;
@@ -90,7 +90,7 @@ float InputContainer_keyDown(entity me, float scan, float ascii, float shift)
                        {
                                for(ff = me.firstChild; ff; ff = ff.nextSibling)
                                {
-                                       if not(ff.focusable)
+                                       if (!ff.focusable)
                                                continue;
                                        me.setFocus(me, ff);
                                        return 1;
@@ -108,7 +108,7 @@ float InputContainer__changeFocusXY(entity me, vector pos)
        e = me.mouseFocusedChild;
        ne = me.itemFromPoint(me, pos);
        if(ne)
-               if not(ne.focusable)
+               if (!ne.focusable)
                        ne = NULL;
        me.mouseFocusedChild = ne;
        if(ne)
index 5d0e7437fa8de17e77b93e7514918077cc6019eb..8406af01f6be3e68f3ab80260641d7d1145cf93c 100644 (file)
@@ -79,7 +79,7 @@ void Label_recalcPositionWithText(entity me, string t)
                        me.realOrigin_x = me.keepspaceLeft;
                if(!me.overrideCondenseFactor)
                        me.condenseFactor = spaceAvail / spaceUsed;
-               dprint(sprintf(_("NOTE: label text %s too wide for label, condensed by factor %f\n"), t, me.condenseFactor));
+               dprintf(_("NOTE: label text %s too wide for label, condensed by factor %f\n"), t, me.condenseFactor);
        }
 
        if(!me.overrideRealOrigin_y)
index c32057da8d2665e10655220354fd0aa85bee5dbb..0f9502d97f022bb7c434da93aa4c6cf219e25df3 100644 (file)
@@ -38,13 +38,40 @@ CLASS(ListBox) EXTENDS(Item)
        METHOD(ListBox, drawListBoxItem, void(entity, float, vector, float)) // item number, width/height, selected
        METHOD(ListBox, clickListBoxItem, void(entity, float, vector)) // item number, relative clickpos
        METHOD(ListBox, setSelected, void(entity, float))
+
+       METHOD(ListBox, getLastFullyVisibleItemAtScrollPos, float(entity, float))
+       METHOD(ListBox, getFirstFullyVisibleItemAtScrollPos, float(entity, float))
+
+       // NOTE: override these four methods if you want variable sized list items
+       METHOD(ListBox, getTotalHeight, float(entity))
+       METHOD(ListBox, getItemAtPos, float(entity, float))
+       METHOD(ListBox, getItemStart, float(entity, float))
+       METHOD(ListBox, getItemHeight, float(entity, float))
+       // NOTE: if getItemAt* are overridden, it may make sense to cache the
+       // start and height of the last item returned by getItemAtPos and fast
+       // track returning their properties for getItemStart and getItemHeight.
+       // The "hot" code path calls getItemAtPos first, then will query
+       // getItemStart and getItemHeight on it soon.
+       // When overriding, the following consistency rules must hold:
+       // getTotalHeight() == SUM(getItemHeight(i), i, 0, me.nItems-1)
+       // getItemStart(i+1) == getItemStart(i) + getItemHeight(i)
+       //   for 0 <= i < me.nItems-1
+       // getItemStart(0) == 0
+       // getItemStart(getItemAtPos(p)) <= p
+       //   if p >= 0
+       // getItemAtPos(p) == 0
+       //   if p < 0
+       // getItemStart(getItemAtPos(p)) + getItemHeight(getItemAtPos(p)) > p
+       //   if p < getTotalHeigt()
+       // getItemAtPos(p) == me.nItems - 1
+       //   if p >= getTotalHeight()
 ENDCLASS(ListBox)
 #endif
 
 #ifdef IMPLEMENTATION
 void ListBox_setSelected(entity me, float i)
 {
-       me.selectedItem = floor(0.5 + bound(0, i, me.nItems - 1));
+       me.selectedItem = bound(0, i, me.nItems - 1);
 }
 void ListBox_resizeNotify(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
 {
@@ -56,23 +83,75 @@ void ListBox_configureListBox(entity me, float theScrollbarWidth, float theItemH
        me.scrollbarWidth = theScrollbarWidth;
        me.itemHeight = theItemHeight;
 }
+
+float ListBox_getTotalHeight(entity me)
+{
+       return me.nItems * me.itemHeight;
+}
+float ListBox_getItemAtPos(entity me, float pos)
+{
+       return floor(pos / me.itemHeight);
+}
+float ListBox_getItemStart(entity me, float i)
+{
+       return me.itemHeight * i;
+}
+float ListBox_getItemHeight(entity me, float i)
+{
+       return me.itemHeight;
+}
+
+float ListBox_getLastFullyVisibleItemAtScrollPos(entity me, float pos)
+{
+       return me.getItemAtPos(me, pos + 1.001) - 1;
+}
+float ListBox_getFirstFullyVisibleItemAtScrollPos(entity me, float pos)
+{
+       return me.getItemAtPos(me, pos - 0.001) + 1;
+}
 float ListBox_keyDown(entity me, float key, float ascii, float shift)
 {
        me.dragScrollTimer = time;
        if(key == K_MWHEELUP)
        {
                me.scrollPos = max(me.scrollPos - 0.5, 0);
-               me.setSelected(me, min(me.selectedItem, floor((me.scrollPos + 1) / me.itemHeight - 1)));
+               me.setSelected(me, min(me.selectedItem, me.getLastFullyVisibleItemAtScrollPos(me, me.scrollPos)));
        }
        else if(key == K_MWHEELDOWN)
        {
-               me.scrollPos = min(me.scrollPos + 0.5, me.nItems * me.itemHeight - 1);
-               me.setSelected(me, max(me.selectedItem, ceil(me.scrollPos / me.itemHeight)));
+               me.scrollPos = min(me.scrollPos + 0.5, me.getTotalHeight(me) - 1);
+               me.setSelected(me, max(me.selectedItem, me.getFirstFullyVisibleItemAtScrollPos(me, me.scrollPos)));
        }
        else if(key == K_PGUP || key == K_KP_PGUP)
-               me.setSelected(me, me.selectedItem - 1 / me.itemHeight);
+       {
+               float i = me.selectedItem;
+               float a = me.getItemHeight(me, i);
+               for(;;)
+               {
+                       --i;
+                       if (i < 0)
+                               break;
+                       a += me.getItemHeight(me, i);
+                       if (a >= 1)
+                               break;
+               }
+               me.setSelected(me, i + 1);
+       }
        else if(key == K_PGDN || key == K_KP_PGDN)
-               me.setSelected(me, me.selectedItem + 1 / me.itemHeight);
+       {
+               float i = me.selectedItem;
+               float a = me.getItemHeight(me, i);
+               for(;;)
+               {
+                       ++i;
+                       if (i >= me.nItems)
+                               break;
+                       a += me.getItemHeight(me, i);
+                       if (a >= 1)
+                               break;
+               }
+               me.setSelected(me, i - 1);
+       }
        else if(key == K_UPARROW || key == K_KP_UPARROW)
                me.setSelected(me, me.selectedItem - 1);
        else if(key == K_DOWNARROW || key == K_KP_DOWNARROW)
@@ -84,7 +163,7 @@ float ListBox_keyDown(entity me, float key, float ascii, float shift)
        }
        else if(key == K_END || key == K_KP_END)
        {
-               me.scrollPos = max(0, me.nItems * me.itemHeight - 1);
+               me.scrollPos = max(0, me.getTotalHeight(me) - 1);
                me.setSelected(me, me.nItems - 1);
        }
        else
@@ -108,20 +187,20 @@ float ListBox_mouseDrag(entity me, vector pos)
                {
                        // calculate new pos to v
                        float d;
-                       d = (pos_y - me.pressOffset) / (1 - (me.controlBottom - me.controlTop)) * (me.nItems * me.itemHeight - 1);
+                       d = (pos_y - me.pressOffset) / (1 - (me.controlBottom - me.controlTop)) * (me.getTotalHeight(me) - 1);
                        me.scrollPos = me.previousValue + d;
                }
                else
                        me.scrollPos = me.previousValue;
-               me.scrollPos = min(me.scrollPos, me.nItems * me.itemHeight - 1);
+               me.scrollPos = min(me.scrollPos, me.getTotalHeight(me) - 1);
                me.scrollPos = max(me.scrollPos, 0);
-               i = min(me.selectedItem, floor((me.scrollPos + 1) / me.itemHeight - 1));
-               i = max(i, ceil(me.scrollPos / me.itemHeight));
+               i = min(me.selectedItem, me.getLastFullyVisibleItemAtScrollPos(me, me.scrollPos));
+               i = max(i, ListBox_getFirstFullyVisibleItemAtScrollPos(me, me.scrollPos));
                me.setSelected(me, i);
        }
        else if(me.pressed == 2)
        {
-               me.setSelected(me, floor((me.scrollPos + pos_y) / me.itemHeight));
+               me.setSelected(me, me.getItemAtPos(me, me.scrollPos + pos_y));
        }
        return 1;
 }
@@ -141,13 +220,13 @@ float ListBox_mousePress(entity me, vector pos)
                {
                        // page up
                        me.scrollPos = max(me.scrollPos - 1, 0);
-                       me.setSelected(me, min(me.selectedItem, floor((me.scrollPos + 1) / me.itemHeight - 1)));
+                       me.setSelected(me, min(me.selectedItem, ListBox_getLastFullyVisibleItemAtScrollPos(me, me.scrollPos)));
                }
                else if(pos_y > me.controlBottom)
                {
                        // page down
-                       me.scrollPos = min(me.scrollPos + 1, me.nItems * me.itemHeight - 1);
-                       me.setSelected(me, max(me.selectedItem, ceil(me.scrollPos / me.itemHeight)));
+                       me.scrollPos = min(me.scrollPos + 1, me.getTotalHeight(me) - 1);
+                       me.setSelected(me, max(me.selectedItem, ListBox_getFirstFullyVisibleItemAtScrollPos(me, me.scrollPos)));
                }
                else
                {
@@ -161,7 +240,7 @@ float ListBox_mousePress(entity me, vector pos)
                // continue doing that while dragging (even when dragging outside). When releasing, forward the click to the then selected item.
                me.pressed = 2;
                // an item has been clicked. Select it, ...
-               me.setSelected(me, floor((me.scrollPos + pos_y) / me.itemHeight));
+               me.setSelected(me, me.getItemAtPos(me, me.scrollPos + pos_y));
        }
        return 1;
 }
@@ -177,11 +256,11 @@ float ListBox_mouseRelease(entity me, vector pos)
                me.pressed = 3; // do that here, so setSelected can know the mouse has been released
                // item dragging mode
                // select current one one last time...
-               me.setSelected(me, floor((me.scrollPos + pos_y) / me.itemHeight));
+               me.setSelected(me, me.getItemAtPos(me, me.scrollPos + pos_y));
                // and give it a nice click event
                if(me.nItems > 0)
                {
-                       me.clickListBoxItem(me, me.selectedItem, globalToBox(pos, eY * (me.selectedItem * me.itemHeight - me.scrollPos), eX * (1 - me.controlWidth) + eY * me.itemHeight));
+                       me.clickListBoxItem(me, me.selectedItem, globalToBox(pos, eY * (me.getItemStart(me, me.selectedItem) - me.scrollPos), eX * (1 - me.controlWidth) + eY * me.getItemHeight(me, me.selectedItem)));
                }
        }
        me.pressed = 0;
@@ -198,7 +277,7 @@ void ListBox_updateControlTopBottom(entity me)
 {
        float f;
        // scrollPos is in 0..1 and indicates where the "page" currently shown starts.
-       if(me.nItems * me.itemHeight <= 1)
+       if(me.getTotalHeight(me) <= 1)
        {
                // we don't need no stinkin' scrollbar, we don't need no view control...
                me.controlTop = 0;
@@ -214,20 +293,20 @@ void ListBox_updateControlTopBottom(entity me)
                                float save;
                                save = me.scrollPos;
                                // if selected item is below listbox, increase scrollpos so it is in
-                               me.scrollPos = max(me.scrollPos, me.selectedItem * me.itemHeight - 1 + me.itemHeight);
+                               me.scrollPos = max(me.scrollPos, me.getItemStart(me, me.selectedItem) + me.getItemHeight(me, me.selectedItem) - 1);
                                // if selected item is above listbox, decrease scrollpos so it is in
-                               me.scrollPos = min(me.scrollPos, me.selectedItem * me.itemHeight);
+                               me.scrollPos = min(me.scrollPos, me.getItemStart(me, me.selectedItem));
                                if(me.scrollPos != save)
                                        me.dragScrollTimer = time + 0.2;
                        }
                }
                // if scroll pos is below end of list, fix it
-               me.scrollPos = min(me.scrollPos, me.nItems * me.itemHeight - 1);
+               me.scrollPos = min(me.scrollPos, me.getTotalHeight(me) - 1);
                // if scroll pos is above beginning of list, fix it
                me.scrollPos = max(me.scrollPos, 0);
                // now that we know where the list is scrolled to, find out where to draw the control
-               me.controlTop = max(0, me.scrollPos / (me.nItems * me.itemHeight));
-               me.controlBottom = min((me.scrollPos + 1) / (me.nItems * me.itemHeight), 1);
+               me.controlTop = max(0, me.scrollPos / me.getTotalHeight(me));
+               me.controlBottom = min((me.scrollPos + 1) / me.getTotalHeight(me), 1);
 
                float minfactor;
                minfactor = 1 * me.controlWidth / me.size_y * me.size_x;
@@ -258,7 +337,7 @@ void ListBox_draw(entity me)
        if(me.controlWidth)
        {
                draw_VertButtonPicture(eX * (1 - me.controlWidth), strcat(me.src, "_s"), eX * me.controlWidth + eY, me.color2, 1);
-               if(me.nItems * me.itemHeight > 1)
+               if(me.getTotalHeight(me) > 1)
                {
                        vector o, s;
                        o = eX * (1 - me.controlWidth) + eY * me.controlTop;
@@ -274,16 +353,17 @@ void ListBox_draw(entity me)
        draw_SetClip();
        oldshift = draw_shift;
        oldscale = draw_scale;
-       absSize = boxToGlobalSize(me.size, eX * (1 - me.controlWidth) + eY * me.itemHeight);
-       draw_scale = boxToGlobalSize(eX * (1 - me.controlWidth) + eY * me.itemHeight, oldscale);
-       for(i = floor(me.scrollPos / me.itemHeight); i < me.nItems; ++i)
+       float y;
+       i = me.getItemAtPos(me, me.scrollPos);
+       y = me.getItemStart(me, i) - me.scrollPos;
+       for(; i < me.nItems && y < 1; ++i)
        {
-               float y;
-               y = i * me.itemHeight - me.scrollPos;
-               if(y >= 1)
-                       break;
                draw_shift = boxToGlobal(eY * y, oldshift, oldscale);
+               vector relSize = eX * (1 - me.controlWidth) + eY * me.getItemHeight(me, i);
+               absSize = boxToGlobalSize(relSize, me.size);
+               draw_scale = boxToGlobalSize(relSize, oldscale);
                me.drawListBoxItem(me, i, absSize, (me.selectedItem == i));
+               y += relSize_y;
        }
        draw_ClearClip();
 
index 97eabd7d66beffd07e0263f5474a63c572db5270..ca7ab8fc3785c479c27bee31ee099268a80a3659 100644 (file)
@@ -92,7 +92,7 @@ void Nexposee_calc(entity me)
        float scale;
        entity e, e2;
        vector emins, emaxs, e2mins, e2maxs;
-       
+
        for(scale = 0.7;; scale *= 0.99)
        {
                Nexposee_Calc_Scale(me, scale);
@@ -228,7 +228,7 @@ float Nexposee_mousePress(entity me, vector pos)
        }
        else if(me.animationState == 2)
        {
-               if not(SUPER(Nexposee).mousePress(me, pos))
+               if (!(SUPER(Nexposee).mousePress(me, pos)))
                {
                        me.animationState = 3;
                        SUPER(Nexposee).setFocus(me, NULL);
@@ -291,14 +291,14 @@ float Nexposee_keyDown(entity me, float scan, float ascii, float shift)
                        {
                                if(me.selectedChild)
                                        me.selectedChild = me.selectedChild.prevSibling;
-                               if not(me.selectedChild)
+                               if (!me.selectedChild)
                                        me.selectedChild = me.lastChild;
                        }
                        else
                        {
                                if(me.selectedChild)
                                        me.selectedChild = me.selectedChild.nextSibling;
-                               if not(me.selectedChild)
+                               if (!me.selectedChild)
                                        me.selectedChild = me.firstChild;
                        }
                }
@@ -331,7 +331,7 @@ float Nexposee_keyDown(entity me, float scan, float ascii, float shift)
                }
                if(me.focusedChild)
                        me.selectedChild = me.focusedChild;
-               if not(me.selectedChild)
+               if (!me.selectedChild)
                        me.animationState = 0;
                SUPER(Nexposee).setFocus(me, NULL);
                return 1;
index 7f3a2873fab88d4e363f8084b0405e95db2c7a16..8cd72ba9c76a253b73001f2b1a32e3b95d23bf89 100644 (file)
@@ -5,7 +5,7 @@ CLASS(Tab) EXTENDS(Dialog)
        ATTRIB(Tab, rootDialog, float, 0)
        ATTRIB(Tab, title, string, string_null)
        ATTRIB(Tab, titleFontSize, float, 0) // pixels
-       
+
        // still to be customized
        ATTRIB(Tab, intendedWidth, float, 0)
        ATTRIB(Tab, rows, float, 3)
index 028a1603a16c35ef50e43577c587f2127e59b8d8..37aaeb4ab1dda7c4cf7b7493f4293a27e907c393 100644 (file)
@@ -6,7 +6,9 @@ CLASS(TextSlider) EXTENDS(Slider)
        METHOD(TextSlider, valueToIdentifier, string(entity, float))
        METHOD(TextSlider, setValueFromIdentifier, void(entity, string))
        METHOD(TextSlider, getIdentifier, string(entity))
+       METHOD(TextSlider, clearValues, void(entity))
        METHOD(TextSlider, addValue, void(entity, string, string))
+       METHOD(TextSlider, insertValue, void(entity, float, string, string))
        METHOD(TextSlider, configureTextSliderValues, void(entity, string))
        ATTRIBARRAY(TextSlider, valueStrings, string, 256)
        ATTRIBARRAY(TextSlider, valueIdentifiers, string, 256)
@@ -46,12 +48,28 @@ string TextSlider_getIdentifier(entity me)
 {
        return me.valueToIdentifier(me, me.value);
 }
+void TextSlider_clearValues(entity me)
+{
+       me.nValues = 0;
+}
 void TextSlider_addValue(entity me, string theString, string theIdentifier)
 {
        me.(valueStrings[me.nValues]) = theString;
        me.(valueIdentifiers[me.nValues]) = theIdentifier;
        me.nValues += 1;
 }
+void TextSlider_insertValue(entity me, float pos, string theString, string theIdentifier)
+{
+       float i;
+       for (i = me.nValues; i > pos; --i)
+       {
+               me.(valueStrings[i]) = me.(valueStrings[i-1]);
+               me.(valueIdentifiers[i]) = me.(valueIdentifiers[i-1]);
+       }
+       me.(valueStrings[pos]) = theString;
+       me.(valueIdentifiers[pos]) = theIdentifier;
+       me.nValues += 1;
+}
 void TextSlider_configureTextSliderValues(entity me, string theDefault)
 {
        me.configureSliderValues(me, 0, 0, me.nValues - 1, 1, 1, 1);
index 1afc9f85d935c3e5958a31ba9cdd206fbf56afc0..382a19d2ded3074b4fae4dabc92c9e73e13b819f 100644 (file)
@@ -16,10 +16,13 @@ float menuInitialized;
 float menuNotTheFirstFrame;
 float menuMouseMode;
 
+float conwidth_s, conheight_s, vidwidth_s, vidheight_s, vidpixelheight_s,
+      realconwidth, realconheight;
+
 void m_sync()
 {
        updateCompression();
-       updateConwidths();
+       vidwidth_s = vidheight_s = vidpixelheight_s = 0;  // Force updateConwidths on next draw.
 
        loadAllCvars(main);
 }
@@ -53,7 +56,7 @@ void m_init()
        check_unacceptable_compiler_bugs();
 
 #ifdef WATERMARK
-       print(sprintf(_("^4MQC Build information: ^1%s\n"), WATERMARK));
+       printf(_("^4MQC Build information: ^1%s\n"), WATERMARK);
 #endif
 
        // list all game dirs (TEST)
@@ -64,7 +67,7 @@ void m_init()
                for(i = 0; ; ++i)
                {
                        s = getgamedirinfo(i, GETGAMEDIRINFO_NAME);
-                       if not(s)
+                       if (!s)
                                break;
                        dprint(s, ": ", getgamedirinfo(i, GETGAMEDIRINFO_DESCRIPTION));
                }
@@ -74,12 +77,13 @@ void m_init()
        CALL_ACCUMULATED_FUNCTION(RegisterWeapons);
        CALL_ACCUMULATED_FUNCTION(RegisterGametypes);
 
+       RegisterSLCategories();
+
        float ddsload = cvar("r_texture_dds_load");
        float texcomp = cvar("gl_texturecompression");
        updateCompression();
        if(ddsload != cvar("r_texture_dds_load") || texcomp != cvar("gl_texturecompression"))
                localcmd("\nr_restart\n");
-       initConwidths();
 
        if(!restarting)
        {
@@ -92,18 +96,26 @@ void m_init()
 }
 
 const float MENU_ASPECT = 1.25; // 1280x1024
-const float MENU_MINHEIGHT = 600;
-float conwidth_s, conheight_s, realconwidth, realconheight, screenconwidth, screenconheight;
+
 void draw_reset_cropped()
 {
-       draw_reset(screenconwidth, screenconheight, 0.5 * (realconwidth - screenconwidth), 0.5 * (realconheight - screenconheight));
+       draw_reset(conwidth, conheight, 0.5 * (realconwidth - conwidth), 0.5 * (realconheight - conheight));
 }
 void draw_reset_full()
 {
        draw_reset(realconwidth, realconheight, 0, 0);
 }
-void UpdateConWidthHeight()
+
+void UpdateConWidthHeight(float w, float h, float p)
 {
+       if (w != vidwidth_s || h != vidheight_s || p != vidpixelheight_s)
+       {
+               if (updateConwidths(w, h, p))
+                       localcmd(sprintf("\nexec %s\n", cvar_string("menu_font_cfg")));
+               vidwidth_s = w;
+               vidheight_s = h;
+               vidpixelheight_s = p;
+       }
        conwidth_s = conwidth;
        conheight_s = conheight;
        realconwidth = cvar("vid_conwidth");
@@ -120,18 +132,6 @@ void UpdateConWidthHeight()
                conwidth = realconwidth;
                conheight = realconwidth / MENU_ASPECT;
        }
-       screenconwidth = conwidth;
-       screenconheight = conheight;
-       if(conwidth < MENU_MINHEIGHT * MENU_ASPECT)
-       {
-               conheight *= MENU_MINHEIGHT * MENU_ASPECT / conwidth;
-               conwidth = MENU_MINHEIGHT * MENU_ASPECT;
-       }
-       if(conheight < MENU_MINHEIGHT)
-       {
-               conwidth *= MENU_MINHEIGHT / conheight;
-               conheight = MENU_MINHEIGHT;
-       }
        if(main)
        {
                if(conwidth_s != conwidth || conheight_s != conheight)
@@ -140,6 +140,10 @@ void UpdateConWidthHeight()
                        main.resizeNotify(main, '0 0 0', eX * conwidth + eY * conheight, '0 0 0', eX * conwidth + eY * conheight);
                }
        }
+       else
+       {
+               vidwidth_s = vidheight_s = vidpixelheight_s = 0; // retry next frame
+       }
 }
 
 string m_goto_buffer;
@@ -148,8 +152,6 @@ void m_init_delayed()
        float fh, glob, n, i;
        string s;
 
-       conwidth = conheight = -1;
-       UpdateConWidthHeight();
        draw_reset_cropped();
 
        menuInitialized = 0;
@@ -441,7 +443,7 @@ float m_allocatetooltipbox(vector pos)
        v = pos + avoidplus;
        if(m_testtooltipbox(v))
                return TRUE;
-       
+
        // bottom center
        v_x = pos_x - menuTooltipSize_x * 0.5;
        if(m_testtooltipbox(v))
@@ -461,12 +463,12 @@ float m_allocatetooltipbox(vector pos)
        v_x = pos_x - menuTooltipSize_x * 0.5;
        if(m_testtooltipbox(v))
                return TRUE;
-       
+
        // top right
        v_x = pos_x + avoidplus_x;
        if(m_testtooltipbox(v))
                return TRUE;
-       
+
        return FALSE;
 }
 entity m_findtooltipitem(entity root, vector pos)
@@ -671,7 +673,7 @@ void m_tooltip(vector pos)
        }
 }
 
-void m_draw()
+void m_draw(float width, float height)
 {
        float t;
        float realFrametime;
@@ -685,8 +687,7 @@ void m_draw()
        if (anim)
                anim.tickAll(anim);
 
-       if(main)
-               UpdateConWidthHeight();
+       UpdateConWidthHeight(width, height, cvar("vid_pixelheight"));
 
        if(!menuInitialized)
        {
@@ -991,7 +992,7 @@ void m_goto(string itemname)
                for(e = NULL; (e = find(e, name, itemname)); )
                        if(e.classname != "vtbl")
                                break;
-                               
+
                if((e) && (!e.requiresConnection || (gamestatus & (GAME_ISSERVER | GAME_CONNECTED))))
                {
                        m_hide();
index 85bc6c2afa9fe6678c7f239de9343c649f7a4ad9..1e122066c526349335a42505038e2f5bb64af766 100644 (file)
@@ -17,7 +17,7 @@
 #endif
 
 #define CLASS(cname)                       entity spawn##cname(); entity cname##_vtbl;
-#define EXTENDS(base)                
+#define EXTENDS(base)
 #define METHOD(cname,name,prototype)       prototype cname##_##name; .prototype name;
 #define ATTRIB(cname,name,type,val)        .type name;
 #define ATTRIBARRAY(cname,name,type,cnt)   .type name[cnt];
index 3036278c1fcfbe09ed31da9f56795e2be7f8dbe6..4900b9d96bb52db193c8aaf82771634c94279755 100644 (file)
@@ -54,5 +54,3 @@ xonotic/util.qc
 ../common/urllib.qc
 
 ../warpzonelib/mathlib.qc
-
-../common/if-this-file-errors-scroll-up-and-fix-the-warnings.fteqccfail
index c28edcc07070982cd6d6353d3629a3303d6ee231..b1a1af1966dfd5b44f7bf2f26910443f09cc84c5 100644 (file)
@@ -81,7 +81,7 @@ void XonoticCheckBox_loadCvars(entity me)
 {
        float m, d;
 
-       if not(me.cvarName)
+       if (!me.cvarName)
                return;
 
        m = (me.yesValue + me.noValue) * 0.5;
@@ -90,7 +90,7 @@ void XonoticCheckBox_loadCvars(entity me)
 }
 void XonoticCheckBox_saveCvars(entity me)
 {
-       if not(me.cvarName)
+       if (!me.cvarName)
                return;
 
        if(me.checked)
index c5500394bd46d550a14b615c6a798e00f2356016..e3043184a44f35cd2676375466fff57ec9c91014 100644 (file)
@@ -38,7 +38,7 @@ void XonoticSliderCheckBox_configureXonoticSliderCheckBox(entity me, float theOf
        if(theControlledSlider.value == median(theControlledSlider.valueMin, theControlledSlider.value, theControlledSlider.valueMax))
                me.savedValue = theControlledSlider.value;
        else
-               me.savedValue = theControlledSlider.valueMin; 
+               me.savedValue = theControlledSlider.valueMin;
        me.controlledSlider = theControlledSlider;
        me.configureCheckBox(me, theText, me.fontSize, me.image);
        me.tooltip = theControlledSlider.tooltip;
index 3b6b36f4e278f9127ced54bff0b0a4e5512d3ea4..ecafefed646811efc4749056e41ec4812a9289a6 100644 (file)
@@ -50,7 +50,7 @@ void XonoticCheckBoxString_setChecked(entity me, float foo)
 }
 void XonoticCheckBoxString_loadCvars(entity me)
 {
-       if not(me.cvarName)
+       if (!me.cvarName)
                return;
 
        if(cvar_string(me.cvarName) == me.yesString)
@@ -58,7 +58,7 @@ void XonoticCheckBoxString_loadCvars(entity me)
 }
 void XonoticCheckBoxString_saveCvars(entity me)
 {
-       if not(me.cvarName)
+       if (!me.cvarName)
                return;
 
        if(me.checked)
index fd19f280a4d408b51d8fa1e1fba9b68a488829ab..772c9e452cdfb72e6e74fd1a7f2b52ff86624acb 100644 (file)
@@ -67,7 +67,7 @@ void XonoticColorButton_setChecked(entity me, float val)
 }
 void XonoticColorButton_loadCvars(entity me)
 {
-       if not(me.cvarName)
+       if (!me.cvarName)
                return;
 
        if(cvar_string(me.cvarName) == cvar_defstring(me.cvarName))
@@ -80,7 +80,7 @@ void XonoticColorButton_loadCvars(entity me)
 }
 void XonoticColorButton_saveCvars(entity me)
 {
-       if not(me.cvarName)
+       if (!me.cvarName)
                return;
 
        if(me.checked)
index eb9590827da99ce9c835a1e559f29d1758734d63..e0727373c14b3a4795db1cde2f3caadaec45bfbc 100644 (file)
@@ -72,39 +72,60 @@ vector color_hslimage(vector v, vector margin)
 
 float XonoticColorpicker_mouseDrag(entity me, vector coords)
 {
-       float i;
+       float i, carets;
        for(;;)
        {
                i = me.controlledTextbox.cursorPos;
                if(i >= 2)
                {
                        if(substring(me.controlledTextbox.text, i-2, 1) == "^")
-                               if(strstrofs("0123456789", substring(me.controlledTextbox.text, i-1, 1), 0) >= 0)
-                               {
-                                       me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0);
-                                       me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0);
-                                       continue;
-                               }
+                       {
+                               carets = 1;
+                               while (i - 2 - carets >= 0 && substring(me.controlledTextbox.text, i - 2 - carets, 1) == "^")
+                                       ++carets;
+                               if (carets & 1)
+                                       if(strstrofs("0123456789", substring(me.controlledTextbox.text, i-1, 1), 0) >= 0)
+                                       {
+                                               me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0);
+                                               me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0);
+                                               continue;
+                                       }
+                       }
                }
 
                if(i >= 5)
                {
                        if(substring(me.controlledTextbox.text, i-5, 2) == "^x")
-                               if(strstrofs("0123456789abcdefABCDEF", substring(me.controlledTextbox.text, i-3, 1), 0) >= 0)
-                                       if(strstrofs("0123456789abcdefABCDEF", substring(me.controlledTextbox.text, i-2, 1), 0) >= 0)
-                                               if(strstrofs("0123456789abcdefABCDEF", substring(me.controlledTextbox.text, i-1, 1), 0) >= 0)
-                                               {
-                                                       me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0);
-                                                       me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0);
-                                                       me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0);
-                                                       me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0);
-                                                       me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0);
-                                                       continue;
-                                               }
+                       {
+                               carets = 1;
+                               while (i - 5 - carets >= 0 && substring(me.controlledTextbox.text, i - 5 - carets, 1) == "^")
+                                       ++carets;
+                               if (carets & 1)
+                                       if(strstrofs("0123456789abcdefABCDEF", substring(me.controlledTextbox.text, i-3, 1), 0) >= 0)
+                                               if(strstrofs("0123456789abcdefABCDEF", substring(me.controlledTextbox.text, i-2, 1), 0) >= 0)
+                                                       if(strstrofs("0123456789abcdefABCDEF", substring(me.controlledTextbox.text, i-1, 1), 0) >= 0)
+                                                       {
+                                                               me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0);
+                                                               me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0);
+                                                               me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0);
+                                                               me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0);
+                                                               me.controlledTextbox.keyDown(me.controlledTextbox, K_BACKSPACE, 8, 0);
+                                                               continue;
+                                                       }
+                       }
                }
                break;
        }
 
+       if(substring(me.controlledTextbox.text, i-1, 1) == "^")
+       {
+               carets = 1;
+               while (i - 1 - carets >= 0 && substring(me.controlledTextbox.text, i - 1 - carets, 1) == "^")
+                       ++carets;
+               if (carets & 1)
+                       me.controlledTextbox.enterText(me.controlledTextbox, "^"); // escape previous caret
+       }
+
        vector margin;
        margin = me.imagemargin;
        if(coords_x >= margin_x)
@@ -141,7 +162,7 @@ void XonoticColorpicker_draw(entity me)
        // for this to work, C/(1-B) must be in 0..1
        // B must be < 1
        // C must be < 1-B
-       
+
        B = bound(0, B, 1);
        C = bound(0, C, 1-B);
 
index c3593056c284d6f75339a8c93c180cbcb665170c..5d53135e9cca1967c7e3f0d68b8a4b631b7e1ef3 100644 (file)
@@ -40,7 +40,7 @@ void XonoticColorpickerString_configureXonoticColorpickerString(entity me, strin
 
 void XonoticColorPickerString_loadCvars(entity me)
 {
-       if not(me.cvarName)
+       if (!me.cvarName)
                return;
 
        if(substring(me.cvarName, -1, 1) == "_")
@@ -57,7 +57,7 @@ void XonoticColorPickerString_loadCvars(entity me)
 
 void XonoticColorPickerString_saveCvars(entity me)
 {
-       if not(me.cvarName)
+       if (!me.cvarName)
                return;
 
        if(substring(me.cvarName, -1, 1) == "_")
index 0b501f5b642dfa181ff11d6b164ba51812949664..7fe3a600f2e57d49338a1f7b3ac358fa9f09590e 100644 (file)
@@ -50,14 +50,14 @@ void XonoticCrosshairButton_setChecked(entity me, float val)
 }
 void XonoticCrosshairButton_loadCvars(entity me)
 {
-       if not(me.cvarName)
+       if (!me.cvarName)
                return;
 
        me.checked = (cvar(me.cvarName) == me.cvarValueFloat);
 }
 void XonoticCrosshairButton_saveCvars(entity me)
 {
-       if not(me.cvarName)
+       if (!me.cvarName)
                return;
 
        if(me.checked)
@@ -121,7 +121,7 @@ void XonoticCrosshairButton_draw(entity me)
        {
                if(cvar("crosshair_dot_color_custom") && (cvar_string("crosshair_dot_color") != "0"))
                        rgb = stov(cvar_string("crosshair_dot_color"));
-                       
+
                draw_Picture('0.5 0.5 0' - 0.5 * sz * cvar("crosshair_dot_size"), me.src4, sz * cvar("crosshair_dot_size"), rgb, a * cvar("crosshair_dot_alpha"));
        }
 }
index 52f1a1f26e7890d18da2c2a4257749815605e9d9..722917f553c8e7876f03ee0a0b4b0799f1bd4890 100644 (file)
@@ -65,7 +65,7 @@ void XonoticCvarList_setSelected(entity me, float i)
        SUPER(XonoticCvarList).setSelected(me, i);
        if(me.nItems == 0)
                return;
-       
+
        if(me.cvarName)
                strunzone(me.cvarName);
        if(me.cvarDescription)
@@ -137,7 +137,7 @@ void XonoticCvarList_drawListBoxItem(entity me, float i, vector absSize, float i
 
        if(isSelected)
                draw_Fill('0 0 0', '1 1 0', SKINCOLOR_LISTBOX_SELECTED, SKINALPHA_LISTBOX_SELECTED);
-       
+
        k = bufstr_get(me.handle, i);
 
        v = cvar_string(k);
index 2daed8bcbca504b33ea1993b954680304b5915c9..ee8cf6a4f613c3e3db2ac8df019cfdcf3b5ac22e 100644 (file)
@@ -5,13 +5,13 @@ CLASS(XonoticDemoList) EXTENDS(XonoticListBox)
        METHOD(XonoticDemoList, resizeNotify, void(entity, vector, vector, vector, vector))
        METHOD(XonoticDemoList, drawListBoxItem, void(entity, float, vector, float))
        METHOD(XonoticDemoList, getDemos, void(entity))
-       METHOD(XonoticDemoList, startDemo, void(entity))        
+       METHOD(XonoticDemoList, startDemo, void(entity))
        METHOD(XonoticDemoList, demoName, string(entity, float))
        METHOD(XonoticDemoList, clickListBoxItem, void(entity, float, vector))
        METHOD(XonoticDemoList, keyDown, float(entity, float, float, float))
        METHOD(XonoticDemoList, destroy, void(entity))
        METHOD(XonoticDemoList, showNotify, void(entity))
-       
+
        ATTRIB(XonoticDemoList, listDemo, float, -1)
        ATTRIB(XonoticDemoList, realFontSize, vector, '0 0 0')
        ATTRIB(XonoticDemoList, columnNameOrigin, float, 0)
@@ -19,10 +19,10 @@ CLASS(XonoticDemoList) EXTENDS(XonoticListBox)
        ATTRIB(XonoticDemoList, realUpperMargin, float, 0)
        ATTRIB(XonoticDemoList, origin, vector, '0 0 0')
        ATTRIB(XonoticDemoList, itemAbsSize, vector, '0 0 0')
-       
+
        ATTRIB(XonoticDemoList, lastClickedDemo, float, -1)
        ATTRIB(XonoticDemoList, lastClickedTime, float, 0)
-       ATTRIB(XonoticDemoList, filterString, string, string_null)      
+       ATTRIB(XonoticDemoList, filterString, string, string_null)
 ENDCLASS(XonoticDemoList)
 
 entity makeXonoticDemoList();
@@ -44,7 +44,7 @@ entity makeXonoticDemoList()
 void XonoticDemoList_configureXonoticDemoList(entity me)
 {
        me.configureXonoticListBox(me);
-       me.getDemos(me);        
+       me.getDemos(me);
 }
 
 string XonoticDemoList_demoName(entity me, float i )
@@ -59,23 +59,23 @@ string XonoticDemoList_demoName(entity me, float i )
 void XonoticDemoList_getDemos(entity me)
 {
        string s;
-       
+
        if(me.filterString)
-               //subdirectory in filterString allowed  
-               s=strcat("demos/*", me.filterString, "*.dem");          
+               //subdirectory in filterString allowed
+               s=strcat("demos/*", me.filterString, "*.dem");
        else
                s="demos/*.dem";
-       
-       //dprint("Search demos with the pattern ", s, "\n");    
+
+       //dprint("Search demos with the pattern ", s, "\n");
        if(me.listDemo >= 0)
                search_end(me.listDemo);
-               
+
        me.listDemo = search_begin(s, FALSE, TRUE);
 
        if(me.listDemo < 0)
                me.nItems=0;
        else
-               me.nItems=search_getsize(me.listDemo);                          
+               me.nItems=search_getsize(me.listDemo);
 }
 
 void XonoticDemoList_destroy(entity me)
@@ -101,10 +101,10 @@ void XonoticDemoList_drawListBoxItem(entity me, float i, vector absSize, float i
        string s;
        if(isSelected)
                draw_Fill('0 0 0', '1 1 0', SKINCOLOR_LISTBOX_SELECTED, SKINALPHA_LISTBOX_SELECTED);
-               
+
        s = me.demoName(me,i);
        s = draw_TextShortenToWidth(s, me.columnNameSize, 0, me.realFontSize);
-       draw_Text(me.realUpperMargin * eY + (me.columnNameOrigin + 0.00 * (me.columnNameSize - draw_TextWidth(s, 0, me.realFontSize))) * eX, s, me.realFontSize, '1 1 1', SKINALPHA_TEXT, 0);           
+       draw_Text(me.realUpperMargin * eY + (me.columnNameOrigin + 0.00 * (me.columnNameSize - draw_TextWidth(s, 0, me.realFontSize))) * eX, s, me.realFontSize, '1 1 1', SKINALPHA_TEXT, 0);
 }
 
 void XonoticDemoList_showNotify(entity me)
@@ -113,15 +113,15 @@ void XonoticDemoList_showNotify(entity me)
 }
 
 void DemoList_Filter_Change(entity box, entity me)
-{      
+{
        if(me.filterString)
                strunzone(me.filterString);
-       
+
        if(box.text != "")
                me.filterString = strzone(box.text);
        else
                me.filterString = string_null;
-               
+
        me.getDemos(me);
 }
 
@@ -129,7 +129,7 @@ void XonoticDemoList_startDemo(entity me)
 {
        string s;
        s = me.demoName(me,me.selectedItem);
-       localcmd("playdemo \"demos/", s, ".dem\" \nwait \ntogglemenu\n");       
+       localcmd("playdemo \"demos/", s, ".dem\" \nwait \ntogglemenu\n");
 }
 
 void StartDemo_Click(entity btn, entity me)
@@ -141,7 +141,7 @@ void TimeDemo_Click(entity btn, entity me)
 {
        string s;
        s = me.demoName(me,me.selectedItem);
-       localcmd("timedemo \"demos/", s, ".dem\" \nwait \ntogglemenu\n");       
+       localcmd("timedemo \"demos/", s, ".dem\" \nwait \ntogglemenu\n");
 }
 
 void XonoticDemoList_clickListBoxItem(entity me, float i, vector where)
index 39a7d2c701aa34db6e9733632dfdbdef5fdb662b..01ce7ba4347edba58ea9fc77a97f5d4d11dd2c86 100644 (file)
@@ -19,13 +19,13 @@ float CheckFirstRunButton(entity me)
 {
        if(cvar_string("_cl_name") != "Player")
                return 1;
-               
+
        if(cvar_string("_menu_prvm_language") != prvm_language)
                return 1; // OK will then reopen the dialog in another language
-               
+
        if(cvar_string("cl_allow_uid2name") != "-1")
-               return 1; 
-               
+               return 1;
+
        return 0;
 }
 
@@ -62,7 +62,7 @@ void XonoticFirstRunDialog_fill(entity me)
        me.TR(me);
        me.TR(me);
        me.TR(me);
-       
+
        me.gotoRC(me, 3, 4); me.setFirstColumn(me, me.currentColumn);
        me.TR(me);
                me.TD(me, 1, 2, e = makeXonoticTextLabel(0, _("Text language:")));
@@ -75,7 +75,7 @@ void XonoticFirstRunDialog_fill(entity me)
 
        me.gotoRC(me, me.rows - 4, 0);
        me.TD(me, 1, me.columns, e = makeXonoticTextLabel(0.5, _("Allow player statistics to use your nickname at stats.xonotic.org?")));
-       
+
        me.gotoRC(me, me.rows - 3, 0);
        me.TDempty(me, 1.5);
        me.TD(me, 1, 1, e = makeXonoticRadioButton(1, "cl_allow_uid2name", "1", ZCTX(_("ALWU2N^Yes"))));
index 25eddc8a13316208327bc1c3654cc3060cf58ef5..09e6c5339f91ed6eca68a5463b9dc93abee12e59 100644 (file)
@@ -78,7 +78,7 @@ void XonoticHUDExitDialog_fill(entity me)
                me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Color:")));
                me.TD(me, 2, 2.6, e = makeXonoticColorpickerString("hud_dock_color", "hud_dock_color"));
        me.TR(me);
-       me.TR(me);      
+       me.TR(me);
                me.TDempty(me, 0.2);
                me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Alpha:")));
                        me.TD(me, 1, 2.6, e = makeXonoticTextSlider("hud_dock_alpha"));
index 3fc6f31fe322e47bd208a0bdc1384754498defa7..60f52e1fa47ac649da8f0bb457f5eff79fe4e9d6 100644 (file)
@@ -5,7 +5,7 @@ CLASS(XonoticServerCreateTab) EXTENDS(XonoticTab)
        ATTRIB(XonoticServerCreateTab, title, string, _("Create"))
        ATTRIB(XonoticServerCreateTab, intendedWidth, float, 0.9)
        ATTRIB(XonoticServerCreateTab, rows, float, 22)
-       ATTRIB(XonoticServerCreateTab, columns, float, 6.2) // added extra .2 for center space 
+       ATTRIB(XonoticServerCreateTab, columns, float, 6.2) // added extra .2 for center space
 
        ATTRIB(XonoticServerCreateTab, mapListBox, entity, NULL)
        ATTRIB(XonoticServerCreateTab, sliderFraglimit, entity, NULL)
index 5ba3733f012f4bcfb3d39dd3c9ee169d0da25ae3..18c376b503dda2463b9b3f776de54e66048ad2ed 100644 (file)
@@ -80,7 +80,7 @@ string XonoticMutatorsDialog_toString(entity me)
                s = strcat(s, ", ", WeaponArenaString());
        if(cvar("g_start_weapon_laser") == 0)
                s = strcat(s, ", ", _("No start weapons"));
-       if(cvar("sv_gravity") < 800)
+       if(cvar("sv_gravity") < stof(cvar_defstring("sv_gravity")))
                s = strcat(s, ", ", _("Low gravity"));
        if(cvar("g_cloaked"))
                s = strcat(s, ", ", _("Cloaked"));
index 84115f1ed651fcaac7852871657b170b478eb9e4..da85975de98f5d0596c4fa9ea08b2bc02b90a7d4 100644 (file)
@@ -5,7 +5,7 @@ CLASS(XonoticDemoBrowserTab) EXTENDS(XonoticTab)
        ATTRIB(XonoticDemoBrowserTab, intendedWidth, float, 0.9)
        ATTRIB(XonoticDemoBrowserTab, rows, float, 22)
        ATTRIB(XonoticDemoBrowserTab, columns, float, 4)
-       ATTRIB(XonoticDemoBrowserTab, name, string, "DemoBrowser")      
+       ATTRIB(XonoticDemoBrowserTab, name, string, "DemoBrowser")
 ENDCLASS(XonoticDemoBrowserTab)
 entity makeXonoticDemoBrowserTab();
 #endif
@@ -32,10 +32,10 @@ void XonoticDemoBrowserTab_fill(entity me)
                        e.onChange = DemoList_Filter_Change;
                        e.onChangeEntity = dlist;
                        dlist.controlledTextbox = e;
-                       
+
        me.TR(me);
                me.TD(me, me.rows - 4, me.columns, dlist);
-               
+
        me.gotoRC(me, me.rows - 1, 0);
                me.TD(me, 1, me.columns / 2, e = makeXonoticButton(_("Timedemo"), '0 0 0'));
                        e.onClick = TimeDemo_Click;
index 02d3b410209a0af2bdf371309a45ea7325f57906..91326ad2d5fd7498111e19c88b09588d8226623e 100644 (file)
@@ -26,10 +26,13 @@ void XonoticServerListTab_fill(entity me)
 
        me.TR(me);
                me.TD(me, 1, 0.4, e = makeXonoticTextLabel(0, _("Filter:")));
-               me.TD(me, 1, me.columns - 0.6 * 3 - 0.4, e = makeXonoticInputBox(0, string_null));
+               me.TD(me, 1, me.columns - 0.6 * 3 - 0.9 - 0.4, e = makeXonoticInputBox(0, string_null));
                        e.onChange = ServerList_Filter_Change;
                        e.onChangeEntity = slist;
                        slist.controlledTextbox = e;
+               me.TD(me, 1, 0.9, e = makeXonoticCheckBox(0, "menu_slist_categories", ZCTX(_("SRVS^Categories"))));
+                       e.onClickEntity = slist;
+                       e.onClick = ServerList_Categories_Click;
                me.TD(me, 1, 0.6, e = makeXonoticCheckBox(0, "menu_slist_showempty", ZCTX(_("SRVS^Empty"))));
                        slist.filterShowEmpty = e.checked;
                        e.onClickEntity = slist;
index 4e6d6f5909ea7181374a4b8a7695cf77df0b6b55..5ecb77dd795d17d192f9179e8b96a0b37f4a950d 100644 (file)
@@ -55,43 +55,43 @@ void XonoticServerInfoDialog_loadServerInfo(entity me, float i)
        if(me.currentServerName)
                strunzone(me.currentServerName);
        me.currentServerName = string_null;
-       
+
        if(me.currentServerCName)
                strunzone(me.currentServerCName);
        me.currentServerCName = string_null;
-       
+
        if(me.currentServerType)
                strunzone(me.currentServerType);
        me.currentServerType = string_null;
-       
+
        if(me.currentServerMap)
                strunzone(me.currentServerMap);
        me.currentServerMap = string_null;
-       
+
        if(me.currentServerPlayers)
                strunzone(me.currentServerPlayers);
        me.currentServerPlayers = string_null;
-       
+
        if(me.currentServerNumPlayers)
                strunzone(me.currentServerNumPlayers);
        me.currentServerNumPlayers = string_null;
-       
+
        if(me.currentServerNumBots)
                strunzone(me.currentServerNumBots);
        me.currentServerNumBots = string_null;
-       
+
        if(me.currentServerNumFreeSlots)
                strunzone(me.currentServerNumFreeSlots);
        me.currentServerNumFreeSlots = string_null;
-       
+
        if(me.currentServerMod)
                strunzone(me.currentServerMod);
        me.currentServerMod = string_null;
-       
+
        if(me.currentServerVersion)
                strunzone(me.currentServerVersion);
        me.currentServerVersion = string_null;
-       
+
        // not zoned!
        //if(me.currentServerEncrypt)
        //      strunzone(me.currentServerEncrypt);
@@ -99,11 +99,11 @@ void XonoticServerInfoDialog_loadServerInfo(entity me, float i)
        if(me.currentServerPure)
                strunzone(me.currentServerPure);
        me.currentServerPure = string_null;
-       
+
        if(me.currentServerKey)
                strunzone(me.currentServerKey);
        me.currentServerKey = string_null;
-       
+
        if(me.currentServerID)
                strunzone(me.currentServerID);
        me.currentServerID = string_null;
@@ -158,7 +158,7 @@ void XonoticServerInfoDialog_loadServerInfo(entity me, float i)
 
        j = MapInfo_Type_FromString(typestr); // try and get the real name of the game type
        if(j) { typestr = MapInfo_Type_ToText(j); } // only set it if we actually found it
-       
+
        me.currentServerType = strzone(typestr);
        me.typeLabel.setText(me.typeLabel, me.currentServerType);
 
@@ -177,7 +177,7 @@ void XonoticServerInfoDialog_loadServerInfo(entity me, float i)
        s = ftos(numb);
        me.currentServerNumBots = strzone(s);
        me.numBotsLabel.setText(me.numBotsLabel, me.currentServerNumBots);
-       
+
        if(freeslots < 0) { freeslots = maxp - numh - numb; }
        s = ftos(freeslots);
        me.currentServerNumFreeSlots = strzone(s);
@@ -230,14 +230,14 @@ void XonoticServerInfoDialog_loadServerInfo(entity me, float i)
                        break;
        }
        me.encryptLabel.setText(me.encryptLabel, me.currentServerEncrypt);
-       
+
        s = crypto_getidfp(me.currentServerCName);
-       if not(s) { s = _("N/A"); }
+       if (!s) { s = _("N/A"); }
        me.currentServerID = strzone(s);
        me.idLabel.setText(me.idLabel, me.currentServerID);
 
        s = crypto_getkeyfp(me.currentServerCName);
-       if not(s) { s = _("N/A"); }
+       if (!s) { s = _("N/A"); }
        me.currentServerKey = strzone(s);
        me.keyLabel.setText(me.keyLabel, me.currentServerKey);
 }
@@ -257,7 +257,7 @@ void XonoticServerInfoDialog_fill(entity me)
                e.colorL = SKINCOLOR_SERVERINFO_IP;
                e.allowCut = 1;
                me.cnameLabel = e;
-               
+
        me.TR(me);
        me.TR(me);
                me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Gametype:")));
@@ -284,7 +284,7 @@ void XonoticServerInfoDialog_fill(entity me)
                me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, ""));
                e.allowCut = 1;
                me.pureLabel = e;
-               
+
        me.TR(me);
        me.TR(me);
                me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Players:")));
@@ -301,7 +301,7 @@ void XonoticServerInfoDialog_fill(entity me)
                me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, ""));
                e.allowCut = 1;
                me.numFreeSlotsLabel = e;
-               
+
        me.gotoRC(me, me.rows - 5, 0);
                me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Encryption:")));
                me.TD(me, 1, 5.4, e = makeXonoticTextLabel(0, ""));
index 482a60510e88cdd2f52d6cc68c9e8d49c6f4ad63..f4bd359ece79d350a1034427607a470a7dd374db 100644 (file)
@@ -5,7 +5,7 @@ CLASS(XonoticPlayerSettingsTab) EXTENDS(XonoticTab)
        ATTRIB(XonoticPlayerSettingsTab, title, string, _("Player Setup"))
        ATTRIB(XonoticPlayerSettingsTab, intendedWidth, float, 0.9)
        ATTRIB(XonoticPlayerSettingsTab, rows, float, 22)
-       ATTRIB(XonoticPlayerSettingsTab, columns, float, 6.2) // added extra .2 for center space 
+       ATTRIB(XonoticPlayerSettingsTab, columns, float, 6.2) // added extra .2 for center space
        ATTRIB(XonoticPlayerSettingsTab, playerNameLabel, entity, NULL)
        ATTRIB(XonoticPlayerSettingsTab, playerNameLabelAlpha, float, 0)
 ENDCLASS(XonoticPlayerSettingsTab)
@@ -166,7 +166,7 @@ void XonoticPlayerSettingsTab_fill(entity me)
                        e.onClickEntity = main.weaponsDialog;
                // I don't really think this is useful as is, and especially it doesn't look very clean...
                // In the future, if ALL of these buttons had some information, then it would be justified/clean
-               //me.TD(me, 1, 1, e0 = makeXonoticTextLabel(0, string_null)); 
+               //me.TD(me, 1, 1, e0 = makeXonoticTextLabel(0, string_null));
                //      e0.textEntity = main.weaponsDialog;
                //      e0.allowCut = 1;
        me.TR(me);
@@ -174,7 +174,7 @@ void XonoticPlayerSettingsTab_fill(entity me)
                me.TD(me, 1, 2, e = makeXonoticButton(_("HUD settings"), '0 0 0'));
                        e.onClick = DialogOpenButton_Click;
                        e.onClickEntity = main.hudDialog;
-               // TODO: show hud config name with text here 
+               // TODO: show hud config name with text here
 
        me.gotoRC(me, me.rows - 1, 0);
                me.TD(me, 1, me.columns, makeXonoticCommandButton(_("Apply immediately"), '0 0 0', "color -1 -1;name \"$_cl_name\";sendcvar cl_weaponpriority;sendcvar cl_autoswitch;sendcvar cl_forceplayermodels;sendcvar cl_forceplayermodelsfromxonotic;playermodel $_cl_playermodel;playerskin $_cl_playerskin", COMMANDBUTTON_APPLY));
index a18fec1c4dcf63548deb3fac2241e36b59fcb5ca..c4cdc3e70502ca65c255b13b79b26c21e75c3939 100644 (file)
@@ -23,7 +23,7 @@ string XonoticCrosshairDialog_toString(entity me)
 void XonoticCrosshairDialog_fill(entity me)
 {
        entity e;
-       
+
        me.TR(me);
                me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "crosshair_dot", _("Enable center crosshair dot")));
                setDependent(e, "crosshair_enabled", 1, 2);
@@ -84,9 +84,9 @@ void XonoticCrosshairDialog_fill(entity me)
                me.TDempty(me, 0.2);
                me.TD(me, 1, 2.8, e = makeXonoticCheckBoxEx(0.25, 0, "crosshair_pickup", _("Animate when picking up an item")));
                        setDependent(e, "crosshair_enabled", 1, 2);
-                       
+
        me.TR(me);
-                       
+
        me.gotoRC(me, me.rows - 1, 0);
                me.TD(me, 1, me.columns, e = makeXonoticButton(_("OK"), '0 0 0'));
                        e.onClick = Dialog_Close;
index e53f99bc1fec29b5a6b90f46cf30aa51f3c9c585..8d969fd7a3ef35fce3a0ba58cdc2bd3208d3e008 100644 (file)
@@ -15,7 +15,7 @@ void HUDSetup_Start(entity me, entity btn);
 #ifdef IMPLEMENTATION
 void HUDSetup_Check_Gamestatus(entity me, entity btn)
 {
-       if not(gamestatus & (GAME_CONNECTED | GAME_ISSERVER)) // we're not in a match, ask the player if they want to start one anyway
+       if(!(gamestatus & (GAME_CONNECTED | GAME_ISSERVER))) // we're not in a match, ask the player if they want to start one anyway
        {
                DialogOpenButton_Click(me, main.hudconfirmDialog);
        }
@@ -30,12 +30,12 @@ void XonoticHUDDialog_showNotify(entity me)
 }
 string XonoticHUDDialog_toString(entity me)
 {
-       return "hi"; // TODO: show hud config name with text here 
+       return "hi"; // TODO: show hud config name with text here
 }
 void XonoticHUDDialog_fill(entity me)
 {
        entity e;
-       
+
        me.TR(me);
                me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Damage:")));
        me.TR(me);
@@ -55,7 +55,7 @@ void XonoticHUDDialog_fill(entity me)
                me.TD(me, 1, 2, e = makeXonoticSlider(0.25, 1, 0.05, "hud_damage_fade_rate"));
                setDependent(e, "hud_damage", 0.001, 100);
        me.TR(me);
-       
+
        me.TR(me);
                me.TD(me, 1, 3, e = makeXonoticCheckBox(1, "cl_hidewaypoints", _("Waypoints")));
        me.TR(me);
@@ -78,7 +78,7 @@ void XonoticHUDDialog_fill(entity me)
                makeMulti(e, "g_waypointsprite_edgeoffset_top g_waypointsprite_edgeoffset_left g_waypointsprite_edgeoffset_right");
                setDependent(e, "cl_hidewaypoints", 0, 0);
        me.TR(me);
-       
+
        me.TR(me);
                me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_shownames", _("Show names above players")));
        me.TR(me);
@@ -93,11 +93,11 @@ void XonoticHUDDialog_fill(entity me)
                me.TD(me, 1, 2, e = makeXonoticButton(_("Enter HUD editor"), '0 0 0'));
                        e.onClick = HUDSetup_Check_Gamestatus;
                        e.onClickEntity = me;
-               // TODO: show hud config name with text here 
-               
+               // TODO: show hud config name with text here
+
        me.gotoRC(me, me.rows - 1, 0);
                me.TD(me, 1, me.columns, e = makeXonoticButton(_("OK"), '0 0 0'));
                        e.onClick = Dialog_Close;
                        e.onClickEntity = me;
 }
-#endif
\ No newline at end of file
+#endif
index b06dc9207854e96fd62303ed29961524e900b033..7749a148d96a5a6e77d5bb2c57123c19b106d528 100644 (file)
@@ -12,11 +12,11 @@ ENDCLASS(XonoticHUDConfirmDialog)
 #ifdef IMPLEMENTATION
 void HUDSetup_Start(entity me, entity btn)
 {
-       if not(gamestatus & (GAME_CONNECTED | GAME_ISSERVER))
+       if (!(gamestatus & (GAME_CONNECTED | GAME_ISSERVER)))
                localcmd("map hudsetup/hudsetup", "\n");
        else
                localcmd("togglemenu 0\n");
-               
+
        localcmd("_hud_configure 1", "\n");
 }
 
index c55d4d488ba4ebcf37f2fd096fcf27a81e5c79ba..d1cdade772a2c77f63dfed302b9a2fcf0cdd6fd8 100644 (file)
@@ -23,7 +23,7 @@ string XonoticModelDialog_toString(entity me)
 void XonoticModelDialog_fill(entity me)
 {
        entity e;
-       
+
        me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Body fading:")));
                me.TD(me, 1, 2, e = makeXonoticSlider(0, 2, 0.2, "cl_deathglow"));
@@ -42,7 +42,7 @@ void XonoticModelDialog_fill(entity me)
        me.TR(me);
                me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_forceplayercolors", _("Force player colors to mine")));
        me.TR(me);
-               
+
        me.gotoRC(me, me.rows - 1, 0);
                me.TD(me, 1, me.columns, e = makeXonoticButton(_("OK"), '0 0 0'));
                        e.onClick = Dialog_Close;
index 59a7e6e795942cbcca00468d0aa3cd0994126c25..b2b440a1c45673b0dbe7cc1aef5c62cb874f4858 100644 (file)
@@ -7,7 +7,7 @@ CLASS(XonoticViewDialog) EXTENDS(XonoticDialog)
        ATTRIB(XonoticViewDialog, color, vector, SKINCOLOR_DIALOG_VIEW)
        ATTRIB(XonoticViewDialog, intendedWidth, float, 0.9)
        ATTRIB(XonoticViewDialog, rows, float, 11)
-       ATTRIB(XonoticViewDialog, columns, float, 6.2) // added extra .2 for center space 
+       ATTRIB(XonoticViewDialog, columns, float, 6.2) // added extra .2 for center space
 ENDCLASS(XonoticViewDialog)
 #endif
 
@@ -23,7 +23,7 @@ string XonoticViewDialog_toString(entity me)
 void XonoticViewDialog_fill(entity me)
 {
        entity e;
-       
+
        me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Field of view:")));
                me.TD(me, 1, 2, e = makeXonoticSlider(60, 130, 5, "fov"));
@@ -70,7 +70,7 @@ void XonoticViewDialog_fill(entity me)
        me.TR(me);
        me.TR(me);
                me.TD(me, 1, 3, e = makeXonoticCheckBox(1, "cl_clippedspectating", _("Allow passing through walls while spectating")));
-       
+
        me.gotoRC(me, 0, 3.2); me.setFirstColumn(me, me.currentColumn);
                me.TD(me, 1, 3, e = makeXonoticRadioButton(1, "chase_active", "0", _("1st person perspective")));
                makeMulti(e, "crosshair_hittest_showimpact");
@@ -108,7 +108,7 @@ void XonoticViewDialog_fill(entity me)
                me.TD(me, 1, 2, e = makeXonoticSlider(10, 50, 1, "chase_up"));
                setDependent(e, "chase_active", 1, 1);
        me.TR(me);
-               
+
        me.gotoRC(me, me.rows - 1, 0);
                me.TD(me, 1, me.columns, e = makeXonoticButton(_("OK"), '0 0 0'));
                        e.onClick = Dialog_Close;
index fa3549154b0e807eddc63391b04154c1baa9db65..cfdaf8fdfc0b4cc42f36f72e60a7f1ab17f24f9b 100644 (file)
@@ -36,7 +36,7 @@ void XonoticWeaponsDialog_fill(entity me)
                me.TD(me, 1, 1, e = makeXonoticButton(_("Down"), '0 0 0'));
                        e.onClick = WeaponsList_MoveDown_Click;
                        e.onClickEntity = me.weaponsList;
-                       
+
        me.gotoRC(me, 0, 2.2); me.setFirstColumn(me, me.currentColumn);
                me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_weaponpriority_useforcycling", _("Use priority list for weapon cycling")));
        me.TR(me);
@@ -69,7 +69,7 @@ void XonoticWeaponsDialog_fill(entity me)
        //      setDependent(e, "r_drawviewmodel", 1, 1);
        //      me.TD(me, 1, 2, e = makeXonoticSlider(0.1, 2, 0.1, "cl_viewmodel_scale"));
        //      setDependent(e, "r_drawviewmodel", 1, 1);
-                       
+
        me.gotoRC(me, me.rows - 1, 0);
                me.TD(me, 1, me.columns, e = makeXonoticButton(_("OK"), '0 0 0'));
                        e.onClick = Dialog_Close;
index 108b984a1e1c2d1d079b44dfd6506acc2cc43e46..f3c27915e781206f53fe4543614ab741497fc3bf 100644 (file)
@@ -4,7 +4,7 @@ CLASS(XonoticAudioSettingsTab) EXTENDS(XonoticTab)
        ATTRIB(XonoticAudioSettingsTab, title, string, _("Audio"))
        ATTRIB(XonoticAudioSettingsTab, intendedWidth, float, 0.9)
        ATTRIB(XonoticAudioSettingsTab, rows, float, 17)
-       ATTRIB(XonoticAudioSettingsTab, columns, float, 6.2) // added extra .2 for center space 
+       ATTRIB(XonoticAudioSettingsTab, columns, float, 6.2) // added extra .2 for center space
 ENDCLASS(XonoticAudioSettingsTab)
 entity makeXonoticAudioSettingsTab();
 #endif
@@ -97,7 +97,7 @@ void XonoticAudioSettingsTab_fill(entity me)
                me.TD(me, 1, 3, makeXonoticCheckBox(0, "menu_snd_attenuation_method", _("New style sound attenuation")));
        me.TR(me);
                me.TD(me, 1, 3, makeXonoticCheckBox(0, "snd_mutewhenidle", _("Mute sounds when not active")));
-       
+
        me.gotoRC(me, 0, 3.2); me.setFirstColumn(me, me.currentColumn);
                me.TD(me, 1, 1, makeXonoticTextLabel(0, _("Frequency:")));
                me.TD(me, 1, 2, e = makeXonoticTextSlider("snd_speed"));
index bea650eba4a1582f655629266613c38b58e33563..a963d1e3099862fb485fff19d842f5f5206522b8 100644 (file)
@@ -4,7 +4,7 @@ CLASS(XonoticEffectsSettingsTab) EXTENDS(XonoticTab)
        ATTRIB(XonoticEffectsSettingsTab, title, string, _("Effects"))
        ATTRIB(XonoticEffectsSettingsTab, intendedWidth, float, 0.9)
        ATTRIB(XonoticEffectsSettingsTab, rows, float, 17)
-       ATTRIB(XonoticEffectsSettingsTab, columns, float, 6.2) // added extra .2 for center space 
+       ATTRIB(XonoticEffectsSettingsTab, columns, float, 6.2) // added extra .2 for center space
 ENDCLASS(XonoticEffectsSettingsTab)
 entity makeXonoticEffectsSettingsTab();
 float updateCompression();
@@ -195,7 +195,7 @@ void XonoticEffectsSettingsTab_fill(entity me)
                setDependent(e, "cl_decals", 1, 1);
            me.TD(me, 1, 2, e = makeXonoticSlider(1, 20, 1, "cl_decals_time"));
                setDependent(e, "cl_decals", 1, 1);
-                       
+
        me.gotoRC(me, me.rows - 1, 0);
                me.TD(me, 1, me.columns, makeXonoticCommandButton(_("Apply immediately"), '0 0 0', "vid_restart", COMMANDBUTTON_APPLY));
 }
index daa8f3ff104fe3bcfc659fd32f7762c2ebd1fc50..d8554be4f7af38285bcb259d87ec22a894cd2284 100644 (file)
@@ -4,7 +4,7 @@ CLASS(XonoticInputSettingsTab) EXTENDS(XonoticTab)
        ATTRIB(XonoticInputSettingsTab, title, string, _("Input"))
        ATTRIB(XonoticInputSettingsTab, intendedWidth, float, 0.9)
        ATTRIB(XonoticInputSettingsTab, rows, float, 17)
-       ATTRIB(XonoticInputSettingsTab, columns, float, 6.2) // added extra .2 for center space 
+       ATTRIB(XonoticInputSettingsTab, columns, float, 6.2) // added extra .2 for center space
 ENDCLASS(XonoticInputSettingsTab)
 entity makeXonoticInputSettingsTab();
 #endif
@@ -84,8 +84,8 @@ void XonoticInputSettingsTab_fill(entity me)
        me.TR(me);
                me.TDempty(me, 0.2);
                me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "m_accelerate", _("Enable built in mouse acceleration")));
-               
-       
+
+
        me.gotoRC(me, me.rows - 1, 0);
                me.TD(me, 1, me.columns, makeXonoticCommandButton(_("Apply immediately"), '0 0 0', "sendcvar cl_movement_track_canjump", COMMANDBUTTON_APPLY));
 }
index 37effe93256e3415ac97140777ee7bda1062669e..c14a47c9c1633c0714b3ae8054a6f5a06c56b8bd 100644 (file)
@@ -50,6 +50,10 @@ void XonoticMiscSettingsTab_fill(entity me)
                me.TD(me, 1, 1.8, e = makeXonoticTextLabel(0, _("Client UDP port:")));
                me.TD(me, 1, 1, e = makeXonoticInputBox(0, "cl_port"));
                        e.enableClearButton = 0;
+       me.TR(me);
+               me.TDempty(me, 0.2);
+               if(cvar_type("crypto_aeslevel") & CVAR_TYPEFLAG_ENGINE)
+                       me.TD(me, 1, 2.8, e = makeXonoticCheckBoxEx(2, 1, "crypto_aeslevel", _("Use encryption (AES) when available")));
        me.TR(me);
        me.TR(me);
                me.TDempty(me, 0.2);
index 5db6d35c62c3d6522a9bd1c222947d4dcc16e37b..724c868fd7cffe0847cc801a3a7fb1296b3a7a5d 100644 (file)
@@ -15,17 +15,17 @@ void XonoticCvarsDialog_showNotify(entity me)
 {
        loadAllCvars(me);
 }
-void XonoticCvarsDialog_fill(entity me) // in this dialog, use SKINCOLOR_CVARLIST_CONTROLS to color ALL controls 
+void XonoticCvarsDialog_fill(entity me) // in this dialog, use SKINCOLOR_CVARLIST_CONTROLS to color ALL controls
 {
 
        entity e, cvarlist;
 
        cvarlist = makeXonoticCvarList();
 
-       cvarlist.color = 
-               cvarlist.colorF = 
-               cvarlist.color2 = 
-               cvarlist.colorC = 
+       cvarlist.color =
+               cvarlist.colorF =
+               cvarlist.color2 =
+               cvarlist.colorC =
                SKINCOLOR_CVARLIST_CONTROLS;
 
        me.TR(me);
index a3b89744b9fbc30b6ef44cb3489c386e6ce9c460..5d6a32d563586bde88a96ef9f0479e2f106bbef0 100644 (file)
@@ -60,7 +60,7 @@ void XonoticUserSettingsTab_fill(entity me)
                me.TD(me, 1, 1.5, e = makeXonoticButton(_("Set font"), '0 0 0'));
                        e.onClick = SetLanguage_Click;
                        e.onClickEntity = sk;*/
-                       
+
        me.gotoRC(me, 0, 2.85); me.setFirstColumn(me, me.currentColumn);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Text language:")));
        me.TR(me);
@@ -74,7 +74,7 @@ void XonoticUserSettingsTab_fill(entity me)
                me.TD(me, 1, 1.5, e = makeXonoticButton(_("Set language"), '0 0 0'));
                        e.onClick = SetLanguage_Click;
                        e.onClickEntity = sk;
-               
+
        me.gotoRC(me, 9, 2.2); me.setFirstColumn(me, me.currentColumn);
                me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "cl_gentle", _("Disable gore effects and harsh language")));
        me.TR(me);
@@ -83,7 +83,7 @@ void XonoticUserSettingsTab_fill(entity me)
        me.TR(me);
                me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "cl_allow_uid2name", _("Allow player statistics to use your nickname")));
                setDependent(e, "cl_allow_uidtracking", 1, 1);
-               
+
        me.gotoRC(me, me.rows - 3, 2.6);
                me.TD(me, 1, 2, makeXonoticCommandButton(_("Apply immediately"), '0 0 0', "sendcvar cl_gentle; sendcvar cl_allow_uidtracking; sendcvar cl_allow_uid2name;", COMMANDBUTTON_APPLY));
 
index 57bbc3cd21ecb93def8f27455bc01636e7905a29..db728d601494407d9aa58077b594d73c48999823 100644 (file)
@@ -4,7 +4,7 @@ CLASS(XonoticVideoSettingsTab) EXTENDS(XonoticTab)
        ATTRIB(XonoticVideoSettingsTab, title, string, _("Video"))
        ATTRIB(XonoticVideoSettingsTab, intendedWidth, float, 0.9)
        ATTRIB(XonoticVideoSettingsTab, rows, float, 17)
-       ATTRIB(XonoticVideoSettingsTab, columns, float, 6.2) // added extra .2 for center space 
+       ATTRIB(XonoticVideoSettingsTab, columns, float, 6.2) // added extra .2 for center space
        ATTRIB(XonoticVideoSettingsTab, name, string, "videosettings")
 ENDCLASS(XonoticVideoSettingsTab)
 entity makeXonoticVideoSettingsTab();
@@ -47,7 +47,7 @@ void XonoticVideoSettingsTab_fill(entity me)
        me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "vid_fullscreen", _("Full screen")));
                me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "vid_vsync", _("Vertical Synchronization")));
-               
+
        me.TR(me);
        me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Anisotropy:")));
@@ -70,7 +70,7 @@ void XonoticVideoSettingsTab_fill(entity me)
        me.TR(me);
                me.TD(me, 1, 3, e = makeXonoticCheckBoxEx(2, 0, "r_viewfbo", _("High-quality frame buffer")));
                        setDependent(e, "vid_samples", 1, 1);
-               
+
        me.TR(me);
        me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Depth first:")));
@@ -140,6 +140,6 @@ void XonoticVideoSettingsTab_fill(entity me)
        }
 
        me.gotoRC(me, me.rows - 1, 0);
-               me.TD(me, 1, me.columns, makeXonoticCommandButton(_("Apply immediately"), '0 0 0', "menu_cmd sync; vid_restart; menu_restart; menu_cmd videosettings", COMMANDBUTTON_APPLY));
+               me.TD(me, 1, me.columns, makeXonoticCommandButton(_("Apply immediately"), '0 0 0', "vid_width $_menu_vid_width; vid_height $_menu_vid_height; vid_pixelheight $_menu_vid_pixelheight; vid_desktopfullscreen $_menu_vid_desktopfullscreen; menu_cmd update_conwidths_before_vid_restart; vid_restart; menu_cmd sync", COMMANDBUTTON_APPLY));
 }
 #endif
index c1dc04c7300e53f0c297ea804723121bd1b6c667..cc10f3da9ea5d722627ab283f2a4d6ab83d06dbc 100644 (file)
@@ -53,14 +53,14 @@ void XonoticGametypeButton_setChecked(entity me, float val)
 }
 void XonoticGametypeButton_loadCvars(entity me)
 {
-       if not(me.cvarName)
+       if (!me.cvarName)
                return;
 
        me.checked = cvar(me.cvarName);
 }
 void XonoticGametypeButton_saveCvars(entity me)
 {
-       if not(me.cvarName)
+       if (!me.cvarName)
                return;
 
        cvar_set(me.cvarName, ftos(me.checked));
index 531c761f637d124dccf7b46f0cc24605b2a9d2f5..56c25314da697317fdebfa66dceec917577dfc54 100644 (file)
@@ -77,7 +77,7 @@ void XonoticGametypeList_saveCvars(entity me)
 void XonoticGametypeList_drawListBoxItem(entity me, float i, vector absSize, float isSelected)
 {
        string s;
-       
+
        if(isSelected)
                draw_Fill('0 0 0', '1 1 0', SKINCOLOR_LISTBOX_SELECTED, SKINALPHA_LISTBOX_SELECTED);
 
@@ -91,7 +91,7 @@ void XonoticGametypeList_resizeNotify(entity me, vector relOrigin, vector relSiz
 {
        me.itemAbsSize = '0 0 0';
        SUPER(XonoticServerList).resizeNotify(me, relOrigin, relSize, absOrigin, absSize);
-       
+
        me.realFontSize_y = me.fontSize / (me.itemAbsSize_y = (absSize_y * me.itemHeight));
        me.realFontSize_x = me.fontSize / (me.itemAbsSize_x = (absSize_x * (1 - me.controlWidth)));
        me.realUpperMargin1 = 0.5 * (1 - me.realFontSize_y);
index 56aa9702c67170c82e286d62eed7cec004221999..78bab2bccb33418b146c79e75cf08fc4722211f2 100644 (file)
@@ -72,13 +72,13 @@ void XonoticInputBox_setText(entity me, string new)
 }
 void XonoticInputBox_loadCvars(entity me)
 {
-       if not(me.cvarName)
+       if (!me.cvarName)
                return;
        SUPER(XonoticInputBox).setText(me, cvar_string(me.cvarName));
 }
 void XonoticInputBox_saveCvars(entity me)
 {
-       if not(me.cvarName)
+       if (!me.cvarName)
                return;
        cvar_set(me.cvarName, me.text);
 }
index f9d86c2dd229276aadb7272c9484f165bb1ad606..0af90bbe270f8b43356e33c19da14b30ff773e52 100644 (file)
@@ -50,61 +50,61 @@ void MainWindow_configureMainWindow(entity me)
        me.firstRunDialog = i = spawnXonoticFirstRunDialog();
        i.configureDialog(i);
        me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
-       
-       
+
+
        // hud_configure dialogs
        i = spawnXonoticHUDExitDialog();
        i.configureDialog(i);
        me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
-       
+
        i = spawnXonoticHUDNotificationDialog();
        i.configureDialog(i);
        me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
-       
+
        i = spawnXonoticHUDAmmoDialog();
        i.configureDialog(i);
        me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
-       
+
        i = spawnXonoticHUDHealthArmorDialog();
        i.configureDialog(i);
        me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
-       
+
        i = spawnXonoticHUDChatDialog();
        i.configureDialog(i);
        me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
-       
+
        i = spawnXonoticHUDModIconsDialog();
        i.configureDialog(i);
        me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
-       
+
        i = spawnXonoticHUDPowerupsDialog();
        i.configureDialog(i);
        me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
-       
+
        i = spawnXonoticHUDPressedKeysDialog();
        i.configureDialog(i);
        me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
-       
+
        i = spawnXonoticHUDRaceTimerDialog();
        i.configureDialog(i);
        me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
-       
+
        i = spawnXonoticHUDRadarDialog();
        i.configureDialog(i);
        me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
-       
+
        i = spawnXonoticHUDScoreDialog();
        i.configureDialog(i);
        me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
-       
+
        i = spawnXonoticHUDTimerDialog();
        i.configureDialog(i);
        me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
-       
+
        i = spawnXonoticHUDVoteDialog();
        i.configureDialog(i);
        me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
-       
+
        i = spawnXonoticHUDWeaponsDialog();
        i.configureDialog(i);
        me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
@@ -124,35 +124,35 @@ void MainWindow_configureMainWindow(entity me)
        i = spawnXonoticHUDCenterprintDialog();
        i.configureDialog(i);
        me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
-       
-       
+
+
        // dialogs used by settings
        me.userbindEditDialog = i = spawnXonoticUserbindEditDialog();
        i.configureDialog(i);
        me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
-       
+
        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();
        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();
        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();
        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);
@@ -160,13 +160,13 @@ void MainWindow_configureMainWindow(entity me)
        me.mutatorsDialog = i = spawnXonoticMutatorsDialog();
        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();
        i.configureDialog(i);
        me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
-       
+
        me.hudDialog = i = spawnXonoticHUDDialog();
        i.configureDialog(i);
        me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
@@ -174,32 +174,32 @@ void MainWindow_configureMainWindow(entity me)
        me.hudconfirmDialog = i = spawnXonoticHUDConfirmDialog();
        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();
        i.configureDialog(i);
        me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
-       
+
        me.weaponsDialog = i = spawnXonoticWeaponsDialog();
        i.configureDialog(i);
        me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
-       
+
 
        // mutator dialogs
        i = spawnXonoticSandboxToolsDialog();
        i.configureDialog(i);
        me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z * SKINALPHA_DIALOG_SANDBOXTOOLS);
-       
-       
+
+
        // miscellaneous dialogs
        i = spawnXonoticTeamSelectDialog();
        i.configureDialog(i);
        me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
-       
-       
+
+
        // main dialogs/windows
        me.mainNexposee = n = spawnXonoticNexposee();
        /*
@@ -215,7 +215,7 @@ void MainWindow_configureMainWindow(entity me)
                i.configureDialog(i);
                n.addItemCentered(n, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
                n.setNexposee(n, i, SKINPOSITION_DIALOG_SINGLEPLAYER, SKINALPHAS_MAINMENU_x, SKINALPHAS_MAINMENU_y);
-               
+
                i = spawnXonoticMultiplayerDialog();
                i.configureDialog(i);
                n.addItemCentered(n, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
@@ -237,7 +237,7 @@ void MainWindow_configureMainWindow(entity me)
                n.addItemCentered(n, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z);
                n.setNexposee(n, i, SKINPOSITION_DIALOG_QUIT, SKINALPHAS_MAINMENU_x, SKINALPHAS_MAINMENU_y);
                n.pullNexposee(n, i, eY * (SKINHEIGHT_TITLE * SKINFONTSIZE_TITLE / conheight));
-               
+
        me.addItem(me, n, '0 0 0', '1 1 0', SKINALPHAS_MAINMENU_z);
        me.moveItemAfter(me, n, NULL);
 
index b5af66126f7fbec2e6b6d3b93c77077eaa678cbf..ce937e4add00cca264c454249a3094785a2654d6 100644 (file)
@@ -84,7 +84,7 @@ void XonoticMapList_g_maplistCacheToggle(entity me, float i)
        string a, b, c, s, bspname;
        float n;
        s = me.g_maplistCache;
-       if not(s)
+       if (!s)
                return;
        b = substring(s, i, 1);
        if(b == "0")
@@ -98,7 +98,7 @@ void XonoticMapList_g_maplistCacheToggle(entity me, float i)
        strunzone(s);
        me.g_maplistCache = strzone(strcat(a, b, c));
        // TODO also update the actual cvar
-       if not((bspname = MapInfo_BSPName_ByID(i)))
+       if (!((bspname = MapInfo_BSPName_ByID(i))))
                return;
        if(b == "1")
                cvar_set("g_maplist", strcat(bspname, " ", cvar_string("g_maplist")));
@@ -275,7 +275,7 @@ void MapList_LoadMap(entity btn, entity me)
                return;
 
        m = MapInfo_BSPName_ByID(i);
-       if not(m)
+       if (!m)
        {
                print(_("Huh? Can't play this (m is NULL). Refiltering so this won't happen again.\n"));
                me.refilter(me);
@@ -313,7 +313,7 @@ float XonoticMapList_keyDown(entity me, float scan, float ascii, float shift)
        }
        else if(ascii == 43) // +
        {
-               if not(me.g_maplistCacheQuery(me, me.selectedItem))
+               if (!me.g_maplistCacheQuery(me, me.selectedItem))
                        me.g_maplistCacheToggle(me, me.selectedItem);
        }
        else if(ascii == 45) // -
index 4c1c62af26d6319350776e9526782f1d5702b440..a0f64ca39e424c97a05a83e1064b205fa4a3a65d 100644 (file)
@@ -109,7 +109,7 @@ void XonoticPlayerList_drawListBoxItem(entity me, float i, vector absSize, float
                rgb = colormapPaletteColor(9, 0);
        else
                rgb = '1 1 1';
-       
+
        s = me.getPlayerList(me, i, PLAYERPARM_NAME);
        score = me.getPlayerList(me, i, PLAYERPARM_SCORE);
 
@@ -123,7 +123,7 @@ void XonoticPlayerList_drawListBoxItem(entity me, float i, vector absSize, float
                        score = substring(score, 0, t);
                if((t = strstrofs(score, ",", 0)) >= 0)
                        score = substring(score, 0, t);
-                       
+
                if(stof(score) == -666)
                        score = _("spectator");
        }
index 4ac5aa7b188030dc40c316a4982d71370946d9bc..85cc4fc5c559a3c56125fcce05e8aef6f1f7bf6e 100644 (file)
@@ -75,8 +75,8 @@ void XonoticRadioButton_loadCvars(entity me)
 }
 void XonoticRadioButton_draw(entity me)
 {
-       if not(me.cvarValue)
-               if not(me.cvarName)
+       if (!me.cvarValue)
+               if (!me.cvarName)
                {
                        // this is the "other" option
                        // always select this if none other is
index 86fdf1c63b0cd1ae927d144ec63f9751b15a4f24..0c7fe148be6ea7b0eed1c01ec353c6d59ffbd282 100644 (file)
@@ -7,6 +7,7 @@ CLASS(XonoticServerList) EXTENDS(XonoticListBox)
        METHOD(XonoticServerList, clickListBoxItem, void(entity, float, vector))
        METHOD(XonoticServerList, resizeNotify, void(entity, vector, vector, vector, vector))
        METHOD(XonoticServerList, keyDown, float(entity, float, float, float))
+       METHOD(XonoticServerList, toggleFavorite, void(entity, string))
 
        ATTRIB(XonoticServerList, iconsSizeFactor, float, 0.85)
 
@@ -35,7 +36,7 @@ CLASS(XonoticServerList) EXTENDS(XonoticListBox)
        ATTRIB(XonoticServerList, ipAddressBox, entity, NULL)
        ATTRIB(XonoticServerList, favoriteButton, entity, NULL)
        ATTRIB(XonoticServerList, nextRefreshTime, float, 0)
-       METHOD(XonoticServerList, refreshServerList, void(entity, float)) // refresh mode: 0 = just reparametrize, 1 = send new requests, 2 = clear
+       METHOD(XonoticServerList, refreshServerList, void(entity, float)) // refresh mode: REFRESHSERVERLIST_*
        ATTRIB(XonoticServerList, needsRefresh, float, 1)
        METHOD(XonoticServerList, focusEnter, void(entity))
        METHOD(XonoticServerList, positionSortButton, void(entity, entity, float, float, string, void(entity, entity)))
@@ -55,10 +56,70 @@ CLASS(XonoticServerList) EXTENDS(XonoticListBox)
 
        ATTRIB(XonoticServerList, seenIPv4, float, 0)
        ATTRIB(XonoticServerList, seenIPv6, float, 0)
+       ATTRIB(XonoticServerList, categoriesHeight, float, 1.25)
+
+       METHOD(XonoticServerList, getTotalHeight, float(entity))
+       METHOD(XonoticServerList, getItemAtPos, float(entity, float))
+       METHOD(XonoticServerList, getItemStart, float(entity, float))
+       METHOD(XonoticServerList, getItemHeight, float(entity, float))
 ENDCLASS(XonoticServerList)
 entity makeXonoticServerList();
 
+#ifndef IMPLEMENTATION
+float autocvar_menu_slist_categories;
+float autocvar_menu_slist_categories_onlyifmultiple; 
+float autocvar_menu_slist_purethreshold;
+float autocvar_menu_slist_modimpurity;
+float autocvar_menu_slist_recommendations;
+float autocvar_menu_slist_recommendations_maxping;
+float autocvar_menu_slist_recommendations_minfreeslots; 
+float autocvar_menu_slist_recommendations_minhumans;
+float autocvar_menu_slist_recommendations_purethreshold; 
+
+// server cache fields
+#define SLIST_FIELDS \
+       SLIST_FIELD(CNAME,       "cname") \
+       SLIST_FIELD(PING,        "ping") \
+       SLIST_FIELD(GAME,        "game") \
+       SLIST_FIELD(MOD,         "mod") \
+       SLIST_FIELD(MAP,         "map") \
+       SLIST_FIELD(NAME,        "name") \
+       SLIST_FIELD(MAXPLAYERS,  "maxplayers") \
+       SLIST_FIELD(NUMPLAYERS,  "numplayers") \
+       SLIST_FIELD(NUMHUMANS,   "numhumans") \
+       SLIST_FIELD(NUMBOTS,     "numbots") \
+       SLIST_FIELD(PROTOCOL,    "protocol") \
+       SLIST_FIELD(FREESLOTS,   "freeslots") \
+       SLIST_FIELD(PLAYERS,     "players") \
+       SLIST_FIELD(QCSTATUS,    "qcstatus") \
+       SLIST_FIELD(CATEGORY,    "category") \
+       SLIST_FIELD(ISFAVORITE,  "isfavorite")
+
+#define SLIST_FIELD(suffix,name) float SLIST_FIELD_##suffix;
+SLIST_FIELDS
+#undef SLIST_FIELD
+
+const float REFRESHSERVERLIST_RESORT = 0;    // sort the server list again to update for changes to e.g. favorite status, categories
+const float REFRESHSERVERLIST_REFILTER = 1;  // ..., also update filter and sort criteria
+const float REFRESHSERVERLIST_ASK = 2;       // ..., also suggest querying servers now
+const float REFRESHSERVERLIST_RESET = 3;     // ..., also clear the list first
+
+// function declarations
+float IsServerInList(string list, string srv);
+#define IsFavorite(srv) IsServerInList(cvar_string("net_slist_favorites"), srv)
+#define IsPromoted(srv) IsServerInList(_Nex_ExtResponseSystem_PromotedServers, srv)
+#define IsRecommended(srv) IsServerInList(_Nex_ExtResponseSystem_RecommendedServers, srv)
+
+entity RetrieveCategoryEnt(float catnum);
+
+float CheckCategoryOverride(float cat);
+float CheckCategoryForEntry(float entry); 
+float m_gethostcachecategory(float entry) { return CheckCategoryOverride(CheckCategoryForEntry(entry)); }
+
+void RegisterSLCategories();
+
 void ServerList_Connect_Click(entity btn, entity me);
+void ServerList_Categories_Click(entity box, entity me);
 void ServerList_ShowEmpty_Click(entity box, entity me);
 void ServerList_ShowFull_Click(entity box, entity me);
 void ServerList_Filter_Change(entity box, entity me);
@@ -66,47 +127,114 @@ void ServerList_Favorite_Click(entity btn, entity me);
 void ServerList_Info_Click(entity btn, entity me);
 void ServerList_Update_favoriteButton(entity btn, entity me);
 
-#ifndef IMPLEMENTATION
-float SLIST_FIELD_CNAME;
-float SLIST_FIELD_PING;
-float SLIST_FIELD_GAME;
-float SLIST_FIELD_MOD;
-float SLIST_FIELD_MAP;
-float SLIST_FIELD_NAME;
-float SLIST_FIELD_MAXPLAYERS;
-float SLIST_FIELD_NUMPLAYERS;
-float SLIST_FIELD_NUMHUMANS;
-float SLIST_FIELD_NUMBOTS;
-float SLIST_FIELD_PROTOCOL;
-float SLIST_FIELD_FREESLOTS;
-float SLIST_FIELD_PLAYERS;
-float SLIST_FIELD_QCSTATUS;
-float SLIST_FIELD_ISFAVORITE;
-#endif
+// fields for category entities
+#define MAX_CATEGORIES 9
+#define CATEGORY_FIRST 1
+entity categories[MAX_CATEGORIES];
+float category_ent_count;
+.string cat_name;
+.string cat_string;
+.string cat_enoverride_string;
+.string cat_dioverride_string;
+.float cat_enoverride;
+.float cat_dioverride;
+
+// fields for drawing categories
+float category_name[MAX_CATEGORIES];
+float category_item[MAX_CATEGORIES];
+float category_draw_count;
+
+#define SLIST_CATEGORIES \
+       SLIST_CATEGORY(CAT_FAVORITED,    "",            "",             ZCTX(_("SLCAT^Favorites"))) \
+       SLIST_CATEGORY(CAT_RECOMMENDED,  "",            "",             ZCTX(_("SLCAT^Recommended"))) \
+       SLIST_CATEGORY(CAT_NORMAL,       "",            "CAT_SERVERS",  ZCTX(_("SLCAT^Normal Servers"))) \
+       SLIST_CATEGORY(CAT_SERVERS,      "CAT_NORMAL",  "CAT_SERVERS",  ZCTX(_("SLCAT^Servers"))) \
+       SLIST_CATEGORY(CAT_XPM,          "CAT_NORMAL",  "CAT_SERVERS",  ZCTX(_("SLCAT^Competitive Mode"))) \
+       SLIST_CATEGORY(CAT_MODIFIED,     "",            "CAT_SERVERS",  ZCTX(_("SLCAT^Modified Servers"))) \
+       SLIST_CATEGORY(CAT_OVERKILL,     "",            "CAT_SERVERS",  ZCTX(_("SLCAT^Overkill Mode"))) \
+       SLIST_CATEGORY(CAT_MINSTAGIB,    "",            "CAT_SERVERS",  ZCTX(_("SLCAT^MinstaGib Mode"))) \
+       SLIST_CATEGORY(CAT_DEFRAG,       "",            "CAT_SERVERS",  ZCTX(_("SLCAT^Defrag Mode")))
+
+#define SLIST_CATEGORY_AUTOCVAR(name) autocvar_menu_slist_categories_##name##_override
+#define SLIST_CATEGORY(name,enoverride,dioverride,str) \
+       float name; \
+       var string SLIST_CATEGORY_AUTOCVAR(name) = enoverride;
+SLIST_CATEGORIES
+#undef SLIST_CATEGORY
 
 #endif
-
+#endif
 #ifdef IMPLEMENTATION
-void ServerList_UpdateFieldIDs()
+
+void RegisterSLCategories()
+{
+       entity cat;
+       #define SLIST_CATEGORY(name,enoverride,dioverride,str) \
+               SET_FIELD_COUNT(name, CATEGORY_FIRST, category_ent_count) \
+               CHECK_MAX_COUNT(name, MAX_CATEGORIES, category_ent_count, "SLIST_CATEGORY") \
+               cat = spawn(); \
+               categories[name - 1] = cat; \
+               cat.classname = "slist_category"; \
+               cat.cat_name = strzone(#name); \
+               cat.cat_enoverride_string = strzone(SLIST_CATEGORY_AUTOCVAR(name)); \
+               cat.cat_dioverride_string = strzone(dioverride); \
+               cat.cat_string = strzone(str);
+       SLIST_CATEGORIES
+       #undef SLIST_CATEGORY
+
+       float i, x, catnum;
+       string s;
+
+       #define PROCESS_OVERRIDE(override_string,override_field) \
+               for(i = 0; i < category_ent_count; ++i) \
+               { \
+                       s = categories[i].override_string; \
+                       if((s != "") && (s != categories[i].cat_name)) \
+                       { \
+                               catnum = 0; \
+                               for(x = 0; x < category_ent_count; ++x) \
+                               { if(categories[x].cat_name == s) { \
+                                       catnum = (x+1); \
+                                       break; \
+                               } } \
+                               if(catnum) \
+                               { \
+                                       strunzone(categories[i].override_string); \
+                                       categories[i].override_field = catnum; \
+                                       continue; \
+                               } \
+                               else \
+                               { \
+                                       printf( \
+                                               "RegisterSLCategories(): Improper override '%s' for category '%s'!\n", \
+                                               s, \
+                                               categories[i].cat_name \
+                                       ); \
+                               } \
+                       } \
+                       strunzone(categories[i].override_string); \
+                       categories[i].override_field = 0; \
+               }
+       PROCESS_OVERRIDE(cat_enoverride_string, cat_enoverride)
+       PROCESS_OVERRIDE(cat_dioverride_string, cat_dioverride)
+       #undef PROCESS_OVERRIDE
+}
+
+// Supporting Functions
+entity RetrieveCategoryEnt(float catnum)
 {
-       SLIST_FIELD_CNAME = gethostcacheindexforkey( "cname" );
-       SLIST_FIELD_PING = gethostcacheindexforkey( "ping" );
-       SLIST_FIELD_GAME = gethostcacheindexforkey( "game" );
-       SLIST_FIELD_MOD = gethostcacheindexforkey( "mod" );
-       SLIST_FIELD_MAP = gethostcacheindexforkey( "map" );
-       SLIST_FIELD_NAME = gethostcacheindexforkey( "name" );
-       SLIST_FIELD_MAXPLAYERS = gethostcacheindexforkey( "maxplayers" );
-       SLIST_FIELD_NUMPLAYERS = gethostcacheindexforkey( "numplayers" );
-       SLIST_FIELD_NUMHUMANS = gethostcacheindexforkey( "numhumans" );
-       SLIST_FIELD_NUMBOTS = gethostcacheindexforkey( "numbots" );
-       SLIST_FIELD_PROTOCOL = gethostcacheindexforkey( "protocol" );
-       SLIST_FIELD_FREESLOTS = gethostcacheindexforkey( "freeslots" );
-       SLIST_FIELD_PLAYERS = gethostcacheindexforkey( "players" );
-       SLIST_FIELD_QCSTATUS = gethostcacheindexforkey( "qcstatus" );
-       SLIST_FIELD_ISFAVORITE = gethostcacheindexforkey( "isfavorite" );
-}
-
-float IsFavorite(string srv)
+       if((catnum > 0) && (catnum <= category_ent_count))
+       {
+               return categories[catnum - 1];
+       }
+       else
+       {
+               error(sprintf("RetrieveCategoryEnt(%d): Improper category number!\n", catnum));
+               return world;
+       }
+}
+
+float IsServerInList(string list, string srv)
 {
        string p;
        float i, n;
@@ -116,7 +244,7 @@ float IsFavorite(string srv)
        if(srv == "")
                return FALSE;
        p = crypto_getidfp(srv);
-       n = tokenize_console(cvar_string("net_slist_favorites"));
+       n = tokenize_console(list);
        for(i = 0; i < n; ++i)
        {
                if(substring(argv(i), 0, 1) != "[" && strlen(argv(i)) == 44 && strstrofs(argv(i), ".", 0) < 0)
@@ -134,7 +262,124 @@ float IsFavorite(string srv)
        return FALSE;
 }
 
-void ToggleFavorite(string srv)
+float CheckCategoryOverride(float cat)
+{
+       entity catent = RetrieveCategoryEnt(cat);
+       if(catent)
+       {
+               float override = (autocvar_menu_slist_categories ? catent.cat_enoverride : catent.cat_dioverride); 
+               if(override) { return override; }
+               else { return cat; }
+       }
+       else
+       {
+               error(sprintf("CheckCategoryOverride(%d): Improper category number!\n", cat));
+               return cat;
+       }
+}
+
+float CheckCategoryForEntry(float entry)
+{
+       string s, k, v, modtype = "";
+       float j, m, impure = 0, freeslots = 0, sflags = 0;
+       s = gethostcachestring(SLIST_FIELD_QCSTATUS, entry);
+       m = tokenizebyseparator(s, ":");
+
+       for(j = 2; j < m; ++j)
+       {
+               if(argv(j) == "") { break; }
+               k = substring(argv(j), 0, 1);
+               v = substring(argv(j), 1, -1);
+               switch(k)
+               {
+                       case "P": { impure = stof(v); break; }
+                       case "S": { freeslots = stof(v); break; }
+                       case "F": { sflags = stof(v); break; }
+                       case "M": { modtype = strtolower(v); break; }
+               }
+       }
+
+       if(modtype != "xonotic") { impure += autocvar_menu_slist_modimpurity; }
+
+       // check if this server is favorited
+       if(gethostcachenumber(SLIST_FIELD_ISFAVORITE, entry)) { return CAT_FAVORITED; }
+
+       // now check if it's recommended
+       if(autocvar_menu_slist_recommendations)
+       {
+               string cname = gethostcachestring(SLIST_FIELD_CNAME, entry);
+               
+               if(IsPromoted(cname)) { return CAT_RECOMMENDED; }
+               else
+               {
+                       float recommended = 0;
+                       if(autocvar_menu_slist_recommendations & 1)
+                       {
+                               if(IsRecommended(cname)) { ++recommended; }
+                               else { --recommended; }
+                       }
+                       if(autocvar_menu_slist_recommendations & 2)
+                       {
+                               if(
+                                       ///// check for minimum free slots
+                                       (freeslots >= autocvar_menu_slist_recommendations_minfreeslots)
+                                       
+                                       && // check for purity requirement
+                                       (
+                                               (autocvar_menu_slist_recommendations_purethreshold < 0)
+                                               ||
+                                               (impure <= autocvar_menu_slist_recommendations_purethreshold)
+                                       )
+                                       
+                                       && // check for minimum amount of humans
+                                       (
+                                               gethostcachenumber(SLIST_FIELD_NUMHUMANS, entry)
+                                               >=
+                                               autocvar_menu_slist_recommendations_minhumans
+                                       )
+                                       
+                                       && // check for maximum latency
+                                       (
+                                               gethostcachenumber(SLIST_FIELD_PING, entry)
+                                               <=
+                                               autocvar_menu_slist_recommendations_maxping
+                                       )
+                               )
+                                       { ++recommended; }
+                               else
+                                       { --recommended; }
+                       }
+                       if(recommended > 0) { return CAT_RECOMMENDED; }
+               }
+       }
+
+       // if not favorited or recommended, check modname
+       if(modtype != "xonotic")
+       {
+               switch(modtype)
+               {
+                       // old servers which don't report their mod name are considered modified now
+                       case "": { return CAT_MODIFIED; }
+                       
+                       case "xpm": { return CAT_XPM; } 
+                       case "minstagib": { return CAT_MINSTAGIB; }
+                       case "overkill": { return CAT_OVERKILL; }
+                       //case "nix": { return CAT_NIX; }
+                       //case "newtoys": { return CAT_NEWTOYS; }
+
+                       // "cts" is allowed as compat, xdf is replacement
+                       case "cts": 
+                       case "xdf": { return CAT_DEFRAG; }
+                       
+                       default: { dprintf("Found strange mod type: %s\n", modtype); return CAT_MODIFIED; }
+               }
+       }
+
+       // must be normal or impure server
+       return ((impure > autocvar_menu_slist_purethreshold) ? CAT_MODIFIED : CAT_NORMAL);
+}
+
+void XonoticServerList_toggleFavorite(entity me, string srv)
 {
        string s, s0, s1, s2, srv_resolved, p;
        float i, n, f;
@@ -169,7 +414,7 @@ void ToggleFavorite(string srv)
                f = 1;
                --i;
        }
-       
+
        if(!f)
        {
                s1 = "";
@@ -181,15 +426,16 @@ void ToggleFavorite(string srv)
                        cvar_set("net_slist_favorites", strcat(s, s1, srv));
        }
 
-       resorthostcache();
+       me.refreshServerList(me, REFRESHSERVERLIST_RESORT);
 }
 
 void ServerList_Update_favoriteButton(entity btn, entity me)
 {
-       if(IsFavorite(me.ipAddressBox.text))
-               me.favoriteButton.setText(me.favoriteButton, _("Remove"));
-       else
-               me.favoriteButton.setText(me.favoriteButton, _("Bookmark"));
+       me.favoriteButton.setText(me.favoriteButton,
+               (IsFavorite(me.ipAddressBox.text) ?
+                       _("Remove") : _("Favorite")
+               )
+       );
 }
 
 entity makeXonoticServerList()
@@ -203,8 +449,12 @@ void XonoticServerList_configureXonoticServerList(entity me)
 {
        me.configureXonoticListBox(me);
 
-       ServerList_UpdateFieldIDs();
+       // update field ID's
+       #define SLIST_FIELD(suffix,name) SLIST_FIELD_##suffix = gethostcacheindexforkey(name);
+       SLIST_FIELDS
+       #undef SLIST_FIELD
 
+       // clear list
        me.nItems = 0;
 }
 void XonoticServerList_setSelected(entity me, float i)
@@ -231,20 +481,14 @@ void XonoticServerList_setSelected(entity me, float i)
 }
 void XonoticServerList_refreshServerList(entity me, float mode)
 {
-       // 0: just reparametrize
-       // 1: also ask for new servers
-       // 2: clear
        //print("refresh of type ", ftos(mode), "\n");
-       /* if(mode == 2) // borken
-       {
-               // clear list
-               localcmd("net_slist\n");
-               me.needsRefresh = 1; // net_slist kills sort order, so we need to restore it later
-       }
-       else */
+
+       if(mode >= REFRESHSERVERLIST_REFILTER)
        {
-               float m, o, i, n; // moin moin
+               float m, i, n;
+               float listflags = 0;
                string s, typestr, modstr;
+
                s = me.filterString;
 
                m = strstrofs(s, ":", 0);
@@ -304,14 +548,17 @@ void XonoticServerList_refreshServerList(entity me, float mode)
                        sethostcachemaskstring(++m, SLIST_FIELD_PLAYERS, s, SLIST_TEST_CONTAINS);
                        sethostcachemaskstring(++m, SLIST_FIELD_QCSTATUS, strcat(s, ":"), SLIST_TEST_STARTSWITH);
                }
-               o = 2; // favorites first
-               if(me.currentSortOrder < 0)
-                       o |= 1; // descending
-               sethostcachesort(me.currentSortField, o);
-               resorthostcache();
-               if(mode >= 1)
-                       refreshhostcache();
+
+               // sorting flags
+               //listflags |= SLSF_FAVORITES;
+               listflags |= SLSF_CATEGORIES;
+               if(me.currentSortOrder < 0) { listflags |= SLSF_DESCENDING; }
+               sethostcachesort(me.currentSortField, listflags);
        }
+       
+       resorthostcache();
+       if(mode >= REFRESHSERVERLIST_ASK)
+               refreshhostcache(mode >= REFRESHSERVERLIST_RESET);
 }
 void XonoticServerList_focusEnter(entity me)
 {
@@ -321,8 +568,9 @@ void XonoticServerList_focusEnter(entity me)
                return;
        }
        me.nextRefreshTime = time + 10;
-       me.refreshServerList(me, 1);
+       me.refreshServerList(me, REFRESHSERVERLIST_ASK);
 }
+
 void XonoticServerList_draw(entity me)
 {
        float i, found, owned;
@@ -334,10 +582,24 @@ void XonoticServerList_draw(entity me)
                _Nex_ExtResponseSystem_BannedServersNeedsRefresh = 0;
        }
 
+       if(_Nex_ExtResponseSystem_PromotedServersNeedsRefresh)
+       {
+               if(!me.needsRefresh)
+                       me.needsRefresh = 3;
+               _Nex_ExtResponseSystem_PromotedServersNeedsRefresh = 0;
+       }
+
+       if(_Nex_ExtResponseSystem_RecommendedServersNeedsRefresh)
+       {
+               if(!me.needsRefresh)
+                       me.needsRefresh = 3;
+               _Nex_ExtResponseSystem_RecommendedServersNeedsRefresh = 0;
+       }
+
        if(me.currentSortField == -1)
        {
                me.setSortOrder(me, SLIST_FIELD_PING, +1);
-               me.refreshServerList(me, 2);
+               me.refreshServerList(me, REFRESHSERVERLIST_RESET);
        }
        else if(me.needsRefresh == 1)
        {
@@ -346,12 +608,107 @@ void XonoticServerList_draw(entity me)
        else if(me.needsRefresh == 2)
        {
                me.needsRefresh = 0;
-               me.refreshServerList(me, 0);
+               me.refreshServerList(me, REFRESHSERVERLIST_REFILTER);
+       }
+       else if(me.needsRefresh == 3)
+       {
+               me.needsRefresh = 0;
+               me.refreshServerList(me, REFRESHSERVERLIST_RESORT);
        }
 
        owned = ((me.selectedServer == me.ipAddressBox.text) && (me.ipAddressBox.text != ""));
 
-       me.nItems = gethostcachevalue(SLIST_HOSTCACHEVIEWCOUNT);
+       for(i = 0; i < category_draw_count; ++i) { category_name[i] = -1; category_item[i] = -1; }
+       category_draw_count = 0;
+
+       if(autocvar_menu_slist_categories >= 0) // if less than 0, don't even draw a category heading for favorites
+       {
+               float itemcount = gethostcachevalue(SLIST_HOSTCACHEVIEWCOUNT);
+               me.nItems = itemcount;
+               
+               //float visible = floor(me.scrollPos / me.itemHeight);
+               // ^ unfortunately no such optimization can be made-- we must process through the
+               // entire list, otherwise there is no way to know which item is first in its category.
+
+               // binary search method suggested by div
+               float x;
+               float begin = 0;
+               for(x = 1; x <= category_ent_count; ++x) {
+                       float first = begin;
+                       float last = (itemcount - 1);
+                       if (first > last) {
+                               // List is empty.
+                               break;
+                       }
+                       float catf = gethostcachenumber(SLIST_FIELD_CATEGORY, first);
+                       float catl = gethostcachenumber(SLIST_FIELD_CATEGORY, last);
+                       if (catf > x) {
+                               // The first one is already > x.
+                               // Therefore, category x does not exist.
+                               // Higher numbered categories do exist though.
+                       } else if (catl < x) {
+                               // The last one is < x.
+                               // Thus this category - and any following -
+                               // don't exist.
+                               break;
+                       } else if (catf == x) {
+                               // Starts at first. This breaks the loop
+                               // invariant in the binary search and thus has
+                               // to be handled separately.
+                               if(gethostcachenumber(SLIST_FIELD_CATEGORY, first) != x)
+                                       error("Category mismatch I");
+                               if(first > 0)
+                                       if(gethostcachenumber(SLIST_FIELD_CATEGORY, first - 1) == x)
+                                               error("Category mismatch II");
+                               category_name[category_draw_count] = x;
+                               category_item[category_draw_count] = first;
+                               ++category_draw_count;
+                               begin = first + 1;
+                       } else {
+                               // At this point, catf <= x < catl, thus
+                               // catf < catl, thus first < last.
+                               // INVARIANTS:
+                               // last - first >= 1
+                               // catf == gethostcachenumber(SLIST_FIELD_CATEGORY(first)
+                               // catl == gethostcachenumber(SLIST_FIELD_CATEGORY(last)
+                               // catf < x
+                               // catl >= x
+                               while (last - first > 1) {
+                                       float middle = floor((first + last) / 2);
+                                       // By loop condition, middle != first && middle != last.
+                                       float cat = gethostcachenumber(SLIST_FIELD_CATEGORY, middle);
+                                       if (cat >= x) {
+                                               last = middle;
+                                               catl = cat;
+                                       } else {
+                                               first = middle;
+                                               catf = cat;
+                                       }
+                               }
+                               if (catl == x) {
+                                       if(gethostcachenumber(SLIST_FIELD_CATEGORY, last) != x)
+                                               error("Category mismatch III");
+                                       if(last > 0)
+                                               if(gethostcachenumber(SLIST_FIELD_CATEGORY, last - 1) == x)
+                                                       error("Category mismatch IV");
+                                       category_name[category_draw_count] = x;
+                                       category_item[category_draw_count] = last;
+                                       ++category_draw_count;
+                                       begin = last + 1; // already scanned through these, skip 'em
+                               }
+                               else
+                                       begin = last; // already scanned through these, skip 'em
+                       }
+               }
+               if(autocvar_menu_slist_categories_onlyifmultiple && (category_draw_count == 1))
+               {
+                       category_name[0] = -1;
+                       category_item[0] = -1;
+                       category_draw_count = 0;
+                       me.nItems = itemcount;
+               }
+       }
+       else { me.nItems = gethostcachevalue(SLIST_HOSTCACHEVIEWCOUNT); }
 
        me.connectButton.disabled = ((me.nItems == 0) && (me.ipAddressBox.text == ""));
        me.infoButton.disabled = ((me.nItems == 0) || !owned);
@@ -361,6 +718,7 @@ void XonoticServerList_draw(entity me)
        if(me.selectedServer)
        {
                for(i = 0; i < me.nItems; ++i)
+               {
                        if(gethostcachestring(SLIST_FIELD_CNAME, i) == me.selectedServer)
                        {
                                if(i != me.selectedItem)
@@ -371,8 +729,10 @@ void XonoticServerList_draw(entity me)
                                found = 1;
                                break;
                        }
+               }
        }
        if(!found)
+       {
                if(me.nItems > 0)
                {
                        if(me.selectedItem >= me.nItems)
@@ -381,7 +741,8 @@ void XonoticServerList_draw(entity me)
                                strunzone(me.selectedServer);
                        me.selectedServer = strzone(gethostcachestring(SLIST_FIELD_CNAME, me.selectedItem));
                }
-
+       }
+       
        if(owned)
        {
                if(me.selectedServer != me.ipAddressBox.text)
@@ -471,7 +832,16 @@ void ServerList_Filter_Change(entity box, entity me)
                me.filterString = strzone(box.text);
        else
                me.filterString = string_null;
-       me.refreshServerList(me, 0);
+       me.refreshServerList(me, REFRESHSERVERLIST_REFILTER);
+
+       me.ipAddressBox.setText(me.ipAddressBox, "");
+       me.ipAddressBox.cursorPos = 0;
+       me.ipAddressBoxFocused = -1;
+}
+void ServerList_Categories_Click(entity box, entity me)
+{
+       box.setChecked(box, autocvar_menu_slist_categories = !autocvar_menu_slist_categories);
+       me.refreshServerList(me, REFRESHSERVERLIST_RESORT);
 
        me.ipAddressBox.setText(me.ipAddressBox, "");
        me.ipAddressBox.cursorPos = 0;
@@ -480,7 +850,7 @@ void ServerList_Filter_Change(entity box, entity me)
 void ServerList_ShowEmpty_Click(entity box, entity me)
 {
        box.setChecked(box, me.filterShowEmpty = !me.filterShowEmpty);
-       me.refreshServerList(me, 0);
+       me.refreshServerList(me, REFRESHSERVERLIST_REFILTER);
 
        me.ipAddressBox.setText(me.ipAddressBox, "");
        me.ipAddressBox.cursorPos = 0;
@@ -489,7 +859,7 @@ void ServerList_ShowEmpty_Click(entity box, entity me)
 void ServerList_ShowFull_Click(entity box, entity me)
 {
        box.setChecked(box, me.filterShowFull = !me.filterShowFull);
-       me.refreshServerList(me, 0);
+       me.refreshServerList(me, REFRESHSERVERLIST_REFILTER);
 
        me.ipAddressBox.setText(me.ipAddressBox, "");
        me.ipAddressBox.cursorPos = 0;
@@ -510,7 +880,7 @@ void XonoticServerList_setSortOrder(entity me, float fld, float direction)
        if(me.selectedServer)
                strunzone(me.selectedServer);
        me.selectedServer = string_null;
-       me.refreshServerList(me, 0);
+       me.refreshServerList(me, REFRESHSERVERLIST_REFILTER);
 }
 void XonoticServerList_positionSortButton(entity me, entity btn, float theOrigin, float theSize, string theTitle, void(entity, entity) theFunc)
 {
@@ -566,10 +936,11 @@ void XonoticServerList_resizeNotify(entity me, vector relOrigin, vector relSize,
 }
 void ServerList_Connect_Click(entity btn, entity me)
 {
-       if(me.ipAddressBox.text == "")
-               localcmd("connect ", me.selectedServer, "\n");
-       else
-               localcmd("connect ", me.ipAddressBox.text, "\n");
+       localcmd(sprintf("connect %s\n",
+               ((me.ipAddressBox.text != "") ?
+                       me.ipAddressBox.text : me.selectedServer
+               )
+       ));
 }
 void ServerList_Favorite_Click(entity btn, entity me)
 {
@@ -577,13 +948,14 @@ void ServerList_Favorite_Click(entity btn, entity me)
        ipstr = netaddress_resolve(me.ipAddressBox.text, 26000);
        if(ipstr != "")
        {
-               ToggleFavorite(me.ipAddressBox.text);
+               me.toggleFavorite(me, me.ipAddressBox.text);
                me.ipAddressBoxFocused = -1;
        }
 }
 void ServerList_Info_Click(entity btn, entity me)
 {
-       main.serverInfoDialog.loadServerInfo(main.serverInfoDialog, me.selectedItem);
+       if (me.nItems != 0)
+               main.serverInfoDialog.loadServerInfo(main.serverInfoDialog, me.selectedItem);
        DialogOpenButton_Click(me, main.serverInfoDialog);
 }
 void XonoticServerList_clickListBoxItem(entity me, float i, vector where)
@@ -607,6 +979,48 @@ void XonoticServerList_drawListBoxItem(entity me, float i, vector absSize, float
        float m, pure, freeslots, j, sflags;
        string s, typestr, versionstr, k, v, modname;
 
+       //printf("time: %f, i: %d, item: %d, nitems: %d\n", time, i, item, me.nItems);
+
+       vector oldscale = draw_scale;
+       vector oldshift = draw_shift;
+#define SET_YRANGE(start,end) \
+       draw_scale = boxToGlobalSize(eX * 1 + eY * (end - start), oldscale); \
+       draw_shift = boxToGlobal(eY * start, oldshift, oldscale);
+
+       for (j = 0; j < category_draw_count; ++j) {
+               // Matches exactly the headings with increased height.
+               if (i == category_item[j])
+                       break;
+       }
+
+       if (j < category_draw_count)
+       {
+               entity catent = RetrieveCategoryEnt(category_name[j]);
+               if(catent)
+               {
+                       SET_YRANGE(
+                               (me.categoriesHeight - 1) / (me.categoriesHeight + 1),
+                               me.categoriesHeight / (me.categoriesHeight + 1)
+                       );
+                       draw_Text(
+                               eY * me.realUpperMargin
+                               +
+#if 0
+                               eX * (me.columnNameOrigin + (me.columnNameSize - draw_TextWidth(catent.cat_string, 0, me.realFontSize)) * 0.5),
+                               catent.cat_string,
+#else
+                               eX * (me.columnNameOrigin),
+                               strcat(catent.cat_string, ":"),
+#endif
+                               me.realFontSize,
+                               '1 1 1',
+                               SKINALPHA_TEXT,
+                               0
+                       );
+                       SET_YRANGE(me.categoriesHeight / (me.categoriesHeight + 1), 1);
+               }
+       }
+       
        if(isSelected)
                draw_Fill('0 0 0', '1 1 0', SKINCOLOR_LISTBOX_SELECTED, SKINALPHA_LISTBOX_SELECTED);
 
@@ -663,7 +1077,7 @@ void XonoticServerList_drawListBoxItem(entity me, float i, vector absSize, float
                theAlpha = SKINALPHA_SERVERLIST_FULL;
        else if(freeslots == 0)
                theAlpha = SKINALPHA_SERVERLIST_FULL; // g_maxplayers support
-       else if not(gethostcachenumber(SLIST_FIELD_NUMHUMANS, i))
+       else if (!gethostcachenumber(SLIST_FIELD_NUMHUMANS, i))
                theAlpha = SKINALPHA_SERVERLIST_EMPTY;
        else
                theAlpha = 1;
@@ -736,83 +1150,96 @@ void XonoticServerList_drawListBoxItem(entity me, float i, vector absSize, float
        // 4: AES recommended and will be used
        // 5: AES required
 
-       {
-               vector iconSize = '0 0 0';
-               iconSize_y = me.realFontSize_y * me.iconsSizeFactor;
-               iconSize_x = me.realFontSize_x * me.iconsSizeFactor;
+       // --------------
+       //  RENDER ICONS
+       // --------------
+       vector iconSize = '0 0 0';
+       iconSize_y = me.realFontSize_y * me.iconsSizeFactor;
+       iconSize_x = me.realFontSize_x * me.iconsSizeFactor;
 
-               vector iconPos = '0 0 0';
-               iconPos_x = (me.columnIconsSize - 3 * iconSize_x) * 0.5;
-               iconPos_y = (1 - iconSize_y) * 0.5;
+       vector iconPos = '0 0 0';
+       iconPos_x = (me.columnIconsSize - 3 * iconSize_x) * 0.5;
+       iconPos_y = (1 - iconSize_y) * 0.5;
 
-               string n;
+       string n;
 
-               if not(me.seenIPv4 && me.seenIPv6)
-               {
-                       iconPos_x += iconSize_x * 0.5;
-               }
-               else if(me.seenIPv4 && me.seenIPv6)
-               {
-                       n = string_null;
-                       if(isv6)
-                               draw_PreloadPictureWithFlags(n = strcat(SKINGFX_SERVERLIST_ICON, "_ipv6"), 0); // PRECACHE_PIC_MIPMAP
-                       else if(isv4)
-                               draw_PreloadPictureWithFlags(n = strcat(SKINGFX_SERVERLIST_ICON, "_ipv4"), 0); // PRECACHE_PIC_MIPMAP
-                       if(n)
-                               draw_Picture(iconPos, n, iconSize, '1 1 1', 1);
-                       iconPos_x += iconSize_x;
-               }
-
-               if(q > 0)
-               {
-                       draw_PreloadPictureWithFlags(n = strcat(SKINGFX_SERVERLIST_ICON, "_aeslevel", ftos(q)), 0); // PRECACHE_PIC_MIPMAP
+       if (!(me.seenIPv4 && me.seenIPv6))
+       {
+               iconPos_x += iconSize_x * 0.5;
+       }
+       else if(me.seenIPv4 && me.seenIPv6)
+       {
+               n = string_null;
+               if(isv6)
+                       draw_PreloadPictureWithFlags(n = strcat(SKINGFX_SERVERLIST_ICON, "_ipv6"), 0); // PRECACHE_PIC_MIPMAP
+               else if(isv4)
+                       draw_PreloadPictureWithFlags(n = strcat(SKINGFX_SERVERLIST_ICON, "_ipv4"), 0); // PRECACHE_PIC_MIPMAP
+               if(n)
                        draw_Picture(iconPos, n, iconSize, '1 1 1', 1);
-               }
                iconPos_x += iconSize_x;
+       }
 
-               if(modname == "Xonotic")
-               {
-                       if(pure == 0)
-                       {
-                               draw_PreloadPictureWithFlags(n = strcat(SKINGFX_SERVERLIST_ICON, "_pure1"), PRECACHE_PIC_MIPMAP);
-                               draw_Picture(iconPos, n, iconSize, '1 1 1', 1);
-                       }
-               }
-               else
-               {
-                       draw_PreloadPictureWithFlags(n = strcat(SKINGFX_SERVERLIST_ICON, "_mod_", modname), PRECACHE_PIC_MIPMAP);
-                       if(draw_PictureSize(n) == '0 0 0')
-                               draw_PreloadPictureWithFlags(n = strcat(SKINGFX_SERVERLIST_ICON, "_mod_"), PRECACHE_PIC_MIPMAP);
-                       if(pure == 0)
-                               draw_Picture(iconPos, n, iconSize, '1 1 1', 1);
-                       else
-                               draw_Picture(iconPos, n, iconSize, '1 1 1', SKINALPHA_SERVERLIST_ICON_NONPURE);
-               }
-               iconPos_x += iconSize_x;
+       if(q > 0)
+       {
+               draw_PreloadPictureWithFlags(n = strcat(SKINGFX_SERVERLIST_ICON, "_aeslevel", ftos(q)), 0); // PRECACHE_PIC_MIPMAP
+               draw_Picture(iconPos, n, iconSize, '1 1 1', 1);
+       }
+       iconPos_x += iconSize_x;
 
-               if(sflags >= 0 && (sflags & SERVERFLAG_PLAYERSTATS))
+       if(modname == "Xonotic")
+       {
+               if(pure == 0)
                {
-                       draw_PreloadPictureWithFlags(n = strcat(SKINGFX_SERVERLIST_ICON, "_stats1"), 0); // PRECACHE_PIC_MIPMAP
+                       draw_PreloadPictureWithFlags(n = strcat(SKINGFX_SERVERLIST_ICON, "_pure1"), PRECACHE_PIC_MIPMAP);
                        draw_Picture(iconPos, n, iconSize, '1 1 1', 1);
                }
-               iconPos_x += iconSize_x;
        }
+       else
+       {
+               draw_PreloadPictureWithFlags(n = strcat(SKINGFX_SERVERLIST_ICON, "_mod_", modname), PRECACHE_PIC_MIPMAP);
+               if(draw_PictureSize(n) == '0 0 0')
+                       draw_PreloadPictureWithFlags(n = strcat(SKINGFX_SERVERLIST_ICON, "_mod_"), PRECACHE_PIC_MIPMAP);
+               if(pure == 0)
+                       draw_Picture(iconPos, n, iconSize, '1 1 1', 1);
+               else
+                       draw_Picture(iconPos, n, iconSize, '1 1 1', SKINALPHA_SERVERLIST_ICON_NONPURE);
+       }
+       iconPos_x += iconSize_x;
 
+       if(sflags >= 0 && (sflags & SERVERFLAG_PLAYERSTATS))
+       {
+               draw_PreloadPictureWithFlags(n = strcat(SKINGFX_SERVERLIST_ICON, "_stats1"), 0); // PRECACHE_PIC_MIPMAP
+               draw_Picture(iconPos, n, iconSize, '1 1 1', 1);
+       }
+       iconPos_x += iconSize_x;
+       
+       // --------------
+       //  RENDER TEXT
+       // --------------
+       
+       // ping
        s = ftos(p);
        draw_Text(me.realUpperMargin * eY + (me.columnPingOrigin + me.columnPingSize - draw_TextWidth(s, 0, me.realFontSize)) * eX, s, me.realFontSize, theColor, theAlpha, 0);
+
+       // server name
        s = draw_TextShortenToWidth(gethostcachestring(SLIST_FIELD_NAME, i), me.columnNameSize, 0, me.realFontSize);
        draw_Text(me.realUpperMargin * eY + me.columnNameOrigin * eX, s, me.realFontSize, theColor, theAlpha, 0);
+
+       // server map
        s = draw_TextShortenToWidth(gethostcachestring(SLIST_FIELD_MAP, i), me.columnMapSize, 0, me.realFontSize);
        draw_Text(me.realUpperMargin * eY + (me.columnMapOrigin + (me.columnMapSize - draw_TextWidth(s, 0, me.realFontSize)) * 0.5) * eX, s, me.realFontSize, theColor, theAlpha, 0);
+
+       // server gametype
        s = draw_TextShortenToWidth(typestr, me.columnTypeSize, 0, me.realFontSize);
        draw_Text(me.realUpperMargin * eY + (me.columnTypeOrigin + (me.columnTypeSize - draw_TextWidth(s, 0, me.realFontSize)) * 0.5) * eX, s, me.realFontSize, theColor, theAlpha, 0);
+
+       // server playercount
        s = strcat(ftos(gethostcachenumber(SLIST_FIELD_NUMHUMANS, i)), "/", ftos(gethostcachenumber(SLIST_FIELD_MAXPLAYERS, i)));
        draw_Text(me.realUpperMargin * eY + (me.columnPlayersOrigin + (me.columnPlayersSize - draw_TextWidth(s, 0, me.realFontSize)) * 0.5) * eX, s, me.realFontSize, theColor, theAlpha, 0);
 }
 
 float XonoticServerList_keyDown(entity me, float scan, float ascii, float shift)
 {
-       float i;
        vector org, sz;
 
        org = boxToGlobal(eY * (me.selectedItem * me.itemHeight - me.scrollPos), me.origin, me.size);
@@ -835,10 +1262,9 @@ float XonoticServerList_keyDown(entity me, float scan, float ascii, float shift)
        }
        else if(scan == K_INS || scan == K_MOUSE3 || scan == K_KP_INS)
        {
-               i = me.selectedItem;
-               if(i < me.nItems)
+               if(me.nItems != 0)
                {
-                       ToggleFavorite(me.selectedServer);
+                       me.toggleFavorite(me, me.selectedServer);
                        me.ipAddressBoxFocused = -1;
                        return 1;
                }
@@ -851,4 +1277,47 @@ float XonoticServerList_keyDown(entity me, float scan, float ascii, float shift)
        else
                return me.controlledTextbox.keyDown(me.controlledTextbox, scan, ascii, shift);
 }
+
+float XonoticServerList_getTotalHeight(entity me) {
+       float num_normal_rows = me.nItems;
+       float num_headers = category_draw_count;
+       return me.itemHeight * (num_normal_rows + me.categoriesHeight * num_headers);
+}
+float XonoticServerList_getItemAtPos(entity me, float pos) {
+       pos = pos / me.itemHeight;
+       float i;
+       for (i = category_draw_count - 1; i >= 0; --i) {
+               float itemidx = category_item[i];
+               float itempos = i * me.categoriesHeight + category_item[i];
+               if (pos >= itempos + me.categoriesHeight + 1)
+                       return itemidx + 1 + floor(pos - (itempos + me.categoriesHeight + 1));
+               if (pos >= itempos)
+                       return itemidx;
+       }
+       // No category matches? Note that category 0 is... 0. Therefore no headings exist at all.
+       return floor(pos);
+}
+float XonoticServerList_getItemStart(entity me, float item) {
+       float i;
+       for (i = category_draw_count - 1; i >= 0; --i) {
+               float itemidx = category_item[i];
+               float itempos = i * me.categoriesHeight + category_item[i];
+               if (item >= itemidx + 1)
+                       return (itempos + me.categoriesHeight + 1 + item - (itemidx + 1)) * me.itemHeight;
+               if (item >= itemidx)
+                       return itempos * me.itemHeight;
+       }
+       // No category matches? Note that category 0 is... 0. Therefore no headings exist at all.
+       return item * me.itemHeight;
+}
+float XonoticServerList_getItemHeight(entity me, float item) {
+       float i;
+       for (i = 0; i < category_draw_count; ++i) {
+               // Matches exactly the headings with increased height.
+               if (item == category_item[i])
+                       return me.itemHeight * (me.categoriesHeight + 1);
+       }
+       return me.itemHeight;
+}
+
 #endif
index fdb07870a411f12b8b068eaf1601437d966ba7ab..3e094e7d7e7ce91d28c380b8fe94ada5874b56f9 100644 (file)
@@ -155,13 +155,13 @@ void XonoticSkinList_resizeNotify(entity me, vector relOrigin, vector relSize, v
 void XonoticSkinList_drawListBoxItem(entity me, float i, vector absSize, float isSelected)
 {
        string s;
-       
+
        if(isSelected)
                draw_Fill('0 0 0', '1 1 0', SKINCOLOR_LISTBOX_SELECTED, SKINALPHA_LISTBOX_SELECTED);
-               
+
        s = me.skinParameter(me, i, SKINPARM_PREVIEW);
        draw_Picture(me.columnPreviewOrigin * eX, s, me.columnPreviewSize * eX + eY, '1 1 1', 1);
-       
+
        s = me.skinParameter(me, i, SKINPARM_NAME);
        s = sprintf(_("%s: %s"), s, me.skinParameter(me, i, SKINPARM_TITLE));
        s = draw_TextShortenToWidth(s, me.columnNameSize, 0, me.realFontSize);
index e833bb1251379f49535c3edd1599a662b8fc6721..0577207ca284bb56baf90ef001c83abb6c48975a 100644 (file)
@@ -58,14 +58,14 @@ void XonoticSlider_setValue(entity me, float val)
 }
 void XonoticSlider_loadCvars(entity me)
 {
-       if not(me.cvarName)
+       if (!me.cvarName)
                return;
 
        me.setValue( me, cvar(me.cvarName) );
 }
 void XonoticSlider_saveCvars(entity me)
 {
-       if not(me.cvarName)
+       if (!me.cvarName)
                return;
 
        cvar_set(me.cvarName, ftos(me.value));
index 0ea9d161f1e166f358ea53867522eab681ed136e..3f1c4682720c86828c800b961a3debd91a1ae15c 100644 (file)
@@ -48,7 +48,7 @@ void XonoticDecibelsSlider_loadCvars(entity me)
 {
        float v;
 
-       if not(me.cvarName)
+       if (!me.cvarName)
                return;
 
        v = cvar(me.cvarName);
@@ -61,7 +61,7 @@ void XonoticDecibelsSlider_loadCvars(entity me)
 }
 void XonoticDecibelsSlider_saveCvars(entity me)
 {
-       if not(me.cvarName)
+       if (!me.cvarName)
                return;
 
        if(me.value > me.valueMax - 0.5 * me.valueStep)
@@ -96,7 +96,7 @@ void _TEST_XonoticDecibelsSlider()
                float v = fromDecibelOfSquare(db, -40);
                float dbv = toDecibelOfSquare(v, -40);
                float d = dbv - db;
-               print(sprintf("%f -> %f -> %f (diff: %f)\n", db, v, dbv, d));
+               printf("%f -> %f -> %f (diff: %f)\n", db, v, dbv, d);
                TEST_Check(fabs(d) > 0.02);
        }
        TEST_OK();
index 01fd64e1022eb5d74524db0184dd80830d605f55..66f48f9e58ef2bf26f838e6736889632fe659d1a 100644 (file)
@@ -1,31 +1,41 @@
 #ifdef INTERFACE
 CLASS(XonoticResolutionSlider) EXTENDS(XonoticTextSlider)
        METHOD(XonoticResolutionSlider, configureXonoticResolutionSlider, void(entity))
+       METHOD(XonoticResolutionSlider, loadResolutions, void(entity, float))
        METHOD(XonoticResolutionSlider, addResolution, void(entity, float, float, float))
        METHOD(XonoticResolutionSlider, loadCvars, void(entity))
        METHOD(XonoticResolutionSlider, saveCvars, void(entity))
+       METHOD(XonoticResolutionSlider, draw, void(entity))
+       ATTRIB(XonoticResolutionSlider, vid_fullscreen, float, -1)
 ENDCLASS(XonoticResolutionSlider)
 entity makeXonoticResolutionSlider();
-void initConwidths();
-void updateConwidths();
+float updateConwidths(float width, float height, float pixelheight);
 #endif
 
 #ifdef IMPLEMENTATION
-void initConwidths()
-{
-       cvar_set("_menu_vid_width", cvar_string("vid_width"));
-       cvar_set("_menu_vid_height", cvar_string("vid_height"));
-       cvar_set("_menu_vid_pixelheight", cvar_string("vid_pixelheight"));
-}
-void updateConwidths()
+
+/* private static */ float XonoticResolutionSlider_DataHasChanged;
+
+// Updates cvars (to be called by menu.qc at startup or on detected res change)
+float updateConwidths(float width, float height, float pixelheight)
 {
        vector r, c;
        float minfactor, maxfactor;
        float sz, f;
-       r_x = cvar("_menu_vid_width");
-       r_y = cvar("_menu_vid_height");
-       r_z = cvar("_menu_vid_pixelheight");
+
        sz = cvar("menu_vid_scale");
+       if (sz < -1)
+               return 0;  // No recalculation.
+
+       // Save off current settings.
+       cvar_set("_menu_vid_width", ftos(width));
+       cvar_set("_menu_vid_height", ftos(height));
+       cvar_set("_menu_vid_pixelheight", ftos(pixelheight));
+       cvar_set("_menu_vid_desktopfullscreen", cvar_string("vid_desktopfullscreen"));
+
+       r_x = width;
+       r_y = height;
+       r_z = pixelheight;
 
        // calculate the base resolution
        c_z = 0;
@@ -54,11 +64,19 @@ void updateConwidths()
                f = 1;
        c = c * f; // fteqcc fail
 
-       cvar_set("vid_width", ftos(rint(r_x)));
-       cvar_set("vid_height", ftos(rint(r_y)));
-       cvar_set("vid_pixelheight", ftos(rint(r_z)));
-       cvar_set("vid_conwidth", ftos(rint(c_x)));
-       cvar_set("vid_conheight", ftos(rint(c_y)));
+       c_x = rint(c_x);
+       c_y = rint(c_y);
+
+       // Please reload resolutions list and such stuff.
+       XonoticResolutionSlider_DataHasChanged = TRUE;
+
+       if (c_x != cvar("vid_conwidth") || c_y != cvar("vid_conheight"))
+       {
+               cvar_set("vid_conwidth", ftos(c_x));
+               cvar_set("vid_conheight", ftos(c_y));
+               return 1;
+       }
+       return 0;
 }
 entity makeXonoticResolutionSlider()
 {
@@ -69,47 +87,100 @@ entity makeXonoticResolutionSlider()
 }
 void XonoticResolutionSlider_addResolution(entity me, float w, float h, float pixelheight)
 {
-       me.addValue(me, strzone(sprintf(_("%dx%d"), w, h)), strzone(strcat(ftos(w), " ", ftos(h), " ", ftos(pixelheight))));
-       // FIXME (in case you ever want to dynamically instantiate this): THIS IS NEVER FREED
+       float i;
+       for (i = 0; i < me.nValues; ++i)
+       {
+               tokenize_console(me.valueToIdentifier(me, i));
+               if (w > stof(argv(0))) continue;
+               if (w < stof(argv(0))) break;
+               if (h > stof(argv(1))) continue;
+               if (h < stof(argv(1))) break;
+               if (pixelheight > stof(argv(2)) + 0.01) continue;
+               if (pixelheight < stof(argv(2)) - 0.01) break;
+               return;  // already there
+       }
+       if (pixelheight != 1)
+       {
+               float aspect = w / (h * pixelheight);
+               float bestdenom = rint(aspect);
+               float bestnum = 1;
+               float denom;
+               for (denom = 2; denom < 10; ++denom) {
+                       float num = rint(aspect * denom);
+                       if (fabs(num / denom - aspect) < fabs(bestnum / bestdenom - aspect))
+                       {
+                               bestnum = num;
+                               bestdenom = denom;
+                       }
+               }
+               me.insertValue(me, i, strzone(sprintf(_("%dx%d (%d:%d)"), w, h, bestnum, bestdenom)), strzone(strcat(ftos(w), " ", ftos(h), " ", ftos(pixelheight))));
+       }
+       else
+               me.insertValue(me, i, strzone(sprintf(_("%dx%d"), w, h)), strzone(strcat(ftos(w), " ", ftos(h), " ", ftos(pixelheight))));
 }
 float autocvar_menu_vid_allowdualscreenresolution;
 void XonoticResolutionSlider_configureXonoticResolutionSlider(entity me)
+{
+       me.configureXonoticTextSlider(me, "_menu_vid_width");
+       me.loadResolutions(me, cvar("vid_fullscreen"));
+}
+void XonoticResolutionSlider_loadResolutions(entity me, float fullscreen)
 {
        float i;
-       vector r0, r;
+       vector r;
 
-       me.configureXonoticTextSlider(me, "_menu_vid_width");
+       // HACK: text slider assumes the strings are constants, so clearValues
+       // will not unzone them
+       for(i = 0; i < me.nValues; ++i)
+       {
+               strunzone(me.valueToIdentifier(me, i));
+               strunzone(me.valueToText(me, i));
+       }
+       // NOW we can safely clear.
+       me.clearValues(me);
 
-       r0 = '0 0 0';
-       for(i = 0;; ++i)
+       if (fullscreen)
        {
-               r = getresolution(i);
-               if(r_x == 0 && r_y == 0)
-                       break;
-               if(r_z == 0)
-                       r_z = 1; // compat
-               if(r == r0)
-                       continue;
-               r0 = r;
-               if(r_x < 640 || r_y < 480)
-                       continue;
-               if(r_x > 2 * r_y) // likely dualscreen resolution, skip this one
-                       if(autocvar_menu_vid_allowdualscreenresolution <= 0)
+               for(i = 0;; ++i)
+               {
+                       r = getresolution(i);
+                       if(r_x == 0 && r_y == 0)
+                               break;
+                       if(r_x < 640 || r_y < 480)
                                continue;
-                       
-               me.addResolution(me, r_x, r_y, r_z);
+                       if(r_x > 2 * r_y) // likely dualscreen resolution, skip this one
+                               if(autocvar_menu_vid_allowdualscreenresolution <= 0)
+                                       continue;
+                       me.addResolution(me, r_x, r_y, r_z);
+               }
+               r = getresolution(-1);
+               if(r_x != 0 || r_y != 0)
+                       me.addResolution(me, r_x, r_y, r_z);
+               dprint("Added system resolutions.\n");
        }
 
        if(me.nValues == 0)
        {
-               me.addResolution(me, 640, 480, 1);
-               me.addResolution(me, 800, 600, 1);
-               me.addResolution(me, 1024, 768, 1);
-               me.addResolution(me, 1280, 960, 1);
-               me.addResolution(me, 1280, 1024, 1);
-               me.addResolution(me, 1650, 1080, 1);
-               me.addResolution(me, 1920, 1080, 1);
+               me.addResolution(me, 640, 480, 1); // pc res
+#if 0
+               me.addResolution(me, 720, 480, 1.125); // DVD NTSC 4:3
+               me.addResolution(me, 720, 576, 0.9375); // DVD PAL 4:3
+               me.addResolution(me, 720, 480, 0.84375); // DVD NTSC 16:9
+               me.addResolution(me, 720, 576, 0.703125); // DVD PAL 16:9
+#endif
+               me.addResolution(me, 800, 480, 1); // 480p at 1:1 pixel aspect
+               me.addResolution(me, 800, 600, 1); // pc res
+               me.addResolution(me, 1024, 600, 1); // notebook res
+               me.addResolution(me, 1024, 768, 1); // pc res
+               me.addResolution(me, 1280, 720, 1); // 720p
+               me.addResolution(me, 1280, 960, 1); // pc res
+               me.addResolution(me, 1280, 1024, 1); // pc res
+               me.addResolution(me, 1920, 1080, 1); // 1080p
+               dprint("Added default resolutions.\n");
        }
+       dprint("Total number of resolutions detected: ", ftos(me.nValues), "\n");
+
+       me.vid_fullscreen = fullscreen;
 
        me.configureXonoticTextSliderValues(me);
 }
@@ -125,6 +196,25 @@ void XonoticResolutionSlider_saveCvars(entity me)
                cvar_set("_menu_vid_width", argv(0));
                cvar_set("_menu_vid_height", argv(1));
                cvar_set("_menu_vid_pixelheight", argv(2));
+               vector r = getresolution(-1);
+               if (stof(argv(0)) == r_x && stof(argv(1)) == r_y && fabs(stof(argv(2)) - r_z) < 0.01)
+                       cvar_set("_menu_vid_desktopfullscreen", "1");
+               else
+                       cvar_set("_menu_vid_desktopfullscreen", "0");
+       }
+}
+void XonoticResolutionSlider_draw(entity me)
+{
+       if (cvar("vid_fullscreen") != me.vid_fullscreen)
+       {
+               me.loadResolutions(me, cvar("vid_fullscreen"));
+               XonoticResolutionSlider_DataHasChanged = TRUE;
+       }
+       if (XonoticResolutionSlider_DataHasChanged)
+       {
+               XonoticResolutionSlider_DataHasChanged = FALSE;
+               me.loadCvars(me);
        }
+       SUPER(XonoticResolutionSlider).draw(me);
 }
 #endif
index 3fee2bf558374b36d525f528ec3bad114c64c5c4..a4448f7debe19757ae7cc70ce21c3b61c0df3a8d 100644 (file)
@@ -52,7 +52,7 @@ void XonoticTextSlider_setValue(entity me, float val)
 }
 void XonoticTextSlider_loadCvars(entity me)
 {
-       if not(me.cvarName)
+       if (!me.cvarName)
                return;
 
        var float n = tokenize_console(me.cvarName);
@@ -74,7 +74,7 @@ void XonoticTextSlider_loadCvars(entity me)
 }
 void XonoticTextSlider_saveCvars(entity me)
 {
-       if not(me.cvarName)
+       if (!me.cvarName)
                return;
 
        if(me.value >= 0 && me.value < me.nValues)
index e5259cc8e73f4b646727e36d8e7926c24cc8fb2b..d98368074a717cfc5b5d627fae9d7372aaecf7b6 100644 (file)
@@ -87,7 +87,12 @@ void saveCvarsMulti(entity me)
 
        n = tokenize_console(me.cvarNames_Multi);
        for(i = 0; i < n; ++i)
-               cvar_set(argv(i), s);
+       {
+               if(substring(argv(i), 0, 1) == "!")
+                       cvar_set(substring(argv(i), 1, strlen(argv(i))), ((s == "0") ? "1" : "0"));
+               else
+                       cvar_set(argv(i), s);
+       }
 }
 void makeMulti(entity e, string otherCvars)
 {
@@ -280,10 +285,15 @@ void URI_Get_Callback(float id, float status, string data)
        }
        else
        {
-               print(sprintf("Received HTTP request data for an invalid id %d.\n", id));
+               printf("Received HTTP request data for an invalid id %d.\n", id);
        }
 }
 
+void DisableServerBackwardsCompatibility()
+{
+       cvar_set("gameversion_min", ftos(100 * floor(cvar("gameversion") / 100)));
+}
+
 void UpdateNotification_URI_Get_Callback(float id, float status, string data)
 {
        float n;
@@ -295,7 +305,7 @@ void UpdateNotification_URI_Get_Callback(float id, float status, string data)
        }
        if(status != 0)
        {
-               print(sprintf(_("error receiving update notification: status is %d\n"), status));
+               printf(_("error receiving update notification: status is %d\n"), status);
                return;
        }
        if(substring(data, 0, 1) == "<")
@@ -313,41 +323,109 @@ void UpdateNotification_URI_Get_Callback(float id, float status, string data)
                n = 0;
        else
                n = tokenizebyseparator(data, "\n");
+
+       float i;
+       string s; 
        
-       if(n >= 1)
+       string un_version = "";
+       string un_download = "";
+       string un_url = "";
+       string un_bannedservers = "";
+       string un_emergency_pk3s = "";
+       string un_promoted = "";
+       string un_recommended = "";
+       string un_compatexpire = "";
+       
+       for(i = 0; i < n; ++i)
        {
-               _Nex_ExtResponseSystem_UpdateTo = argv(0);
-
-               if(vercmp(cvar_string("g_xonoticversion"), _Nex_ExtResponseSystem_UpdateTo) >= 0)
-               {
-                       _Nex_ExtResponseSystem_UpdateTo = ""; // no update needed
-               }
-               else
+               s = substring(argv(i), 2, -1);
+               if(s == "") { continue; } // ignore empty lines
+               
+               switch(substring(argv(i), 0, 1))
                {
-                       // update needed
-                       if(n >= 2)
-                               print(sprintf(_("Update can be downloaded at:\n%s\n"), argv(1)));
-                       if(n >= 3)
-                               _Nex_ExtResponseSystem_UpdateToURL = strzone(argv(2));
+                       #define APPEND_TO_STRING(list,sep,add) ((list) = (((list) != "") ? strcat(list, sep, add) : (add)))
+                       case "V":
+                       {
+                               un_version = s;
+                               break;
+                       }
+                       case "C":
+                       {
+                               un_compatexpire = s;
+                               break;
+                       }
+                       case "D":
+                       {
+                               un_download = s;
+                               break;
+                       }
+                       case "U":
+                       {
+                               un_url = s;
+                               break;
+                       }
+                       case "B":
+                       {
+                               APPEND_TO_STRING(un_bannedservers, " ", s);
+                               break;
+                       }
+                       case "E":
+                       {
+                               if(cvar("menu_updatecheck_getpacks"))
+                                       APPEND_TO_STRING(un_emergency_pk3s, " ", s);
+                               break;
+                       }
+                       case "P":
+                       {
+                               APPEND_TO_STRING(un_promoted, " ", s);
+                               break;
+                       }
+                       case "R":
+                       {
+                               APPEND_TO_STRING(un_recommended, " ", s);
+                               break;
+                       }
                }
+       }
 
-               _Nex_ExtResponseSystem_UpdateTo = strzone(_Nex_ExtResponseSystem_UpdateTo);
-
-               if(n >= 4)
+       if(un_version != "")
+       {
+               if(vercmp(cvar_string("g_xonoticversion"), un_version) < 0)
                {
-                       _Nex_ExtResponseSystem_BannedServers = strzone(argv(3));
-                       _Nex_ExtResponseSystem_BannedServersNeedsRefresh = 1;
+                       // update needed
+                       _Nex_ExtResponseSystem_UpdateTo = strzone(un_version);
+                       if(un_download) { printf(_("Update can be downloaded at:\n%s\n"), un_download); }
+                       if(un_url) { _Nex_ExtResponseSystem_UpdateToURL = strzone(un_url); }
+                       DisableServerBackwardsCompatibility();
                }
-
-               if(n >= 5)
+               else if(cvar_string("g_xonoticversion") == un_version)
                {
-                       if(cvar("menu_updatecheck_getpacks"))
+                       if(un_compatexpire != "")
                        {
-                               _Nex_ExtResponseSystem_Packs = strzone(argv(4));
-                               _Nex_ExtResponseSystem_PacksStep = 1;
+                               string curdate = strftime(FALSE, "%Y%m%d%H%M%S");
+                               if (strcmp(curdate, un_compatexpire) >= 0)
+                                       DisableServerBackwardsCompatibility();
                        }
                }
        }
+       
+       if(un_emergency_pk3s != "")
+       {
+               _Nex_ExtResponseSystem_Packs = strzone(un_emergency_pk3s);
+               _Nex_ExtResponseSystem_PacksStep = 1;
+       }
+
+       if(un_promoted != "")
+       {
+               _Nex_ExtResponseSystem_PromotedServers = strzone(un_promoted);
+               _Nex_ExtResponseSystem_PromotedServersNeedsRefresh = 1;
+       }
+
+       if(un_recommended != "")
+       {
+               _Nex_ExtResponseSystem_RecommendedServers = strzone(un_recommended);
+               _Nex_ExtResponseSystem_RecommendedServersNeedsRefresh = 1;
+       }
 }
 
 // END OF URI SYSTEM ////////////////////////////////////////////////////////
@@ -366,36 +444,8 @@ void updateCheck()
 
                        // for privacy, munge the start count a little
                        startcnt = floor((floor(startcnt / 10) + random()) * 10);
-                       uri = sprintf("http://www.xonotic.org/dl/checkupdate.txt?version=%s&cnt=%d", uri_escape(cvar_string("g_xonoticversion")), startcnt);
-
-#ifdef CVAR_POPCON
-                       float cvar_handle, popcon_handle;
-                       float n, i, j;
-                       string k, s;
-                       cvar_handle = buf_create();
-                       buf_cvarlist(cvar_handle, "", "");
-                       n = buf_getsize(cvar_handle);
-                       popcon_handle = buf_create();
-                       for(i= 0, j = 0; i < n; ++i)
-                       {
-                               k = bufstr_get(cvar_handle, i);
-                               if(!(cvar_type(k) & CVAR_TYPEFLAG_SAVED))
-                                       continue;
-                               s = sprintf("%s=%d", uri_escape(k), cvar_string(k) != cvar_defstring(k));
-                               bufstr_set(popcon_handle, j, s);
-                               ++j;
-                       }
-                       buf_del(cvar_handle);
-                       uri_postbuf(
-                               uri, URI_GET_UPDATENOTIFICATION,
-                               "application/x-www-form-urlencoded",
-                               "&",
-                               popcon_handle
-                       );
-                       buf_del(popcon_handle);
-#else
+                       uri = sprintf("http://update.xonotic.org/checkupdate.txt?version=%s&cnt=%d", uri_escape(cvar_string("g_xonoticversion")), startcnt);
                        uri_get(uri, URI_GET_UPDATENOTIFICATION);
-#endif
                }
        }
 
@@ -449,7 +499,7 @@ float preMenuInit()
                boxA = '0.05 0.5 0' + 0.25 * sz_y * eY;
                boxB = '0.95 0.5 0' + 1.25 * sz_y * eY;
                draw_Fill(boxA, boxB - boxA, '1 1 1', 1);
-               
+
                boxA += sz * 0.1;
                boxB -= sz * 0.1;
                draw_Fill(boxA, boxB - boxA, '0.1 0.1 0.1', 1);
@@ -507,7 +557,7 @@ void preMenuDraw()
                draw_CenterText(mid - 1 * line, l1, fs, '1 0 0', 1, 0);
                draw_CenterText(mid - 0 * line, l2, fs, '0 0 1', 1, 0);
        }
-       if not(campaign_name_previous)
+       if (!campaign_name_previous)
                campaign_name_previous = strzone(strcat(campaign_name, "x")); // force unequal
        if(campaign_name == campaign_name_previous)
        {
@@ -595,7 +645,6 @@ float updateCompression()
 
 // note: include only those that should be in the menu!
 #define GAMETYPES \
-       GAMETYPE(MAPINFO_TYPE_ARENA) \
        GAMETYPE(MAPINFO_TYPE_ASSAULT) \
        GAMETYPE(MAPINFO_TYPE_CTF) \
        GAMETYPE(MAPINFO_TYPE_CA) \
@@ -616,13 +665,13 @@ float GameType_GetID(float cnt)
 {
        float i;
        i = 0;
-       
+
        #define GAMETYPE(id) if(i++ == cnt) return id;
        GAMETYPES
        #undef GAMETYPE
 
        unused_float = i;
-       
+
        return 0;
 }
 
@@ -630,31 +679,31 @@ float GameType_GetCount()
 {
        float i;
        i = 0;
-       
+
        #define GAMETYPE(id) ++i;
        GAMETYPES
        #undef GAMETYPE
-       
+
        return i;
 }
 
 string GameType_GetName(float cnt)
 {
        float i = GameType_GetID(cnt);
-       
+
        if(i)
                return MapInfo_Type_ToText(i);
-       
+
        return "";
 }
 
 string GameType_GetIcon(float cnt)
 {
        float i = GameType_GetID(cnt);
-       
+
        if(i)
                return strcat("gametype_", MapInfo_Type_ToString(i));
-       
+
        return "";
 }
 
@@ -662,7 +711,7 @@ string GameType_GetIcon(float cnt)
 {
        float i = GameType_GetID(cnt);
        string s = _MapInfo_GetDefaultEx(i);
-       
+
        if(i)
        {
                if(strstrofs(s, "teams", 0) >= 0)
@@ -670,7 +719,7 @@ string GameType_GetIcon(float cnt)
                else
                        return _("free for all");
        }
-       
+
        return _("tuba for all");
 }*/
 
index be13ee289b25607149d3e803621b1234eae0b6cc..3371dd8114637a90a4735b7204c7e59d87047e08 100644 (file)
@@ -45,3 +45,7 @@ void dialog_hudpanel_common_notoggle(entity me, string panelname);
 
 string _Nex_ExtResponseSystem_BannedServers;
 float _Nex_ExtResponseSystem_BannedServersNeedsRefresh;
+string _Nex_ExtResponseSystem_PromotedServers;
+float _Nex_ExtResponseSystem_PromotedServersNeedsRefresh;
+string _Nex_ExtResponseSystem_RecommendedServers;
+float _Nex_ExtResponseSystem_RecommendedServersNeedsRefresh;
index 6790befe122be32a5159e5732fa2615efc5d6daa..ad4071060f99ec53c97359ed2f04ebd6bb23556e 100644 (file)
@@ -68,13 +68,13 @@ float XonoticWeaponsList_mouseDrag(entity me, vector pos)
        float f, i;
        i = me.selectedItem;
        f = SUPER(XonoticWeaponsList).mouseDrag(me, pos);
-       
+
        if(me.pressed != 1) // don't change priority if the person is just scrolling
        {
                if(me.selectedItem != i)
                        cvar_set("cl_weaponpriority", swapInPriorityList(cvar_string("cl_weaponpriority"), me.selectedItem, i));
        }
-       
+
        return f;
 }
 string XonoticWeaponsList_toString(entity me)
index d9f1add2c5e26b4a7c5772d77647cea1e722fa31..6ec1756ed643851ff2ed574822960e63a2e798f3 100644 (file)
@@ -10,9 +10,9 @@ void spawnfunc_worldspawn()
        dprint("TESTCASE: START\n");
        r = test();
        if(r == 1)
-               error("TESTCASE: PASS"); 
+               error("TESTCASE: PASS");
        else if(r == 0)
-               error("TESTCASE: FAIL"); 
+               error("TESTCASE: FAIL");
        else
-               error("TESTCASE: INVALID"); 
+               error("TESTCASE: INVALID");
 }
index dfc923b2bb7d573e5139dcf26390065b8f334170..565c1cb15d9eb9df4a53d7f825985d29ae90ec19 100644 (file)
@@ -5,7 +5,7 @@
 
 float accuracy_byte(float n, float d)
 {
-       //print(sprintf("accuracy: %d / %d\n", n, d));
+       //printf("accuracy: %d / %d\n", n, d);
        if(n <= 0)
                return 0;
        if(n > d)
@@ -25,7 +25,7 @@ float accuracy_send(entity to, float sf)
        a = a.accuracy;
 
        if(to != a.owner)
-               if not(self.owner.cvar_cl_accuracy_data_share && autocvar_sv_accuracy_data_share)
+               if (!(self.owner.cvar_cl_accuracy_data_share && autocvar_sv_accuracy_data_share))
                        sf = 0;
        // note: zero sendflags can never be sent... so we can use that to say that we send no accuracy!
        WriteInt24_t(MSG_ENTITY, sf);
index 5e0a91a3e897241196d0179e4467d7ca3f169ed0..c53452ab78b352836a0614970259a54be27be59d 100644 (file)
@@ -11,7 +11,7 @@ void antilag_record(entity e, float t)
 {
     if (e.vehicle && e.vehicle.vehicle_flags == VHF_PLAYERSLOT)
         return;
-        
+
     if(e.vehicle)
         antilag_record(e.vehicle, t);
 
index 711d9143600eff8956d57084845fc784bd61b6a0..ada0d4bda9b5eb23619f9d45841839ebafb7fe5b 100644 (file)
@@ -70,14 +70,7 @@ float autocvar_ekg;
 #define autocvar_fraglimit_override cvar("fraglimit_override")
 float autocvar_g_allow_oldnexbeam;
 float autocvar_g_antilag;
-float autocvar_g_antilag_bullets;
 float autocvar_g_antilag_nudge;
-float autocvar_g_arena_maxspawned;
-float autocvar_g_arena_point_leadlimit;
-float autocvar_g_arena_point_limit;
-float autocvar_g_arena_roundbased;
-float autocvar_g_arena_round_timelimit;
-float autocvar_g_arena_warmup;
 float autocvar_g_balance_armor_blockpercent;
 float autocvar_g_balance_armor_limit;
 float autocvar_g_balance_armor_regen;
@@ -90,30 +83,26 @@ float autocvar_g_balance_armor_start;
 float autocvar_g_balance_rifle_bursttime;
 float autocvar_g_balance_rifle_primary_ammo;
 float autocvar_g_balance_rifle_primary_animtime;
-float autocvar_g_balance_rifle_primary_bulletconstant;
 float autocvar_g_balance_rifle_primary_bullethail;
 float autocvar_g_balance_rifle_primary_burstcost;
 float autocvar_g_balance_rifle_primary_damage;
 float autocvar_g_balance_rifle_primary_force;
-float autocvar_g_balance_rifle_primary_lifetime;
 float autocvar_g_balance_rifle_primary_refire;
 float autocvar_g_balance_rifle_primary_shots;
-float autocvar_g_balance_rifle_primary_speed;
+float autocvar_g_balance_rifle_primary_solidpenetration;
 float autocvar_g_balance_rifle_primary_spread;
 float autocvar_g_balance_rifle_primary_tracer;
 float autocvar_g_balance_rifle_secondary;
 float autocvar_g_balance_rifle_secondary_ammo;
 float autocvar_g_balance_rifle_secondary_animtime;
-float autocvar_g_balance_rifle_secondary_bulletconstant;
 float autocvar_g_balance_rifle_secondary_bullethail;
 float autocvar_g_balance_rifle_secondary_burstcost;
 float autocvar_g_balance_rifle_secondary_damage;
 float autocvar_g_balance_rifle_secondary_force;
-float autocvar_g_balance_rifle_secondary_lifetime;
 float autocvar_g_balance_rifle_secondary_reload;
 float autocvar_g_balance_rifle_secondary_refire;
 float autocvar_g_balance_rifle_secondary_shots;
-float autocvar_g_balance_rifle_secondary_speed;
+float autocvar_g_balance_rifle_secondary_solidpenetration;
 float autocvar_g_balance_rifle_secondary_spread;
 float autocvar_g_balance_rifle_secondary_tracer;
 float autocvar_g_balance_rifle_reload_ammo;
@@ -628,12 +617,11 @@ float autocvar_g_balance_seeker_reload_time;
 float autocvar_g_balance_selfdamagepercent;
 float autocvar_g_balance_shotgun_primary_ammo;
 float autocvar_g_balance_shotgun_primary_animtime;
-float autocvar_g_balance_shotgun_primary_bulletconstant;
 float autocvar_g_balance_shotgun_primary_bullets;
 float autocvar_g_balance_shotgun_primary_damage;
 float autocvar_g_balance_shotgun_primary_force;
 float autocvar_g_balance_shotgun_primary_refire;
-float autocvar_g_balance_shotgun_primary_speed;
+float autocvar_g_balance_shotgun_primary_solidpenetration;
 float autocvar_g_balance_shotgun_primary_spread;
 float autocvar_g_balance_shotgun_secondary;
 float autocvar_g_balance_shotgun_secondary_animtime;
@@ -661,7 +649,6 @@ float autocvar_g_balance_tuba_edgedamage;
 float autocvar_g_balance_tuba_force;
 float autocvar_g_balance_tuba_radius;
 float autocvar_g_balance_tuba_refire;
-float autocvar_g_balance_uzi_bulletconstant;
 float autocvar_g_balance_uzi_burst;
 float autocvar_g_balance_uzi_burst_ammo;
 float autocvar_g_balance_uzi_burst_animtime;
@@ -675,7 +662,7 @@ float autocvar_g_balance_uzi_first_force;
 float autocvar_g_balance_uzi_first_refire;
 float autocvar_g_balance_uzi_first_spread;
 float autocvar_g_balance_uzi_mode;
-float autocvar_g_balance_uzi_speed;
+float autocvar_g_balance_uzi_solidpenetration;
 float autocvar_g_balance_uzi_spread_add;
 float autocvar_g_balance_uzi_spread_max;
 float autocvar_g_balance_uzi_spread_min;
@@ -688,7 +675,6 @@ float autocvar_g_balance_uzi_reload_ammo;
 float autocvar_g_balance_uzi_reload_time;
 float autocvar_g_ballistics_density_corpse;
 float autocvar_g_ballistics_density_player;
-float autocvar_g_ballistics_materialconstant;
 float autocvar_g_ballistics_mindistance;
 float autocvar_g_ban_default_bantime;
 float autocvar_g_ban_default_masksize;
@@ -808,6 +794,7 @@ float autocvar_g_domination_point_leadlimit;
 float autocvar_g_domination_point_rate;
 float autocvar_g_domination_teams_override;
 float autocvar_g_forced_respawn;
+float autocvar_g_respawn_delay_max;
 string autocvar_g_forced_team_blue;
 string autocvar_g_forced_team_otherwise;
 string autocvar_g_forced_team_pink;
@@ -1204,7 +1191,6 @@ float autocvar_timelimit_overtimes;
 float autocvar_timelimit_suddendeath;
 #define autocvar_utf8_enable cvar("utf8_enable")
 float autocvar_waypoint_benchmark;
-float autocvar_welcome_message_time;
 float autocvar_sv_gameplayfix_gravityunaffectedbyticrate;
 float autocvar_g_trueaim_minrange;
 float autocvar_g_debug_defaultsounds;
index 578306c4eb89c49c6e69707f07c6750273965601..3467e2b395d61c7c1f28357fe0460b0a97011394 100644 (file)
@@ -137,11 +137,11 @@ float bot_shouldattack(entity e)
                return FALSE;
        if(e.flags & FL_NOTARGET)
                return FALSE;
-               
+
        checkentity = e;
        if(MUTATOR_CALLHOOK(BotShouldAttack))
                return FALSE;
-               
+
        return TRUE;
 }
 
index 45c7af3b7e6449c865914ebf605c2306b2dc6252..b93d87ad29f229736686045c546f26d0af1101a6 100644 (file)
@@ -363,7 +363,7 @@ void bot_relinkplayerlist()
 
 void bot_clientdisconnect()
 {
-       if not(IS_BOT_CLIENT(self))
+       if (!IS_BOT_CLIENT(self))
                return;
        bot_clearqueue(self);
        if(self.cleanname)
@@ -386,7 +386,7 @@ void bot_clientdisconnect()
 
 void bot_clientconnect()
 {
-       if not(IS_BOT_CLIENT(self))
+       if (!IS_BOT_CLIENT(self))
                return;
        self.bot_preferredcolors = self.clientcolors;
        self.bot_nextthink = time - random();
@@ -551,7 +551,7 @@ float bot_fixcount()
 
        FOR_EACH_REALCLIENT(head)
        {
-               if(IS_PLAYER(head) || g_lms || g_arena || head.caplayer == 1)
+               if(IS_PLAYER(head) || g_lms || head.caplayer == 1)
                        ++activerealplayers;
                ++realplayers;
        }
index 7e23903ed27548a2c3df90d821b84fd5cfbdfb82..a0e6bfffd42926004503c8e9f63b8e9eaaa07836 100644 (file)
@@ -20,7 +20,7 @@ void havocbot_ai()
                }
                else
                {
-                       if not(self.jumppadcount)
+                       if (!self.jumppadcount)
                                self.havocbot_role();
                }
 
@@ -146,7 +146,7 @@ void havocbot_ai()
        havocbot_movetogoal();
 
        // if the bot is not attacking, consider reloading weapons
-       if not(self.aistatus & AI_STATUS_ATTACKING)
+       if (!(self.aistatus & AI_STATUS_ATTACKING))
        {
                float i;
                entity e;
@@ -316,7 +316,7 @@ void havocbot_bunnyhop(vector dir)
 
                                        if(self.aistatus & AI_STATUS_ROAMING)
                                        if(self.goalcurrent.classname=="waypoint")
-                                       if not(self.goalcurrent.wpflags & WAYPOINTFLAG_PERSONAL)
+                                       if (!(self.goalcurrent.wpflags & WAYPOINTFLAG_PERSONAL))
                                        if(fabs(gco_z - self.origin_z) < self.maxs_z - self.mins_z)
                                        if(self.goalstack01!=world)
                                        {
@@ -422,7 +422,7 @@ void havocbot_movetogoal()
                }
 
                // Take off
-               if not(self.aistatus & AI_STATUS_JETPACK_FLYING)
+               if (!(self.aistatus & AI_STATUS_JETPACK_FLYING))
                {
                        // Brake almost completely so it can get a good direction
                        if(vlen(self.velocity)>10)
@@ -546,7 +546,7 @@ void havocbot_movetogoal()
 
        // If there is a trigger_hurt right below try to use the jetpack or make a rocketjump
        if(skill>6)
-       if not(self.flags & FL_ONGROUND)
+       if (!(self.flags & FL_ONGROUND))
        {
                tracebox(self.origin, self.mins, self.maxs, self.origin + '0 0 -65536', MOVE_NOMONSTERS, self);
                if(tracebox_hits_trigger_hurt(self.origin, self.mins, self.maxs, trace_endpos ))
index ab5372833323de4c6be95bb7dbb3ca26b2143986..dc942a38212fc4bbb0d47f77a3508df42798e517 100644 (file)
@@ -156,7 +156,7 @@ void havocbot_goalrating_ons_controlpoints_attack(float ratingscale)
        cp = world;
        for (; cp1; cp1 = cp1.chain)
        {
-               if not(cp1.wpconsidered)
+               if (!cp1.wpconsidered)
                        continue;
 
                if(cp1.wpcost<bestvalue)
@@ -167,7 +167,7 @@ void havocbot_goalrating_ons_controlpoints_attack(float ratingscale)
                }
        }
 
-       if not(cp)
+       if (!cp)
                return;
 
 //     dprint(self.netname, " chose cp ranked ", ftos(bestvalue), "\n");
@@ -220,7 +220,7 @@ void havocbot_goalrating_ons_controlpoints_attack(float ratingscale)
                found = FALSE;
 
                // Look for auto generated waypoint
-               if not(bot_waypoints_for_items)
+               if (!bot_waypoints_for_items)
                for (wp = findradius(cp.origin,100); wp; wp = wp.chain)
                {
                        if(wp.classname=="waypoint")
@@ -231,7 +231,7 @@ void havocbot_goalrating_ons_controlpoints_attack(float ratingscale)
                }
 
                // Nothing found, rate the controlpoint itself
-               if not(found)
+               if (!found)
                        navigation_routerating(cp, ratingscale, 10000);
        }
 }
index 9160c1133ab4ba9e50bcb3972dea7492918d85fd..691ce3e0a929ab44e3b0138c1a91a2fa760b82b0 100644 (file)
@@ -117,7 +117,7 @@ float tracewalk(entity e, vector start, vector m1, vector m2, vector end, float
                                                        break;
                                }
 
-                               if not (pointcontents(org + '0 0 1') == CONTENT_EMPTY)
+                               if (!(pointcontents(org + '0 0 1') == CONTENT_EMPTY))
                                {
                                        if(autocvar_bot_debug_tracewalk)
                                                debugnodestatus(org, DEBUG_NODE_FAIL);
@@ -196,7 +196,7 @@ float tracewalk(entity e, vector start, vector m1, vector m2, vector end, float
                        {
                                float c;
                                c = pointcontents(org + '0 0 1');
-                               if not(c == CONTENT_WATER || c == CONTENT_LAVA || c == CONTENT_SLIME)
+                               if (!(c == CONTENT_WATER || c == CONTENT_LAVA || c == CONTENT_SLIME))
                                        swimming = FALSE;
                                else
                                        continue;
@@ -733,7 +733,7 @@ void navigation_routerating(entity e, float f, float rangebias)
                        t = zdistance / autocvar_g_jetpack_maxspeed_up;
                        t += xydistance / autocvar_g_jetpack_maxspeed_side;
                        fuel = t * autocvar_g_jetpack_fuel * 0.8;
-                       
+
                        bot_debug(strcat("jetpack ai: required fuel ", ftos(fuel), " self.ammo_fuel ", ftos(self.ammo_fuel), "\n"));
 
                        // enough fuel ?
@@ -779,7 +779,7 @@ void navigation_routerating(entity e, float f, float rangebias)
 
                if(e.flags & FL_ITEM)
                {
-                       if not(e.flags & FL_WEAPON)
+                       if (!(e.flags & FL_WEAPON))
                        if(e.nearestwaypoint)
                                search = FALSE;
                }
@@ -997,10 +997,10 @@ void navigation_goalrating_end()
        bot_debug(strcat("best goal ", self.goalcurrent.classname , "\n"));
 
        // If the bot got stuck then try to reach the farthest waypoint
-       if not (self.navigation_hasgoals)
+       if (!self.navigation_hasgoals)
        if (autocvar_bot_wander_enable)
        {
-               if not(self.aistatus & AI_STATUS_STUCK)
+               if (!(self.aistatus & AI_STATUS_STUCK))
                {
                        bot_debug(strcat(self.netname, " cannot walk to any goal\n"));
                        self.aistatus |= AI_STATUS_STUCK;
@@ -1052,10 +1052,10 @@ void navigation_unstuck()
 {
        float search_radius = 1000;
 
-       if not(autocvar_bot_wander_enable)
+       if (!autocvar_bot_wander_enable)
                return;
 
-       if not(bot_waypoint_queue_owner)
+       if (!bot_waypoint_queue_owner)
        {
                bot_debug(strcat(self.netname, " sutck, taking over the waypoints queue\n"));
                bot_waypoint_queue_owner = self;
@@ -1081,7 +1081,7 @@ void navigation_unstuck()
                }
                bot_waypoint_queue_goal = bot_waypoint_queue_goal.bot_waypoint_queue_nextgoal;
 
-               if not(bot_waypoint_queue_goal)
+               if (!bot_waypoint_queue_goal)
                {
                        if (bot_waypoint_queue_bestgoal)
                        {
@@ -1147,7 +1147,7 @@ void debugresetnodes()
 
 void debugnode(vector node)
 {
-       if not(IS_PLAYER(self))
+       if (!IS_PLAYER(self))
                return;
 
        if(debuglastnode=='0 0 0')
index 24048854bc5643383a87f008d242ea4b77f13eef..f984f29b6b4facf819418946c15c6bfd8152d639 100644 (file)
@@ -1265,7 +1265,7 @@ float bot_execute_commands_once()
        ispressingkey = !!bot_presskeys();
 
        // Handle conditions
-       if not(bot_cmd.bot_cmd_type==BOT_CMD_FI||bot_cmd.bot_cmd_type==BOT_CMD_ELSE)
+       if (!(bot_cmd.bot_cmd_type==BOT_CMD_FI||bot_cmd.bot_cmd_type==BOT_CMD_ELSE))
        if(self.bot_cmd_condition_status & CMD_CONDITION_TRUE && self.bot_cmd_condition_status & CMD_CONDITION_FALSE_BLOCK)
        {
                bot_command_executed(TRUE);
index 8e9ae6b911e745cfb58bf6acb7132792f3d898eb..78bf0f264693a819949f357a94a9e16eb5a3d6c3 100644 (file)
@@ -6,7 +6,7 @@ entity waypoint_spawn(vector m1, vector m2, float f)
        entity w;
        w = find(world, classname, "waypoint");
 
-       if not(f & WAYPOINTFLAG_PERSONAL)
+       if (!(f & WAYPOINTFLAG_PERSONAL))
        while (w)
        {
                // if a matching spawnfunc_waypoint already exists, don't add a duplicate
@@ -683,11 +683,11 @@ float waypoint_loadall()
                {
                        m1 = stov(s);
                        s = fgets(file);
-                       if not(s)
+                       if (!s)
                                break;
                        m2 = stov(s);
                        s = fgets(file);
-                       if not(s)
+                       if (!s)
                                break;
                        fl = stof(s);
                        waypoint_spawn(m1, m2, fl);
index 9beb6e1f04c04a7df695f849e276b67b1bde3c3f..b6a39ee6744686ae5465f06a47ce05724cf8e3fc 100644 (file)
@@ -21,7 +21,7 @@ float CampaignBailout(string s)
        return 1;
 }
 
-string cvar_campaignwrapper_list; // string of format ; var value; var value; var value; 
+string cvar_campaignwrapper_list; // string of format ; var value; var value; var value;
 string cvar_string_campaignwrapper(string theCvar)
 {
        float p, q;
index f04fc8472288e11ae3b9c6e3da1a0c47e4ed6e82..c4b3fe67dd4ef3b8c68ff38b67c679de60115229 100644 (file)
@@ -50,7 +50,7 @@ float CheatsAllowed(float i, float argc, float fr) // the cheat gets passed as a
                return 0;
        if(gamestart_sv_cheats < 2 && !IS_PLAYER(self))
                return 0;
-       
+
        // sv_clones
        if(i == CHIMPULSE_CLONE_MOVING || i == CHIMPULSE_CLONE_STANDING)
                if(self.lip < sv_clones)
@@ -59,20 +59,20 @@ float CheatsAllowed(float i, float argc, float fr) // the cheat gets passed as a
        // haha
        if(self.maycheat)
                return 1;
-       
+
        // sv_cheats
        if(gamestart_sv_cheats && autocvar_sv_cheats)
                return 1;
 
        // if we get here, player is not allowed to cheat. Log it.
        if(i)
-               bprint(sprintf("Player %s^7 tried to use cheat 'impulse %d'\n", self.netname, i));
+               bprintf("Player %s^7 tried to use cheat 'impulse %d'\n", self.netname, i);
        else if(argc)
-               bprint(sprintf("Player %s^7 tried to use cheat '%s'\n", self.netname, argv(0)));
+               bprintf("Player %s^7 tried to use cheat '%s'\n", self.netname, argv(0));
        else if(fr)
-               bprint(sprintf("Player %s^7 tried to use cheat frame %d\n", self.netname, fr));
+               bprintf("Player %s^7 tried to use cheat frame %d\n", self.netname, fr);
        else
-               bprint(sprintf("Player %s^7 tried to use an unknown cheat\n", self.netname));
+               bprintf("Player %s^7 tried to use an unknown cheat\n", self.netname);
 
        return 0;
 }
@@ -190,7 +190,7 @@ float CheatImpulse(float i)
                                        self.oldvelocity = self.velocity = self.personal.velocity;
                                        self.angles = self.personal.v_angle;
                                        self.fixangle = TRUE;
-                                       
+
                                        MUTATOR_CALLHOOK(AbortSpeedrun);
                                }
 
@@ -718,7 +718,7 @@ float CheatCommand(float argc)
        END_CHEAT_FUNCTION();
 }
 
-float Drag(entity e, float grab, float ischeat);
+float Drag(float force_allow_pick, float ischeat);
 void Drag_Begin(entity dragger, entity draggee, vector touchpoint);
 void Drag_Finish(entity dragger);
 float Drag_IsDraggable(entity draggee);
@@ -748,40 +748,11 @@ float CheatFrame()
                        {
                                // use cheat dragging if cheats are enabled
                                crosshair_trace_plusvisibletriggers(self);
-                               Drag(trace_ent, TRUE, TRUE);
+                               Drag(TRUE, TRUE);
                        }
                        else
                        {
-                               // drag is TRUE if the object can be picked up. While an object is being carried, the Drag() function
-                               // must execute for it either way, otherwise it would cause bugs if it went out of the player's trace.
-                               // This also makes sure that an object can only pe picked up if in range, but does not get dropped if
-                               // it goes out of range while slinging it around.
-
-                               float drag;
-                               crosshair_trace_plusvisibletriggers(self);
-                               drag = FALSE;
-                               if(vlen(self.origin - trace_ent.origin) <= autocvar_g_grab_range)
-                               {
-                                       switch(trace_ent.grab)
-                                       {
-                                               case 0: // can't grab
-                                                       break;
-                                               case 1: // owner can grab
-                                                       if(trace_ent.owner == self || trace_ent.realowner == self)
-                                                               drag = TRUE;
-                                                       break;
-                                               case 2: // owner and team mates can grab
-                                                       if(SAME_TEAM(trace_ent.owner, self) || SAME_TEAM(trace_ent.realowner, self) || trace_ent.team == self.team)
-                                                               drag = TRUE;
-                                                       break;
-                                               case 3: // anyone can grab
-                                                       drag = TRUE;
-                                                       break;
-                                               default:
-                                                       break;
-                                       }
-                               }
-                               Drag(trace_ent, drag, FALSE); // execute dragging
+                               Drag(FALSE, FALSE); // execute dragging
                        }
                        break;
        }
@@ -795,7 +766,7 @@ float CheatFrame()
 
 // ENTITY DRAGGING
 
-float Drag(entity e, float pick, float ischeat)
+float Drag(float force_allow_pick, float ischeat)
 {
        BEGIN_CHEAT_FUNCTION();
 
@@ -840,9 +811,42 @@ float Drag(entity e, float pick, float ischeat)
                        else
                        {
                                if(Drag_CanDrag(self))
-                                       if(self.BUTTON_DRAG && pick)
+                                       if(self.BUTTON_DRAG)
                                        {
-                                               if(e)
+                                               crosshair_trace_plusvisibletriggers(self);
+                                               entity e = trace_ent;
+                                               float pick = force_allow_pick;
+                                               if (e && !pick)
+                                               {
+                                                       // pick is TRUE if the object can be picked up. While an object is being carried, the Drag() function
+                                                       // must execute for it either way, otherwise it would cause bugs if it went out of the player's trace.
+                                                       // This also makes sure that an object can only pe picked up if in range, but does not get dropped if
+                                                       // it goes out of range while slinging it around.
+
+                                                       if(vlen(self.origin - e.origin) <= autocvar_g_grab_range)
+                                                       {
+                                                               switch(e.grab)
+                                                               {
+                                                                       case 0: // can't grab
+                                                                               break;
+                                                                       case 1: // owner can grab
+                                                                               if(e.owner == self || e.realowner == self)
+                                                                                       pick = TRUE;
+                                                                               break;
+                                                                       case 2: // owner and team mates can grab
+                                                                               if(SAME_TEAM(e.owner, self) || SAME_TEAM(e.realowner, self) || e.team == self.team)
+                                                                                       pick = TRUE;
+                                                                               break;
+                                                                       case 3: // anyone can grab
+                                                                               pick = TRUE;
+                                                                               break;
+                                                                       default:
+                                                                               break;
+                                                               }
+                                                       }
+                                               }
+                                               // Find e and pick
+                                               if(e && pick)
                                                        if(Drag_IsDraggable(e))
                                                        {
                                                                if(ischeat)
index fab6f400adc1fb31616936618e07e72fc11ce4c1..93ee2a6a7edd2b99dd1911bd355f850bd251ec84 100644 (file)
@@ -167,7 +167,7 @@ void PutObserverInServer (void)
        MUTATOR_CALLHOOK(MakePlayerObserver);
 
        Portal_ClearAll(self);
-       
+
        if(self.alivetime)
        {
                if(!warmup_stage)
@@ -176,11 +176,11 @@ void PutObserverInServer (void)
        }
 
        if(self.vehicle)
-               vehicles_exit(VHEF_RELESE);         
+               vehicles_exit(VHEF_RELESE);
 
        WaypointSprite_PlayerDead();
 
-       if not(g_ca)  // don't reset teams when moving a ca player to the spectators
+       if (!g_ca)  // don't reset teams when moving a ca player to the spectators
                self.team = -1;  // move this as it is needed to log the player spectating in eventlog
 
        if(self.killcount != -666)
@@ -198,7 +198,7 @@ void PutObserverInServer (void)
        accuracy_resend(self);
 
        self.spectatortime = time;
-       
+
        self.classname = "observer";
        self.iscreature = FALSE;
        self.teleportable = TELEPORT_SIMPLE;
@@ -297,7 +297,13 @@ void FixPlayermodel()
 
                n = tokenize_console(defaultmodel);
                if(n > 0)
+               {
                        defaultmodel = argv(floor(n * self.model_randomizer));
+                       // However, do NOT randomize if the player-selected model is in the list.
+                       for (i = 0; i < n; ++i)
+                               if ((argv(i) == self.playermodel && defaultskin == stof(self.playerskin)) || argv(i) == strcat(self.playermodel, ":", self.playerskin))
+                                       defaultmodel = argv(i);
+               }
 
                i = strstrofs(defaultmodel, ":", 0);
                if(i >= 0)
@@ -436,7 +442,7 @@ void PutClientInServer (void)
                        self.ammo_fuel = warmup_start_ammo_fuel;
                        self.health = warmup_start_health;
                        self.armorvalue = warmup_start_armorvalue;
-                       self.weapons = warmup_start_weapons;
+                       self.weapons = WARMUP_START_WEAPONS;
                }
                else
                {
@@ -555,7 +561,7 @@ void PutClientInServer (void)
 
                //stuffcmd(self, "chase_active 0");
                //stuffcmd(self, "set viewsize $tmpviewsize \n");
-               
+
                target_voicescript_clear(self);
 
                // reset fields the weapons may use
@@ -763,7 +769,7 @@ void ClientKill_Now()
            if(!self.killindicator_teamchange)
            {
             self.vehicle_health = -1;
-            Damage(self, self, self, 1 , DEATH_KILL, self.origin, '0 0 0');            
+            Damage(self, self, self, 1 , DEATH_KILL, self.origin, '0 0 0');
            }
        }
 
@@ -931,7 +937,7 @@ void ClientKill (void)
        if(gameover) return;
        if(self.player_blocked) return;
        if(self.freezetag_frozen) return;
-       
+
        ClientKill_TeamChange(0);
 }
 
@@ -981,7 +987,7 @@ float PlayerInIDList(entity p, string idlist)
        string s;
 
        // NOTE: we do NOT check crypto_keyfp here, an unsigned ID is fine too for this
-       if not(p.crypto_idfp)
+       if (!p.crypto_idfp)
                return 0;
 
        // this function allows abbreviated player IDs too!
@@ -1246,7 +1252,7 @@ void ClientDisconnect (void)
        if(self.vehicle)
            vehicles_exit(VHEF_RELESE);
 
-       if not(IS_CLIENT(self))
+       if (!IS_CLIENT(self))
        {
                print("Warning: ClientDisconnect without ClientConnect\n");
                return;
@@ -1274,7 +1280,7 @@ void ClientDisconnect (void)
 
        if(autocvar_sv_eventlog)
                GameLogEcho(strcat(":part:", ftos(self.playerid)));
-               
+
        Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_QUIT_DISCONNECT, self.netname);
 
        MUTATOR_CALLHOOK(ClientDisconnect);
@@ -1427,7 +1433,7 @@ void player_powerups (void)
        Fire_ApplyDamage(self);
        Fire_ApplyEffect(self);
 
-       if not(g_minstagib)
+       if (!g_minstagib)
        {
                if (self.items & IT_STRENGTH)
                {
@@ -1513,7 +1519,7 @@ void player_powerups (void)
                        self.superweapons_finished = 0;
                }
        }
-       
+
        if(autocvar_g_nodepthtestplayers)
                self.effects = self.effects | EF_NODEPTHTEST;
 
@@ -1610,7 +1616,7 @@ void player_regen (void)
                        self.event_damage(self, self, 1, DEATH_ROT, self.origin, '0 0 0');
        }
 
-       if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
+       if (!(self.items & IT_UNLIMITED_WEAPON_AMMO))
                self.ammo_fuel = CalcRotRegen(self.ammo_fuel, minf, autocvar_g_balance_fuel_regen, autocvar_g_balance_fuel_regenlinear, regen_mod * frametime * (time > self.pauseregen_finished) * ((self.items & IT_FUEL_REGEN) != 0), maxf, autocvar_g_balance_fuel_rot, autocvar_g_balance_fuel_rotlinear, rot_mod * frametime * (time > self.pauserotfuel_finished), limitf);
 }
 
@@ -1727,7 +1733,7 @@ void SpectateCopy(entity spectatee) {
        setorigin(self, spectatee.origin);
        setsize(self, spectatee.mins, spectatee.maxs);
        SetZoomState(spectatee.zoomstate);
-    
+
     anticheat_spectatecopy(spectatee);
        self.hud = spectatee.hud;
        if(spectatee.vehicle)
@@ -1743,27 +1749,27 @@ void SpectateCopy(entity spectatee) {
         self.vehicle_reload2 = spectatee.vehicle_reload2;
 
         msg_entity = self;
-        
+
         WriteByte (MSG_ONE, SVC_SETVIEWANGLES);
             WriteAngle(MSG_ONE,  spectatee.v_angle_x);
             WriteAngle(MSG_ONE,  spectatee.v_angle_y);
             WriteAngle(MSG_ONE,  spectatee.v_angle_z);
 
         //WriteByte (MSG_ONE, SVC_SETVIEW);
-        //    WriteEntity(MSG_ONE, self);            
+        //    WriteEntity(MSG_ONE, self);
         //makevectors(spectatee.v_angle);
-        //setorigin(self, spectatee.origin - v_forward * 400 + v_up * 300);*/    
+        //setorigin(self, spectatee.origin - v_forward * 400 + v_up * 300);*/
     }
 }
 
 float SpectateUpdate() {
        if(!self.enemy)
-           return 0;           
+           return 0;
 
        if (self == self.enemy)
                return 0;
 
-       if not(IS_PLAYER(self.enemy))
+       if (!IS_PLAYER(self.enemy))
                return 0;
 
        SpectateCopy(self.enemy);
@@ -1817,13 +1823,13 @@ entity CA_SpectateNext(entity start) {
        if (start.team == self.team) {
                return start;
        }
-       
+
        other = start;
        // continue from current player
        while(other && other.team != self.team) {
                other = find(other, classname, "player");
        }
-       
+
        if (!other) {
                // restart from begining
                other = find(other, classname, "player");
@@ -1831,7 +1837,7 @@ entity CA_SpectateNext(entity start) {
                        other = find(other, classname, "player");
                }
        }
-       
+
        return other;
 }
 
@@ -1858,7 +1864,7 @@ float SpectatePrev()
 {
        // NOTE: chain order is from the highest to the lower entnum (unlike find)
        other = findchain(classname, "player");
-       if not(other) // no player
+       if (!other) // no player
                return FALSE;
 
        entity first = other;
@@ -1872,7 +1878,7 @@ float SpectatePrev()
                do { other = other.chain; }
                while(other && other.team != self.team);
 
-               if not(other)
+               if (!other)
                {
                        other = first;
                        while(other.team != self.team)
@@ -2042,7 +2048,7 @@ void PrintWelcomeMessage()
        {
                if(self.BUTTON_INFO) // BUTTON_INFO hides initial MOTD
                        self.motd_actived_time = -2; // wait until BUTTON_INFO gets released
-               else if(self.motd_actived_time == -2 || IS_PLAYER(self) || time - self.jointime > autocvar_welcome_message_time)
+               else if(self.motd_actived_time == -2 || IS_PLAYER(self))
                {
                        // instanctly hide MOTD
                        self.motd_actived_time = 0;
@@ -2132,7 +2138,7 @@ void SpectatorThink()
 
 void PlayerUseKey()
 {
-       if not(IS_PLAYER(self))
+       if (!IS_PLAYER(self))
                return;
 
        if(self.vehicle)
@@ -2140,7 +2146,7 @@ void PlayerUseKey()
         vehicles_exit(VHEF_NORMAL);
         return;
        }
-       
+
        // a use key was pressed; call handlers
        MUTATOR_CALLHOOK(PlayerUseKey);
 }
@@ -2302,10 +2308,10 @@ void PlayerPreThink (void)
                                if(frametime)
                                        player_anim();
                                button_pressed = (self.BUTTON_ATCK || self.BUTTON_JUMP || self.BUTTON_ATCK2 || self.BUTTON_HOOK || self.BUTTON_USE);
-                               
+
                                if (self.deadflag == DEAD_DYING)
                                {
-                                       if(self.respawn_flags & RESPAWN_FORCE)
+                                       if((self.respawn_flags & RESPAWN_FORCE) && !autocvar_g_respawn_delay_max)
                                                self.deadflag = DEAD_RESPAWNING;
                                        else if(!button_pressed)
                                                self.deadflag = DEAD_DEAD;
@@ -2314,6 +2320,8 @@ void PlayerPreThink (void)
                                {
                                        if(button_pressed)
                                                self.deadflag = DEAD_RESPAWNABLE;
+                                       else if(time >= self.respawn_time_max && (self.respawn_flags & RESPAWN_FORCE))
+                                               self.deadflag = DEAD_RESPAWNING;
                                }
                                else if (self.deadflag == DEAD_RESPAWNABLE)
                                {
@@ -2325,6 +2333,7 @@ void PlayerPreThink (void)
                                        if(time > self.respawn_time)
                                        {
                                                self.respawn_time = time + 1; // only retry once a second
+                                               self.respawn_time_max = self.respawn_time;
                                                respawn();
                                        }
                                }
@@ -2333,6 +2342,8 @@ void PlayerPreThink (void)
 
                                if(self.respawn_flags & RESPAWN_SILENT)
                                        self.stat_respawn_time = 0;
+                               else if((self.respawn_flags & RESPAWN_FORCE) && autocvar_g_respawn_delay_max)
+                                       self.stat_respawn_time = self.respawn_time_max;
                                else
                                        self.stat_respawn_time = self.respawn_time;
                        }
@@ -2407,10 +2418,10 @@ void PlayerPreThink (void)
 
                if(frametime)
                        player_anim();
-               
+
                // secret status
                secrets_setstatus();
-               
+
                self.dmg_team = max(0, self.dmg_team - autocvar_g_teamdamage_resetspeed * frametime);
 
                //self.angles_y=self.v_angle_y + 90;   // temp
@@ -2570,7 +2581,7 @@ void PlayerPostThink (void)
                        return;         // intermission or finale
                GetPressedKeys();
        }
-       
+
 #ifdef TETRIS
        }
 #endif
@@ -2594,13 +2605,13 @@ void PlayerPostThink (void)
        //pointparticles(particleeffectnum("machinegun_impact"), self.origin + self.view_ofs + '0 0 7', '0 0 0', 1);
 
        if(self.waypointsprite_attachedforcarrier)
-               WaypointSprite_UpdateHealth(self.waypointsprite_attachedforcarrier, '1 0 0' * healtharmor_maxdamage(self.health, self.armorvalue, autocvar_g_balance_armor_blockpercent));
+               WaypointSprite_UpdateHealth(self.waypointsprite_attachedforcarrier, '1 0 0' * healtharmor_maxdamage(self.health, self.armorvalue, autocvar_g_balance_armor_blockpercent, DEATH_WEAPON));
 
        playerdemo_write();
 
        if((g_cts || g_race) && self.cvar_cl_allow_uidtracking == 1 && self.cvar_cl_allow_uid2name == 1)
        {
-               if not(self.stored_netname)
+               if (!self.stored_netname)
                        self.stored_netname = strzone(uid2name(self.crypto_idfp));
                if(self.stored_netname != self.netname)
                {
@@ -2612,7 +2623,7 @@ void PlayerPostThink (void)
 
        /*
        if(g_race)
-               dprint(sprintf("%f %.6f\n", time, race_GetFractionalLapCount(self)));
+               dprintf("%f %.6f\n", time, race_GetFractionalLapCount(self));
        */
 
        CSQCMODEL_AUTOUPDATE();
index 2535444966e26b347541c7825410632fd6db362c..28d794c6dfcbbeb52a9a628feff097b44ec0a742 100644 (file)
@@ -52,13 +52,13 @@ void ImpulseCommands (void)
 
        if (timeout_status == TIMEOUT_ACTIVE) //don't allow any impulses while the game is paused
                return;
-    
+
     if(self.vehicle)
         if(self.vehicle.deadflag == DEAD_NO)
             if(self.vehicle.vehicles_impulse)
                 if(self.vehicle.vehicles_impulse(imp))
                     return;
-    
+
        if(CheatImpulse(imp))
        {
        }
@@ -168,7 +168,7 @@ void ImpulseCommands (void)
                        case 33:
                                if(self.deadflag == DEAD_NO && teamplay)
                                {
-                                       if not(MUTATOR_CALLHOOK(HelpMePing))
+                                       if (!MUTATOR_CALLHOOK(HelpMePing))
                                        {
                                                wp = WaypointSprite_Attach("helpme", TRUE, RADARICON_HELPME, '1 0.5 0');
                                                if(!wp)
@@ -256,7 +256,7 @@ void ImpulseCommands (void)
                                case 104:
                                        e = navigation_findnearestwaypoint(self, FALSE);
                                        if (e)
-                                       if not(e.wpflags & WAYPOINTFLAG_GENERATED)
+                                       if (!(e.wpflags & WAYPOINTFLAG_GENERATED))
                                        {
                                                bprint(strcat("Waypoint removed at ",vtos(e.origin),"\n"));
                                                waypoint_remove(e);
@@ -299,7 +299,7 @@ void ImpulseCommands (void)
                                                {
                                                        print("cannot reach me: ", etos(e), " ", vtos(e.origin), "\n");
                                                        e.colormod_x = 8;
-                                                       if not(e.effects & EF_NODEPTHTEST) // not already reported before
+                                                       if(!(e.effects & EF_NODEPTHTEST)) // not already reported before
                                                                ++m;
                                                        e.effects |= EF_NODEPTHTEST | EF_RED;
                                                        ++i;
index b5b6ad793570cd4a980d7e68048da9918c733e5d..edad6d63f845881338547c06bc59d2a4285a0ce7 100644 (file)
@@ -24,11 +24,11 @@ void PlayerJump (void)
        player_multijump = doublejump;
        if(MUTATOR_CALLHOOK(PlayerJump))
                return;
-               
+
        doublejump = player_multijump;
 
        float mjumpheight;
-       
+
        if (autocvar_sv_doublejump)
        {
                tracebox(self.origin + '0 0 0.01', self.mins, self.maxs, self.origin - '0 0 0.01', MOVE_NORMAL, self);
@@ -110,7 +110,7 @@ void PlayerJump (void)
        self.flags &= ~FL_JUMPRELEASED;
 
        animdecide_setaction(self, ANIMACTION_JUMP, TRUE);
-       
+
        if(autocvar_g_jump_grunt)
                PlayerSound(playersound_jump, CH_PLAYER, VOICETYPE_PLAYERSOUND);
 
@@ -517,9 +517,9 @@ void PM_Accelerate(vector wishdir, float wishspeed, float wishspeed0, float acce
        }
        else
                vel_perpend = vel_perpend * max(0, 1 - frametime * wishspeed * sidefric);
-       
+
        vel_xy = vel_straight * wishdir + vel_perpend;
-       
+
        if(speedclamp >= 0)
        {
                float vel_xy_preclamp;
@@ -633,7 +633,7 @@ void SV_PlayerPhysics()
        string c;
 
        WarpZone_PlayerPhysics_FixVAngle();
-       
+
        maxspd_mod = 1;
        if(self.ballcarried)
                if(g_nexball)
@@ -747,7 +747,7 @@ void SV_PlayerPhysics()
                        return;
                bot_think();
        }
-       
+
        self.items &= ~IT_USING_JETPACK;
 
        if(IS_PLAYER(self))
@@ -804,7 +804,7 @@ void SV_PlayerPhysics()
        if(self.conveyor.state)
                self.velocity -= self.conveyor.movedir;
 
-       if not(IS_PLAYER(self))
+       if (!IS_PLAYER(self))
        {
                maxspd_mod = autocvar_sv_spectator_speed_multiplier;
                if(!self.spectatorspeed)
@@ -860,12 +860,12 @@ void SV_PlayerPhysics()
 
                if(self.waterlevel < WATERLEVEL_SWIMMING)
                if(time >= self.ladder_time)
-               if not(self.hook)
+               if (!self.hook)
                {
                        self.nextstep = time + 0.3 + random() * 0.1;
                        trace_dphitq3surfaceflags = 0;
                        tracebox(self.origin, self.mins, self.maxs, self.origin - '0 0 1', MOVE_NOMONSTERS, self);
-                       if not(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOSTEPS)
+                       if (!(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOSTEPS))
                        {
                                if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_METALSTEPS)
                                        GlobalSound(globalsound_metalfall, CH_PLAYER, VOICETYPE_PLAYERSOUND);
@@ -1076,7 +1076,7 @@ void SV_PlayerPhysics()
                if (f > 0 && wishvel != '0 0 0')
                {
                        self.velocity = self.velocity + wishvel * f * frametime;
-                       if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
+                       if (!(self.items & IT_UNLIMITED_WEAPON_AMMO))
                                self.ammo_fuel -= autocvar_g_jetpack_fuel * frametime * fvel * f;
                        self.flags &= ~FL_ONGROUND;
                        self.items |= IT_USING_JETPACK;
index e5e0c1dda5516b22ce098311cdc239db3369899f..0229d3ed5734a9aebe9f77021c79e4d249d939bb 100644 (file)
@@ -155,6 +155,7 @@ void CopyBody(float keepvelocity)
        self.teleportable = oldself.teleportable;
        self.damagedbycontents = oldself.damagedbycontents;
        self.angles = oldself.angles;
+       self.v_angle = oldself.v_angle;
        self.avelocity = oldself.avelocity;
        self.classname = "body";
        self.damageforcescale = oldself.damageforcescale;
@@ -276,7 +277,7 @@ void PlayerCorpseDamage (entity inflictor, entity attacker, float damage, float
        // damage resistance (ignore most of the damage from a bullet or similar)
        damage = max(damage - 5, 1);
 
-       v = healtharmor_applydamage(self.armorvalue, autocvar_g_balance_armor_blockpercent, damage);
+       v = healtharmor_applydamage(self.armorvalue, autocvar_g_balance_armor_blockpercent, deathtype, damage);
        take = v_x;
        save = v_y;
 
@@ -353,7 +354,10 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, float deatht
                ear1 += v_right * -10;
                ear2 += v_right * +10;
                d = inflictor.origin - self.origin;
-               f = (d * v_right) / vlen(d); // this is cos of angle of d and v_right!
+               if (d)
+                       f = (d * v_right) / vlen(d); // this is cos of angle of d and v_right!
+               else
+                       f = 0;  // Assum ecenter.
                force = v_right * vlen(force);
                Violence_GibSplash_At(ear1, force * -1, 2, bound(0, damage, 25) / 2 * (0.5 - 0.5 * f), self, attacker);
                Violence_GibSplash_At(ear2, force,      2, bound(0, damage, 25) / 2 * (0.5 + 0.5 * f), self, attacker);
@@ -372,7 +376,7 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, float deatht
                Violence_GibSplash_At(hitloc, force, 2, bound(0, damage, 200) / 16, self, attacker);
 
 
-       v = healtharmor_applydamage(self.armorvalue, autocvar_g_balance_armor_blockpercent, damage);
+       v = healtharmor_applydamage(self.armorvalue, autocvar_g_balance_armor_blockpercent, deathtype, damage);
        take = v_x;
        save = v_y;
 
@@ -634,6 +638,10 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, float deatht
                        self.respawn_time = ceil((time + sdelay) / waves) * waves;
                else
                        self.respawn_time = time + sdelay;
+               if(autocvar_g_respawn_delay_max > sdelay)
+                       self.respawn_time_max = time + autocvar_g_respawn_delay_max;
+               else
+                       self.respawn_time_max = self.respawn_time;
                if((sdelay + waves >= 5.0) && (self.respawn_time - time > 1.75))
                        self.respawn_countdown = 10; // first number to count down from is 10
                else
@@ -694,7 +702,7 @@ float Say(entity source, float teamsay, entity privatesay, string msgin, float f
 
        msgin = formatmessage(msgin);
 
-       if not(IS_PLAYER(source))
+       if (!IS_PLAYER(source))
                colorstr = "^0"; // black for spectators
        else if(teamplay)
                colorstr = Team_ColorCode(source.team);
@@ -854,9 +862,9 @@ float Say(entity source, float teamsay, entity privatesay, string msgin, float f
        }
 
        if(!privatesay)
-       if not(IS_PLAYER(source))
+       if (!IS_PLAYER(source))
        {
-               if not(intermission_running)
+               if (!intermission_running)
                        if(teamsay || (autocvar_g_chat_nospectators == 1) || (autocvar_g_chat_nospectators == 2 && !(warmup_stage || gameover)))
                                teamsay = -1; // spectators
        }
@@ -900,7 +908,7 @@ float Say(entity source, float teamsay, entity privatesay, string msgin, float f
                {
                        sprint(source, sourcemsgstr);
                        sprint(privatesay, msgstr);
-                       if not(autocvar_g_chat_tellprivacy) { dedicated_print(msgstr); } // send to server console too if "tellprivacy" is disabled
+                       if (!autocvar_g_chat_tellprivacy) { dedicated_print(msgstr); } // send to server console too if "tellprivacy" is disabled
                        if(cmsgstr != "")
                                centerprint(privatesay, cmsgstr);
                }
@@ -922,7 +930,7 @@ float Say(entity source, float teamsay, entity privatesay, string msgin, float f
                {
                        sprint(source, sourcemsgstr);
                        dedicated_print(msgstr); // send to server console too
-                       FOR_EACH_REALCLIENT(head) if not(IS_PLAYER(head))
+                       FOR_EACH_REALCLIENT(head) if (!IS_PLAYER(head))
                                if(head != source)
                                        sprint(head, msgstr);
                }
@@ -1011,7 +1019,7 @@ void PrecachePlayerSounds(string f)
        }
        fclose(fh);
 
-       if not(allvoicesamples)
+       if (!allvoicesamples)
        {
 #define _VOICEMSG(m) allvoicesamples = strcat(allvoicesamples, " ", #m);
                ALLVOICEMSGS
index 2fc23307edee6e1f8187a02496f8758bcca2ac26..2885e6dc51b7412570bd14b06aea394a43eca1ab 100644 (file)
@@ -307,7 +307,7 @@ float W_IsWeaponThrowable(float w)
                return 0;
     if(w == 0)
         return 0;
-       
+
        wa = W_AmmoItemCode(w);
        if(start_weapons & WepSet_FromWeapon(w))
        {
@@ -345,8 +345,8 @@ void W_ThrowWeapon(vector velo, vector delta, float doreduce)
 
        W_SwitchWeapon_Force(self, w_getbestweapon(self));
        a = W_ThrowNewWeapon(self, w, doreduce, self.origin + delta, velo);
-       
-       if not(a) return;
+
+       if (!a) return;
        Send_Notification(NOTIF_ONE, self, MSG_MULTI, ITEM_WEAPON_DROP, a, w);
 }
 
@@ -421,7 +421,7 @@ void W_WeaponFrame()
                        // VorteX: add player model weapon select frame here
                        // setcustomframe(PlayerWeaponRaise);
                        weapon_thinkf(WFRAME_IDLE, cvar(sprintf("g_balance_%s_switchdelay_raise", newwep.netname)), w_ready);
-                       //print(sprintf("W_WeaponFrame(): cvar: %s, value: %f\n", sprintf("g_balance_%s_switchdelay_raise", newwep.netname), cvar(sprintf("g_balance_%s_switchdelay_raise", newwep.netname))));
+                       //printf("W_WeaponFrame(): cvar: %s, value: %f\n", sprintf("g_balance_%s_switchdelay_raise", newwep.netname), cvar(sprintf("g_balance_%s_switchdelay_raise", newwep.netname)));
                        weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, '0 0 0');
                }
                else if (self.weaponentity.state == WS_DROP)
@@ -435,7 +435,7 @@ void W_WeaponFrame()
                        self.switchingweapon = self.switchweapon;
 
                        entity oldwep = get_weaponinfo(self.weapon);
-                       
+
 #ifndef INDEPENDENT_ATTACK_FINISHED
                        if(ATTACK_FINISHED(self) <= time + self.weapon_frametime * 0.5)
                        {
@@ -444,7 +444,7 @@ void W_WeaponFrame()
                        self.weaponentity.state = WS_DROP;
                        // set up weapon switch think in the future, and start drop anim
                        weapon_thinkf(WFRAME_DONTCHANGE, cvar(sprintf("g_balance_%s_switchdelay_drop", oldwep.netname)), w_clear);
-                       //print(sprintf("W_WeaponFrame(): cvar: %s, value: %f\n", sprintf("g_balance_%s_switchdelay_drop", oldwep.netname), cvar(sprintf("g_balance_%s_switchdelay_drop", oldwep.netname))));
+                       //printf("W_WeaponFrame(): cvar: %s, value: %f\n", sprintf("g_balance_%s_switchdelay_drop", oldwep.netname), cvar(sprintf("g_balance_%s_switchdelay_drop", oldwep.netname)));
                        weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, PLAYER_WEAPONSELECTION_RANGE);
 #ifndef INDEPENDENT_ATTACK_FINISHED
                        }
index f530b54046e4653f100baa6c454352130078672a..f3d675f35e71a3000ef814d410c43930cb959b59 100644 (file)
@@ -93,7 +93,7 @@ void W_HitPlotAnalysis(entity player, vector screenforward, vector screenright,
                lag = ANTILAG_LATENCY(player);
                if(lag < 0.001)
                        lag = 0;
-               if not(IS_REAL_CLIENT(player))
+               if (!IS_REAL_CLIENT(player))
                        lag = 0; // only antilag for clients
 
                org = player.origin + player.view_ofs;
@@ -541,20 +541,20 @@ void CL_Weaponentity_Think()
        }
 
        self.angles = '0 0 0';
-       
+
        float f = (self.owner.weapon_nextthink - time);
        if (self.state == WS_RAISE && !intermission_running)
        {
                entity newwep = get_weaponinfo(self.owner.switchweapon);
                f = f * g_weaponratefactor / max(f, cvar(sprintf("g_balance_%s_switchdelay_raise", newwep.netname)));
-               //print(sprintf("CL_Weaponentity_Think(): cvar: %s, value: %f, nextthink: %f\n", sprintf("g_balance_%s_switchdelay_raise", newwep.netname), cvar(sprintf("g_balance_%s_switchdelay_raise", newwep.netname)), (self.owner.weapon_nextthink - time)));
+               //printf("CL_Weaponentity_Think(): cvar: %s, value: %f, nextthink: %f\n", sprintf("g_balance_%s_switchdelay_raise", newwep.netname), cvar(sprintf("g_balance_%s_switchdelay_raise", newwep.netname)), (self.owner.weapon_nextthink - time));
                self.angles_x = -90 * f * f;
        }
        else if (self.state == WS_DROP && !intermission_running)
        {
                entity oldwep = get_weaponinfo(self.owner.weapon);
                f = 1 - f * g_weaponratefactor / max(f, cvar(sprintf("g_balance_%s_switchdelay_drop", oldwep.netname)));
-               //print(sprintf("CL_Weaponentity_Think(): cvar: %s, value: %f, nextthink: %f\n", sprintf("g_balance_%s_switchdelay_drop", oldwep.netname), cvar(sprintf("g_balance_%s_switchdelay_drop", oldwep.netname)), (self.owner.weapon_nextthink - time)));
+               //printf("CL_Weaponentity_Think(): cvar: %s, value: %f, nextthink: %f\n", sprintf("g_balance_%s_switchdelay_drop", oldwep.netname), cvar(sprintf("g_balance_%s_switchdelay_drop", oldwep.netname)), (self.owner.weapon_nextthink - time));
                self.angles_x = -90 * f * f;
        }
        else if (self.state == WS_CLEAR)
@@ -667,7 +667,7 @@ float client_hasweapon(entity cl, float wpn, float andammo, float complain)
                complain = 0;
        if(complain)
                self.hasweapon_complain_spam = time + 0.2;
-               
+
        if(wpn == WEP_HOOK && !g_grappling_hook && autocvar_g_nades && !((cl.weapons | weaponsInMap) & WepSet_FromWeapon(wpn)))
                complain = 0;
 
@@ -733,7 +733,7 @@ float client_hasweapon(entity cl, float wpn, float andammo, float complain)
                                {
                                        if(e.classname == "droppedweapon")
                                                continue;
-                                       if not(e.flags & FL_ITEM)
+                                       if (!(e.flags & FL_ITEM))
                                                continue;
                                        WaypointSprite_Spawn(
                                                s,
@@ -816,7 +816,7 @@ void W_SwitchToOtherWeapon(entity pl)
 .float prevwarntime;
 float weapon_prepareattack_checkammo(float secondary)
 {
-       if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
+       if (!(self.items & IT_UNLIMITED_WEAPON_AMMO))
        if (!weapon_action(self.weapon, WR_CHECKAMMO1 + secondary))
        {
                // always keep the Mine Layer if we placed mines, so that we can detonate them
@@ -851,7 +851,7 @@ float weapon_prepareattack_checkammo(float secondary)
                {
                        W_SwitchToOtherWeapon(self);
                }
-               
+
                return FALSE;
        }
        return TRUE;
@@ -1129,7 +1129,7 @@ vector W_CalculateProjectileSpread(vector forward, float spread)
        if(spread <= 0)
                return forward;
        sstyle = autocvar_g_projectiles_spread_style;
-       
+
        if(sstyle == 0)
        {
                // this is the baseline for the spread value!
@@ -1342,7 +1342,7 @@ void W_Reload(float sent_ammo_min, float sent_ammo_amount, float sent_time, stri
        e = get_weaponinfo(self.weapon);
 
        // don't reload weapons that don't have the RELOADABLE flag
-       if not(e.spawnflags & WEP_FLAG_RELOADABLE)
+       if (!(e.spawnflags & WEP_FLAG_RELOADABLE))
        {
                dprint("Warning: Attempted to reload a weapon that does not have the WEP_FLAG_RELOADABLE flag. Fix your code!\n");
                return;
@@ -1358,7 +1358,7 @@ void W_Reload(float sent_ammo_min, float sent_ammo_amount, float sent_time, stri
 
        // no ammo, so nothing to load
        if(!self.(self.current_ammo) && self.reload_ammo_min)
-       if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
+       if (!(self.items & IT_UNLIMITED_WEAPON_AMMO))
        {
                if(IS_REAL_CLIENT(self) && self.reload_complain < time)
                {
@@ -1367,7 +1367,7 @@ void W_Reload(float sent_ammo_min, float sent_ammo_amount, float sent_time, stri
                        self.reload_complain = time + 1;
                }
                // switch away if the amount of ammo is not enough to keep using this weapon
-               if not(weapon_action(self.weapon, WR_CHECKAMMO1) + weapon_action(self.weapon, WR_CHECKAMMO2))
+               if (!(weapon_action(self.weapon, WR_CHECKAMMO1) + weapon_action(self.weapon, WR_CHECKAMMO2)))
                {
                        self.clip_load = -1; // reload later
                        W_SwitchToOtherWeapon(self);
index 1694bb661d0254dcd84e5d2e895de51244ea10b7..794854deddf1daa3b6e9b35b316f0d7fb1d3e443 100644 (file)
@@ -14,9 +14,9 @@ void BanCommand_ban(float request, float argc, string command)
                                string ip = argv(1);
                                float reason_arg, bantime;
                                string reason;
-                               
-                               reason_arg = 2; 
-                               
+
+                               reason_arg = 2;
+
                                GET_BAN_ARG(bantime, autocvar_g_ban_default_bantime);
                                GET_BAN_REASON(reason, "No reason provided");
 
@@ -24,7 +24,7 @@ void BanCommand_ban(float request, float argc, string command)
                                return;
                        }
                }
-                       
+
                default:
                        print("Incorrect parameters for ^2ban^7\n");
                case CMD_REQUEST_USAGE:
@@ -48,7 +48,7 @@ void BanCommand_banlist(float request)
                        Ban_View();
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -72,26 +72,26 @@ void BanCommand_kickban(float request, float argc, string command)
                                float accepted = VerifyClientEntity(client, TRUE, FALSE);
                                float reason_arg, bantime, masksize;
                                string reason;
-                               
-                               if(accepted > 0) 
+
+                               if(accepted > 0)
                                {
-                                       reason_arg = next_token; 
+                                       reason_arg = next_token;
 
                                        GET_BAN_ARG(bantime, autocvar_g_ban_default_bantime);
                                        GET_BAN_ARG(masksize, autocvar_g_ban_default_masksize);
                                        GET_BAN_REASON(reason, "No reason provided");
 
                                        Ban_KickBanClient(client, bantime, masksize, reason);
-                                       
+
                                        return;
                                }
                                else
                                {
-                                       print("kickban: ", GetClientErrorString(accepted, argv(1)), ".\n"); 
+                                       print("kickban: ", GetClientErrorString(accepted, argv(1)), ".\n");
                                }
                        }
                }
-                       
+
                default:
                        print("Incorrect parameters for ^2kickban^7\n");
                case CMD_REQUEST_USAGE:
@@ -117,19 +117,19 @@ void BanCommand_mute(float request, float argc, string command) // TODO: Add a s
                        {
                                entity client = GetFilteredEntity(argv(1));
                                float accepted = VerifyClientEntity(client, TRUE, FALSE);
-                               
-                               if(accepted > 0) 
+
+                               if(accepted > 0)
                                {
                                        client.muted = TRUE;
                                        return;
                                }
                                else
                                {
-                                       print("mute: ", GetClientErrorString(accepted, argv(1)), ".\n"); 
+                                       print("mute: ", GetClientErrorString(accepted, argv(1)), ".\n");
                                }
                        }
                }
-                       
+
                default:
                        print("Incorrect parameters for ^2mute^7\n");
                case CMD_REQUEST_USAGE:
@@ -147,16 +147,16 @@ void BanCommand_unban(float request, float argc)
        switch(request)
        {
                case CMD_REQUEST_COMMAND:
-               {       
+               {
                        if(argv(1))
                        {
                                float tmp_number = -1;
                                string tmp_string;
-                               
+
                                if(substring(argv(1), 0, 1) == "#")
                                {
                                        tmp_string = substring(argv(1), 1, -1);
-                                       
+
                                        if(tmp_string != "") // is it all one token? like #1
                                        {
                                                tmp_number = stof(tmp_string);
@@ -171,7 +171,7 @@ void BanCommand_unban(float request, float argc)
                                else // maybe it's ONLY a number?
                                {
                                        tmp_number = stof(argv(1));
-                                       
+
                                        if((tmp_number == 0) && (argv(1) != "0"))
                                                { tmp_number = -1; }
                                }
@@ -183,7 +183,7 @@ void BanCommand_unban(float request, float argc)
                                }
                        }
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -205,19 +205,19 @@ void BanCommand_unmute(float request, float argc)
                        {
                                entity client = GetFilteredEntity(argv(1));
                                float accepted = VerifyClientEntity(client, TRUE, FALSE);
-                               
-                               if(accepted > 0) 
+
+                               if(accepted > 0)
                                {
                                        client.muted = FALSE;
                                        return;
                                }
                                else
                                {
-                                       print("unmute: ", GetClientErrorString(accepted, argv(1)), ".\n"); 
+                                       print("unmute: ", GetClientErrorString(accepted, argv(1)), ".\n");
                                }
                        }
                }
-                       
+
                default:
                        print("Incorrect parameters for ^2mute^7\n");
                case CMD_REQUEST_USAGE:
@@ -238,10 +238,10 @@ void BanCommand_(float request)
        {
                case CMD_REQUEST_COMMAND:
                {
-                       
+
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -272,10 +272,10 @@ void BanCommand_macro_help()
 {
        #define BAN_COMMAND(name,function,description) \
                { if(strtolower(description) != "") { print("  ^2", name, "^7: ", description, "\n"); } }
-               
+
        BAN_COMMANDS(0, 0, "")
        #undef BAN_COMMAND
-       
+
        return;
 }
 
@@ -283,10 +283,10 @@ float BanCommand_macro_command(float argc, string command)
 {
        #define BAN_COMMAND(name,function,description) \
                { if(name == strtolower(argv(0))) { function; return TRUE; } }
-               
+
        BAN_COMMANDS(CMD_REQUEST_COMMAND, argc, command)
        #undef BAN_COMMAND
-       
+
        return FALSE;
 }
 
@@ -294,10 +294,10 @@ float BanCommand_macro_usage(float argc)
 {
        #define BAN_COMMAND(name,function,description) \
                { if(name == strtolower(argv(1))) { function; return TRUE; } }
-               
+
        BAN_COMMANDS(CMD_REQUEST_USAGE, argc, "")
        #undef BAN_COMMAND
-       
+
        return FALSE;
 }
 
@@ -305,26 +305,26 @@ void BanCommand_macro_write_aliases(float fh)
 {
        #define BAN_COMMAND(name,function,description) \
                { if(strtolower(description) != "") { CMD_Write_Alias("qc_cmd_sv", name, description); } }
-       
+
        BAN_COMMANDS(0, 0, "")
        #undef BAN_COMMAND
-       
+
        return;
 }
 
 float BanCommand(string command)
 {
        float argc = tokenize_console(command);
-       
+
        // Guide for working with argc arguments by example:
        // argc:   1    - 2      - 3     - 4
-       // argv:   0    - 1      - 2     - 3 
+       // argv:   0    - 1      - 2     - 3
        // cmd     vote - master - login - password
 
        if(BanCommand_macro_command(argc, command)) // continue as usual and scan for normal commands
        {
                return TRUE; // handled by one of the above GenericCommand_* functions
        }
-       
+
        return FALSE;
 }
index 4850049e5c9b351705ea28ea10cdc5fa7d7314f9..991248251f2d824c2916d7dcc2173bd027813ff1 100644 (file)
@@ -5,7 +5,7 @@
 
 float SV_ParseClientCommand_floodcheck()
 {
-       if not(timeout_status) // not while paused
+       if (!timeout_status) // not while paused
        {
                if(time <= (self.cmd_floodtime + autocvar_sv_clientcommand_antispam_time))
                {
@@ -39,13 +39,13 @@ void ClientCommand_autoswitch(float request, float argc)
                                return;
                        }
                }
-                       
+
                default:
                        sprint(self, "Incorrect parameters for ^2autoswitch^7\n");
                case CMD_REQUEST_USAGE:
                {
                        sprint(self, "\nUsage:^3 cmd autoswitch selection\n");
-                       sprint(self, "  Where 'selection' controls if autoswitch is on or off.\n"); 
+                       sprint(self, "  Where 'selection' controls if autoswitch is on or off.\n");
                        return;
                }
        }
@@ -57,11 +57,11 @@ void ClientCommand_checkfail(float request, string command) // internal command,
        {
                case CMD_REQUEST_COMMAND:
                {
-                       print(sprintf("CHECKFAIL: %s (%s) epically failed check %s\n", self.netname, self.netaddress, substring(command, argv_start_index(1), argv_end_index(-1) - argv_start_index(1))));
+                       printf("CHECKFAIL: %s (%s) epically failed check %s\n", self.netname, self.netaddress, substring(command, argv_start_index(1), argv_end_index(-1) - argv_start_index(1)));
                        self.checkfail = 1;
                        return; // never fall through to usage
                }
-                       
+
                default:
                        sprint(self, "Incorrect parameters for ^2checkfail^7\n");
                case CMD_REQUEST_USAGE:
@@ -84,27 +84,27 @@ void ClientCommand_clientversion(float request, float argc) // internal command,
                                if(IS_CLIENT(self))
                                {
                                        self.version = ((argv(1) == "$gameversion") ? 1 : stof(argv(1)));
-                                       
+
                                        if(self.version < autocvar_gameversion_min || self.version > autocvar_gameversion_max)
                                        {
                                                self.version_mismatch = 1;
                                                ClientKill_TeamChange(-2); // observe
-                                       } 
-                                       else if(autocvar_g_campaign || autocvar_g_balance_teams) 
+                                       }
+                                       else if(autocvar_g_campaign || autocvar_g_balance_teams)
                                        {
                                                //JoinBestTeam(self, FALSE, TRUE);
-                                       } 
-                                       else if(teamplay && !autocvar_sv_spectate && !(self.team_forced > 0)) 
+                                       }
+                                       else if(teamplay && !autocvar_sv_spectate && !(self.team_forced > 0))
                                        {
                                                self.classname = "observer"; // really?
                                                stuffcmd(self, "menu_showteamselect\n");
                                        }
                                }
-                               
+
                                return;
                        }
                }
-                       
+
                default:
                        sprint(self, "Incorrect parameters for ^2clientversion^7\n");
                case CMD_REQUEST_USAGE:
@@ -124,13 +124,13 @@ void ClientCommand_mv_getpicture(float request, float argc) // internal command,
                {
                        if(argv(1) != "")
                        {
-                               if(intermission_running)                                
+                               if(intermission_running)
                                        MapVote_SendPicture(stof(argv(1)));
 
                                return;
                        }
                }
-                       
+
                default:
                        sprint(self, "Incorrect parameters for ^2mv_getpicture^7\n");
                case CMD_REQUEST_USAGE:
@@ -142,7 +142,7 @@ void ClientCommand_mv_getpicture(float request, float argc) // internal command,
        }
 }
 
-void ClientCommand_join(float request) 
+void ClientCommand_join(float request)
 {
        switch(request)
        {
@@ -150,9 +150,9 @@ void ClientCommand_join(float request)
                {
                        if(IS_CLIENT(self))
                        {
-                               if(!IS_PLAYER(self) && !lockteams && !g_arena)
+                               if(!IS_PLAYER(self) && !lockteams)
                                {
-                                       if(nJoinAllowed(self)) 
+                                       if(nJoinAllowed(self))
                                        {
                                                if(autocvar_g_campaign) { campaign_bots_may_start = 1; }
 
@@ -162,7 +162,7 @@ void ClientCommand_join(float request)
                                                Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_JOIN_PLAY, self.netname);
                                                PutClientInServer();
                                        }
-                                       else 
+                                       else
                                        {
                                                //player may not join because of g_maxplayers is set
                                                Send_Notification(NOTIF_ONE_ONLY, self, MSG_CENTER, CENTER_JOIN_PREVENT);
@@ -171,7 +171,7 @@ void ClientCommand_join(float request)
                        }
                        return; // never fall through to usage
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -208,7 +208,7 @@ void ClientCommand_ready(float request) // todo: anti-spam for toggling readynes
                                                }
 
                                                // cannot reset the game while a timeout is active!
-                                               if not(timeout_status)
+                                               if (!timeout_status)
                                                        ReadyCount();
                                        } else {
                                                sprint(self, "^1Game has already been restarted\n");
@@ -217,7 +217,7 @@ void ClientCommand_ready(float request) // todo: anti-spam for toggling readynes
                        }
                        return; // never fall through to usage
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -237,7 +237,7 @@ void ClientCommand_say(float request, float argc, string command)
                        if(argc >= 2) { Say(self, FALSE, world, substring(command, argv_start_index(1), argv_end_index(-1) - argv_start_index(1)), 1); }
                        return; // never fall through to usage
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -257,7 +257,7 @@ void ClientCommand_say_team(float request, float argc, string command)
                        if(argc >= 2) { Say(self, TRUE, world, substring(command, argv_start_index(1), argv_end_index(-1) - argv_start_index(1)), 1); }
                        return; // never fall through to usage
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -279,11 +279,11 @@ void ClientCommand_selectteam(float request, float argc)
                                if(IS_CLIENT(self))
                                {
                                        if(teamplay)
-                                               if not(self.team_forced > 0) 
-                                                       if not(lockteams) 
+                                               if(self.team_forced <= 0)
+                                                       if (!lockteams)
                                                        {
                                                                float selection;
-                                                               
+
                                                                switch(argv(1))
                                                                {
                                                                        case "red": selection = NUM_TEAM_1; break;
@@ -291,10 +291,10 @@ void ClientCommand_selectteam(float request, float argc)
                                                                        case "yellow": selection = NUM_TEAM_3; break;
                                                                        case "pink": selection = NUM_TEAM_4; break;
                                                                        case "auto": selection = (-1); break;
-                                                                       
+
                                                                        default: selection = 0; break;
                                                                }
-                                                               
+
                                                                if(selection)
                                                                {
                                                                        if(self.team == selection && self.deadflag == DEAD_NO)
@@ -312,7 +312,7 @@ void ClientCommand_selectteam(float request, float argc)
                                        else
                                                sprint(self, "^7selectteam can only be used in teamgames\n");
                                }
-                               return; 
+                               return;
                        }
                }
 
@@ -340,7 +340,7 @@ void ClientCommand_selfstuff(float request, string command)
                                return;
                        }
                }
-                       
+
                default:
                        sprint(self, "Incorrect parameters for ^2selectteam^7\n");
                case CMD_REQUEST_USAGE:
@@ -362,19 +362,19 @@ void ClientCommand_sentcvar(float request, float argc, string command)
                        {
                                //float tokens;
                                string s;
-                               
+
                                if(argc == 2) // undefined cvar: use the default value on the server then
                                {
                                        s = strcat(substring(command, argv_start_index(0), argv_end_index(1) - argv_start_index(0)), " \"", cvar_defstring(argv(1)), "\"");
                                        tokenize_console(s);
                                }
-                               
+
                                GetCvars(1);
-                               
+
                                return;
                        }
                }
-                       
+
                default:
                        sprint(self, "Incorrect parameters for ^2sentcvar^7\n");
                case CMD_REQUEST_USAGE:
@@ -386,7 +386,7 @@ void ClientCommand_sentcvar(float request, float argc, string command)
        }
 }
 
-void ClientCommand_spectate(float request) 
+void ClientCommand_spectate(float request)
 {
        switch(request)
        {
@@ -394,7 +394,6 @@ void ClientCommand_spectate(float request)
                {
                        if(IS_CLIENT(self))
                        {
-                               if(g_arena) { return; } 
                                if(g_lms)
                                {
                                        if(self.lms_spectate_warning)
@@ -411,8 +410,8 @@ void ClientCommand_spectate(float request)
                                                return;
                                        }
                                }
-                               
-                               if(IS_PLAYER(self) && autocvar_sv_spectate == 1) 
+
+                               if(IS_PLAYER(self) && autocvar_sv_spectate == 1)
                                        ClientKill_TeamChange(-2); // observe
 
                                // in CA, allow a dead player to move to spectators (without that, caplayer!=0 will be moved back to the player list)
@@ -425,7 +424,7 @@ void ClientCommand_spectate(float request)
                        }
                        return; // never fall through to usage
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -448,7 +447,7 @@ void ClientCommand_suggestmap(float request, float argc)
                                return;
                        }
                }
-                       
+
                default:
                        sprint(self, "Incorrect parameters for ^2suggestmap^7\n");
                case CMD_REQUEST_USAGE:
@@ -470,7 +469,7 @@ void ClientCommand_tell(float request, float argc, string command)
                        {
                                entity tell_to = GetIndexedEntity(argc, 1);
                                float tell_accepted = VerifyClientEntity(tell_to, TRUE, FALSE);
-                               
+
                                if(tell_accepted > 0) // the target is a real client
                                {
                                        if(tell_to != self) // and we're allowed to send to them :D
@@ -480,15 +479,15 @@ void ClientCommand_tell(float request, float argc, string command)
                                        }
                                        else { print_to(self, "You can't ^2tell^7 a message to yourself."); return; }
                                }
-                               else if(argv(1) == "#0") 
-                               { 
+                               else if(argv(1) == "#0")
+                               {
                                        trigger_magicear_processmessage_forallears(self, -1, world, substring(command, argv_start_index(next_token), argv_end_index(-1) - argv_start_index(next_token)));
                                        return;
                                }
                                else { print_to(self, strcat("tell: ", GetClientErrorString(tell_accepted, argv(1)), ".")); return; }
                        }
                }
-                       
+
                default:
                        sprint(self, "Incorrect parameters for ^2tell^7\n");
                case CMD_REQUEST_USAGE:
@@ -500,7 +499,7 @@ void ClientCommand_tell(float request, float argc, string command)
        }
 }
 
-void ClientCommand_voice(float request, float argc, string command) 
+void ClientCommand_voice(float request, float argc, string command)
 {
        switch(request)
        {
@@ -512,11 +511,11 @@ void ClientCommand_voice(float request, float argc, string command)
                                        VoiceMessage(argv(1), substring(command, argv_start_index(2), argv_end_index(-1) - argv_start_index(2)));
                                else
                                        VoiceMessage(argv(1), "");
-                                       
+
                                return;
                        }
                }
-                       
+
                default:
                        sprint(self, "Incorrect parameters for ^2voice^7\n");
                case CMD_REQUEST_USAGE:
@@ -537,10 +536,10 @@ void ClientCommand_(float request)
        {
                case CMD_REQUEST_COMMAND:
                {
-                       
+
                        return; // never fall through to usage
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -575,15 +574,15 @@ void ClientCommand_(float request)
        CLIENT_COMMAND("tell", ClientCommand_tell(request, arguments, command), "Send a message directly to a player") \
        CLIENT_COMMAND("voice", ClientCommand_voice(request, arguments, command), "Send voice message via sound") \
        /* nothing */
-       
+
 void ClientCommand_macro_help()
 {
        #define CLIENT_COMMAND(name,function,description) \
                { sprint(self, "  ^2", name, "^7: ", description, "\n"); }
-               
+
        CLIENT_COMMANDS(0, 0, "")
        #undef CLIENT_COMMAND
-       
+
        return;
 }
 
@@ -591,10 +590,10 @@ float ClientCommand_macro_command(float argc, string command)
 {
        #define CLIENT_COMMAND(name,function,description) \
                { if(name == strtolower(argv(0))) { function; return TRUE; } }
-               
+
        CLIENT_COMMANDS(CMD_REQUEST_COMMAND, argc, command)
        #undef CLIENT_COMMAND
-       
+
        return FALSE;
 }
 
@@ -602,21 +601,21 @@ float ClientCommand_macro_usage(float argc)
 {
        #define CLIENT_COMMAND(name,function,description) \
                { if(name == strtolower(argv(1))) { function; return TRUE; } }
-               
+
        CLIENT_COMMANDS(CMD_REQUEST_USAGE, argc, "")
        #undef CLIENT_COMMAND
-       
+
        return FALSE;
 }
 
 void ClientCommand_macro_write_aliases(float fh)
 {
        #define CLIENT_COMMAND(name,function,description) \
-               { CMD_Write_Alias("qc_cmd_cmd", name, description); } 
-               
+               { CMD_Write_Alias("qc_cmd_cmd", name, description); }
+
        CLIENT_COMMANDS(0, 0, "")
        #undef CLIENT_COMMAND
-       
+
        return;
 }
 
@@ -632,17 +631,17 @@ void SV_ParseClientCommand(string command)
                return;
 
        float argc = tokenize_console(command);
-       
+
        // for the mutator hook system
        cmd_name = strtolower(argv(0));
        cmd_argc = argc;
        cmd_string = command;
-       
+
        // Guide for working with argc arguments by example:
        // argc:   1    - 2      - 3     - 4
-       // argv:   0    - 1      - 2     - 3 
+       // argv:   0    - 1      - 2     - 3
        // cmd     vote - master - login - password
-       
+
        // for floodcheck
        switch(strtolower(argv(0)))
        {
@@ -654,29 +653,29 @@ void SV_ParseClientCommand(string command)
                case "prespawn": break; // handled by engine in host_cmd.c
                case "sentcvar": break; // handled by server in this file
                case "spawn": break; // handled by engine in host_cmd.c
-               
-               default: 
+
+               default:
                        if(SV_ParseClientCommand_floodcheck())
                                break; // "TRUE": continue, as we're not flooding yet
                        else
                                return; // "FALSE": not allowed to continue, halt // print("^1ERROR: ^7ANTISPAM CAUGHT: ", command, ".\n");
        }
-       
+
        /* NOTE: should this be disabled? It can be spammy perhaps, but hopefully it's okay for now */
-       if(argv(0) == "help") 
+       if(argv(0) == "help")
        {
-               if(argc == 1) 
+               if(argc == 1)
                {
                        sprint(self, "\nClient networked commands:\n");
                        ClientCommand_macro_help();
-                       
+
                        sprint(self, "\nCommon networked commands:\n");
                        CommonCommand_macro_help(self);
-                       
+
                        sprint(self, "\nUsage:^3 cmd COMMAND...^7, where possible commands are listed above.\n");
                        sprint(self, "For help about a specific command, type cmd help COMMAND\n");
                        return;
-               } 
+               }
                else if(CommonCommand_macro_usage(argc, self)) // Instead of trying to call a command, we're going to see detailed information about it
                {
                        return;
@@ -685,12 +684,12 @@ void SV_ParseClientCommand(string command)
                {
                        return;
                }
-       } 
+       }
        else if(MUTATOR_CALLHOOK(SV_ParseClientCommand))
        {
                return; // handled by a mutator
        }
-       else if(CheatCommand(argc)) 
+       else if(CheatCommand(argc))
        {
                return; // handled by server/cheats.qc
        }
index ca59aba6012c7a1d092692bc379609fe616b46f8..c5ae7c7be069798f4cc0eff048f4d50e5633e7ac 100644 (file)
@@ -24,13 +24,13 @@ string GetCallerName(entity caller)
 // verify that the client provided is acceptable for use
 float VerifyClientEntity(entity client, float must_be_real, float must_be_bots)
 {
-       if not(IS_CLIENT(client))
+       if (!IS_CLIENT(client))
                return CLIENT_DOESNT_EXIST;
        else if(must_be_real && !IS_REAL_CLIENT(client))
                return CLIENT_NOT_REAL;
        else if(must_be_bots && !IS_BOT_CLIENT(client))
                return CLIENT_NOT_BOT;
-               
+
        return CLIENT_ACCEPTABLE;
 }
 
@@ -60,18 +60,18 @@ entity GetIndexedEntity(float argc, float start_index)
        entity tmp_player, selection;
        float tmp_number, index;
        string tmp_string;
-       
+
        next_token = -1;
        index = start_index;
        selection = world;
-       
+
        if(argc > start_index)
        {
                if(substring(argv(index), 0, 1) == "#")
                {
                        tmp_string = substring(argv(index), 1, -1);
                        ++index;
-                       
+
                        if(tmp_string != "") // is it all one token? like #1
                        {
                                tmp_number = stof(tmp_string);
@@ -89,7 +89,7 @@ entity GetIndexedEntity(float argc, float start_index)
                        tmp_number = stof(argv(index));
                        ++index;
                }
-               
+
                if(VerifyClientNumber(tmp_number))
                {
                        selection = edict_num(tmp_number); // yes, it was a number
@@ -99,11 +99,11 @@ entity GetIndexedEntity(float argc, float start_index)
                        FOR_EACH_CLIENT(tmp_player)
                                if (strdecolorize(tmp_player.netname) == strdecolorize(argv(start_index)))
                                        selection = tmp_player;
-                                       
+
                        index = (start_index + 1);
                }
        }
-       
+
        next_token = index;
        //print(strcat("start_index: ", ftos(start_index), ", next_token: ", ftos(next_token), ", edict: ", ftos(num_for_edict(selection)), ".\n"));
        return selection;
@@ -114,12 +114,12 @@ entity GetFilteredEntity(string input)
 {
        entity tmp_player, selection;
        float tmp_number;
-       
+
        if(substring(input, 0, 1) == "#")
                tmp_number = stof(substring(input, 1, -1));
        else
                tmp_number = stof(input);
-       
+
        if(VerifyClientNumber(tmp_number))
        {
                selection = edict_num(tmp_number);
@@ -131,7 +131,7 @@ entity GetFilteredEntity(string input)
                        if (strdecolorize(tmp_player.netname) == strdecolorize(input))
                                selection = tmp_player;
        }
-       
+
        return selection;
 }
 
@@ -140,7 +140,7 @@ float GetFilteredNumber(string input)
 {
        entity selection = GetFilteredEntity(input);
        float output;
-       
+
        output = num_for_edict(selection);
 
        return output;
@@ -165,14 +165,14 @@ void timeout_handler_reset()
        timeout_caller = world;
        timeout_time = 0;
        timeout_leadtime = 0;
-                               
+
        remove(self);
 }
 
-void timeout_handler_think() 
+void timeout_handler_think()
 {
        entity tmp_player;
-       
+
        switch(timeout_status)
        {
                case TIMEOUT_ACTIVE:
@@ -190,53 +190,53 @@ void timeout_handler_think()
                        else // time to end the timeout
                        {
                                timeout_status = TIMEOUT_INACTIVE;
-                               
+
                                // reset the slowmo value back to normal
                                cvar_set("slowmo", ftos(orig_slowmo));
-                               
+
                                // unlock the view for players so they can move around again
-                               FOR_EACH_REALPLAYER(tmp_player) 
+                               FOR_EACH_REALPLAYER(tmp_player)
                                        tmp_player.fixangle = FALSE;
-                                       
+
                                timeout_handler_reset();
                        }
-                       
+
                        return;
                }
-               
+
                case TIMEOUT_LEADTIME:
                {
                        if(timeout_leadtime > 0) // countdown is still going
                        {
                                Send_Notification(NOTIF_ALL, world, MSG_CENTER, CENTER_TIMEOUT_BEGINNING, timeout_leadtime);
-                               
+
                                self.nextthink = time + 1; // think again in one second
                                timeout_leadtime -= 1; // decrease the time counter
                        }
                        else // time to begin the timeout
                        {
                                timeout_status = TIMEOUT_ACTIVE;
-                               
+
                                // set the slowmo value to the timeout default slowmo value
                                cvar_set("slowmo", ftos(TIMEOUT_SLOWMO_VALUE));
-                               
+
                                // reset all the flood variables
                                FOR_EACH_CLIENT(tmp_player)
                                        tmp_player.nickspamcount = tmp_player.nickspamtime = tmp_player.floodcontrol_chat =
-                                       tmp_player.floodcontrol_chatteam = tmp_player.floodcontrol_chattell = 
+                                       tmp_player.floodcontrol_chatteam = tmp_player.floodcontrol_chattell =
                                        tmp_player.floodcontrol_voice = tmp_player.floodcontrol_voiceteam = 0;
-                                       
+
                                // copy .v_angle to .lastV_angle for every player in order to fix their view during pause (see PlayerPreThink)
-                               FOR_EACH_REALPLAYER(tmp_player) 
+                               FOR_EACH_REALPLAYER(tmp_player)
                                        tmp_player.lastV_angle = tmp_player.v_angle;
-                               
+
                                self.nextthink = time; // think again next frame to handle it under TIMEOUT_ACTIVE code
                        }
-                       
+
                        return;
                }
-               
-               
+
+
                case TIMEOUT_INACTIVE:
                default:
                {
@@ -261,7 +261,7 @@ void CommonCommand_cvar_changes(float request, entity caller)
                        print_to(caller, cvar_changes);
                        return; // never fall through to usage
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -282,7 +282,7 @@ void CommonCommand_cvar_purechanges(float request, entity caller)
                        print_to(caller, cvar_purechanges);
                        return; // never fall through to usage
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -294,22 +294,22 @@ void CommonCommand_cvar_purechanges(float request, entity caller)
        }
 }
 
-void CommonCommand_info(float request, entity caller, float argc) 
-{      
+void CommonCommand_info(float request, entity caller, float argc)
+{
        switch(request)
        {
                case CMD_REQUEST_COMMAND:
                {
-                       string command = builtin_cvar_string(strcat("sv_info_", argv(1))); 
-                       
+                       string command = builtin_cvar_string(strcat("sv_info_", argv(1)));
+
                        if(command)
-                               wordwrap_sprint(command, 1000); 
+                               wordwrap_sprint(command, 1000);
                        else
                                print_to(caller, "ERROR: unsupported info command");
-                               
+
                        return; // never fall through to usage
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -329,7 +329,7 @@ void CommonCommand_ladder(float request, entity caller)
                        print_to(caller, ladder_reply);
                        return; // never fall through to usage
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -349,7 +349,7 @@ void CommonCommand_lsmaps(float request, entity caller)
                        print_to(caller, lsmaps_reply);
                        return; // never fall through to usage
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -369,7 +369,7 @@ void CommonCommand_printmaplist(float request, entity caller)
                        print_to(caller, maplist_reply);
                        return; // never fall through to usage
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -389,7 +389,7 @@ void CommonCommand_rankings(float request, entity caller)
                        print_to(caller, rankings_reply);
                        return; // never fall through to usage
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -401,20 +401,20 @@ void CommonCommand_rankings(float request, entity caller)
 }
 
 void CommonCommand_records(float request, entity caller)
-{      
+{
        switch(request)
        {
                case CMD_REQUEST_COMMAND:
                {
                        float i;
-                       
+
                        for(i = 0; i < 10; ++i)
                                if(records_reply[i] != "")
                                        print_to(caller, records_reply[i]);
-                               
+
                        return; // never fall through to usage
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -434,7 +434,7 @@ void CommonCommand_teamstatus(float request, entity caller)
                        Score_NicePrint(caller);
                        return; // never fall through to usage
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -460,7 +460,7 @@ void CommonCommand_time(float request, entity caller)
                        print_to(caller, strcat("gmtime = ", strftime(FALSE, "%a %b %e %H:%M:%S %Z %Y")));
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -479,9 +479,9 @@ void CommonCommand_timein(float request, entity caller)
                {
                        if(!caller || autocvar_sv_timeout)
                        {
-                               if not(timeout_status) { print_to(caller, "^7Error: There is no active timeout called."); }
+                               if (!timeout_status) { print_to(caller, "^7Error: There is no active timeout called."); }
                                else if(caller && (caller != timeout_caller)) { print_to(caller, "^7Error: You are not allowed to stop the active timeout."); }
-                                       
+
                                else // everything should be okay, continue aborting timeout
                                {
                                        switch(timeout_status)
@@ -494,7 +494,7 @@ void CommonCommand_timein(float request, entity caller)
                                                        bprint(strcat("^7The timeout was aborted by ", GetCallerName(caller), " !\n"));
                                                        return;
                                                }
-                                               
+
                                                case TIMEOUT_ACTIVE:
                                                {
                                                        timeout_time = autocvar_sv_timeout_resumetime;
@@ -502,16 +502,16 @@ void CommonCommand_timein(float request, entity caller)
                                                        bprint(strcat("^1Attention: ^7", GetCallerName(caller), " resumed the game! Prepare for battle!\n"));
                                                        return;
                                                }
-                                               
+
                                                default: dprint("timeout status was inactive, but this code was executed anyway?"); return;
                                        }
                                }
                        }
                        else { print_to(caller, "^1Timeins are not allowed to be called, enable them with sv_timeout 1.\n"); }
-                       
+
                        return; // never fall through to usage
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -531,7 +531,7 @@ void CommonCommand_timeout(float request, entity caller) // DEAR GOD THIS COMMAN
                        if(!caller || autocvar_sv_timeout)
                        {
                                float last_possible_timeout = ((autocvar_timelimit * 60) - autocvar_sv_timeout_leadtime - 1);
-                               
+
                                if(timeout_status) { print_to(caller, "^7Error: A timeout is already active."); }
                                else if(vote_called) { print_to(caller, "^7Error: You can not call a timeout while a vote is active."); }
                                else if(warmup_stage && !g_warmup_allow_timeout) { print_to(caller, "^7Error: You can not call a timeout in warmup-stage."); }
@@ -539,18 +539,18 @@ void CommonCommand_timeout(float request, entity caller) // DEAR GOD THIS COMMAN
                                else if(caller && (caller.allowed_timeouts < 1)) { print_to(caller, "^7Error: You already used all your timeout calls for this map."); }
                                else if(caller && !IS_PLAYER(caller)) { print_to(caller, "^7Error: You must be a player to call a timeout."); }
                                else if((autocvar_timelimit) && (last_possible_timeout < time - game_starttime)) { print_to(caller, "^7Error: It is too late to call a timeout now!"); }
-                               
+
                                else // everything should be okay, proceed with starting the timeout
-                               {                                       
+                               {
                                        if(caller) { caller.allowed_timeouts -= 1; }
-                                       
+
                                        bprint(GetCallerName(caller), " ^7called a timeout", (caller ? strcat(" (", ftos(caller.allowed_timeouts), " timeout(s) left)") : ""), "!\n"); // write a bprint who started the timeout (and how many they have left)
-                                       
+
                                        timeout_status = TIMEOUT_LEADTIME;
                                        timeout_caller = caller;
                                        timeout_time = autocvar_sv_timeout_length;
                                        timeout_leadtime = autocvar_sv_timeout_leadtime;
-                                       
+
                                        timeout_handler = spawn();
                                        timeout_handler.think = timeout_handler_think;
                                        timeout_handler.nextthink = time; // always let the entity think asap
@@ -559,10 +559,10 @@ void CommonCommand_timeout(float request, entity caller) // DEAR GOD THIS COMMAN
                                }
                        }
                        else { print_to(caller, "^1Timeouts are not allowed to be called, enable them with sv_timeout 1.\n"); }
-                       
+
                        return; // never fall through to usage
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -581,20 +581,20 @@ void CommonCommand_who(float request, entity caller, float argc)
                {
                        float total_listed_players, is_bot;
                        entity tmp_player;
-                       
+
                        float privacy = (caller && autocvar_sv_status_privacy);
                        string separator = strreplace("%", " ", strcat((argv(1) ? argv(1) : " "), "^7"));
                        string tmp_netaddress, tmp_crypto_idfp;
-                       
+
                        print_to(caller, strcat("List of client information", (privacy ? " (some data is hidden for privacy)" : ""), ":"));
-                       print_to(caller, sprintf(strreplace(" ", separator, " %-4s %-20s %-5s %-3s %-9s %-16s %s "), 
+                       print_to(caller, sprintf(strreplace(" ", separator, " %-4s %-20s %-5s %-3s %-9s %-16s %s "),
                                "ent", "nickname", "ping", "pl", "time", "ip", "crypto_id"));
-                       
+
                        total_listed_players = 0;
                        FOR_EACH_CLIENT(tmp_player)
                        {
                                is_bot = (IS_BOT_CLIENT(tmp_player));
-                               
+
                                if(is_bot)
                                {
                                        tmp_netaddress = "null/botclient";
@@ -611,23 +611,23 @@ void CommonCommand_who(float request, entity caller, float argc)
                                        tmp_crypto_idfp = tmp_player.crypto_idfp;
                                }
 
-                               print_to(caller, sprintf(strreplace(" ", separator, " #%-3d %-20.20s %-5d %-3d %-9s %-16s %s "), 
-                                       num_for_edict(tmp_player), 
+                               print_to(caller, sprintf(strreplace(" ", separator, " #%-3d %-20.20s %-5d %-3d %-9s %-16s %s "),
+                                       num_for_edict(tmp_player),
                                        tmp_player.netname,
-                                       tmp_player.ping, 
-                                       tmp_player.ping_packetloss, 
+                                       tmp_player.ping,
+                                       tmp_player.ping_packetloss,
                                        process_time(1, time - tmp_player.jointime),
                                        tmp_netaddress,
                                        tmp_crypto_idfp));
-                               
+
                                ++total_listed_players;
                        }
-                       
+
                        print_to(caller, strcat("Finished listing ", ftos(total_listed_players), " client(s) out of ", ftos(maxclients), " slots."));
-                       
+
                        return; // never fall through to usage
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -646,10 +646,10 @@ void CommonCommand_(float request, entity caller)
        {
                case CMD_REQUEST_COMMAND:
                {
-                       
+
                        return; // never fall through to usage
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -688,10 +688,10 @@ void CommonCommand_macro_help(entity caller)
 {
        #define COMMON_COMMAND(name,function,description) \
                { print_to(caller, strcat("  ^2", name, "^7: ", description)); }
-               
+
        COMMON_COMMANDS(0, caller, 0, "")
        #undef COMMON_COMMAND
-       
+
        return;
 }
 
@@ -699,10 +699,10 @@ float CommonCommand_macro_command(float argc, entity caller, string command)
 {
        #define COMMON_COMMAND(name,function,description) \
                { if(name == strtolower(argv(0))) { function; return TRUE; } }
-               
+
        COMMON_COMMANDS(CMD_REQUEST_COMMAND, caller, argc, command)
        #undef COMMON_COMMAND
-       
+
        return FALSE;
 }
 
@@ -710,10 +710,10 @@ float CommonCommand_macro_usage(float argc, entity caller)
 {
        #define COMMON_COMMAND(name,function,description) \
                { if(name == strtolower(argv(1))) { function; return TRUE; } }
-               
+
        COMMON_COMMANDS(CMD_REQUEST_USAGE, caller, argc, "")
        #undef COMMON_COMMAND
-       
+
        return FALSE;
 }
 
@@ -721,9 +721,9 @@ void CommonCommand_macro_write_aliases(float fh)
 {
        #define COMMON_COMMAND(name,function,description) \
                { CMD_Write_Alias("qc_cmd_svcmd", name, description); }
-               
+
        COMMON_COMMANDS(0, world, 0, "")
        #undef COMMON_COMMAND
-       
+
        return;
 }
index 415d20f9cf34b3a14d3a4a615d8cb37d11d6498e..a55e0e0cd28706f7199c06db12aae058a02c1dbc 100644 (file)
@@ -9,12 +9,12 @@
 // without using any extra processing time.
 
 // See common.qc for their proper commands
-       
+
 string getrecords(float page) // 50 records per page
-{      
+{
        float rec = 0, r, i;
        string h, s;
-       
+
        s = "";
 
        if (g_ctf)
@@ -24,10 +24,10 @@ string getrecords(float page) // 50 records per page
                        if (MapInfo_Get_ByID(i))
                        {
                                r = stof(db_get(ServerProgsDB, strcat(MapInfo_Map_bspname, "/captimerecord/time")));
-                               
-                               if not(r)
+
+                               if (!r)
                                        continue;
-                                       
+
                                // TODO: uid2name
                                h = db_get(ServerProgsDB, strcat(MapInfo_Map_bspname, "/captimerecord/netname"));
                                s = strcat(s, strpad(32, MapInfo_Map_bspname), " ", strpad(-6, ftos_decimals(r, 2)), " ", h, "\n");
@@ -43,10 +43,10 @@ string getrecords(float page) // 50 records per page
                        if (MapInfo_Get_ByID(i))
                        {
                                r = race_readTime(MapInfo_Map_bspname, 1);
-                               
-                               if not(r)
+
+                               if (!r)
                                        continue;
-                                       
+
                                h = race_readName(MapInfo_Map_bspname, 1);
                                s = strcat(s, strpad(32, MapInfo_Map_bspname), " ", strpad(-8, TIME_ENCODED_TOSTRING(r)), " ", h, "\n");
                                ++rec;
@@ -61,10 +61,10 @@ string getrecords(float page) // 50 records per page
                        if (MapInfo_Get_ByID(i))
                        {
                                r = race_readTime(MapInfo_Map_bspname, 1);
-                               
-                               if not(r)
+
+                               if (!r)
                                        continue;
-                                       
+
                                h = race_readName(MapInfo_Map_bspname, 1);
                                s = strcat(s, strpad(32, MapInfo_Map_bspname), " ", strpad(-8, TIME_ENCODED_TOSTRING(r)), " ", h, "\n");
                                ++rec;
@@ -91,10 +91,10 @@ string getrankings()
        for (i = 1; i <= RANKINGS_CNT; ++i)
        {
                t = race_readTime(map, i);
-               
+
                if (t == 0)
                        continue;
-                       
+
                n = race_readName(map, i);
                p = count_ordinal(i);
                s = strcat(s, strpad(8, p), " ", strpad(-8, TIME_ENCODED_TOSTRING(t)), " ", n, "\n");
@@ -112,7 +112,7 @@ string getladder()
 {
        float i, j, k, uidcnt = 0, thiscnt;
        string s, temp_s, rr, myuid, thisuid;
-       
+
        if(g_cts)
                rr = CTS_RECORD;
        else
@@ -147,12 +147,12 @@ string getladder()
                                // LADDER_CNT+1 = total points
 
                                temp_s = db_get(TemporaryDB, strcat("ladder", myuid));
-                               
+
                                if(temp_s == "")
                                {
                                        db_put(TemporaryDB, strcat("uid", ftos(uidcnt)), myuid);
                                        ++uidcnt;
-                                       
+
                                        for(j = 0; j <= LADDER_CNT + 1; ++j)
                                        {
                                                if(j != LADDER_CNT + 1)
@@ -225,7 +225,7 @@ string getladder()
                                                top_uids[k] = top_uids[k-1];
                                                top_scores[k] = top_scores[k-1];
                                        }
-                                       
+
                                        top_uids[j] = thisuid;
                                        top_scores[j] = thiscnt;
                                        break;
@@ -233,21 +233,21 @@ string getladder()
                        }
                }
        }
-       
+
        s = "^3-----------------------\n\n";
-       
+
        s = strcat(s, "Pos ^3|");
        s = strcat(s, " ^7Total  ^3|");
-       
+
        for(i = 1; i <= LADDER_CNT; ++i)
                { s = strcat(s, " ^7", count_ordinal(i), " ^3|"); }
-       
+
        s = strcat(s, " ^7Speed awards ^3| ^7Name");
        s = strcat(s, "\n^3----+--------");
-       
+
        for(i = 1; i <= min(9, LADDER_CNT); ++i)
                { s = strcat(s, "+-----"); }
-               
+
        #if LADDER_CNT > 9
        for(i = 1; i <= LADDER_CNT - 9; ++i)
                { s = strcat(s, "+------"); }
@@ -259,16 +259,16 @@ string getladder()
        {
                temp_s = db_get(TemporaryDB, strcat("ladder", top_uids[i]));
                tokenize_console(temp_s);
-               
+
                if(argv(LADDER_CNT+1) == "") // total is 0, skip
                        continue;
-                       
+
                s = strcat(s, strpad(4, count_ordinal(i+1)), "^3| ^7"); // pos
                s = strcat(s, strpad(7, argv(LADDER_CNT+1)), "^3| ^7"); // total
-               
+
                for(j = 1; j <= min(9, LADDER_CNT); ++j)
                        { s = strcat(s, strpad(4, argv(j)), "^3| ^7"); } // 1st, 2nd, 3rd etc cnt
-                       
+
                #if LADDER_CNT > 9
                for(j = 10; j <= LADDER_CNT; ++j)
                        { s = strcat(s, strpad(4, argv(j)), " ^3| ^7"); } // 1st, 2nd, 3rd etc cnt
@@ -290,7 +290,7 @@ string getmaplist()
 {
        string maplist = "", col;
        float i, argc;
-       
+
        argc = tokenize_console(autocvar_g_maplist);
        for(i = 0; i < argc; ++i)
        {
@@ -306,12 +306,12 @@ string getmaplist()
        return sprintf("^7Maps in list: %s\n", maplist);
 }
 
-       
+
 string getlsmaps()
 {
        string lsmaps = "", col;
        float i, newmaps = 0;
-       
+
        for(i = 0; i < MapInfo_count; ++i)
        {
                if((MapInfo_Get_ByID(i)) && !(MapInfo_Map_flags & MapInfo_ForbiddenFlags()))
index 7fd707813570331d9d20f4d63a958138f70cc01b..f2205b68d5a5a8c8b26706c94364df72de9233b8 100644 (file)
@@ -28,7 +28,7 @@ float FullTraceFraction(vector a, vector mi, vector ma, vector b)
                        c = trace_endpos;
                }
 
-               n += tracebox_inverted(c, mi, ma, b, MOVE_WORLDONLY, world, FALSE);
+               n += tracebox_inverted(c, mi, ma, b, MOVE_WORLDONLY, world, FALSE, world);
 
                white += vlen(trace_endpos - c);
                c = trace_endpos;
@@ -226,7 +226,7 @@ void RadarMap_Think()
        //   size: pixel width/height
        //   maxs: cell width/height
        //   frame: counter
-       
+
        float i, x, l;
        string si;
 
@@ -380,7 +380,7 @@ void RadarMap_Think()
 float RadarMap_Make(float argc)
 {
        float i;
-       
+
        if(!radarmapper)
        {
                radarmapper = spawn();
@@ -407,21 +407,21 @@ float RadarMap_Make(float argc)
                                case "--resolution": { ++i; radarmapper.size_x = stof(argv(i)); ++i; radarmapper.size_y = stof(argv(i)); break; }
                                case "--qual": // minor alias
                                case "--quality": { ++i; radarmapper.size_z = stof(argv(i)); break; }
-                               
-                               default: 
-                                       i = argc; 
+
+                               default:
+                                       i = argc;
                                        remove(radarmapper);
                                        radarmapper = world;
                                        break;
                        }
                }
-                               
-               if(radarmapper) // after doing the arguments, see if we successfully went forward. 
+
+               if(radarmapper) // after doing the arguments, see if we successfully went forward.
                {
                        print("Radarmap entity spawned.\n");
                        return TRUE; // if so, don't print usage.
                }
        }
-       
+
        return FALSE;
 }
index b336d3ee26da2ee8758b89a0d1eeb464b7f43217..ff07f2458a0608ed5f7f3696f129531da76d9f8d 100644 (file)
@@ -74,31 +74,31 @@ void GameCommand_adminmsg(float request, float argc)
                {
                        entity client;
                        float accepted;
-                       
+
                        string targets = strreplace(",", " ", argv(1));
                        string original_targets = strreplace(" ", ", ", targets);
                        string admin_message = argv(2);
                        float infobartime = stof(argv(3));
-                       
+
                        string successful, t;
                        successful = string_null;
-                       
+
                        if((targets) && (admin_message))
                        {
                                for(;targets;)
                                {
                                        t = car(targets); targets = cdr(targets);
-                                       
+
                                        // Check to see if the player is a valid target
                                        client = GetFilteredEntity(t);
                                        accepted = VerifyClientEntity(client, TRUE, FALSE);
-                                       
-                                       if not(accepted > 0) 
+
+                                       if(accepted <= 0)
                                        {
-                                               print("adminmsg: ", GetClientErrorString(accepted, t), (targets ? ", skipping to next player.\n" : ".\n")); 
+                                               print("adminmsg: ", GetClientErrorString(accepted, t), (targets ? ", skipping to next player.\n" : ".\n"));
                                                continue;
                                        }
-                                       
+
                                        // send the centerprint/console print or infomessage
                                        if(infobartime)
                                        {
@@ -109,21 +109,21 @@ void GameCommand_adminmsg(float request, float argc)
                                                centerprint(client, strcat("^3", admin_name(), ":\n^7", admin_message));
                                                sprint(client, strcat("\{1}\{13}^3", admin_name(), "^7: ", admin_message, "\n"));
                                        }
-                                       
+
                                        successful = strcat(successful, (successful ? ", " : ""), client.netname);
                                        dprint("Message sent to ", client.netname, "\n");
                                        continue;
                                }
-                               
+
                                if(successful)
                                        bprint("Successfully sent message '", admin_message, "' to ", successful, ".\n");
                                else
                                        print("No players given (", original_targets, ") could receive the message.\n");
-                                       
+
                                return;
                        }
                }
-               
+
                default:
                        print("Incorrect parameters for ^2adminmsg^7\n");
                case CMD_REQUEST_USAGE:
@@ -148,7 +148,7 @@ void GameCommand_allready(float request)
                        ReadyRestart();
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -160,7 +160,7 @@ void GameCommand_allready(float request)
 }
 
 void GameCommand_allspec(float request, float argc)
-{      
+{
        switch(request)
        {
                case CMD_REQUEST_COMMAND:
@@ -168,7 +168,7 @@ void GameCommand_allspec(float request, float argc)
                        entity client;
                        string reason = argv(1);
                        float i = 0;
-                       
+
                        FOR_EACH_REALPLAYER(client)
                        {
                                self = client;
@@ -179,7 +179,7 @@ void GameCommand_allspec(float request, float argc)
                        else { print("No players found to spectate.\n"); }
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -191,7 +191,7 @@ void GameCommand_allspec(float request, float argc)
        }
 }
 
-void GameCommand_anticheat(float request, float argc) 
+void GameCommand_anticheat(float request, float argc)
 {
        switch(request)
        {
@@ -199,8 +199,8 @@ void GameCommand_anticheat(float request, float argc)
                {
                        entity client = GetIndexedEntity(argc, 1);
                        float accepted = VerifyClientEntity(client, FALSE, FALSE);
-                       
-                       if(accepted > 0) 
+
+                       if(accepted > 0)
                        {
                                self = client;
                                anticheat_report();
@@ -208,10 +208,10 @@ void GameCommand_anticheat(float request, float argc)
                        }
                        else
                        {
-                               print("anticheat: ", GetClientErrorString(accepted, argv(1)), ".\n"); 
+                               print("anticheat: ", GetClientErrorString(accepted, argv(1)), ".\n");
                        }
                }
-                       
+
                default:
                        print("Incorrect parameters for ^2anticheat^7\n");
                case CMD_REQUEST_USAGE:
@@ -223,7 +223,7 @@ void GameCommand_anticheat(float request, float argc)
        }
 }
 
-void GameCommand_bbox(float request) 
+void GameCommand_bbox(float request)
 {
        switch(request)
        {
@@ -300,11 +300,11 @@ void GameCommand_bbox(float request)
                                print(" ", ftos(world.absmax_z));
                        else
                                print(" ", ftos(trace_endpos_z));
-                               
+
                        print("\n");
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -323,7 +323,7 @@ void GameCommand_bot_cmd(float request, float argc, string command)
                case CMD_REQUEST_COMMAND:
                {
                        entity bot;
-                       
+
                        if(argv(1) == "reset")
                        {
                                bot_resetqueues();
@@ -414,7 +414,7 @@ void GameCommand_bot_cmd(float request, float argc, string command)
                                        print(strcat("Error: Can't find bot with the name or id '", argv(1),"' - Did you mistype the command?\n")); // don't return so that usage is shown
                        }
                }
-                       
+
                default:
                        print("Incorrect parameters for ^2bot_cmd^7\n");
                case CMD_REQUEST_USAGE:
@@ -439,13 +439,13 @@ void GameCommand_cointoss(float request, float argc)
                        string result1 = (argv(2) ? strcat("^7", argv(1), "^3!\n") : "^1HEADS^3!\n");
                        string result2 = (argv(2) ? strcat("^7", argv(2), "^3!\n") : "^4TAILS^3!\n");
                        string choice = ((random() > 0.5) ? result1 : result2);
-                       
+
                        FOR_EACH_CLIENT(client)
                                centerprint(client, strcat("^3Throwing coin... Result: ", choice));
                        bprint(strcat("^3Throwing coin... Result: ", choice));
                        return;
                }
-               
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -456,7 +456,7 @@ void GameCommand_cointoss(float request, float argc)
        }
 }
 
-void GameCommand_database(float request, float argc) 
+void GameCommand_database(float request, float argc)
 {
        switch(request)
        {
@@ -485,7 +485,7 @@ void GameCommand_database(float request, float argc)
                                }
                        }
                }
-                       
+
                default:
                        print("Incorrect parameters for ^2database^7\n");
                case CMD_REQUEST_USAGE:
@@ -500,30 +500,30 @@ void GameCommand_database(float request, float argc)
 }
 
 void GameCommand_defer_clear(float request, float argc)
-{      
+{
        switch(request)
        {
                case CMD_REQUEST_COMMAND:
                {
                        entity client;
                        float accepted;
-                       
+
                        if(argc >= 2)
                        {
                                client = GetIndexedEntity(argc, 1);
                                accepted = VerifyClientEntity(client, TRUE, FALSE);
-                               
+
                                if(accepted > 0)
                                {
                                        stuffcmd(client, "defer clear\n");
                                        print("defer clear stuffed to ", client.netname, "\n");
                                }
                                else { print("defer_clear: ", GetClientErrorString(accepted, argv(1)), ".\n"); }
-                               
+
                                return;
                        }
                }
-               
+
                default:
                        print("Incorrect parameters for ^2defer_clear^7\n");
                case CMD_REQUEST_USAGE:
@@ -537,7 +537,7 @@ void GameCommand_defer_clear(float request, float argc)
 }
 
 void GameCommand_defer_clear_all(float request)
-{      
+{
        switch(request)
        {
                case CMD_REQUEST_COMMAND:
@@ -545,17 +545,17 @@ void GameCommand_defer_clear_all(float request)
                        entity client;
                        float i = 0;
                        float argc;
-                       
+
                        FOR_EACH_CLIENT(client)
                        {
                                argc = tokenize_console(strcat("defer_clear ", ftos(num_for_edict(client))));
-                               GameCommand_defer_clear(CMD_REQUEST_COMMAND, argc);     
+                               GameCommand_defer_clear(CMD_REQUEST_COMMAND, argc);
                                ++i;
                        }
-                       if(i) { print(strcat("Successfully stuffed defer clear to all clients (", ftos(i), ")\n")); } // should a message be added if no players were found? 
+                       if(i) { print(strcat("Successfully stuffed defer clear to all clients (", ftos(i), ")\n")); } // should a message be added if no players were found?
                        return;
                }
-               
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -581,8 +581,8 @@ void GameCommand_delrec(float request, float argc)  // perhaps merge later with
                                        race_deleteTime(GetMapname(), stof(argv(1)));
                                return;
                        }
-               }       
-               
+               }
+
                default:
                        print("Incorrect parameters for ^2delrec^7\n");
                case CMD_REQUEST_USAGE:
@@ -596,7 +596,7 @@ void GameCommand_delrec(float request, float argc)  // perhaps merge later with
        }
 }
 
-void GameCommand_effectindexdump(float request) 
+void GameCommand_effectindexdump(float request)
 {
        switch(request)
        {
@@ -604,7 +604,7 @@ void GameCommand_effectindexdump(float request)
                {
                        float fh, d;
                        string s;
-                       
+
                        d = db_create();
                        print("begin of effects list\n");
                        db_put(d, "TE_GUNSHOT", "1"); print("effect TE_GUNSHOT is ", ftos(particleeffectnum("TE_GUNSHOT")), "\n");
@@ -663,7 +663,7 @@ void GameCommand_effectindexdump(float request)
                        db_close(d);
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -674,7 +674,7 @@ void GameCommand_effectindexdump(float request)
        }
 }
 
-void GameCommand_extendmatchtime(float request) 
+void GameCommand_extendmatchtime(float request)
 {
        switch(request)
        {
@@ -683,7 +683,7 @@ void GameCommand_extendmatchtime(float request)
                        changematchtime(autocvar_timelimit_increment * 60, autocvar_timelimit_min * 60, autocvar_timelimit_max * 60);
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -696,19 +696,19 @@ void GameCommand_extendmatchtime(float request)
 }
 
 void GameCommand_find(float request, float argc)  // is this even needed? We have prvm_edicts command and such ANYWAY
-{      
+{
        switch(request)
        {
                case CMD_REQUEST_COMMAND:
                {
                        entity client;
-                       
+
                        for(client = world; (client = find(client, classname, argv(1))); )
                                print(etos(client), "\n");
-                               
+
                        return;
                }
-                       
+
                default:
                        print("Incorrect parameters for ^2find^7\n");
                case CMD_REQUEST_USAGE:
@@ -720,8 +720,8 @@ void GameCommand_find(float request, float argc)  // is this even needed? We hav
        }
 }
 
-void GameCommand_gametype(float request, float argc) 
-{      
+void GameCommand_gametype(float request, float argc)
+{
        switch(request)
        {
                case CMD_REQUEST_COMMAND:
@@ -730,7 +730,7 @@ void GameCommand_gametype(float request, float argc)
                        {
                                string s = argv(1);
                                float t = MapInfo_Type_FromString(s), tsave = MapInfo_CurrentGametype();
-                               
+
                                if(t)
                                {
                                        MapInfo_SwitchGameType(t);
@@ -751,11 +751,11 @@ void GameCommand_gametype(float request, float argc)
                                }
                                else
                                        bprint("Game type switch to ", s, " failed: this type does not exist!\n");
-                                       
+
                                return;
                        }
                }
-                       
+
                default:
                        print("Incorrect parameters for ^2gametype^7\n");
                case CMD_REQUEST_USAGE:
@@ -768,8 +768,8 @@ void GameCommand_gametype(float request, float argc)
        }
 }
 
-void GameCommand_gettaginfo(float request, float argc) 
-{      
+void GameCommand_gettaginfo(float request, float argc)
+{
        switch(request)
        {
                case CMD_REQUEST_COMMAND:
@@ -777,7 +777,7 @@ void GameCommand_gettaginfo(float request, float argc)
                        entity tmp_entity;
                        float i;
                        vector v;
-                       
+
                        if(argc >= 4)
                        {
                                tmp_entity = spawn();
@@ -811,12 +811,12 @@ void GameCommand_gettaginfo(float request, float argc)
                                }
                                else
                                        print("bone not found\n");
-                                       
+
                                remove(tmp_entity);
                                return;
                        }
                }
-                       
+
                default:
                        print("Incorrect parameters for ^2gettaginfo^7\n");
                case CMD_REQUEST_USAGE:
@@ -828,7 +828,7 @@ void GameCommand_gettaginfo(float request, float argc)
        }
 }
 
-void GameCommand_animbench(float request, float argc) 
+void GameCommand_animbench(float request, float argc)
 {
        switch(request)
        {
@@ -896,7 +896,7 @@ void GameCommand_gotomap(float request, float argc)
                                return;
                        }
                }
-                       
+
                default:
                        print("Incorrect parameters for ^2gotomap^7\n");
                case CMD_REQUEST_USAGE:
@@ -926,7 +926,7 @@ void GameCommand_lockteams(float request)
                        }
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -938,14 +938,14 @@ void GameCommand_lockteams(float request)
        }
 }
 
-void GameCommand_make_mapinfo(float request) 
+void GameCommand_make_mapinfo(float request)
 {
        switch(request)
        {
                case CMD_REQUEST_COMMAND:
-               { 
+               {
                        entity tmp_entity;
-                       
+
                        tmp_entity = spawn();
                        tmp_entity.classname = "make_mapinfo";
                        tmp_entity.think = make_mapinfo_Think;
@@ -953,7 +953,7 @@ void GameCommand_make_mapinfo(float request)
                        MapInfo_Enumerate();
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -973,17 +973,17 @@ void GameCommand_moveplayer(float request, float argc)
                {
                        float accepted;
                        entity client;
-       
+
                        string targets = strreplace(",", " ", argv(1));
                        string original_targets = strreplace(" ", ", ", targets);
                        string destination = argv(2);
-                       
+
                        string successful, t;
                        successful = string_null;
-                       
+
                        // lets see if the target(s) even actually exist.
                        if((targets) && (destination))
-                       { 
+                       {
                                for(;targets;)
                                {
                                        t = car(targets); targets = cdr(targets);
@@ -991,21 +991,21 @@ void GameCommand_moveplayer(float request, float argc)
                                        // Check to see if the player is a valid target
                                        client = GetFilteredEntity(t);
                                        accepted = VerifyClientEntity(client, FALSE, FALSE);
-                                       
-                                       if not(accepted > 0) 
+
+                                       if(accepted <= 0)
                                        {
-                                               print("moveplayer: ", GetClientErrorString(accepted, t), (targets ? ", skipping to next player.\n" : ".\n")); 
+                                               print("moveplayer: ", GetClientErrorString(accepted, t), (targets ? ", skipping to next player.\n" : ".\n"));
                                                continue;
                                        }
-                                       
+
                                        // Where are we putting this player?
-                                       if(destination == "spec" || destination == "spectator") 
+                                       if(destination == "spec" || destination == "spectator")
                                        {
                                                if(!IS_SPEC(client) && !IS_OBSERVER(client))
                                                {
                                                        self = client;
                                                        PutObserverInServer();
-                                                       
+
                                                        successful = strcat(successful, (successful ? ", " : ""), client.netname);
                                                }
                                                else
@@ -1032,7 +1032,7 @@ void GameCommand_moveplayer(float request, float argc)
                                                                        // keep the forcing undone
                                                                        print("Player ", ftos(GetFilteredNumber(t)), " (", client.netname, ") is already on the ", Team_ColoredFullName(client.team), (targets ? "^7, skipping to next player.\n" : "^7.\n"));
                                                                        continue;
-                                                               } 
+                                                               }
                                                                else if(team_id == 0)  // auto team
                                                                {
                                                                        team_id = Team_NumberToTeam(FindSmallestTeam(client, FALSE));
@@ -1042,18 +1042,18 @@ void GameCommand_moveplayer(float request, float argc)
                                                                        CheckAllowedTeams(client);
                                                                }
                                                                client.team_forced = save;
-                                                               
+
                                                                // Check to see if the destination team is even available
-                                                               switch(team_id) 
+                                                               switch(team_id)
                                                                {
                                                                        case NUM_TEAM_1: if(c1 == -1) { print("Sorry, can't move player to red team if it doesn't exist.\n"); return; } break;
                                                                        case NUM_TEAM_2: if(c2 == -1) { print("Sorry, can't move player to blue team if it doesn't exist.\n"); return; } break;
                                                                        case NUM_TEAM_3: if(c3 == -1) { print("Sorry, can't move player to yellow team if it doesn't exist.\n"); return; } break;
                                                                        case NUM_TEAM_4: if(c4 == -1) { print("Sorry, can't move player to pink team if it doesn't exist.\n"); return; } break;
-                                                                       
+
                                                                        default: print("Sorry, can't move player here if team ", destination, " doesn't exist.\n"); return;
                                                                }
-                                                               
+
                                                                // If so, lets continue and finally move the player
                                                                client.team_forced = 0;
                                                                MoveToTeam(client, team_id, 6);
@@ -1069,21 +1069,21 @@ void GameCommand_moveplayer(float request, float argc)
                                                }
                                                else
                                                {
-                                                       print("Can't change teams if the player isn't in the game.\n"); // well technically we could, but should we allow that? :P 
+                                                       print("Can't change teams if the player isn't in the game.\n"); // well technically we could, but should we allow that? :P
                                                        return;
                                                }
                                        }
                                }
-                               
+
                                if(successful)
                                        bprint("Successfully moved players ", successful, " to destination ", destination, ".\n");
                                else
                                        print("No players given (", original_targets, ") are able to move.\n");
-                                       
+
                                return; // still correct parameters so return to avoid usage print
                        }
                }
-                       
+
                default:
                        print("Incorrect parameters for ^2moveplayer^7\n");
                case CMD_REQUEST_USAGE:
@@ -1100,7 +1100,7 @@ void GameCommand_moveplayer(float request, float argc)
        }
 }
 
-void GameCommand_nospectators(float request) 
+void GameCommand_nospectators(float request)
 {
        switch(request)
        {
@@ -1119,7 +1119,7 @@ void GameCommand_nospectators(float request)
                        bprint(strcat("^7All spectators will be automatically kicked when not joining the game after ", ftos(autocvar_g_maxplayers_spectator_blocktime), " seconds!\n"));
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -1131,7 +1131,7 @@ void GameCommand_nospectators(float request)
 }
 
 void GameCommand_playerdemo(float request, float argc)
-{      
+{
        switch(request)
        {
                case CMD_REQUEST_COMMAND:
@@ -1140,58 +1140,58 @@ void GameCommand_playerdemo(float request, float argc)
                        {
                                entity client;
                                float i, n, accepted;
-                               
+
                                switch(argv(1))
                                {
                                        case "read":
                                        {
                                                client = GetIndexedEntity(argc, 2);
                                                accepted = VerifyClientEntity(client, FALSE, TRUE);
-                                               
-                                               if not(accepted > 0) 
+
+                                               if(accepted <= 0)
                                                {
-                                                       print("playerdemo: read: ", GetClientErrorString(accepted, argv(2)), ".\n"); 
+                                                       print("playerdemo: read: ", GetClientErrorString(accepted, argv(2)), ".\n");
                                                        return;
                                                }
-                                               
+
                                                self = client;
                                                playerdemo_open_read(argv(next_token));
                                                return;
                                        }
-                                       
+
                                        case "write":
                                        {
                                                client = GetIndexedEntity(argc, 2);
                                                accepted = VerifyClientEntity(client, FALSE, FALSE);
-                                               
-                                               if not(accepted > 0) 
+
+                                               if(accepted <= 0)
                                                {
-                                                       print("playerdemo: write: ", GetClientErrorString(accepted, argv(2)), ".\n"); 
+                                                       print("playerdemo: write: ", GetClientErrorString(accepted, argv(2)), ".\n");
                                                        return;
                                                }
-                                               
+
                                                self = client;
                                                playerdemo_open_write(argv(next_token));
                                                return;
                                        }
-                                       
+
                                        case "auto_read_and_write":
                                        {
                                                n = GetFilteredNumber(argv(3));
                                                cvar_set("bot_number", ftos(n));
-                                               
+
                                                localcmd("wait; wait; wait\n");
                                                for(i = 0; i < n; ++i) { localcmd("sv_cmd playerdemo read ", ftos(i+2), " ", argv(2), ftos(i+1), "\n"); }
-                                               
+
                                                localcmd("sv_cmd playerdemo write 1 ", ftos(n+1), "\n");
                                                return;
                                        }
-                                       
+
                                        case "auto_read":
                                        {
                                                n = GetFilteredNumber(argv(3));
                                                cvar_set("bot_number", ftos(n));
-                                               
+
                                                localcmd("wait; wait; wait\n");
                                                for(i = 0; i < n; ++i) { localcmd("sv_cmd playerdemo read ", ftos(i+2), " ", argv(2), ftos(i+1), "\n"); }
                                                return;
@@ -1199,7 +1199,7 @@ void GameCommand_playerdemo(float request, float argc)
                                }
                        }
                }
-                       
+
                default:
                        print("Incorrect parameters for ^2playerdemo^7\n");
                case CMD_REQUEST_USAGE:
@@ -1211,7 +1211,7 @@ void GameCommand_playerdemo(float request, float argc)
        }
 }
 
-void GameCommand_printstats(float request) 
+void GameCommand_printstats(float request)
 {
        switch(request)
        {
@@ -1221,7 +1221,7 @@ void GameCommand_printstats(float request)
                        print("stats dumped.\n");
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -1241,7 +1241,7 @@ void GameCommand_radarmap(float request, float argc)
                        if(RadarMap_Make(argc))
                                return;
                }
-                       
+
                default:
                        print("Incorrect parameters for ^2radarmap^7\n");
                case CMD_REQUEST_USAGE:
@@ -1255,7 +1255,7 @@ void GameCommand_radarmap(float request, float argc)
        }
 }
 
-void GameCommand_reducematchtime(float request) 
+void GameCommand_reducematchtime(float request)
 {
        switch(request)
        {
@@ -1264,7 +1264,7 @@ void GameCommand_reducematchtime(float request)
                        changematchtime(autocvar_timelimit_decrement *-60, autocvar_timelimit_min * 60, autocvar_timelimit_max * 60);
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -1290,7 +1290,7 @@ void GameCommand_setbots(float request, float argc)
                                return;
                        }
                }
-                       
+
                default:
                        print("Incorrect parameters for ^2setbots^7\n");
                case CMD_REQUEST_USAGE:
@@ -1320,22 +1320,22 @@ void GameCommand_shuffleteams(float request)
                                FOR_EACH_PLAYER(tmp_player)
                                {
                                        CheckAllowedTeams(tmp_player);
-                                       
+
                                        if(c1 >= 0) t_teams = max(1, t_teams);
                                        if(c2 >= 0) t_teams = max(2, t_teams);
                                        if(c3 >= 0) t_teams = max(3, t_teams);
                                        if(c4 >= 0) t_teams = max(4, t_teams);
-                                       
+
                                        ++t_players;
                                }
-                               
+
                                // build a list of the players in a random order
                                FOR_EACH_PLAYER(tmp_player)
                                {
                                        for(;;)
                                        {
                                                i = bound(1, floor(random() * maxclients) + 1, maxclients);
-                                               
+
                                                if(shuffleteams_players[i])
                                                {
                                                        continue; // a player is already assigned to this slot
@@ -1348,27 +1348,27 @@ void GameCommand_shuffleteams(float request)
                                        }
                                }
 
-                               // finally, from the list made earlier, re-join the players in different order. 
+                               // finally, from the list made earlier, re-join the players in different order.
                                for(i = 1; i <= t_teams; ++i)
                                {
                                        // find out how many players to assign to this team
                                        x = (t_players / t_teams);
                                        x = ((i == 1) ? ceil(x) : floor(x));
-                                       
+
                                        team_color = Team_NumberToTeam(i);
-                                       
-                                       // sort through the random list of players made earlier 
+
+                                       // sort through the random list of players made earlier
                                        for(z = 1; z <= maxclients; ++z)
-                                       {                                                       
-                                               if not(shuffleteams_teams[i] >= x)
+                                       {
+                                               if (!(shuffleteams_teams[i] >= x))
                                                {
-                                                       if not(shuffleteams_players[z])
+                                                       if (!(shuffleteams_players[z]))
                                                                continue; // not a player, move on to next random slot
-                                                               
+
                                                        if(VerifyClientNumber(shuffleteams_players[z]))
                                                                self = edict_num(shuffleteams_players[z]);
 
-                                                       if(self.team != team_color) 
+                                                       if(self.team != team_color)
                                                                MoveToTeam(self, team_color, 6);
 
                                                        shuffleteams_players[z] = 0;
@@ -1380,13 +1380,13 @@ void GameCommand_shuffleteams(float request)
                                                }
                                        }
                                }
-                               
+
                                bprint("Successfully shuffled the players around randomly.\n");
-                               
+
                                // clear the buffers now
                                for (i=0; i<SHUFFLETEAMS_MAX_PLAYERS; ++i)
                                        shuffleteams_players[i] = 0;
-                               
+
                                for (i=0; i<SHUFFLETEAMS_MAX_TEAMS; ++i)
                                        shuffleteams_teams[i] = 0;
                        }
@@ -1394,10 +1394,10 @@ void GameCommand_shuffleteams(float request)
                        {
                                print("Can't shuffle teams when currently not playing a team game.\n");
                        }
-                       
+
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -1425,19 +1425,19 @@ void GameCommand_stuffto(float request, float argc)
                        {
                                entity client = GetIndexedEntity(argc, 1);
                                float accepted = VerifyClientEntity(client, TRUE, FALSE);
-                               
+
                                if(accepted > 0)
                                {
                                        stuffcmd(client, strcat("\n", argv(next_token), "\n"));
                                        print(strcat("Command: \"", argv(next_token), "\" sent to ", GetCallerName(client), " (", argv(1) ,").\n"));
                                }
                                else
-                                       print("stuffto: ", GetClientErrorString(accepted, argv(1)), ".\n"); 
-                               
+                                       print("stuffto: ", GetClientErrorString(accepted, argv(1)), ".\n");
+
                                return;
                        }
                }
-                       
+
                default:
                        print("Incorrect parameters for ^2stuffto^7\n");
                case CMD_REQUEST_USAGE:
@@ -1466,7 +1466,7 @@ void GameCommand_trace(float request, float argc)
                        entity e;
                        vector org, delta, start, end, p, q, q0, pos, vv, dv;
                        float i, f, safe, unsafe, dq, dqf;
-       
+
                        switch(argv(1))
                        {
                                case "debug":
@@ -1559,7 +1559,7 @@ void GameCommand_trace(float request, float argc)
                                        }
                                        return;
                                }
-                                       
+
                                case "debug2":
                                {
                                        e = nextent(world);
@@ -1590,7 +1590,7 @@ void GameCommand_trace(float request, float argc)
                                        print("highest possible dist: ", ftos(f), "\n");
                                        return;
                                }
-                               
+
                                case "walk":
                                {
                                        if(argc == 4)
@@ -1603,7 +1603,7 @@ void GameCommand_trace(float request, float argc)
                                                return;
                                        }
                                }
-                               
+
                                case "showline":
                                {
                                        if(argc == 4)
@@ -1616,11 +1616,11 @@ void GameCommand_trace(float request, float argc)
                                                return;
                                        }
                                }
-                               
+
                                // no default case, just go straight to invalid
                        }
                }
-                       
+
                default:
                        print("Incorrect parameters for ^2trace^7\n");
                case CMD_REQUEST_USAGE:
@@ -1650,7 +1650,7 @@ void GameCommand_unlockteams(float request)
                        }
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -1674,7 +1674,7 @@ void GameCommand_warp(float request, float argc)
                                {
                                        CampaignLevelWarp(stof(argv(1)));
                                        print("Successfully warped to campaign level ", stof(argv(1)), ".\n");
-                               }       
+                               }
                                else
                                {
                                        CampaignLevelWarp(-1);
@@ -1685,7 +1685,7 @@ void GameCommand_warp(float request, float argc)
                                print("Not in campaign, can't level warp\n");
                        return;
                }
-               
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -1705,10 +1705,10 @@ void GameCommand_(float request)
        {
                case CMD_REQUEST_COMMAND:
                {
-                       
+
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -1765,10 +1765,10 @@ void GameCommand_macro_help()
 {
        #define SERVER_COMMAND(name,function,description) \
                { print("  ^2", name, "^7: ", description, "\n"); }
-               
+
        SERVER_COMMANDS(0, 0, "")
        #undef SERVER_COMMAND
-       
+
        return;
 }
 
@@ -1776,10 +1776,10 @@ float GameCommand_macro_command(float argc, string command)
 {
        #define SERVER_COMMAND(name,function,description) \
                { if(name == strtolower(argv(0))) { function; return TRUE; } }
-               
+
        SERVER_COMMANDS(CMD_REQUEST_COMMAND, argc, command)
        #undef SERVER_COMMAND
-       
+
        return FALSE;
 }
 
@@ -1787,10 +1787,10 @@ float GameCommand_macro_usage(float argc)
 {
        #define SERVER_COMMAND(name,function,description) \
                { if(name == strtolower(argv(1))) { function; return TRUE; } }
-               
+
        SERVER_COMMANDS(CMD_REQUEST_USAGE, argc, "")
        #undef SERVER_COMMAND
-       
+
        return FALSE;
 }
 
@@ -1798,13 +1798,13 @@ void GameCommand_macro_write_aliases(float fh)
 {
        #define SERVER_COMMAND(name,function,description) \
                { CMD_Write_Alias("qc_cmd_sv", name, description); }
-               
+
        SERVER_COMMANDS(0, 0, "")
        #undef SERVER_COMMAND
-       
+
        return;
 }
-       
+
 
 // =========================================
 //  Main Function Called By Engine (sv_cmd)
@@ -1814,33 +1814,33 @@ void GameCommand_macro_write_aliases(float fh)
 void GameCommand(string command)
 {
        float argc = tokenize_console(command);
-       
+
        // Guide for working with argc arguments by example:
        // argc:   1    - 2      - 3     - 4
-       // argv:   0    - 1      - 2     - 3 
+       // argv:   0    - 1      - 2     - 3
        // cmd     vote - master - login - password
 
-       if(strtolower(argv(0)) == "help") 
+       if(strtolower(argv(0)) == "help")
        {
-               if(argc == 1) 
+               if(argc == 1)
                {
                        print("\nServer console commands:\n");
                        GameCommand_macro_help();
-                       
+
                        print("\nBanning commands:\n");
                        BanCommand_macro_help();
-                       
+
                        print("\nCommon networked commands:\n");
                        CommonCommand_macro_help(world);
-                       
+
                        print("\nGeneric commands shared by all programs:\n");
                        GenericCommand_macro_help();
-                       
+
                        print("\nUsage:^3 sv_cmd COMMAND...^7, where possible commands are listed above.\n");
                        print("For help about a specific command, type sv_cmd help COMMAND\n");
-                       
+
                        return;
-               } 
+               }
                else if(BanCommand_macro_usage(argc)) // Instead of trying to call a command, we're going to see detailed information about it
                {
                        return;
@@ -1857,8 +1857,8 @@ void GameCommand(string command)
                {
                        return;
                }
-       } 
-       else if(BanCommand(command)) 
+       }
+       else if(BanCommand(command))
        {
                return; // handled by server/command/ipban.qc
        }
@@ -1866,7 +1866,7 @@ void GameCommand(string command)
        {
                return; // handled by server/command/common.qc
        }
-       else if(GenericCommand(command)) 
+       else if(GenericCommand(command))
        {
                return; // handled by common/command/generic.qc
        }
@@ -1874,9 +1874,9 @@ void GameCommand(string command)
        {
                return; // handled by one of the above GameCommand_* functions
        }
-       
+
        // nothing above caught the command, must be invalid
        print(((command != "") ? strcat("Unknown server command \"", command, "\"") : "No command provided"), ". For a list of supported commands, try sv_cmd help.\n");
-       
+
        return;
 }
index bb90536cf054f0c1cd3c878042add1b23c305071..e0016b25018f67b523adb617ccf6d7296fc6a4ad 100644 (file)
@@ -100,7 +100,7 @@ void Nagger_ReadyCounted()
 //  Game logic for voting
 // =======================
 
-void VoteReset() 
+void VoteReset()
 {
        entity tmp_player;
 
@@ -115,50 +115,50 @@ void VoteReset()
        vote_called = VOTE_NULL;
        vote_caller = world;
        vote_endtime = 0;
-       
+
        vote_called_command = string_null;
        vote_called_display = string_null;
-       
+
        vote_parsed_command = string_null;
        vote_parsed_display = string_null;
 
        Nagger_VoteChanged();
 }
 
-void VoteStop(entity stopper) 
+void VoteStop(entity stopper)
 {
        bprint("\{1}^2* ^3", GetCallerName(stopper), "^2 stopped ^3", GetCallerName(vote_caller), "^2's vote\n");
        if(autocvar_sv_eventlog) { GameLogEcho(strcat(":vote:vstop:", ftos(stopper.playerid))); }
-       
+
        // Don't force them to wait for next vote, this way they can e.g. correct their vote.
        if((vote_caller) && (stopper == vote_caller)) { vote_caller.vote_waittime = time + autocvar_sv_vote_stop; }
 
        VoteReset();
 }
 
-void VoteAccept() 
+void VoteAccept()
 {
        bprint("\{1}^2* ^3", GetCallerName(vote_caller), "^2's vote for ^1", vote_called_display, "^2 was accepted\n");
-       
+
        if((vote_called == VOTE_MASTER) && vote_caller)
                vote_caller.vote_master = 1;
        else
                localcmd(strcat(vote_called_command, "\n"));
-       
+
        if(vote_caller) { vote_caller.vote_waittime = 0; } // people like your votes, you don't need to wait to vote again
 
        VoteReset();
        Send_Notification(NOTIF_ALL, world, MSG_ANNCE, ANNCE_VOTE_ACCEPT);
 }
 
-void VoteReject() 
+void VoteReject()
 {
        bprint("\{1}^2* ^3", GetCallerName(vote_caller), "^2's vote for ", vote_called_display, "^2 was rejected\n");
        VoteReset();
        Send_Notification(NOTIF_ALL, world, MSG_ANNCE, ANNCE_VOTE_FAIL);
 }
 
-void VoteTimeout() 
+void VoteTimeout()
 {
        bprint("\{1}^2* ^3", GetCallerName(vote_caller), "^2's vote for ", vote_called_display, "^2 timed out\n");
        VoteReset();
@@ -173,7 +173,7 @@ void VoteSpam(float notvoters, float mincount, string result)
                ((mincount >= 0) ? strcat("^2 (^1", ftos(mincount), "^2 needed)") : "^2"),
                strcat(", ^1", ftos(vote_abstain_count), "^2 didn't care"),
                strcat(", ^1", ftos(notvoters), strcat("^2 didn't ", ((mincount >= 0) ? "" : "have to "), "vote\n"))));
-       
+
        if(autocvar_sv_eventlog)
        {
                GameLogEcho(strcat(
@@ -185,31 +185,31 @@ void VoteSpam(float notvoters, float mincount, string result)
        }
 }
 
-void VoteCount(float first_count) 
+void VoteCount(float first_count)
 {
        // declarations
        vote_accept_count = vote_reject_count = vote_abstain_count = 0;
-       
-       float spectators_allowed = ((autocvar_sv_vote_nospectators != 2) 
+
+       float spectators_allowed = ((autocvar_sv_vote_nospectators != 2)
                                || ((autocvar_sv_vote_nospectators == 1) && (warmup_stage || gameover))
                                || (autocvar_sv_vote_nospectators == 0));
-                               
+
        float vote_player_count = 0, notvoters = 0;
        float vote_real_player_count = 0, vote_real_accept_count = 0;
        float vote_real_reject_count = 0, vote_real_abstain_count = 0;
        float vote_needed_of_voted, final_needed_votes;
        float vote_factor_overall, vote_factor_of_voted;
-       
+
        entity tmp_player;
 
        Nagger_VoteCountChanged();
-       
+
        // add up all the votes from each connected client
        FOR_EACH_REALCLIENT(tmp_player)
        {
                ++vote_player_count;
                if(IS_PLAYER(tmp_player)) { ++vote_real_player_count; }
-               
+
                switch(tmp_player.vote_selection)
                {
                        case VOTE_SELECT_REJECT: { ++vote_reject_count; { if(IS_PLAYER(tmp_player)) ++vote_real_reject_count; } break; }
@@ -218,17 +218,17 @@ void VoteCount(float first_count)
                        default: break;
                }
        }
-       
+
        // Check to see if there are enough players on the server to allow master voting... otherwise, vote master could be used for evil.
-       if((vote_called == VOTE_MASTER) && autocvar_sv_vote_master_playerlimit > vote_player_count) 
+       if((vote_called == VOTE_MASTER) && autocvar_sv_vote_master_playerlimit > vote_player_count)
        {
                if(vote_caller) { vote_caller.vote_waittime = 0; }
                print_to(vote_caller, "^1There are not enough players on this server to allow you to become vote master.");
                VoteReset();
                return;
        }
-       
-       // if spectators aren't allowed to vote and there are players in a match, then only count the players in the vote and ignore spectators. 
+
+       // if spectators aren't allowed to vote and there are players in a match, then only count the players in the vote and ignore spectators.
        if(!spectators_allowed && (vote_real_player_count > 0))
        {
                vote_accept_count = vote_real_accept_count;
@@ -236,46 +236,46 @@ void VoteCount(float first_count)
                vote_abstain_count = vote_real_abstain_count;
                vote_player_count = vote_real_player_count;
        }
-       
+
        // people who have no opinion in any way :D
        notvoters = (vote_player_count - vote_accept_count - vote_reject_count - vote_abstain_count);
 
        // determine the goal for the vote to be passed or rejected normally
        vote_factor_overall = bound(0.5, autocvar_sv_vote_majority_factor, 0.999);
        vote_needed_overall = floor((vote_player_count - vote_abstain_count) * vote_factor_overall) + 1;
-       
+
        // if the vote times out, determine the amount of votes needed of the people who actually already voted
        vote_factor_of_voted = bound(0.5, autocvar_sv_vote_majority_factor_of_voted, 0.999);
        vote_needed_of_voted = floor((vote_accept_count + vote_reject_count) * vote_factor_of_voted) + 1;
-       
+
        // are there any players at all on the server? it could be an admin vote
        if(vote_player_count == 0 && first_count)
        {
-               VoteSpam(0, -1, "yes"); // no players at all, just accept it 
+               VoteSpam(0, -1, "yes"); // no players at all, just accept it
                VoteAccept();
                return;
        }
-       
-       // since there ARE players, finally calculate the result of the vote    
+
+       // since there ARE players, finally calculate the result of the vote
        if(vote_accept_count >= vote_needed_overall)
        {
                VoteSpam(notvoters, -1, "yes"); // there is enough acceptions to pass the vote
                VoteAccept();
                return;
        }
-       
+
        if(vote_reject_count > vote_player_count - vote_abstain_count - vote_needed_overall)
        {
                VoteSpam(notvoters, -1, "no"); // there is enough rejections to deny the vote
                VoteReject();
                return;
        }
-       
+
        // there is not enough votes in either direction, now lets just calculate what the voters have said
        if(time > vote_endtime)
        {
                final_needed_votes = vote_needed_overall;
-               
+
                if(autocvar_sv_vote_majority_factor_of_voted)
                {
                        if(vote_accept_count >= vote_needed_of_voted)
@@ -284,31 +284,31 @@ void VoteCount(float first_count)
                                VoteAccept();
                                return;
                        }
-                       
+
                        if(vote_accept_count + vote_reject_count > 0)
                        {
                                VoteSpam(notvoters, min(vote_needed_overall, vote_needed_of_voted), "no");
                                VoteReject();
                                return;
                        }
-                       
+
                        final_needed_votes = min(vote_needed_overall, vote_needed_of_voted);
                }
 
-               // it didn't pass or fail, so not enough votes to even make a decision. 
+               // it didn't pass or fail, so not enough votes to even make a decision.
                VoteSpam(notvoters, final_needed_votes, "timeout");
                VoteTimeout();
        }
 }
 
-void VoteThink() 
+void VoteThink()
 {
        if(vote_endtime > 0) // a vote was called
        if(time > vote_endtime) // time is up
        {
                VoteCount(FALSE);
        }
-       
+
        return;
 }
 
@@ -391,13 +391,13 @@ void reset_map(float dorespawn)
 }
 
 // Restarts the map after the countdown is over (and cvar sv_ready_restart_after_countdown is set)
-void ReadyRestart_think() 
+void ReadyRestart_think()
 {
        restart_mapalreadyrestarted = 1;
        reset_map(TRUE);
        Score_ClearAll();
        remove(self);
-       
+
        return;
 }
 
@@ -455,7 +455,7 @@ void ReadyRestart_force()
        if(autocvar_sv_timeout) { FOR_EACH_REALPLAYER(tmp_player) { tmp_player.allowed_timeouts = autocvar_sv_timeout_number; } }
 
        //reset map immediately if this cvar is not set
-       if not(autocvar_sv_ready_restart_after_countdown) { reset_map(TRUE); }
+       if (!autocvar_sv_ready_restart_after_countdown) { reset_map(TRUE); }
 
        if(autocvar_sv_eventlog) { GameLogEcho(":restart"); }
 }
@@ -463,17 +463,17 @@ void ReadyRestart_force()
 void ReadyRestart()
 {
        // no arena, assault support yet...
-       if(g_arena | g_assault | gameover | intermission_running | race_completing)
+       if(g_assault | gameover | intermission_running | race_completing)
                localcmd("restart\n");
        else
                localcmd("\nsv_hook_gamerestart\n");
 
        // Reset ALL scores, but only do that at the beginning of the countdown if sv_ready_restart_after_countdown is off!
        // Otherwise scores could be manipulated during the countdown.
-       if not(autocvar_sv_ready_restart_after_countdown) { Score_ClearAll(); }
+       if (!autocvar_sv_ready_restart_after_countdown) { Score_ClearAll(); }
 
        ReadyRestart_force();
-       
+
        return;
 }
 
@@ -499,12 +499,12 @@ void ReadyCount()
 
        ready_needed_factor = bound(0.5, cvar("g_warmup_majority_factor"), 0.999);
        ready_needed_count = floor(t_players * ready_needed_factor) + 1;
-       
+
        if(readycount >= ready_needed_count)
        {
                ReadyRestart();
        }
-               
+
        return;
 }
 
@@ -516,9 +516,9 @@ void ReadyCount()
 float Votecommand_check_assignment(entity caller, float assignment)
 {
        float from_server = (!caller);
-       
-       if((assignment == VC_ASGNMNT_BOTH) 
-               || ((!from_server && assignment == VC_ASGNMNT_CLIENTONLY) 
+
+       if((assignment == VC_ASGNMNT_BOTH)
+               || ((!from_server && assignment == VC_ASGNMNT_CLIENTONLY)
                || (from_server && assignment == VC_ASGNMNT_SERVERONLY)))
        {
                return TRUE;
@@ -527,15 +527,15 @@ float Votecommand_check_assignment(entity caller, float assignment)
        return FALSE;
 }
 
-string VoteCommand_extractcommand(string input, float startpos, float argc) 
+string VoteCommand_extractcommand(string input, float startpos, float argc)
 {
        string output;
-       
+
        if((argc - 1) < startpos)
                output = "";
        else
                output = substring(input, argv_start_index(startpos), argv_end_index(-1) - argv_start_index(startpos));
-               
+
        return output;
 }
 
@@ -546,30 +546,30 @@ float VoteCommand_checknasty(string vote_command)
                || (strstrofs(vote_command, "\r", 0) >= 0)
                || (strstrofs(vote_command, "$", 0) >= 0))
                return FALSE;
-               
+
        return TRUE;
 }
 
 float VoteCommand_checkinlist(string vote_command, string list)
 {
        string l = strcat(" ", list, " ");
-       
+
        if(strstrofs(l, strcat(" ", vote_command, " "), 0) >= 0)
                return TRUE;
-       
+
        return FALSE;
 }
 
 string ValidateMap(string validated_map, entity caller)
 {
        validated_map = MapInfo_FixName(validated_map);
-       
-       if not(validated_map)
+
+       if (!validated_map)
        {
                print_to(caller, "This map is not available on this server.");
                return string_null;
        }
-       
+
        if(!autocvar_sv_vote_override_mostrecent && caller)
        {
                if(Map_IsRecent(validated_map))
@@ -578,7 +578,7 @@ string ValidateMap(string validated_map, entity caller)
                        return string_null;
                }
        }
-       
+
        if(!MapInfo_CheckMap(validated_map))
        {
                print_to(caller, strcat("^1Invalid mapname, \"^3", validated_map, "^1\" does not support the current game mode."));
@@ -665,13 +665,13 @@ float VoteCommand_checkargs(float startpos, float argc)
 float VoteCommand_parse(entity caller, string vote_command, string vote_list, float startpos, float argc)
 {
        string first_command;
-       
+
        first_command = argv(startpos);
 
-       /*dprint(sprintf("VoteCommand_parse(): Command: '%s', Length: %f.\n",
+       /*printf("VoteCommand_parse(): Command: '%s', Length: %f.\n",
                substring(vote_command, argv_start_index(startpos), strlen(vote_command) - argv_start_index(startpos)),
                strlen(substring(vote_command, argv_start_index(startpos), strlen(vote_command) - argv_start_index(startpos)))
-       ));*/
+       );*/
 
        if(
                (autocvar_sv_vote_limit > 0)
@@ -680,10 +680,10 @@ float VoteCommand_parse(entity caller, string vote_command, string vote_list, fl
        )
                return FALSE;
 
-       if not(VoteCommand_checkinlist(first_command, vote_list))
+       if (!VoteCommand_checkinlist(first_command, vote_list))
                return FALSE;
 
-       if not(VoteCommand_checkargs(startpos, argc))
+       if (!VoteCommand_checkargs(startpos, argc))
                return FALSE;
 
        switch(first_command) // now go through and parse the proper commands to adjust as needed.
@@ -693,43 +693,43 @@ float VoteCommand_parse(entity caller, string vote_command, string vote_list, fl
                {
                        entity victim = GetIndexedEntity(argc, (startpos + 1));
                        float accepted = VerifyClientEntity(victim, TRUE, FALSE);
-                       
+
                        if(accepted > 0)
                        {
                                string reason = ((argc > next_token) ? substring(vote_command, argv_start_index(next_token), strlen(vote_command) - argv_start_index(next_token)) : "No reason provided");
                                string command_arguments;
-                               
+
                                if(first_command == "kickban")
                                        command_arguments = strcat(ftos(autocvar_g_ban_default_bantime), " ", ftos(autocvar_g_ban_default_masksize), " ~");
                                else
                                        command_arguments = reason;
-                               
+
                                vote_parsed_command = strcat(first_command, " # ", ftos(num_for_edict(victim)), " ", command_arguments);
                                vote_parsed_display = strcat("^1", vote_command, " (^7", victim.netname, "^1): ", reason);
                        }
                        else { print_to(caller, strcat("vcall: ", GetClientErrorString(accepted, argv(startpos + 1)), ".\n")); return FALSE; }
-                       
+
                        break;
                }
-               
+
                case "map":
                case "chmap":
                case "gotomap": // re-direct all map selection commands to gotomap
                {
                        vote_command = ValidateMap(argv(startpos + 1), caller);
-                       if not(vote_command) { return FALSE; }
+                       if (!vote_command) { return FALSE; }
                        vote_parsed_command = strcat("gotomap ", vote_command);
                        vote_parsed_display = strzone(strcat("^1", vote_parsed_command));
-                       
+
                        break;
                }
-               
-               default: 
-               { 
+
+               default:
+               {
                        vote_parsed_command = vote_command;
                        vote_parsed_display = strzone(strcat("^1", vote_command));
-                       
-                       break; 
+
+                       break;
                }
        }
 
@@ -747,9 +747,9 @@ void VoteCommand_abstain(float request, entity caller) // CLIENT ONLY
        {
                case CMD_REQUEST_COMMAND:
                {
-                       if not(vote_called) { print_to(caller, "^1No vote called."); }
-                       else if not(caller.vote_selection == VOTE_SELECT_NULL || autocvar_sv_vote_change) { print_to(caller, "^1You have already voted."); }
-                       
+                       if (!vote_called) { print_to(caller, "^1No vote called."); }
+                       else if(caller.vote_selection != VOTE_SELECT_NULL && !autocvar_sv_vote_change) { print_to(caller, "^1You have already voted."); }
+
                        else // everything went okay, continue changing vote
                        {
                                print_to(caller, "^1You abstained from your vote.");
@@ -757,10 +757,10 @@ void VoteCommand_abstain(float request, entity caller) // CLIENT ONLY
                                msg_entity = caller;
                                if(!autocvar_sv_vote_singlecount) { VoteCount(FALSE); }
                        }
-                       
+
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -777,23 +777,23 @@ void VoteCommand_call(float request, entity caller, float argc, string vote_comm
        {
                case CMD_REQUEST_COMMAND:
                {
-                       float spectators_allowed = ((autocvar_sv_vote_nospectators != 2) 
-                               || ((autocvar_sv_vote_nospectators == 1) && warmup_stage) 
+                       float spectators_allowed = ((autocvar_sv_vote_nospectators != 2)
+                               || ((autocvar_sv_vote_nospectators == 1) && warmup_stage)
                                || (autocvar_sv_vote_nospectators == 0));
-                               
+
                        float tmp_playercount = 0;
                        entity tmp_player;
-                       
+
                        vote_command = VoteCommand_extractcommand(vote_command, 2, argc);
-                       
-                       if not(autocvar_sv_vote_call || !caller) { print_to(caller, "^1Vote calling is not allowed."); }
+
+                       if(!autocvar_sv_vote_call && caller) { print_to(caller, "^1Vote calling is not allowed."); }
                        else if(!autocvar_sv_vote_gamestart && time < game_starttime) { print_to(caller, "^1Vote calling is not allowed before the match has started."); }
                        else if(vote_called) { print_to(caller, "^1There is already a vote called."); }
                        else if(!spectators_allowed && (caller && !IS_PLAYER(caller))) { print_to(caller, "^1Only players can call a vote."); }
                        else if(timeout_status) { print_to(caller, "^1You can not call a vote while a timeout is active."); }
                        else if(caller && (time < caller.vote_waittime)) { print_to(caller, strcat("^1You have to wait ^2", ftos(ceil(caller.vote_waittime - time)), "^1 seconds before you can again call a vote.")); }
-                       else if not(VoteCommand_checknasty(vote_command)) { print_to(caller, "^1Syntax error in command, see 'vhelp' for more info."); }
-                       else if not(VoteCommand_parse(caller, vote_command, autocvar_sv_vote_commands, 2, argc)) { print_to(caller, "^1This command is not acceptable, see 'vhelp' for more info."); }
+                       else if (!VoteCommand_checknasty(vote_command)) { print_to(caller, "^1Syntax error in command, see 'vhelp' for more info."); }
+                       else if (!VoteCommand_parse(caller, vote_command, autocvar_sv_vote_commands, 2, argc)) { print_to(caller, "^1This command is not acceptable, see 'vhelp' for more info."); }
 
                        else // everything went okay, continue with calling the vote
                        {
@@ -802,26 +802,26 @@ void VoteCommand_call(float request, entity caller, float argc, string vote_comm
                                vote_called_command = strzone(vote_parsed_command);
                                vote_called_display = strzone(vote_parsed_display);
                                vote_endtime = time + autocvar_sv_vote_timeout;
-                               
+
                                if(caller)
                                {
                                        caller.vote_selection = VOTE_SELECT_ACCEPT;
                                        caller.vote_waittime = time + autocvar_sv_vote_wait;
                                        msg_entity = caller;
                                }
-                               
+
                                FOR_EACH_REALCLIENT(tmp_player) { ++tmp_playercount; }
                                if(tmp_playercount > 1) { Send_Notification(NOTIF_ALL, world, MSG_ANNCE, ANNCE_VOTE_CALL); } // don't announce a "vote now" sound if player is alone
-                               
+
                                bprint("\{1}^2* ^3", GetCallerName(vote_caller), "^2 calls a vote for ", vote_called_display, "\n");
                                if(autocvar_sv_eventlog) { GameLogEcho(strcat(":vote:vcall:", ftos(vote_caller.playerid), ":", vote_called_display)); }
                                Nagger_VoteChanged();
                                VoteCount(TRUE); // needed if you are the only one
                        }
-                       
+
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -847,11 +847,11 @@ void VoteCommand_master(float request, entity caller, float argc, string vote_co
                                        case "do":
                                        {
                                                vote_command = VoteCommand_extractcommand(vote_command, 3, argc);
-                                               
-                                               if not(caller.vote_master) { print_to(caller, "^1You do not have vote master privelages."); }
-                                               else if not(VoteCommand_checknasty(vote_command)) { print_to(caller, "^1Syntax error in command, see 'vhelp' for more info."); }
-                                               else if not(VoteCommand_parse(caller, vote_command, strcat(autocvar_sv_vote_commands, " ", autocvar_sv_vote_master_commands), 3, argc)) { print_to(caller, "^1This command is not acceptable, see 'vhelp' for more info."); }
-                                               
+
+                                               if (!caller.vote_master) { print_to(caller, "^1You do not have vote master privelages."); }
+                                               else if (!VoteCommand_checknasty(vote_command)) { print_to(caller, "^1Syntax error in command, see 'vhelp' for more info."); }
+                                               else if (!VoteCommand_parse(caller, vote_command, strcat(autocvar_sv_vote_commands, " ", autocvar_sv_vote_master_commands), 3, argc)) { print_to(caller, "^1This command is not acceptable, see 'vhelp' for more info."); }
+
                                                else // everything went okay, proceed with command
                                                {
                                                        localcmd(strcat(vote_parsed_command, "\n"));
@@ -859,15 +859,15 @@ void VoteCommand_master(float request, entity caller, float argc, string vote_co
                                                        bprint("\{1}^2* ^3", GetCallerName(caller), "^2 used their ^3master^2 status to do \"^2", vote_parsed_display, "^2\".\n");
                                                        if(autocvar_sv_eventlog) { GameLogEcho(strcat(":vote:vdo:", ftos(caller.playerid), ":", vote_parsed_display)); }
                                                }
-                                               
+
                                                return;
                                        }
-                                       
+
                                        case "login":
                                        {
-                                               if not(autocvar_sv_vote_master_password != "") { print_to(caller, "^1Login to vote master is not allowed."); }
+                                               if(autocvar_sv_vote_master_password == "") { print_to(caller, "^1Login to vote master is not allowed."); }
                                                else if(caller.vote_master) { print_to(caller, "^1You are already logged in as vote master."); }
-                                               else if not(autocvar_sv_vote_master_password == argv(3)) { print_to(caller, strcat("Rejected vote master login from ", GetCallerName(caller))); }
+                                               else if(autocvar_sv_vote_master_password != argv(3)) { print_to(caller, strcat("Rejected vote master login from ", GetCallerName(caller))); }
 
                                                else // everything went okay, proceed with giving this player master privilages
                                                {
@@ -876,21 +876,21 @@ void VoteCommand_master(float request, entity caller, float argc, string vote_co
                                                        bprint("\{1}^2* ^3", GetCallerName(caller), "^2 logged in as ^3master^2\n");
                                                        if(autocvar_sv_eventlog) { GameLogEcho(strcat(":vote:vlogin:", ftos(caller.playerid))); }
                                                }
-                                               
+
                                                return;
                                        }
-                                       
+
                                        default: // calling a vote for master
                                        {
-                                               float spectators_allowed = ((autocvar_sv_vote_nospectators != 2) 
-                                                       || ((autocvar_sv_vote_nospectators == 1) && warmup_stage) 
+                                               float spectators_allowed = ((autocvar_sv_vote_nospectators != 2)
+                                                       || ((autocvar_sv_vote_nospectators == 1) && warmup_stage)
                                                        || (autocvar_sv_vote_nospectators == 0));
-                                               
-                                               if not(autocvar_sv_vote_master_callable) { print_to(caller, "^1Vote to become vote master is not allowed."); }
+
+                                               if (!autocvar_sv_vote_master_callable) { print_to(caller, "^1Vote to become vote master is not allowed."); }
                                                else if(vote_called) { print_to(caller, "^1There is already a vote called."); }
                                                else if(!spectators_allowed && (caller && !IS_PLAYER(caller))) { print_to(caller, "^1Only players can call a vote."); }
                                                else if(timeout_status) { print_to(caller, "^1You can not call a vote while a timeout is active."); }
-                                               
+
                                                else // everything went okay, continue with creating vote
                                                {
                                                        vote_caller = caller;
@@ -898,25 +898,25 @@ void VoteCommand_master(float request, entity caller, float argc, string vote_co
                                                        vote_called_command = strzone("XXX");
                                                        vote_called_display = strzone("^3master");
                                                        vote_endtime = time + autocvar_sv_vote_timeout;
-                                                       
+
                                                        caller.vote_selection = VOTE_SELECT_ACCEPT;
                                                        caller.vote_waittime = time + autocvar_sv_vote_wait;
-                                                       
+
                                                        bprint("\{1}^2* ^3", GetCallerName(vote_caller), "^2 calls a vote to become ^3master^2.\n");
                                                        if(autocvar_sv_eventlog) { GameLogEcho(strcat(":vote:vcall:", ftos(vote_caller.playerid), ":", vote_called_display)); }
                                                        Nagger_VoteChanged();
                                                        VoteCount(TRUE); // needed if you are the only one
                                                }
-                                               
+
                                                return;
                                        }
                                }
                        }
                        else { print_to(caller, "^1Master control of voting is not allowed."); }
-                       
+
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -934,10 +934,10 @@ void VoteCommand_no(float request, entity caller) // CLIENT ONLY
        {
                case CMD_REQUEST_COMMAND:
                {
-                       if not(vote_called) { print_to(caller, "^1No vote called."); }
-                       else if not(caller.vote_selection == VOTE_SELECT_NULL || autocvar_sv_vote_change) { print_to(caller, "^1You have already voted."); }
+                       if (!vote_called) { print_to(caller, "^1No vote called."); }
+                       else if(caller.vote_selection != VOTE_SELECT_NULL && !autocvar_sv_vote_change) { print_to(caller, "^1You have already voted."); }
                        else if(((caller == vote_caller) || caller.vote_master) && autocvar_sv_vote_no_stops_vote) { VoteStop(caller); }
-                       
+
                        else // everything went okay, continue changing vote
                        {
                                print_to(caller, "^1You rejected the vote.");
@@ -945,10 +945,10 @@ void VoteCommand_no(float request, entity caller) // CLIENT ONLY
                                msg_entity = caller;
                                if(!autocvar_sv_vote_singlecount) { VoteCount(FALSE); }
                        }
-                       
+
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -969,10 +969,10 @@ void VoteCommand_status(float request, entity caller) // BOTH
                                print_to(caller, strcat("^7Vote for ", vote_called_display, "^7 called by ^7", GetCallerName(vote_caller), "^7."));
                        else
                                print_to(caller, "^1No vote called.");
-                               
+
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -989,13 +989,13 @@ void VoteCommand_stop(float request, entity caller) // BOTH
        {
                case CMD_REQUEST_COMMAND:
                {
-                       if not(vote_called) { print_to(caller, "^1No vote called."); }
+                       if (!vote_called) { print_to(caller, "^1No vote called."); }
                        else if((caller == vote_caller) || !caller || caller.vote_master) { VoteStop(caller); }
                        else { print_to(caller, "^1You are not allowed to stop that vote."); }
-                       
+
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -1012,9 +1012,9 @@ void VoteCommand_yes(float request, entity caller) // CLIENT ONLY
        {
                case CMD_REQUEST_COMMAND:
                {
-                       if not(vote_called) { print_to(caller, "^1No vote called."); }
-                       else if not(caller.vote_selection == VOTE_SELECT_NULL || autocvar_sv_vote_change) { print_to(caller, "^1You have already voted."); }
-                       
+                       if (!vote_called) { print_to(caller, "^1No vote called."); }
+                       else if(caller.vote_selection != VOTE_SELECT_NULL && autocvar_sv_vote_change) { print_to(caller, "^1You have already voted."); }
+
                        else // everything went okay, continue changing vote
                        {
                                print_to(caller, "^1You accepted the vote.");
@@ -1022,10 +1022,10 @@ void VoteCommand_yes(float request, entity caller) // CLIENT ONLY
                                msg_entity = caller;
                                if(!autocvar_sv_vote_singlecount) { VoteCount(FALSE); }
                        }
-                       
+
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -1044,10 +1044,10 @@ void VoteCommand_(float request)
        {
                case CMD_REQUEST_COMMAND:
                {
-                       
+
                        return;
                }
-                       
+
                default:
                case CMD_REQUEST_USAGE:
                {
@@ -1085,10 +1085,10 @@ void VoteCommand_macro_help(entity caller, float argc)
                print_to(caller, "\nVoting commands:\n");
                #define VOTE_COMMAND(name,function,description,assignment) \
                        { if(Votecommand_check_assignment(caller, assignment)) { print_to(caller, strcat("  ^2", name, "^7: ", description)); } }
-                       
+
                VOTE_COMMANDS(0, caller, 0, "")
                #undef VOTE_COMMAND
-               
+
                print_to(caller, strcat("\nUsage:^3 ", command_origin, " vote COMMAND...^7, where possible commands are listed above.\n"));
                print_to(caller, strcat("For help about a specific command, type ", command_origin, " vote help COMMAND"));
                print_to(caller, strcat("\n^7You can call a vote for or execute these commands: ^3", autocvar_sv_vote_commands, "^7 and maybe further ^3arguments^7"));
@@ -1097,11 +1097,11 @@ void VoteCommand_macro_help(entity caller, float argc)
        {
                #define VOTE_COMMAND(name,function,description,assignment) \
                        { if(Votecommand_check_assignment(caller, assignment)) { if(name == strtolower(argv(2))) { function; return; } } }
-                       
+
                VOTE_COMMANDS(CMD_REQUEST_USAGE, caller, argc, "")
                #undef VOTE_COMMAND
        }
-       
+
        return;
 }
 
@@ -1109,10 +1109,10 @@ float VoteCommand_macro_command(entity caller, float argc, string vote_command)
 {
        #define VOTE_COMMAND(name,function,description,assignment) \
                { if(Votecommand_check_assignment(caller, assignment)) { if(name == strtolower(argv(1))) { function; return TRUE; } } }
-               
+
        VOTE_COMMANDS(CMD_REQUEST_COMMAND, caller, argc, vote_command)
        #undef VOTE_COMMAND
-       
+
        return FALSE;
 }
 
@@ -1121,13 +1121,13 @@ float VoteCommand_macro_command(entity caller, float argc, string vote_command)
 //  Main function handling vote commands
 // ======================================
 
-void VoteCommand(float request, entity caller, float argc, string vote_command) 
+void VoteCommand(float request, entity caller, float argc, string vote_command)
 {
        // Guide for working with argc arguments by example:
        // argc:   1    - 2      - 3     - 4
-       // argv:   0    - 1      - 2     - 3 
+       // argv:   0    - 1      - 2     - 3
        // cmd     vote - master - login - password
-       
+
        switch(request)
        {
                case CMD_REQUEST_COMMAND:
@@ -1135,7 +1135,7 @@ void VoteCommand(float request, entity caller, float argc, string vote_command)
                        if(VoteCommand_macro_command(caller, argc, vote_command))
                                return;
                }
-                       
+
                default:
                        print_to(caller, strcat(((argv(1) != "") ? strcat("Unknown vote command \"", argv(1), "\"") : "No command provided"), ". For a list of supported commands, try ", GetCommandPrefix(caller), " vote help.\n"));
                case CMD_REQUEST_USAGE:
index 1225b6be582cecb5feb9ecb6a645d1fd161d0ab6..0386e1d5a187f033da2ffc6ab7a6f99ebf98a6e7 100644 (file)
@@ -27,7 +27,7 @@ float vote_accept_count; // total amount of players who accept the vote (counted
 float vote_reject_count; // same as above, but rejected
 float vote_abstain_count; // same as above, but abstained
 float vote_needed_overall; // total amount of players NEEDED for a vote to pass (based on sv_vote_majority_factor)
-.float vote_master; // flag for if the player has vote master privelages 
+.float vote_master; // flag for if the player has vote master privelages
 .float vote_waittime; // flag for how long the player must wait before they can vote again
 .float vote_selection; // flag for which vote selection the player has made (See VOTE_SELECT_*)
 string vote_called_command; // command sent by client
index 3554f1ff67235142f837507183b772c41c841c09..4d208ebda808341f778f242ba0135d7255bd29d9 100644 (file)
@@ -52,7 +52,7 @@ float CSQCProjectile_SendEntity(entity to, float sf)
 
        if(sf & 2)
                WriteByte(MSG_ENTITY, self.csqcprojectile_type); // TODO maybe put this into sf?
-       
+
        return 1;
 }
 
@@ -69,9 +69,9 @@ void CSQCProjectile_Check(entity e)
 void CSQCProjectile(entity e, float clientanimate, float type, float docull)
 {
        Net_LinkEntity(e, docull, 0, CSQCProjectile_SendEntity);
-       
+
        e.csqcprojectile_clientanimate = clientanimate;
-       
+
        if(e.movetype == MOVETYPE_TOSS || e.movetype == MOVETYPE_BOUNCE)
        {
                if(e.gravity == 0)
@@ -85,6 +85,10 @@ void CSQCProjectile(entity e, float clientanimate, float type, float docull)
        e.csqcprojectile_type = type;
 }
 
+// FIXME HACK
+float ItemSend(entity to, float sf);
+void ItemUpdate(entity item);
+// END HACK
 void UpdateCSQCProjectile(entity e)
 {
        if(e.SendEntity == CSQCProjectile_SendEntity)
@@ -92,6 +96,12 @@ void UpdateCSQCProjectile(entity e)
                // send new origin data
                e.SendFlags |= 0x01;
        }
+// FIXME HACK
+       else if(e.SendEntity == ItemSend)
+       {
+               ItemUpdate(e);
+       }
+// END HACK
 }
 
 void UpdateCSQCProjectileAfterTeleport(entity e)
index c7aebd58f500fe35862ba387133f4a5fd2da5fe4..536dee3ed1fb464479bd11620f38fea1e06103e7 100644 (file)
@@ -55,7 +55,7 @@ float team1_score, team2_score, team3_score, team4_score;
 float maxclients;
 
 // flag set on worldspawn so that the code knows if it is dedicated or not
-float server_is_dedicated; 
+float server_is_dedicated;
 
 // Fields
 
@@ -73,7 +73,8 @@ float server_is_dedicated;
 //.float       style;
 //.float       skill;
 .float sounds;
-.float  platmovetype;
+.string  platmovetype;
+.float platmovetype_start, platmovetype_end;
 
 .string killtarget;
 
@@ -103,6 +104,7 @@ float server_is_dedicated;
 .float play_time;
 .float respawn_flags;
 .float respawn_time;
+.float respawn_time_max;
 .float death_time;
 .float fade_time;
 .float fade_rate;
@@ -457,7 +459,6 @@ void W_Porto_Remove (entity p);
 
 .string message2;
 
-vector railgun_start, railgun_end; // filled by FireRailgunBullet, used by damage code for head shot
 .float stat_allow_oldnexbeam;
 
 // reset to 0 on weapon switch
@@ -470,10 +471,11 @@ void target_voicescript_clear(entity pl);
 .string target2;
 .string target3;
 .string target4;
+.string curvetarget;
 .float target_random;
 .float trigger_reverse;
 
-// Nexball 
+// Nexball
 .entity ballcarried; // Also used for keepaway
 .float metertime;
 float g_nexball_meter_period;
@@ -514,8 +516,8 @@ string matchid;
 
 .float last_pickup;
 
-.float hit_time; 
-.float typehit_time; 
+.float hit_time;
+.float typehit_time;
 
 .float stat_leadlimit;
 
index 8fce148d1f2aadb097a4dbb953af1b7260d890d0..7b3af04bfd9aa9f988f72f7e9a53b28d4ad2a96c 100644 (file)
@@ -26,13 +26,13 @@ float entcs_customize()
        o = self.owner;
        if(o.deadflag != DEAD_NO)
                return FALSE;
-       if not(IS_PLAYER(o))
+       if (!IS_PLAYER(o))
                return FALSE;
        if(other == o)
                return FALSE;
        if((IS_PLAYER(other)) || other.caplayer)
                if(!teamplay || o.team != other.team)
-                       if not (radar_showennemies)
+                       if (!radar_showennemies)
                                return FALSE;
        return TRUE;
 }
index 8dca538f1a417a46b271458557e8ecda139a3870..d67e79cd4d3396e45b74e9747291036680fc968d 100644 (file)
@@ -70,7 +70,7 @@ void LaunchDebris (string debrisname, vector force)
 void func_breakable_colormod()
 {
        float h;
-       if not(self.spawnflags & 2)
+       if (!(self.spawnflags & 2))
                return;
        h = self.health / self.max_health;
        if(h < 0.25)
@@ -79,6 +79,8 @@ void func_breakable_colormod()
                self.colormod = '1 0 0' + '0 1 0' * (2 * h - 0.5);
        else
                self.colormod = '1 1 1';
+               
+       CSQCMODEL_AUTOUPDATE();
 }
 
 void func_breakable_look_destroyed()
@@ -140,12 +142,16 @@ void func_breakable_destroyed()
 {
        func_breakable_look_destroyed();
        func_breakable_behave_destroyed();
+       
+       CSQCMODEL_AUTOUPDATE();
 }
 
 void func_breakable_restore()
 {
        func_breakable_look_restore();
        func_breakable_behave_restore();
+       
+       CSQCMODEL_AUTOUPDATE();
 }
 
 vector debrisforce; // global, set before calling this
@@ -217,6 +223,8 @@ void func_breakable_reset()
                func_breakable_behave_destroyed();
        else
                func_breakable_behave_restore();
+               
+       CSQCMODEL_AUTOUPDATE();
 }
 
 // destructible walls that can be used to trigger target_objective_decrease
@@ -268,6 +276,8 @@ void spawnfunc_func_breakable() {
 
        self.reset = func_breakable_reset;
        func_breakable_reset();
+       
+       CSQCMODEL_AUTOINIT();
 }
 
 // for use in maps with a "model" key set
index 6a6587ec80f950ec55fe00e9b63cdfe473e2c907..2ee79c407f2a16092a8d580d11fdefc70a070027 100644 (file)
@@ -128,7 +128,7 @@ void GiveFrags (entity attacker, entity targ, float f, float deathtype)
                        }
 
                        if(warmup_stage)
-                               GiveFrags_randomweapons.weapons = warmup_start_weapons;
+                               GiveFrags_randomweapons.weapons = WARMUP_START_WEAPONS;
                        else
                                GiveFrags_randomweapons.weapons = start_weapons;
 
@@ -147,7 +147,7 @@ void GiveFrags (entity attacker, entity targ, float f, float deathtype)
                }
 
                // after a frag, choose another random weapon set
-               if not(attacker.weapons & WepSet_FromWeapon(attacker.weapon))
+               if (!(attacker.weapons & WepSet_FromWeapon(attacker.weapon)))
                        W_SwitchWeapon_Force(attacker, w_getbestweapon(attacker));
        }
 
@@ -225,7 +225,7 @@ void Obituary_SpecialDeath(
        if(DEATH_ISSPECIAL(deathtype))
        {
                entity deathent = deathtypes[(deathtype - DT_FIRST)];
-               if not(deathent) { backtrace("Obituary_SpecialDeath: Could not find deathtype entity!\n"); return; }
+               if (!deathent) { backtrace("Obituary_SpecialDeath: Could not find deathtype entity!\n"); return; }
 
                if(murder)
                {
@@ -311,11 +311,11 @@ float Obituary_WeaponDeath(
                }
                else
                {
-                       dprint(sprintf(
+                       dprintf(
                                "Obituary_WeaponDeath(): ^1Deathtype ^7(%d)^1 has no notification for weapon %d!\n",
                                deathtype,
                                death_weapon
-                       ));
+                       );
                }
 
                return TRUE;
@@ -326,7 +326,7 @@ float Obituary_WeaponDeath(
 void Obituary(entity attacker, entity inflictor, entity targ, float deathtype)
 {
        // Sanity check
-       if not(IS_PLAYER(targ)) { backtrace("Obituary called on non-player?!\n"); return; }
+       if (!IS_PLAYER(targ)) { backtrace("Obituary called on non-player?!\n"); return; }
 
        // Declarations
        float notif_firstblood = FALSE;
@@ -349,7 +349,7 @@ void Obituary(entity attacker, entity inflictor, entity targ, float deathtype)
                )
        );
        #endif
-       
+
        // =======
        // SUICIDE
        // =======
@@ -370,7 +370,7 @@ void Obituary(entity attacker, entity inflictor, entity targ, float deathtype)
                                                Obituary_SpecialDeath(targ, FALSE, deathtype, targ.netname, deathlocation, "", targ.killcount, 0, 0);
                                                break;
                                        }
-                                       
+
                                        default:
                                        {
                                                Obituary_SpecialDeath(targ, FALSE, deathtype, targ.netname, deathlocation, "", targ.killcount, 0, 0);
@@ -379,7 +379,7 @@ void Obituary(entity attacker, entity inflictor, entity targ, float deathtype)
                                }
                        }
                }
-               else if not(Obituary_WeaponDeath(targ, FALSE, deathtype, targ.netname, deathlocation, "", targ.killcount, 0))
+               else if (!Obituary_WeaponDeath(targ, FALSE, deathtype, targ.netname, deathlocation, "", targ.killcount, 0))
                {
                        backtrace("SUICIDE: what the hell happened here?\n");
                        return;
@@ -399,7 +399,7 @@ void Obituary(entity attacker, entity inflictor, entity targ, float deathtype)
                        GiveFrags(attacker, targ, -1, deathtype);
 
                        attacker.killcount = 0;
-                       
+
                        Send_Notification(NOTIF_ONE, attacker, MSG_CENTER, CENTER_DEATH_TEAMKILL_FRAG, targ.netname);
                        Send_Notification(NOTIF_ONE, targ, MSG_CENTER, CENTER_DEATH_TEAMKILL_FRAGGED, attacker.netname);
                        Send_Notification(NOTIF_ALL, world, MSG_INFO, APP_TEAM_NUM_4(targ.team, INFO_DEATH_TEAMKILL_), targ.netname, attacker.netname, deathlocation, targ.killcount);
@@ -493,7 +493,7 @@ void Obituary(entity attacker, entity inflictor, entity targ, float deathtype)
                                );
                        }
 
-                       if not(Obituary_WeaponDeath(targ, TRUE, deathtype, targ.netname, attacker.netname, deathlocation, targ.killcount, kill_count_to_attacker))
+                       if (!Obituary_WeaponDeath(targ, TRUE, deathtype, targ.netname, attacker.netname, deathlocation, targ.killcount, kill_count_to_attacker))
                                Obituary_SpecialDeath(targ, TRUE, deathtype, targ.netname, attacker.netname, deathlocation, targ.killcount, kill_count_to_attacker, 0);
                }
        }
@@ -527,7 +527,7 @@ void Obituary(entity attacker, entity inflictor, entity targ, float deathtype)
                                        0);
                                break;
                        }
-                       
+
                        default:
                        {
                                Obituary_SpecialDeath(targ, FALSE, deathtype, targ.netname, deathlocation, "", targ.killcount, 0, 0);
@@ -558,7 +558,7 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float
 {
        float mirrordamage;
        float mirrorforce;
-       float complainteamdamage = 0; 
+       float complainteamdamage = 0;
        entity attacker_save;
        mirrordamage = 0;
        mirrorforce = 0;
@@ -596,7 +596,7 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float
                // exit the vehicle before killing (fixes a crash)
                if(IS_PLAYER(targ) && targ.vehicle)
                        vehicles_exit(VHEF_RELESE);
-       
+
                // These are ALWAYS lethal
                // No damage modification here
                // Instead, prepare the victim for his death...
@@ -643,7 +643,7 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float
 
                                                        if(autocvar_g_mirrordamage_virtual)
                                                        {
-                                                               vector v  = healtharmor_applydamage(attacker.armorvalue, autocvar_g_balance_armor_blockpercent, mirrordamage);
+                                                               vector v  = healtharmor_applydamage(attacker.armorvalue, autocvar_g_balance_armor_blockpercent, deathtype, mirrordamage);
                                                                attacker.dmg_take += v_x;
                                                                attacker.dmg_save += v_y;
                                                                attacker.dmg_inflictor = inflictor;
@@ -653,7 +653,7 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float
 
                                                        if(autocvar_g_friendlyfire_virtual)
                                                        {
-                                                               vector v = healtharmor_applydamage(targ.armorvalue, autocvar_g_balance_armor_blockpercent, damage);
+                                                               vector v = healtharmor_applydamage(targ.armorvalue, autocvar_g_balance_armor_blockpercent, deathtype, damage);
                                                                targ.dmg_take += v_x;
                                                                targ.dmg_save += v_y;
                                                                targ.dmg_inflictor = inflictor;
@@ -669,7 +669,7 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float
                        }
                }
 
-               if not(DEATH_ISSPECIAL(deathtype))
+               if (!DEATH_ISSPECIAL(deathtype))
                {
                        damage *= g_weapondamagefactor;
                        mirrordamage *= g_weapondamagefactor;
@@ -677,7 +677,7 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float
                        force = force * g_weaponforcefactor;
                        mirrorforce *= g_weaponforcefactor;
                }
-               
+
                // should this be changed at all? If so, in what way?
                frag_attacker = attacker;
                frag_target = targ;
@@ -689,8 +689,8 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float
                damage = frag_damage;
                mirrordamage = frag_mirrordamage;
                force = frag_force;
-               
-               if not(g_minstagib)
+
+               if (!g_minstagib)
                {
                        // apply strength multiplier
                        if (attacker.items & IT_STRENGTH)
@@ -749,7 +749,7 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float
                                                damage_goodhits += 1;
                                                damage_gooddamage += damage;
 
-                                               if not(DEATH_ISSPECIAL(deathtype))
+                                               if (!DEATH_ISSPECIAL(deathtype))
                                                {
                                                        if(IS_PLAYER(targ)) // don't do this for vehicles
                                                        if(IsFlying(victim))
@@ -924,12 +924,12 @@ float RadiusDamage (entity inflictor, entity attacker, float coredamage, float e
                                                        mininv_f = (vlen(force) * (1-tfloorforce)) / autocvar_g_throughfloor_force_max_stddev;
 
                                                        if(autocvar_g_throughfloor_debug)
-                                                               print(sprintf("THROUGHFLOOR: D=%f F=%f max(dD)=1/%f max(dF)=1/%f", finaldmg, vlen(force), mininv_d, mininv_f));
+                                                               printf("THROUGHFLOOR: D=%f F=%f max(dD)=1/%f max(dF)=1/%f", finaldmg, vlen(force), mininv_d, mininv_f);
 
                                                        total = 0.25 * pow(max(mininv_f, mininv_d), 2);
 
                                                        if(autocvar_g_throughfloor_debug)
-                                                               print(sprintf(" steps=%f", total));
+                                                               printf(" steps=%f", total);
 
                                                        if (IS_PLAYER(targ))
                                                                total = ceil(bound(autocvar_g_throughfloor_min_steps_player, total, autocvar_g_throughfloor_max_steps_player));
@@ -937,7 +937,7 @@ float RadiusDamage (entity inflictor, entity attacker, float coredamage, float e
                                                                total = ceil(bound(autocvar_g_throughfloor_min_steps_other, total, autocvar_g_throughfloor_max_steps_other));
 
                                                        if(autocvar_g_throughfloor_debug)
-                                                               print(sprintf(" steps=%f dD=%f dF=%f", total, finaldmg * (1-tfloordmg) / (2 * sqrt(total)), vlen(force) * (1-tfloorforce) / (2 * sqrt(total))));
+                                                               printf(" steps=%f dD=%f dF=%f", total, finaldmg * (1-tfloordmg) / (2 * sqrt(total)), vlen(force) * (1-tfloorforce) / (2 * sqrt(total)));
 
                                                        for(c = 0; c < total; ++c)
                                                        {
@@ -964,7 +964,7 @@ float RadiusDamage (entity inflictor, entity attacker, float coredamage, float e
                                                        force = force * a;
 
                                                        if(autocvar_g_throughfloor_debug)
-                                                               print(sprintf(" D=%f F=%f\n", finaldmg, vlen(force)));
+                                                               printf(" D=%f F=%f\n", finaldmg, vlen(force));
                                                }
 
                                                // laser force adjustments :P
@@ -1098,7 +1098,7 @@ float Fire_AddDamage(entity e, entity o, float d, float t, float dt)
                if(maxtime > mintime || maxdps > mindps)
                {
                        // Constraints:
-                       
+
                        // damage we have right now
                        mindamage = mindps * mintime;
 
@@ -1187,7 +1187,7 @@ void Fire_ApplyDamage(entity e)
        float t, d, hi, ty;
        entity o;
 
-       if not(Fire_IsBurning(e))
+       if (!Fire_IsBurning(e))
                return;
 
        for(t = 0, o = e.owner; o.owner && t < 16; o = o.owner, ++t);
@@ -1216,12 +1216,12 @@ void Fire_ApplyDamage(entity e)
        }
        e.fire_hitsound = TRUE;
 
-       if not(IS_INDEPENDENT_PLAYER(e))
+       if (!IS_INDEPENDENT_PLAYER(e))
        FOR_EACH_PLAYER(other) if(e != other)
        {
                if(IS_PLAYER(other))
                if(other.deadflag == DEAD_NO)
-               if not(IS_INDEPENDENT_PLAYER(other))
+               if (!IS_INDEPENDENT_PLAYER(other))
                if(boxesoverlap(e.absmin, e.absmax, other.absmin, other.absmax))
                {
                        t = autocvar_g_balance_firetransfer_time * (e.fire_endtime - time);
index bde5e580a054b3912ceb0fe86f41f31c2b7607b3..0df6ba0aee59c4cc5a070ce9f20bdc6da263d50c 100644 (file)
@@ -274,12 +274,12 @@ void GrapplingHook_Damage (entity inflictor, entity attacker, float damage, floa
 {
        if(self.health <= 0)
                return;
-               
+
        if (!W_CheckProjectileDamage(inflictor.realowner, self.realowner, deathtype, -1)) // no exceptions
                return; // g_balance_projectiledamage says to halt
-                       
+
        self.health = self.health - damage;
-               
+
        if (self.health <= 0)
        {
                if(attacker != self.realowner)
@@ -383,7 +383,7 @@ void GrapplingHookFrame()
                // offhand hook controls
                if(self.BUTTON_HOOK)
                {
-                       if not(self.hook || (self.hook_state & HOOK_WAITING_FOR_RELEASE))
+                       if (!(self.hook || (self.hook_state & HOOK_WAITING_FOR_RELEASE)))
                        {
                                self.hook_state |= HOOK_FIRING;
                                self.hook_state |= HOOK_WAITING_FOR_RELEASE;
index 20a78b7c9dec1cb40a0a00bc3a4d395c1ca07dd0..8a2fe9ef3334faf5d067d2ca101ee235428f62df 100644 (file)
@@ -59,7 +59,7 @@ float g_clientmodel_genericsendentity (entity to, float sf)
                sf |= 0x40;
        if(self.lodmodelindex1)
                sf |= 0x80;
-       
+
        WriteByte(MSG_ENTITY, ENT_CLIENT_WALL);
        WriteByte(MSG_ENTITY, sf);
 
index 6444ffdb3cec98fcf7f97114736f340c493964ef..3d6d2cfc218171ce5092947762fce13e69f488c2 100644 (file)
@@ -1,6 +1,5 @@
 void SUB_NullThink(void) { }
 
-void(vector destangle, float tspeed, void() func) SUB_CalcAngleMove;
 void()  SUB_CalcMoveDone;
 void() SUB_CalcAngleMoveDone;
 //void() SUB_UseTargets;
@@ -15,8 +14,8 @@ void spawnfunc_info_null (void)
 void setanim(entity e, vector anim, float looping, float override, float restart)
 {
        if (!anim)
-               return; // no animation was given to us! We can't use this. 
-               
+               return; // no animation was given to us! We can't use this.
+
        if (anim_x == e.animstate_startframe)
        if (anim_y == e.animstate_numframes)
        if (anim_z == e.animstate_framerate)
@@ -153,6 +152,7 @@ void SUB_CalcMoveDone (void)
                self.think1 ();
 }
 
+.float platmovetype_turn;
 void SUB_CalcMove_controller_think (void)
 {
        entity oldself;
@@ -162,6 +162,7 @@ void SUB_CalcMove_controller_think (void)
        vector delta;
        vector delta2;
        vector veloc;
+       vector angloc;
        vector nextpos;
        delta = self.destvec;
        delta2 = self.destvec2;
@@ -170,23 +171,31 @@ void SUB_CalcMove_controller_think (void)
 
                traveltime = self.animstate_endtime - self.animstate_starttime;
                phasepos = (nexttick - self.animstate_starttime) / traveltime; // range: [0, 1]
-               if(self.platmovetype != 1)
-               {
-                       phasepos = 3.14159265 + (phasepos * 3.14159265); // range: [pi, 2pi]
-                       phasepos = cos(phasepos); // cos [pi, 2pi] is in [-1, 1]
-                       phasepos = phasepos + 1; // correct range to [0, 2]
-                       phasepos = phasepos / 2; // correct range to [0, 1]
-               }
+               phasepos = cubic_speedfunc(self.platmovetype_start, self.platmovetype_end, phasepos);
                nextpos = self.origin + (delta * phasepos) + (delta2 * phasepos * phasepos);
                // derivative: delta + 2 * delta2 * phasepos (e.g. for angle positioning)
 
-               if(nexttick < self.animstate_endtime) {
+               if(self.owner.platmovetype_turn)
+               {
+                       vector destangle;
+                       destangle = delta + 2 * delta2 * phasepos;
+                       destangle = vectoangles(destangle);
+                       destangle_x = -destangle_x; // flip up / down orientation
+
+                       // take the shortest distance for the angles
+                       self.owner.angles_x -= 360 * floor((self.owner.angles_x - destangle_x) / 360 + 0.5);
+                       self.owner.angles_y -= 360 * floor((self.owner.angles_y - destangle_y) / 360 + 0.5);
+                       self.owner.angles_z -= 360 * floor((self.owner.angles_z - destangle_z) / 360 + 0.5);
+                       angloc = destangle - self.owner.angles;
+                       angloc = angloc * (1 / sys_frametime); // so it arrives for the next frame
+                       self.owner.avelocity = angloc;
+               }
+               if(nexttick < self.animstate_endtime)
                        veloc = nextpos - self.owner.origin;
-                       veloc = veloc * (1 / sys_frametime); // so it arrives for the next frame
-               } else {
+               else
                        veloc = self.finaldest - self.owner.origin;
-                       veloc = veloc * (1 / sys_frametime); // so it arrives for the next frame
-               }
+               veloc = veloc * (1 / sys_frametime); // so it arrives for the next frame
+
                self.owner.velocity = veloc;
                self.nextthink = nexttick;
        } else {
@@ -211,6 +220,7 @@ void SUB_CalcMove_controller_setbezier (entity controller, vector org, vector co
 
        controller.destvec = 2 * control; // control point
        controller.destvec2 = dest - 2 * control; // quadratic part required to reach end point
+       // also: initial d/dphasepos origin = 2 * control, final speed = 2 * (dest - control)
 }
 
 void SUB_CalcMove_controller_setlinear (entity controller, vector org, vector dest)
@@ -226,7 +236,13 @@ void SUB_CalcMove_controller_setlinear (entity controller, vector org, vector de
        controller.destvec2 = '0 0 0';
 }
 
-void SUB_CalcMove_Bezier (vector tcontrol, vector tdest, float tspeed, void() func)
+float TSPEED_TIME = -1;
+float TSPEED_LINEAR = 0;
+float TSPEED_START = 1;
+float TSPEED_END = 2;
+// TODO average too?
+
+void SUB_CalcMove_Bezier (vector tcontrol, vector tdest, float tspeedtype, float tspeed, void() func)
 {
        float   traveltime;
        entity controller;
@@ -238,10 +254,22 @@ void SUB_CalcMove_Bezier (vector tcontrol, vector tdest, float tspeed, void() fu
        self.finaldest = tdest;
        self.think = SUB_CalcMoveDone;
 
-       if(tspeed > 0) // positive: start speed
-               traveltime = 2 * vlen(tcontrol - self.origin) /  tspeed;
-       else // negative: end speed
-               traveltime = 2 * vlen(tcontrol - tdest)       / -tspeed;
+       switch(tspeedtype)
+       {
+               default:
+               case TSPEED_START:
+                       traveltime = 2 * vlen(tcontrol - self.origin) / tspeed;
+                       break;
+               case TSPEED_END:
+                       traveltime = 2 * vlen(tcontrol - tdest)       / tspeed;
+                       break;
+               case TSPEED_LINEAR:
+                       traveltime = vlen(tdest - self.origin)        / tspeed;
+                       break;
+               case TSPEED_TIME:
+                       traveltime = tspeed;
+                       break;
+       }
 
        if (traveltime < 0.1) // useless anim
        {
@@ -254,6 +282,8 @@ void SUB_CalcMove_Bezier (vector tcontrol, vector tdest, float tspeed, void() fu
        controller.classname = "SUB_CalcMove_controller";
        controller.owner = self;
        controller.platmovetype = self.platmovetype;
+       controller.platmovetype_start = self.platmovetype_start;
+       controller.platmovetype_end = self.platmovetype_end;
        SUB_CalcMove_controller_setbezier(controller, self.origin, tcontrol, tdest);
        controller.finaldest = (tdest + '0 0 0.125'); // where do we want to end? Offset to overshoot a bit.
        controller.animstate_starttime = time;
@@ -264,14 +294,14 @@ void SUB_CalcMove_Bezier (vector tcontrol, vector tdest, float tspeed, void() fu
        // the thinking is now done by the controller
        self.think = SUB_NullThink; // for PushMove
        self.nextthink = self.ltime + traveltime;
-       
+
        // invoke controller
        self = controller;
        self.think();
        self = self.owner;
 }
 
-void SUB_CalcMove (vector tdest, float tspeed, void() func)
+void SUB_CalcMove (vector tdest, float tspeedtype, float tspeed, void() func)
 {
        vector  delta;
        float   traveltime;
@@ -291,13 +321,25 @@ void SUB_CalcMove (vector tdest, float tspeed, void() func)
        }
 
        delta = tdest - self.origin;
-       traveltime = vlen (delta) / tspeed;
+
+       switch(tspeedtype)
+       {
+               default:
+               case TSPEED_START:
+               case TSPEED_END:
+               case TSPEED_LINEAR:
+                       traveltime = vlen (delta) / tspeed;
+                       break;
+               case TSPEED_TIME:
+                       traveltime = tspeed;
+                       break;
+       }
 
        // Very short animations don't really show off the effect
        // of controlled animation, so let's just use linear movement.
        // Alternatively entities can choose to specify non-controlled movement.
         // The only currently implemented alternative movement is linear (value 1)
-       if (traveltime < 0.15 || self.platmovetype == 1)
+       if (traveltime < 0.15 || (self.platmovetype_start == 1 && self.platmovetype_end == 1)) // is this correct?
        {
                self.velocity = delta * (1/traveltime); // QuakeC doesn't allow vector/float division
                self.nextthink = self.ltime + traveltime;
@@ -305,17 +347,17 @@ void SUB_CalcMove (vector tdest, float tspeed, void() func)
        }
 
        // now just run like a bezier curve...
-       SUB_CalcMove_Bezier((self.origin + tdest) * 0.5, tdest, tspeed, func);
+       SUB_CalcMove_Bezier((self.origin + tdest) * 0.5, tdest, tspeedtype, tspeed, func);
 }
 
-void SUB_CalcMoveEnt (entity ent, vector tdest, float tspeed, void() func)
+void SUB_CalcMoveEnt (entity ent, vector tdest, float tspeedtype, float tspeed, void() func)
 {
        entity  oldself;
 
        oldself = self;
        self = ent;
 
-       SUB_CalcMove (tdest, tspeed, func);
+       SUB_CalcMove (tdest, tspeedtype, tspeed, func);
 
        self = oldself;
 }
@@ -341,7 +383,7 @@ void SUB_CalcAngleMoveDone (void)
 }
 
 // FIXME: I fixed this function only for rotation around the main axes
-void SUB_CalcAngleMove (vector destangle, float tspeed, void() func)
+void SUB_CalcAngleMove (vector destangle, float tspeedtype, float tspeed, void() func)
 {
        vector  delta;
        float   traveltime;
@@ -354,7 +396,19 @@ void SUB_CalcAngleMove (vector destangle, float tspeed, void() func)
        self.angles_y -= 360 * floor((self.angles_y - destangle_y) / 360 + 0.5);
        self.angles_z -= 360 * floor((self.angles_z - destangle_z) / 360 + 0.5);
        delta = destangle - self.angles;
-       traveltime = vlen (delta) / tspeed;
+
+       switch(tspeedtype)
+       {
+               default:
+               case TSPEED_START:
+               case TSPEED_END:
+               case TSPEED_LINEAR:
+                       traveltime = vlen (delta) / tspeed;
+                       break;
+               case TSPEED_TIME:
+                       traveltime = tspeed;
+                       break;
+       }
 
        self.think1 = func;
        self.finalangle = destangle;
@@ -371,14 +425,14 @@ void SUB_CalcAngleMove (vector destangle, float tspeed, void() func)
        self.nextthink = self.ltime + traveltime;
 }
 
-void SUB_CalcAngleMoveEnt (entity ent, vector destangle, float tspeed, void() func)
+void SUB_CalcAngleMoveEnt (entity ent, vector destangle, float tspeedtype, float tspeed, void() func)
 {
        entity  oldself;
 
        oldself = self;
        self = ent;
 
-       SUB_CalcAngleMove (destangle, tspeed, func);
+       SUB_CalcAngleMove (destangle, tspeedtype, tspeed, func);
 
        self = oldself;
 }
@@ -413,7 +467,7 @@ void tracebox_antilag_force_wz (entity source, vector v1, vector mi, vector ma,
        // check whether antilagged traces are enabled
        if (lag < 0.001)
                lag = 0;
-       if not(IS_REAL_CLIENT(forent))
+       if (!IS_REAL_CLIENT(forent))
                lag = 0; // only antilag for clients
 
        // change shooter to SOLID_BBOX so the shot can hit corpses
@@ -480,7 +534,7 @@ void WarpZone_tracebox_antilag (entity source, vector v1, vector mi, vector ma,
        tracebox_antilag_force_wz(source, v1, mi, ma, v2, nomonst, forent, lag, TRUE);
 }
 
-float tracebox_inverted (vector v1, vector mi, vector ma, vector v2, float nomonsters, entity forent, float stopatentity) // returns the number of traces done, for benchmarking
+float tracebox_inverted (vector v1, vector mi, vector ma, vector v2, float nomonsters, entity forent, float stopatentity, entity ignorestopatentity) // returns the number of traces done, for benchmarking
 {
        vector pos, dir, t;
        float nudge;
@@ -498,7 +552,7 @@ float tracebox_inverted (vector v1, vector mi, vector ma, vector v2, float nomon
 
        for(;;)
        {
-               if((pos - v1) * dir >= (v2 - v1) * dir)
+               if(pos * dir >= v2 * dir)
                {
                        // went too far
                        trace_fraction = 1;
@@ -533,7 +587,7 @@ float tracebox_inverted (vector v1, vector mi, vector ma, vector v2, float nomon
                                pos = t + dir * nudge;
 
                                // but if we hit an entity, stop RIGHT before it
-                               if(stopatentity && stopentity)
+                               if(stopatentity && stopentity && stopentity != ignorestopatentity)
                                {
                                        trace_ent = stopentity;
                                        trace_endpos = t;
@@ -558,9 +612,9 @@ float tracebox_inverted (vector v1, vector mi, vector ma, vector v2, float nomon
        }
 }
 
-void traceline_inverted (vector v1, vector v2, float nomonsters, entity forent, float stopatentity)
+void traceline_inverted (vector v1, vector v2, float nomonsters, entity forent, float stopatentity, entity ignorestopatentity)
 {
-       tracebox_inverted(v1, '0 0 0', '0 0 0', v2, nomonsters, forent, stopatentity);
+       tracebox_inverted(v1, '0 0 0', '0 0 0', v2, nomonsters, forent, stopatentity, ignorestopatentity);
 }
 
 /*
@@ -745,7 +799,7 @@ void LODmodel_attach()
        }
 
        if(self.lodmodelindex1)
-               if not(self.SendEntity)
+               if (!self.SendEntity)
                        SetCustomizer(self, LOD_customize, LOD_uncustomize);
 }
 
index 90ef516d5f3ed32f2a805b1c20f6c133895d646c..f0ea33b61ee5bcad2117cd34089b7f9cfe85f35d 100644 (file)
@@ -262,7 +262,7 @@ void PieceMinsMaxs(float rot, float pc)
                tet_piecemins_y = 1;
                tet_piecemaxs_y = sz_y;
        }
-       //print(sprintf("ce%v sz%v mi%v ma%v\n", ce, sz, tet_piecemins, tet_piecemaxs));
+       //printf("ce%v sz%v mi%v ma%v\n", ce, sz, tet_piecemins, tet_piecemaxs);
        if (rot == 1) // 90 degrees
        {
                t = tet_piecemins_y;
@@ -653,7 +653,7 @@ float BastetSearch(float buf, float pc, float x, float y, float rot, float move_
                s = BastetSearch(buf, pc, x, y+1, rot, move_bias + 2); if(s > sm) sm = s;
                if(s < 0)
                {
-                       //print(sprintf("MAY CEMENT AT: %d %d %d\n", x, y, rot));
+                       //printf("MAY CEMENT AT: %d %d %d\n", x, y, rot);
                        // moving down did not work - that means we can fixate the block here
                        t1 = gettime(GETTIME_HIRES);
 
@@ -699,7 +699,7 @@ float BastetPiece()
        b = buf_create(); bastet_piece[6] = 7; bastet_score[6] = BastetSearch(b, 7, TET_START_PIECE_POS_x, 1+TET_START_PIECE_POS_y, TET_START_PIECE_POS_y, TET_WIDTH) + 100 * random() + bastet_piecetime[6]; buf_del(b);
 
        var float t2 = gettime(GETTIME_HIRES);
-       dprint(sprintf("Time taken: %.6f seconds (of this, ev = %.2f%%, cm = %.2f%%)\n", t2 - t1, 100 * bastet_profile_evaluate_time / (t2 - t1), 100 * bastet_profile_checkmetrics_time / (t2 - t1)));
+       dprintf("Time taken: %.6f seconds (of this, ev = %.2f%%, cm = %.2f%%)\n", t2 - t1, 100 * bastet_profile_evaluate_time / (t2 - t1), 100 * bastet_profile_checkmetrics_time / (t2 - t1));
 
        // sort
        float i, j, k, p, s;
@@ -707,7 +707,7 @@ float BastetPiece()
 /*
        for(i = 0; i < 7; ++i)
        {
-               print(sprintf("piece %s value = %d\n", substring("OJLIZST", bastet_piece[i]-1, 1), bastet_score[i]));
+               printf("piece %s value = %d\n", substring("OJLIZST", bastet_piece[i]-1, 1), bastet_score[i]);
        }
 */
 
index 359bf84a362e3ce7d73dbc6e33f0bbd372cacbf3..c0e81fa8916d66d961ac88c259dca131922c03b4 100644 (file)
@@ -164,7 +164,7 @@ void multi_trigger()
 
        if (self.classname == "trigger_secret")
        {
-               if not(IS_PLAYER(self.enemy))
+               if (!IS_PLAYER(self.enemy))
                        return;
                found_secrets = found_secrets + 1;
                WriteByte (MSG_ALL, SVC_FOUNDSECRET);
@@ -205,8 +205,8 @@ void multi_use()
 
 void multi_touch()
 {
-       if not(self.spawnflags & 2)
-               if not(other.iscreature)
+       if (!(self.spawnflags & 2))
+               if (!other.iscreature)
                        return;
 
        if(self.team)
@@ -441,7 +441,7 @@ void trigger_hurt_use()
 .float triggerhurttime;
 void trigger_hurt_touch()
 {
-       if (self.active != ACTIVE_ACTIVE) 
+       if (self.active != ACTIVE_ACTIVE)
                return;
 
        if(self.team)
@@ -459,7 +459,7 @@ void trigger_hurt_touch()
 
                        entity own;
                        own = self.enemy;
-                       if not(IS_PLAYER(own))
+                       if (!IS_PLAYER(own))
                        {
                                own = self;
                                self.enemy = world; // I still hate you all
@@ -532,9 +532,9 @@ float tracebox_hits_trigger_hurt(vector start, vector mi, vector ma, vector end)
 .float triggerhealtime;
 void trigger_heal_touch()
 {
-       if (self.active != ACTIVE_ACTIVE) 
+       if (self.active != ACTIVE_ACTIVE)
                return;
-       
+
        // only do the EXACTTRIGGER_TOUCH checks when really needed (saves some cpu)
        if (other.iscreature)
        {
@@ -544,7 +544,7 @@ void trigger_heal_touch()
                {
                        EXACTTRIGGER_TOUCH;
                        other.triggerhealtime = time + 1;
-                       
+
                        if (other.health < self.max_health)
                        {
                                other.health = min(other.health + self.health, self.max_health);
@@ -558,7 +558,7 @@ void trigger_heal_touch()
 void spawnfunc_trigger_heal()
 {
        self.active = ACTIVE_ACTIVE;
-       
+
        EXACTTRIGGER_INIT;
        self.touch = trigger_heal_touch;
        if (!self.health)
@@ -628,7 +628,7 @@ void trigger_gravity_touch()
 
        g = self.gravity;
 
-       if not(self.spawnflags & 1)
+       if (!(self.spawnflags & 1))
        {
                if(other.trigger_gravity_check)
                {
@@ -691,7 +691,7 @@ void spawnfunc_trigger_gravity()
 void target_speaker_use_off();
 void target_speaker_use_activator()
 {
-       if not(IS_REAL_CLIENT(activator))
+       if (!IS_REAL_CLIENT(activator))
                return;
        string snd;
        if(substring(self.noise, 0, 1) == "*")
@@ -942,7 +942,7 @@ void spawnfunc_func_pointparticles()
                setmodel(self, self.model);
        if(self.noise != "")
                precache_sound (self.noise);
-       
+
        if(!self.bgmscriptsustain)
                self.bgmscriptsustain = 1;
        else if(self.bgmscriptsustain < 0)
@@ -1164,7 +1164,7 @@ void misc_laser_think()
        if(self.enemy)
        {
                o = self.enemy.origin;
-               if not(self.spawnflags & 2)
+               if (!(self.spawnflags & 2))
                        o = self.origin + normalize(o - self.origin) * 32768;
        }
        else
@@ -1369,7 +1369,7 @@ void trigger_impulse_touch1()
     float pushdeltatime;
     float str;
 
-       if (self.active != ACTIVE_ACTIVE) 
+       if (self.active != ACTIVE_ACTIVE)
                return;
 
        if (!isPushable(other))
@@ -1409,7 +1409,7 @@ void trigger_impulse_touch2()
 {
     float pushdeltatime;
 
-       if (self.active != ACTIVE_ACTIVE) 
+       if (self.active != ACTIVE_ACTIVE)
                return;
 
        if (!isPushable(other))
@@ -1433,7 +1433,7 @@ void trigger_impulse_touch3()
     float pushdeltatime;
     float str;
 
-       if (self.active != ACTIVE_ACTIVE) 
+       if (self.active != ACTIVE_ACTIVE)
                return;
 
        if (!isPushable(other))
@@ -1766,7 +1766,7 @@ void target_voicescript_next(entity pl)
                return;
        if(vs.message == "")
                return;
-       if not(IS_PLAYER(pl))
+       if (!IS_PLAYER(pl))
                return;
        if(gameover)
                return;
@@ -1819,7 +1819,7 @@ void spawnfunc_target_voicescript()
        //          added after this message
        // wait: average time between messages
        // delay: initial delay before the first message
-       
+
        float i, n;
        self.use = target_voicescript_use;
 
@@ -1918,13 +1918,13 @@ string trigger_magicear_processmessage(entity ear, entity source, float teamsay,
        dotrigger = ((IS_PLAYER(source)) && (source.deadflag == DEAD_NO) && ((ear.radius == 0) || (vlen(source.origin - ear.origin) <= ear.radius)));
        domatch = ((ear.spawnflags & 32) || dotrigger);
 
-       if not(domatch)
+       if (!domatch)
                return msgin;
 
-       if not(msgin)
+       if (!msgin)
        {
                // we are in TUBA mode!
-               if not(ear.spawnflags & 256)
+               if (!(ear.spawnflags & 256))
                        return msgin;
 
                if(!W_Tuba_HasPlayed(source, ear.message, ear.movedir_x, !(ear.spawnflags & 512), ear.movedir_y, ear.movedir_z))
@@ -1970,7 +1970,7 @@ string trigger_magicear_processmessage(entity ear, entity source, float teamsay,
                        if(ear.spawnflags & 8)
                                return msgin;
        }
-       
+
        matchstart = -1;
        l = strlen(ear.message);
 
@@ -2062,7 +2062,7 @@ string trigger_magicear_processmessage_forallears(entity source, float teamsay,
        for(ear = magicears; ear; ear = ear.enemy)
        {
                msgout = trigger_magicear_processmessage(ear, source, teamsay, privatesay, msgin);
-               if not(ear.spawnflags & 64)
+               if (!(ear.spawnflags & 64))
                        if(magicear_matched)
                                return msgout;
                msgin = msgout;
@@ -2110,9 +2110,9 @@ void spawnfunc_trigger_magicear()
 void relay_activators_use()
 {
        entity trg, os;
-       
+
        os = self;
-       
+
        for(trg = world; (trg = find(trg, targetname, os.target)); )
        {
                self = trg;
@@ -2124,11 +2124,11 @@ void relay_activators_use()
                        if(os.cnt == ACTIVE_TOGGLE)
                                if(trg.active == ACTIVE_ACTIVE)
                                        trg.active = ACTIVE_NOT;
-                               else    
+                               else
                                        trg.active = ACTIVE_ACTIVE;
                        else
                                trg.active = os.cnt;
-               }               
+               }
        }
        self = os;
 }
@@ -2142,13 +2142,13 @@ void spawnfunc_relay_activate()
 void spawnfunc_relay_deactivate()
 {
        self.cnt = ACTIVE_NOT;
-       self.use = relay_activators_use;        
+       self.use = relay_activators_use;
 }
 
 void spawnfunc_relay_activatetoggle()
 {
        self.cnt = ACTIVE_TOGGLE;
-       self.use = relay_activators_use;        
+       self.use = relay_activators_use;
 }
 
 .string chmap, gametype;
index d654b91d53f0405ab82f58cf7da6a070a512a9ca..42c2d7a8e4e74cad37e0a1cacc88f0b74361fd6e 100644 (file)
@@ -253,7 +253,6 @@ void cvar_changes_init()
 
                // mapinfo
                BADCVAR("fraglimit");
-               BADCVAR("g_arena");
                BADCVAR("g_assault");
                BADCVAR("g_ca");
                BADCVAR("g_ca_teams");
@@ -304,7 +303,6 @@ void cvar_changes_init()
 
                // does nothing visible
                BADCVAR("captureleadlimit_override");
-               BADCVAR("g_arena_point_leadlimit");
                BADCVAR("g_balance_kill_delay");
                BADCVAR("g_ca_point_leadlimit");
                BADCVAR("g_ctf_captimerecord_always");
@@ -323,7 +321,6 @@ void cvar_changes_init()
                BADCVAR("sv_fraginfo");
                BADCVAR("sv_timeout");
                BADPREFIX("sv_timeout_");
-               BADCVAR("welcome_message_time");
                BADPREFIX("crypto_");
                BADPREFIX("g_chat_");
                BADPREFIX("g_ctf_captimerecord_");
@@ -429,7 +426,7 @@ void cvar_changes_init()
                BADCVAR("g_nix");
                BADCVAR("g_grappling_hook");
                BADCVAR("g_jetpack");
-               
+
 #undef BADPREFIX
 #undef BADCVAR
 
@@ -1049,6 +1046,8 @@ float() MaplistMethod_Iterate = // usual method
 {
        float pass, i;
 
+       dprint("Trying MaplistMethod_Iterate\n");
+
        for(pass = 1; pass <= 2; ++pass)
        {
                for(i = 1; i < Map_Count; ++i)
@@ -1064,6 +1063,8 @@ float() MaplistMethod_Iterate = // usual method
 
 float() MaplistMethod_Repeat = // fallback method
 {
+       dprint("Trying MaplistMethod_Repeat\n");
+
        if(Map_Check(Map_Current, 2))
                return Map_Current;
        return -2;
@@ -1073,6 +1074,8 @@ float() MaplistMethod_Random = // random map selection
 {
        float i, imax;
 
+       dprint("Trying MaplistMethod_Random\n");
+
        imax = 42;
 
        for(i = 0; i <= imax; ++i)
@@ -1091,6 +1094,8 @@ float(float exponent) MaplistMethod_Shuffle = // more clever shuffling
 {
        float i, j, imax, insertpos;
 
+       dprint("Trying MaplistMethod_Shuffle\n");
+
        imax = 42;
 
        for(i = 0; i <= imax; ++i)
@@ -1125,10 +1130,14 @@ float(float exponent) MaplistMethod_Shuffle = // more clever shuffling
 void Maplist_Init()
 {
        Map_Count = tokenizebyseparator(autocvar_g_maplist, " ");
-       if(Map_Count == 0)
+       float i;
+       for (i = 0; i < Map_Count; ++i)
+               if (Map_Check(i, 2))
+                       break;
+       if (i == Map_Count)
        {
-               bprint( "Maplist is empty!  Resetting it to default map list.\n" );
-               cvar_set("g_maplist", MapInfo_ListAllAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags()));
+               bprint( "Maplist contains no usable maps!  Resetting it to default map list.\n" );
+               cvar_set("g_maplist", MapInfo_ListAllAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags() | MAPINFO_FLAG_NOAUTOMAPLIST));
                if(autocvar_g_maplist_shuffle)
                        ShuffleMaplist();
                localcmd("\nmenu_cmd sync\n");
@@ -1231,31 +1240,12 @@ void GotoNextMap(float reinit)
                return;
        alreadychangedlevel = TRUE;
 
-       {
-               string nextMap;
-               float allowReset;
+       string nextMap;
 
-               for(allowReset = 1; allowReset >= 0; --allowReset)
-               {
-                       nextMap = GetNextMap();
-                       if(nextMap != "")
-                               break;
-
-                       if(allowReset)
-                       {
-                               bprint( "Maplist contains no single playable map!  Resetting it to default map list.\n" );
-                               cvar_set("g_maplist", MapInfo_ListAllAllowedMaps(MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags()));
-                               if(autocvar_g_maplist_shuffle)
-                                       ShuffleMaplist();
-                               localcmd("\nmenu_cmd sync\n");
-                       }
-                       else
-                       {
-                               error("Everything is broken - not even the default map list works. Please report this to the developers.");
-                       }
-               }
-               Map_Goto(reinit);
-       }
+       nextMap = GetNextMap();
+       if(nextMap == "")
+               error("Everything is broken - cannot find a next map. Please report this to the developers.");
+       Map_Goto(reinit);
 }
 
 
@@ -1409,7 +1399,7 @@ void DumpStats(float final)
                {
                        s = strcat(":player:see-labels:", GetPlayerScoreString(other, 0), ":");
                        s = strcat(s, ftos(rint(time - other.jointime)), ":");
-                       if(IS_PLAYER(other) || g_arena || other.caplayer == 1 || g_lms)
+                       if(IS_PLAYER(other) || other.caplayer == 1 || g_lms)
                                s = strcat(s, ftos(other.team), ":");
                        else
                                s = strcat(s, "spectator:");
@@ -1522,7 +1512,7 @@ void NextLevel()
                PlayerStats_AddGlobalInfo(e);
        PlayerStats_Shutdown();
        WeaponStats_Shutdown();
-       
+
        Kill_Notification(NOTIF_ALL, world, MSG_CENTER, 0); // kill all centerprints now
 
        if(autocvar_sv_eventlog)
@@ -1863,7 +1853,7 @@ float WinningCondition_Scores(float limit, float leadlimit)
        if(WinningConditionHelper_zeroisworst)
                leadlimit = 0; // not supported in this mode
 
-       if(g_dm || g_tdm || g_arena || g_ca || (g_race && !g_race_qualifying) || g_nexball)
+       if(g_dm || g_tdm || g_ca || (g_race && !g_race_qualifying) || g_nexball)
        // these modes always score in increments of 1, thus this makes sense
        {
                if(leaderfrags != WinningConditionHelper_topscore)
@@ -2246,7 +2236,7 @@ string MapVote_Suggest(string m)
        if(mapvote_initialized)
                return "Can't suggest - voting is already in progress!";
        m = MapInfo_FixName(m);
-       if not(m)
+       if (!m)
                return "The map you suggested is not available on this server.";
        if(!autocvar_g_maplist_votable_suggestions_override_mostrecent)
                if(Map_IsRecent(m))
index 08fd83fe3fab99c12c6a448e5f6198328281523c..a180547c0f97c09cb3632fdeb694e9bece0762a5 100644 (file)
@@ -8,7 +8,7 @@
  *     GET g_ban_sync_uri?action=unban&hostname=...&ip=xxx.xxx.xxx
  * - Querying the ban list
  *     GET g_ban_sync_uri?action=list&hostname=...&servers=xxx.xxx.xxx.xxx;xxx.xxx.xxx.xxx;...
- *     
+ *
  *     shows the bans from the listed servers, and possibly others.
  *     Format of a ban is ASCII plain text, four lines per ban, delimited by
  *     newline ONLY (no carriage return):
@@ -114,7 +114,7 @@ void OnlineBanList_URI_Get_Callback(float id, float status, string data)
        }
        if(syncinterval > 0)
                syncinterval *= 60;
-       
+
        if(status != 0)
        {
                print("error: status is ", ftos(status), "\n");
@@ -193,7 +193,7 @@ void OnlineBanList_Think()
        float argc;
        string uri;
        float i, n;
-       
+
        if(autocvar_g_ban_sync_uri == "")
                goto killme;
        if(autocvar_g_ban_sync_interval == 0) // < 0 is okay, it means "sync on level start only"
@@ -208,7 +208,7 @@ void OnlineBanList_Think()
        for(i = 1; i < argc; ++i)
                OnlineBanList_Servers = strcat(OnlineBanList_Servers, ";", argv(i));
        OnlineBanList_Servers = strzone(OnlineBanList_Servers);
-       
+
        uri = strcat(     "action=list&hostname=", uri_escape(autocvar_hostname));
        uri = strcat(uri, "&servers=", uri_escape(OnlineBanList_Servers));
 
@@ -227,7 +227,7 @@ void OnlineBanList_Think()
                else
                        uri_get(strcat(argv(i), "?", uri), URI_GET_IPBAN + i); // 1000 = "banlist" callback target
        }
-       
+
        if(autocvar_g_ban_sync_interval > 0)
                self.nextthink = time + max(60, autocvar_g_ban_sync_interval * 60);
        else
@@ -321,24 +321,24 @@ void Ban_View()
 {
        float i, n;
        string msg;
-       
+
        print("^2Listing all existing active bans:\n");
-       
+
        n = 0;
        for(i = 0; i < ban_count; ++i)
        {
                if(time > ban_expire[i])
                        continue;
-                       
+
                ++n; // total number of existing bans
-                       
+
                msg = strcat("#", ftos(i), ": ");
                msg = strcat(msg, ban_ip[i], " is still banned for ");
                msg = strcat(msg, ftos(ban_expire[i] - time), " seconds");
-               
+
                print("  ", msg, "\n");
        }
-       
+
        print("^2Done listing all active (", ftos(n), ") bans.\n");
 }
 
@@ -367,7 +367,7 @@ float Ban_GetClientIP(entity client)
        i4 = strstrofs(s, ".", i3 + 1);
        if(i4 >= 0)
                s = substring(s, 0, i4);
-       
+
        ban_ip1 = substring(s, 0, i1); // 8
        ban_ip2 = substring(s, 0, i2); // 16
        ban_ip3 = substring(s, 0, i3); // 24
@@ -434,7 +434,7 @@ float Ban_IsClientBanned(entity client, float idx)
        {
                if(!autocvar_g_banned_list_idmode)
                        return TRUE;
-               if not(ban_idfp)
+               if (!ban_idfp)
                        return TRUE;
        }
        return FALSE;
index 5c7e30e36e7c78c58087722707750081360f7aad..f181f376448761b3aa8ffd169369d62ba84105c2 100644 (file)
@@ -9,8 +9,8 @@ TODO:
 
 float item_keys_usekey(entity l, entity p) {
        float valid = l.itemkeys & p.itemkeys;
-       
-       if not(valid) {
+
+       if (!valid) {
                // other has none of the needed keys
                return FALSE;
        } else if (l.itemkeys == valid) {
@@ -27,15 +27,15 @@ float item_keys_usekey(entity l, entity p) {
 string item_keys_keylist(float keylist) {
        float base, l;
        string n;
-       
+
        // no keys
-       if not(keylist)
+       if (!keylist)
                return "";
-       
+
        // one key
        if ((keylist & (keylist-1)) != 0)
                return strcat("the ", item_keys_names[lowestbit(keylist)]);
-       
+
        n = "";
        base = 0;
        while (keylist) {
@@ -44,11 +44,11 @@ string item_keys_keylist(float keylist) {
                        n = strcat(n, ", the ", item_keys_names[base + l]);
                else
                        n = strcat("the ", item_keys_names[base + l]);
-               
+
                keylist = bitshift(keylist,  -(l + 1));
                base+= l + 1;
        }
-       
+
        return n;
 }
 
@@ -63,16 +63,16 @@ item_key
  * Key touch handler.
  */
 void item_key_touch(void) {
-       if not(IS_PLAYER(other))
+       if (!IS_PLAYER(other))
                return;
-               
+
        // player already picked up this key
        if (other.itemkeys & self.itemkeys)
                return;
-       
+
        other.itemkeys |= self.itemkeys;
        play2(other, self.noise);
-       
+
        centerprint(other, self.message);
 };
 
@@ -81,17 +81,17 @@ void item_key_touch(void) {
  */
 void spawn_item_key() {
        precache_model(self.model);
-       
+
        if (self.spawnflags & 1) // FLOATING
                self.noalign = 1;
-       
+
        if (self.noalign)
                self.movetype = MOVETYPE_NONE;
        else
                self.movetype = MOVETYPE_TOSS;
-               
+
        precache_sound(self.noise);
-               
+
        self.mdl = self.model;
        self.effects = EF_LOWPRECISION;
        setmodel(self, self.model);
@@ -100,7 +100,7 @@ void spawn_item_key() {
        setsize(self, '-16 -16 -56', '16 16 0');
        self.modelflags |= MF_ROTATE;
        self.solid = SOLID_TRIGGER;
-       
+
        if (!self.noalign)
        {
                // first nudge it off the floor a little bit to avoid math errors
@@ -116,7 +116,7 @@ void spawn_item_key() {
 /*QUAKED item_key (0 .5 .8) (-16 -16 -24) (16 16 32) FLOATING
 A key entity.
 The itemkeys should contain one of the following key IDs:
-1 - GOLD key - 
+1 - GOLD key -
 2 - SILVER key
 4 - BRONZE key
 8 - RED keycard
@@ -142,7 +142,7 @@ itemkeys MUST always have exactly one bit set.
 void spawnfunc_item_key() {
        local string _model, _netname;
        local vector _colormod;
-       
+
        // reject this entity if more than one key was set!
        if (self.itemkeys>0 && (self.itemkeys & (self.itemkeys-1)) != 0) {
                objerror("item_key.itemkeys must contain only 1 bit set specifying the key it represents!");
@@ -156,32 +156,32 @@ void spawnfunc_item_key() {
                _netname = "GOLD key";
                _colormod = '1 .9 0';
                break;
-               
+
        case 2:
                _netname = "SILVER key";
                _colormod = '.9 .9 .9';
                break;
-               
+
        case 4:
                _netname = "BRONZE key";
                _colormod = '.6 .25 0';
                break;
-               
+
        case 8:
                _netname = "RED keycard";
                _colormod = '.9 0 0';
                break;
-               
+
        case 16:
                _netname = "BLUE keycard";
                _colormod = '0 0 .9';
                break;
-               
+
        case 32:
                _netname = "GREEN keycard";
                _colormod = '0 .9 0';
                break;
-       
+
        default:
                _netname = "FLUFFY PINK keycard";
                _colormod = '1 1 1';
@@ -192,9 +192,9 @@ void spawnfunc_item_key() {
                        return;
                }
                break;
-               
+
        }
-       
+
        // find default model
 #ifdef GMQCC
        _model = string_null;
@@ -208,30 +208,30 @@ void spawnfunc_item_key() {
                remove(self);
                return;
        }
-       
+
        // set defailt netname
        if (self.netname == "")
                self.netname = _netname;
-       
+
        // set default colormod
        if (!self.colormod)
                self.colormod = _colormod;
-       
+
        // set default model
        if (self.model == "")
                self.model = _model;
-       
+
        // set default pickup message
        if (self.message == "")
                self.message = strzone(strcat("You've picked up the ", self.netname, "!"));
 
        if (self.noise == "")
                self.noise = "misc/itempickup.wav";
-       
+
        // save the name for later
        item_keys_names[lowestbit(self.itemkeys)] = self.netname;
 
-       // put the key on the map       
+       // put the key on the map
        spawn_item_key();
 }
 
@@ -283,12 +283,12 @@ trigger_keylock
  */
 void trigger_keylock_trigger(string s) {
        local entity t, stemp, otemp, atemp;
-       
+
        stemp = self;
        otemp = other;
        atemp = activator;
-       
-       
+
+
        for(t = world; (t = find(t, targetname, s)); )
                if (t.use) {
                        self = t;
@@ -296,7 +296,7 @@ void trigger_keylock_trigger(string s) {
                        activator = atemp;
                        self.use();
                }
-       
+
        self = stemp;
        other = otemp;
        activator = atemp;
@@ -313,21 +313,21 @@ void trigger_keylock_kill(string s) {
 
 void trigger_keylock_touch(void) {
        local float key_used, started_delay;
-       
+
        key_used = FALSE;
        started_delay = FALSE;
-       
+
        // only player may trigger the lock
-       if not(IS_PLAYER(other))
+       if (!IS_PLAYER(other))
                return;
-       
-       
+
+
        // check silver key
        if (self.itemkeys)
                key_used = item_keys_usekey(self, other);
-       
+
        activator = other;
-       
+
        if (self.itemkeys) {
                // at least one of the keys is missing
                if (key_used) {
@@ -341,7 +341,7 @@ void trigger_keylock_touch(void) {
                        centerprint(other, strcat("You need ", item_keys_keylist(self.itemkeys), "!"));
                        other.key_door_messagetime = time + 2;
                }
-               
+
                // trigger target2
                if (self.delay <= time || started_delay == TRUE)
                if (self.target2) {
@@ -353,16 +353,16 @@ void trigger_keylock_touch(void) {
                // all keys were given!
                play2(other, self.noise);
                centerprint(other, self.message);
-               
+
                if (self.target)
                        trigger_keylock_trigger(self.target);
-                       
+
                if (self.killtarget)
                        trigger_keylock_kill(self.killtarget);
-               
+
                remove(self);
        }
-       
+
 };
 
 /*QUAKED trigger_keylock (.0 .5 .8) ?
@@ -390,10 +390,10 @@ void spawnfunc_trigger_keylock(void) {
                return;
        }
 
-       // set unlocked message 
+       // set unlocked message
        if (self.message == "")
                self.message = "Unlocked!";
-       
+
        // set default unlock noise
        if (self.noise == "") {
                if (self.sounds == 1)
@@ -403,26 +403,26 @@ void spawnfunc_trigger_keylock(void) {
                else //if (self.sounds == 3) {
                        self.noise = "misc/trigger1.wav";
        }
-       
+
        // set default use key sound
        if (self.noise1 == "")
                self.noise1 = "misc/decreasevalue.wav";
-       
+
        // set closed sourd
        if (self.noise2 == "")
                self.noise2 = "misc/talk.wav";
-       
+
        // delay between triggering message2 and trigger2
        if (!self.wait)
                self.wait = 5;
-       
+
        // precache sounds
        precache_sound(self.noise);
        precache_sound(self.noise1);
        precache_sound(self.noise2);
-       
+
        EXACTTRIGGER_INIT;
-       
+
        self.touch = trigger_keylock_touch;
 };
 
index 0b5b42781229f0df535621e4b373a0e36302329a..3f312a203a459622e9a38e958ee5f2f7e012ddc1 100644 (file)
@@ -96,7 +96,7 @@ const string STR_OBSERVER = "observer";
 #define FOR_EACH_REALCLIENT(v) FOR_EACH_CLIENT(v) if(IS_REAL_CLIENT(v))
 
 #define FOR_EACH_PLAYER(v) FOR_EACH_CLIENT(v) if(IS_PLAYER(v))
-#define FOR_EACH_SPEC(v) FOR_EACH_CLIENT(v) if not(IS_PLAYER(v)) // Samual: shouldn't this be IS_SPEC(v)? and rather create a separate macro to include observers too
+#define FOR_EACH_SPEC(v) FOR_EACH_CLIENT(v) if (!IS_PLAYER(v)) // Samual: shouldn't this be IS_SPEC(v)? and rather create a separate macro to include observers too
 #define FOR_EACH_REALPLAYER(v) FOR_EACH_REALCLIENT(v) if(IS_PLAYER(v))
 
 #define CENTER_OR_VIEWOFS(ent) (ent.origin + (IS_PLAYER(ent) ? ent.view_ofs : ((ent.mins + ent.maxs) * 0.5)))
@@ -615,6 +615,7 @@ float start_armorvalue;
 WepSet warmup_start_weapons;
 WepSet warmup_start_weapons_default;
 WepSet warmup_start_weapons_defaultmask;
+#define WARMUP_START_WEAPONS ((g_warmup_allguns == 1) ? (warmup_start_weapons & (weaponsInMap | start_weapons)) : warmup_start_weapons)
 float warmup_start_ammo_shells;
 float warmup_start_ammo_nails;
 float warmup_start_ammo_rockets;
@@ -647,16 +648,16 @@ float want_weapon(string cvarprefix, entity weaponinfo, float allguns)
                d = 0; // weapon is set a few lines later
        else
                d = (i == WEP_LASER || i == WEP_SHOTGUN);
-               
+
        if(g_grappling_hook) // if possible, redirect off-hand hook to on-hand hook
                d |= (i == WEP_HOOK);
        if(weaponinfo.spawnflags & WEP_FLAG_MUTATORBLOCKED) // never default mutator blocked guns
                d = 0;
 
        var float t = cvar(strcat(cvarprefix, weaponinfo.netname));
-       
+
        //print(strcat("want_weapon: ", weaponinfo.netname, " - d: ", ftos(d), ", t: ", ftos(t), ". \n"));
-       
+
        // bit order in t:
        // 1: want or not
        // 2: is default?
@@ -712,7 +713,7 @@ void readplayerstartcvars()
                for (j = WEP_FIRST; j <= WEP_LAST; ++j)
                {
                        e = get_weaponinfo(j);
-                       if not(e.spawnflags & WEP_FLAG_MUTATORBLOCKED)
+                       if (!(e.spawnflags & WEP_FLAG_MUTATORBLOCKED))
                                g_weaponarena_weapons |= WepSet_FromWeapon(j);
                }
        }
@@ -723,7 +724,7 @@ void readplayerstartcvars()
                for (j = WEP_FIRST; j <= WEP_LAST; ++j)
                {
                        e = get_weaponinfo(j);
-                       if not(e.spawnflags & WEP_FLAG_MUTATORBLOCKED)
+                       if (!(e.spawnflags & WEP_FLAG_MUTATORBLOCKED))
                                if (e.spawnflags & WEP_FLAG_NORMAL)
                                        g_weaponarena_weapons |= WepSet_FromWeapon(j);
                }
@@ -788,7 +789,7 @@ void readplayerstartcvars()
 
        if(!cvar("g_use_ammunition"))
                start_items |= IT_UNLIMITED_AMMO;
-       
+
        if(start_items & IT_UNLIMITED_WEAPON_AMMO)
        {
                start_ammo_rockets = 999;
@@ -834,7 +835,7 @@ void readplayerstartcvars()
                        for (i = WEP_FIRST; i <= WEP_LAST; ++i)
                        {
                                e = get_weaponinfo(i);
-                               float w = want_weapon("g_start_weapon_", e, cvar("g_warmup_allguns"));
+                               float w = want_weapon("g_start_weapon_", e, g_warmup_allguns);
                                if(w & 1)
                                        warmup_start_weapons |= WepSet_FromWeapon(i);
                                if(w & 2)
@@ -858,10 +859,13 @@ void readplayerstartcvars()
                warmup_start_ammo_fuel = max(warmup_start_ammo_fuel, cvar("g_balance_fuel_rotstable"));
        }
 
+       WepSet precache_weapons = start_weapons;
+       if (g_warmup_allguns != 1)
+               precache_weapons |= warmup_start_weapons;
        for (i = WEP_FIRST; i <= WEP_LAST; ++i)
        {
                e = get_weaponinfo(i);
-               if((start_weapons | warmup_start_weapons) & WepSet_FromWeapon(i))
+               if(precache_weapons & WepSet_FromWeapon(i))
                        weapon_action(i, WR_PRECACHE);
        }
 
@@ -903,7 +907,7 @@ void readlevelcvars(void)
        // load mutators
        #define CHECK_MUTATOR_ADD(mut_cvar,mut_name,dependence) \
                { if(cvar(mut_cvar) && dependence) { MUTATOR_ADD(mut_name); } }
-               
+
        CHECK_MUTATOR_ADD("g_dodging", mutator_dodging, 1);
        CHECK_MUTATOR_ADD("g_spawn_near_teammate", mutator_spawn_near_teammate, 1);
        CHECK_MUTATOR_ADD("g_physical_items", mutator_physical_items, 1);
@@ -924,9 +928,9 @@ void readlevelcvars(void)
        CHECK_MUTATOR_ADD("g_nades", mutator_nades, 1);
        CHECK_MUTATOR_ADD("g_sandbox", sandbox, 1);
        CHECK_MUTATOR_ADD("g_campcheck", mutator_campcheck, 1);
-       
+
        #undef CHECK_MUTATOR_ADD
-       
+
        if(cvar("sv_allow_fullbright"))
                serverflags |= SERVERFLAG_ALLOW_FULLBRIGHT;
 
@@ -945,7 +949,7 @@ void readlevelcvars(void)
     g_bugrigs_speed_ref = cvar("g_bugrigs_speed_ref");
     g_bugrigs_speed_pow = cvar("g_bugrigs_speed_pow");
     g_bugrigs_steer = cvar("g_bugrigs_steer");
-       
+
        g_minstagib = cvar("g_minstagib");
 
        sv_clones = cvar("sv_clones");
@@ -966,7 +970,7 @@ void readlevelcvars(void)
        g_warmup_allguns = cvar("g_warmup_allguns");
        g_warmup_allow_timeout = cvar("g_warmup_allow_timeout");
 
-       if ((g_race && g_race_qualifying == 2) || g_arena || g_assault || cvar("g_campaign"))
+       if ((g_race && g_race_qualifying == 2) || g_assault || cvar("g_campaign"))
                warmup_stage = 0; // these modes cannot work together, sorry
 
        g_pickup_respawntime_weapon = cvar("g_pickup_respawntime_weapon");
@@ -1033,7 +1037,7 @@ void readlevelcvars(void)
     if(!g_weapon_stay)
         g_weapon_stay = cvar("g_weapon_stay");
 
-       if not(warmup_stage)
+       if (!warmup_stage)
                game_starttime = time + cvar("g_start_delay");
 
        readplayerstartcvars();
@@ -1641,7 +1645,7 @@ void adaptor_think2use()
 
 void adaptor_think2use_hittype_splash() // for timed projectile detonation
 {
-       if not(self.flags & FL_ONGROUND) // if onground, we ARE touching something, but HITTYPE_SPLASH is to be networked if the damage causing projectile is not touching ANYTHING
+       if(!(self.flags & FL_ONGROUND)) // if onground, we ARE touching something, but HITTYPE_SPLASH is to be networked if the damage causing projectile is not touching ANYTHING
                self.projectiledeathtype |= HITTYPE_SPLASH;
        adaptor_think2use();
 }
@@ -1718,7 +1722,7 @@ float SUB_NoImpactCheck()
        if(trace_dphitcontents == 0)
        {
                //dprint("A hit happened with zero hit contents... DEBUG THIS, this should never happen for projectiles! Projectile will self-destruct.\n");
-               dprint(sprintf("A hit from a projectile happened with no hit contents! DEBUG THIS, this should never happen for projectiles! Profectile will self-destruct. (edict: %d, classname: %s, origin: %s)\n", num_for_edict(self), self.classname, vtos(self.origin)));
+               dprintf("A hit from a projectile happened with no hit contents! DEBUG THIS, this should never happen for projectiles! Profectile will self-destruct. (edict: %d, classname: %s, origin: %s)\n", num_for_edict(self), self.classname, vtos(self.origin));
                checkclient();
        }
     if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
@@ -1814,7 +1818,7 @@ string uid2name(string myuid) {
                        db_put(ServerProgsDB, strcat("uid2name", myuid), "");
                }
        }
-       
+
        if(s == "")
                s = "^1Unregistered Player";
        return s;
@@ -2007,65 +2011,6 @@ float MoveToRandomMapLocation(entity e, float goodcontents, float badcontents, f
         return FALSE;
 }
 
-float zcurveparticles_effectno;
-vector zcurveparticles_start;
-float zcurveparticles_spd;
-
-void endzcurveparticles()
-{
-       if(zcurveparticles_effectno)
-       {
-               // terminator
-               WriteShort(MSG_BROADCAST, zcurveparticles_spd | 0x8000);
-       }
-       zcurveparticles_effectno = 0;
-}
-
-void zcurveparticles(float effectno, vector start, vector end, float end_dz, float spd)
-{
-       spd = bound(0, floor(spd / 16), 32767);
-       if(effectno != zcurveparticles_effectno || start != zcurveparticles_start)
-       {
-               endzcurveparticles();
-               WriteByte(MSG_BROADCAST, SVC_TEMPENTITY);
-               WriteByte(MSG_BROADCAST, TE_CSQC_ZCURVEPARTICLES);
-               WriteShort(MSG_BROADCAST, effectno);
-               WriteCoord(MSG_BROADCAST, start_x);
-               WriteCoord(MSG_BROADCAST, start_y);
-               WriteCoord(MSG_BROADCAST, start_z);
-               zcurveparticles_effectno = effectno;
-               zcurveparticles_start = start;
-       }
-       else
-               WriteShort(MSG_BROADCAST, zcurveparticles_spd);
-       WriteCoord(MSG_BROADCAST, end_x);
-       WriteCoord(MSG_BROADCAST, end_y);
-       WriteCoord(MSG_BROADCAST, end_z);
-       WriteCoord(MSG_BROADCAST, end_dz);
-       zcurveparticles_spd = spd;
-}
-
-void zcurveparticles_from_tracetoss(float effectno, vector start, vector end, vector vel)
-{
-       float end_dz;
-       vector vecxy, velxy;
-
-       vecxy = end - start;
-       vecxy_z = 0;
-       velxy = vel;
-       velxy_z = 0;
-
-       if (vlen(velxy) < 0.000001 * fabs(vel_z))
-       {
-               endzcurveparticles();
-               trailparticles(world, effectno, start, end);
-               return;
-       }
-
-       end_dz = vlen(vecxy) / vlen(velxy) * vel_z - (end_z - start_z);
-       zcurveparticles(effectno, start, end, end_dz, vlen(vel));
-}
-
 void write_recordmarker(entity pl, float tstart, float dt)
 {
     GameLogEcho(strcat(":recordset:", ftos(pl.playerid), ":", ftos(dt)));
@@ -2332,7 +2277,7 @@ void shockwave_spawn(string m, vector org, float sz, float t1, float t2)
 
 float randombit(float bits)
 {
-       if not(bits & (bits-1)) // this ONLY holds for powers of two!
+       if(!(bits & (bits-1))) // this ONLY holds for powers of two!
                return bits;
 
        float n, f, b, r;
@@ -2400,7 +2345,7 @@ float ExponentialFalloff(float mindist, float maxdist, float halflifedist, float
 #else
 string cvar_string_normal(string n)
 {
-       if not(cvar_type(n) & 1)
+       if (!(cvar_type(n) & 1))
                backtrace(strcat("Attempt to access undefined cvar: ", n));
        return builtin_cvar_string(n);
 }
index 9b9f7fde01abe5dc22dcd51310665c265aa15e6d..de82b16a8ab1f793623514e24cb38639430deb4f 100644 (file)
@@ -1,4 +1,4 @@
-#ifdef SVQC 
+#ifdef SVQC
 .vector moveto;
 
 /**
index f4761b884dca28175d58da08589a777c589722c2..d2cec391b90e1a167fd920cfd87a3a8b688b5165 100644 (file)
@@ -101,7 +101,7 @@ float Mutator_Add(mutatorfunc_t func, string name)
        {
                if(name == loaded_mutators[i])
                        return 1; // already added
-               if not(loaded_mutators[i])
+               if (!(loaded_mutators[i]))
                        j = i;
        }
        if(j < 0)
index 98a44944dd7d7c84c3c4c0a478e97b14c02203d8..893ebb301ff439ffbed18757f6da29cc95cf92b8 100644 (file)
@@ -72,7 +72,7 @@ MUTATOR_HOOKABLE(PlayerDies);
                entity frag_attacker;
                entity frag_target; // same as self
                float frag_deathtype;
-               
+
 MUTATOR_HOOKABLE(PlayerJump);
        // called when a player presses the jump key
        // INPUT, OUTPUT:
@@ -114,7 +114,7 @@ MUTATOR_HOOKABLE(BuildMutatorsPrettyString);
        // appends ", Mutator name" to ret_string for display
        // INPUT, OUTPUT:
                string ret_string;
-               
+
 MUTATOR_HOOKABLE(CustomizeWaypoint);
        // called every frame
        // customizes the waypoint for spectators
@@ -127,7 +127,7 @@ MUTATOR_HOOKABLE(FilterItem);
 MUTATOR_HOOKABLE(TurretSpawn);
        // return error to request removal
        // INPUT: self - turret
-       
+
 MUTATOR_HOOKABLE(OnEntityPreSpawn);
        // return error to prevent entity spawn, or modify the entity
 
@@ -163,7 +163,7 @@ MUTATOR_HOOKABLE(PlayerDamage_SplitHealthArmor);
        // INPUT, OUTPUT:
                float damage_take;
                float damage_save;
-               
+
 MUTATOR_HOOKABLE(PlayerDamage_Calculate);
        // called to adjust damage and force values which are applied to the player, used for e.g. strength damage/force multiplier
        // i'm not sure if I should change this around slightly (Naming of the entities, and also how they're done in g_damage).
@@ -180,7 +180,7 @@ MUTATOR_HOOKABLE(PlayerPowerups);
        // called at the end of player_powerups() in cl_client.qc, used for manipulating the values which are set by powerup items.
        // INPUT
        entity self;
-       float olditems; // also technically output, but since it is at the end of the function it's useless for that :P 
+       float olditems; // also technically output, but since it is at the end of the function it's useless for that :P
 
 MUTATOR_HOOKABLE(PlayerUseKey);
        // called when the use key is pressed
@@ -231,7 +231,7 @@ MUTATOR_HOOKABLE(SV_StartFrame);
 MUTATOR_HOOKABLE(SetModname);
        // OUT
        string modname; // name of the mutator/mod if it warrants showing as such in the server browser
-       
+
 MUTATOR_HOOKABLE(Item_Spawn);
        // called for each item being spawned on a map, including dropped weapons
        // return 1 to remove an item
@@ -244,13 +244,13 @@ MUTATOR_HOOKABLE(SetWeaponreplace);
                entity other; // weapon info
        // IN+OUT
                string ret_string;
-               
+
 MUTATOR_HOOKABLE(Item_RespawnCountdown);
        // called when an item is about to respawn
        // INPUT+OUTPUT:
        string item_name;
        vector item_color;
-               
+
 MUTATOR_HOOKABLE(BotShouldAttack);
        // called when a bot checks a target to attack
        // INPUT
@@ -261,7 +261,7 @@ MUTATOR_HOOKABLE(PortalTeleport);
        // allows you to strip a player of an item if they go through the teleporter to help prevent cheating
        // INPUT
        entity self;
-       
+
 MUTATOR_HOOKABLE(HelpMePing);
        // called whenever a player uses impulse 33 (help me) in cl_impulse.qc
        // normally help me ping uses self.waypointsprite_attachedforcarrier,
@@ -269,32 +269,32 @@ MUTATOR_HOOKABLE(HelpMePing);
        // in a special manner using this hook
        // INPUT
        entity self; // the player who pressed impulse 33
-       
+
 MUTATOR_HOOKABLE(VehicleSpawn);
        // called when a vehicle initializes
        // return TRUE to remove the vehicle
-       
+
 MUTATOR_HOOKABLE(VehicleEnter);
        // called when a player enters a vehicle
        // allows mutators to set special settings in this event
        // INPUT
        entity vh_player; // player
        entity vh_vehicle; // vehicle
-       
+
 MUTATOR_HOOKABLE(VehicleTouch);
        // called when a player touches a vehicle
        // return TRUE to stop player from entering the vehicle
        // INPUT
        entity self; // vehicle
        entity other; // player
-       
+
 MUTATOR_HOOKABLE(VehicleExit);
        // called when a player exits a vehicle
        // allows mutators to set special settings in this event
        // INPUT
        entity vh_player; // player
        entity vh_vehicle; // vehicle
-       
+
 MUTATOR_HOOKABLE(AbortSpeedrun);
        // called when a speedrun is aborted and the player is teleported back to start position
        // INPUT
diff --git a/qcsrc/server/mutators/gamemode_arena.qc b/qcsrc/server/mutators/gamemode_arena.qc
deleted file mode 100644 (file)
index bb6312e..0000000
+++ /dev/null
@@ -1,288 +0,0 @@
-.float spawned;
-float maxspawned;
-float numspawned;
-.entity spawnqueue_next;
-.entity spawnqueue_prev;
-.float spawnqueue_in;
-entity spawnqueue_first;
-entity spawnqueue_last;
-
-void Spawnqueue_Insert(entity e)
-{
-       if(e.spawnqueue_in)
-               return;
-       dprint(strcat("Into queue: ", e.netname, "\n"));
-       e.spawnqueue_in = TRUE;
-       e.spawnqueue_prev = spawnqueue_last;
-       e.spawnqueue_next = world;
-       if(spawnqueue_last)
-               spawnqueue_last.spawnqueue_next = e;
-       spawnqueue_last = e;
-       if(!spawnqueue_first)
-               spawnqueue_first = e;
-}
-
-void Spawnqueue_Remove(entity e)
-{
-       if(!e.spawnqueue_in)
-               return;
-       dprint(strcat("Out of queue: ", e.netname, "\n"));
-       e.spawnqueue_in = FALSE;
-       if(e == spawnqueue_first)
-               spawnqueue_first = e.spawnqueue_next;
-       if(e == spawnqueue_last)
-               spawnqueue_last = e.spawnqueue_prev;
-       if(e.spawnqueue_prev)
-               e.spawnqueue_prev.spawnqueue_next = e.spawnqueue_next;
-       if(e.spawnqueue_next)
-               e.spawnqueue_next.spawnqueue_prev = e.spawnqueue_prev;
-       e.spawnqueue_next = world;
-       e.spawnqueue_prev = world;
-}
-
-void Spawnqueue_Unmark(entity e)
-{
-       if(!e.spawned)
-               return;
-       e.spawned = FALSE;
-       numspawned = numspawned - 1;
-}
-
-void Spawnqueue_Mark(entity e)
-{
-       if(e.spawned)
-               return;
-       e.spawned = TRUE;
-       numspawned = numspawned + 1;
-}
-
-float Arena_CheckWinner()
-{
-       entity e;
-
-       if(round_handler_GetEndTime() > 0 && round_handler_GetEndTime() - time <= 0)
-       {
-               Send_Notification(NOTIF_ALL, world, MSG_CENTER, CENTER_ROUND_OVER);
-               Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_ROUND_OVER);
-               round_handler_Init(5, autocvar_g_arena_warmup, autocvar_g_arena_round_timelimit);
-               return 1;
-       }
-
-       if(numspawned > 1)
-               return 0;
-
-       entity champion;
-       champion = world;
-       FOR_EACH_CLIENT(e)
-       {
-               if(e.spawned && IS_PLAYER(e))
-                       champion = e;
-       }
-
-       if(champion)
-       {
-               Send_Notification(NOTIF_ALL, world, MSG_CENTER, CENTER_ROUND_PLAYER_WIN, champion.netname);
-               Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_ROUND_PLAYER_WIN, champion.netname);
-               UpdateFrags(champion, +1);
-       }
-       else
-       {
-               Send_Notification(NOTIF_ALL, world, MSG_CENTER, CENTER_ROUND_TIED);
-               Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_ROUND_TIED);
-       }
-       round_handler_Init(5, autocvar_g_arena_warmup, autocvar_g_arena_round_timelimit);
-       return 1;
-}
-
-void Arena_AddChallengers()
-{
-       entity e;
-       if(time < 2) // don't force players to spawn so early
-               return;
-       e = self;
-       while(numspawned < maxspawned && spawnqueue_first)
-       {
-               self = spawnqueue_first;
-
-               bprint ("^4", self.netname, "^4 is the next challenger\n");
-
-               Spawnqueue_Remove(self);
-               Spawnqueue_Mark(self);
-
-               self.classname = "player";
-               PutClientInServer();
-       }
-       self = e;
-}
-
-float prev_numspawned;
-float Arena_CheckPlayers()
-{
-       Arena_AddChallengers();
-
-       if(numspawned >= 2)
-       {
-               if(prev_numspawned > 0)
-                       Kill_Notification(NOTIF_ALL, world, MSG_CENTER_CPID, CPID_MISSING_PLAYERS);
-               prev_numspawned = -1;
-               return 1;
-       }
-
-       if(prev_numspawned != numspawned && numspawned == 1)
-       {
-               if(maxspawned - numspawned > 0)
-                       Send_Notification(NOTIF_ALL, world, MSG_CENTER, CENTER_MISSING_PLAYERS, maxspawned - numspawned);
-               prev_numspawned = numspawned;
-       }
-
-       return 0;
-}
-
-void Arena_RoundStart()
-{
-       entity e;
-       FOR_EACH_PLAYER(e)
-               e.player_blocked = 0;
-}
-
-MUTATOR_HOOKFUNCTION(arena_ClientDisconnect)
-{
-       Spawnqueue_Unmark(self);
-       Spawnqueue_Remove(self);
-       return 1;
-}
-
-MUTATOR_HOOKFUNCTION(arena_reset_map_players)
-{
-       FOR_EACH_CLIENT(self)
-       {
-               if(self.spawned)
-               {
-                       PutClientInServer();
-                       self.player_blocked = 1;
-               }
-               else
-                       PutObserverInServer();
-       }
-       return 1;
-}
-
-MUTATOR_HOOKFUNCTION(arena_MakePlayerObserver)
-{
-       if(self.version_mismatch)
-       {
-               self.frags = FRAGS_SPECTATOR;
-               Spawnqueue_Unmark(self);
-               Spawnqueue_Remove(self);
-       }
-       else
-       {
-               self.frags = FRAGS_LMS_LOSER;
-               Spawnqueue_Insert(self);
-       }
-       return 1;
-}
-
-MUTATOR_HOOKFUNCTION(arena_PutClientInServer)
-{
-       if(!self.spawned)
-               self.classname = "observer";
-       return 1;
-}
-
-MUTATOR_HOOKFUNCTION(arena_ClientConnect)
-{
-       self.classname = "observer";
-       Spawnqueue_Insert(self);
-       return 1;
-}
-
-MUTATOR_HOOKFUNCTION(arena_PlayerSpawn)
-{
-       Spawnqueue_Remove(self);
-       Spawnqueue_Mark(self);
-       if(arena_roundbased)
-               self.player_blocked = 1;
-       return 1;
-}
-
-MUTATOR_HOOKFUNCTION(arena_ForbidPlayerScore_Clear)
-{
-       return 1;
-}
-
-MUTATOR_HOOKFUNCTION(arena_GiveFragsForKill)
-{
-       if(arena_roundbased)
-               frag_score = 0; // score will be given to the champion when the round ends
-       return 1;
-}
-
-MUTATOR_HOOKFUNCTION(arena_PlayerDies)
-{
-       // put dead players in the spawn queue
-       if(arena_roundbased)
-               self.respawn_flags = (RESPAWN_FORCE | RESPAWN_SILENT);
-       else
-               self.respawn_flags = RESPAWN_SILENT;
-       Spawnqueue_Unmark(self);
-       return 1;
-}
-
-MUTATOR_HOOKFUNCTION(arena_SV_StartFrame)
-{
-       if(gameover) return 1;
-       if(time <= game_starttime || !arena_roundbased)
-               Arena_AddChallengers();
-       return 1;
-}
-
-MUTATOR_HOOKFUNCTION(arena_FilterItem)
-{
-       if(autocvar_g_powerups <= 0)
-       if(self.flags & FL_POWERUP)
-               return TRUE;
-               
-       return FALSE;
-}
-
-void arena_Initialize()
-{
-       maxspawned = max(2, autocvar_g_arena_maxspawned);
-       arena_roundbased = autocvar_g_arena_roundbased;
-       if(arena_roundbased)
-       {
-               round_handler_Spawn(Arena_CheckPlayers, Arena_CheckWinner, Arena_RoundStart);
-               round_handler_Init(5, autocvar_g_arena_warmup, autocvar_g_arena_round_timelimit);
-       }
-}
-
-MUTATOR_DEFINITION(gamemode_arena)
-{
-       MUTATOR_HOOK(ClientDisconnect, arena_ClientDisconnect, CBC_ORDER_ANY);
-       MUTATOR_HOOK(reset_map_players, arena_reset_map_players, CBC_ORDER_ANY);
-       MUTATOR_HOOK(MakePlayerObserver, arena_MakePlayerObserver, CBC_ORDER_ANY);
-       MUTATOR_HOOK(PutClientInServer, arena_PutClientInServer, CBC_ORDER_ANY);
-       MUTATOR_HOOK(ClientConnect, arena_ClientConnect, CBC_ORDER_ANY);
-       MUTATOR_HOOK(PlayerSpawn, arena_PlayerSpawn, CBC_ORDER_ANY);
-       MUTATOR_HOOK(ForbidPlayerScore_Clear, arena_ForbidPlayerScore_Clear, CBC_ORDER_ANY);
-       MUTATOR_HOOK(GiveFragsForKill, arena_GiveFragsForKill, CBC_ORDER_ANY);
-       MUTATOR_HOOK(PlayerDies, arena_PlayerDies, CBC_ORDER_ANY);
-       MUTATOR_HOOK(SV_StartFrame, arena_SV_StartFrame, CBC_ORDER_ANY);
-       MUTATOR_HOOK(FilterItem, arena_FilterItem, CBC_ORDER_ANY);
-
-       MUTATOR_ONADD
-       {
-               if(time > 1) // game loads at time 1
-                       error("This is a game type and it cannot be added at runtime.");
-               arena_Initialize();
-       }
-
-       MUTATOR_ONREMOVE
-       {
-               print("This is a game type and it cannot be removed at runtime.");
-               return -1;
-       }
-
-       return 0;
-}
diff --git a/qcsrc/server/mutators/gamemode_arena.qh b/qcsrc/server/mutators/gamemode_arena.qh
deleted file mode 100644 (file)
index a2f623a..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-// should be removed in the future, as other code should not have to care
-float arena_roundbased;
index 18fb2bb236cb0d2a96dca9a5040964072f2581bd..60df95a006eab4ce0941dc2176d43216e0cda9a7 100644 (file)
@@ -243,24 +243,24 @@ void assault_new_round()
 // spawnfuncs
 void spawnfunc_info_player_attacker()
 {
-       if not(g_assault) { remove(self); return; }
-       
+       if (!g_assault) { remove(self); return; }
+
        self.team = NUM_TEAM_1; // red, gets swapped every round
        spawnfunc_info_player_deathmatch();
 }
 
 void spawnfunc_info_player_defender()
 {
-       if not(g_assault) { remove(self); return; }
-       
+       if (!g_assault) { remove(self); return; }
+
        self.team = NUM_TEAM_2; // blue, gets swapped every round
        spawnfunc_info_player_deathmatch();
 }
 
 void spawnfunc_target_objective()
 {
-       if not(g_assault) { remove(self); return; }
-       
+       if (!g_assault) { remove(self); return; }
+
        self.classname = "target_objective";
        self.use = assault_objective_use;
        assault_objective_reset();
@@ -270,7 +270,7 @@ void spawnfunc_target_objective()
 
 void spawnfunc_target_objective_decrease()
 {
-       if not(g_assault) { remove(self); return; }
+       if (!g_assault) { remove(self); return; }
 
        self.classname = "target_objective_decrease";
 
@@ -288,11 +288,11 @@ void spawnfunc_target_objective_decrease()
 // destructible walls that can be used to trigger target_objective_decrease
 void spawnfunc_func_assault_destructible()
 {
-       if not(g_assault) { remove(self); return; }
-       
+       if (!g_assault) { remove(self); return; }
+
        self.spawnflags = 3;
        self.classname = "func_assault_destructible";
-       
+
        if(assault_attacker_team == NUM_TEAM_1)
                self.team = NUM_TEAM_2;
        else
@@ -303,8 +303,8 @@ void spawnfunc_func_assault_destructible()
 
 void spawnfunc_func_assault_wall()
 {
-       if not(g_assault) { remove(self); return; }
-       
+       if (!g_assault) { remove(self); return; }
+
        self.classname = "func_assault_wall";
        self.mdl = self.model;
        setmodel(self, self.mdl);
@@ -316,7 +316,7 @@ void spawnfunc_func_assault_wall()
 
 void spawnfunc_target_assault_roundend()
 {
-       if not(g_assault) { remove(self); return; }
+       if (!g_assault) { remove(self); return; }
 
        self.winning = 0; // round not yet won by attackers
        self.classname = "target_assault_roundend";
@@ -327,8 +327,8 @@ void spawnfunc_target_assault_roundend()
 
 void spawnfunc_target_assault_roundstart()
 {
-       if not(g_assault) { remove(self); return; }
-       
+       if (!g_assault) { remove(self); return; }
+
        assault_attacker_team = NUM_TEAM_1;
        self.classname = "target_assault_roundstart";
        self.use = assault_roundstart_use;
@@ -350,7 +350,7 @@ void havocbot_goalrating_ast_targets(float ratingscale)
                if (ad.target == "")
                        continue;
 
-               if not(ad.bot_attack)
+               if (!ad.bot_attack)
                        continue;
 
                found = FALSE;
@@ -526,13 +526,13 @@ MUTATOR_HOOKFUNCTION(assault_PlayerSpawn)
                centerprint(self, "You are attacking!");
        else
                centerprint(self, "You are defending!");
-               
+
        return FALSE;
 }
 
 MUTATOR_HOOKFUNCTION(assault_TurretSpawn)
 {
-       if not (self.team)
+       if (!self.team)
                self.team = 14;
 
        return FALSE;
@@ -566,7 +566,7 @@ MUTATOR_DEFINITION(gamemode_assault)
        MUTATOR_HOOK(TurretSpawn, assault_TurretSpawn, CBC_ORDER_ANY);
        MUTATOR_HOOK(VehicleSpawn, assault_VehicleSpawn, CBC_ORDER_ANY);
        MUTATOR_HOOK(HavocBot_ChooseRule, assault_BotRoles, CBC_ORDER_ANY);
-       
+
        MUTATOR_ONADD
        {
                if(time > 1) // game loads at time 1
index f55c46e00ad5e34468bdfaae2e614227e7702aba..9fbd483cabacd754e3fc22063d322533923aa9ae 100644 (file)
@@ -232,7 +232,7 @@ MUTATOR_HOOKFUNCTION(ca_SetStartItems)
        start_ammo_rockets = cvar("g_lms_start_ammo_rockets");
        start_ammo_cells = cvar("g_lms_start_ammo_cells");
        start_ammo_fuel = cvar("g_lms_start_ammo_fuel");
-       
+
        start_items &= ~IT_UNLIMITED_AMMO;
 
        return 0;
@@ -244,9 +244,9 @@ MUTATOR_HOOKFUNCTION(ca_PlayerDamage)
        if(frag_target.deadflag == DEAD_NO)
        if(frag_target == frag_attacker || SAME_TEAM(frag_target, frag_attacker) || frag_deathtype == DEATH_FALL)
                frag_damage = 0;
-               
+
        frag_mirrordamage = 0;
-               
+
        return FALSE;
 }
 
@@ -255,20 +255,20 @@ MUTATOR_HOOKFUNCTION(ca_FilterItem)
        if(autocvar_g_powerups <= 0)
        if(self.flags & FL_POWERUP)
                return TRUE;
-               
+
        if(autocvar_g_pickup_items <= 0)
                return TRUE;
-               
+
        return FALSE;
 }
 
 MUTATOR_HOOKFUNCTION(ca_PlayerDamage_SplitHealthArmor)
 {
        float excess = max(0, frag_damage - damage_take - damage_save);
-       
+
        if(frag_target != frag_attacker && IS_PLAYER(frag_attacker))
                PlayerTeamScore_Add(frag_attacker, SP_SCORE, ST_SCORE, (frag_damage - excess) * autocvar_g_ca_damage2score_multiplier);
-               
+
        return FALSE;
 }
 
index f95d956c0f671ca0efe6b642b7ee596978044e5e..19cc563f80358df8760b3e176adf7f4963ee0cfe 100644 (file)
@@ -25,27 +25,27 @@ void ctf_CaptureRecord(entity flag, entity player)
        float cap_record = ctf_captimerecord;
        float cap_time = (time - flag.ctf_pickuptime);
        string refername = db_get(ServerProgsDB, strcat(GetMapname(), "/captimerecord/netname"));
-       
+
        // notify about shit
        if(!ctf_captimerecord) { Send_Notification(NOTIF_ALL, world, MSG_CHOICE, APP_TEAM_ENT_2(flag, CHOICE_CTF_CAPTURE_TIME_), player.netname, (cap_time * 100)); }
        else if(cap_time < cap_record) { Send_Notification(NOTIF_ALL, world, MSG_CHOICE, APP_TEAM_ENT_2(flag, CHOICE_CTF_CAPTURE_BROKEN_), player.netname, refername, (cap_time * 100), (cap_record * 100)); }
        else { Send_Notification(NOTIF_ALL, world, MSG_CHOICE, APP_TEAM_ENT_2(flag, CHOICE_CTF_CAPTURE_UNBROKEN_), player.netname, refername, (cap_time * 100), (cap_record * 100)); }
-       
+
        // write that shit in the database
        if((!ctf_captimerecord) || (cap_time < cap_record))
        {
                ctf_captimerecord = cap_time;
                db_put(ServerProgsDB, strcat(GetMapname(), "/captimerecord/time"), ftos(cap_time));
                db_put(ServerProgsDB, strcat(GetMapname(), "/captimerecord/netname"), player.netname);
-               write_recordmarker(player, (time - cap_time), cap_time); 
-       } 
+               write_recordmarker(player, (time - cap_time), cap_time);
+       }
 }
 
 void ctf_FlagcarrierWaypoints(entity player)
 {
        WaypointSprite_Spawn("flagcarrier", 0, 0, player, FLAG_WAYPOINT_OFFSET, world, player.team, player, wps_flagcarrier, TRUE, RADARICON_FLAG, WPCOLOR_FLAGCARRIER(player.team));
-       WaypointSprite_UpdateMaxHealth(player.wps_flagcarrier, '1 0 0' * healtharmor_maxdamage(start_health, start_armorvalue, autocvar_g_balance_armor_blockpercent) * 2);
-       WaypointSprite_UpdateHealth(player.wps_flagcarrier, '1 0 0' * healtharmor_maxdamage(player.health, player.armorvalue, autocvar_g_balance_armor_blockpercent));
+       WaypointSprite_UpdateMaxHealth(player.wps_flagcarrier, '1 0 0' * healtharmor_maxdamage(start_health, start_armorvalue, autocvar_g_balance_armor_blockpercent, DEATH_WEAPON) * 2);
+       WaypointSprite_UpdateHealth(player.wps_flagcarrier, '1 0 0' * healtharmor_maxdamage(player.health, player.armorvalue, autocvar_g_balance_armor_blockpercent, DEATH_WEAPON));
        WaypointSprite_UpdateTeamRadar(player.wps_flagcarrier, RADARICON_FLAGCARRIER, WPCOLOR_FLAGCARRIER(player.team));
 }
 
@@ -92,7 +92,7 @@ float ctf_CheckPassDirection(vector head_center, vector passer_center, vector pa
                float ang; // angle between shotdir and h
                float h; // hypotenuse, which is the distance between attacker to head
                float a; // adjacent side, which is the distance between attacker and the point on w_shotdir that is closest to head.origin
-               
+
                h = vlen(head_center - passer_center);
                ang = acos(dotproduct(normalize(head_center - passer_center), v_forward));
                a = h * cos(ang);
@@ -113,10 +113,10 @@ float ctf_CheckPassDirection(vector head_center, vector passer_center, vector pa
 
 
 // =======================
-// CaptureShield Functions 
+// CaptureShield Functions
 // =======================
 
-float ctf_CaptureShield_CheckStatus(entity p) 
+float ctf_CaptureShield_CheckStatus(entity p)
 {
        float s, se;
        entity e;
@@ -142,7 +142,7 @@ float ctf_CaptureShield_CheckStatus(entity p)
 
        // player is in the worse half, if >= half the players are better than him, or consequently, if < half of the players are worse
        // use this rule here
-       
+
        if(players_worseeq >= players_total * ctf_captureshield_max_ratio)
                return FALSE;
 
@@ -163,7 +163,7 @@ float ctf_CaptureShield_Customize()
 {
        if(!other.ctf_captureshielded) { return FALSE; }
        if(SAME_TEAM(self, other)) { return FALSE; }
-       
+
        return TRUE;
 }
 
@@ -171,7 +171,7 @@ void ctf_CaptureShield_Touch()
 {
        if(!other.ctf_captureshielded) { return; }
        if(SAME_TEAM(self, other)) { return; }
-       
+
        vector mymid = (self.absmin + self.absmax) * 0.5;
        vector othermid = (other.absmin + other.absmax) * 0.5;
 
@@ -182,7 +182,7 @@ void ctf_CaptureShield_Touch()
 void ctf_CaptureShield_Spawn(entity flag)
 {
        entity shield = spawn();
-       
+
        shield.enemy = self;
        shield.team = self.team;
        shield.touch = ctf_CaptureShield_Touch;
@@ -193,7 +193,7 @@ void ctf_CaptureShield_Spawn(entity flag)
        shield.solid = SOLID_TRIGGER;
        shield.avelocity = '7 0 11';
        shield.scale = 0.5;
-       
+
        setorigin(shield, self.origin);
        setmodel(shield, "models/ctf/shield.md3");
        setsize(shield, shield.scale * shield.mins, shield.scale * shield.maxs);
@@ -217,16 +217,16 @@ void ctf_Handle_Drop(entity flag, entity player, float droptype)
        flag.ctf_droptime = time;
        flag.ctf_dropper = player;
        flag.ctf_status = FLAG_DROPPED;
-       
+
        // messages and sounds
        Send_Notification(NOTIF_ALL, world, MSG_INFO, APP_TEAM_ENT_2(flag, INFO_CTF_LOST_), player.netname);
        sound(flag, CH_TRIGGER, flag.snd_flag_dropped, VOL_BASE, ATTEN_NONE);
        ctf_EventLog("dropped", player.team, player);
 
        // scoring
-       PlayerTeamScore_AddScore(player, -autocvar_g_ctf_score_penalty_drop);   
+       PlayerTeamScore_AddScore(player, -autocvar_g_ctf_score_penalty_drop);
        PlayerScore_Add(player, SP_CTF_DROPS, 1);
-       
+
        // waypoints
        if(autocvar_g_ctf_flag_dropped_waypoint)
                WaypointSprite_Spawn("flagdropped", 0, 0, flag, FLAG_WAYPOINT_OFFSET, world, ((autocvar_g_ctf_flag_dropped_waypoint == 2) ? 0 : player.team), flag, wps_flagdropped, TRUE, RADARICON_FLAG, WPCOLOR_DROPPEDFLAG(flag.team));
@@ -236,9 +236,9 @@ void ctf_Handle_Drop(entity flag, entity player, float droptype)
                WaypointSprite_UpdateMaxHealth(flag.wps_flagdropped, flag.max_flag_health);
                WaypointSprite_UpdateHealth(flag.wps_flagdropped, flag.health);
        }
-       
+
        player.throw_antispam = time + autocvar_g_ctf_pass_wait;
-       
+
        if(droptype == DROP_PASS)
        {
                flag.pass_distance = 0;
@@ -251,11 +251,11 @@ void ctf_Handle_Retrieve(entity flag, entity player)
 {
        entity tmp_player; // temporary entity which the FOR_EACH_PLAYER loop uses to scan players
        entity sender = flag.pass_sender;
-       
+
        // transfer flag to player
        flag.owner = player;
        flag.owner.flagcarried = flag;
-       
+
        // reset flag
        setattachment(flag, player, "");
        setorigin(flag, FLAG_CARRY_OFFSET);
@@ -268,7 +268,7 @@ void ctf_Handle_Retrieve(entity flag, entity player)
        // messages and sounds
        sound(player, CH_TRIGGER, flag.snd_flag_pass, VOL_BASE, ATTEN_NORM);
        ctf_EventLog("receive", flag.team, player);
-       
+
        FOR_EACH_REALPLAYER(tmp_player)
        {
                if(tmp_player == sender)
@@ -278,10 +278,10 @@ void ctf_Handle_Retrieve(entity flag, entity player)
                else if(SAME_TEAM(tmp_player, sender))
                        Send_Notification(NOTIF_ONE, tmp_player, MSG_CENTER, APP_TEAM_ENT_2(flag, CENTER_CTF_PASS_OTHER_), sender.netname, player.netname);
        }
-       
+
        // create new waypoint
        ctf_FlagcarrierWaypoints(player);
-       
+
        sender.throw_antispam = time + autocvar_g_ctf_pass_wait;
        player.throw_antispam = sender.throw_antispam;
 
@@ -294,12 +294,12 @@ void ctf_Handle_Throw(entity player, entity receiver, float droptype)
 {
        entity flag = player.flagcarried;
        vector targ_origin, flag_velocity;
-       
+
        if(!flag) { return; }
        if((droptype == DROP_PASS) && !receiver) { return; }
-       
+
        if(flag.speedrunning) { ctf_RespawnFlag(flag); return; }
-       
+
        // reset the flag
        setattachment(flag, world, "");
        setorigin(flag, player.origin + FLAG_DROP_OFFSET);
@@ -308,9 +308,9 @@ void ctf_Handle_Throw(entity player, entity receiver, float droptype)
        flag.solid = SOLID_TRIGGER;
        flag.ctf_dropper = player;
        flag.ctf_droptime = time;
-       
+
        flag.flags = FL_ITEM | FL_NOTARGET; // clear FL_ONGROUND for MOVETYPE_TOSS
-       
+
        switch(droptype)
        {
                case DROP_PASS:
@@ -331,30 +331,30 @@ void ctf_Handle_Throw(entity player, entity receiver, float droptype)
                        flag.pass_sender = player;
                        flag.pass_target = receiver;
                        flag.ctf_status = FLAG_PASSING;
-                       
+
                        // other
                        sound(player, CH_TRIGGER, flag.snd_flag_touch, VOL_BASE, ATTEN_NORM);
                        WarpZone_TrailParticles(world, particleeffectnum(flag.passeffect), player.origin, targ_origin);
                        ctf_EventLog("pass", flag.team, player);
                        break;
                }
-               
+
                case DROP_THROW:
                {
                        makevectors((player.v_angle_y * '0 1 0') + (bound(autocvar_g_ctf_throw_angle_min, player.v_angle_x, autocvar_g_ctf_throw_angle_max) * '1 0 0'));
-                               
+
                        flag_velocity = (('0 0 1' * autocvar_g_ctf_throw_velocity_up) + ((v_forward * autocvar_g_ctf_throw_velocity_forward) * ((player.items & IT_STRENGTH) ? autocvar_g_ctf_throw_strengthmultiplier : 1)));
                        flag.velocity = W_CalculateProjectileVelocity(player.velocity, flag_velocity, FALSE);
                        ctf_Handle_Drop(flag, player, droptype);
                        break;
                }
-               
+
                case DROP_RESET:
                {
                        flag.velocity = '0 0 0'; // do nothing
                        break;
                }
-               
+
                default:
                case DROP_NORMAL:
                {
@@ -367,10 +367,10 @@ void ctf_Handle_Throw(entity player, entity receiver, float droptype)
        // kill old waypointsprite
        WaypointSprite_Ping(player.wps_flagcarrier);
        WaypointSprite_Kill(player.wps_flagcarrier);
-       
+
        if(player.wps_enemyflagcarrier)
                WaypointSprite_Kill(player.wps_enemyflagcarrier);
-       
+
        // captureshield
        ctf_CaptureShield_Update(player, 0); // shield player from picking up flag
 }
@@ -384,22 +384,22 @@ void ctf_Handle_Capture(entity flag, entity toucher, float capturetype)
 {
        entity enemy_flag = ((capturetype == CAPTURE_NORMAL) ? toucher.flagcarried : toucher);
        entity player = ((capturetype == CAPTURE_NORMAL) ? toucher : enemy_flag.ctf_dropper);
-       float old_time, new_time; 
-       
-       if not(player) { return; } // without someone to give the reward to, we can't possibly cap
-       
+       float old_time, new_time;
+
+       if (!player) { return; } // without someone to give the reward to, we can't possibly cap
+
        // messages and sounds
        Send_Notification(NOTIF_ONE, player, MSG_CENTER, APP_TEAM_ENT_2(enemy_flag, CENTER_CTF_CAPTURE_));
        ctf_CaptureRecord(enemy_flag, player);
        sound(player, CH_TRIGGER, flag.snd_flag_capture, VOL_BASE, ATTEN_NONE);
-       
+
        switch(capturetype)
        {
                case CAPTURE_NORMAL: ctf_EventLog("capture", enemy_flag.team, player); break;
                case CAPTURE_DROPPED: ctf_EventLog("droppedcapture", enemy_flag.team, player); break;
                default: break;
        }
-       
+
        // scoring
        PlayerTeamScore_AddScore(player, autocvar_g_ctf_score_capture);
        PlayerTeamScore_Add(player, SP_CTF_CAPS, ST_CTF_CAPS, 1);
@@ -418,11 +418,11 @@ void ctf_Handle_Capture(entity flag, entity toucher, float capturetype)
        {
                WaypointSprite_Kill(player.wps_flagcarrier);
                if(flag.speedrunning) { ctf_FakeTimeLimit(player, -1); }
-               
+
                if((enemy_flag.ctf_dropper) && (player != enemy_flag.ctf_dropper))
                        { PlayerTeamScore_AddScore(enemy_flag.ctf_dropper, autocvar_g_ctf_score_capture_assist); }
        }
-       
+
        // reset the flag
        player.next_take_time = time + autocvar_g_ctf_flag_collect_delay;
        ctf_RespawnFlag(enemy_flag);
@@ -441,14 +441,14 @@ void ctf_Handle_Return(entity flag, entity player)
        PlayerScore_Add(player, SP_CTF_RETURNS, 1); // add to count of returns
 
        TeamScore_AddToTeam(flag.team, ST_SCORE, -autocvar_g_ctf_score_penalty_returned); // punish the team who was last carrying it
-       
-       if(flag.ctf_dropper) 
+
+       if(flag.ctf_dropper)
        {
                PlayerScore_Add(flag.ctf_dropper, SP_SCORE, -autocvar_g_ctf_score_penalty_returned); // punish the player who dropped the flag
-               ctf_CaptureShield_Update(flag.ctf_dropper, 0); // shield player from picking up flag 
+               ctf_CaptureShield_Update(flag.ctf_dropper, 0); // shield player from picking up flag
                flag.ctf_dropper.next_take_time = time + autocvar_g_ctf_flag_collect_delay; // set next take time
        }
-       
+
        // reset the flag
        ctf_RespawnFlag(flag);
 }
@@ -457,20 +457,20 @@ void ctf_Handle_Pickup(entity flag, entity player, float pickuptype)
 {
        // declarations
        float pickup_dropped_score; // used to calculate dropped pickup score
-       
+
        // attach the flag to the player
        flag.owner = player;
        player.flagcarried = flag;
        setattachment(flag, player, "");
        setorigin(flag, FLAG_CARRY_OFFSET);
-       
+
        // flag setup
        flag.movetype = MOVETYPE_NONE;
        flag.takedamage = DAMAGE_NO;
        flag.solid = SOLID_NOT;
        flag.angles = '0 0 0';
        flag.ctf_status = FLAG_CARRY;
-       
+
        switch(pickuptype)
        {
                case PICKUP_BASE: flag.ctf_pickuptime = time; break; // used for timing runs
@@ -479,26 +479,26 @@ void ctf_Handle_Pickup(entity flag, entity player, float pickuptype)
        }
 
        // messages and sounds
-       Send_Notification(NOTIF_ALL, world, MSG_INFO, APP_TEAM_ENT_2(flag, INFO_CTF_PICKUP_), player.netname);  
+       Send_Notification(NOTIF_ALL, world, MSG_INFO, APP_TEAM_ENT_2(flag, INFO_CTF_PICKUP_), player.netname);
        Send_Notification(NOTIF_ONE, player, MSG_CENTER, APP_TEAM_ENT_2(flag, CENTER_CTF_PICKUP_));
        if(ctf_stalemate) { Send_Notification(NOTIF_ONE, player, MSG_CENTER, CENTER_CTF_STALEMATE_CARRIER); }
-       
+
        Send_Notification(NOTIF_TEAM_EXCEPT, player, MSG_CHOICE, CHOICE_CTF_PICKUP_TEAM, Team_ColorCode(player.team), player.netname);
        Send_Notification(NOTIF_TEAM, flag, MSG_CHOICE, CHOICE_CTF_PICKUP_ENEMY, Team_ColorCode(player.team), player.netname);
-       
+
        sound(player, CH_TRIGGER, flag.snd_flag_taken, VOL_BASE, ATTEN_NONE);
-       
+
        // scoring
        PlayerScore_Add(player, SP_CTF_PICKUPS, 1);
        switch(pickuptype)
-       {               
+       {
                case PICKUP_BASE:
                {
                        PlayerTeamScore_AddScore(player, autocvar_g_ctf_score_pickup_base);
                        ctf_EventLog("steal", flag.team, player);
                        break;
                }
-               
+
                case PICKUP_DROPPED:
                {
                        pickup_dropped_score = (autocvar_g_ctf_flag_return_time ? bound(0, ((flag.ctf_droptime + autocvar_g_ctf_flag_return_time) - time) / autocvar_g_ctf_flag_return_time, 1) : 1);
@@ -508,10 +508,10 @@ void ctf_Handle_Pickup(entity flag, entity player, float pickuptype)
                        ctf_EventLog("pickup", flag.team, player);
                        break;
                }
-               
+
                default: break;
        }
-       
+
        // speedrunning
        if(pickuptype == PICKUP_BASE)
        {
@@ -519,11 +519,11 @@ void ctf_Handle_Pickup(entity flag, entity player, float pickuptype)
                if((player.speedrunning) && (ctf_captimerecord))
                        ctf_FakeTimeLimit(player, time + ctf_captimerecord);
        }
-               
+
        // effects
        pointparticles(particleeffectnum(flag.toucheffect), player.origin, '0 0 0', 1);
-       
-       // waypoints 
+
+       // waypoints
        if(pickuptype == PICKUP_DROPPED) { WaypointSprite_Kill(flag.wps_flagdropped); }
        ctf_FlagcarrierWaypoints(player);
        WaypointSprite_Ping(player.wps_flagcarrier);
@@ -539,7 +539,7 @@ void ctf_CheckFlagReturn(entity flag, float returntype)
        if((flag.ctf_status == FLAG_DROPPED) || (flag.ctf_status == FLAG_PASSING))
        {
                if(flag.wps_flagdropped) { WaypointSprite_UpdateHealth(flag.wps_flagdropped, flag.health); }
-               
+
                if((flag.health <= 0) || (time >= flag.ctf_droptime + autocvar_g_ctf_flag_return_time))
                {
                        switch(returntype)
@@ -548,7 +548,7 @@ void ctf_CheckFlagReturn(entity flag, float returntype)
                                case RETURN_DAMAGE: Send_Notification(NOTIF_ALL, world, MSG_INFO, APP_TEAM_ENT_2(flag, INFO_CTF_FLAGRETURN_DAMAGED_)); break;
                                case RETURN_SPEEDRUN: Send_Notification(NOTIF_ALL, world, MSG_INFO, APP_TEAM_ENT_2(flag, INFO_CTF_FLAGRETURN_SPEEDRUN_), ctf_captimerecord); break;
                                case RETURN_NEEDKILL: Send_Notification(NOTIF_ALL, world, MSG_INFO, APP_TEAM_ENT_2(flag, INFO_CTF_FLAGRETURN_NEEDKILL_)); break;
-                               
+
                                default:
                                case RETURN_TIMEOUT:
                                        { Send_Notification(NOTIF_ALL, world, MSG_INFO, APP_TEAM_ENT_2(flag, INFO_CTF_FLAGRETURN_TIMEOUT_)); break; }
@@ -577,7 +577,7 @@ void ctf_CheckStalemate(void)
                {
                        tmp_entity.ctf_staleflagnext = ctf_staleflaglist; // link flag into staleflaglist
                        ctf_staleflaglist = tmp_entity;
-                       
+
                        switch(tmp_entity.team)
                        {
                                case NUM_TEAM_1: ++stale_red_flags; break;
@@ -592,7 +592,7 @@ void ctf_CheckStalemate(void)
                { ctf_stalemate = FALSE; wpforenemy_announced = FALSE; }
        else if((!stale_red_flags || !stale_blue_flags) && autocvar_g_ctf_stalemate_endcondition == 1)
                { ctf_stalemate = FALSE; wpforenemy_announced = FALSE; }
-               
+
        // if sufficient stalemate, then set up the waypointsprite and announce the stalemate if necessary
        if(ctf_stalemate)
        {
@@ -601,12 +601,12 @@ void ctf_CheckStalemate(void)
                        if((tmp_entity.owner) && (!tmp_entity.owner.wps_enemyflagcarrier))
                                WaypointSprite_Spawn("enemyflagcarrier", 0, 0, tmp_entity.owner, FLAG_WAYPOINT_OFFSET, world, tmp_entity.team, tmp_entity.owner, wps_enemyflagcarrier, TRUE, RADARICON_FLAG, WPCOLOR_ENEMYFC(tmp_entity.owner.team));
                }
-               
-               if not(wpforenemy_announced)
+
+               if (!wpforenemy_announced)
                {
                        FOR_EACH_REALPLAYER(tmp_entity)
                                Send_Notification(NOTIF_ONE, tmp_entity, MSG_CENTER, ((tmp_entity.flagcarried) ? CENTER_CTF_STALEMATE_CARRIER : CENTER_CTF_STALEMATE_OTHER));
-                       
+
                        wpforenemy_announced = TRUE;
                }
        }
@@ -621,7 +621,7 @@ void ctf_FlagDamage(entity inflictor, entity attacker, float damage, float death
                ctf_CheckFlagReturn(self, RETURN_NEEDKILL);
                return;
        }
-       if(autocvar_g_ctf_flag_return_damage) 
+       if(autocvar_g_ctf_flag_return_damage)
        {
                // reduce health and check if it should be returned
                self.health = self.health - damage;
@@ -648,7 +648,7 @@ void ctf_FlagThink()
                tracebox(self.origin, FLAG_MIN, FLAG_MAX, self.origin, MOVE_NOMONSTERS, self);
                if(!trace_startsolid) // can we resize it without getting stuck?
                        setsize(self, FLAG_MIN, FLAG_MAX); }
-                       
+
        switch(self.ctf_status) // reset flag angles in case warpzones adjust it
        {
                case FLAG_DROPPED:
@@ -656,13 +656,13 @@ void ctf_FlagThink()
                        self.angles = '0 0 0';
                        break;
                }
-               
+
                default: break;
        }
 
        // main think method
        switch(self.ctf_status)
-       {       
+       {
                case FLAG_BASE:
                {
                        if(autocvar_g_ctf_dropped_capture_radius)
@@ -675,7 +675,7 @@ void ctf_FlagThink()
                        }
                        return;
                }
-               
+
                case FLAG_DROPPED:
                {
                        if(autocvar_g_ctf_flag_dropped_floatinwater)
@@ -684,7 +684,7 @@ void ctf_FlagThink()
                                if(pointcontents(midpoint) == CONTENT_WATER)
                                {
                                        self.velocity = self.velocity * 0.5;
-                                       
+
                                        if(pointcontents(midpoint + FLAG_FLOAT_OFFSET) == CONTENT_WATER)
                                                { self.velocity_z = autocvar_g_ctf_flag_dropped_floatinwater; }
                                        else
@@ -706,13 +706,13 @@ void ctf_FlagThink()
                                self.health -= ((self.max_flag_health / autocvar_g_ctf_flag_return_time) * FLAG_THINKRATE);
                                ctf_CheckFlagReturn(self, RETURN_TIMEOUT);
                                return;
-                       } 
+                       }
                        return;
                }
-                       
+
                case FLAG_CARRY:
                {
-                       if(self.speedrunning && ctf_captimerecord && (time >= self.ctf_pickuptime + ctf_captimerecord)) 
+                       if(self.speedrunning && ctf_captimerecord && (time >= self.ctf_pickuptime + ctf_captimerecord))
                        {
                                self.health = 0;
                                ctf_CheckFlagReturn(self, RETURN_SPEEDRUN);
@@ -733,13 +733,13 @@ void ctf_FlagThink()
                        }
                        return;
                }
-               
+
                case FLAG_PASSING:
                {
                        vector targ_origin = ((self.pass_target.absmin + self.pass_target.absmax) * 0.5);
                        targ_origin = WarpZone_RefSys_TransformOrigin(self.pass_target, self, targ_origin); // origin of target as seen by the flag (us)
                        WarpZone_TraceLine(self.origin, targ_origin, MOVE_NOMONSTERS, self);
-                       
+
                        if((self.pass_target == world)
                                || (self.pass_target.deadflag != DEAD_NO)
                                || (vlen(self.origin - targ_origin) > autocvar_g_ctf_pass_radius)
@@ -768,9 +768,9 @@ void ctf_FlagThink()
 void ctf_FlagTouch()
 {
        if(gameover) { return; }
-       
+
        entity toucher = other;
-       
+
        // automatically kill the flag and return it if it touched lava/slime/nodrop surfaces
        if(ITEM_TOUCH_NEEDKILL())
        {
@@ -778,7 +778,7 @@ void ctf_FlagTouch()
                ctf_CheckFlagReturn(self, RETURN_NEEDKILL);
                return;
        }
-       
+
        // special touch behaviors
        if(toucher.vehicle_flags & VHF_ISVEHICLE)
        {
@@ -787,7 +787,7 @@ void ctf_FlagTouch()
                else
                        return; // do nothing
        }
-       else if not(IS_PLAYER(toucher)) // The flag just touched an object, most likely the world
+       else if (!IS_PLAYER(toucher)) // The flag just touched an object, most likely the world
        {
                if(time > self.wait) // if we haven't in a while, play a sound/effect
                {
@@ -799,8 +799,8 @@ void ctf_FlagTouch()
        }
        else if(toucher.deadflag != DEAD_NO) { return; }
 
-       switch(self.ctf_status) 
-       {       
+       switch(self.ctf_status)
+       {
                case FLAG_BASE:
                {
                        if(SAME_TEAM(toucher, self) && (toucher.flagcarried) && DIFF_TEAM(toucher.flagcarried, self))
@@ -809,7 +809,7 @@ void ctf_FlagTouch()
                                ctf_Handle_Pickup(self, toucher, PICKUP_BASE); // toucher just stole the enemies flag
                        break;
                }
-               
+
                case FLAG_DROPPED:
                {
                        if(SAME_TEAM(toucher, self))
@@ -818,13 +818,13 @@ void ctf_FlagTouch()
                                ctf_Handle_Pickup(self, toucher, PICKUP_DROPPED); // toucher just picked up a dropped enemy flag
                        break;
                }
-                       
+
                case FLAG_CARRY:
                {
                        dprint("Someone touched a flag even though it was being carried?\n");
                        break;
                }
-               
+
                case FLAG_PASSING:
                {
                        if((IS_PLAYER(toucher)) && (toucher.deadflag == DEAD_NO) && (toucher != self.pass_sender))
@@ -847,15 +847,15 @@ void ctf_RespawnFlag(entity flag)
                { backtrace("flag respawn called twice quickly! please notify Samual about this..."); }
 
        flag.last_respawn = time;
-       
+
        // reset the player (if there is one)
        if((flag.owner) && (flag.owner.flagcarried == flag))
        {
                if(flag.owner.wps_enemyflagcarrier)
                        WaypointSprite_Kill(flag.owner.wps_enemyflagcarrier);
-                       
+
                WaypointSprite_Kill(flag.wps_flagcarrier);
-               
+
                flag.owner.flagcarried = world;
 
                if(flag.speedrunning)
@@ -868,7 +868,7 @@ void ctf_RespawnFlag(entity flag)
        // reset the flag
        setattachment(flag, world, "");
        setorigin(flag, flag.ctf_spawnorigin);
-       
+
        flag.movetype = ((flag.noalign) ? MOVETYPE_NONE : MOVETYPE_TOSS);
        flag.takedamage = DAMAGE_NO;
        flag.health = flag.max_flag_health;
@@ -876,7 +876,7 @@ void ctf_RespawnFlag(entity flag)
        flag.velocity = '0 0 0';
        flag.angles = flag.mangle;
        flag.flags = FL_ITEM | FL_NOTARGET;
-       
+
        flag.ctf_status = FLAG_BASE;
        flag.owner = world;
        flag.pass_distance = 0;
@@ -892,7 +892,7 @@ void ctf_Reset()
        if(self.owner)
                if(IS_PLAYER(self.owner))
                        ctf_Handle_Throw(self.owner, world, DROP_RESET);
-                       
+
        ctf_RespawnFlag(self);
 }
 
@@ -911,12 +911,12 @@ void ctf_DelayedFlagSetup(void) // called after a flag is placed on a map by ctf
        ctf_CaptureShield_Spawn(self);
 }
 
-void ctf_FlagSetup(float teamnumber, entity flag) // called when spawning a flag entity on the map as a spawnfunc 
-{      
+void ctf_FlagSetup(float teamnumber, entity flag) // called when spawning a flag entity on the map as a spawnfunc
+{
        // declarations
-       teamnumber = fabs(teamnumber - bound(0, autocvar_g_ctf_reverse, 1)); // if we were originally 1, this will become 0. If we were originally 0, this will become 1. 
+       teamnumber = fabs(teamnumber - bound(0, autocvar_g_ctf_reverse, 1)); // if we were originally 1, this will become 0. If we were originally 0, this will become 1.
        self = flag; // for later usage with droptofloor()
-       
+
        // main setup
        flag.ctf_worldflagnext = ctf_worldflaglist; // link flag into ctf_worldflaglist
        ctf_worldflaglist = flag;
@@ -931,7 +931,7 @@ void ctf_FlagSetup(float teamnumber, entity flag) // called when spawning a flag
        flag.flags = FL_ITEM | FL_NOTARGET;
        flag.solid = SOLID_TRIGGER;
        flag.takedamage = DAMAGE_NO;
-       flag.damageforcescale = autocvar_g_ctf_flag_damageforcescale;   
+       flag.damageforcescale = autocvar_g_ctf_flag_damageforcescale;
        flag.max_flag_health = ((autocvar_g_ctf_flag_return_damage && autocvar_g_ctf_flag_health) ? autocvar_g_ctf_flag_health : 100);
        flag.health = flag.max_flag_health;
        flag.event_damage = ctf_FlagDamage;
@@ -954,8 +954,8 @@ void ctf_FlagSetup(float teamnumber, entity flag) // called when spawning a flag
        if(flag.toucheffect == "") { flag.toucheffect = ((teamnumber) ? "redflag_touch" : "blueflag_touch"); }
        if(flag.passeffect == "")  { flag.passeffect = ((teamnumber) ? "red_pass" : "blue_pass"); }
        if(flag.capeffect == "")   { flag.capeffect = ((teamnumber) ? "red_cap" : "blue_cap"); }
-       
-       // sound 
+
+       // sound
        if(flag.snd_flag_taken == "")    { flag.snd_flag_taken  = ((teamnumber) ? "ctf/red_taken.wav" : "ctf/blue_taken.wav"); }
        if(flag.snd_flag_returned == "") { flag.snd_flag_returned = ((teamnumber) ? "ctf/red_returned.wav" : "ctf/blue_returned.wav"); }
        if(flag.snd_flag_capture == "")  { flag.snd_flag_capture = ((teamnumber) ? "ctf/red_capture.wav" : "ctf/blue_capture.wav"); } // blue team scores by capturing the red flag
@@ -963,7 +963,7 @@ void ctf_FlagSetup(float teamnumber, entity flag) // called when spawning a flag
        if(flag.snd_flag_dropped == "")  { flag.snd_flag_dropped = ((teamnumber) ? "ctf/red_dropped.wav" : "ctf/blue_dropped.wav"); }
        if(flag.snd_flag_touch == "")    { flag.snd_flag_touch = "ctf/touch.wav"; } // again has no team-based sound
        if(flag.snd_flag_pass == "")     { flag.snd_flag_pass = "ctf/pass.wav"; } // same story here
-       
+
        // precache
        precache_sound(flag.snd_flag_taken);
        precache_sound(flag.snd_flag_returned);
@@ -980,33 +980,33 @@ void ctf_FlagSetup(float teamnumber, entity flag) // called when spawning a flag
        setmodel(flag, flag.model); // precision set below
        setsize(flag, FLAG_MIN, FLAG_MAX);
        setorigin(flag, (flag.origin + FLAG_SPAWN_OFFSET));
-       
+
        if(autocvar_g_ctf_flag_glowtrails)
        {
                flag.glow_color = ((teamnumber) ? 251 : 210); // 251: red - 210: blue
                flag.glow_size = 25;
                flag.glow_trail = 1;
        }
-       
+
        flag.effects |= EF_LOWPRECISION;
        if(autocvar_g_ctf_fullbrightflags) { flag.effects |= EF_FULLBRIGHT; }
        if(autocvar_g_ctf_dynamiclights)   { flag.effects |= ((teamnumber) ? EF_RED : EF_BLUE); }
-       
+
        // flag placement
        if((flag.spawnflags & 1) || flag.noalign) // don't drop to floor, just stay at fixed location
-       {       
-               flag.dropped_origin = flag.origin; 
+       {
+               flag.dropped_origin = flag.origin;
                flag.noalign = TRUE;
                flag.movetype = MOVETYPE_NONE;
        }
        else // drop to floor, automatically find a platform and set that as spawn origin
-       { 
+       {
                flag.noalign = FALSE;
                self = flag;
                droptofloor();
-               flag.movetype = MOVETYPE_TOSS; 
-       }       
-       
+               flag.movetype = MOVETYPE_TOSS;
+       }
+
        InitializeEntity(flag, ctf_DelayedFlagSetup, INITPRIO_SETLOCATION);
 }
 
@@ -1066,7 +1066,7 @@ entity havocbot_ctf_find_enemy_flag(entity bot)
 
 float havocbot_ctf_teamcount(entity bot, vector org, float tc_radius)
 {
-       if not(teamplay)
+       if (!teamplay)
                return 0;
 
        float c = 0;
@@ -1108,7 +1108,7 @@ void havocbot_goalrating_ctf_ourbase(float ratingscale)
                        break;
                head = head.ctf_worldflagnext;
        }
-       if not(head)
+       if (!head)
                return;
 
        navigation_routerating(head.bot_basewaypoint, ratingscale, 10000);
@@ -1130,7 +1130,7 @@ void havocbot_goalrating_ctf_enemyflag(float ratingscale)
 
 void havocbot_goalrating_ctf_enemybase(float ratingscale)
 {
-       if not(bot_waypoints_for_items)
+       if (!bot_waypoints_for_items)
        {
                havocbot_goalrating_ctf_enemyflag(ratingscale);
                return;
@@ -1140,7 +1140,7 @@ void havocbot_goalrating_ctf_enemybase(float ratingscale)
 
        head = havocbot_ctf_find_enemy_flag(self);
 
-       if not(head)
+       if (!head)
                return;
 
        navigation_routerating(head.bot_basewaypoint, ratingscale, 10000);
@@ -1675,12 +1675,12 @@ void havocbot_role_ctf_setrole(entity bot, float role)
 MUTATOR_HOOKFUNCTION(ctf_PlayerPreThink)
 {
        entity flag;
-       
+
        // initially clear items so they can be set as necessary later.
        self.items &= ~(IT_RED_FLAG_CARRYING | IT_RED_FLAG_TAKEN | IT_RED_FLAG_LOST
                | IT_BLUE_FLAG_CARRYING | IT_BLUE_FLAG_TAKEN | IT_BLUE_FLAG_LOST | IT_CTF_SHIELDED);
 
-       // scan through all the flags and notify the client about them 
+       // scan through all the flags and notify the client about them
        for(flag = ctf_worldflaglist; flag; flag = flag.ctf_worldflagnext)
        {
                switch(flag.ctf_status)
@@ -1690,7 +1690,7 @@ MUTATOR_HOOKFUNCTION(ctf_PlayerPreThink)
                        {
                                if((flag.owner == self) || (flag.pass_sender == self))
                                        self.items |= ((flag.items & IT_KEY2) ? IT_RED_FLAG_CARRYING : IT_BLUE_FLAG_CARRYING); // carrying: self is currently carrying the flag
-                               else 
+                               else
                                        self.items |= ((flag.items & IT_KEY2) ? IT_RED_FLAG_TAKEN : IT_BLUE_FLAG_TAKEN); // taken: someone on self's team is carrying the flag
                                break;
                        }
@@ -1701,15 +1701,15 @@ MUTATOR_HOOKFUNCTION(ctf_PlayerPreThink)
                        }
                }
        }
-       
+
        // item for stopping players from capturing the flag too often
        if(self.ctf_captureshielded)
                self.items |= IT_CTF_SHIELDED;
-       
+
        // update the health of the flag carrier waypointsprite
-       if(self.wps_flagcarrier) 
-               WaypointSprite_UpdateHealth(self.wps_flagcarrier, '1 0 0' * healtharmor_maxdamage(self.health, self.armorvalue, autocvar_g_balance_armor_blockpercent));
-       
+       if(self.wps_flagcarrier)
+               WaypointSprite_UpdateHealth(self.wps_flagcarrier, '1 0 0' * healtharmor_maxdamage(self.health, self.armorvalue, autocvar_g_balance_armor_blockpercent, DEATH_WEAPON));
+
        return FALSE;
 }
 
@@ -1730,7 +1730,7 @@ MUTATOR_HOOKFUNCTION(ctf_PlayerDamage) // for changing damage and force values t
        }
        else if(frag_target.flagcarried && (frag_target.deadflag == DEAD_NO) && DIFF_TEAM(frag_target, frag_attacker)) // if the target is a flagcarrier
        {
-               if(autocvar_g_ctf_flagcarrier_auto_helpme_damage > ('1 0 0' * healtharmor_maxdamage(frag_target.health, frag_target.armorvalue, autocvar_g_balance_armor_blockpercent)))
+               if(autocvar_g_ctf_flagcarrier_auto_helpme_damage > ('1 0 0' * healtharmor_maxdamage(frag_target.health, frag_target.armorvalue, autocvar_g_balance_armor_blockpercent, DEATH_WEAPON)))
                if(time > frag_target.wps_helpme_time + autocvar_g_ctf_flagcarrier_auto_helpme_time)
                {
                        frag_target.wps_helpme_time = time;
@@ -1748,10 +1748,10 @@ MUTATOR_HOOKFUNCTION(ctf_PlayerDies)
                PlayerTeamScore_AddScore(frag_attacker, autocvar_g_ctf_score_kill);
                PlayerScore_Add(frag_attacker, SP_CTF_FCKILLS, 1);
        }
-                               
+
        if(frag_target.flagcarried)
                { ctf_Handle_Throw(frag_target, world, DROP_NORMAL); }
-               
+
        return FALSE;
 }
 
@@ -1764,23 +1764,23 @@ MUTATOR_HOOKFUNCTION(ctf_GiveFragsForKill)
 MUTATOR_HOOKFUNCTION(ctf_RemovePlayer)
 {
        entity flag; // temporary entity for the search method
-       
+
        if(self.flagcarried)
                { ctf_Handle_Throw(self, world, DROP_NORMAL); }
-       
+
        for(flag = ctf_worldflaglist; flag; flag = flag.ctf_worldflagnext)
        {
                if(flag.pass_sender == self) { flag.pass_sender = world; }
                if(flag.pass_target == self) { flag.pass_target = world; }
                if(flag.ctf_dropper == self) { flag.ctf_dropper = world; }
        }
-               
+
        return FALSE;
 }
 
 MUTATOR_HOOKFUNCTION(ctf_PortalTeleport)
 {
-       if(self.flagcarried) 
+       if(self.flagcarried)
        if(!autocvar_g_ctf_portalteleport)
                { ctf_Handle_Throw(self, world, DROP_NORMAL); }
 
@@ -1790,7 +1790,7 @@ MUTATOR_HOOKFUNCTION(ctf_PortalTeleport)
 MUTATOR_HOOKFUNCTION(ctf_PlayerUseKey)
 {
        if(MUTATOR_RETURNVALUE || gameover) { return FALSE; }
-       
+
        entity player = self;
 
        if((time > player.throw_antispam) && (player.deadflag == DEAD_NO) && !player.speedrunning && (!player.vehicle || autocvar_g_ctf_allow_vehicle_touch))
@@ -1800,21 +1800,21 @@ MUTATOR_HOOKFUNCTION(ctf_PlayerUseKey)
                {
                        entity head, closest_target = world;
                        head = WarpZone_FindRadius(player.origin, autocvar_g_ctf_pass_radius, TRUE);
-                       
+
                        while(head) // find the closest acceptable target to pass to
                        {
                                if(IS_PLAYER(head) && head.deadflag == DEAD_NO)
                                if(head != player && SAME_TEAM(head, player))
                                if(!head.speedrunning && !head.vehicle)
                                {
-                                       // if it's a player, use the view origin as reference (stolen from RadiusDamage functions in g_damage.qc) 
+                                       // if it's a player, use the view origin as reference (stolen from RadiusDamage functions in g_damage.qc)
                                        vector head_center = WarpZone_UnTransformOrigin(head, CENTER_OR_VIEWOFS(head));
                                        vector passer_center = CENTER_OR_VIEWOFS(player);
-                                       
+
                                        if(ctf_CheckPassDirection(head_center, passer_center, player.v_angle, head.WarpZone_findradius_nearest))
                                        {
-                                               if(autocvar_g_ctf_pass_request && !player.flagcarried && head.flagcarried) 
-                                               { 
+                                               if(autocvar_g_ctf_pass_request && !player.flagcarried && head.flagcarried)
+                                               {
                                                        if(IS_BOT_CLIENT(head))
                                                        {
                                                                Send_Notification(NOTIF_ONE, player, MSG_CENTER, CENTER_CTF_PASS_REQUESTING, head.netname);
@@ -1825,8 +1825,8 @@ MUTATOR_HOOKFUNCTION(ctf_PlayerUseKey)
                                                                Send_Notification(NOTIF_ONE, head, MSG_CENTER, CENTER_CTF_PASS_REQUESTED, player.netname);
                                                                Send_Notification(NOTIF_ONE, player, MSG_CENTER, CENTER_CTF_PASS_REQUESTING, head.netname);
                                                        }
-                                                       player.throw_antispam = time + autocvar_g_ctf_pass_wait; 
-                                                       return TRUE; 
+                                                       player.throw_antispam = time + autocvar_g_ctf_pass_wait;
+                                                       return TRUE;
                                                }
                                                else if(player.flagcarried)
                                                {
@@ -1842,10 +1842,10 @@ MUTATOR_HOOKFUNCTION(ctf_PlayerUseKey)
                                }
                                head = head.chain;
                        }
-                       
+
                        if(closest_target) { ctf_Handle_Throw(player, closest_target, DROP_PASS); return TRUE; }
                }
-               
+
                // throw the flag in front of you
                if(autocvar_g_ctf_throw && player.flagcarried)
                {
@@ -1869,14 +1869,14 @@ MUTATOR_HOOKFUNCTION(ctf_PlayerUseKey)
                                if(time > player.throw_prevtime + autocvar_g_ctf_throw_punish_time) { player.throw_count = 1; }
                                else { player.throw_count += 1; }
                                if(player.throw_count >= autocvar_g_ctf_throw_punish_count) { player.throw_count = -1; }
-                                       
+
                                player.throw_prevtime = time;
                                ctf_Handle_Throw(player, world, DROP_THROW);
                                return TRUE;
                        }
                }
        }
-               
+
        return FALSE;
 }
 
@@ -1886,7 +1886,7 @@ MUTATOR_HOOKFUNCTION(ctf_HelpMePing)
        {
                self.wps_helpme_time = time;
                WaypointSprite_HelpMePing(self.wps_flagcarrier);
-       } 
+       }
        else // create a normal help me waypointsprite
        {
                WaypointSprite_Spawn("helpme", waypointsprite_deployed_lifetime, waypointsprite_limitedrange, self, FLAG_WAYPOINT_OFFSET, world, self.team, self, wps_helpme, FALSE, RADARICON_HELPME, '1 0.5 0');
@@ -1905,15 +1905,15 @@ MUTATOR_HOOKFUNCTION(ctf_VehicleEnter)
                        ctf_Handle_Throw(vh_player, world, DROP_NORMAL);
                }
                else
-               {            
-                       setattachment(vh_player.flagcarried, vh_vehicle, ""); 
+               {
+                       setattachment(vh_player.flagcarried, vh_vehicle, "");
                        setorigin(vh_player.flagcarried, VEHICLE_FLAG_OFFSET);
                        vh_player.flagcarried.scale = VEHICLE_FLAG_SCALE;
-                       //vh_player.flagcarried.angles = '0 0 0';       
+                       //vh_player.flagcarried.angles = '0 0 0';
                }
                return TRUE;
        }
-               
+
        return FALSE;
 }
 
@@ -1921,7 +1921,7 @@ MUTATOR_HOOKFUNCTION(ctf_VehicleExit)
 {
        if(vh_player.flagcarried)
        {
-               setattachment(vh_player.flagcarried, vh_player, ""); 
+               setattachment(vh_player.flagcarried, vh_player, "");
                setorigin(vh_player.flagcarried, FLAG_CARRY_OFFSET);
                vh_player.flagcarried.scale = FLAG_SCALE;
                vh_player.flagcarried.angles = '0 0 0';
@@ -1939,14 +1939,14 @@ MUTATOR_HOOKFUNCTION(ctf_AbortSpeedrun)
                ctf_RespawnFlag(self.flagcarried);
                return TRUE;
        }
-       
+
        return FALSE;
 }
 
 MUTATOR_HOOKFUNCTION(ctf_MatchEnd)
 {
        entity flag; // temporary entity for the search method
-       
+
        for(flag = ctf_worldflaglist; flag; flag = flag.ctf_worldflagnext)
        {
                switch(flag.ctf_status)
@@ -1959,11 +1959,11 @@ MUTATOR_HOOKFUNCTION(ctf_MatchEnd)
                                flag.takedamage = DAMAGE_NO;
                                flag.solid = SOLID_NOT;
                                flag.nextthink = FALSE; // stop thinking
-                               
+
                                //dprint("stopping the ", flag.netname, " from moving.\n");
                                break;
                        }
-                       
+
                        default:
                        case FLAG_BASE:
                        case FLAG_CARRY:
@@ -1973,7 +1973,7 @@ MUTATOR_HOOKFUNCTION(ctf_MatchEnd)
                        }
                }
        }
-       
+
        return FALSE;
 }
 
@@ -1994,7 +1994,7 @@ Keys: "angle" viewing angle when spawning. */
 void spawnfunc_info_player_team1()
 {
        if(g_assault) { remove(self); return; }
-       
+
        self.team = NUM_TEAM_1; // red
        spawnfunc_info_player_deathmatch();
 }
@@ -2006,7 +2006,7 @@ Keys: "angle" viewing angle when spawning. */
 void spawnfunc_info_player_team2()
 {
        if(g_assault) { remove(self); return; }
-       
+
        self.team = NUM_TEAM_2; // blue
        spawnfunc_info_player_deathmatch();
 }
@@ -2017,7 +2017,7 @@ Keys: "angle" viewing angle when spawning. */
 void spawnfunc_info_player_team3()
 {
        if(g_assault) { remove(self); return; }
-       
+
        self.team = NUM_TEAM_3; // yellow
        spawnfunc_info_player_deathmatch();
 }
@@ -2029,20 +2029,20 @@ Keys: "angle" viewing angle when spawning. */
 void spawnfunc_info_player_team4()
 {
        if(g_assault) { remove(self); return; }
-       
+
        self.team = NUM_TEAM_4; // purple
        spawnfunc_info_player_deathmatch();
 }
 
 /*QUAKED spawnfunc_item_flag_team1 (0 0.5 0.8) (-48 -48 -37) (48 48 37)
 CTF flag for team one (Red).
-Keys: 
-"angle" Angle the flag will point (minus 90 degrees)... 
+Keys:
+"angle" Angle the flag will point (minus 90 degrees)...
 "model" model to use, note this needs red and blue as skins 0 and 1...
 "noise" sound played when flag is picked up...
 "noise1" sound played when flag is returned by a teammate...
 "noise2" sound played when flag is captured...
-"noise3" sound played when flag is lost in the field and respawns itself... 
+"noise3" sound played when flag is lost in the field and respawns itself...
 "noise4" sound played when flag is dropped by a player...
 "noise5" sound played when flag touches the ground... */
 void spawnfunc_item_flag_team1()
@@ -2054,13 +2054,13 @@ void spawnfunc_item_flag_team1()
 
 /*QUAKED spawnfunc_item_flag_team2 (0 0.5 0.8) (-48 -48 -37) (48 48 37)
 CTF flag for team two (Blue).
-Keys: 
-"angle" Angle the flag will point (minus 90 degrees)... 
+Keys:
+"angle" Angle the flag will point (minus 90 degrees)...
 "model" model to use, note this needs red and blue as skins 0 and 1...
 "noise" sound played when flag is picked up...
 "noise1" sound played when flag is returned by a teammate...
 "noise2" sound played when flag is captured...
-"noise3" sound played when flag is lost in the field and respawns itself... 
+"noise3" sound played when flag is lost in the field and respawns itself...
 "noise4" sound played when flag is dropped by a player...
 "noise5" sound played when flag touches the ground... */
 void spawnfunc_item_flag_team2()
@@ -2079,7 +2079,7 @@ Keys:
 void spawnfunc_ctf_team()
 {
        if(!g_ctf) { remove(self); return; }
-       
+
        self.classname = "ctf_team";
        self.team = self.cnt + 1;
 }
@@ -2135,7 +2135,7 @@ void ctf_DelayedInit() // Do this check with a delay so we can wait for teams to
                ctf_SpawnTeam("Red", NUM_TEAM_1 - 1);
                ctf_SpawnTeam("Blue", NUM_TEAM_2 - 1);
        }
-       
+
        ctf_ScoreRules();
 }
 
@@ -2146,7 +2146,7 @@ void ctf_Initialize()
        ctf_captureshield_min_negscore = autocvar_g_ctf_shield_min_negscore;
        ctf_captureshield_max_ratio = autocvar_g_ctf_shield_max_ratio;
        ctf_captureshield_force = autocvar_g_ctf_shield_force;
-       
+
        InitializeEntity(world, ctf_DelayedInit, INITPRIO_GAMETYPE);
 }
 
@@ -2167,7 +2167,7 @@ MUTATOR_DEFINITION(gamemode_ctf)
        MUTATOR_HOOK(VehicleExit, ctf_VehicleExit, CBC_ORDER_ANY);
        MUTATOR_HOOK(AbortSpeedrun, ctf_AbortSpeedrun, CBC_ORDER_ANY);
        MUTATOR_HOOK(HavocBot_ChooseRule, ctf_BotRoles, CBC_ORDER_ANY);
-       
+
        MUTATOR_ONADD
        {
                if(time > 1) // game loads at time 1
index 58699208e502280984a37c070ff332d066ab8b2f..ca4961eddc24231a6056943a0b2bffcdb5dcec06 100644 (file)
@@ -38,7 +38,7 @@ void ctf_RespawnFlag(entity flag);
 #define WPCOLOR_FLAGCARRIER(t) ('0.8 0.8 0')
 #define WPCOLOR_DROPPEDFLAG(t) (('0.25 0.25 0.25' + colormapPaletteColor(t - 1, FALSE)) * 0.5)
 
-// sounds 
+// sounds
 #define snd_flag_taken noise
 #define snd_flag_returned noise1
 #define snd_flag_capture noise2
@@ -60,7 +60,7 @@ entity ctf_worldflaglist;
 // waypoint sprites
 .entity bot_basewaypoint; // flag waypointsprite
 .entity wps_helpme;
-.entity wps_flagbase; 
+.entity wps_flagbase;
 .entity wps_flagcarrier;
 .entity wps_flagdropped;
 .entity wps_enemyflagcarrier;
index 50f512991723b0b7e45d40d1686914eb4ed39c10..89e6fe485d8efba5489b687e4d38e5888946cade 100644 (file)
@@ -34,7 +34,7 @@ void dompoint_captured ()
        self.model = head.mdl;
        self.modelindex = head.dmg;
        self.skin = head.skin;
-       
+
        float points, wait_time;
        if (autocvar_g_domination_point_amt)
                points = autocvar_g_domination_point_amt;
@@ -75,7 +75,7 @@ void dompoint_captured ()
        SUB_UseTargets ();
        self.delay = old_delay;
        self.team = old_team;
-       
+
        switch(self.team)
        {
                case NUM_TEAM_1: msg = "dom-red"; break;
@@ -85,7 +85,7 @@ void dompoint_captured ()
        }
 
        WaypointSprite_UpdateSprites(self.sprite, msg, "", "");
-       
+
        total_pps = 0, pps_red = 0, pps_blue = 0, pps_yellow = 0, pps_pink = 0;
        for(head = world; (head = find(head, classname, "dom_controlpoint")) != world; )
        {
@@ -182,7 +182,7 @@ void dompointthink()
 void dompointtouch()
 {
        entity head;
-       if not(IS_PLAYER(other))
+       if (!IS_PLAYER(other))
                return;
        if (other.health < 1)
                return;
@@ -467,7 +467,7 @@ void dom_DelayedInit() // Do this check with a delay so we can wait for teams to
                print("No ""dom_team"" entities found on this map, creating them anyway.\n");
                dom_spawnteams();
        }
-       
+
        ScoreRules_dom();
 }
 
@@ -479,13 +479,13 @@ void dom_Initialize()
        precache_model("models/domination/dom_pink.md3");
        precache_model("models/domination/dom_unclaimed.md3");
        precache_sound("domination/claim.wav");
-       
+
        addstat(STAT_DOM_TOTAL_PPS, AS_FLOAT, dom_total_pps);
        addstat(STAT_DOM_PPS_RED, AS_FLOAT, dom_pps_red);
        addstat(STAT_DOM_PPS_BLUE, AS_FLOAT, dom_pps_blue);
        if(c3 >= 0) addstat(STAT_DOM_PPS_YELLOW, AS_FLOAT, dom_pps_yellow);
        if(c4 >= 0) addstat(STAT_DOM_PPS_PINK, AS_FLOAT, dom_pps_pink);
-       
+
        InitializeEntity(world, dom_DelayedInit, INITPRIO_GAMETYPE);
 }
 
@@ -494,7 +494,7 @@ MUTATOR_DEFINITION(gamemode_domination)
 {
        MUTATOR_HOOK(ClientConnect, dom_ClientConnect, CBC_ORDER_ANY);
        MUTATOR_HOOK(HavocBot_ChooseRule, dom_BotRoles, CBC_ORDER_ANY);
-       
+
        MUTATOR_ONADD
        {
                if(time > 1) // game loads at time 1
index 0c22db05bc4216110662ee8e6ea93a01f4da7c3a..9bc06522374aaae4e22b810d3c1a73afbaf3b46c 100644 (file)
@@ -531,7 +531,7 @@ MUTATOR_HOOKFUNCTION(freezetag_PlayerPhysics)
                }
                else
                        self.movement = '0 0 0';
-                       
+
                self.disableclientprediction = 1;
        }
        return 1;
@@ -551,7 +551,7 @@ MUTATOR_HOOKFUNCTION(freezetag_PlayerDamage_Calculate)
                        Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_FREEZETAG_REVIVED_FALL, frag_target.netname);
                        Send_Notification(NOTIF_ONE, frag_target, MSG_CENTER, CENTER_FREEZETAG_REVIVE_FALL);
                }
-       
+
                frag_damage = 0;
                frag_force = frag_force * autocvar_g_freezetag_frozen_force;
        }
@@ -562,7 +562,7 @@ MUTATOR_HOOKFUNCTION(freezetag_PlayerJump)
 {
        if(self.freezetag_frozen)
                return TRUE; // no jumping in freezetag when frozen
-       
+
        return FALSE;
 }
 
@@ -582,7 +582,7 @@ MUTATOR_HOOKFUNCTION(freezetag_ItemTouch)
 
 MUTATOR_HOOKFUNCTION(freezetag_BotRoles)
 {
-       if not(self.deadflag)
+       if (!self.deadflag)
        {
                if (random() < 0.5)
                        self.havocbot_role = havocbot_role_ft_freeing;
@@ -614,7 +614,7 @@ MUTATOR_HOOKFUNCTION(freezetag_VehicleTouch)
 {
        if(other.freezetag_frozen)
                return TRUE;
-               
+
        return FALSE;
 }
 
index 145636239c265d2e661ca30d0a6a4fd8b441a32b..ec6ee8cd4c6d83b60ef19dec2e9d575439fb9127 100644 (file)
@@ -3,12 +3,12 @@
 //  Last updated: September, 2012
 // ===========================================================
 
-float ka_ballcarrier_waypointsprite_visible_for_player(entity e) // runs on waypoints which are attached to ballcarriers, updates once per frame 
+float ka_ballcarrier_waypointsprite_visible_for_player(entity e) // runs on waypoints which are attached to ballcarriers, updates once per frame
 {
        if(e.ballcarried)
-               if(IS_SPEC(other)) 
+               if(IS_SPEC(other))
                        return FALSE; // we don't want spectators of the ballcarrier to see the attached waypoint on the top of their screen
-               
+
        // TODO: Make the ballcarrier lack a waypointsprite whenever they have the invisibility powerup
 
        return TRUE;
@@ -24,7 +24,7 @@ void ka_RespawnBall() // runs whenever the ball needs to be relocated
 {
        if(gameover) { return; }
        vector oldballorigin = self.origin;
-       
+
        if(MoveToRandomMapLocation(self, DPCONTENTS_SOLID | DPCONTENTS_CORPSE | DPCONTENTS_PLAYERCLIP, DPCONTENTS_SLIME | DPCONTENTS_LAVA | DPCONTENTS_SKY | DPCONTENTS_BODY | DPCONTENTS_DONOTENTER, Q3SURFACEFLAG_SKY, 10, 1024, 256))
        {
                makevectors(self.angles);
@@ -34,18 +34,18 @@ void ka_RespawnBall() // runs whenever the ball needs to be relocated
                self.effects = autocvar_g_keepawayball_effects;
                self.think = ka_RespawnBall;
                self.nextthink = time + autocvar_g_keepawayball_respawntime;
-               
+
                pointparticles(particleeffectnum("electro_combo"), oldballorigin, '0 0 0', 1);
                pointparticles(particleeffectnum("electro_combo"), self.origin, '0 0 0', 1);
 
                WaypointSprite_Spawn("ka-ball", 0, 0, self, '0 0 64', world, self.team, self, waypointsprite_attachedforcarrier, FALSE, RADARICON_FLAGCARRIER, '0 1 1');
-               WaypointSprite_Ping(self.waypointsprite_attachedforcarrier);    
+               WaypointSprite_Ping(self.waypointsprite_attachedforcarrier);
 
-               sound(self, CH_TRIGGER, "keepaway/respawn.wav", VOL_BASE, ATTEN_NONE); // ATTEN_NONE (it's a sound intended to be heard anywhere) 
+               sound(self, CH_TRIGGER, "keepaway/respawn.wav", VOL_BASE, ATTEN_NONE); // ATTEN_NONE (it's a sound intended to be heard anywhere)
        }
        else
        {
-               ka_RespawnBall(); // finding a location failed, retry 
+               ka_RespawnBall(); // finding a location failed, retry
        }
 }
 
@@ -55,7 +55,7 @@ void ka_TimeScoring()
        { // add points for holding the ball after a certain amount of time
                if(autocvar_g_keepaway_score_timepoints)
                        PlayerScore_Add(self.owner, SP_SCORE, autocvar_g_keepaway_score_timepoints);
-                       
+
                PlayerScore_Add(self.owner, SP_KEEPAWAY_BCTIME, (autocvar_g_keepaway_score_timeinterval / 1)); // interval is divided by 1 so that time always shows "seconds"
                self.nextthink = time + autocvar_g_keepaway_score_timeinterval;
        }
@@ -71,11 +71,11 @@ void ka_TouchEvent() // runs any time that the ball comes in contact with someth
                return;
        }
        if(other.deadflag != DEAD_NO) { return; }
-       if not(IS_PLAYER(other)) 
+       if (!IS_PLAYER(other))
        {  // The ball just touched an object, most likely the world
                pointparticles(particleeffectnum("kaball_sparks"), self.origin, '0 0 0', 1);
                sound(self, CH_TRIGGER, "keepaway/touch.wav", VOL_BASE, ATTEN_NORM);
-               return; 
+               return;
        }
        else if(self.wait > time) { return; }
 
@@ -84,7 +84,7 @@ void ka_TouchEvent() // runs any time that the ball comes in contact with someth
        other.ballcarried = self;
        setattachment(self, other, "");
        setorigin(self, '0 0 0');
-       
+
        // make the ball invisible/unable to do anything/set up time scoring
        self.velocity = '0 0 0';
        self.movetype = MOVETYPE_NONE;
@@ -98,13 +98,13 @@ void ka_TouchEvent() // runs any time that the ball comes in contact with someth
        other.glow_color = autocvar_g_keepawayball_trail_color;
        other.glow_trail = TRUE;
        other.effects |= autocvar_g_keepaway_ballcarrier_effects;
-       
+
        // messages and sounds
        ka_EventLog("pickup", other);
        Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_KEEPAWAY_PICKUP, other.netname);
        Send_Notification(NOTIF_ALL, world, MSG_CENTER, CENTER_KEEPAWAY_PICKUP, other.netname);
-       sound(self.owner, CH_TRIGGER, "keepaway/pickedup.wav", VOL_BASE, ATTEN_NONE); // ATTEN_NONE (it's a sound intended to be heard anywhere) 
-       
+       sound(self.owner, CH_TRIGGER, "keepaway/pickedup.wav", VOL_BASE, ATTEN_NONE); // ATTEN_NONE (it's a sound intended to be heard anywhere)
+
        // scoring
        PlayerScore_Add(other, SP_KEEPAWAY_PICKUPS, 1);
 
@@ -112,7 +112,7 @@ void ka_TouchEvent() // runs any time that the ball comes in contact with someth
        WaypointSprite_AttachCarrier("ka-ballcarrier", other, RADARICON_FLAGCARRIER, '1 0 0');
        other.waypointsprite_attachedforcarrier.waypointsprite_visible_for_player = ka_ballcarrier_waypointsprite_visible_for_player;
        WaypointSprite_UpdateRule(other.waypointsprite_attachedforcarrier, 0, SPRITERULE_DEFAULT);
-       WaypointSprite_Ping(other.waypointsprite_attachedforcarrier);   
+       WaypointSprite_Ping(other.waypointsprite_attachedforcarrier);
        WaypointSprite_Kill(self.waypointsprite_attachedforcarrier);
 }
 
@@ -122,21 +122,21 @@ void ka_DropEvent(entity plyr) // runs any time that a player is supposed to los
        ball = plyr.ballcarried;
 
        if(!ball) { return; }
-       
+
        // reset the ball
        setattachment(ball, world, "");
        ball.movetype = MOVETYPE_BOUNCE;
-       ball.wait = time + 1; 
+       ball.wait = time + 1;
        ball.touch = ka_TouchEvent;
        ball.think = ka_RespawnBall;
        ball.nextthink = time + autocvar_g_keepawayball_respawntime;
        ball.takedamage = DAMAGE_YES;
-       ball.effects &= ~EF_NODRAW; 
+       ball.effects &= ~EF_NODRAW;
        setorigin(ball, plyr.origin + '0 0 10');
        ball.velocity = '0 0 200' + '0 100 0'*crandom() + '100 0 0'*crandom();
-       ball.owner.ballcarried = world; // I hope nothing checks to see if the world has the ball in the rest of my code :P 
+       ball.owner.ballcarried = world; // I hope nothing checks to see if the world has the ball in the rest of my code :P
        ball.owner = world;
-       
+
        // reset the player effects
        plyr.glow_trail = FALSE;
        plyr.effects &= ~autocvar_g_keepaway_ballcarrier_effects;
@@ -145,15 +145,15 @@ void ka_DropEvent(entity plyr) // runs any time that a player is supposed to los
        ka_EventLog("dropped", plyr);
        Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_KEEPAWAY_DROPPED, plyr.netname);
        Send_Notification(NOTIF_ALL, world, MSG_CENTER, CENTER_KEEPAWAY_DROPPED, plyr.netname);
-       sound(other, CH_TRIGGER, "keepaway/dropped.wav", VOL_BASE, ATTEN_NONE); // ATTEN_NONE (it's a sound intended to be heard anywhere) 
-       
+       sound(other, CH_TRIGGER, "keepaway/dropped.wav", VOL_BASE, ATTEN_NONE); // ATTEN_NONE (it's a sound intended to be heard anywhere)
+
        // scoring
        // PlayerScore_Add(plyr, SP_KEEPAWAY_DROPS, 1); Not anymore, this is 100% the same as pickups and is useless.
-       
+
        // waypoints
        WaypointSprite_Spawn("ka-ball", 0, 0, ball, '0 0 64', world, ball.team, ball, waypointsprite_attachedforcarrier, FALSE, RADARICON_FLAGCARRIER, '0 1 1');
        WaypointSprite_UpdateRule(ball.waypointsprite_attachedforcarrier, 0, SPRITERULE_DEFAULT);
-       WaypointSprite_Ping(ball.waypointsprite_attachedforcarrier);    
+       WaypointSprite_Ping(ball.waypointsprite_attachedforcarrier);
        WaypointSprite_Kill(plyr.waypointsprite_attachedforcarrier);
 }
 
@@ -265,14 +265,14 @@ MUTATOR_HOOKFUNCTION(ka_Scoring)
 MUTATOR_HOOKFUNCTION(ka_GiveFragsForKill)
 {
        frag_score = 0; // no frags counted in keepaway
-       return 1; // you deceptive little bugger ;3 This needs to be true in order for this function to even count. 
+       return 1; // you deceptive little bugger ;3 This needs to be true in order for this function to even count.
 }
 
 MUTATOR_HOOKFUNCTION(ka_PlayerPreThink)
 {
        // clear the item used for the ball in keepaway
        self.items &= ~IT_KEY1;
-       
+
        // if the player has the ball, make sure they have the item for it (Used for HUD primarily)
        if(self.ballcarried)
                self.items |= IT_KEY1;
@@ -306,7 +306,7 @@ MUTATOR_HOOKFUNCTION(ka_PlayerDamage) // for changing damage and force values th
                        frag_force *= autocvar_g_keepaway_ballcarrier_force;
                }
        }
-       else if not(frag_target.ballcarried) // if the target is a noncarrier
+       else if (!frag_target.ballcarried) // if the target is a noncarrier
        {
                if(frag_target == frag_attacker) // damage done to yourself
                {
@@ -331,13 +331,13 @@ MUTATOR_HOOKFUNCTION(ka_RemovePlayer)
 MUTATOR_HOOKFUNCTION(ka_PlayerPowerups)
 {
        // In the future this hook is supposed to allow me to do some extra stuff with waypointsprites and invisibility powerup
-       // So bare with me until I can fix a certain bug with ka_ballcarrier_waypointsprite_visible_for_player() 
-       
+       // So bare with me until I can fix a certain bug with ka_ballcarrier_waypointsprite_visible_for_player()
+
        self.effects &= ~autocvar_g_keepaway_ballcarrier_effects;
 
        if(self.ballcarried)
                self.effects |= autocvar_g_keepaway_ballcarrier_effects;
-       
+
        return 0;
 }
 
@@ -358,10 +358,10 @@ MUTATOR_HOOKFUNCTION(ka_BotRoles)
 void ka_SpawnBall() // loads various values for the ball, runs only once at start of match
 {
        if(!g_keepaway) { return; }
-       
+
        entity e;
        e = spawn();
-       e.model = "models/orbs/orbblue.md3";    
+       e.model = "models/orbs/orbblue.md3";
        precache_model(e.model);
        setmodel(e, e.model);
        setsize(e, '-16 -16 -20', '16 16 20'); // 20 20 20 was too big, player is only 16 16 24... gotta cheat with the Z (20) axis so that the particle isn't cut off
@@ -378,7 +378,7 @@ void ka_SpawnBall() // loads various values for the ball, runs only once at star
        e.owner = world;
        ka_ball = e;
 
-       InitializeEntity(e, ka_RespawnBall, INITPRIO_SETLOCATION); // is this the right priority? Neh, I have no idea.. Well-- it works! So. 
+       InitializeEntity(e, ka_RespawnBall, INITPRIO_SETLOCATION); // is this the right priority? Neh, I have no idea.. Well-- it works! So.
 }
 
 void ka_ScoreRules()
@@ -394,7 +394,7 @@ void ka_Initialize() // run at the start of a match, initiates game mode
 {
        if(!g_keepaway)
                return;
-               
+
        precache_sound("keepaway/pickedup.wav");
        precache_sound("keepaway/dropped.wav");
        precache_sound("keepaway/respawn.wav");
index a0cbf619a77f61a6ea73a0e16bbf2c3c7c0b3f90..34d87f97bb677aaaa3c87c99a1b4a808938df8f3 100644 (file)
@@ -426,7 +426,7 @@ void kh_Key_Touch()  // runs many, many times when a key has been dropped and ca
                // maybe start a shorter countdown?
        }
 
-       if not(IS_PLAYER(other))
+       if (!IS_PLAYER(other))
                return;
        if(other.deadflag != DEAD_NO)
                return;
@@ -627,9 +627,9 @@ void kh_LoserTeam(float teem, entity lostkey)  // runs when a player pushes a fl
                        --j;
                }
        }
-       
+
        Send_Notification(NOTIF_ALL, world, MSG_INFO, APP_TEAM_ENT_4(lostkey, INFO_KEYHUNT_LOST_), lostkey.kh_previous_owner.netname);
-       
+
        play2all(kh_sound_destroy);
        te_tarexplosion(lostkey.origin);
 
@@ -790,7 +790,7 @@ void kh_Key_DropOne(entity key)
        kh_Scores_Event(player, key, "dropkey", 0, 0);
        PlayerScore_Add(player, SP_KH_LOSSES, 1);
        Send_Notification(NOTIF_ALL, world, MSG_INFO, APP_TEAM_ENT_4(key, INFO_KEYHUNT_DROP_), player.netname);
-       
+
        kh_Key_AssignTo(key, world);
        makevectors(player.v_angle);
        key.velocity = W_CalculateProjectileVelocity(player.velocity, autocvar_g_balance_keyhunt_throwvelocity * v_forward, FALSE);
@@ -840,8 +840,8 @@ float kh_CheckPlayers(float num)
                                if(!tmp_player.BUTTON_CHAT)
                                        if(tmp_player.team == t_team)
                                                ++players;
-               
-               if not(players) { return t_team; }
+
+               if (!players) { return t_team; }
        }
        return 0;
 }
@@ -855,7 +855,7 @@ void kh_WaitForPlayers()  // delay start of the round until enough players are p
        }
 
        float p1 = kh_CheckPlayers(0), p2 = kh_CheckPlayers(1), p3 = kh_CheckPlayers(2), p4 = kh_CheckPlayers(3);
-       if not(p1 || p2 || p3 || p4)
+       if (!(p1 || p2 || p3 || p4))
        {
                Send_Notification(NOTIF_ALL, world, MSG_CENTER, CENTER_KEYHUNT_ROUNDSTART, autocvar_g_balance_keyhunt_delay_round);
                kh_Controller_SetThink(autocvar_g_balance_keyhunt_delay_round, kh_StartRound);
@@ -893,7 +893,7 @@ void kh_StartRound()  // runs at the start of each round
                Send_Notification(NOTIF_ALL, world, MSG_CENTER, CENTER_KEYHUNT_WAIT, p1, p2, p3, p4);
                return;
        }
-       
+
        Kill_Notification(NOTIF_ALL, world, MSG_CENTER_CPID, CPID_KEYHUNT);
        Kill_Notification(NOTIF_ALL, world, MSG_CENTER_CPID, CPID_KEYHUNT_OTHER);
 
index f980607a7e5b71c2332707d07fc5827b4cd9633d..928c78b349470e078d3f22eacf4a2ffb377cd6b0 100644 (file)
@@ -22,7 +22,7 @@ MUTATOR_HOOKFUNCTION(lms_ResetMap)
 {
        lms_lowest_lives = 999;
        lms_next_place = player_count;
-       
+
        return FALSE;
 }
 
@@ -32,7 +32,7 @@ MUTATOR_HOOKFUNCTION(lms_ResetPlayers)
        FOR_EACH_CLIENT(self)
        if(IS_PLAYER(self))
                PlayerScore_Add(self, SP_LMS_LIVES, LMS_NewPlayerLives());
-       
+
        return FALSE;
 }
 
@@ -49,7 +49,7 @@ MUTATOR_HOOKFUNCTION(lms_PlayerPreSpawn)
 MUTATOR_HOOKFUNCTION(lms_PlayerDies)
 {
        self.respawn_flags |= RESPAWN_FORCE;
-       
+
        return FALSE;
 }
 
@@ -60,13 +60,13 @@ MUTATOR_HOOKFUNCTION(lms_RemovePlayer)
                self.frags = FRAGS_SPECTATOR;
        else
                self.frags = FRAGS_LMS_LOSER;
-               
+
        if(self.killcount != -666)
                if(PlayerScore_Add(self, SP_LMS_RANK, 0) > 0 && self.lms_spectate_warning != 2)
                        Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_LMS_NOLIVES, self.netname);
                else
                        Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_LMS_FORFEIT, self.netname);
-               
+
        return FALSE;
 }
 
@@ -74,13 +74,13 @@ MUTATOR_HOOKFUNCTION(lms_ClientConnect)
 {
        self.classname = "player";
        campaign_bots_may_start = 1;
-       
+
        if(PlayerScore_Add(self, SP_LMS_LIVES, LMS_NewPlayerLives()) <= 0)
        {
                PlayerScore_Add(self, SP_LMS_RANK, 666);
                self.frags = FRAGS_SPECTATOR;
        }
-                       
+
        return FALSE;
 }
 
@@ -88,7 +88,7 @@ MUTATOR_HOOKFUNCTION(lms_PlayerThink)
 {
        if(self.deadflag == DEAD_DYING)
                self.deadflag = DEAD_RESPAWNING;
-               
+
        return FALSE;
 }
 
@@ -115,7 +115,7 @@ MUTATOR_HOOKFUNCTION(lms_GiveFragsForKill)
                --lms_next_place;
        }
        frag_score = 0;
-               
+
        return TRUE;
 }
 
@@ -147,7 +147,7 @@ MUTATOR_HOOKFUNCTION(lms_FilterItem)
                self.max_health = 1;
                return FALSE;
        }
-       
+
        return TRUE;
 }
 
@@ -159,7 +159,7 @@ MUTATOR_HOOKFUNCTION(lms_ItemTouch)
                Send_Notification(NOTIF_ONE, other, MSG_CENTER, CENTER_EXTRALIVES);
                PlayerScore_Add(other, SP_LMS_LIVES, autocvar_g_lms_extra_lives);
        }
-       
+
        return MUT_ITEMTOUCH_CONTINUE;
 }
 
@@ -176,7 +176,7 @@ void lms_Initialize()
 {
        lms_lowest_lives = 9999;
        lms_next_place = 0;
-       
+
        lms_ScoreRules();
 }
 
index 5831250d2d4b29cf144821413fc4028d7239483f..2d2c857e90dbff166c673e53f05488bb6970e878 100644 (file)
@@ -107,7 +107,7 @@ void GiveBall(entity plyr, entity ball)
        {
                WaypointSprite_Kill(ball.waypointsprite_attachedforcarrier);
        }
-       
+
        //setattachment(ball, plyr, "");
        setorigin(ball, plyr.origin + plyr.view_ofs);
 
@@ -136,9 +136,9 @@ void GiveBall(entity plyr, entity ball)
                ball.think = DropOwner;
                ball.nextthink = time + autocvar_g_nexball_basketball_delay_hold;
        }
-       
+
        ownr = self;
-       self = plyr;    
+       self = plyr;
        self.weaponentity.weapons = self.weapons;
        self.weaponentity.switchweapon = self.weapon;
        self.weapons = WEPSET_PORTO;
@@ -248,7 +248,7 @@ void football_touch(void)
                        self.nextthink = time + autocvar_g_nexball_delay_idle;
                return;
        }
-       if not(IS_PLAYER(other))
+       if (!IS_PLAYER(other))
                return;
        if(other.health < 1)
                return;
@@ -529,7 +529,7 @@ void spawnfunc_nexball_basketball(void)
 {
        nexball_mode |= NBM_BASKETBALL;
        self.classname = "nexball_basketball";
-       if not(balls & BALL_BASKET)
+       if (!(balls & BALL_BASKET))
        {
                /*
                CVTOV(g_nexball_basketball_effects_default);
@@ -655,13 +655,13 @@ void W_Nexball_Think()
        //dprint("W_Nexball_Think\n");
        //vector new_dir = steerlib_arrive(self.enemy.origin, 2500);
        vector new_dir = normalize(self.enemy.origin + '0 0 50' - self.origin);
-       vector old_dir = normalize(self.velocity);       
-       float _speed = vlen(self.velocity);     
+       vector old_dir = normalize(self.velocity);
+       float _speed = vlen(self.velocity);
        vector new_vel = normalize(old_dir + (new_dir * autocvar_g_nexball_safepass_turnrate)) * _speed;
        //vector new_vel = (new_dir * autocvar_g_nexball_safepass_turnrate
-       
+
        self.velocity = new_vel;
-       
+
        self.nextthink = time;
 }
 
@@ -671,7 +671,7 @@ void W_Nexball_Touch(void)
        attacker = self.owner;
        //self.think = func_null;
        //self.enemy = world;
-       
+
        PROJECTILE_TOUCH;
        if(attacker.team != other.team || autocvar_g_nexball_basketball_teamsteal)
                if((ball = other.ballcarried) && (IS_PLAYER(attacker)))
@@ -725,9 +725,9 @@ void W_Nexball_Attack(float t)
                        mul = 2 - mul;
                mul = mi + (ma - mi) * mul; // range from the minimal power to the maximal power
        }
-       
+
        DropBall(ball, w_shotorg, W_CalculateProjectileVelocity(self.velocity, w_shotdir * autocvar_g_balance_nexball_primary_speed * mul, FALSE));
-       
+
 
        //TODO: use the speed_up cvar too ??
 }
@@ -743,10 +743,10 @@ void W_Nexball_Attack2(void)
                _ball.nextthink = time;
                return;
        }
-       
+
        if(!autocvar_g_nexball_tackling)
                return;
-       
+
        entity missile;
        if(!(balls & BALL_BASKET))
                return;
@@ -782,8 +782,8 @@ float ball_customize()
                self.scale = 1;
                self.customizeentityforclient = func_null;
                return TRUE;
-       }               
-       
+       }
+
        if(other == self.owner)
        {
                self.scale = autocvar_g_nexball_viewmodel_scale;
@@ -791,13 +791,13 @@ float ball_customize()
                        self.effects |= EF_FLAME;
                else
                        self.effects &= ~EF_FLAME;
-       }       
+       }
        else
        {
                self.effects &= ~EF_FLAME;
                self.scale = 1;
        }
-               
+
        return TRUE;
 }
 
@@ -875,18 +875,18 @@ MUTATOR_HOOKFUNCTION(nexball_PlayerPreThink)
 {
        makevectors(self.v_angle);
        if(nexball_mode & NBM_BASKETBALL)
-       {               
+       {
                if(self.ballcarried)
                {
                        // 'view ball'
-                       self.ballcarried.velocity = self.velocity;                      
+                       self.ballcarried.velocity = self.velocity;
                        self.ballcarried.customizeentityforclient = ball_customize;
-                       
-                       setorigin(self.ballcarried, self.origin + self.view_ofs + 
-                                         v_forward * autocvar_g_nexball_viewmodel_offset_x + 
-                                         v_right * autocvar_g_nexball_viewmodel_offset_y + 
-                                         v_up * autocvar_g_nexball_viewmodel_offset_z);        
-                                         
+
+                       setorigin(self.ballcarried, self.origin + self.view_ofs +
+                                         v_forward * autocvar_g_nexball_viewmodel_offset_x +
+                                         v_right * autocvar_g_nexball_viewmodel_offset_y +
+                                         v_up * autocvar_g_nexball_viewmodel_offset_z);
+
                        // 'safe passing'
                        if(autocvar_g_nexball_safepass_maxdist)
                        {
@@ -895,50 +895,50 @@ MUTATOR_HOOKFUNCTION(nexball_PlayerPreThink)
                                        //centerprint(self, sprintf("Lost lock on %s", self.ballcarried.enemy.netname));
                                        self.ballcarried.enemy = world;
                                }
-                                       
-                               
+
+
                                //tracebox(self.origin + self.view_ofs, '-2 -2 -2', '2 2 2', self.origin + self.view_ofs + v_forward * autocvar_g_nexball_safepass_maxdist);
                                crosshair_trace(self);
-                               if( trace_ent && 
+                               if( trace_ent &&
                                        IS_CLIENT(trace_ent) &&
                                        trace_ent.deadflag == DEAD_NO &&
                                        trace_ent.team == self.team &&
                                        vlen(trace_ent.origin - self.origin) <= autocvar_g_nexball_safepass_maxdist )
                                {
-                                       
+
                                        //if(self.ballcarried.enemy != trace_ent)
                                        //      centerprint(self, sprintf("Locked to %s", trace_ent.netname));
                                        self.ballcarried.enemy = trace_ent;
                                        self.ballcarried.wait = time + autocvar_g_nexball_safepass_holdtime;
-                                       
-                                       
+
+
                                }
                        }
                }
                else
-               {                       
+               {
                        if(self.weaponentity.weapons)
                        {
                                self.weapons = self.weaponentity.weapons;
                                weapon_action(WEP_PORTO, WR_RESETPLAYER);
                                self.switchweapon = self.weaponentity.switchweapon;
                                W_SwitchWeapon(self.switchweapon);
-                               
+
                self.weaponentity.weapons = '0 0 0';
                        }
                }
-               
+
        }
-       
+
        nexball_setstatus();
-       
+
        return FALSE;
 }
 
 MUTATOR_HOOKFUNCTION(nexball_PlayerSpawn)
-{      
+{
        self.weaponentity.weapons = '0 0 0';
-       
+
        if(nexball_mode & NBM_BASKETBALL)
                self.weapons |= WEPSET_PORTO;
        else
@@ -950,7 +950,7 @@ MUTATOR_HOOKFUNCTION(nexball_PlayerSpawn)
 MUTATOR_HOOKFUNCTION(nexball_SetStartItems)
 {
        start_items |= IT_UNLIMITED_SUPERWEAPONS; // FIXME BAD BAD BAD BAD HACK, NEXBALL SHOULDN'T ABUSE PORTO'S WEAPON SLOT
-       
+
        return FALSE;
 }
 
index b5b6594d70d384b89ed595692240acd4edf0b3be..6f01db2cdf567766fffe3a4c2fa3c9d54b9049fa 100644 (file)
@@ -407,12 +407,12 @@ void onslaught_generator_think()
                                                d = d + 1;
                                e = e.chain;
                        }
-                       
+
                        if(autocvar_g_campaign && autocvar__campaign_testrun)
                                d = d * self.max_health;
                        else
                                d = d * self.max_health / max(30, 60 * autocvar_timelimit_suddendeath);
-                       
+
                        Damage(self, self, self, d, DEATH_HURTTRIGGER, self.origin, '0 0 0');
                }
                else if (overtime_msg_time)
@@ -510,7 +510,7 @@ void onslaught_generator_deaththink()
        vector org;
        float i;
 
-       if not (self.count)
+       if (!self.count)
                self.count = 40;
 
        // White shockwave
@@ -614,7 +614,7 @@ void onslaught_generator_damage(entity inflictor, entity attacker, float damage,
 #endif
                self.lasthealth = self.health;
        }
-       else if not(warmup_stage)
+       else if (!warmup_stage)
        {
                if (attacker == self)
                        bprint(Team_ColoredFullName(self.team), " generator spontaneously exploded due to overtime!\n");
@@ -910,13 +910,13 @@ void spawnfunc_onslaught_generator()
        precache_sound("onslaught/electricity_explode.wav");
        if (!self.team)
                objerror("team must be set");
-       
+
        if(self.team == NUM_TEAM_1)
         ons_red_generator = self;
 
        if(self.team == NUM_TEAM_2)
         ons_blue_generator = self;
-        
+
        self.team_saved = self.team;
        self.colormap = 1024 + (self.team - 1) * 17;
        self.solid = SOLID_BBOX;
@@ -956,7 +956,7 @@ void spawnfunc_onslaught_generator()
        waypoint_spawnforitem(self);
 
        onslaught_updatelinks();
-       
+
        self.reset = onslaught_generator_reset;
 }
 
@@ -1084,7 +1084,7 @@ void onslaught_controlpoint_icon_think()
         float _friendly_count = 0;
         float _dist;
         entity _player;
-        
+
         FOR_EACH_PLAYER(_player)
         {
             if(!_player.deadflag)
@@ -1226,7 +1226,7 @@ void onslaught_controlpoint_icon_buildthink()
        a = onslaught_controlpoint_can_be_linked(self.owner, self.owner.team);
        if(!a)
                return;
-    
+
        self.health = self.health + self.count;
 
        if (self.health >= self.max_health)
@@ -1271,7 +1271,7 @@ void onslaught_controlpoint_touch()
 {
        entity e;
        float a;
-       if not(IS_PLAYER(other))
+       if (!IS_PLAYER(other))
                return;
        a = onslaught_controlpoint_attackable(self, other.team);
        if(a != 2 && a != 4)
@@ -1304,6 +1304,12 @@ void onslaught_controlpoint_touch()
        onslaught_updatelinks();
 }
 
+void onslaught_controlpoint_think()
+{
+       self.nextthink = time;
+       CSQCMODEL_AUTOUPDATE();
+}
+
 void onslaught_controlpoint_reset()
 {
        if(self.goalentity && self.goalentity != world)
@@ -1316,8 +1322,9 @@ void onslaught_controlpoint_reset()
        self.isshielded = TRUE;
        self.enemy.solid = SOLID_NOT;
        self.enemy.colormap = self.colormap;
-       self.think = self.enemy.think = func_null;
-       self.nextthink = 0; // don't like func_null :P
+       self.think = onslaught_controlpoint_think;
+       self.enemy.think = func_null;
+       self.nextthink = time; // don't like func_null :P
        setmodel(self, "models/onslaught/controlpoint_pad.md3");
        //setsize(self, '-32 -32 0', '32 32 8');
 
@@ -1327,6 +1334,8 @@ void onslaught_controlpoint_reset()
 
        activator = self;
        SUB_UseTargets(); // to reset the structures, playerspawns etc.
+       
+       CSQCMODEL_AUTOUPDATE();
 }
 
 /*QUAKED spawnfunc_onslaught_controlpoint (0 .5 .8) (-32 -32 0) (32 32 128)
@@ -1397,6 +1406,9 @@ void spawnfunc_onslaught_controlpoint()
        self.enemy.colormap = self.colormap;
 
        waypoint_spawnforitem(self);
+       
+       self.think = onslaught_controlpoint_think;
+       self.nextthink = time;
 
        WaypointSprite_SpawnFixed(string_null, self.origin + '0 0 128', self, sprite, RADARICON_NONE, '0 0 0');
        WaypointSprite_UpdateRule(self.sprite, NUM_TEAM_2, SPRITERULE_TEAMPLAY);
@@ -1404,6 +1416,8 @@ void spawnfunc_onslaught_controlpoint()
        onslaught_updatelinks();
 
        self.reset = onslaught_controlpoint_reset;
+       
+       CSQCMODEL_AUTOINIT();
 }
 
 float onslaught_link_send(entity to, float sendflags)
@@ -1524,24 +1538,24 @@ MUTATOR_HOOKFUNCTION(ons_BuildMutatorsPrettyString)
 
 MUTATOR_HOOKFUNCTION(ons_Spawn_Score)
 {
-    
+
     /*
     float _neer_home = (random() > 0.5 ? TRUE : FALSE);
-    
+
        RandomSelection_Init();
-       
+
        if(self.team == NUM_TEAM_1)
         RandomSelection_Add(ons_red_generator, 0, string_null, 1, 1);
-       
+
        if(self.team == NUM_TEAM_2)
         RandomSelection_Add(ons_blue_generator, 0, string_null, 1, 1);
-       
+
        entity _cp = findchain(classname, "onslaught_controlpoint"):
        while _cp;
        {
-           if(_cp.team == self.team)            
+           if(_cp.team == self.team)
             RandomSelection_Add(_cp, 0, string_null, 1, 1);
-               
+
                _cp = _cp.chain;
        }
 
@@ -1552,9 +1566,9 @@ MUTATOR_HOOKFUNCTION(ons_Spawn_Score)
        }
        else if(self.team == spawn_spot.team)
                spawn_score_x += SPAWN_PRIO_NEAR_TEAMMATE_SAMETEAM; // prefer same team, if we can't find a spawn near teammate
-    
+
     */
-    
+
        return 0;
 }
 
@@ -1562,55 +1576,55 @@ MUTATOR_HOOKFUNCTION(ons_PlayerSpawn)
 {
     if(!autocvar_g_onslaught_spawn_at_controlpoints)
         return 0;
-        
+
     if(random() < 0.5)  // 50/50 chane to use default spawnsystem.
         return 0;
-    
+
     float _close_to_home = ((random() > 0.5) ? TRUE : FALSE);
     entity _best = world, _trg_gen = world;
     float _score, _best_score = MAX_SHOT_DISTANCE;
-    
+
        RandomSelection_Init();
-    
+
        if(self.team == NUM_TEAM_1)
        {
            if(!_close_to_home)
             _trg_gen = ons_blue_generator;
-        else    
-            _trg_gen  = ons_red_generator;        
+        else
+            _trg_gen  = ons_red_generator;
        }
-       
+
        if(self.team == NUM_TEAM_2)
        {
            if(_close_to_home)
             _trg_gen = ons_blue_generator;
-        else    
-            _trg_gen  = ons_red_generator;        
+        else
+            _trg_gen  = ons_red_generator;
        }
-       
+
        entity _cp = findchain(classname, "onslaught_controlpoint");
        while(_cp)
        {
-           if(_cp.team == self.team)            
-        {            
+           if(_cp.team == self.team)
+        {
             _score = vlen(_trg_gen.origin - _cp.origin);
             if(_score < _best_score)
             {
                 _best = _cp;
-                _best_score = _score;            
+                _best_score = _score;
             }
-        }              
+        }
                _cp = _cp.chain;
        }
-       
-    vector _loc;        
-    float i;    
+
+    vector _loc;
+    float i;
     if(_best)
     {
         for(i = 0; i < 10; ++i)
         {
             _loc = _best.origin + '0 0 96';
-            _loc += ('0 1 0' * random()) * 128; 
+            _loc += ('0 1 0' * random()) * 128;
             tracebox(_loc, PL_MIN, PL_MAX, _loc, MOVE_NORMAL, self);
             if(trace_fraction == 1.0 && !trace_startsolid)
             {
@@ -1624,13 +1638,13 @@ MUTATOR_HOOKFUNCTION(ons_PlayerSpawn)
     {
         if(!autocvar_g_onslaught_spawn_at_generator)
             return 0;
-        
+
         _trg_gen = ((self.team == NUM_TEAM_1) ? ons_red_generator : ons_blue_generator);
-        
+
         for(i = 0; i < 10; ++i)
         {
             _loc = _trg_gen.origin + '0 0 96';
-            _loc += ('0 1 0' * random()) * 128; 
+            _loc += ('0 1 0' * random()) * 128;
             tracebox(_loc, PL_MIN, PL_MAX, _loc, MOVE_NORMAL, self);
             if(trace_fraction == 1.0 && !trace_startsolid)
             {
@@ -1640,7 +1654,7 @@ MUTATOR_HOOKFUNCTION(ons_PlayerSpawn)
             }
         }
     }
-    
+
     return 0;
 }
 
index adffdece9b84ea040b7fd2735dc57f3a6c733b16..4d990b3cf50608d151a22d771d8b660f54a790f5 100644 (file)
@@ -6,14 +6,14 @@ MUTATOR_HOOKFUNCTION(bloodloss_PlayerThink)
        if(self.health <= autocvar_g_bloodloss && self.deadflag == DEAD_NO)
        {
                self.BUTTON_CROUCH = TRUE;
-               
+
                if(time >= self.bloodloss_timer)
                {
                        self.event_damage(self, self, 1, DEATH_ROT, self.origin, '0 0 0');
                        self.bloodloss_timer = time + 0.5 + random() * 0.5;
                }
        }
-       
+
        return FALSE;
 }
 
@@ -21,7 +21,7 @@ MUTATOR_HOOKFUNCTION(bloodloss_PlayerJump)
 {
        if(self.health <= autocvar_g_bloodloss)
                return TRUE;
-               
+
        return FALSE;
 }
 
index d9d219c5adad4b8a50b8b6c764b754c7442247c2..fb20d1cff2ea83e829708ba30bd999f2518bb7b5 100644 (file)
@@ -4,7 +4,7 @@
 MUTATOR_HOOKFUNCTION(campcheck_PlayerDies)
 {
        Kill_Notification(NOTIF_ONE_ONLY, self, MSG_CENTER_CPID, CPID_CAMPCHECK);
-       
+
        return FALSE;
 }
 
@@ -17,7 +17,7 @@ MUTATOR_HOOKFUNCTION(campcheck_PlayerDamage)
                frag_target.campcheck_traveled_distance = autocvar_g_campcheck_distance;
                frag_attacker.campcheck_traveled_distance = autocvar_g_campcheck_distance;
        }
-       
+
        return FALSE;
 }
 
@@ -62,7 +62,7 @@ MUTATOR_HOOKFUNCTION(campcheck_PlayerSpawn)
 {
        self.campcheck_nextcheck = time + autocvar_g_campcheck_interval * 2;
        self.campcheck_traveled_distance = 0;
-               
+
        return FALSE;
 }
 
index 2eaa5f0b24725c5b2c1adc133c4ce0dd2267e057..3f808499a8d4a5bd015b28ceec3a86d62797b3b2 100644 (file)
@@ -34,7 +34,7 @@ MUTATOR_HOOKFUNCTION(dodging_PlayerPhysics) {
        float velocity_difference;
        float clean_up_and_do_nothing;
        float horiz_speed = autocvar_sv_dodging_horiz_speed;
-       
+
        if(self.freezetag_frozen)
                horiz_speed = autocvar_sv_dodging_horiz_speed_frozen;
 
@@ -61,13 +61,13 @@ MUTATOR_HOOKFUNCTION(dodging_PlayerPhysics) {
        // make sure v_up, v_right and v_forward are sane
        makevectors(self.angles);
 
-       // if we have e.g. 0.5 sec ramptime and a frametime of 0.25, then the ramp code 
-       // will be called ramp_time/frametime times = 2 times. so, we need to 
+       // if we have e.g. 0.5 sec ramptime and a frametime of 0.25, then the ramp code
+       // will be called ramp_time/frametime times = 2 times. so, we need to
        // add 0.5 * the total speed each frame until the dodge action is done..
        common_factor = sys_frametime / autocvar_sv_dodging_ramp_time;
 
        // if ramp time is smaller than frametime we get problems ;D
-       if (common_factor > 1) 
+       if (common_factor > 1)
                common_factor = 1;
 
        new_velocity_gain = self.dodging_velocity_gain - (common_factor * horiz_speed);
@@ -81,8 +81,8 @@ MUTATOR_HOOKFUNCTION(dodging_PlayerPhysics) {
                //disable jump key during dodge accel phase
                if (self.movement_z > 0) self.movement_z = 0;
 
-               self.velocity = 
-                         self.velocity 
+               self.velocity =
+                         self.velocity
                        + ((self.dodging_direction_y * velocity_difference) * v_right)
                        + ((self.dodging_direction_x * velocity_difference) * v_forward);
 
@@ -93,8 +93,8 @@ MUTATOR_HOOKFUNCTION(dodging_PlayerPhysics) {
        if (self.dodging_single_action == 1) {
                self.flags &= ~FL_ONGROUND;
 
-               self.velocity = 
-                         self.velocity 
+               self.velocity =
+                         self.velocity
                        + (autocvar_sv_dodging_up_speed * v_up);
 
                if (autocvar_sv_dodging_sound == 1)
@@ -168,7 +168,7 @@ MUTATOR_HOOKFUNCTION(dodging_GetPressedKeys) {
 
        tap_direction_x = 0;
        tap_direction_y = 0;
-       
+
        float frozen_dodging;
        frozen_dodging = (self.freezetag_frozen && autocvar_sv_dodging_frozen);
 
@@ -182,14 +182,14 @@ MUTATOR_HOOKFUNCTION(dodging_GetPressedKeys) {
        if ((time - self.last_dodging_time) < autocvar_sv_dodging_delay)
                return 0;
 
-       if (check_close_to_ground(autocvar_sv_dodging_height_threshold) != 1 
+       if (check_close_to_ground(autocvar_sv_dodging_height_threshold) != 1
                && check_close_to_wall(autocvar_sv_dodging_wall_distance_threshold) != 1)
                return 0;
 
        if (self.movement_x > 0) {
                // is this a state change?
                if (!(self.pressedkeys & KEY_FORWARD) || frozen_dodging) {
-                       if ((time - self.last_FORWARD_KEY_time) < self.cvar_cl_dodging_timeout) { 
+                       if ((time - self.last_FORWARD_KEY_time) < self.cvar_cl_dodging_timeout) {
                                tap_direction_x = 1.0;
                                dodge_detected = 1;
                        }
@@ -201,7 +201,7 @@ MUTATOR_HOOKFUNCTION(dodging_GetPressedKeys) {
                // is this a state change?
                if (!(self.pressedkeys & KEY_BACKWARD) || frozen_dodging) {
                        tap_direction_x = -1.0;
-                       if ((time - self.last_BACKWARD_KEY_time) < self.cvar_cl_dodging_timeout)        { 
+                       if ((time - self.last_BACKWARD_KEY_time) < self.cvar_cl_dodging_timeout)        {
                                dodge_detected = 1;
                        }
                        self.last_BACKWARD_KEY_time = time;
@@ -212,7 +212,7 @@ MUTATOR_HOOKFUNCTION(dodging_GetPressedKeys) {
                // is this a state change?
                if (!(self.pressedkeys & KEY_RIGHT) || frozen_dodging) {
                        tap_direction_y = 1.0;
-                       if ((time - self.last_RIGHT_KEY_time) < self.cvar_cl_dodging_timeout)   { 
+                       if ((time - self.last_RIGHT_KEY_time) < self.cvar_cl_dodging_timeout)   {
                                dodge_detected = 1;
                        }
                        self.last_RIGHT_KEY_time = time;
@@ -223,7 +223,7 @@ MUTATOR_HOOKFUNCTION(dodging_GetPressedKeys) {
                // is this a state change?
                if (!(self.pressedkeys & KEY_LEFT) || frozen_dodging) {
                        tap_direction_y = -1.0;
-                       if ((time - self.last_LEFT_KEY_time) < self.cvar_cl_dodging_timeout)    { 
+                       if ((time - self.last_LEFT_KEY_time) < self.cvar_cl_dodging_timeout)    {
                                dodge_detected = 1;
                        }
                        self.last_LEFT_KEY_time = time;
index 33d0e27b6b64734daf57dc385cdce6d15a4c1399..73b7dd949939c691173ebf0b683dfd451f72238b 100644 (file)
@@ -2,10 +2,10 @@ MUTATOR_HOOKFUNCTION(melee_SetStartItems)
 {
        start_ammo_shells = 0;
        warmup_start_ammo_shells = 0;
-       
+
        start_weapons = WEPSET_SHOTGUN;
        warmup_start_weapons = WEPSET_SHOTGUN;
-               
+
        return FALSE;
 }
 
@@ -17,7 +17,7 @@ MUTATOR_HOOKFUNCTION(melee_FilterItem)
                case IT_ARMOR_SHARD:
                        return FALSE;
        }
-       
+
        return TRUE;
 }
 
index 0d48fef9d06951a59e31721f6901b2127908cd05..f13ae5c8abeb8468ba895ac36b27a10bdef1ec81 100644 (file)
@@ -18,7 +18,7 @@ MUTATOR_HOOKFUNCTION(midair_PlayerPowerups)
                self.effects |= (EF_ADDITIVE | EF_FULLBRIGHT);
                self.midair_shieldtime = max(self.midair_shieldtime, time + autocvar_g_midair_shieldtime);
        }
-               
+
        return FALSE;
 }
 
index 0d90ea36219510db62e2ff2308d4bd6fff283054..ac6e158ed4c824c2b8f41fb9d5422211c413ea14 100644 (file)
@@ -1,9 +1,9 @@
-void spawnfunc_item_minst_cells (void) 
+void spawnfunc_item_minst_cells (void)
 {
-       if not(g_minstagib) { remove(self); return; }
-       if not(self.ammo_cells)
+       if (!g_minstagib) { remove(self); return; }
+       if (!self.ammo_cells)
                self.ammo_cells = autocvar_g_minstagib_ammo_drop;
-               
+
        StartItem ("models/items/a_cells.md3",
                           "misc/itempickup.wav", 45, 0,
                           "MinstaNex Ammo", IT_CELLS, 0, 0, generic_pickupevalfunc, 100);
@@ -28,7 +28,7 @@ void minstagib_stop_countdown(entity e)
 }
 void minstagib_ammocheck()
 {
-       if not(IS_PLAYER(self))
+       if (!IS_PLAYER(self))
                return; // not a player
        if (time < self.minstagib_nextthink)
                return;
@@ -105,7 +105,7 @@ MUTATOR_HOOKFUNCTION(minstagib_MatchEnd)
        entity head;
        FOR_EACH_PLAYER(head)
                minstagib_stop_countdown(head);
-               
+
        return FALSE;
 }
 
@@ -113,7 +113,7 @@ MUTATOR_HOOKFUNCTION(minstagib_BotShouldAttack)
 {
        if(checkentity.items & IT_STRENGTH)
                return TRUE;
-               
+
        return FALSE;
 }
 
@@ -137,7 +137,7 @@ MUTATOR_HOOKFUNCTION(minstagib_PlayerPreThink)
 
 MUTATOR_HOOKFUNCTION(minstagib_PlayerPowerups)
 {
-       if not(self.effects & EF_FULLBRIGHT)
+       if (!(self.effects & EF_FULLBRIGHT))
                self.effects |= EF_FULLBRIGHT;
 
        if (self.items & IT_STRENGTH)
@@ -188,7 +188,7 @@ MUTATOR_HOOKFUNCTION(minstagib_PlayerPhysics)
 {
        if(self.items & IT_INVINCIBLE)
                self.stat_sv_maxspeed = self.stat_sv_maxspeed * autocvar_g_minstagib_speed_highspeed;
-               
+
        return FALSE;
 }
 
@@ -196,7 +196,7 @@ MUTATOR_HOOKFUNCTION(minstagib_SplitHealthArmor)
 {
        damage_save = 0;
        damage_take = frag_damage;
-       
+
        return FALSE;
 }
 
@@ -212,7 +212,7 @@ MUTATOR_HOOKFUNCTION(minstagib_PlayerDamage)
 {
        if(autocvar_g_friendlyfire == 0 && SAME_TEAM(frag_target, frag_attacker) && IS_PLAYER(frag_target) && IS_PLAYER(frag_attacker))
                frag_damage = 0;
-               
+
        if(IS_PLAYER(frag_target))
        {
                if ((frag_deathtype == DEATH_FALL)  ||
@@ -222,7 +222,7 @@ MUTATOR_HOOKFUNCTION(minstagib_PlayerDamage)
                {
                        frag_damage = 0;
                }
-               
+
                if(IS_PLAYER(frag_attacker))
                if(DEATH_ISWEAPON(frag_deathtype, WEP_MINSTANEX))
                if(frag_target.armorvalue)
@@ -233,7 +233,7 @@ MUTATOR_HOOKFUNCTION(minstagib_PlayerDamage)
                        frag_target.hitsound += 1;
                        frag_attacker.hitsound += 1; // TODO change this to a future specific hitsound for armor hit
                }
-               
+
                if(IS_PLAYER(frag_attacker))
                if (DEATH_ISWEAPON(frag_deathtype, WEP_LASER))
                {
@@ -249,7 +249,7 @@ MUTATOR_HOOKFUNCTION(minstagib_PlayerDamage)
                        }
                }
        }
-       
+
        if(IS_PLAYER(frag_attacker))
        if(frag_mirrordamage > 0)
        {
@@ -262,23 +262,23 @@ MUTATOR_HOOKFUNCTION(minstagib_PlayerDamage)
                }
                frag_mirrordamage = 0;
        }
-       
+
        if(frag_target.items & IT_STRENGTH)
                yoda = 1;
-               
+
        return FALSE;
 }
 
 MUTATOR_HOOKFUNCTION(minstagib_SetStartItems)
 {
        start_ammo_cells = cvar("g_minstagib_ammo_start");
-       
+
        start_health = 100;
        start_armorvalue = 0;
        start_weapons = WEPSET_MINSTANEX;
        warmup_start_weapons = WEPSET_MINSTANEX;
        start_items |= IT_UNLIMITED_SUPERWEAPONS;
-               
+
        return FALSE;
 }
 
@@ -286,13 +286,13 @@ MUTATOR_HOOKFUNCTION(minstagib_FilterItem)
 {
        if(self.classname == "item_cells")
                return TRUE; // no normal cells?
-               
+
        if(self.weapon == WEP_MINSTANEX && self.classname == "droppedweapon")
        {
                self.ammo_cells = autocvar_g_minstagib_ammo_drop;
                return FALSE;
        }
-       
+
        if(self.weapon == WEP_ROCKET_LAUNCHER || self.weapon == WEP_NEX)
        {
                entity e = spawn();
@@ -304,29 +304,29 @@ MUTATOR_HOOKFUNCTION(minstagib_FilterItem)
                self = oldself;
                return TRUE;
        }
-               
+
        if(self.flags & FL_POWERUP)
                return FALSE;
-               
+
        if(self.ammo_cells > autocvar_g_minstagib_ammo_drop && self.classname != "item_minst_cells")
                self.ammo_cells = autocvar_g_minstagib_ammo_drop;
-               
+
        if(self.ammo_cells && !self.weapon)
                return FALSE;
-               
+
        return TRUE;
 }
 
 MUTATOR_HOOKFUNCTION(minstagib_CustomizeWaypoint)
 {
        entity e = WaypointSprite_getviewentity(other);
-       
+
        // if you have the invisibility powerup, sprites ALWAYS are restricted to your team
        // but only apply this to real players, not to spectators
        if((self.owner.flags & FL_CLIENT) && (self.owner.items & IT_STRENGTH) && (e == other))
        if(DIFF_TEAM(self.owner, e))
                return TRUE;
-       
+
        return FALSE;
 }
 
@@ -359,37 +359,37 @@ MUTATOR_HOOKFUNCTION(minstagib_ItemTouch)
 
                return MUT_ITEMTOUCH_CONTINUE;
        }
-       
+
        if(self.max_health)
        {
                other.armorvalue = bound(other.armorvalue, 999, other.armorvalue + autocvar_g_minstagib_extralives);
                Send_Notification(NOTIF_ONE, other, MSG_CENTER, CENTER_EXTRALIVES);
                return MUT_ITEMTOUCH_PICKUP;
        }
-               
+
        return MUT_ITEMTOUCH_CONTINUE;
 }
 
 MUTATOR_HOOKFUNCTION(minstagib_OnEntityPreSpawn)
 {
-       if not(autocvar_g_powerups) { return FALSE; }
-       if not(self.classname == "item_strength" || self.classname == "item_invincible" || self.classname == "item_health_mega")
+       if (!autocvar_g_powerups) { return FALSE; }
+       if (!(self.classname == "item_strength" || self.classname == "item_invincible" || self.classname == "item_health_mega"))
                return FALSE;
-       
+
        entity e = spawn();
-       
+
        if(random() < 0.3)
                e.think = spawnfunc_item_strength;
        else if(random() < 0.6)
                e.think = minstagib_health_mega;
        else
                e.think = spawnfunc_item_invincible;
-               
+
        e.nextthink = time + 0.1;
        e.spawnflags = self.spawnflags;
        e.noalign = self.noalign;
        setorigin(e, self.origin);
-       
+
        return TRUE;
 }
 
@@ -405,6 +405,12 @@ MUTATOR_HOOKFUNCTION(minstagib_BuildMutatorsPrettyString)
        return FALSE;
 }
 
+MUTATOR_HOOKFUNCTION(minstagib_SetModname)
+{
+       modname = "MinstaGib";
+       return TRUE;
+}
+
 MUTATOR_DEFINITION(mutator_minstagib)
 {
        MUTATOR_HOOK(MatchEnd, minstagib_MatchEnd, CBC_ORDER_ANY);
@@ -425,6 +431,7 @@ MUTATOR_DEFINITION(mutator_minstagib)
        MUTATOR_HOOK(OnEntityPreSpawn, minstagib_OnEntityPreSpawn, CBC_ORDER_ANY);
        MUTATOR_HOOK(BuildMutatorsString, minstagib_BuildMutatorsString, CBC_ORDER_ANY);
        MUTATOR_HOOK(BuildMutatorsPrettyString, minstagib_BuildMutatorsPrettyString, CBC_ORDER_ANY);
+       MUTATOR_HOOK(SetModname, minstagib_SetModname, CBC_ORDER_ANY);
 
        return FALSE;
 }
index c945e1c2f4dc948c657fe1509b269c636dbf70e4..50741dc20b4f3cadd1d2d75ff1b0ce1f5180a4c5 100644 (file)
@@ -10,7 +10,7 @@ MUTATOR_HOOKFUNCTION(multijump_PlayerPhysics)
                else
                        self.multijump_count = -2; // the cvar value for infinite jumps is -1, so this needs to be smaller
        }
-               
+
        return FALSE;
 }
 
@@ -20,7 +20,7 @@ MUTATOR_HOOKFUNCTION(multijump_PlayerJump)
                self.multijump_ready = TRUE;  // this is necessary to check that we released the jump button and pressed it again
        else
                self.multijump_ready = FALSE;
-               
+
        if(!player_multijump && self.multijump_ready && self.multijump_count < autocvar_g_multijump && self.velocity_z > autocvar_g_multijump_speed)
        {
                if (autocvar_g_multijump)
index d911720de536c00407b85d83ee2de43b382c54a8..5ab6df75dc720e2d6b385ed665d1cf0ccf9fcfc3 100644 (file)
@@ -4,13 +4,13 @@ void nade_timer_think()
        self.nextthink = time;
        if(!self.owner || wasfreed(self.owner))
                remove(self);
-       
+
 }
 
 void nade_burn_spawn(entity _nade)
 {
        float p;
-       
+
        switch(_nade.realowner.team)
        {
                case NUM_TEAM_1: p = PROJECTILE_NADE_RED_BURN; break;
@@ -19,7 +19,7 @@ void nade_burn_spawn(entity _nade)
                case NUM_TEAM_4: p = PROJECTILE_NADE_PINK_BURN; break;
                default:                 p = PROJECTILE_NADE_BURN; break;
        }
-       
+
        CSQCProjectile(_nade, TRUE, p, TRUE);
 }
 
@@ -35,9 +35,9 @@ void nade_spawn(entity _nade)
        timer.think = nade_timer_think;
        timer.nextthink = time;
        timer.wait = _nade.wait;
-       timer.owner = _nade;    
+       timer.owner = _nade;
        timer.skin = 10;
-       
+
        switch(_nade.realowner.team)
        {
                case NUM_TEAM_1: p = PROJECTILE_NADE_RED; break;
@@ -46,15 +46,15 @@ void nade_spawn(entity _nade)
                case NUM_TEAM_4: p = PROJECTILE_NADE_PINK; break;
                default:                 p = PROJECTILE_NADE; break;
        }
-       
+
        CSQCProjectile(_nade, TRUE, p, TRUE);
-       
+
 }
 
 void nade_boom()
 {
        string expef;
-       
+
        switch(self.realowner.team)
        {
                case NUM_TEAM_1: expef = "nade_red_explode"; break;
@@ -63,11 +63,11 @@ void nade_boom()
                case NUM_TEAM_4: expef = "nade_pink_explode"; break;
                default:                 expef = "nade_explode"; break;
        }
-       
+
        sound(self, CH_SHOTS_SINGLE, "misc/null.wav", VOL_BASE, ATTEN_NORM);
        sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM);
        pointparticles(particleeffectnum(expef), self.origin + '0 0 1', '0 0 0', 1);
-       
+
        Damage_DamageInfo(self.origin, autocvar_g_nades_nade_damage, autocvar_g_nades_nade_edgedamage, autocvar_g_nades_nade_radius, '1 1 1' * autocvar_g_nades_nade_force, self.projectiledeathtype, 0, self);
 
        self.takedamage = DAMAGE_NO;
@@ -115,13 +115,13 @@ void nade_damage(entity inflictor, entity attacker, float damage, float deathtyp
 
        if(DEATH_ISWEAPON(deathtype, WEP_SHOTGUN) && !(deathtype & HITTYPE_SECONDARY))
                damage = self.max_health * 1.1;
-               
+
        if(DEATH_ISWEAPON(deathtype, WEP_SHOTGUN) && (deathtype & HITTYPE_SECONDARY))
        {
                damage = self.max_health * 0.1;
                force *= 15;
        }
-       
+
        self.velocity += force;
 
        if(!damage || (self.flags & FL_ONGROUND && IS_PLAYER(attacker)))
@@ -147,16 +147,16 @@ void toss_nade(entity e, vector _velocity, float _time)
 {
        entity _nade = e.nade;
        e.nade = world;
-       
+
        remove(e.fake_nade);
        e.fake_nade = world;
-       
+
        makevectors(e.v_angle);
-       
+
        W_SetupShot(e, FALSE, FALSE, "", CH_WEAPON_A, 0);
-       
+
        Kill_Notification(NOTIF_ONE_ONLY, e, MSG_CENTER_CPID, CPID_NADES);
-       
+
        //setorigin(_nade, CENTER_OR_VIEWOFS(e) + (v_right * 10) * -1);
        setorigin(_nade, w_shotorg + (v_right * 25) * -1);
        setmodel(_nade, "models/weapons/v_ok_grenade.md3");
@@ -164,11 +164,11 @@ void toss_nade(entity e, vector _velocity, float _time)
        PROJECTILE_MAKETRIGGER(_nade);
        setsize(_nade, '-16 -16 -16', '16 16 16');
        _nade.movetype = MOVETYPE_BOUNCE;
-       
+
        tracebox(_nade.origin, _nade.mins, _nade.maxs, _nade.origin, FALSE, _nade);
        if (trace_startsolid)
                setorigin(_nade, e.origin);
-       
+
        if(e.crouch)
                _nade.velocity = '0 0 -10';
        else if(autocvar_g_nades_nade_newton_style == 1)
@@ -207,10 +207,10 @@ void nade_prime()
 {
        if(self.nade)
                remove(self.nade);
-               
+
        if(self.fake_nade)
                remove(self.fake_nade);
-       
+
        self.nade = spawn();
        setmodel(self.nade, "null");
        setattachment(self.nade, self, "bip01 l hand");
@@ -240,22 +240,22 @@ float CanThrowNade()
 {
        if(self.vehicle)
                return FALSE;
-               
+
        if(gameover)
                return FALSE;
-               
+
        if(self.deadflag != DEAD_NO)
                return FALSE;
-       
-       if not(autocvar_g_nades)
+
+       if (!autocvar_g_nades)
                return FALSE; // allow turning them off mid match
-               
+
        if(forbidWeaponUse())
                return FALSE;
-               
-       if not(IS_PLAYER(self))
+
+       if (!IS_PLAYER(self))
                return FALSE;
-               
+
        return TRUE;
 }
 
@@ -263,7 +263,7 @@ void nades_CheckThrow()
 {
        if(!CanThrowNade())
                return;
-               
+
        if(!self.nade)
        {
                if(self.nade_refire < time)
@@ -290,18 +290,18 @@ MUTATOR_HOOKFUNCTION(nades_VehicleEnter)
 {
        if(other.nade)
                toss_nade(other, '0 0 100', max(other.nade.wait, time + 0.05));
-       
+
        return FALSE;
 }
 
 MUTATOR_HOOKFUNCTION(nades_PlayerPreThink)
 {
        float key_pressed = ((g_grappling_hook || client_hasweapon(self, WEP_HOOK, FALSE, FALSE) || (weaponsInMap & WEPSET_HOOK)) ? self.button16 : self.BUTTON_HOOK);
-       
+
        if(self.nade)
                if(self.nade.wait - 0.1 <= time)
                        toss_nade(self, '0 0 0', time + 0.05);
-                       
+
        if(CanThrowNade())
        if(self.nade_refire < time)
        {
@@ -317,7 +317,7 @@ MUTATOR_HOOKFUNCTION(nades_PlayerPreThink)
                                makevectors(self.v_angle);
                                float _force = time - self.nade.lifetime;
                                _force /= autocvar_g_nades_nade_lifetime;
-                               _force = autocvar_g_nades_nade_minforce + (_force * (autocvar_g_nades_nade_maxforce - autocvar_g_nades_nade_minforce));                         
+                               _force = autocvar_g_nades_nade_minforce + (_force * (autocvar_g_nades_nade_maxforce - autocvar_g_nades_nade_minforce));
                                toss_nade(self, (v_forward * 0.7 + v_up * 0.2 + v_right * 0.1) * _force, 0);
                        }
                }
@@ -340,7 +340,7 @@ MUTATOR_HOOKFUNCTION(nades_PlayerDies)
 {
        if(self.nade)
                toss_nade(self, '0 0 100', max(self.nade.wait, time + 0.05));
-               
+
        return FALSE;
 }
 
@@ -351,7 +351,7 @@ MUTATOR_HOOKFUNCTION(nades_RemovePlayer)
 
        if(self.fake_nade)
                remove(self.fake_nade);
-               
+
        return FALSE;
 }
 
@@ -377,11 +377,11 @@ MUTATOR_DEFINITION(mutator_nades)
        MUTATOR_HOOK(ClientDisconnect, nades_RemovePlayer, CBC_ORDER_ANY);
        MUTATOR_HOOK(BuildMutatorsString, nades_BuildMutatorsString, CBC_ORDER_ANY);
        MUTATOR_HOOK(BuildMutatorsPrettyString, nades_BuildMutatorsPrettyString, CBC_ORDER_ANY);
-       
+
        MUTATOR_ONADD
        {
                precache_model("models/ok_nade_counter/ok_nade_counter.md3");
-               
+
                precache_model("models/weapons/h_ok_grenade.iqm");
                precache_model("models/weapons/v_ok_grenade.md3");
                precache_sound("weapons/rocket_impact.wav");
index 873e1632c7a2b6f2c270be0f5b933cb969f79074..f11298451c8ea4df110710e5d3695f2a38693e1d 100644 (file)
@@ -4,7 +4,7 @@ CORE    laser   nex     lg      rl      cry     gl      elec    hagar   fireb
                                                                        minsta  porto
                                                                        tuba
 
-NEW             rifle   hlac    minel                           seeker   
+NEW             rifle   hlac    minel                           seeker
 IDEAS                                   OPEN    flak    OPEN            FUN FUN FUN FUN
 
 
@@ -110,7 +110,7 @@ string nt_GetReplacement(string w, float m)
        if(m == NT_AUTOREPLACE_NEVER)
                return w;
        string s = nt_GetFullReplacement(w);
-       if not(s)
+       if (!s)
                return w;
        if(m == NT_AUTOREPLACE_RANDOM)
                s = strcat(w, " ", s);
@@ -127,7 +127,7 @@ MUTATOR_HOOKFUNCTION(nt_SetStartItems)
 
        WepSet newdefault;
        WepSet warmup_newdefault;
-       
+
        newdefault = '0 0 0';
        warmup_newdefault = '0 0 0';
 
index 4a11e564bdd18990915c7a9f602f9bad6bf597e2..dc12b05209eccc70baa32187ab62b033eb8fb961 100644 (file)
@@ -26,7 +26,7 @@ float NIX_CanChooseWeapon(float wpn)
                        return FALSE;
                if(e.spawnflags & WEP_FLAG_MUTATORBLOCKED)
                        return FALSE;
-               if not(e.spawnflags & WEP_FLAG_NORMAL)
+               if (!(e.spawnflags & WEP_FLAG_NORMAL))
                        return FALSE;
        }
        return TRUE;
index 74b7db2f0db66fad25135150525f6d762f1dfd61..c99228673d701cf37b7d67f7aea72a999383d11e 100644 (file)
@@ -105,7 +105,7 @@ MUTATOR_DEFINITION(mutator_physical_items)
        // check if we have a physics engine
        MUTATOR_ONADD
        {
-               if not(autocvar_physics_ode && checkextension("DP_PHYSICS_ODE"))
+               if (!(autocvar_physics_ode && checkextension("DP_PHYSICS_ODE")))
                {
                        dprint("Warning: Physical items are enabled but no physics engine can be used. Reverting to old items.\n");
                        return -1;
index af5d4a8b137d2e983709b2af6830e8396d79299e..6d982d5a4c48f32cd71f32136191294862920203 100644 (file)
@@ -6,7 +6,7 @@ MUTATOR_HOOKFUNCTION(pinata_PlayerDies)
        if(self.switchweapon != j)
        if(W_IsWeaponThrowable(j))
                W_ThrowNewWeapon(self, j, FALSE, self.origin + (self.mins + self.maxs) * 0.5, randomvec() * 175 + '0 0 325');
-               
+
        return TRUE;
 }
 
index e2832ace2dc2f61824ec10dc9df76e16922b0250..184047189b381532b65f3ca6ca369a8c64f28030 100644 (file)
@@ -7,20 +7,20 @@ float gravity_delay;
 
 MUTATOR_HOOKFUNCTION(gravity_StartFrame)
 {
-       if(gameover || !cvar("g_random_gravity")) return FALSE; 
+       if(gameover || !cvar("g_random_gravity")) return FALSE;
        if(time < gravity_delay) return FALSE;
        if(time < game_starttime) return FALSE;
        if(round_handler_IsActive() && !round_handler_IsRoundStarted()) return FALSE;
-       
-    if(random() >= autocvar_g_random_gravity_negative_chance) 
+
+    if(random() >= autocvar_g_random_gravity_negative_chance)
         cvar_set("sv_gravity", ftos(bound(autocvar_g_random_gravity_min, random() - random() * -autocvar_g_random_gravity_negative, autocvar_g_random_gravity_max)));
     else
         cvar_set("sv_gravity", ftos(bound(autocvar_g_random_gravity_min, random() * autocvar_g_random_gravity_positive, autocvar_g_random_gravity_max)));
-       
+
        gravity_delay = time + autocvar_g_random_gravity_delay;
-       
+
        dprint("Gravity is now: ", ftos(autocvar_sv_gravity), "\n");
-       
+
        return FALSE;
 }
 
@@ -41,7 +41,7 @@ MUTATOR_DEFINITION(mutator_random_gravity)
        MUTATOR_HOOK(SV_StartFrame, gravity_StartFrame, CBC_ORDER_ANY);
        MUTATOR_HOOK(BuildMutatorsString, gravity_BuildMutatorsString, CBC_ORDER_ANY);
        MUTATOR_HOOK(BuildMutatorsPrettyString, gravity_BuildMutatorsPrettyString, CBC_ORDER_ANY);
-       
+
        MUTATOR_ONADD
        {
                cvar_settemp("sv_gravity", cvar_string("sv_gravity")); // settemp current gravity so it's restored on match end
index fc9fc7966b2bfe27f01ca1efdce4471fd30f1e44..c323262f069b7a198f7e29ca75b20c4d186408cc 100644 (file)
@@ -33,7 +33,7 @@ void superspec_save_client_conf()
        string fn = "superspec-local.options";
        float fh;
 
-       if not(_ISLOCAL)
+       if (!_ISLOCAL)
        {
                if(self.crypto_idfp == "")
                        return;
@@ -68,7 +68,7 @@ void superspec_msg(string _center_title, string _con_title, entity _to, string _
                return;
 
        if(_spamlevel > 1)
-               if not(_to.superspec_flags & SSF_VERBOSE)
+               if (!(_to.superspec_flags & SSF_VERBOSE))
                        return;
 
        centerprint(_to, strcat(_center_title, _msg));
@@ -452,7 +452,7 @@ MUTATOR_HOOKFUNCTION(superspec_ClientConnect)
        _hello.think = superspec_hello;
        _hello.nextthink = time + 5;
 
-       if not(_ISLOCAL)
+       if (!_ISLOCAL)
        {
                if(self.crypto_idfp == "")
                        return FALSE;
index f2d47a5ed1d31a8b732a8fd5cca06c7e50e62ae7..fabf13639cf89d6ccf4ba810a099d303a74d0ff7 100644 (file)
@@ -19,15 +19,15 @@ void PlayerTouchExplode(entity p1, entity p2)
 MUTATOR_HOOKFUNCTION(touchexplode_PlayerThink)
 {
        if(time > self.touchexplode_time)
-       if not(gameover)
+       if (!gameover)
        if(IS_PLAYER(self))
        if(self.deadflag == DEAD_NO)
-       if not(IS_INDEPENDENT_PLAYER(self))
+       if (!IS_INDEPENDENT_PLAYER(self))
        FOR_EACH_PLAYER(other) if(self != other)
        {
                if(time > other.touchexplode_time)
                if(other.deadflag == DEAD_NO)
-               if not(IS_INDEPENDENT_PLAYER(other))
+               if (!IS_INDEPENDENT_PLAYER(other))
                if(boxesoverlap(self.absmin, self.absmax, other.absmin, other.absmax))
                {
                        PlayerTouchExplode(self, other);
index edfcba4398d2da3eff0d465ecb03ef341fe37f75..73317d0c1eea188fc5ec20206c6840c185c77b20 100644 (file)
@@ -7,7 +7,7 @@ MUTATOR_HOOKFUNCTION(vampire_PlayerDamage)
                frag_attacker.health += bound(0, damage_take, frag_target.health);
                frag_attacker.health = bound(0, frag_attacker.health, autocvar_g_balance_health_limit);
        }
-               
+
        return FALSE;
 }
 
index e7a95de7ec5ba08df4a7140742035b6b4b7d1d6c..3c17651a039ed99e935fc185fc581dfcca1c03a5 100644 (file)
@@ -1,5 +1,4 @@
 MUTATOR_DECLARATION(gamemode_assault);
-MUTATOR_DECLARATION(gamemode_arena);
 MUTATOR_DECLARATION(gamemode_ca);
 MUTATOR_DECLARATION(gamemode_keyhunt);
 MUTATOR_DECLARATION(gamemode_freezetag);
index 94ba20f10d8320b07f4b1d18e0232cb6dd04bf4d..e84c6d696a91e691ccadabf6c68cd927febbc97f 100644 (file)
@@ -20,7 +20,7 @@ void sandbox_ObjectFunction_Touch()
        intensity = vlen(self.velocity) + vlen(other.velocity);
        if(intensity) // avoid divisions by 0
                intensity /= 2; // average the two velocities
-       if not(intensity >= autocvar_g_sandbox_object_material_velocity_min)
+       if (!(intensity >= autocvar_g_sandbox_object_material_velocity_min))
                return; // impact not strong enough to do anything
        // now offset intensity and apply it to the effects
        intensity -= autocvar_g_sandbox_object_material_velocity_min; // start from minimum velocity, not actual velocity
@@ -56,6 +56,8 @@ void sandbox_ObjectFunction_Think()
        }
 
        self.nextthink = time;
+       
+       CSQCMODEL_AUTOUPDATE();
 }
 
 .float old_solid, old_movetype;
@@ -74,7 +76,7 @@ entity sandbox_ObjectEdit_Get(float permissions)
                return trace_ent; // don't check permissions, anyone can edit this object
        if(trace_ent.crypto_idfp == "")
                return trace_ent; // the player who spawned this object did not have an UID, so anyone can edit it
-       if not(trace_ent.realowner != self && autocvar_g_sandbox_editor_free < 2)
+       if (!(trace_ent.realowner != self && autocvar_g_sandbox_editor_free < 2))
                return trace_ent; // object does not belong to the player, and players can only edit their own objects on this server
        return world;
 }
@@ -137,7 +139,7 @@ entity sandbox_ObjectSpawn(float database)
 {
        // spawn a new object with default properties
 
-       entity e;
+       entity e, oldself;
        e = spawn();
        e.classname = "object";
        e.takedamage = DAMAGE_AIM;
@@ -172,6 +174,11 @@ entity sandbox_ObjectSpawn(float database)
                setorigin(e, trace_endpos);
                e.angles_y = self.v_angle_y;
        }
+       
+       oldself = self;
+       self = e;
+       CSQCMODEL_AUTOINIT();
+       self = oldself;
 
        object_count += 1;
        return e;
@@ -484,7 +491,7 @@ MUTATOR_HOOKFUNCTION(sandbox_PlayerCommand)
                                        print_to(self, "^1SANDBOX - WARNING: ^7Attempted to spawn an object without specifying a model. Please specify the path to your model file after the 'object_spawn' command");
                                        return TRUE;
                                }
-                               if not(fexists(argv(2)))
+                               if (!(fexists(argv(2))))
                                {
                                        print_to(self, "^1SANDBOX - WARNING: ^7Attempted to spawn an object with a non-existent model. Make sure the path to your model file is correct");
                                        return TRUE;
index 3cb4ca750ee15f971eb5a9a59b772b0c9445d83a..3799c755d4125a9505d63ae93f9d3f8d81a65666 100644 (file)
@@ -149,7 +149,7 @@ float floor_ok(vector point)
         case CONTENT_SKY:
             return 0;
         case CONTENT_EMPTY:
-            if not (pointcontents(point - '0 0 1') == CONTENT_SOLID)
+            if (!(pointcontents(point - '0 0 1') == CONTENT_SOLID))
                 return 0;
             break;
         case CONTENT_WATER:
@@ -171,7 +171,7 @@ float inwater(vector point)
 }
 */
 
-#define _pcheck(p) traceline(p+z_up,p-z_down,MOVE_WORLDONLY,self); if not(floor_ok(trace_endpos)) return 1
+#define _pcheck(p) traceline(p+z_up,p-z_down,MOVE_WORLDONLY,self); if (!floor_ok(trace_endpos)) return 1
 float edge_check(vector point,float fsize)
 {
     vector z_up,z_down;
@@ -226,7 +226,7 @@ vector pathlib_wateroutnode(vector start,vector end,float doedge)
     traceline(end + ('0 0 0.25' * pathlib_gridsize),end - ('0 0 1' * pathlib_gridsize),MOVE_WORLDONLY,self);
     end = trace_endpos;
 
-    if not(pointcontents(end - '0 0 1') == CONTENT_SOLID)
+    if (!(pointcontents(end - '0 0 1') == CONTENT_SOLID))
         return end;
 
     for(surface = start ; surface_z < (end_z + 32); ++surface_z)
@@ -324,7 +324,7 @@ vector pathlib_walknode(vector start,vector end,float doedge)
             return trace_endpos;
 
         point = trace_endpos;
-        if not(floor_ok(trace_endpos))
+        if (!floor_ok(trace_endpos))
             return trace_endpos;
 
         tracebox(last_point + walknode_boxup, walknode_boxmin,walknode_boxmax, point + walknode_boxup, MOVE_WORLDONLY, self);
@@ -352,7 +352,7 @@ vector pathlib_walknode(vector start,vector end,float doedge)
 
     point = trace_endpos;
 
-    if not(floor_ok(trace_endpos))
+    if (!floor_ok(trace_endpos))
         return trace_endpos;
 
     tracebox(last_point + walknode_boxup, walknode_boxmin,walknode_boxmax, point + walknode_boxup, MOVE_WORLDONLY, self);
@@ -618,7 +618,7 @@ float pathlib_makenode_adaptive(entity parent,vector start, vector to, vector go
     }
 
     where = pathlib_movenode(parent.origin,to,0);
-    if not(pathlib_movenode_goodnode)
+    if (!pathlib_movenode_goodnode)
         return 0;
 
     if(doedge)
@@ -648,7 +648,7 @@ float pathlib_makenode_adaptive(entity parent,vector start, vector to, vector go
                     node.path_prev = parent;
                 }
 
-                if not (best_open_node)
+                if (!best_open_node)
                     best_open_node = node;
                 else if(best_open_node.pathlib_node_f > node.pathlib_node_f)
                     best_open_node = node;
@@ -664,7 +664,7 @@ float pathlib_makenode_adaptive(entity parent,vector start, vector to, vector go
     node.pathlib_node_g = g;
     node.pathlib_node_f = f;
 
-    if not (best_open_node)
+    if (!best_open_node)
         best_open_node = node;
     else if(best_open_node.pathlib_node_f > node.pathlib_node_f)
         best_open_node = node;
@@ -899,13 +899,13 @@ entity pathlib_astar(vector from,vector to)
         pathlib_movenode   = pathlib_swimnode;
     }
 
-    if not(openlist)
+    if (!openlist)
         openlist       = spawn();
 
-    if not(closedlist)
+    if (!closedlist)
         closedlist     = spawn();
 
-    if not(scraplist)
+    if (!scraplist)
         scraplist      = spawn();
 
     pathlib_closed_cnt       = 0;
index 64ce9da0289b935cb96f71f88ca7b25d2b0b0ee2..d432221f25fe3bf9c2e11c4bf9d5bd8a6343c60f 100644 (file)
@@ -24,7 +24,7 @@ void path_dbg_think()
 
 void __showpath2_think()
 {
-    #ifdef TURRET_DEBUG 
+    #ifdef TURRET_DEBUG
        mark_info(self.origin,1);
        #endif
     if(self.path_next)
index fd889d04320df9db5e8753a9982db51a92a0d76f..589ff82a1122f000df835f78d1d4d9e2f8fe26d1 100644 (file)
@@ -110,7 +110,7 @@ float pathlib_makenode_adaptive(entity parent,vector start, vector to, vector go
                 node.path_prev = parent;
             }
 
-            if not (best_open_node)
+            if (!best_open_node)
                 best_open_node = node;
             else if(best_open_node.pathlib_node_f > node.pathlib_node_f)
                 best_open_node = node;
@@ -121,7 +121,7 @@ float pathlib_makenode_adaptive(entity parent,vector start, vector to, vector go
 
     where = pathlib_movenode(parent.origin, to, 0);
 
-    if not(pathlib_movenode_goodnode)
+    if (!pathlib_movenode_goodnode)
     {
         //pathlib_showsquare(where, 0 ,30);
         //pathlib_showsquare(parent.origin, 1 ,30);
@@ -141,7 +141,7 @@ float pathlib_makenode_adaptive(entity parent,vector start, vector to, vector go
 
 
     if(doedge)
-        if not (tile_check(where))
+        if (!tile_check(where))
         {
             dprint("tile_check fail\n");
             pathlib_showsquare(where, 0 ,30);
@@ -175,7 +175,7 @@ float pathlib_makenode_adaptive(entity parent,vector start, vector to, vector go
                     //}
                 }
 
-                if not (best_open_node)
+                if (!best_open_node)
                     best_open_node = node;
                 else if(best_open_node.pathlib_node_f > node.pathlib_node_f)
                     best_open_node = node;
@@ -192,7 +192,7 @@ float pathlib_makenode_adaptive(entity parent,vector start, vector to, vector go
     node.pathlib_node_g = g;
     node.pathlib_node_f = f;
 
-    if not (best_open_node)
+    if (!best_open_node)
         best_open_node = node;
     else if(best_open_node.pathlib_node_f > node.pathlib_node_f)
         best_open_node = node;
@@ -405,10 +405,10 @@ entity pathlib_astar(vector from,vector to)
         pathlib_movenode   = pathlib_swimnode;
     }
 
-    if not(openlist)
+    if (!openlist)
         openlist       = spawn();
 
-    if not(closedlist)
+    if (!closedlist)
         closedlist     = spawn();
 
     pathlib_closed_cnt       = 0;
index c45ac0dee4bb266fc1f36552037dffc94b625198..997eaa4209a95afbf887b06ee23bba53d312a81b 100644 (file)
@@ -10,7 +10,7 @@ vector pathlib_wateroutnode(vector start,vector end, float doedge)
     traceline(end + ('0 0 0.25' * pathlib_gridsize),end - ('0 0 1' * pathlib_gridsize),MOVE_WORLDONLY,self);
     end = trace_endpos;
 
-    if not(pointcontents(end - '0 0 1') == CONTENT_SOLID)
+    if (!(pointcontents(end - '0 0 1') == CONTENT_SOLID))
         return end;
 
     for(surface = start ; surface_z < (end_z + 32); ++surface_z)
index 73b415537b2233d4faeeb2d16cc9a5443d5f78c4..9f443b0ac7659e0d16a81af1a1a3e031132ccb81 100644 (file)
@@ -22,14 +22,14 @@ float pathlib_wpp_opencb(entity wp, entity child, float cost)
 
        // FIXME! wp.wp##mincost is NOT distance. Make it distance or add a field for distance to be used here (for better speed)
        cost = vlen(child.origin - wp.origin);
-       
+
     child.path_prev     = wp;
     child.pathlib_list   = openlist;
     child.pathlib_node_g = wp.pathlib_node_g + cost;
     child.pathlib_node_h = pathlib_heuristic(child.origin, goal_node.origin);
     child.pathlib_node_c = pathlib_wpp_waypointcallback(child, wp);
     child.pathlib_node_f = child.pathlib_node_g + child.pathlib_node_h + child.pathlib_node_c;
-    
+
 
     if(child == goal_node)
         pathlib_foundgoal = TRUE;
@@ -50,11 +50,11 @@ float pathlib_wpp_openncb(entity wp, entity child, float cost)
 
        // FIXME! wp.wp##mincost is NOT distance. Make it distance or add a field for distance to be used here (for better speed)
        cost = vlen(child.origin - wp.origin);
-       
+
     child.path_prev     = wp;
     child.pathlib_list   = openlist;
     child.pathlib_node_g = wp.pathlib_node_g + cost;
-    child.pathlib_node_h = pathlib_heuristic(child.origin, goal_node.origin); 
+    child.pathlib_node_h = pathlib_heuristic(child.origin, goal_node.origin);
     child.pathlib_node_f = child.pathlib_node_g + child.pathlib_node_h;
 
     if(child == goal_node)
@@ -102,7 +102,7 @@ float pathlib_wpp_expand(entity wp)
     if(wp.wp29) pathlib_wpp_open(wp,wp.wp29,wp.wp29mincost); else return 29;
     if(wp.wp30) pathlib_wpp_open(wp,wp.wp30,wp.wp30mincost); else return 30;
     if(wp.wp31) pathlib_wpp_open(wp,wp.wp31,wp.wp31mincost); else return 31;
-    
+
     return 32;
 }
 
@@ -133,24 +133,24 @@ entity pathlib_waypointpath(entity wp_from, entity wp_to, float callback)
     float ptime;
 
     ptime                                      = gettime(GETTIME_REALTIME);
-    pathlib_starttime          = ptime;        
+    pathlib_starttime          = ptime;
        pathlib_movecost                = 300;
        pathlib_movecost_diag   = vlen('1 1 0' * pathlib_movecost);
-       
-       if not (pathlib_wpp_waypointcallback) 
+
+       if (!pathlib_wpp_waypointcallback)
                callback = FALSE;
-               
+
        if (callback)
                pathlib_wpp_open = pathlib_wpp_opencb;
        else
                pathlib_wpp_open = pathlib_wpp_openncb;
-       
+
        pathlib_heuristic = pathlib_h_none;
-       
-    if not(openlist)
+
+    if (!openlist)
         openlist       = spawn();
 
-    if not(closedlist)
+    if (!closedlist)
         closedlist     = spawn();
 
     pathlib_closed_cnt       = 0;
@@ -168,12 +168,12 @@ entity pathlib_waypointpath(entity wp_from, entity wp_to, float callback)
         n.pathlib_node_g = 0;
         n.pathlib_node_f = 0;
         n.pathlib_node_h = 0;
-        
+
         //setmodel(n, "models/runematch/rune.mdl");
         //n.effects = EF_LOWPRECISION;
         //n.colormod = '0 0 0';
         //n.scale = 1;
-        
+
     }
 
     goal_node  = wp_to;
@@ -202,18 +202,18 @@ entity pathlib_waypointpath_step()
     }
     pathlib_wpp_close(n);
        dprint("Expanding ",ftos(pathlib_wpp_expand(n))," links\n");
-       
+
     if(pathlib_foundgoal)
     {
         entity start, end, open, ln;
-        
+
         dprint("Target found. Rebuilding and filtering path...\n");
-        
+
                buildpath_nodefilter = buildpath_nodefilter_none;
                start = path_build(world, start_node.origin, world, world);
                end   = path_build(world, goal_node.origin, world, start);
                ln    = end;
-               
+
                for(open = goal_node; open.path_prev != start_node; open = open.path_prev)
                {
                        n    = path_build(ln,open.origin,open.path_prev,start);
@@ -221,8 +221,8 @@ entity pathlib_waypointpath_step()
                        ln = n;
                }
                start.path_next = n;
-               n.path_prev = start;            
-               
+               n.path_prev = start;
+
         return start;
     }
 
index 0a5ea42b1c22e7e996665ee98238dd55a6eb3307..7a0aec8652ed0ae8f32b2594da45ad49459a6165 100644 (file)
@@ -94,25 +94,25 @@ float tile_check_cross(vector where)
     // forward-right
     p = where + f + r;
     traceline(p + tile_check_up, p - tile_check_down, MOVE_WORLDONLY, self);
-    if not (location_isok(trace_endpos, 1, 0))
+    if (!location_isok(trace_endpos, 1, 0))
         return 0;
 
     // Forward-left
     p = where + f - r;
     traceline(p + tile_check_up, p - tile_check_down, MOVE_WORLDONLY, self);
-    if not (location_isok(trace_endpos, 1, 0))
+    if (!location_isok(trace_endpos, 1, 0))
         return 0;
 
     // Back-right
     p = where - f + r;
     traceline(p + tile_check_up, p - tile_check_down, MOVE_WORLDONLY, self);
-    if not (location_isok(trace_endpos, 1 ,0))
+    if (!location_isok(trace_endpos, 1 ,0))
         return 0;
 
     //Back-left
     p = where - f - r;
     traceline(p + tile_check_up, p - tile_check_down, MOVE_WORLDONLY, self);
-    if not (location_isok(trace_endpos, 1, 0))
+    if (!location_isok(trace_endpos, 1, 0))
         return 0;
 
     return 1;
@@ -128,26 +128,26 @@ float tile_check_plus(vector where)
     // forward
     p = where + f;
     traceline(p+tile_check_up,p-tile_check_down,MOVE_WORLDONLY,self);
-    if not (location_isok(trace_endpos,1,0))
+    if (!location_isok(trace_endpos,1,0))
         return 0;
 
 
     //left
     p = where - r;
     traceline(p+tile_check_up,p-tile_check_down,MOVE_WORLDONLY,self);
-    if not (location_isok(trace_endpos,1,0))
+    if (!location_isok(trace_endpos,1,0))
         return 0;
 
     // Right
     p = where + r;
     traceline(p+tile_check_up,p-tile_check_down,MOVE_WORLDONLY,self);
-    if not (location_isok(trace_endpos,1,0))
+    if (!location_isok(trace_endpos,1,0))
         return 0;
 
     //Back
     p = where - f;
     traceline(p+tile_check_up,p-tile_check_down,MOVE_WORLDONLY,self);
-    if not (location_isok(trace_endpos,1,0))
+    if (!location_isok(trace_endpos,1,0))
         return 0;
 
     return 1;
index 354b521e816b93ecf1a2adabdae180ba05a7e436..2c6e941a6a4dfd7585986ea74c969702e8609b81 100644 (file)
@@ -17,7 +17,7 @@ void PlayerStats_Init() // initiated before InitGameplayMode so that scores are
        if(playerstats_db >= 0)
                playerstats_waitforme = FALSE; // must wait for it at match end
 
-       serverflags |= SERVERFLAG_PLAYERSTATS;  
+       serverflags |= SERVERFLAG_PLAYERSTATS;
 
        PlayerStats_AddEvent(PLAYERSTATS_ALIVETIME);
        PlayerStats_AddEvent(PLAYERSTATS_AVGLATENCY);
@@ -83,7 +83,7 @@ void PlayerStats_AddPlayer(entity e)
 
        string key;
        key = sprintf("%s:*", e.playerstats_id);
-       
+
        string p;
        p = db_get(playerstats_db, key);
        if(p == "")
@@ -106,7 +106,7 @@ void PlayerStats_AddTeam(float t)
 
        string key;
        key = sprintf("%d", t);
-       
+
        string p;
        p = db_get(playerstats_db, key);
        if(p == "")
@@ -126,10 +126,10 @@ void PlayerStats_AddEvent(string event_id)
 {
        if(playerstats_db < 0)
                return;
-       
+
        string key;
        key = sprintf("*:%s", event_id);
-       
+
        string p;
        p = db_get(playerstats_db, key);
        if(p == "")
@@ -149,7 +149,7 @@ float PlayerStats_Event(entity e, string event_id, float value)
 {
        if((e.playerstats_id == "") || playerstats_db < 0)
                return 0;
-       
+
        string key;
        float val;
        key = sprintf("%s:%s", e.playerstats_id, event_id);
@@ -194,7 +194,7 @@ float PlayerStats_TeamScore(float t, string event_id, float value)
        U: UDP port number of the server
        D: duration of the match
        P: player ID of an existing player; this also sets the owner for all following "n", "e" and "t" lines (lower case!)
-       Q: team number of an existing team (format: team#NN); this also sets the owner for all following "e" lines (lower case!) 
+       Q: team number of an existing team (format: team#NN); this also sets the owner for all following "e" lines (lower case!)
        n: nickname of the player (optional)
        t: team ID
        i: player index
index bf3772090d35bab537a6bdc0935b688841f1d0f9..aff0652d4a569061d7fb39a43d654185f264b229 100644 (file)
@@ -89,7 +89,7 @@ float Portal_TeleportPlayer(entity teleporter, entity player)
        vector from, to, safe, step, transform, ang, newvel;
        float planeshift, s, t;
 
-       if not(teleporter.enemy)
+       if (!teleporter.enemy)
        {
                backtrace("Portal_TeleportPlayer called without other portal being set. Stop.");
                return 0;
@@ -160,7 +160,7 @@ float Portal_TeleportPlayer(entity teleporter, entity player)
        player = self;
        self = oldself;
 
-       if not(teleporter.enemy)
+       if (!teleporter.enemy)
        {
                backtrace("Portal_TeleportPlayer ended up without other portal being set BEFORE TeleportPlayer. Stop.");
                return 0;
@@ -175,7 +175,7 @@ float Portal_TeleportPlayer(entity teleporter, entity player)
                        Send_Notification(NOTIF_ONE, player, MSG_ANNCE, ANNCE_ACHIEVEMENT_AMAZING);
        }
 
-       if not(teleporter.enemy)
+       if (!teleporter.enemy)
        {
                backtrace("Portal_TeleportPlayer ended up without other portal being set AFTER TeleportPlayer. Stop.");
                return 0;
index e9e9a4b8c89e3fdfce2209e264df815a634b16d2..f29324a478a8e622e4b72b81d995681a01d511b4 100644 (file)
@@ -37,7 +37,6 @@ defs.qh               // Should rename this, it has fields and globals
 mutators/base.qh
 mutators/mutators.qh
 mutators/gamemode_assault.qh
-mutators/gamemode_arena.qh
 mutators/gamemode_ca.qh
 mutators/gamemode_ctf.qh
 mutators/gamemode_domination.qh
@@ -228,7 +227,6 @@ round_handler.qc
 
 mutators/base.qc
 mutators/gamemode_assault.qc
-mutators/gamemode_arena.qc
 mutators/gamemode_ca.qc
 mutators/gamemode_ctf.qc
 mutators/gamemode_domination.qc
@@ -269,5 +267,3 @@ mutators/mutator_campcheck.qc
 ../common/test.qc
 ../common/util.qc
 ../common/notifications.qc
-
-../common/if-this-file-errors-scroll-up-and-fix-the-warnings.fteqccfail
index 63d846f1fd03ad861dc53de314b1c155356896ec..e6d7a43accca9535df7edb251036e6669c9e2da3 100644 (file)
@@ -174,7 +174,7 @@ void race_setTime(string map, float t, string myuid, string mynetname, entity e)
 
        oldrec = race_readTime(GetMapname(), newpos);
        oldrec_holder = race_readName(GetMapname(), newpos);
-       
+
        // store new ranking
        race_writeTime(GetMapname(), t, myuid);
 
@@ -187,7 +187,7 @@ void race_setTime(string map, float t, string myuid, string mynetname, entity e)
        if(rankings_reply)
                strunzone(rankings_reply);
        rankings_reply = strzone(getrankings());
-       
+
        if(newpos == player_prevpos)
        {
                Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_RACE_NEW_IMPROVED, mynetname, newpos, t, oldrec);
@@ -249,7 +249,7 @@ void race_SendTime(entity e, float cp, float t, float tvalid)
 
        if(tvalid)
        if(cp == race_timed_checkpoint) // finish line
-       if not(e.race_completed)
+       if (!e.race_completed)
        {
                float s;
                if(g_race_qualifying)
@@ -457,7 +457,7 @@ void checkpoint_passed()
        /*
         * Trigger targets
         */
-       if not((self.spawnflags & 2) && (IS_PLAYER(other)))
+       if (!((self.spawnflags & 2) && (IS_PLAYER(other))))
        {
                activator = other;
                oldmsg = self.message;
@@ -466,7 +466,7 @@ void checkpoint_passed()
                self.message = oldmsg;
        }
 
-       if not(IS_PLAYER(other))
+       if (!IS_PLAYER(other))
                return;
 
        /*
@@ -477,7 +477,7 @@ void checkpoint_passed()
        other.porto_forbidden = 2; // decreased by 1 each StartFrame
 
        if(defrag_ents) {
-               if(self.race_checkpoint == -2) 
+               if(self.race_checkpoint == -2)
                {
                        self.race_checkpoint = other.race_checkpoint;
                }
@@ -497,7 +497,7 @@ void checkpoint_passed()
                                for(cp = world; (cp = find(cp, classname, "target_checkpoint"));) {
                                        if(cp.race_checkpoint == -2) // set defragcpexists to -1 so that the cp id file will be rewritten when someone finishes
                                                defragcpexists = -1;
-                               }       
+                               }
                        }
                }
                if(cp_amount == 0) {
@@ -611,7 +611,7 @@ void trigger_race_checkpoint_verify()
        if(have_verified)
                return;
        have_verified = 1;
-       
+
        qual = g_race_qualifying;
 
        oldself = self;
@@ -637,7 +637,7 @@ void trigger_race_checkpoint_verify()
                                self.race_place = race_lowest_place_spawn;
                                if(!Spawn_FilterOutBadSpots(findchain(classname, "info_player_deathmatch"), 0, FALSE))
                                        error(strcat("Checkpoint ", ftos(i), " misses a spawnpoint with race_place==", ftos(self.race_place), " (used for qualifying) - bailing out"));
-                               
+
                                // race only (initial spawn)
                                g_race_qualifying = 0;
                                for(p = 1; p <= race_highest_place_spawn; ++p)
@@ -663,7 +663,7 @@ void trigger_race_checkpoint_verify()
                self.race_checkpoint = race_NextCheckpoint(0);
                g_race_qualifying = 1;
                self.race_place = 0; // there's only one spawn on defrag maps
+
                // check if a defragcp file already exists, then read it and apply the checkpoint order
                float fh;
                float len;
@@ -739,8 +739,8 @@ void trigger_race_checkpoint_verify()
                                        targ.wait = 0;
                                        targ.delay = 0;
 
-                    // These just make the game crash on some maps with oddly shaped triggers. 
-                    // (on the other hand they used to fix the case when two players ran through a checkpoint at once, 
+                    // These just make the game crash on some maps with oddly shaped triggers.
+                    // (on the other hand they used to fix the case when two players ran through a checkpoint at once,
                     // and often one of them just passed through without being registered. Hope it's fixed  in a better way now.
                     // (happened on item triggers too)
                     //
@@ -800,7 +800,7 @@ void spawnfunc_trigger_race_checkpoint()
        EXACTTRIGGER_INIT;
 
        self.use = checkpoint_use;
-       if not(self.spawnflags & 1)
+       if (!(self.spawnflags & 1))
                self.touch = checkpoint_touch;
 
        o = (self.absmin + self.absmax) * 0.5;
@@ -814,7 +814,7 @@ void spawnfunc_trigger_race_checkpoint()
                self.message2 = "was pushed backwards by";
        if (self.race_penalty_reason == "")
                self.race_penalty_reason = "missing a checkpoint";
-       
+
        self.race_checkpoint = self.cnt;
 
        if(self.race_checkpoint > race_highest_checkpoint)
@@ -853,7 +853,7 @@ void spawnfunc_target_checkpoint() // defrag entity
        EXACTTRIGGER_INIT;
 
        self.use = checkpoint_use;
-       if not(self.spawnflags & 1)
+       if (!(self.spawnflags & 1))
                self.touch = checkpoint_touch;
 
        o = (self.absmin + self.absmax) * 0.5;
@@ -1090,7 +1090,7 @@ void spawnfunc_trigger_race_penalty()
        EXACTTRIGGER_INIT;
 
        self.use = penalty_use;
-       if not(self.spawnflags & 1)
+       if (!(self.spawnflags & 1))
                self.touch = penalty_touch;
 
        if (self.race_penalty_reason == "")
@@ -1115,7 +1115,7 @@ float race_GetFractionalLapCount(entity e)
        l = PlayerScore_Add(e, SP_RACE_LAPS, 0);
        if(e.race_completed)
                return l; // not fractional
-       
+
        vector o0, o1;
        float bestfraction, fraction;
        entity lastcp, cp0, cp1;
@@ -1127,7 +1127,7 @@ float race_GetFractionalLapCount(entity e)
 
        if(nextcpindex == lastcpindex)
                return l; // finish
-       
+
        bestfraction = 1;
        for(cp0 = world; (cp0 = find(cp0, classname, "trigger_race_checkpoint")); )
        {
index 1537f6752e11f1fea0e3617a5f53836b3d71bf64..3a8b830d74c04e82063566368b0c949bc7f52878 100644 (file)
@@ -334,7 +334,7 @@ float PlayerScore_Add(entity player, float scorefield, float score)
        entity s;
 
        if(gameover)
-       if not(g_lms && scorefield == SP_LMS_RANK) // allow writing to this field in intermission as it is needed for newly joining players
+       if(!(g_lms && scorefield == SP_LMS_RANK)) // allow writing to this field in intermission as it is needed for newly joining players
                score = 0;
 
        if(!scores_initialized) return 0; // FIXME remove this when everything uses this system
@@ -532,12 +532,12 @@ void WinningConditionHelper()
                                s = strcat(s, ":human");
                        else
                                s = strcat(s, ":bot");
-                       if(!IS_PLAYER(p) && !g_arena && p.caplayer != 1 && !g_lms)
+                       if(!IS_PLAYER(p) && p.caplayer != 1 && !g_lms)
                                s = strcat(s, ":spectator");
                }
                else
                {
-                       if(IS_PLAYER(p) || g_arena || p.caplayer == 1 || g_lms)
+                       if(IS_PLAYER(p) || p.caplayer == 1 || g_lms)
                                s = GetPlayerScoreString(p, 2);
                        else
                                s = "-666";
@@ -688,7 +688,7 @@ float PlayerTeamScore_Compare(entity p1, entity p2, float teams, float strict)
                if(teams < 0)
                        return 0;
        }
-       
+
        return PlayerScore_Compare(p1.scorekeeper, p2.scorekeeper, strict);
 }
 
@@ -712,7 +712,7 @@ entity PlayerScore_Sort(.float field, float teams, float strict, float nospectat
                plist = p;
        }
        // Now plist points to the whole list.
-       
+
        pfirst = plast = world;
 
        i = j = 0;
@@ -742,7 +742,7 @@ entity PlayerScore_Sort(.float field, float teams, float strict, float nospectat
 
                pbest.field = j;
 
-               if not(pfirst)
+               if (!pfirst)
                        pfirst = pbest;
                if(plast)
                        plast.chain = pbest;
@@ -765,7 +765,7 @@ float TeamScore_GetCompareValue(float t)
        }
 
        sk = teamscorekeepers[t - 1];
-       if not(sk)
+       if (!sk)
                return -999999999;
        s = sk.teamscores_primary;
        if(teamscores_flags_primary & SFL_ZERO_IS_WORST)
@@ -813,7 +813,7 @@ void Score_NicePrint_Team(entity to, float t, float w)
                s = "Scores:";
 
        s = strcat(s, strpad(max(0, NAMEWIDTH - strlennocol(s)), ""));
-       
+
        for(i = 0; i < MAX_SCORE; ++i)
                if(scores_label[i] != "")
                {
@@ -847,7 +847,7 @@ void Score_NicePrint_Player(entity to, entity p, float w)
                        break;
                }
        }
-       
+
        for(i = 0; i < MAX_SCORE; ++i)
                if(scores_label[i] != "")
                {
@@ -896,12 +896,12 @@ void Score_NicePrint(entity to)
                t = p.team;
                p = p.chain;
        }
-       
+
        t = 0;
        FOR_EACH_CLIENT(p)
-       if not(IS_PLAYER(p))
+       if (!IS_PLAYER(p))
        {
-               if not(t)
+               if (!t)
                        Score_NicePrint_Spectators(to);
                Score_NicePrint_Spectator(to, p);
                t = 1;
index d60f4563c1cfdbf937982c9046ed66cc2f264423..b57666a6899ece808ef529f8267a721c2da41ee0 100644 (file)
@@ -17,12 +17,12 @@ void ScoreRules_basics(float teams, float sprio, float stprio, float score_enabl
        if(score_enabled)
                ScoreInfo_SetLabel_TeamScore  (ST_SCORE,        "score",     stprio);
 
-       if not(INDEPENDENT_PLAYERS)
+       if (!INDEPENDENT_PLAYERS)
                ScoreInfo_SetLabel_PlayerScore(SP_KILLS,        "kills",     0);
 
        ScoreInfo_SetLabel_PlayerScore(SP_DEATHS,       "deaths",    SFL_LOWER_IS_BETTER);
 
-       if not(INDEPENDENT_PLAYERS)
+       if (!INDEPENDENT_PLAYERS)
                ScoreInfo_SetLabel_PlayerScore(SP_SUICIDES,     "suicides",  SFL_LOWER_IS_BETTER);
 
        if(score_enabled)
index 9af13eca28df58d6860bce3edda0c856efd20f66..06f7e075ddcc241a0323b6d5a7a31efbf5f8d5ec 100644 (file)
@@ -10,9 +10,9 @@ void secrets_setstatus() {
  */
 void trigger_secret_touch() {
        // only a player can trigger this
-       if not(IS_PLAYER(other))
+       if (!IS_PLAYER(other))
                return;
-       
+
        // update secrets found counter
        secrets_found += 1;
        //print("Secret found: ", ftos(secret_counter.cnt), "/");
@@ -21,7 +21,7 @@ void trigger_secret_touch() {
        // centerprint message (multi_touch() doesn't always call centerprint())
        centerprint(other, self.message);
        self.message = "";
-       
+
        // handle normal trigger features
        multi_touch();
        remove(self);
@@ -42,32 +42,32 @@ Trigger secret can only be trigger by a player's touch and can not be a target i
 */
 void spawnfunc_trigger_secret() {
        // FIXME: should it be disabled in most modes?
-       
+
        // update secrets count
        secrets_total += 1;
-       
+
        // add default message
        if (self.message == "")
                self.message = "You found a secret!";
-       
+
        // set default sound
        if (self.noise == "")
-       if not(self.sounds)
+       if (!self.sounds)
                self.sounds = 1; // misc/secret.wav
-       
+
        // this entity can't be a target itself!!!!
        self.targetname = "";
-       
+
        // you can't just shoot a room to find it, can you?
        self.health = 0;
-       
+
        // a secret can not be delayed
        self.delay = 0;
-       
+
        // convert this trigger to trigger_once
        self.classname = "trigger_once";
        spawnfunc_trigger_once();
-       
+
        // take over the touch() function, so we can mark secret as found
        self.touch = trigger_secret_touch;
        // ignore triggering;
index 429bf84947e39fb0c652dabfff4e35c06f89f64b..3f4e72c3b3f584b67c0cc4de06f9f033d568f6db 100644 (file)
@@ -13,7 +13,7 @@ float SpawnPoint_Send(entity to, float sf)
 float SpawnEvent_Send(entity to, float sf)
 {
        float send;
-       
+
        WriteByte(MSG_ENTITY, ENT_CLIENT_SPAWNEVENT);
 
        if(autocvar_g_spawn_alloweffects)
@@ -318,12 +318,7 @@ entity SelectSpawnPoint (float anypoint)
        }
        else
        {
-               float mindist;
-               if(g_arena && arena_roundbased)
-                       mindist = 800;
-               else
-                       mindist = 100;
-               firstspot = Spawn_FilterOutBadSpots(firstspot, mindist, teamcheck);
+               firstspot = Spawn_FilterOutBadSpots(firstspot, 100, teamcheck);
 
                // there is 50/50 chance of choosing a random spot or the furthest spot
                // (this means that roughly every other spawn will be furthest, so you
index 8b8f8efe85bcb26bf6bd81487bcb0c09feffb2b9..043cb7713d24cc61c91b162efba963ec0dd73065 100644 (file)
@@ -2,15 +2,15 @@ void CreatureFrame (void)
 {
        entity oldself;
        float dm;
-       
+
        oldself = self;
        for(self = world; (self = findfloat(self, damagedbycontents, TRUE)); )
        {
                if (self.movetype == MOVETYPE_NOCLIP) { continue; }
-               
+
                float vehic = (self.vehicle_flags & VHF_ISVEHICLE);
                float projectile = (self.flags & FL_PROJECTILE);
-               
+
                if (self.watertype <= CONTENT_WATER && self.waterlevel > 0) // workaround a retarded bug made by id software :P (yes, it's that old of a bug)
                {
                        if (!(self.flags & FL_INWATER))
@@ -38,11 +38,11 @@ void CreatureFrame (void)
                                        }
                                }
                        }
-                       
+
                        if (self.dmgtime < time)
                        {
-                               self.dmgtime = time + autocvar_g_balance_contents_damagerate; 
-                               
+                               self.dmgtime = time + autocvar_g_balance_contents_damagerate;
+
                                if (projectile)
                                {
                                        if (self.watertype == CONTENT_LAVA)
@@ -125,7 +125,7 @@ void CreatureFrame (void)
                                        else
                                                dprint(ftos(trace_dphitq3surfaceflags), "\n");
                                        */
-                                       if not(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOSTEPS)
+                                       if (!(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOSTEPS))
                                        {
                                                if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_METALSTEPS)
                                                        GlobalSound(globalsound_metalstep, CH_PLAYER, VOICETYPE_PLAYERSOUND);
@@ -135,7 +135,7 @@ void CreatureFrame (void)
                                }
                        }
                }
-               
+
         self.oldvelocity = self.velocity;
        }
        self = oldself;
@@ -249,7 +249,7 @@ void SV_OnEntityPreSpawnFunction()
 {
        if (self)
        if (self.gametypefilter != "")
-       if not(isGametypeInFilter(MapInfo_LoadedGametype, teamplay, have_team_spawns, self.gametypefilter))
+       if (!isGametypeInFilter(MapInfo_LoadedGametype, teamplay, have_team_spawns, self.gametypefilter))
        {
                remove(self);
                return;
@@ -349,14 +349,14 @@ void SV_OnEntityPreSpawnFunction()
                        else
                        {
                                k = s;
-                               if not(cvar(k))
+                               if (!cvar(k))
                                        goto cvar_fail;
                        }
                }
                inv = !inv;
 :cvar_fail
                // now inv is 1 if we want to keep the item, and 0 if we want to get rid of it
-               if not(inv)
+               if (!inv)
                {
                        //print("cvarfilter fail\n");
                        remove(self);
index 0a95b78d06c96f930eb903b746000a48d232d991..bb2254c977d91e4cd427b5d3e6c2c3fcfea115a0 100644 (file)
@@ -37,7 +37,7 @@ void spawnfunc_func_healthcharger() {}
 
 void func_ladder_touch()
 {
-       if not(other.iscreature)
+       if (!other.iscreature)
                return;
        if (other.vehicle_flags & VHF_ISVEHICLE)
                return;
index 31aa5caf791b29bbe8fb69e489aa935e167bb4d9..1db8f6cd7630fcf7913d3fd229696986f8aa5e7d 100644 (file)
@@ -28,37 +28,37 @@ var string autocvr_cl_simpleitems_postfix = "_simple";
 .float  gravity;
 .vector colormod;
 void ItemDraw()
-{    
+{
     if(self.gravity)
-    {        
+    {
         Movetype_Physics_MatchServer(autocvar_cl_projectiles_sloppy);
-        if(self.move_flags & FL_ONGROUND) 
+        if(self.move_flags & FL_ONGROUND)
         { // For some reason move_avelocity gets set to '0 0 0' here ...
             self.oldorigin = self.origin;
             self.gravity = 0;
 
-            if(autocvar_cl_animate_items)   
-            { // ... so reset it if animations are requested. 
+            if(autocvar_cl_animate_items)
+            { // ... so reset it if animations are requested.
                 if(self.ItemStatus & ITS_ANIMATE1)
                     self.move_avelocity = '0 180 0';
-                
+
                 if(self.ItemStatus & ITS_ANIMATE2)
                     self.move_avelocity = '0 -90 0';
             }
         }
     }
     else if (autocvar_cl_animate_items)
-    {        
+    {
         if(self.ItemStatus & ITS_ANIMATE1)
         {
             self.angles += self.move_avelocity * frametime;
-            setorigin(self, '0 0 10' + self.oldorigin + '0 0 8' * sin(time * 2));        
-        }    
-        
+            setorigin(self, '0 0 10' + self.oldorigin + '0 0 8' * sin(time * 2));
+        }
+
         if(self.ItemStatus & ITS_ANIMATE2)
         {
             self.angles += self.move_avelocity * frametime;
-            setorigin(self, '0 0 8' + self.oldorigin + '0 0 4' * sin(time * 3));        
+            setorigin(self, '0 0 8' + self.oldorigin + '0 0 4' * sin(time * 3));
         }
     }
 }
@@ -66,9 +66,9 @@ void ItemDraw()
 void ItemDrawSimple()
 {
     if(self.gravity)
-    {        
-        Movetype_Physics_MatchServer(autocvar_cl_projectiles_sloppy);    
-        
+    {
+        Movetype_Physics_MatchServer(autocvar_cl_projectiles_sloppy);
+
         if(self.move_flags & FL_ONGROUND)
             self.gravity = 0;
     }
@@ -86,19 +86,19 @@ void ItemRead(float _IsNew)
         setorigin(self, self.origin);
         self.oldorigin = self.origin;
     }
-    
-    if(sf & ISF_ANGLES) 
+
+    if(sf & ISF_ANGLES)
     {
         self.angles_x = ReadCoord();
         self.angles_y = ReadCoord();
-        self.angles_z = ReadCoord();        
+        self.angles_z = ReadCoord();
         self.move_angles = self.angles;
     }
-    
+
     if(sf & ISF_STATUS) // need to read/write status frist so model can handle simple, fb etc.
     {
-        self.ItemStatus = ReadByte();    
-        
+        self.ItemStatus = ReadByte();
+
         if(self.ItemStatus & ITS_AVAILABLE)
         {
             self.alpha = 1;
@@ -113,19 +113,19 @@ void ItemRead(float _IsNew)
             }
             else
                 self.alpha = -1;
-        }    
-        
+        }
+
         if(autocvar_cl_fullbright_items)
             if(self.ItemStatus & ITS_ALLOWFB)
                 self.effects |= EF_FULLBRIGHT;
-            
+
         if(self.ItemStatus & ITS_STAYWEP)
         {
             self.colormod = self.glowmod = autocvar_cl_weapon_stay_color;
             self.alpha = autocvar_cl_weapon_stay_alpha;
-            
+
         }
-        
+
         if(self.ItemStatus & ITS_POWERUP)
         {
             if(self.ItemStatus & ITS_AVAILABLE)
@@ -134,26 +134,26 @@ void ItemRead(float _IsNew)
                  self.effects &= ~(EF_ADDITIVE | EF_FULLBRIGHT);
         }
     }
-    
+
     if(sf & ISF_MODEL)
     {
         self.drawmask  = MASK_NORMAL;
         self.movetype  = MOVETYPE_NOCLIP;
         self.draw       = ItemDraw;
-        
+
         if(self.mdl)
             strunzone(self.mdl);
-        
+
         self.mdl = "";
         string _fn = ReadString();
-        
+
         if(autocvar_cl_simple_items && (self.ItemStatus & ITS_ALLOWSI))
         {
             string _fn2 = substring(_fn, 0 , strlen(_fn) -4);
             self.draw = ItemDrawSimple;
-                    
-            
-            
+
+
+
             if(fexists(sprintf("%s%s.md3", _fn2, autocvr_cl_simpleitems_postfix)))
                 self.mdl = strzone(sprintf("%s%s.md3", _fn2, autocvr_cl_simpleitems_postfix));
             else if(fexists(sprintf("%s%s.dpm", _fn2, autocvr_cl_simpleitems_postfix)))
@@ -168,21 +168,21 @@ void ItemRead(float _IsNew)
                 dprint("Simple item requested for ", _fn, " but no model exsist for it\n");
             }
         }
-        
-        if(self.draw != ItemDrawSimple)        
-            self.mdl = strzone(_fn);                
-        
-        
+
+        if(self.draw != ItemDrawSimple)
+            self.mdl = strzone(_fn);
+
+
         if(self.mdl == "")
             dprint("^1WARNING!^7 self.mdl is unset for item ", self.classname, " tell tZork aboute this!\n");
-        
+
         precache_model(self.mdl);
         setmodel(self, self.mdl);
     }
-    
+
     if(sf & ISF_COLORMAP)
         self.colormap = ReadShort();
-    
+
     if(sf & ISF_DROP)
     {
         self.gravity = 1;
@@ -193,7 +193,7 @@ void ItemRead(float _IsNew)
         self.move_velocity_z = ReadCoord();
         self.velocity = self.move_velocity;
         self.move_origin = self.oldorigin;
-        
+
         if(!self.move_time)
         {
             self.move_time = time;
@@ -202,12 +202,12 @@ void ItemRead(float _IsNew)
         else
             self.move_time = max(self.move_time, time);
     }
-        
+
     if(autocvar_cl_animate_items)
-    {        
+    {
         if(self.ItemStatus & ITS_ANIMATE1)
             self.move_avelocity = '0 180 0';
-                
+
         if(self.ItemStatus & ITS_ANIMATE2)
             self.move_avelocity = '0 -90 0';
     }
@@ -223,8 +223,8 @@ float ItemSend(entity to, float sf)
         sf |= ISF_DROP;
     else
         sf &= ~ISF_DROP;
-       
-       WriteByte(MSG_ENTITY, ENT_CLIENT_ITEM); 
+
+       WriteByte(MSG_ENTITY, ENT_CLIENT_ITEM);
        WriteByte(MSG_ENTITY, sf);
 
        //WriteByte(MSG_ENTITY, self.cnt);
@@ -234,7 +234,7 @@ float ItemSend(entity to, float sf)
         WriteCoord(MSG_ENTITY, self.origin_y);
         WriteCoord(MSG_ENTITY, self.origin_z);
     }
-    
+
     if(sf & ISF_ANGLES)
     {
         WriteCoord(MSG_ENTITY, self.angles_x);
@@ -247,14 +247,14 @@ float ItemSend(entity to, float sf)
 
     if(sf & ISF_MODEL)
     {
-        
+
         if(self.mdl == "")
             dprint("^1WARNING!^7 self.mdl is unset for item ", self.classname, "exspect a crash just aboute now\n");
-        
+
         WriteString(MSG_ENTITY, self.mdl);
     }
-        
-        
+
+
     if(sf & ISF_COLORMAP)
         WriteShort(MSG_ENTITY, self.colormap);
 
@@ -264,10 +264,14 @@ float ItemSend(entity to, float sf)
         WriteCoord(MSG_ENTITY, self.velocity_y);
         WriteCoord(MSG_ENTITY, self.velocity_z);
     }
-        
+
     return TRUE;
 }
 
+void ItemUpdate(entity item)
+{
+       item.SendFlags |= ISF_LOCATION;
+}
 
 float have_pickup_item(void)
 {
@@ -370,7 +374,7 @@ float Item_Customize()
 */
 
 void Item_Show (entity e, float mode)
-{    
+{
        e.effects &= ~(EF_ADDITIVE | EF_STARDUST | EF_FULLBRIGHT | EF_NODEPTHTEST);
        e.ItemStatus &= ~ITS_STAYWEP;
        if (mode > 0)
@@ -407,17 +411,17 @@ void Item_Show (entity e, float mode)
                e.spawnshieldtime = 1;
                e.ItemStatus &= ~ITS_AVAILABLE;
        }
-       
+
        if (e.items & IT_STRENGTH || e.items & IT_INVINCIBLE)
-           e.ItemStatus |= ITS_POWERUP;                
-       
+           e.ItemStatus |= ITS_POWERUP;
+
        if (autocvar_g_nodepthtestitems)
                e.effects |= EF_NODEPTHTEST;
-               
-    
+
+
     if (autocvar_g_fullbrightitems)
                e.ItemStatus |= ITS_ALLOWFB;
-       
+
        if (autocvar_sv_simple_items)
         e.ItemStatus |= ITS_ALLOWSI;
 
@@ -597,7 +601,7 @@ float Item_GiveTo(entity item, entity player)
        if (player.switchweapon == w_getbestweapon(player))
                _switchweapon = TRUE;
 
-       if not(player.weapons & WepSet_FromWeapon(player.switchweapon))
+       if (!(player.weapons & WepSet_FromWeapon(player.switchweapon)))
                _switchweapon = TRUE;
 
        pickedup |= Item_GiveAmmoTo(item, player, ammo_fuel, g_pickup_fuel_max, ITEM_MODE_FUEL);
@@ -647,7 +651,7 @@ float Item_GiveTo(entity item, entity player)
        }
 
 :skip
-       
+
        // always eat teamed entities
        if(item.team)
                pickedup = TRUE;
@@ -665,7 +669,7 @@ float Item_GiveTo(entity item, entity player)
 void Item_Touch (void)
 {
        entity e, head;
-       
+
        // remove the item if it's currnetly in a NODROP brush or hits a NOIMPACT surface (such as sky)
        if(self.classname == "droppedweapon")
        {
@@ -676,7 +680,7 @@ void Item_Touch (void)
                }
        }
 
-       if not(IS_PLAYER(other))
+       if (!IS_PLAYER(other))
                return;
        if (other.deadflag)
                return;
@@ -719,7 +723,7 @@ void Item_Touch (void)
 
        if (self.classname == "droppedweapon")
                remove (self);
-       else if not(self.spawnshieldtime)
+       else if (!self.spawnshieldtime)
                return;
        else
        {
@@ -865,7 +869,7 @@ float commodity_pickupevalfunc(entity player, entity item)
        {
                wi = get_weaponinfo(i);
 
-               if not(player.weapons & WepSet_FromWeapon(i))
+               if (!(player.weapons & WepSet_FromWeapon(i)))
                        continue;
 
                if(wi.items & IT_SHELLS)
@@ -926,16 +930,16 @@ void StartItem (string itemmodel, string pickupsound, float defaultrespawntime,
 
        if(self.model == "")
                self.model = itemmodel;
-       
+
        if(self.model == "")
     {
         error(strcat("^1Tried to spawn ", itemname, " with no model!\n"));
         return;
     }
-        
+
        if(self.item_pickupsound == "")
                self.item_pickupsound = pickupsound;
-       
+
        if(!self.respawntime) // both need to be set
        {
                self.respawntime = defaultrespawntime;
@@ -947,7 +951,7 @@ void StartItem (string itemmodel, string pickupsound, float defaultrespawntime,
 
        if(weaponid)
                self.weapons = WepSet_FromWeapon(weaponid);
-       
+
        self.flags = FL_ITEM | itemflags;
 
        if(MUTATOR_CALLHOOK(FilterItem)) // error means we do not want the item
@@ -1005,7 +1009,7 @@ void StartItem (string itemmodel, string pickupsound, float defaultrespawntime,
                        remove (self);
                        return;
                }
-               
+
                if(self.angles != '0 0 0')
             self.SendFlags |= ISF_ANGLES;
 
@@ -1086,8 +1090,8 @@ void StartItem (string itemmodel, string pickupsound, float defaultrespawntime,
        self.netname = itemname;
        self.touch = Item_Touch;
        setmodel(self, "null"); // precision set below
-       //self.effects |= EF_LOWPRECISION; 
-       
+       //self.effects |= EF_LOWPRECISION;
+
        if((itemflags & FL_POWERUP) || self.health || self.armorvalue)
     {
         self.pos1 = '-16 -16 0';
@@ -1099,20 +1103,20 @@ void StartItem (string itemmodel, string pickupsound, float defaultrespawntime,
         self.pos2 = '16 16 32';
     }
     setsize (self, self.pos1, self.pos2);
-    
-    if(itemflags & FL_POWERUP) 
+
+    if(itemflags & FL_POWERUP)
         self.ItemStatus |= ITS_ANIMATE1;
-       
+
        if(self.armorvalue || self.health)
         self.ItemStatus |= ITS_ANIMATE2;
-       
+
        if(itemflags & FL_WEAPON)
        {
                if (self.classname != "droppedweapon") // if dropped, colormap is already set up nicely
             self.colormap = 1024; // color shirt=0 pants=0 grey
         else
             self.gravity = 1;
-            
+
                self.ItemStatus |= ITS_ANIMATE1;
                self.ItemStatus |= ISF_COLORMAP;
        }
@@ -1122,13 +1126,13 @@ void StartItem (string itemmodel, string pickupsound, float defaultrespawntime,
        {
                if(!self.cnt)
                        self.cnt = 1; // item probability weight
-                       
+
                self.effects |= EF_NODRAW; // marker for item team search
                InitializeEntity(self, Item_FindTeam, INITPRIO_FINDTARGET);
        }
        else
                Item_Reset();
-        
+
     Net_LinkEntity(self, FALSE, 0, ItemSend);
 
        // call this hook after everything else has been done
@@ -1482,7 +1486,7 @@ void target_items_use (void)
                return;
        }
 
-       if not(IS_PLAYER(activator))
+       if (!IS_PLAYER(activator))
                return;
        if(activator.deadflag != DEAD_NO)
                return;
@@ -1799,7 +1803,7 @@ float GiveItems(entity e, float beginarg, float endarg)
        e.strength_finished = max(0, e.strength_finished - time);
        e.invincible_finished = max(0, e.invincible_finished - time);
        e.superweapons_finished = max(0, e.superweapons_finished - time);
-       
+
        PREGIVE(e, items);
        PREGIVE_WEAPONS(e);
        PREGIVE(e, strength_finished);
@@ -1855,7 +1859,7 @@ float GiveItems(entity e, float beginarg, float endarg)
                                {
                                        wi = get_weaponinfo(j);
                                        if(wi.weapon)
-                                               if not(wi.spawnflags & WEP_FLAG_MUTATORBLOCKED)
+                                               if (!(wi.spawnflags & WEP_FLAG_MUTATORBLOCKED))
                                                        got += GiveWeapon(e, j, op, val);
                                }
                        case "allammo":
@@ -1939,7 +1943,7 @@ float GiveItems(entity e, float beginarg, float endarg)
                if(wi.weapon)
                {
                        POSTGIVE_WEAPON(e, j, "weapons/weaponpickup.wav", string_null);
-                       if not(save_weapons & WepSet_FromWeapon(j))
+                       if (!(save_weapons & WepSet_FromWeapon(j)))
                                if(e.weapons & WepSet_FromWeapon(j))
                                        weapon_action(wi.weapon, WR_PRECACHE);
                }
@@ -1971,7 +1975,7 @@ float GiveItems(entity e, float beginarg, float endarg)
        else
                e.superweapons_finished += time;
 
-       if not(e.weapons & WepSet_FromWeapon(e.switchweapon))
+       if (!(e.weapons & WepSet_FromWeapon(e.switchweapon)))
                _switchweapon = TRUE;
        if(_switchweapon)
                W_SwitchWeapon_Force(e, w_getbestweapon(e));
index 3c797f97710e46b6d99e44164816554b122a3d3c..029bd8e5b6ed75b293cff51cf67367415b8cdfab 100644 (file)
@@ -329,7 +329,7 @@ void spawnfunc_trigger_push()
                self.speed = 1000;
        self.movedir = self.movedir * self.speed * 10;
 
-       if not(self.noise)
+       if (!self.noise)
                self.noise = "misc/jumppad.wav";
        precache_sound (self.noise);
 
index 24da476d72bad18cb5d19089a883492b98d392c5..3955442310817b537994f80d19d872ac6d65be3e 100644 (file)
@@ -83,19 +83,19 @@ void plat_go_down()
 {
        sound (self, CH_TRIGGER_SINGLE, self.noise, VOL_BASE, ATTEN_NORM);
        self.state = 3;
-       SUB_CalcMove (self.pos2, self.speed, plat_hit_bottom);
+       SUB_CalcMove (self.pos2, TSPEED_LINEAR, self.speed, plat_hit_bottom);
 }
 
 void plat_go_up()
 {
        sound (self, CH_TRIGGER_SINGLE, self.noise, VOL_BASE, ATTEN_NORM);
        self.state = 4;
-       SUB_CalcMove (self.pos1, self.speed, plat_hit_top);
+       SUB_CalcMove (self.pos1, TSPEED_LINEAR, self.speed, plat_hit_top);
 }
 
 void plat_center_touch()
 {
-       if not(other.iscreature)
+       if (!other.iscreature)
                return;
 
        if (other.health <= 0)
@@ -110,7 +110,7 @@ void plat_center_touch()
 
 void plat_outside_touch()
 {
-       if not(other.iscreature)
+       if (!other.iscreature)
                return;
 
        if (other.health <= 0)
@@ -177,7 +177,43 @@ void plat_reset()
        }
 }
 
-void spawnfunc_path_corner() { }
+.float platmovetype_start_default, platmovetype_end_default;
+float set_platmovetype(entity e, string s)
+{
+       // sets platmovetype_start and platmovetype_end based on a string consisting of two values
+
+       float n;
+       n = tokenize_console(s);
+       if(n > 0)
+               e.platmovetype_start = stof(argv(0));
+       else
+               e.platmovetype_start = 0;
+
+       if(n > 1)
+               e.platmovetype_end = stof(argv(1));
+       else
+               e.platmovetype_end = e.platmovetype_start;
+
+       if(n > 2)
+               if(argv(2) == "force")
+                       return TRUE; // no checking, return immediately
+
+       if(!cubic_speedfunc_is_sane(e.platmovetype_start, e.platmovetype_end))
+       {
+               objerror("Invalid platform move type; platform would go in reverse, which is not allowed.");
+               return FALSE;
+       }
+
+       return TRUE;
+}
+
+void spawnfunc_path_corner()
+{
+       // setup values for overriding train movement
+       // if a second value does not exist, both start and end speeds are the single value specified
+       if(!set_platmovetype(self, self.platmovetype))
+               return;
+}
 void spawnfunc_func_plat()
 {
        if (self.sounds == 0)
@@ -222,7 +258,7 @@ void spawnfunc_func_plat()
        self.angles = '0 0 0';
 
        self.classname = "plat";
-       if not(InitMovingBrushTrigger())
+       if (!InitMovingBrushTrigger())
                return;
        self.effects |= EF_LOWPRECISION;
        setsize (self, self.mins , self.maxs);
@@ -246,15 +282,49 @@ void spawnfunc_func_plat()
        plat_spawn_inside_trigger ();   // the "start moving" trigger
 }
 
-
+.float train_wait_turning;
 void() train_next;
 void train_wait()
 {
+       entity oldself;
+       oldself = self;
+       self = self.enemy;
+       SUB_UseTargets();
+       self = oldself;
+       self.enemy = world;
+
+       // if turning is enabled, the train will turn toward the next point while waiting
+       if(self.platmovetype_turn && !self.train_wait_turning)
+       {
+               entity targ, cp;
+               vector ang;
+               targ = find(world, targetname, self.target);
+               if((self.spawnflags & 1) && targ.curvetarget)
+                       cp = find(world, targetname, targ.curvetarget);
+               else
+                       cp = world;
+
+               if(cp) // bezier curves movement
+                       ang = cp.origin - (self.origin - self.view_ofs); // use the origin of the control point of the next path_corner
+               else // linear movement
+                       ang = targ.origin - (self.origin - self.view_ofs); // use the origin of the next path_corner
+               ang = vectoangles(ang);
+               ang_x = -ang_x; // flip up / down orientation
+
+               if(self.wait > 0) // slow turning
+                       SUB_CalcAngleMove(ang, TSPEED_TIME, self.ltime - time + self.wait, train_wait);
+               else // instant turning
+                       SUB_CalcAngleMove(ang, TSPEED_TIME, 0.0000001, train_wait);
+               self.train_wait_turning = TRUE;
+               return;
+       }
+
        if(self.noise != "")
                stopsoundto(MSG_BROADCAST, self, CH_TRIGGER_SINGLE); // send this as unreliable only, as the train will resume operation shortly anyway
 
-       if(self.wait < 0)
+       if(self.wait < 0 || self.train_wait_turning) // no waiting or we already waited while turning
        {
+               self.train_wait_turning = FALSE;
                train_next();
        }
        else
@@ -262,31 +332,56 @@ void train_wait()
                self.think = train_next;
                self.nextthink = self.ltime + self.wait;
        }
-
-       entity oldself;
-       oldself = self;
-       self = self.enemy;
-       SUB_UseTargets();
-       self = oldself;
-       self.enemy = world;
 }
 
 void train_next()
 {
-       entity targ;
+       entity targ, cp = world;
+       vector cp_org = '0 0 0';
+
        targ = find(world, targetname, self.target);
-       self.enemy = targ;
        self.target = targ.target;
+       if (self.spawnflags & 1)
+       {
+               if(targ.curvetarget)
+               {
+                       cp = find(world, targetname, targ.curvetarget); // get its second target (the control point)
+                       cp_org = cp.origin - self.view_ofs; // no control point found, assume a straight line to the destination
+               }
+       }
        if (self.target == "")
                objerror("train_next: no next target");
        self.wait = targ.wait;
        if (!self.wait)
                self.wait = 0.1;
 
+       if(targ.platmovetype)
+       {
+               // this path_corner contains a movetype overrider, apply it
+               self.platmovetype_start = targ.platmovetype_start;
+               self.platmovetype_end = targ.platmovetype_end;
+       }
+       else
+       {
+               // this path_corner doesn't contain a movetype overrider, use the train's defaults
+               self.platmovetype_start = self.platmovetype_start_default;
+               self.platmovetype_end = self.platmovetype_end_default;
+       }
+
        if (targ.speed)
-               SUB_CalcMove(targ.origin - self.mins, targ.speed, train_wait);
+       {
+               if (cp)
+                       SUB_CalcMove_Bezier(cp_org, targ.origin - self.view_ofs, TSPEED_LINEAR, targ.speed, train_wait);
+               else
+                       SUB_CalcMove(targ.origin - self.view_ofs, TSPEED_LINEAR, targ.speed, train_wait);
+       }
        else
-               SUB_CalcMove(targ.origin - self.mins, self.speed, train_wait);
+       {
+               if (cp)
+                       SUB_CalcMove_Bezier(cp_org, targ.origin - self.view_ofs, TSPEED_LINEAR, self.speed, train_wait);
+               else
+                       SUB_CalcMove(targ.origin - self.view_ofs, TSPEED_LINEAR, self.speed, train_wait);
+       }
 
        if(self.noise != "")
                sound(self, CH_TRIGGER_SINGLE, self.noise, VOL_BASE, ATTEN_IDLE);
@@ -299,7 +394,7 @@ void func_train_find()
        self.target = targ.target;
        if (self.target == "")
                objerror("func_train_find: no next target");
-       setorigin(self, targ.origin - self.mins);
+       setorigin(self, targ.origin - self.view_ofs);
        self.nextthink = self.ltime + 1;
        self.think = train_next;
 }
@@ -319,7 +414,15 @@ void spawnfunc_func_train()
        if (!self.speed)
                self.speed = 100;
 
-       if not(InitMovingBrushTrigger())
+       if (self.spawnflags & 2)
+       {
+               self.platmovetype_turn = TRUE;
+               self.view_ofs = '0 0 0'; // don't offset a rotating train, origin works differently now
+       }
+       else
+               self.view_ofs = self.mins;
+
+       if (!InitMovingBrushTrigger())
                return;
        self.effects |= EF_LOWPRECISION;
 
@@ -335,14 +438,19 @@ void spawnfunc_func_train()
                self.dmgtime = 0.25;
        self.dmgtime2 = time;
 
+       if(!set_platmovetype(self, self.platmovetype))
+               return;
+       self.platmovetype_start_default = self.platmovetype_start;
+       self.platmovetype_end_default = self.platmovetype_end;
+
        // TODO make a reset function for this one
 }
 
 void func_rotating_setactive(float astate)
 {
-       
+
        if (astate == ACTIVE_TOGGLE)
-       {               
+       {
                if(self.active == ACTIVE_ACTIVE)
                        self.active = ACTIVE_NOT;
                else
@@ -350,8 +458,8 @@ void func_rotating_setactive(float astate)
        }
        else
                self.active = astate;
-               
-       if(self.active  == ACTIVE_NOT)          
+
+       if(self.active  == ACTIVE_NOT)
                self.avelocity = '0 0 0';
        else
                self.avelocity = self.pos1;
@@ -372,10 +480,10 @@ void spawnfunc_func_rotating()
                precache_sound(self.noise);
                ambientsound(self.origin, self.noise, VOL_BASE, ATTEN_IDLE);
        }
-       
+
        self.active = ACTIVE_ACTIVE;
        self.setactive = func_rotating_setactive;
-       
+
        if (!self.speed)
                self.speed = 100;
        // FIXME: test if this turns the right way, then remove this comment (negate as needed)
@@ -387,9 +495,9 @@ void spawnfunc_func_rotating()
        // FIXME: test if this turns the right way, then remove this comment (negate as needed)
        else // Z
                self.avelocity = '0 1 0' * self.speed;
-       
+
        self.pos1 = self.avelocity;
-    
+
     if(self.dmg && (self.message == ""))
         self.message = " was squished";
     if(self.dmg && (self.message2 == ""))
@@ -401,7 +509,7 @@ void spawnfunc_func_rotating()
 
     self.dmgtime2 = time;
 
-       if not(InitMovingBrushTrigger())
+       if (!InitMovingBrushTrigger())
                return;
        // no EF_LOWPRECISION here, as rounding angles is bad
 
@@ -419,13 +527,13 @@ void func_bobbing_controller_think()
 {
        vector v;
        self.nextthink = time + 0.1;
-       
-       if not (self.owner.active == ACTIVE_ACTIVE)
+
+       if (!(self.owner.active == ACTIVE_ACTIVE))
        {
-               self.owner.velocity = '0 0 0';          
+               self.owner.velocity = '0 0 0';
                return;
        }
-               
+
        // calculate sinewave using makevectors
        makevectors((self.nextthink * self.owner.cnt + self.owner.phase * 360) * '0 1 0');
        v = self.owner.destvec + self.owner.movedir * v_forward_y;
@@ -480,7 +588,7 @@ void spawnfunc_func_bobbing()
        else // Z
                self.movedir = '0 0 1' * self.height;
 
-       if not(InitMovingBrushTrigger())
+       if (!InitMovingBrushTrigger())
                return;
 
        // wait for targets to spawn
@@ -504,7 +612,7 @@ void func_pendulum_controller_think()
        float v;
        self.nextthink = time + 0.1;
 
-       if not (self.owner.active == ACTIVE_ACTIVE)
+       if (!(self.owner.active == ACTIVE_ACTIVE))
        {
                self.owner.avelocity_x = 0;
                return;
@@ -548,7 +656,7 @@ void spawnfunc_func_pendulum()
        self.blocked = generic_plat_blocked;
 
        self.avelocity_z = 0.0000001;
-       if not(InitMovingBrushTrigger())
+       if (!InitMovingBrushTrigger())
                return;
 
        if(!self.freq)
@@ -597,7 +705,7 @@ void button_done()
 void button_return()
 {
        self.state = STATE_DOWN;
-       SUB_CalcMove (self.pos1, self.speed, button_done);
+       SUB_CalcMove (self.pos1, TSPEED_LINEAR, self.speed, button_done);
        self.frame = 0;                 // use normal textures
        if (self.health)
                self.takedamage = DAMAGE_YES;   // can be shot again
@@ -622,7 +730,7 @@ void button_fire()
                sound (self, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM);
 
        self.state = STATE_UP;
-       SUB_CalcMove (self.pos2, self.speed, button_wait);
+       SUB_CalcMove (self.pos2, TSPEED_LINEAR, self.speed, button_wait);
 }
 
 void button_reset()
@@ -637,7 +745,7 @@ void button_reset()
 
 void button_use()
 {
-       if not (self.active == ACTIVE_ACTIVE)
+       if (!(self.active == ACTIVE_ACTIVE))
                return;
 
        self.enemy = activator;
@@ -648,7 +756,7 @@ void button_touch()
 {
        if (!other)
                return;
-       if not(other.iscreature)
+       if (!other.iscreature)
                return;
        if(other.velocity * self.movedir < 0)
                return;
@@ -691,7 +799,7 @@ void spawnfunc_func_button()
 {
        SetMovedir ();
 
-       if not(InitMovingBrushTrigger())
+       if (!InitMovingBrushTrigger())
                return;
        self.effects |= EF_LOWPRECISION;
 
@@ -846,7 +954,7 @@ void door_go_down()
        }
 
        self.state = STATE_DOWN;
-       SUB_CalcMove (self.pos1, self.speed, door_hit_bottom);
+       SUB_CalcMove (self.pos1, TSPEED_LINEAR, self.speed, door_hit_bottom);
 }
 
 void door_go_up()
@@ -863,7 +971,7 @@ void door_go_up()
        if (self.noise2 != "")
                sound (self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTEN_NORM);
        self.state = STATE_UP;
-       SUB_CalcMove (self.pos2, self.speed, door_hit_top);
+       SUB_CalcMove (self.pos2, TSPEED_LINEAR, self.speed, door_hit_top);
 
        string oldmessage;
        oldmessage = self.message;
@@ -884,22 +992,22 @@ ACTIVATION FUNCTIONS
 
 float door_check_keys(void) {
        local entity door;
-       
-       
+
+
        if (self.owner)
                door = self.owner;
        else
                door = self;
-       
+
        // no key needed
-       if not(door.itemkeys)
+       if (!door.itemkeys)
                return TRUE;
 
        // this door require a key
        // only a player can have a key
-       if not(IS_PLAYER(other))
+       if (!IS_PLAYER(other))
                return FALSE;
-       
+
        if (item_keys_usekey(door, other)) {
                // some keys were used
                if (other.key_door_messagetime <= time) {
@@ -991,7 +1099,7 @@ void door_use()
        entity oself;
 
        //dprint("door_use (model: ");dprint(self.model);dprint(")\n");
-       
+
        if (self.owner)
        {
                oself = self;
@@ -1005,16 +1113,16 @@ void door_use()
 void door_trigger_touch()
 {
        if (other.health < 1)
-               if not(other.iscreature && other.deadflag == DEAD_NO)
+               if (!(other.iscreature && other.deadflag == DEAD_NO))
                        return;
 
        if (time < self.attack_finished_single)
                return;
-       
+
        // check if door is locked
        if (!door_check_keys())
                return;
-       
+
        self.attack_finished_single = time + 1;
 
        activator = other;
@@ -1031,12 +1139,12 @@ void door_damage(entity inflictor, entity attacker, float damage, float deathtyp
                if(!(DEATH_ISSPECIAL(deathtype)) && (deathtype & HITTYPE_SPLASH))
                        return;
        self.health = self.health - damage;
-       
+
        if (self.itemkeys) {
                // don't allow opening doors through damage if keys are required
                return;
        }
-       
+
        if (self.health <= 0)
        {
                oself = self;
@@ -1058,7 +1166,7 @@ Prints messages
 */
 void door_touch()
 {
-       if not(IS_PLAYER(other))
+       if (!IS_PLAYER(other))
                return;
        if (self.owner.attack_finished_single > time)
                return;
@@ -1148,7 +1256,7 @@ void door_rotating_go_down()
        }
 
        self.state = STATE_DOWN;
-       SUB_CalcAngleMove (self.pos1, self.speed, door_rotating_hit_bottom);
+       SUB_CalcAngleMove (self.pos1, TSPEED_LINEAR, self.speed, door_rotating_hit_bottom);
 }
 
 void door_rotating_go_up()
@@ -1164,7 +1272,7 @@ void door_rotating_go_up()
        if (self.noise2 != "")
                sound (self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTEN_NORM);
        self.state = STATE_UP;
-       SUB_CalcAngleMove (self.pos2, self.speed, door_rotating_hit_top);
+       SUB_CalcAngleMove (self.pos2, TSPEED_LINEAR, self.speed, door_rotating_hit_top);
 
        string oldmessage;
        oldmessage = self.message;
@@ -1381,13 +1489,13 @@ void spawnfunc_func_door()
                self.itemkeys |= ITEM_KEY_BIT(0);
        if (self.spawnflags & SPAWNFLAGS_SILVER_KEY)
                self.itemkeys |= ITEM_KEY_BIT(1);
-               
+
        //if (!self.deathtype) // map makers can override this
        //      self.deathtype = " got in the way";
        SetMovedir ();
 
        self.max_health = self.health;
-       if not(InitMovingBrushTrigger())
+       if (!InitMovingBrushTrigger())
                return;
        self.effects |= EF_LOWPRECISION;
        self.classname = "door";
@@ -1513,7 +1621,7 @@ void spawnfunc_func_door_rotating()
 
        self.max_health = self.health;
        self.avelocity = self.movedir;
-       if not(InitMovingBrushTrigger())
+       if (!InitMovingBrushTrigger())
                return;
        self.velocity = '0 0 0';
        //self.effects |= EF_LOWPRECISION;
@@ -1639,7 +1747,7 @@ void fd_secret_use()
                self.dest1 = self.origin + v_right * (self.t_width * temp);
 
        self.dest2 = self.dest1 + v_forward * self.t_length;
-       SUB_CalcMove(self.dest1, self.speed, fd_secret_move1);
+       SUB_CalcMove(self.dest1, TSPEED_LINEAR, self.speed, fd_secret_move1);
        if (self.noise2 != "")
                sound(self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTEN_NORM);
 }
@@ -1663,7 +1771,7 @@ void fd_secret_move2()
 {
        if (self.noise2 != "")
                sound(self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTEN_NORM);
-       SUB_CalcMove(self.dest2, self.speed, fd_secret_move3);
+       SUB_CalcMove(self.dest2, TSPEED_LINEAR, self.speed, fd_secret_move3);
 }
 
 // Wait here until time to go back...
@@ -1683,7 +1791,7 @@ void fd_secret_move4()
 {
        if (self.noise2 != "")
                sound(self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTEN_NORM);
-       SUB_CalcMove(self.dest1, self.speed, fd_secret_move5);
+       SUB_CalcMove(self.dest1, TSPEED_LINEAR, self.speed, fd_secret_move5);
 }
 
 // Wait 1 second...
@@ -1699,7 +1807,7 @@ void fd_secret_move6()
 {
        if (self.noise2 != "")
                sound(self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTEN_NORM);
-       SUB_CalcMove(self.oldorigin, self.speed, fd_secret_done);
+       SUB_CalcMove(self.oldorigin, TSPEED_LINEAR, self.speed, fd_secret_done);
 }
 
 void fd_secret_done()
@@ -1731,7 +1839,7 @@ Prints messages
 */
 void secret_touch()
 {
-       if not(other.iscreature)
+       if (!other.iscreature)
                return;
        if (self.attack_finished_single > time)
                return;
@@ -1787,7 +1895,7 @@ void spawnfunc_func_door_secret()
        self.mangle = self.angles;
        self.angles = '0 0 0';
        self.classname = "door";
-       if not(InitMovingBrushTrigger())
+       if (!InitMovingBrushTrigger())
                return;
        self.effects |= EF_LOWPRECISION;
 
@@ -1832,9 +1940,9 @@ void func_fourier_controller_think()
        float n, i, t;
 
        self.nextthink = time + 0.1;
-       if not (self.owner.active == ACTIVE_ACTIVE)
+       if (!(self.owner.active == ACTIVE_ACTIVE))
        {
-               self.owner.velocity = '0 0 0';          
+               self.owner.velocity = '0 0 0';
                return;
        }
 
@@ -1883,7 +1991,7 @@ void spawnfunc_func_fourier()
        if(self.netname == "")
                self.netname = "1 0 0 0 1";
 
-       if not(InitMovingBrushTrigger())
+       if (!InitMovingBrushTrigger())
                return;
 
        self.active = ACTIVE_ACTIVE;
@@ -1965,9 +2073,9 @@ void func_vectormamamam_controller_think()
 {
        self.nextthink = time + 0.1;
 
-       if not (self.owner.active == ACTIVE_ACTIVE)
+       if (!(self.owner.active == ACTIVE_ACTIVE))
        {
-               self.owner.velocity = '0 0 0';          
+               self.owner.velocity = '0 0 0';
                return;
        }
 
@@ -2046,7 +2154,7 @@ void spawnfunc_func_vectormamamam()
        if(self.netname == "")
                self.netname = "1 0 0 0 1";
 
-       if not(InitMovingBrushTrigger())
+       if (!InitMovingBrushTrigger())
                return;
 
        // wait for targets to spawn
index 7f8cb82921ee3ae2a3b068ac331bbff891a13949..bb1128bd60e8c532c217de9d8f9d99f9c0404d27 100644 (file)
@@ -142,7 +142,7 @@ float DoesQ3ARemoveThisEntity()
                        return 1;
 
        if(self.notta)
-               if not(!teamplay || g_tdm || g_ctf)
+               if (!(!teamplay || g_tdm || g_ctf))
                        return 1;
 
        if(self.notsingle)
@@ -164,8 +164,6 @@ float DoesQ3ARemoveThisEntity()
                gametypename = "ffa";
                if(teamplay)
                        gametypename = "team";
-               if(g_arena)
-                       gametypename = "tournament";
                if(g_ctf)
                        gametypename = "ctf";
                if(maxclients == 1)
index 2a9d5427b639ed8fb8e0f0b14bfdc6782f18d670..e481dc6349018f2b28a539d4d3be7594daac9a11 100644 (file)
@@ -1,7 +1,7 @@
 /*
 *              t_swamp.c
 *              Adds spawnfunc_trigger_swamp and suppoart routines for xonotic 1.2.1+
-*              Author tZork (Jakob MG) 
+*              Author tZork (Jakob MG)
 *              jakob@games43.se
 *              2005 11 29
 */
@@ -20,16 +20,16 @@ void swampslug_think();
 * It works like this: When the plyer enters teh swamp the spawnfunc_trigger_swamp
 * attaches a new "swampslug" to the player. As long as the plyer is inside
 * the swamp the swamp gives the slug new health. But the slug slowly kills itself
-* so when the player goes outside the swamp, it dies and releases the player from the 
-* swamps curses (dmg/slowdown) 
-* 
+* so when the player goes outside the swamp, it dies and releases the player from the
+* swamps curses (dmg/slowdown)
+*
 * I do it this way becuz there is no "untouch" event.
 *
-* --NOTE-- 
+* --NOTE--
 * THE ACCTUAL slowdown is done in cl_physics.c on line 57-60
 * --NOTE--
 */
-void swampslug_think(void) 
+void swampslug_think(void)
 {
        //Slowly kill the slug
        self.health = self.health - 1;
@@ -41,7 +41,7 @@ void swampslug_think(void)
                //centerprint(self.owner,"Killing slug...\n");
                return;
        }
-       
+
        // Slug still alive, so we are still in the swamp
        // Or we have exited it very recently.
        // Do the damage and renew the timer.
@@ -50,7 +50,7 @@ void swampslug_think(void)
        self.nextthink = time + self.swamp_interval;
 }
 
-void swamp_touch(void) 
+void swamp_touch(void)
 {
        // If whatever thats touching the swamp is not a player
        // or if its a dead player, just dont care abt it.
@@ -82,20 +82,20 @@ void swamp_touch(void)
 }
 
 /*QUAKED spawnfunc_trigger_swamp (.5 .5 .5) ?
-Players gettin into the swamp will 
+Players gettin into the swamp will
 get slowd down and damaged
 */
 void spawnfunc_trigger_swamp(void)
 {
        // Init stuff
        EXACTTRIGGER_INIT;
-       self.touch = swamp_touch;       
+       self.touch = swamp_touch;
 
        // Setup default keys, if missing
-       if(self.dmg <= 0) 
+       if(self.dmg <= 0)
                self.dmg = 5;
-       if(self.swamp_interval <= 0) 
+       if(self.swamp_interval <= 0)
                self.swamp_interval = 1;
-       if(self.swamp_slowdown <= 0) 
+       if(self.swamp_slowdown <= 0)
                self.swamp_slowdown = 0.5;
 }
index d61911ecdfd2e9e75033b69887c8c69eaf4b73c6..8f15a4f820c428c976ca17d5871ce178d99b9b6e 100644 (file)
@@ -25,7 +25,7 @@ void trigger_teleport_use()
                if(head != player) \
                        if(head.takedamage) \
                                if(boxesoverlap(deathmin, deathmax, head.absmin, head.absmax))
-       
+
 
 float check_tdeath(entity player, vector org, vector telefragmin, vector telefragmax)
 {
@@ -33,7 +33,7 @@ float check_tdeath(entity player, vector org, vector telefragmin, vector telefra
        {
                TDEATHLOOP(org)
                {
-                       if not(teamplay && autocvar_g_telefrags_teamplay && head.team == player.team)
+                       if (!(teamplay && autocvar_g_telefrags_teamplay && head.team == player.team))
                                if(IS_PLAYER(head))
                                        if(head.health >= 1)
                                                return 1;
@@ -48,7 +48,7 @@ void tdeath(entity player, entity teleporter, entity telefragger, vector telefra
        {
                if (IS_PLAYER(player) && player.health >= 1)
                {
-                       if not(teamplay && autocvar_g_telefrags_teamplay && head.team == player.team)
+                       if (!(teamplay && autocvar_g_telefrags_teamplay && head.team == player.team))
                        {
                                if(IS_PLAYER(head))
                                        if(head.health >= 1)
@@ -153,14 +153,14 @@ entity Simple_TeleportPlayer(entity teleporter, entity player)
        vector locout;
        entity e;
        float p;
-       
+
        // Find the output teleporter
        if(teleporter.enemy)
        {
                e = teleporter.enemy;
        }
        else
-       { 
+       {
                RandomSelection_Init();
                for(e = world; (e = find(e, targetname, teleporter.target)); )
                {
@@ -177,13 +177,13 @@ entity Simple_TeleportPlayer(entity teleporter, entity player)
        }
 
        if(!e) { sprint(player, "Teleport destination vanished. Sorry... please complain to the mapper.\n"); }
-       
+
        makevectors(e.mangle);
 
        if(e.speed)
                if(vlen(player.velocity) > e.speed)
                        player.velocity = normalize(player.velocity) * max(0, e.speed);
-                       
+
        if(autocvar_g_teleport_maxspeed)
                if(vlen(player.velocity) > autocvar_g_teleport_maxspeed)
                        player.velocity = normalize(player.velocity) * max(0, autocvar_g_teleport_maxspeed);
@@ -201,17 +201,17 @@ void Teleport_Touch (void)
 
        if (self.active != ACTIVE_ACTIVE)
                return;
-       
-       if not(other.teleportable)
+
+       if (!other.teleportable)
                return;
-    
+
        if(other.vehicle)
        if(!other.vehicle.teleportable)
                return;
-                       
+
        if(other.turrcaps_flags & TFL_TURRCAPS_ISTURRET)
                return;
-        
+
        if(other.deadflag != DEAD_NO)
                return;
 
@@ -223,14 +223,14 @@ void Teleport_Touch (void)
 
        if(IS_PLAYER(other))
                RemoveGrapplingHook(other);
-               
+
        entity e;
        e = Simple_TeleportPlayer(self, other);
 
        activator = other;
        s = self.target; self.target = string_null;
        SUB_UseTargets();
-       if not(self.target) self.target = s;
+       if (!self.target) self.target = s;
 
        oldself = self;
        self = e;
@@ -310,16 +310,16 @@ entity Teleport_Find(vector mi, vector ma)
        return world;
 }
 
-entity teleport_first; 
+entity teleport_first;
 .entity teleport_next;
 void spawnfunc_trigger_teleport (void)
 {
        self.angles = '0 0 0';
 
        EXACTTRIGGER_INIT;
-       
-       self.active = ACTIVE_ACTIVE;    
-       
+
+       self.active = ACTIVE_ACTIVE;
+
        self.use = trigger_teleport_use;
 
        // this must be called to spawn the teleport waypoints for bots
@@ -330,7 +330,7 @@ void spawnfunc_trigger_teleport (void)
                objerror ("Teleporter with no target");
                return;
        }
-       
+
        self.teleport_next = teleport_first;
        teleport_first = self;
 }
index ebb89aa5c9c0bf274742139a99d56f3ecf2eacb2..4da6b13bbbb948060ec40541307eeffddf84be95 100644 (file)
@@ -256,7 +256,7 @@ float target_spawn_cancreate()
        ++c; // increase count to not include MYSELF
        for(e = world; (e = findfloat(e, target_spawn_id, self.target_spawn_id)); --c)
                ;
-       
+
        // if c now is 0, we have AT LEAST the given count (maybe more), so don't spawn any more
        if(c == 0)
                return 0;
index 81c877db902fd38fda510aeb97525e962b6226fa..5185b2c611a639093d1f343911182e98d8009cf3 100644 (file)
@@ -56,7 +56,7 @@ void InitGameplayMode()
        teamplay = 0;
        serverflags &= ~SERVERFLAG_TEAMPLAY;
 
-       if not(cvar_value_issafe(world.fog))
+       if (!cvar_value_issafe(world.fog))
        {
                print("The current map contains a potentially harmful fog setting, ignored\n");
                world.fog = string_null;
@@ -115,13 +115,6 @@ void InitGameplayMode()
                MUTATOR_ADD(gamemode_lms);
        }
 
-       if(g_arena)
-       {
-               fraglimit_override = autocvar_g_arena_point_limit;
-               leadlimit_override = autocvar_g_arena_point_leadlimit;
-               MUTATOR_ADD(gamemode_arena);
-       }
-
        if(g_ca)
        {
                ActivateTeamplay();
@@ -192,7 +185,7 @@ void InitGameplayMode()
         have_team_spawns = -1; // request team spawns
            MUTATOR_ADD(gamemode_nexball);
        }
-        
+
        if(g_keepaway)
        {
                MUTATOR_ADD(gamemode_keepaway);
@@ -600,7 +593,7 @@ float TeamSmallerEqThanTeam(float ta, float tb, entity e)
                        cb -= cbb * 0.999;
                }
        }
-       
+
        // keep teams alive (teams of size 0 always count as smaller, ignoring score)
        if(ca < 1)
                if(cb >= 1)
@@ -671,7 +664,7 @@ float FindSmallestTeam(entity pl, float ignore_pl)
                GetTeamCounts(world);
 
        RandomSelection_Init();
-       
+
        t = 1;
        if(TeamSmallerEqThanTeam(2, t, pl))
                t = 2;
index 675b5de0db30283236ab1532de8cbf032af153ca..c3dbe55a4848d9d5d0505192a77cfab3057cd77c 100644 (file)
@@ -25,7 +25,7 @@ vector turret_stdproc_aim_generic()
 
     // Lead?
     if (self.aim_flags & TFL_AIM_LEAD)
-    {          
+    {
                if (self.aim_flags & TFL_AIM_SHOTTIMECOMPENSATE)       // Need to conpensate for shot traveltime
                {
                        // FIXME: this cant be the best way to do this..
@@ -43,7 +43,7 @@ vector turret_stdproc_aim_generic()
                        prep = pre_pos + (self.enemy.velocity * (impact_time + mintime));
 
                        if(self.aim_flags & TFL_AIM_ZPREDICT)
-                       if not(self.enemy.flags & FL_ONGROUND)
+                       if (!(self.enemy.flags & FL_ONGROUND))
                        if(self.enemy.movetype == MOVETYPE_WALK || self.enemy.movetype == MOVETYPE_TOSS || self.enemy.movetype == MOVETYPE_BOUNCE)
                        {
                                float vz;
@@ -60,7 +60,7 @@ vector turret_stdproc_aim_generic()
                else
                        pre_pos = pre_pos + self.enemy.velocity * mintime;
     }
-    
+
     if(self.aim_flags & TFL_AIM_GROUNDGROUND)
     {
         //tracebox(pre_pos + '0 0 32',self.enemy.mins,self.enemy.maxs,pre_pos -'0 0 64',MOVE_WORLDONLY,self.enemy);
index 4145a6ea34d98addf774368c5d31406ede54d1cb..a8feaebc3ba81ff49823e705f0a3a750e8defc72 100644 (file)
@@ -40,7 +40,7 @@ void turret_stdproc_die()
         self.SendFlags      |= TNSF_STATUS;
         self.nextthink      = time + 0.2;
         self.think          = turret_hide;
-        
+
         if (self.turret_diehook)
             self.turret_diehook();
     }
@@ -56,7 +56,7 @@ void turret_stdproc_respawn()
     self.deadflag           = DEAD_NO;
     self.effects            = EF_LOWPRECISION;
     self.solid              = SOLID_BBOX;
-    
+
     self.takedamage                    = DAMAGE_AIM;
     self.event_damage           = turret_stdproc_damage;
 
@@ -71,7 +71,7 @@ void turret_stdproc_respawn()
 
     self.nextthink  = time + self.ticrate;
     self.think      = turret_think;
-    
+
     self.SendFlags  = TNSF_FULL_UPDATE;
 
     if (self.turret_respawnhook)
@@ -88,7 +88,7 @@ void turret_stdproc_damage (entity inflictor, entity attacker, float damage, flo
         return;
 
     // Inactive turrets take no damage. (hm..)
-    if not (self.active)
+    if (!self.active)
         return;
 
     if (teamplay)
@@ -111,13 +111,13 @@ void turret_stdproc_damage (entity inflictor, entity attacker, float damage, flo
     {
         self.tur_head.angles_x = self.tur_head.angles_x + (-0.5 + random()) * damage;
         self.tur_head.angles_y = self.tur_head.angles_y + (-0.5 + random()) * damage;
-        
+
         self.SendFlags  |= TNSF_ANG;
     }
 
     if (self.turrcaps_flags & TFL_TURRCAPS_MOVE)
         self.velocity = self.velocity + vforce;
-    
+
     if (self.health <= 0)
     {
         self.event_damage           = func_null;
@@ -126,6 +126,6 @@ void turret_stdproc_damage (entity inflictor, entity attacker, float damage, flo
         self.nextthink = time;
         self.think = turret_stdproc_die;
     }
-    
+
     self.SendFlags  |= TNSF_STATUS;
 }
index 5a77b17d91e8c60eed40053787ccba55c8424feb..b4ad709b4d0b547278fd74c4f20fff29a0d64b62 100644 (file)
@@ -1,49 +1,49 @@
 #define cvar_base "g_turrets_unit_"
 .float clientframe;
 void turrets_setframe(float _frame, float client_only)
-{        
+{
     if((client_only ? self.clientframe : self.frame ) != _frame)
     {
         self.SendFlags |= TNSF_ANIM;
         self.anim_start_time = time;
     }
-    
+
      if(client_only)
         self.clientframe = _frame;
     else
         self.frame = _frame;
-   
+
 }
 
 float turret_send(entity to, float sf)
 {
-       
-       WriteByte(MSG_ENTITY, ENT_CLIENT_TURRET);    
+
+       WriteByte(MSG_ENTITY, ENT_CLIENT_TURRET);
        WriteByte(MSG_ENTITY, sf);
        if(sf & TNSF_SETUP)
        {
            WriteByte(MSG_ENTITY, self.turret_type);
-           
+
            WriteCoord(MSG_ENTITY, self.origin_x);
            WriteCoord(MSG_ENTITY, self.origin_y);
            WriteCoord(MSG_ENTITY, self.origin_z);
-           
+
            WriteAngle(MSG_ENTITY, self.angles_x);
            WriteAngle(MSG_ENTITY, self.angles_y);
     }
-    
+
     if(sf & TNSF_ANG)
     {
         WriteShort(MSG_ENTITY, rint(self.tur_head.angles_x));
         WriteShort(MSG_ENTITY, rint(self.tur_head.angles_y));
     }
-    
+
     if(sf & TNSF_AVEL)
-    {        
+    {
         WriteShort(MSG_ENTITY, rint(self.tur_head.avelocity_x));
         WriteShort(MSG_ENTITY, rint(self.tur_head.avelocity_y));
     }
-    
+
     if(sf & TNSF_MOVE)
     {
         WriteShort(MSG_ENTITY, rint(self.origin_x));
@@ -52,27 +52,27 @@ float turret_send(entity to, float sf)
 
         WriteShort(MSG_ENTITY, rint(self.velocity_x));
         WriteShort(MSG_ENTITY, rint(self.velocity_y));
-        WriteShort(MSG_ENTITY, rint(self.velocity_z));        
-        
-        WriteShort(MSG_ENTITY, rint(self.angles_y));        
+        WriteShort(MSG_ENTITY, rint(self.velocity_z));
+
+        WriteShort(MSG_ENTITY, rint(self.angles_y));
     }
-    
+
     if(sf & TNSF_ANIM)
     {
         WriteCoord(MSG_ENTITY, self.anim_start_time);
         WriteByte(MSG_ENTITY, self.frame);
     }
-    
+
     if(sf & TNSF_STATUS)
     {
         WriteByte(MSG_ENTITY, self.team);
-        
+
         if(self.health <= 0)
             WriteByte(MSG_ENTITY, 0);
         else
             WriteByte(MSG_ENTITY, ceil((self.health / self.tur_health) * 255));
     }
-    
+
        return TRUE;
 }
 
@@ -83,13 +83,13 @@ void load_unit_settings(entity ent, string unitname, float is_reload)
     if (ent == world)
         return;
 
-    if not (ent.turret_scale_damage)    ent.turret_scale_damage  = 1;
-    if not (ent.turret_scale_range)     ent.turret_scale_range   = 1;
-    if not (ent.turret_scale_refire)    ent.turret_scale_refire  = 1;
-    if not (ent.turret_scale_ammo)      ent.turret_scale_ammo    = 1;
-    if not (ent.turret_scale_aim)       ent.turret_scale_aim     = 1;
-    if not (ent.turret_scale_health)    ent.turret_scale_health  = 1;
-    if not (ent.turret_scale_respawn)   ent.turret_scale_respawn = 1;
+    if (!ent.turret_scale_damage)    ent.turret_scale_damage  = 1;
+    if (!ent.turret_scale_range)     ent.turret_scale_range   = 1;
+    if (!ent.turret_scale_refire)    ent.turret_scale_refire  = 1;
+    if (!ent.turret_scale_ammo)      ent.turret_scale_ammo    = 1;
+    if (!ent.turret_scale_aim)       ent.turret_scale_aim     = 1;
+    if (!ent.turret_scale_health)    ent.turret_scale_health  = 1;
+    if (!ent.turret_scale_respawn)   ent.turret_scale_respawn = 1;
 
     sbase = strcat(cvar_base,unitname);
     if (is_reload)
@@ -143,9 +143,9 @@ void load_unit_settings(entity ent, string unitname, float is_reload)
 
 void turret_projectile_explode()
 {
-    
+
     self.takedamage = DAMAGE_NO;
-    self.event_damage = func_null;    
+    self.event_damage = func_null;
 #ifdef TURRET_DEBUG
     float d;
     d = RadiusDamage (self, self.owner, self.owner.shot_dmg, 0, self.owner.shot_radius, self, self.owner.shot_force, self.totalfrags, world);
@@ -183,12 +183,12 @@ entity turret_projectile(string _snd, float _size, float _health, float _death,
     proj.owner           = self;
     proj.realowner       = self;
     proj.bot_dodge       = TRUE;
-    proj.bot_dodgerating = self.shot_dmg;    
+    proj.bot_dodgerating = self.shot_dmg;
     proj.think           = turret_projectile_explode;
     proj.touch           = turret_projectile_touch;
-    proj.nextthink       = time + 9;    
+    proj.nextthink       = time + 9;
     proj.movetype        = MOVETYPE_FLYMISSILE;
-    proj.velocity        = normalize(self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed;    
+    proj.velocity        = normalize(self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed;
     proj.flags           = FL_PROJECTILE;
     proj.enemy           = self.enemy;
     proj.totalfrags      = _death;
@@ -203,7 +203,7 @@ entity turret_projectile(string _snd, float _size, float _health, float _death,
         proj.flags |= FL_NOTARGET;
 
     CSQCProjectile(proj, _cli_anim, _proj_type, _cull);
-    
+
     return proj;
 }
 
@@ -241,8 +241,8 @@ void turret_do_updates(entity t_turret)
     }
     else*/
         tracebox(self.tur_shotorg, '-1 -1 -1','1 1 1', self.tur_shotorg + (self.tur_shotdir_updated * self.tur_dist_aimpos), MOVE_NORMAL,self);
-       
-       self.tur_dist_impact_to_aimpos = vlen(trace_endpos - self.tur_aimpos) - (vlen(self.enemy.maxs - self.enemy.mins) * 0.5);                
+
+       self.tur_dist_impact_to_aimpos = vlen(trace_endpos - self.tur_aimpos) - (vlen(self.enemy.maxs - self.enemy.mins) * 0.5);
        self.tur_impactent             = trace_ent;
        self.tur_impacttime            = vlen(self.tur_shotorg - trace_endpos) / self.shot_speed;
 
@@ -328,11 +328,11 @@ void turret_stdproc_track()
     vector v1, v2;
     v1 = self.tur_head.angles;
     v2 = self.tur_head.avelocity;
-    
+
     if (self.track_flags == TFL_TRACK_NO)
         return;
 
-    if not (self.active)
+    if (!self.active)
         target_angle = self.idle_aim - ('1 0 0' * self.aim_maxpitch);
     else if (self.enemy == world)
     {
@@ -343,17 +343,17 @@ void turret_stdproc_track()
     }
     else
     {
-        target_angle = vectoangles(normalize(self.tur_aimpos - self.tur_shotorg)); 
+        target_angle = vectoangles(normalize(self.tur_aimpos - self.tur_shotorg));
     }
-    
+
     self.tur_head.angles_x = anglemods(self.tur_head.angles_x);
     self.tur_head.angles_y = anglemods(self.tur_head.angles_y);
 
     // Find the diffrence between where we currently aim and where we want to aim
     //move_angle = target_angle - (self.angles + self.tur_head.angles);
     //move_angle = shortangle_vxy(move_angle,(self.angles + self.tur_head.angles));
-    
-    move_angle = AnglesTransform_ToAngles(AnglesTransform_LeftDivide(AnglesTransform_FromAngles(self.angles), AnglesTransform_FromAngles(target_angle))) - self.tur_head.angles; 
+
+    move_angle = AnglesTransform_ToAngles(AnglesTransform_LeftDivide(AnglesTransform_FromAngles(self.angles), AnglesTransform_FromAngles(target_angle))) - self.tur_head.angles;
     move_angle = shortangle_vxy(move_angle, self.tur_head.angles);
 
     switch(self.track_type)
@@ -379,10 +379,10 @@ void turret_stdproc_track()
                 if(self.tur_head.angles_y  < -self.aim_maxrot)
                     self.tur_head.angles_y = self.aim_maxrot;
             }
-            
+
             // CSQC
             self.SendFlags  |= TNSF_ANG;
-            
+
             return;
 
         case TFL_TRACKTYPE_FLUIDINERTIA:
@@ -408,15 +408,15 @@ void turret_stdproc_track()
         {
             self.tur_head.avelocity_x = 0;
             self.tur_head.angles_x = self.aim_maxpitch;
-            
+
             self.SendFlags  |= TNSF_ANG;
         }
-        
+
         if((self.tur_head.angles_x + self.tur_head.avelocity_x * self.ticrate) < -self.aim_maxpitch)
         {
             self.tur_head.avelocity_x = 0;
             self.tur_head.angles_x = -self.aim_maxpitch;
-                        
+
             self.SendFlags  |= TNSF_ANG;
         }
     }
@@ -430,7 +430,7 @@ void turret_stdproc_track()
         {
             self.tur_head.avelocity_y = 0;
             self.tur_head.angles_y = self.aim_maxrot;
-            
+
             self.SendFlags  |= TNSF_ANG;
         }
 
@@ -438,20 +438,20 @@ void turret_stdproc_track()
         {
             self.tur_head.avelocity_y = 0;
             self.tur_head.angles_y = -self.aim_maxrot;
-            
+
             self.SendFlags  |= TNSF_ANG;
         }
     }
-        
+
     self.SendFlags  |= TNSF_AVEL;
-    
+
     // Force a angle update every 10'th frame
     self.turret_framecounter += 1;
     if(self.turret_framecounter >= 10)
-    {        
+    {
         self.SendFlags |= TNSF_ANG;
         self.turret_framecounter = 0;
-    }            
+    }
 }
 
 
@@ -480,7 +480,7 @@ void turret_stdproc_track()
 float turret_stdproc_firecheck()
 {
     // This one just dont care =)
-    if (self.firecheck_flags & TFL_FIRECHECK_NO) 
+    if (self.firecheck_flags & TFL_FIRECHECK_NO)
         return 1;
 
     if (self.enemy == world)
@@ -494,7 +494,7 @@ float turret_stdproc_firecheck()
     if (self.shoot_flags & TFL_SHOOT_VOLLYALWAYS)
         if (self.volly_counter != self.shot_volly)
                        if(self.ammo >= self.shot_dmg)
-                               return 1;               
+                               return 1;
 
     // Lack of zombies makes shooting dead things unnecessary :P
     if (self.firecheck_flags & TFL_FIRECHECK_DEAD)
@@ -510,22 +510,22 @@ float turret_stdproc_firecheck()
     if (self.firecheck_flags & TFL_FIRECHECK_OTHER_AMMO)
         if (self.enemy.ammo >= self.enemy.ammo_max)
             return 0;
-       
+
        // Target of opertunity?
        if(turret_validate_target(self, self.tur_impactent, self.target_validate_flags) > 0)
        {
                self.enemy = self.tur_impactent;
                return 1;
-       }                               
+       }
 
     if (self.firecheck_flags & TFL_FIRECHECK_DISTANCES)
     {
         // To close?
         if (self.tur_dist_aimpos < self.target_range_min)
-                       if(turret_validate_target(self, self.tur_impactent, self.target_validate_flags) > 0)                    
+                       if(turret_validate_target(self, self.tur_impactent, self.target_validate_flags) > 0)
                                return 1; // Target of opertunity?
-                       else 
-                               return 0;                               
+                       else
+                               return 0;
     }
 
     // Try to avoid FF?
@@ -571,17 +571,17 @@ float turret_stdproc_firecheck()
 float turret_validate_target(entity e_turret, entity e_target, float validate_flags)
 {
     vector v_tmp;
-        
+
     //if(!validate_flags & TFL_TARGETSELECT_NOBUILTIN)
     //    return -0.5;
 
     if(e_target.owner == e_turret)
         return -0.5;
 
-    if not(checkpvs(e_target.origin, e_turret))
-        return -1;        
+    if (!checkpvs(e_target.origin, e_turret))
+        return -1;
 
-    if not (e_target)
+    if (!e_target)
         return -2;
 
        if(g_onslaught)
@@ -596,7 +596,7 @@ float turret_validate_target(entity e_turret, entity e_target, float validate_fl
         return -5;
 
     // Cant touch this
-    if(e_target.vehicle_flags & VHF_ISVEHICLE)    
+    if(e_target.vehicle_flags & VHF_ISVEHICLE)
     {
         if (e_target.vehicle_health <= 0)
             return -6;
@@ -607,7 +607,7 @@ float turret_validate_target(entity e_turret, entity e_target, float validate_fl
     // player
     if (IS_CLIENT(e_target))
     {
-        if not (validate_flags & TFL_TARGETSELECT_PLAYERS)
+        if (!(validate_flags & TFL_TARGETSELECT_PLAYERS))
             return -7;
 
         if (e_target.deadflag != DEAD_NO)
@@ -622,11 +622,11 @@ float turret_validate_target(entity e_turret, entity e_target, float validate_fl
 
     // Missile
     if (e_target.flags & FL_PROJECTILE)
-        if not (validate_flags & TFL_TARGETSELECT_MISSILES)
+        if (!(validate_flags & TFL_TARGETSELECT_MISSILES))
             return -10;
 
     if (validate_flags & TFL_TARGETSELECT_MISSILESONLY)
-        if not (e_target.flags & FL_PROJECTILE)
+        if (!(e_target.flags & FL_PROJECTILE))
             return -10.5;
 
     // Team check
@@ -729,7 +729,7 @@ entity turret_select_target()
     e = findradius(self.origin, self.target_range);
 
     // Nothing to aim at?
-    if (!e) 
+    if (!e)
                return world;
 
     while (e)
@@ -759,7 +759,7 @@ void turret_think()
     entity e;
 
     self.nextthink = time + self.ticrate;
-    
+
     // ONS uses somewhat backwards linking.
     if (teamplay)
     {
@@ -785,13 +785,13 @@ void turret_think()
 #endif
 
     // Handle ammo
-    if not (self.spawnflags & TSF_NO_AMMO_REGEN)
+    if (!(self.spawnflags & TSF_NO_AMMO_REGEN))
     if (self.ammo < self.ammo_max)
         self.ammo = min(self.ammo + self.ammo_recharge, self.ammo_max);
-                       
+
     // Inactive turrets needs to run the think loop,
     // So they can handle animation and wake up if need be.
-    if not (self.active)
+    if (!self.active)
     {
         turret_stdproc_track();
         return;
@@ -827,11 +827,11 @@ void turret_think()
         // This one is doing something.. oddball. assume its handles what needs to be handled.
 
         // Predict?
-        if not(self.aim_flags & TFL_AIM_NO)
+        if (!(self.aim_flags & TFL_AIM_NO))
             self.tur_aimpos = turret_stdproc_aim_generic();
 
         // Turn & pitch?
-        if not(self.track_flags & TFL_TRACK_NO)
+        if (!(self.track_flags & TFL_TRACK_NO))
             turret_stdproc_track();
 
         turret_do_updates(self);
@@ -847,11 +847,11 @@ void turret_think()
             if(self.volly_counter != self.shot_volly)
             {
                 // Predict or whatnot
-                if not(self.aim_flags & TFL_AIM_NO)
+                if (!(self.aim_flags & TFL_AIM_NO))
                     self.tur_aimpos = turret_stdproc_aim_generic();
 
                 // Turn & pitch
-                if not(self.track_flags & TFL_TRACK_NO)
+                if (!(self.track_flags & TFL_TRACK_NO))
                     turret_stdproc_track();
 
                 turret_do_updates(self);
@@ -896,7 +896,7 @@ void turret_think()
         if (self.enemy == world)
         {
             // Turn & pitch
-            if not(self.track_flags & TFL_TRACK_NO)
+            if (!(self.track_flags & TFL_TRACK_NO))
                 turret_stdproc_track();
 
             // do any per-turret stuff
@@ -910,11 +910,11 @@ void turret_think()
             self.lip = time + autocvar_g_turrets_aimidle_delay; // Keep track of the last time we had a target.
 
         // Predict?
-        if not(self.aim_flags & TFL_AIM_NO)
+        if (!(self.aim_flags & TFL_AIM_NO))
             self.tur_aimpos = turret_stdproc_aim_generic();
 
         // Turn & pitch?
-        if not(self.track_flags & TFL_TRACK_NO)
+        if (!(self.track_flags & TFL_TRACK_NO))
             turret_stdproc_track();
 
         turret_do_updates(self);
@@ -1021,24 +1021,24 @@ float turret_stdproc_init (string cvar_base_name, string base, string head, floa
     // Are turrets allowed?
     if (autocvar_g_turrets == 0)
         return 0;
-    
+
     if(_turret_type < 1 || _turret_type > TID_LAST)
     {
         dprint("Invalid / Unkown turret type\"", ftos(_turret_type), "\", aborting!\n");
         return 0;
-    }    
+    }
     self.turret_type = _turret_type;
-    
+
     e = find(world, classname, "turret_manager");
-    if not (e)
+    if (!e)
     {
         e = spawn();
         e.classname = "turret_manager";
         e.think = turrets_manager_think;
         e.nextthink = time + 2;
     }
-    
-    if not (self.spawnflags & TSF_SUSPENDED)
+
+    if (!(self.spawnflags & TSF_SUSPENDED))
         builtin_droptofloor(); // why can't we use regular droptofloor here?
 
     // Terrainbase spawnflag. This puts a enlongated model
@@ -1058,9 +1058,9 @@ float turret_stdproc_init (string cvar_base_name, string base, string head, floa
     load_unit_settings(self, self.cvar_basename, 0);
 
     self.effects = EF_NODRAW;
-    
+
     // Handle turret teams.
-    if not (teamplay)
+    if (!teamplay)
                self.team = MAX_SHOT_DISTANCE; // Group all turrets into the same team, so they dont kill eachother.
        else if(g_onslaught && self.targetname)
        {
@@ -1081,111 +1081,111 @@ float turret_stdproc_init (string cvar_base_name, string base, string head, floa
     * if it hits a glitch in my logic :P so try to set as mutch
     * as possible beforehand.
     */
-    if not(self.ticrate)
-    {        
+    if (!self.ticrate)
+    {
         if (self.turrcaps_flags & TFL_TURRCAPS_SUPPORT)
             self.ticrate = 0.2;     // Support units generaly dont need to have a high speed ai-loop
         else
             self.ticrate = 0.1;     // 10 fps for normal turrets
     }
-    
+
     self.ticrate = bound(sys_frametime, self.ticrate, 60);  // keep it sane
 
 // General stuff
     if (self.netname == "")
         self.netname = self.classname;
 
-    if not (self.respawntime)
+    if (!self.respawntime)
         self.respawntime = 60;
     self.respawntime = max(-1, self.respawntime);
 
-    if not (self.health)
+    if (!self.health)
         self.health = 1000;
     self.tur_health = max(1, self.health);
 
-    if not (self.turrcaps_flags)
+    if (!self.turrcaps_flags)
         self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_MEDPROJ | TFL_TURRCAPS_PLAYERKILL;
 
-    if not (self.damage_flags)
+    if (!self.damage_flags)
         self.damage_flags = TFL_DMG_YES | TFL_DMG_RETALIATE | TFL_DMG_AIMSHAKE;
 
 // Shot stuff.
-    if not (self.shot_refire)
+    if (!self.shot_refire)
         self.shot_refire = 1;
     self.shot_refire = bound(0.01, self.shot_refire, 9999);
 
-    if not (self.shot_dmg)
+    if (!self.shot_dmg)
         self.shot_dmg  = self.shot_refire * 50;
     self.shot_dmg = max(1, self.shot_dmg);
 
-    if not (self.shot_radius)
+    if (!self.shot_radius)
         self.shot_radius = self.shot_dmg * 0.5;
     self.shot_radius = max(1, self.shot_radius);
 
-    if not (self.shot_speed)
+    if (!self.shot_speed)
         self.shot_speed = 2500;
     self.shot_speed = max(1, self.shot_speed);
 
-    if not (self.shot_spread)
+    if (!self.shot_spread)
         self.shot_spread = 0.0125;
     self.shot_spread = bound(0.0001, self.shot_spread, 500);
 
-    if not (self.shot_force)
+    if (!self.shot_force)
         self.shot_force = self.shot_dmg * 0.5 + self.shot_radius * 0.5;
     self.shot_force = bound(0.001, self.shot_force, 5000);
 
-    if not (self.shot_volly)
+    if (!self.shot_volly)
         self.shot_volly = 1;
     self.shot_volly = bound(1, self.shot_volly, floor(self.ammo_max / self.shot_dmg));
 
-    if not (self.shot_volly_refire)
+    if (!self.shot_volly_refire)
         self.shot_volly_refire = self.shot_refire * self.shot_volly;
     self.shot_volly_refire = bound(self.shot_refire, self.shot_volly_refire, 60);
 
-    if not (self.firecheck_flags)
+    if (!self.firecheck_flags)
         self.firecheck_flags = TFL_FIRECHECK_DEAD | TFL_FIRECHECK_DISTANCES |
                                TFL_FIRECHECK_LOS | TFL_FIRECHECK_AIMDIST | TFL_FIRECHECK_TEAMCECK |
                                TFL_FIRECHECK_OWM_AMMO | TFL_FIRECHECK_REFIRE;
 
 // Range stuff.
-    if not (self.target_range)
+    if (!self.target_range)
         self.target_range = self.shot_speed * 0.5;
     self.target_range = bound(0, self.target_range, MAX_SHOT_DISTANCE);
 
-    if not (self.target_range_min)
+    if (!self.target_range_min)
         self.target_range_min = self.shot_radius * 2;
     self.target_range_min = bound(0, self.target_range_min, MAX_SHOT_DISTANCE);
 
-    if not (self.target_range_optimal)
+    if (!self.target_range_optimal)
         self.target_range_optimal = self.target_range * 0.5;
     self.target_range_optimal = bound(0, self.target_range_optimal, MAX_SHOT_DISTANCE);
 
 
 // Aim stuff.
-    if not (self.aim_maxrot)
+    if (!self.aim_maxrot)
         self.aim_maxrot = 90;
     self.aim_maxrot = bound(0, self.aim_maxrot, 360);
 
-    if not (self.aim_maxpitch)
+    if (!self.aim_maxpitch)
         self.aim_maxpitch = 20;
     self.aim_maxpitch = bound(0, self.aim_maxpitch, 90);
 
-    if not (self.aim_speed)
+    if (!self.aim_speed)
         self.aim_speed = 36;
     self.aim_speed  = bound(0.1, self.aim_speed, 1000);
 
-    if not (self.aim_firetolerance_dist)
+    if (!self.aim_firetolerance_dist)
         self.aim_firetolerance_dist  = 5 + (self.shot_radius * 2);
     self.aim_firetolerance_dist = bound(0.1, self.aim_firetolerance_dist, MAX_SHOT_DISTANCE);
 
-    if not (self.aim_flags)
+    if (!self.aim_flags)
     {
         self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE;
         if(self.turrcaps_flags & TFL_TURRCAPS_RADIUSDMG)
             self.aim_flags |= TFL_AIM_GROUNDGROUND;
     }
 
-    if not (self.track_type)
+    if (!self.track_type)
         self.track_type = TFL_TRACKTYPE_STEPMOTOR;
 
     if (self.track_type != TFL_TRACKTYPE_STEPMOTOR)
@@ -1193,17 +1193,17 @@ float turret_stdproc_init (string cvar_base_name, string base, string head, floa
         // Fluid / Ineria mode. Looks mutch nicer.
         // Can reduce aim preformance alot, needs a bit diffrent aimspeed
 
-        if not (self.aim_speed)
+        if (!self.aim_speed)
             self.aim_speed = 180;
         self.aim_speed = bound(0.1, self.aim_speed, 1000);
 
-        if not (self.track_accel_pitch)
+        if (!self.track_accel_pitch)
             self.track_accel_pitch = 0.5;
 
-        if not (self.track_accel_rot)
+        if (!self.track_accel_rot)
             self.track_accel_rot   = 0.5;
 
-        if not (self.track_blendrate)
+        if (!self.track_blendrate)
             self.track_blendrate   = 0.35;
     }
 
@@ -1212,25 +1212,25 @@ float turret_stdproc_init (string cvar_base_name, string base, string head, floa
 
 
 // Target selection stuff.
-    if not (self.target_select_rangebias)
+    if (!self.target_select_rangebias)
         self.target_select_rangebias = 1;
     self.target_select_rangebias = bound(-10, self.target_select_rangebias, 10);
 
-    if not (self.target_select_samebias)
+    if (!self.target_select_samebias)
         self.target_select_samebias = 1;
     self.target_select_samebias = bound(-10, self.target_select_samebias, 10);
 
-    if not (self.target_select_anglebias)
+    if (!self.target_select_anglebias)
         self.target_select_anglebias = 1;
     self.target_select_anglebias = bound(-10, self.target_select_anglebias, 10);
 
-    if not (self.target_select_missilebias)
+    if (!self.target_select_missilebias)
         self.target_select_missilebias = -10;
 
     self.target_select_missilebias = bound(-10, self.target_select_missilebias, 10);
     self.target_select_playerbias = bound(-10, self.target_select_playerbias, 10);
 
-    if not (self.target_select_flags)
+    if (!self.target_select_flags)
     {
             self.target_select_flags = TFL_TARGETSELECT_LOS | TFL_TARGETSELECT_TEAMCHECK
                                      | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_ANGLELIMITS;
@@ -1247,32 +1247,32 @@ float turret_stdproc_init (string cvar_base_name, string base, string head, floa
     self.target_validate_flags = self.target_select_flags;
 
 // Ammo stuff
-    if not (self.ammo_max)
+    if (!self.ammo_max)
         self.ammo_max = self.shot_dmg * 10;
     self.ammo_max = max(self.shot_dmg, self.ammo_max);
 
-    if not (self.ammo)
+    if (!self.ammo)
         self.ammo = self.shot_dmg * 5;
     self.ammo = bound(0,self.ammo, self.ammo_max);
 
-    if not (self.ammo_recharge)
+    if (!self.ammo_recharge)
         self.ammo_recharge = self.shot_dmg * 0.5;
     self.ammo_recharge = max(0 ,self.ammo_recharge);
 
     // Convert the recharge from X per sec to X per ticrate
     self.ammo_recharge = self.ammo_recharge * self.ticrate;
 
-    if not (self.ammo_flags)
+    if (!self.ammo_flags)
         self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE;
 
 // Damage stuff
     if(self.spawnflags & TSL_NO_RESPAWN)
-        if not (self.damage_flags & TFL_DMG_DEATH_NORESPAWN)
+        if (!(self.damage_flags & TFL_DMG_DEATH_NORESPAWN))
             self.damage_flags |= TFL_DMG_DEATH_NORESPAWN;
 
 // Offsets & origins
     if (!self.tur_shotorg)   self.tur_shotorg = '50 0 50';
-    
+
     if (!self.health)
         self.health = 150;
 
@@ -1306,7 +1306,7 @@ float turret_stdproc_init (string cvar_base_name, string base, string head, floa
     self.tur_head.movetype   = MOVETYPE_NOCLIP;
 
     // Defend mode?
-    if not (self.tur_defend)
+    if (!self.tur_defend)
     if (self.target != "")
     {
         self.tur_defend = find(world, targetname, self.target);
@@ -1327,7 +1327,7 @@ float turret_stdproc_init (string cvar_base_name, string base, string head, floa
     self.turret_firecheckfunc   = turret_stdproc_firecheck;
     self.turret_firefunc        = turret_stdproc_fire;
     self.event_damage           = turret_stdproc_damage;
-    
+
     if (self.turrcaps_flags & TFL_TURRCAPS_SUPPORT)
         self.turret_score_target    = turret_stdproc_targetscore_support;
     else
@@ -1366,11 +1366,11 @@ float turret_stdproc_init (string cvar_base_name, string base, string head, floa
         activator = ee;
         self.use();
     }
-    
+
        turret_link();
-       turret_stdproc_respawn();           
+       turret_stdproc_respawn();
     turret_tag_fire_update();
-    
+
     return 1;
 }
 
index 2e3a006881384a955203649f32eebd961d8f3c62..3fdd5eb1eb040e815a8e6edaa216b2b4d70510f3 100644 (file)
@@ -4,12 +4,12 @@
 float anglemods(float v)
 {
        v = v - 360 * floor(v / 360);
-       
+
        if(v >= 180)
                return v - 360;
        else if(v <= -180)
                return v + 360;
-       else            
+       else
                return v;
 }
 
@@ -78,7 +78,7 @@ vector real_origin(entity ent)
 vector angleofs(entity from, entity to)
 {
     vector v_res;
-    
+
     v_res = normalize(to.origin - from.origin);
     v_res = vectoangles(v_res);
     v_res = v_res - from.angles;
@@ -95,7 +95,7 @@ vector angleofs(entity from, entity to)
 vector angleofs3(vector from, vector from_a, entity to)
 {
     vector v_res;
-    
+
     v_res = normalize(to.origin - from);
     v_res = vectoangles(v_res);
     v_res = v_res - from_a;
@@ -130,7 +130,7 @@ float turret_tag_fire_update_s()
 }
 
 /*
-* Railgun-like beam, but has thickness and suppots slowing of target 
+* Railgun-like beam, but has thickness and suppots slowing of target
 */
 void FireImoBeam (vector start, vector end, vector smin, vector smax,
                   float bforce, float f_dmg, float f_velfactor, float deathtype)
@@ -352,4 +352,4 @@ void paint_target3(vector where, float f_size, vector v_color, float f_time)
     e.colormod = v_color;
     SUB_SetFade(e,time,f_time);
 }
-#endif 
+#endif
index 481b4a285d4d3f5816ab37d01cd24db31652d364..c919601a3352048cfaf256a6d35eb6486fff0d66 100644 (file)
@@ -38,7 +38,7 @@ void turret_checkpoint_think()
 {
     if(self.enemy)
         te_lightning1(self,self.origin, self.enemy.origin);
-    
+
     self.nextthink = time + 0.25;
 }
 #endif
@@ -72,7 +72,7 @@ void spawnfunc_turret_checkpoint()
 {
     setorigin(self,self.origin);
     self.think = turret_checkpoint_init;
-    self.nextthink = time + 0.2;    
+    self.nextthink = time + 0.2;
 }
 
 // Compat.
index 31b984e391767845be993b5faecb3bc4779f1ae5..b98388984ce16a15e1d245f4c6d8bf84afac2400 100644 (file)
@@ -8,12 +8,12 @@ void ewheel_attack()
 {
     float i;
     entity _mis;
-    
+
     for (i = 0; i < 1; ++i)
     {
         turret_do_updates(self);
 
-        _mis = turret_projectile("weapons/lasergun_fire.wav", 1, 0, DEATH_TURRET_EWHEEL, PROJECTILE_LASER, TRUE, TRUE); 
+        _mis = turret_projectile("weapons/lasergun_fire.wav", 1, 0, DEATH_TURRET_EWHEEL, PROJECTILE_LASER, TRUE, TRUE);
         _mis.missile_flags = MIF_SPLASH;
 
         pointparticles(particleeffectnum("laser_muzzleflash"), self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
@@ -55,7 +55,7 @@ void ewheel_move_path()
             self.pathcurrent = self.pathcurrent.path_next;
 
 #else
-    if (vlen(self.origin - self.pathcurrent.origin) < 64)    
+    if (vlen(self.origin - self.pathcurrent.origin) < 64)
         self.pathcurrent = self.pathcurrent.enemy;
 #endif
 
@@ -73,7 +73,7 @@ void  ewheel_move_enemy()
 {
 
     float newframe;
-    
+
     self.steerto = steerlib_arrive(self.enemy.origin,self.target_range_optimal);
 
     //self.steerto = steerlib_standoff(self.enemy.origin,self.target_range_optimal);
@@ -109,9 +109,9 @@ void  ewheel_move_enemy()
         newframe = ewheel_amin_stop;
         movelib_beak_simple(autocvar_g_turrets_unit_ewheel_speed_stop);
     }
-    
+
     turrets_setframe(newframe , FALSE);
-    
+
     /*if(self.frame != newframe)
     {
         self.frame = newframe;
@@ -164,7 +164,7 @@ void ewheel_postthink()
 
 
     self.velocity_z = vz;
-    
+
     if(vlen(self.velocity))
         self.SendFlags |= TNSF_MOVE;
 }
@@ -176,7 +176,7 @@ void ewheel_respawnhook()
     // Respawn is called & first spawn to, to set team. need to make sure we do not move the initial spawn.
     if(self.movetype != MOVETYPE_WALK)
                return;
-               
+
     self.velocity = '0 0 0';
     self.enemy = world;
 
@@ -221,7 +221,7 @@ void turret_ewheel_dinit()
 {
     entity e;
 
-    if (self.netname == "")      
+    if (self.netname == "")
         self.netname     = "eWheel Turret";
 
     if (self.target != "")
@@ -250,7 +250,7 @@ void turret_ewheel_dinit()
         remove(self);
         return;
     }
-    
+
     self.frame = 1;
     self.target_select_flags   = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;
     self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS;
index 7c21ba7abef9e0bdea8535d6b805167fc3f50953..8a01a9752a9f8f4b0cc1d1aad6d7c33a4a29986f 100644 (file)
@@ -7,7 +7,7 @@ void turret_flac_projectile_think_explode()
     if(self.enemy != world)
     if(vlen(self.origin - self.enemy.origin) < self.owner.shot_radius * 3)
         setorigin(self,self.enemy.origin + randomvec() * self.owner.shot_radius);
-            
+
 #ifdef TURRET_DEBUG
     float d;
     d = RadiusDamage (self, self.owner, self.owner.shot_dmg, self.owner.shot_dmg, self.owner.shot_radius, self, self.owner.shot_force, self.totalfrags, world);
@@ -24,28 +24,28 @@ void turret_flac_attack()
     entity proj;
 
     turret_tag_fire_update();
-    
-    proj = turret_projectile("weapons/hagar_fire.wav", 5, 0, DEATH_TURRET_FLAC, PROJECTILE_HAGAR, TRUE, TRUE);    
+
+    proj = turret_projectile("weapons/hagar_fire.wav", 5, 0, DEATH_TURRET_FLAC, PROJECTILE_HAGAR, TRUE, TRUE);
     pointparticles(particleeffectnum("laser_muzzleflash"), self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
     proj.think      = turret_flac_projectile_think_explode;
     proj.nextthink  = time + self.tur_impacttime + (random() * 0.01 - random() * 0.01);
     proj.missile_flags = MIF_SPLASH | MIF_PROXY;
-    
+
     self.tur_head.frame = self.tur_head.frame + 1;
-    if (self.tur_head.frame >= 4) 
+    if (self.tur_head.frame >= 4)
         self.tur_head.frame = 0;
 
 }
 
 void turret_flac_dinit()
 {
-    if (self.netname == "")      
+    if (self.netname == "")
         self.netname  = "FLAC Cannon";
 
     self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_FASTPROJ | TFL_TURRCAPS_MISSILEKILL;
     self.ammo_flags     = TFL_AMMO_ROCKETS | TFL_AMMO_RECHARGE;
     self.aim_flags      = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE;
-    
+
     if (turret_stdproc_init("flac_std", "models/turrets/base.md3", "models/turrets/flac.md3", TID_FLAC) == 0)
     {
         remove(self);
@@ -55,7 +55,7 @@ void turret_flac_dinit()
 
     self.damage_flags |= TFL_DMG_HEADSHAKE;
     self.target_select_flags |= TFL_TARGETSELECT_NOTURRETS | TFL_TARGETSELECT_MISSILESONLY;
-    
+
     // Our fire routine
     self.turret_firefunc  = turret_flac_attack;
 
index 8118b8f234dfa1cb23d2c52d737489679dd47ab1..014fa25f6966bae796c697977686ae898f927aff 100644 (file)
@@ -28,7 +28,7 @@ void turret_fusionreactor_respawnhook()
 **/
 float turret_fusionreactor_firecheck()
 {
-       if (self.attack_finished_single > time) 
+       if (self.attack_finished_single > time)
                return 0;
 
        if (self.enemy.deadflag != DEAD_NO)
@@ -42,16 +42,16 @@ float turret_fusionreactor_firecheck()
 
        if (self.enemy.ammo >= self.enemy.ammo_max)
                return 0;
-       
+
        if (vlen(self.enemy.origin - self.origin) > self.target_range)
-               return 0;                               
-       
+               return 0;
+
        if(self.team != self.enemy.team)
                return 0;
-       
-       if not (self.enemy.ammo_flags & TFL_AMMO_ENERGY)
-               return 0;    
-       
+
+       if (!(self.enemy.ammo_flags & TFL_AMMO_ENERGY))
+               return 0;
+
        return 1;
 }
 
index 75360bcd7142bf7af73518c7226f42ba217bb375..e1b88b06a80af43c0e5aed8364c50cfba10b97a9 100644 (file)
@@ -66,12 +66,12 @@ void turret_hellion_missile_think()
 void turret_hellion_attack()
 {
     entity missile;
-               
+
        if(self.tur_head.frame != 0)
                self.tur_shotorg = gettaginfo(self.tur_head, gettagindex(self.tur_head, "tag_fire"));
        else
                self.tur_shotorg = gettaginfo(self.tur_head, gettagindex(self.tur_head, "tag_fire2"));
-    
+
     missile = turret_projectile("weapons/rocket_fire.wav", 6, 10, DEATH_TURRET_HELLION, PROJECTILE_ROCKET, FALSE, FALSE);
     te_explosion (missile.origin);
     missile.think        = turret_hellion_missile_think;
index c7d7396e8f7ce2d7641d8308baa9c7f914458716..6ce6c72e23c2a3d4ed435c36d37a4d4ccfb53d49 100644 (file)
@@ -258,7 +258,7 @@ void turret_hk_attack()
     missile.cnt              = time + 30;
     missile.ticrate          = max(autocvar_sys_ticrate, 0.05);
     missile.missile_flags = MIF_SPLASH | MIF_PROXY | MIF_GUIDED_AI;
-    
+
     if (self.tur_head.frame == 0)
         self.tur_head.frame = self.tur_head.frame + 1;
 
@@ -289,7 +289,7 @@ float turret_hk_addtarget(entity e_target,entity e_sender)
 
 void turret_hk_dinit()
 {
-    if (self.netname == "")      
+    if (self.netname == "")
         self.netname  = "Hunter-killer turret";
 
     self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_MEDPROJ | TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_RECIVETARGETS;
index 8f18d845a94671a1d23f34e2254dc3ab0c4044f0..eccc37f03f1ad1c8e56db6f2effde36f6b6aada4 100644 (file)
@@ -5,8 +5,7 @@ void turret_machinegun_attack();
 //.float bulletcounter;
 void turret_machinegun_attack()
 {
-    fireBallisticBullet (self.tur_shotorg, self.tur_shotdir_updated,self.shot_spread, self.shot_speed, 5, self.shot_dmg, self.shot_force, DEATH_TURRET_MACHINEGUN, 0, 1, autocvar_g_balance_uzi_bulletconstant);
-    endFireBallisticBullet();
+    fireBullet (self.tur_shotorg, self.tur_shotdir_updated,self.shot_spread, 0, self.shot_dmg, self.shot_force, DEATH_TURRET_MACHINEGUN, 0);
 
     UziFlash();
     setattachment(self.muzzle_flash, self.tur_head, "tag_fire");
@@ -20,9 +19,8 @@ void turret_machinegun_std_init()
     self.ammo_flags = TFL_AMMO_BULLETS | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE;
     self.turrcaps_flags = TFL_TURRCAPS_PLAYERKILL;
     self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE;
-    
-       if not (autocvar_g_antilag_bullets)
-               self.turrcaps_flags |= TFL_TURRCAPS_HITSCAN;
+
+    self.turrcaps_flags |= TFL_TURRCAPS_HITSCAN;
 
     if (turret_stdproc_init("machinegun_std", "models/turrets/base.md3", "models/turrets/machinegun.md3", TID_MACHINEGUN) == 0)
     {
index a12d9d7259f6b8c1cc5a3aa610768d4d7b499173..783966032f3a8a368a67f16fa533f52a2d956616 100644 (file)
@@ -16,12 +16,12 @@ void turret_mlrs_postthink()
 void turret_mlrs_attack()
 {
     entity missile;
-    
-    turret_tag_fire_update();    
+
+    turret_tag_fire_update();
     missile = turret_projectile("weapons/rocket_fire.wav", 6, 10, DEATH_TURRET_MLRS, PROJECTILE_ROCKET, TRUE, TRUE);
     missile.nextthink = time + max(self.tur_impacttime,(self.shot_radius * 2) / self.shot_speed);
     missile.missile_flags = MIF_SPLASH;
-    te_explosion (missile.origin);    
+    te_explosion (missile.origin);
 }
 
 void turret_mlrs_dinit()
index f4a60e545a12163a9d14b894d8804106a5f63ead..9fce826a2df307d0c74c4658d4d745908182abc9 100644 (file)
@@ -29,7 +29,7 @@ void turret_plasma_minsta_attack (void)
 {
        float flying;
        flying = IsFlying(self); // do this BEFORE to make the trace values from FireRailgunBullet last
-        
+
        FireRailgunBullet (self.tur_shotorg, self.tur_shotorg + self.tur_shotdir_updated * MAX_SHOT_DISTANCE, 10000000000,
                                           800, 0, 0, 0, 0, DEATH_TURRET_PLASMA);
 
@@ -64,10 +64,10 @@ void turret_plasma_minsta_attack (void)
 }
 
 void turret_plasma_attack()
-{ 
-    entity missile = turret_projectile("weapons/hagar_fire.wav", 1, 0, DEATH_TURRET_PLASMA, PROJECTILE_ELECTRO_BEAM, TRUE, TRUE);    
+{
+    entity missile = turret_projectile("weapons/hagar_fire.wav", 1, 0, DEATH_TURRET_PLASMA, PROJECTILE_ELECTRO_BEAM, TRUE, TRUE);
     missile.missile_flags = MIF_SPLASH;
-    
+
     pointparticles(particleeffectnum("laser_muzzleflash"), self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
     if (self.tur_head.frame == 0)
         self.tur_head.frame = 1;
@@ -75,8 +75,8 @@ void turret_plasma_attack()
 
 void turret_plasma_dual_attack()
 {
-    entity missile = turret_projectile("weapons/hagar_fire.wav", 1, 0, DEATH_TURRET_PLASMA, PROJECTILE_ELECTRO_BEAM, TRUE, TRUE); 
-    missile.missile_flags = MIF_SPLASH;   
+    entity missile = turret_projectile("weapons/hagar_fire.wav", 1, 0, DEATH_TURRET_PLASMA, PROJECTILE_ELECTRO_BEAM, TRUE, TRUE);
+    missile.missile_flags = MIF_SPLASH;
     pointparticles(particleeffectnum("laser_muzzleflash"), self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
     self.tur_head.frame += 1;
 }
index 5969938912285b4d9b9328f9550af9dc4892be6e..4989b2445efc99808dab32b75b29935cdd46e95a 100644 (file)
@@ -35,7 +35,7 @@ entity toast(entity from, float range, float damage)
     }
 
     if (etarget)
-    {        
+    {
         te_csqc_lightningarc(from.origin,etarget.origin);
         Damage(etarget, self, self, damage, DEATH_TURRET_TESLA, etarget.origin, '0 0 0');
         etarget.railgunhit = 1;
@@ -48,7 +48,7 @@ float turret_tesla_firecheck()
 {
     // g_turrets_targetscan_maxdelay forces a target re-scan at least this often
     float do_target_scan = 0;
-    
+
     if((self.target_select_time + autocvar_g_turrets_targetscan_maxdelay) < time)
         do_target_scan = 1;
 
@@ -71,7 +71,7 @@ float turret_tesla_firecheck()
         self.target_select_time = time;
     }
 
-    if not (turret_stdproc_firecheck())
+    if (!turret_stdproc_firecheck())
         return 0;
 
     if(self.enemy)
@@ -120,7 +120,7 @@ void turret_tesla_fire()
 
 void turret_tesla_postthink()
 {
-    if not (self.active)
+    if (!self.active)
     {
         self.tur_head.avelocity = '0 0 0';
         return;
index 5e0feea35bd77edd8d98186a7f2c4e31e4495ae1..2eeb08b8fda73978203dbac137b578d5e96e3e58 100644 (file)
@@ -29,12 +29,12 @@ void walker_meele_do_dmg()
 {
     vector where;
     entity e;
-    
+
     makevectors(self.angles);
     where = self.origin + v_forward * 128;
 
     e = findradius(where,32);
-    while (e) 
+    while (e)
     {
         if (turret_validate_target(self, e, self.target_validate_flags))
             if (e != self && e.owner != self)
@@ -59,7 +59,7 @@ void walker_rocket_damage (entity inflictor, entity attacker, float damage, floa
 {
     self.health = self.health - damage;
     self.velocity = self.velocity + vforce;
-    
+
     if (self.health <= 0)
         W_PrepareExplosionByDamage(self.owner, walker_rocket_explode);
 }
@@ -178,7 +178,7 @@ void walker_rocket_loop()
 void walker_fire_rocket(vector org)
 {
     entity rocket;
+
     fixedmakevectors(self.angles);
 
     te_explosion (org);
@@ -199,7 +199,7 @@ void walker_fire_rocket(vector org)
     rocket.tur_shotorg        = randomvec() * 512;
     rocket.cnt                = time + 1;
     rocket.enemy              = self.enemy;
-    
+
     if (random() < 0.01)
         rocket.think          = walker_rocket_loop;
     else
@@ -216,7 +216,7 @@ void walker_fire_rocket(vector org)
     rocket.solid              = SOLID_BBOX;
     rocket.tur_health         = time + 9;
     rocket.missile_flags = MIF_SPLASH | MIF_PROXY | MIF_GUIDED_HEAT;
-    
+
     CSQCProjectile(rocket, FALSE, PROJECTILE_ROCKET, FALSE); // no culling, has fly sound
 }
 
@@ -248,7 +248,7 @@ void walker_move_to(vector _target, float _dist)
     if(self.enemy)
     {
         self.enemy_last_loc = _target;
-        self.enemy_last_time = time;        
+        self.enemy_last_time = time;
     }
 }
 
@@ -287,12 +287,12 @@ void walker_move_path()
     walker_move_to(self.moveto, 0);
 
 #else
-    if (vlen(self.origin - self.pathcurrent.origin) < 64)    
+    if (vlen(self.origin - self.pathcurrent.origin) < 64)
         self.pathcurrent = self.pathcurrent.enemy;
-    
+
     if(!self.pathcurrent)
         return;
-    
+
     self.moveto = self.pathcurrent.origin;
     self.steerto = steerlib_attract2(self.moveto, 0.5, 500, 0.95);
     walker_move_to(self.moveto, 0);
@@ -316,35 +316,35 @@ void walker_postthink()
             {
                 if(vlen(self.origin - self.enemy_last_loc) < 128 || time - self.enemy_last_time > 10)
                     self.enemy_last_time = 0;
-                else                
+                else
                     walker_move_to(self.enemy_last_loc, 0);
             }
             else
-            {        
+            {
                 if(self.animflag != ANIM_NO)
-                {                    
+                {
                     traceline(self.origin + '0 0 64', self.origin + '0 0 64' + v_forward * 128, MOVE_NORMAL, self);
-                    
+
                     if(trace_fraction != 1.0)
                         self.tur_head.idletime = -1337;
                     else
                     {
-                        traceline(trace_endpos, trace_endpos - '0 0 256', MOVE_NORMAL, self);            
+                        traceline(trace_endpos, trace_endpos - '0 0 256', MOVE_NORMAL, self);
                         if(trace_fraction == 1.0)
                             self.tur_head.idletime = -1337;
                     }
-                    
+
                     if(self.tur_head.idletime == -1337)
                     {
-                        self.moveto = self.origin + randomvec() * 256;        
+                        self.moveto = self.origin + randomvec() * 256;
                         self.tur_head.idletime = 0;
                     }
 
                     self.moveto = self.moveto * 0.9 + ((self.origin + v_forward * 500) + randomvec() * 400) * 0.1;
-                    self.moveto_z = self.origin_z + 64;            
+                    self.moveto_z = self.origin_z + 64;
                     walker_move_to(self.moveto, 0);
-                }         
-                
+                }
+
                 if(self.idletime < time)
                 {
                     if(random() < 0.5 || !(self.spawnflags & TSL_ROAM))
@@ -357,12 +357,12 @@ void walker_postthink()
                     {
                         self.animflag = ANIM_WALK;
                         self.idletime = time + 4 + random() * 2;
-                        self.moveto = self.origin + randomvec() * 256;        
+                        self.moveto = self.origin + randomvec() * 256;
                         self.tur_head.moveto = self.moveto;
                         self.tur_head.idletime = 0;
                     }
                 }
-            }            
+            }
         }
     }
     else
@@ -370,8 +370,8 @@ void walker_postthink()
         if (self.tur_dist_enemy < autocvar_g_turrets_unit_walker_std_meele_range && self.animflag != ANIM_MEELE)
         {
             vector wish_angle;
-            
-            wish_angle = angleofs(self, self.enemy);    
+
+            wish_angle = angleofs(self, self.enemy);
             if (self.animflag != ANIM_SWIM)
             if (fabs(wish_angle_y) < 15)
             {
@@ -381,17 +381,17 @@ void walker_postthink()
             }
         }
         else if (self.tur_head.attack_finished_single < time)
-        {            
+        {
             if(self.tur_head.shot_volly)
             {
                 self.animflag = ANIM_NO;
-                
+
                 self.tur_head.shot_volly = self.tur_head.shot_volly -1;
                 if(self.tur_head.shot_volly == 0)
                     self.tur_head.attack_finished_single = time + autocvar_g_turrets_unit_walker_std_rocket_refire;
                 else
                     self.tur_head.attack_finished_single = time + 0.2;
-                
+
                 if(self.tur_head.shot_volly > 1)
                     walker_fire_rocket(gettaginfo(self, gettagindex(self, "tag_rocket01")));
                 else
@@ -399,13 +399,13 @@ void walker_postthink()
             }
             else
             {
-                if (self.tur_dist_enemy > autocvar_g_turrets_unit_walker_std_rockets_range_min)        
+                if (self.tur_dist_enemy > autocvar_g_turrets_unit_walker_std_rockets_range_min)
                 if (self.tur_dist_enemy < autocvar_g_turrets_unit_walker_std_rockets_range)
                     self.tur_head.shot_volly = 4;
             }
         }
         else
-        {            
+        {
             if (self.animflag != ANIM_MEELE)
                 walker_move_to(self.enemy.origin, self.tur_dist_enemy);
         }
@@ -419,7 +419,7 @@ void walker_postthink()
 
         real_angle = vectoangles(self.steerto) - self.angles;
         vz         = self.velocity_z;
-            
+
         switch (self.animflag)
         {
             case ANIM_NO:
@@ -461,7 +461,7 @@ void walker_postthink()
             case ANIM_PAIN:
                 if(self.frame != ANIM_PAIN)
                     defer(0.25, walker_setnoanim);
-                
+
                 break;
 
             case ANIM_MEELE:
@@ -477,7 +477,7 @@ void walker_postthink()
             case ANIM_SWIM:
                 turny = autocvar_g_turrets_unit_walker_turn_swim;
                 turnx = autocvar_g_turrets_unit_walker_turn_swim;
-                
+
                 self.angles_x += bound(-10, shortangle_f(real_angle_x, self.angles_x), 10);
                 movelib_move_simple(v_forward, autocvar_g_turrets_unit_walker_speed_swim, 0.3);
                 vz = self.velocity_z + sin(time * 4) * 8;
@@ -488,26 +488,26 @@ void walker_postthink()
                 movelib_move_simple(v_forward ,autocvar_g_turrets_unit_walker_speed_roam, 0.5);
                 break;
         }
-            
+
         if(turny)
-        {        
+        {
             turny = bound( turny * -1, shortangle_f(real_angle_y, self.angles_y), turny );
             self.angles_y += turny;
         }
 
         if(turnx)
-        {        
+        {
             turnx = bound( turnx * -1, shortangle_f(real_angle_x, self.angles_x), turnx );
             self.angles_x += turnx;
         }
 
-        self.velocity_z = vz;        
+        self.velocity_z = vz;
     }
 
-    
+
     if(self.origin != self.oldorigin)
         self.SendFlags |= TNSF_MOVE;
-    
+
     self.oldorigin = self.origin;
     turrets_setframe(self.animflag, FALSE);
 }
@@ -515,8 +515,7 @@ void walker_postthink()
 void walker_attack()
 {
     sound (self, CH_WEAPON_A, "weapons/uzi_fire.wav", VOL_BASE, ATTEN_NORM);
-    fireBallisticBullet (self.tur_shotorg, self.tur_shotdir_updated, self.shot_spread, self.shot_speed, 5, self.shot_dmg, self.shot_force, DEATH_TURRET_WALK_GUN, 0, 1, autocvar_g_balance_uzi_bulletconstant);
-    endFireBallisticBullet();
+    fireBullet (self.tur_shotorg, self.tur_shotdir_updated, self.shot_spread, 0, self.shot_dmg, self.shot_force, DEATH_TURRET_WALK_GUN, 0);
     pointparticles(particleeffectnum("laser_muzzleflash"), self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
 }
 
@@ -528,10 +527,10 @@ void walker_respawnhook()
     // Respawn is called & first spawn to, to set team. need to make sure we do not move the initial spawn.
     if(self.movetype != MOVETYPE_WALK)
                return;
-               
+
     setorigin(self, self.pos1);
     self.angles = self.pos2;
-    
+
     if (self.target != "")
     {
         e = find(world, targetname, self.target);
@@ -574,10 +573,7 @@ void turret_walker_dinit()
     self.turrcaps_flags = TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_MOVE ;
     self.aim_flags = TFL_AIM_LEAD;
 
-    if (autocvar_g_antilag_bullets)
-        self.turrcaps_flags |= TFL_TURRCAPS_HITSCAN;
-    else
-        self.aim_flags      |= TFL_AIM_SHOTTIMECOMPENSATE;
+    self.turrcaps_flags |= TFL_TURRCAPS_HITSCAN;
 
 
     self.turret_respawnhook = walker_respawnhook;
@@ -597,7 +593,7 @@ void turret_walker_dinit()
     self.damagedbycontents = TRUE;
     self.movetype   = MOVETYPE_WALK;
     self.solid      = SOLID_SLIDEBOX;
-    self.takedamage = DAMAGE_AIM;    
+    self.takedamage = DAMAGE_AIM;
     setorigin(self, self.origin);
     tracebox(self.origin + '0 0 128', self.mins, self.maxs, self.origin - '0 0 10000', MOVE_NORMAL, self);
     setorigin(self, trace_endpos + '0 0 4');
index 4e47bd8fd77f7719693316e0a3af00ee97be4b7d..657d227051e45cbe4da2d2e8df4295f3db36aba0 100644 (file)
@@ -97,12 +97,12 @@ float bumb_gunner_frame()
        self = vehic;
 
 
-       
-       
+
+
        vehic.solid = SOLID_NOT;
        //setorigin(gunner, vehic.origin);
        gunner.velocity = vehic.velocity;
-       
+
        float _in, _out;
        vehic.angles_x *= -1;
        makevectors(vehic.angles);
@@ -117,9 +117,9 @@ float bumb_gunner_frame()
        {
                _in = autocvar_g_vehicle_bumblebee_cannon_turnlimit_out;
                _out = autocvar_g_vehicle_bumblebee_cannon_turnlimit_in;
-               setorigin(gunner, vehic.origin + v_up * -16 + v_forward * -16 + v_right * -128);                
+               setorigin(gunner, vehic.origin + v_up * -16 + v_forward * -16 + v_right * -128);
        }
-       
+
        crosshair_trace(gunner);
        vector _ct = trace_endpos;
        vector ad;
@@ -225,7 +225,7 @@ void bumb_gunner_exit(float _exitflag)
                WriteAngle(MSG_ONE, self.vehicle.angles_y);
                WriteAngle(MSG_ONE, 0);
        }
-       
+
        CSQCVehicleSetup(self, HUD_NORMAL);
        setsize(self, PL_MIN, PL_MAX);
 
@@ -252,16 +252,16 @@ void bumb_gunner_exit(float _exitflag)
 
        if(self == self.vehicle.owner.gunner1)
        {
-               self.vehicle.owner.gunner1 = world;             
+               self.vehicle.owner.gunner1 = world;
        }
        else if(self == self.vehicle.owner.gunner2)
        {
-               self.vehicle.owner.gunner2 = world;     
+               self.vehicle.owner.gunner2 = world;
                v_right *= -1;
-       }       
+       }
        else
                dprint("^1self != gunner1 or gunner2, this is a BIG PROBLEM, tell tZork this happend.\n");
-               
+
        vector spot = self.vehicle.owner.origin + + v_up * 128 + v_right * 300;
        spot = vehicles_findgoodexit(spot);
        //setorigin(self , spot);
@@ -327,7 +327,7 @@ float bumb_gunner_enter()
        _gun.vehicle_hudmodel.viewmodelforclient = other;
 
        CSQCVehicleSetup(other, other.hud);
-       
+
     vh_player = other;
     vh_vehicle = _gun;
     MUTATOR_CALLHOOK(VehicleEnter);
@@ -339,7 +339,7 @@ float bumb_gunner_enter()
 
 float vehicles_valid_pilot()
 {
-       if not(IS_PLAYER(other))
+       if (!IS_PLAYER(other))
                return FALSE;
 
        if(other.deadflag != DEAD_NO)
@@ -348,7 +348,7 @@ float vehicles_valid_pilot()
        if(other.vehicle != world)
                return FALSE;
 
-       if not(IS_REAL_CLIENT(other))
+       if (!IS_REAL_CLIENT(other))
                if(!autocvar_g_vehicles_allow_bots)
                        return FALSE;
 
@@ -442,9 +442,9 @@ float bumb_pilot_frame()
 
        // Pitch
        ftmp = 0;
-       if(pilot.movement_x > 0 && vang_x < autocvar_g_vehicle_bumblebee_pitchlimit) 
+       if(pilot.movement_x > 0 && vang_x < autocvar_g_vehicle_bumblebee_pitchlimit)
                ftmp = 4;
-       else if(pilot.movement_x < 0 && vang_x > -autocvar_g_vehicle_bumblebee_pitchlimit) 
+       else if(pilot.movement_x < 0 && vang_x > -autocvar_g_vehicle_bumblebee_pitchlimit)
                ftmp = -8;
 
        newvel_x = bound(-autocvar_g_vehicle_bumblebee_pitchlimit, newvel_x , autocvar_g_vehicle_bumblebee_pitchlimit);
@@ -490,10 +490,10 @@ float bumb_pilot_frame()
 
        vehic.velocity  += newvel * frametime;
        pilot.velocity = pilot.movement  = vehic.velocity;
-       
+
 
        if(autocvar_g_vehicle_bumblebee_healgun_locktime)
-       {               
+       {
                if(vehic.tur_head.lock_time < time || vehic.tur_head.enemy.deadflag)
                        vehic.tur_head.enemy = world;
 
@@ -511,19 +511,19 @@ float bumb_pilot_frame()
                                }
                        }
                        else
-                       {            
+                       {
                                vehic.tur_head.enemy = trace_ent;
                                vehic.tur_head.lock_time = time + autocvar_g_vehicle_bumblebee_healgun_locktime;
                        }
                }
-                       
+
                if(vehic.tur_head.enemy)
                {
-                       trace_endpos = real_origin(vehic.tur_head.enemy);                       
-                       UpdateAuxiliaryXhair(pilot, trace_endpos, '0 0.75 0', 0);               
+                       trace_endpos = real_origin(vehic.tur_head.enemy);
+                       UpdateAuxiliaryXhair(pilot, trace_endpos, '0 0.75 0', 0);
                }
        }
-       
+
        vang = vehicle_aimturret(vehic, trace_endpos, self.gun3, "fire",
                                          autocvar_g_vehicle_bumblebee_raygun_pitchlimit_down * -1,  autocvar_g_vehicle_bumblebee_raygun_pitchlimit_up,
                                          autocvar_g_vehicle_bumblebee_raygun_turnlimit_sides * -1,  autocvar_g_vehicle_bumblebee_raygun_turnlimit_sides,  autocvar_g_vehicle_bumblebee_raygun_turnspeed);
@@ -532,12 +532,12 @@ float bumb_pilot_frame()
        {
                vehic.gun3.enemy.realowner = pilot;
                vehic.gun3.enemy.effects &= ~EF_NODRAW;
-               
+
                vehic.gun3.enemy.hook_start = gettaginfo(vehic.gun3, gettagindex(vehic.gun3, "fire"));
                vehic.gun3.enemy.SendFlags |= BRG_START;
-               
+
                traceline(vehic.gun3.enemy.hook_start, vehic.gun3.enemy.hook_start + v_forward * autocvar_g_vehicle_bumblebee_raygun_range, MOVE_NORMAL, vehic);
-               
+
                if(trace_ent)
                {
                        if(autocvar_g_vehicle_bumblebee_raygun)
@@ -580,11 +580,11 @@ float bumb_pilot_frame()
                                        }
                        }
                }
-               
+
                vehic.gun3.enemy.hook_end = trace_endpos;
                setorigin(vehic.gun3.enemy, trace_endpos);
                vehic.gun3.enemy.SendFlags |= BRG_END;
-               
+
                vehic.wait = time + 1;
        }
        else
@@ -596,7 +596,7 @@ float bumb_pilot_frame()
                vehic.gun3.enemy = world;
        }
        */
-       
+
        VEHICLE_UPDATE_PLAYER(pilot, health, bumblebee);
        VEHICLE_UPDATE_PLAYER(pilot, energy, bumblebee);
 
@@ -605,7 +605,7 @@ float bumb_pilot_frame()
 
        if(vehic.vehicle_flags & VHF_HASSHIELD)
                VEHICLE_UPDATE_PLAYER(pilot, shield, bumblebee);
-               
+
        vehic.angles_x *= -1;
        makevectors(vehic.angles);
        vehic.angles_x *= -1;
@@ -620,16 +620,16 @@ float bumb_pilot_frame()
 void bumb_think()
 {
        self.movetype = MOVETYPE_TOSS;
-               
+
                //self.velocity = self.velocity * 0.5;
        self.angles_z *= 0.8;
        self.angles_x *= 0.8;
-       
+
        self.nextthink = time + 0.05;
-       
+
        if(!self.owner)
        {
-               entity oldself = self;          
+               entity oldself = self;
                if(self.gunner1)
                {
                        self = self.gunner1;
@@ -642,7 +642,7 @@ void bumb_think()
                        other = oldother;
                        return;
                }
-               
+
                if(self.gunner2)
                {
                        self = self.gunner2;
@@ -654,9 +654,9 @@ void bumb_think()
                        self.touch();
                        other = oldother;
                        return;
-               }               
+               }
        }
-       
+
 }
 
 void bumb_enter()
@@ -672,19 +672,19 @@ void bumb_exit(float eject)
        self.touch = vehicles_touch;
        self.think = bumb_think;
        self.nextthink = time;
-       
+
        if(!self.owner)
                return;
-       
+
        fixedmakevectors(self.angles);
        vector spot;
-       if(vlen(self.velocity) > autocvar_g_vehicle_bumblebee_speed_forward * 0.5)              
+       if(vlen(self.velocity) > autocvar_g_vehicle_bumblebee_speed_forward * 0.5)
                spot = self.origin + v_up * 128 + v_forward * 200;
        else
                spot = self.origin + v_up * 128 - v_forward * 200;
-       
+
        spot = vehicles_findgoodexit(spot);
-       
+
        // Hide beam
        if(self.gun3.enemy || !wasfreed(self.gun3.enemy)) {
                self.gun3.enemy.effects |= EF_NODRAW;
@@ -693,7 +693,7 @@ void bumb_exit(float eject)
        self.owner.velocity = 0.75 * self.vehicle.velocity + normalize(spot - self.vehicle.origin) * 200;
        self.owner.velocity_z += 10;
        setorigin(self.owner, spot);
-       
+
        antilag_clear(self.owner);
     self.owner = world;
 }
@@ -708,10 +708,10 @@ void bumb_blowup()
 
        sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM);
        pointparticles(particleeffectnum("explosion_large"), randomvec() * 80 + (self.origin + '0 0 100'), '0 0 0', 1);
-       
+
        if(self.owner.deadflag == DEAD_DYING)
                self.owner.deadflag = DEAD_DEAD;
-       
+
        remove(self);
 }
 
@@ -732,11 +732,11 @@ void bumb_diethink()
 void bumb_die()
 {
        entity oldself = self;
-       
+
        // Hide beam
        if(self.gun3.enemy || !wasfreed(self.gun3.enemy))
                self.gun3.enemy.effects |= EF_NODRAW;
-       
+
        if(self.gunner1)
        {
                self = self.gunner1;
@@ -764,15 +764,15 @@ void bumb_die()
                _body.touch = bumb_blowup;
        else
                _body.touch = func_null;
-               
+
        _body.think = bumb_diethink;
        _body.nextthink = time;
        _body.wait = time + 2 + (random() * 8);
        _body.owner = self;
        _body.enemy = self.enemy;
-       
+
        pointparticles(particleeffectnum("explosion_medium"), findbetterlocation(self.origin, 16), '0 0 0', 1);
-       
+
        self.health                     = 0;
        self.event_damage       = func_null;
        self.solid                      = SOLID_CORPSE;
@@ -859,14 +859,14 @@ void bumb_spawn(float _f)
                setorigin(self.gun2.vehicle_viewport, '-85 0 50');
 
                self.scale = 1.5;
-               
+
                // Raygun beam
                if(self.gun3.enemy == world)
-               {                       
+               {
                        self.gun3.enemy = spawn();
                        Net_LinkEntity(self.gun3.enemy, TRUE, 0, bumble_raygun_send);
-                       self.gun3.enemy.SendFlags = BRG_SETUP;                  
-                       self.gun3.enemy.cnt = autocvar_g_vehicle_bumblebee_raygun;                      
+                       self.gun3.enemy.SendFlags = BRG_SETUP;
+                       self.gun3.enemy.cnt = autocvar_g_vehicle_bumblebee_raygun;
                        self.gun3.enemy.effects = EF_NODRAW | EF_LOWPRECISION;
                }
        }
@@ -878,7 +878,7 @@ void bumb_spawn(float _f)
        self.movetype           = MOVETYPE_TOSS;
        self.vehicle_impact = bumb_impact;
        self.damageforcescale = 0.025;
-       
+
        setorigin(self, self.origin + '0 0 25');
 }
 
@@ -911,7 +911,7 @@ void spawnfunc_vehicle_bumblebee()
        if(autocvar_g_vehicle_bumblebee_health_regen)
                self.vehicle_flags |= VHF_HEALTHREGEN;
 
-       if not(vehicle_initialize(
+       if(!vehicle_initialize(
                           "Bumblebee", "models/vehicles/bumblebee_body.dpm",
                           "", "models/vehicles/spiderbot_cockpit.dpm", "", "", "tag_viewport",
                           HUD_BUMBLEBEE, BUMB_MIN, BUMB_MAX, FALSE,
@@ -969,7 +969,7 @@ void bumble_raygun_draw()
 
        _len = vlen(self.origin - self.move_origin);
        _dir = normalize(self.move_origin - self.origin);
-       
+
        if(self.total_damages < time)
        {
                boxparticles(self.traileffect, self, self.origin, self.origin + _dir * -64, _dir * -_len , _dir * -_len, 1, PARTICLES_USEALPHA);
@@ -1008,19 +1008,19 @@ void bumble_raygun_read(float bIsNew)
                self.cnt  = ReadByte();
                self.team = ReadByte();
                self.cnt  = ReadByte();
-               
+
                if(self.cnt)
                        self.colormod = '1 0 0';
                else
                        self.colormod = '0 1 0';
 
                self.traileffect = particleeffectnum("healray_muzzleflash");
-               self.lip = particleeffectnum("healray_impact");         
+               self.lip = particleeffectnum("healray_impact");
 
                self.draw = bumble_raygun_draw;
        }
-       
-       
+
+
        if(sf & BRG_START)
        {
                self.origin_x = ReadCoord();
index 6193b2d0538768ff9aa9057c3765bc86217dbceb..f009723b7f223103b3848b8ad05fc8bc84ae4ae1 100644 (file)
@@ -149,7 +149,7 @@ void racer_rocket_groundhugger()
         return;
     }
 
-    if not (self.realowner.vehicle)
+    if (!self.realowner.vehicle)
     {
         UpdateCSQCProjectile(self);
         return;
@@ -197,7 +197,7 @@ void racer_rocket_tracker()
         return;
     }
 
-    if not (self.realowner.vehicle)
+    if (!self.realowner.vehicle)
     {
         UpdateCSQCProjectile(self);
         return;
@@ -491,7 +491,7 @@ void racer_exit(float eject)
     self.movetype   = MOVETYPE_BOUNCE;
     sound (self.tur_head, CH_TRIGGER_SINGLE, "misc/null.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
 
-    if not (self.owner)
+    if (!self.owner)
         return;
 
        makevectors(self.angles);
@@ -630,8 +630,8 @@ void spawnfunc_vehicle_racer()
     {
         remove(self);
         return;
-    }        
-    
+    }
+
     self.vehicle_flags |= VHF_DMGSHAKE;
     self.vehicle_flags |= VHF_DMGROLL;
 
@@ -659,7 +659,7 @@ void spawnfunc_vehicle_racer()
     if(autocvar_g_vehicle_racer_health_regen)
         self.vehicle_flags |= VHF_HEALTHREGEN;
 
-    if not (vehicle_initialize(
+    if(!vehicle_initialize(
              "Wakizashi",
              "models/vehicles/wakizashi.dpm",
              "null", // we need this so tur_head is networked and usable for sounds
@@ -672,7 +672,7 @@ void spawnfunc_vehicle_racer()
              racer_frame,
              racer_enter, racer_exit,
              racer_die,   racer_think,
-             TRUE, 
+             TRUE,
              autocvar_g_vehicle_racer_health,
              autocvar_g_vehicle_racer_shield))
     {
index c9096a818a9a6a59d3ef92b6217b589359fb3577..a6ef526499528839ee09194e3b0fbd73bc5cee1c 100644 (file)
@@ -213,15 +213,15 @@ void raptor_enter()
 
     if(self.owner.flagcarried)
        setorigin(self.owner.flagcarried, '-20 0 96');
-    
+
     CSQCVehicleSetup(self.owner, 0);
 }
 
 void raptor_land()
-{    
+{
     float hgt;
-        
-    hgt = raptor_altitude(512);    
+
+    hgt = raptor_altitude(512);
     self.velocity = (self.velocity * 0.9) + ('0 0 -1800' * (hgt / 256) * sys_frametime);
     self.angles_x *= 0.95;
     self.angles_z *= 0.95;
@@ -254,9 +254,9 @@ void raptor_exit(float eject)
         self.nextthink  = time;
     }
 
-    if not (self.owner)
+    if (!self.owner)
         return;
-       
+
        makevectors(self.angles);
        if(eject)
        {
@@ -285,23 +285,23 @@ void raptor_exit(float eject)
            self.owner.oldvelocity = self.owner.velocity;
            setorigin(self.owner , spot);
        }
-       
-       antilag_clear(self.owner);      
+
+       antilag_clear(self.owner);
     self.owner = world;
 }
 
 float raptor_takeoff()
 {
     entity player, raptor;
-    
+
     player = self;
     raptor = self.vehicle;
     self   = raptor;
     if(self.sound_nexttime < time)
-    {        
+    {
         self.sound_nexttime = time + 7.955812; //soundlength("vehicles/raptor_fly.wav");
         sound (self, CH_TRIGGER_SINGLE, "vehicles/raptor_speed.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
-    }   
+    }
 
     // Takeoff sequense
     if(raptor.frame < 25)
@@ -364,7 +364,7 @@ void raptor_flare_think()
             _missile.enemy = self;
         _missile = _missile.chain;
     }
-    
+
     if(self.tur_impacttime < time)
         remove(self);
 }
@@ -374,7 +374,7 @@ float raptor_frame()
     entity player, raptor;
     float ftmp = 0;
     vector df;
-    
+
        if(intermission_running)
                return 1;
 
@@ -384,28 +384,28 @@ float raptor_frame()
     vehicles_painframe();
     /*
     ftmp = vlen(self.velocity);
-    if(ftmp > autocvar_g_vehicle_raptor_speed_forward) 
+    if(ftmp > autocvar_g_vehicle_raptor_speed_forward)
         ftmp = 1;
-    else  
+    else
         ftmp = ftmp / autocvar_g_vehicle_raptor_speed_forward;
     */
-        
+
     if(self.sound_nexttime < time)
-    {        
-        self.sound_nexttime = time + 7.955812; 
+    {
+        self.sound_nexttime = time + 7.955812;
         //sound (self.tur_head, CH_TRIGGER_SINGLE, "vehicles/raptor_fly.wav", 1 - ftmp,   ATTEN_NORM );
-        sound (self, CH_TRIGGER_SINGLE, "vehicles/raptor_speed.wav", 1, ATTEN_NORM);        
+        sound (self, CH_TRIGGER_SINGLE, "vehicles/raptor_speed.wav", 1, ATTEN_NORM);
         self.wait = ftmp;
-    }        
+    }
     /*
     else if(fabs(ftmp - self.wait) > 0.2)
     {
         sound (self.tur_head, CH_TRIGGER_SINGLE, "", 1 - ftmp,   ATTEN_NORM );
-        sound (self, CH_TRIGGER_SINGLE, "", ftmp, ATTEN_NORM);        
+        sound (self, CH_TRIGGER_SINGLE, "", ftmp, ATTEN_NORM);
         self.wait = ftmp;
     }
     */
-    
+
     if(raptor.deadflag != DEAD_NO)
     {
         self = player;
@@ -487,7 +487,7 @@ float raptor_frame()
     {
         if(raptor.gun1.lock_time < time || raptor.gun1.enemy.deadflag)
             raptor.gun1.enemy = world;
-    
+
         if(trace_ent)
         if(trace_ent.movetype)
         if(trace_ent.takedamage)
@@ -502,12 +502,12 @@ float raptor_frame()
                 }
             }
             else
-            {            
+            {
                 raptor.gun1.enemy = trace_ent;
                 raptor.gun1.lock_time = time + 0.5;
             }
         }
-            
+
         if(raptor.gun1.enemy)
         {
             float i, distance, impact_time;
@@ -517,7 +517,7 @@ float raptor_frame()
             vector _vel = raptor.gun1.enemy.velocity;
             if(raptor.gun1.enemy.movetype == MOVETYPE_WALK)
                 _vel_z *= 0.1;
-            
+
             if(autocvar_g_vehicle_raptor_cannon_predicttarget)
             {
                 ad = vf;
@@ -527,10 +527,10 @@ float raptor_frame()
                     impact_time = distance / autocvar_g_vehicle_raptor_cannon_speed;
                     ad = vf + _vel * impact_time;
                 }
-                trace_endpos = ad;                        
+                trace_endpos = ad;
             }
             else
-                trace_endpos = vf;                        
+                trace_endpos = vf;
         }
     }
     else if(autocvar_g_vehicle_raptor_cannon_locktarget == 1)
@@ -569,12 +569,12 @@ float raptor_frame()
     }
 
 
-    vehicle_aimturret(raptor, trace_endpos, raptor.gun1, "fire1", 
-                          autocvar_g_vehicle_raptor_cannon_pitchlimit_down * -1,  autocvar_g_vehicle_raptor_cannon_pitchlimit_up, 
+    vehicle_aimturret(raptor, trace_endpos, raptor.gun1, "fire1",
+                          autocvar_g_vehicle_raptor_cannon_pitchlimit_down * -1,  autocvar_g_vehicle_raptor_cannon_pitchlimit_up,
                           autocvar_g_vehicle_raptor_cannon_turnlimit * -1,  autocvar_g_vehicle_raptor_cannon_turnlimit,  autocvar_g_vehicle_raptor_cannon_turnspeed);
 
-    vehicle_aimturret(raptor, trace_endpos, raptor.gun2, "fire1", 
-                          autocvar_g_vehicle_raptor_cannon_pitchlimit_down * -1,  autocvar_g_vehicle_raptor_cannon_pitchlimit_up, 
+    vehicle_aimturret(raptor, trace_endpos, raptor.gun2, "fire1",
+                          autocvar_g_vehicle_raptor_cannon_pitchlimit_down * -1,  autocvar_g_vehicle_raptor_cannon_pitchlimit_up,
                           autocvar_g_vehicle_raptor_cannon_turnlimit * -1,  autocvar_g_vehicle_raptor_cannon_turnlimit,  autocvar_g_vehicle_raptor_cannon_turnspeed);
 
     /*
@@ -583,7 +583,7 @@ float raptor_frame()
     traceline(ad, ad + v_forward * MAX_SHOT_DISTANCE, MOVE_NORMAL, raptor);
     UpdateAuxiliaryXhair(player, trace_endpos, '0 1 0', 0);
     */
-    
+
     if(player.BUTTON_ATCK)
     if(raptor.attack_finished_single <= time)
     if(raptor.vehicle_energy > autocvar_g_vehicle_raptor_cannon_cost)
@@ -621,7 +621,7 @@ float raptor_frame()
             raptor_bombdrop();
             raptor.delay = time + autocvar_g_vehicle_raptor_bombs_refire;
             raptor.lip   = time;
-        }        
+        }
     }
     else
     {
@@ -630,11 +630,11 @@ float raptor_frame()
         {
             float i;
             entity _flare;
-            
+
             for(i = 0; i < 3; ++i)
             {
             _flare = spawn();
-            setmodel(_flare, "models/runematch/rune.mdl"); 
+            setmodel(_flare, "models/runematch/rune.mdl");
             _flare.effects = EF_LOWPRECISION | EF_FLAME;
             _flare.scale = 0.5;
             setorigin(_flare, self.origin - '0 0 16');
@@ -655,7 +655,7 @@ float raptor_frame()
             raptor.lip   = time;
         }
     }
-    
+
     raptor.bomb1.alpha = raptor.bomb2.alpha = (time - raptor.lip) / (raptor.delay - raptor.lip);
     player.vehicle_reload2 = bound(0, raptor.bomb1.alpha * 100, 100);
 
@@ -672,13 +672,13 @@ float raptor_frame()
 
             _missile = _missile.chain;
         }
-        
+
         if(_incomming)
             sound(self, CH_PAIN_SINGLE, "vehicles/missile_alarm.wav", VOL_BASE, ATTEN_NONE);
-        
+
         self.bomb1.cnt = time + 1;
     }
-    
+
 
     VEHICLE_UPDATE_PLAYER(player, health, raptor);
     VEHICLE_UPDATE_PLAYER(player, energy, raptor);
@@ -686,7 +686,7 @@ float raptor_frame()
         VEHICLE_UPDATE_PLAYER(player, shield, raptor);
 
     player.BUTTON_ATCK = player.BUTTON_ATCK2 = player.BUTTON_CROUCH = 0;
-    
+
     self = player;
     return 1;
 }
@@ -716,7 +716,7 @@ void raptor_diethink()
 {
        if(time >= self.wait)
                self.think = raptor_blowup;
-    
+
     if(random() < 0.1)
     {
         sound (self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM);
@@ -736,7 +736,7 @@ void raptor_die()
     self.think        = raptor_diethink;
     self.nextthink    = time;
     self.wait            = time + 5 + (random() * 5);
-    
+
     pointparticles(particleeffectnum("explosion_medium"), findbetterlocation (self.origin, 16), '0 0 0', 1);
 
     self.velocity_z += 600;
@@ -768,12 +768,12 @@ float raptor_impulse(float _imp)
     switch(_imp)
     {
         case 10:
-        case 15:        
+        case 15:
         case 18:
             self.vehicle.vehicle_weapon2mode += 1;
             if(self.vehicle.vehicle_weapon2mode > RSM_LAST)
                 self.vehicle.vehicle_weapon2mode = RSM_FIRST;
-            
+
             CSQCVehicleSetup(self, 0);
             return TRUE;
         case 12:
@@ -782,17 +782,17 @@ float raptor_impulse(float _imp)
             self.vehicle.vehicle_weapon2mode -= 1;
             if(self.vehicle.vehicle_weapon2mode < RSM_FIRST)
                 self.vehicle.vehicle_weapon2mode = RSM_LAST;
-            
+
             CSQCVehicleSetup(self, 0);
             return TRUE;
 
-        /*                     
+        /*
         case 17: // toss gun, could be used to exit?
             break;
         case 20: // Manual minigun reload?
             break;
         */
-    }    
+    }
     return FALSE;
 }
 
@@ -805,9 +805,9 @@ void raptor_spawn(float _f)
 
         //FIXME: Camera is in a bad place in HUD model.
         //setorigin(self.vehicle_viewport, '25 0 5');
-        
+
         self.vehicles_impulse   = raptor_impulse;
-        
+
         self.frame = 0;
 
         self.bomb1 = spawn();
@@ -880,10 +880,10 @@ void raptor_spawn(float _f)
 
     setsize(self, RAPTOR_MIN, RAPTOR_MAX );
     self.delay = time;
-        
+
     self.bouncefactor = autocvar_g_vehicle_raptor_bouncefactor;
-    self.bouncestop = autocvar_g_vehicle_raptor_bouncestop;    
-    self.vehicle_impact = raptor_impact;    
+    self.bouncestop = autocvar_g_vehicle_raptor_bouncestop;
+    self.vehicle_impact = raptor_impact;
     self.damageforcescale = 0.25;
 }
 
@@ -893,11 +893,11 @@ void spawnfunc_vehicle_raptor()
     {
         remove(self);
         return;
-    }        
-    
+    }
+
     self.vehicle_flags |= VHF_DMGSHAKE;
     self.vehicle_flags |= VHF_DMGROLL;
-   
+
     if(autocvar_g_vehicle_raptor_shield)
         self.vehicle_flags |= VHF_HASSHIELD;
 
@@ -917,12 +917,12 @@ void spawnfunc_vehicle_raptor()
     //precache_model ("models/vehicles/clusterbomb.md3");
     precache_model ("models/vehicles/clusterbomb_folded.md3");
     precache_model ("models/vehicles/raptor_body.dpm");
-    
+
     precache_sound ("vehicles/raptor_fly.wav");
     precache_sound ("vehicles/raptor_speed.wav");
     precache_sound ("vehicles/missile_alarm.wav");
-    
-    if not (vehicle_initialize(
+
+    if(!vehicle_initialize(
              "Raptor",
              "models/vehicles/raptor.dpm",
              "",
@@ -935,14 +935,14 @@ void spawnfunc_vehicle_raptor()
              raptor_frame,
              raptor_enter, raptor_exit,
              raptor_die,   raptor_think,
-             FALSE, 
+             FALSE,
              autocvar_g_vehicle_raptor_health,
              autocvar_g_vehicle_raptor_shield))
     {
         remove(self);
         return;
     }
-    
-    
+
+
 }
 #endif // SVQC
index 3d1aa3d833de56183726b8051a044cd9268e281a..1085a904e2143f7e1abec373b6f4d80aa496cad7 100644 (file)
@@ -43,8 +43,7 @@ float autocvar_g_vehicle_spiderbot_minigun_ammo_max;
 float autocvar_g_vehicle_spiderbot_minigun_ammo_regen;
 float autocvar_g_vehicle_spiderbot_minigun_ammo_regen_pause;
 float autocvar_g_vehicle_spiderbot_minigun_force;
-float autocvar_g_vehicle_spiderbot_minigun_speed;
-float autocvar_g_vehicle_spiderbot_minigun_bulletconstant;
+float autocvar_g_vehicle_spiderbot_minigun_solidpenetration;
 
 float autocvar_g_vehicle_spiderbot_rocket_damage;
 float autocvar_g_vehicle_spiderbot_rocket_force;
@@ -104,7 +103,7 @@ void spiderbot_rocket_guided()
 
     self.nextthink  = time;
 
-    if not (self.realowner.vehicle)
+    if (!self.realowner.vehicle)
         self.think = spiderbot_rocket_unguided;
 
     crosshair_trace(self.realowner);
@@ -122,7 +121,7 @@ void spiderbot_guide_release()
 {
     entity rkt;
     rkt = findchainentity(realowner, self.owner);
-    if not (rkt)
+    if (!rkt)
         return;
 
     crosshair_trace(self.owner);
@@ -137,12 +136,12 @@ void spiderbot_guide_release()
     }
 }
 
-float spiberbot_calcartillery_flighttime;  
+float spiberbot_calcartillery_flighttime;
 vector spiberbot_calcartillery(vector org, vector tgt, float ht)
 {
        float grav, sdist, zdist, vs, vz, jumpheight;
        vector sdir;
-       
+
        grav  = autocvar_sv_gravity;
        zdist = tgt_z - org_z;
        sdist = vlen(tgt - org - zdist * '0 0 1');
@@ -218,7 +217,7 @@ void spiderbot_rocket_do()
     entity rocket = world;
 
     if (self.wait != -10)
-    {        
+    {
         if (self.owner.BUTTON_ATCK2 && self.vehicle_weapon2mode == SBRM_GUIDE)
         {
             if (self.wait == 1)
@@ -239,7 +238,7 @@ void spiderbot_rocket_do()
             self.wait = 0;
         }
     }
-    
+
     if(self.gun2.cnt > time)
         return;
 
@@ -248,14 +247,14 @@ void spiderbot_rocket_do()
         self.tur_head.frame = 1;
         self.wait = 0;
     }
-        
+
     if (self.wait != -10)
-        if not (self.owner.BUTTON_ATCK2)
+        if (!self.owner.BUTTON_ATCK2)
             return;
 
 
     v = gettaginfo(self.tur_head,gettagindex(self.tur_head,"tag_fire"));
-    
+
     switch(self.vehicle_weapon2mode)
     {
         case SBRM_VOLLY:
@@ -282,36 +281,36 @@ void spiderbot_rocket_do()
             rocket.nextthink  = time;
             rocket.think      = spiderbot_rocket_guided;
 
-                
+
         break;
         case SBRM_ARTILLERY:
             rocket = vehicles_projectile("spiderbot_rocket_launch", "weapons/rocket_fire.wav",
                                    v, normalize(v_forward) * autocvar_g_vehicle_spiderbot_rocket_speed,
                                    autocvar_g_vehicle_spiderbot_rocket_damage, autocvar_g_vehicle_spiderbot_rocket_radius, autocvar_g_vehicle_spiderbot_rocket_force, 1,
                                    DEATH_VH_SPID_ROCKET, PROJECTILE_SPIDERROCKET, autocvar_g_vehicle_spiderbot_rocket_health, FALSE, TRUE, self.owner);
-            
+
             crosshair_trace(self.owner);
-            
+
             rocket.pos1       = trace_endpos + randomvec() * (0.75 * autocvar_g_vehicle_spiderbot_rocket_radius);
             rocket.pos1_z       = trace_endpos_z;
-            
-            traceline(v, v + '0 0 1' * MAX_SHOT_DISTANCE, MOVE_WORLDONLY, self);             
+
+            traceline(v, v + '0 0 1' * MAX_SHOT_DISTANCE, MOVE_WORLDONLY, self);
             float h1 = 0.75 * vlen(v - trace_endpos);
-            
+
             //v = trace_endpos;
-            traceline(v , rocket.pos1 + '0 0 1' * MAX_SHOT_DISTANCE, MOVE_WORLDONLY, self); 
+            traceline(v , rocket.pos1 + '0 0 1' * MAX_SHOT_DISTANCE, MOVE_WORLDONLY, self);
             float h2 = 0.75 * vlen(rocket.pos1 - v);
-            
+
             rocket.velocity  = spiberbot_calcartillery(v, rocket.pos1, ((h1 < h2) ? h1 : h2));
-            rocket.movetype  = MOVETYPE_TOSS;            
+            rocket.movetype  = MOVETYPE_TOSS;
             rocket.gravity   = 1;
-            //rocket.think     = spiderbot_rocket_artillery;   
+            //rocket.think     = spiderbot_rocket_artillery;
         break;
     }
     rocket.classname  = "spiderbot_rocket";
-    
+
     rocket.cnt = time + autocvar_g_vehicle_spiderbot_rocket_lifetime;
-    
+
     self.tur_head.frame += 1;
     if (self.tur_head.frame == 9)
         self.attack_finished_single = autocvar_g_vehicle_spiderbot_rocket_reload;
@@ -334,17 +333,17 @@ float spiderbot_frame()
 
        if(intermission_running)
                return 1;
-               
+
     player = self;
     spider = self.vehicle;
     self   = spider;
 
     vehicles_painframe();
-    
+
     player.BUTTON_ZOOM      = 0;
     player.BUTTON_CROUCH    = 0;
     player.switchweapon     = 0;
-    
+
 
 #if 1 // 0 to enable per-gun impact aux crosshairs
     // Avarage gun impact point's -> aux cross
@@ -372,9 +371,9 @@ float spiderbot_frame()
     ad = AnglesTransform_ToAngles(AnglesTransform_LeftDivide(AnglesTransform_FromAngles(spider.angles), AnglesTransform_FromAngles(ad))) - spider.tur_head.angles;
     ad = AnglesTransform_Normalize(ad, TRUE);
     //UpdateAuxiliaryXhair(player, trace_endpos, ('1 0 0' * player.vehicle_reload2) + ('0 1 0' * (1 - player.vehicle_reload2)), 2);
-    
+
     // Rotate head
-    ftmp = autocvar_g_vehicle_spiderbot_head_turnspeed * sys_frametime;    
+    ftmp = autocvar_g_vehicle_spiderbot_head_turnspeed * sys_frametime;
     ad_y = bound(-ftmp, ad_y, ftmp);
     spider.tur_head.angles_y = bound(autocvar_g_vehicle_spiderbot_head_turnlimit * -1, spider.tur_head.angles_y + ad_y, autocvar_g_vehicle_spiderbot_head_turnlimit);
 
@@ -385,7 +384,7 @@ float spiderbot_frame()
 
     //fixedmakevectors(spider.angles);
     makevectors(spider.angles + '-2 0 0' * spider.angles_x);
-    
+
     movelib_groundalign4point(autocvar_g_vehicle_spiderbot_springlength, autocvar_g_vehicle_spiderbot_springup, autocvar_g_vehicle_spiderbot_springblend, autocvar_g_vehicle_spiderbot_tiltlimit);
 
     if(spider.flags & FL_ONGROUND)
@@ -393,11 +392,11 @@ float spiderbot_frame()
         if(spider.frame == 4 && self.tur_head.wait != 0)
         {
             sound (self, CH_TRIGGER_SINGLE, "vehicles/spiderbot_land.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
-            spider.frame = 5;            
+            spider.frame = 5;
         }
-        
+
         if(player.BUTTON_JUMP && self.tur_head.wait < time)
-        {        
+        {
             sound (self, CH_TRIGGER_SINGLE, "vehicles/spiderbot_jump.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
             //dprint("spiderbot_jump:", ftos(soundlength("vehicles/spiderbot_jump.wav")), "\n");
             self.delay = 0;
@@ -412,12 +411,12 @@ float spiderbot_frame()
             if(vlen(player.movement) == 0)
             {
                 if(self.sound_nexttime < time || self.delay != 3)
-                {                        
+                {
                     self.delay = 3;
                     self.sound_nexttime = time + 6.486500; //soundlength("vehicles/spiderbot_idle.wav");
                     //dprint("spiderbot_idle:", ftos(soundlength("vehicles/spiderbot_idle.wav")), "\n");
                     sound (self, CH_TRIGGER_SINGLE, "vehicles/spiderbot_idle.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
-                }                
+                }
                 movelib_beak_simple(autocvar_g_vehicle_spiderbot_speed_stop);
                 spider.frame = 5;
             }
@@ -428,8 +427,8 @@ float spiderbot_frame()
                     ftmp = autocvar_g_vehicle_spiderbot_turnspeed_strafe * sys_frametime;
                 else
                     ftmp = autocvar_g_vehicle_spiderbot_turnspeed * sys_frametime;
-                
-                ftmp = bound(-ftmp, spider.tur_head.angles_y, ftmp);                
+
+                ftmp = bound(-ftmp, spider.tur_head.angles_y, ftmp);
                 spider.angles_y = anglemods(spider.angles_y + ftmp);
                 spider.tur_head.angles_y -= ftmp;
 
@@ -449,7 +448,7 @@ float spiderbot_frame()
                     movelib_move_simple(normalize(v_forward * player.movement_x),autocvar_g_vehicle_spiderbot_speed_walk,autocvar_g_vehicle_spiderbot_movement_inertia);
 
                     if(self.sound_nexttime < time || self.delay != 1)
-                    {                        
+                    {
                         self.delay = 1;
                         self.sound_nexttime = time + 6.486500; //soundlength("vehicles/spiderbot_walk.wav");
                         sound (self, CH_TRIGGER_SINGLE, "vehicles/spiderbot_walk.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
@@ -470,7 +469,7 @@ float spiderbot_frame()
                     }
                     movelib_move_simple(normalize(v_right * player.movement_y),autocvar_g_vehicle_spiderbot_speed_strafe,autocvar_g_vehicle_spiderbot_movement_inertia);
                     if(self.sound_nexttime < time || self.delay != 2)
-                    {                        
+                    {
                         self.delay = 2;
                         self.sound_nexttime = time + 6.486500; //soundlength("vehicles/spiderbot_strafe.wav");
                         sound (self, CH_TRIGGER_SINGLE, "vehicles/spiderbot_strafe.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
@@ -500,12 +499,8 @@ float spiderbot_frame()
             v_forward = normalize(v_forward);
             v += v_forward * 50;
 
-//void fireBallisticBullet(vector start, vector dir, float spread, float pSpeed, float lifetime, float damage, float force, float dtype, float tracereffects, float gravityfactor, float bulletconstant)
-
-            fireBallisticBullet(v, v_forward, autocvar_g_vehicle_spiderbot_minigun_spread, autocvar_g_vehicle_spiderbot_minigun_speed,
-                                5, autocvar_g_vehicle_spiderbot_minigun_damage, autocvar_g_vehicle_spiderbot_minigun_force, DEATH_VH_SPID_MINIGUN, 0, 1, autocvar_g_vehicle_spiderbot_minigun_bulletconstant);
-
-            endFireBallisticBullet();
+            fireBullet(v, v_forward, autocvar_g_vehicle_spiderbot_minigun_spread, autocvar_g_vehicle_spiderbot_minigun_solidpenetration,
+                                autocvar_g_vehicle_spiderbot_minigun_damage, autocvar_g_vehicle_spiderbot_minigun_force, DEATH_VH_SPID_MINIGUN, 0);
 
 //            fireBullet (v, v_forward, autocvar_g_vehicle_spiderbot_minigun_spread, autocvar_g_vehicle_spiderbot_minigun_damage,
 //                autocvar_g_vehicle_spiderbot_minigun_spread, DEATH_VH_SPID_MINIGUN, 0);
@@ -532,7 +527,7 @@ float spiderbot_frame()
         vehicles_regen(spider.cnt, vehicle_ammo1, autocvar_g_vehicle_spiderbot_minigun_ammo_max,
                                            autocvar_g_vehicle_spiderbot_minigun_ammo_regen_pause,
                                            autocvar_g_vehicle_spiderbot_minigun_ammo_regen, frametime, FALSE);
-        
+
 
     spiderbot_rocket_do();
 
@@ -559,7 +554,7 @@ float spiderbot_frame()
         VEHICLE_UPDATE_PLAYER(player, shield, spiderbot);
 
     self = player;
-    return 1;    
+    return 1;
 }
 void spiderbot_think()
 {
@@ -579,8 +574,8 @@ void spiderbot_enter()
 
     if(self.owner.flagcarried)
     {
-        setattachment(self.owner.flagcarried, self.tur_head, ""); 
-        setorigin(self.owner.flagcarried, '-20 0 120'); 
+        setattachment(self.owner.flagcarried, self.tur_head, "");
+        setorigin(self.owner.flagcarried, '-20 0 120');
     }
 }
 
@@ -588,7 +583,7 @@ void spiderbot_exit(float eject)
 {
     entity e;
     vector spot;
-    
+
     e = findchain(classname,"spiderbot_rocket");
     while(e)
     {
@@ -605,8 +600,8 @@ void spiderbot_exit(float eject)
     self.nextthink  = time;
     self.frame      = 5;
     self.movetype   = MOVETYPE_WALK;
-    
-    if not (self.owner)
+
+    if (!self.owner)
         return;
 
        makevectors(self.angles);
@@ -637,7 +632,7 @@ void spiderbot_exit(float eject)
            self.owner.oldvelocity = self.owner.velocity;
            setorigin(self.owner , spot);
        }
-       
+
        antilag_clear(self.owner);
     self.owner = world;
 }
@@ -677,7 +672,7 @@ void spiderbot_blowup()
         self.nextthink = time + 0.1;
         return;
     }
-    
+
     entity h, g1, g2, b;
     b = spawn();
     h = spawn();
@@ -764,12 +759,12 @@ float spiderbot_impulse(float _imp)
     switch(_imp)
     {
         case 10:
-        case 15:        
+        case 15:
         case 18:
             self.vehicle.vehicle_weapon2mode += 1;
             if(self.vehicle.vehicle_weapon2mode > SBRM_LAST)
                 self.vehicle.vehicle_weapon2mode = SBRM_FIRST;
-            
+
             //centerprint(self, strcat("Rocket mode is ", ftos(self.vehicle.vehicle_weapon2mode)));
             CSQCVehicleSetup(self, 0);
             return TRUE;
@@ -779,28 +774,28 @@ float spiderbot_impulse(float _imp)
             self.vehicle.vehicle_weapon2mode -= 1;
             if(self.vehicle.vehicle_weapon2mode < SBRM_FIRST)
                 self.vehicle.vehicle_weapon2mode = SBRM_LAST;
-            
+
             //centerprint(self, strcat("Rocket mode is ", ftos(self.vehicle.vehicle_weapon2mode)));
             CSQCVehicleSetup(self, 0);
             return TRUE;
 
-        /*                     
+        /*
         case 17: // toss gun, could be used to exit?
             break;
         case 20: // Manual minigun reload?
             break;
         */
-    }    
+    }
     return FALSE;
 }
 
 void spiderbot_spawn(float _f)
 {
     if(!self.gun1)
-    {        
+    {
         self.vehicles_impulse   = spiderbot_impulse;
         self.gun1               = spawn();
-        self.gun2               = spawn();    
+        self.gun2               = spawn();
         setmodel(self.gun1, "models/vehicles/spiderbot_barrels.dpm");
         setmodel(self.gun2, "models/vehicles/spiderbot_barrels.dpm");
         setattachment(self.gun1, self.tur_head, "tag_hardpoint01");
@@ -818,7 +813,7 @@ void spiderbot_spawn(float _f)
     self.movetype           = MOVETYPE_WALK;
     self.solid              = SOLID_SLIDEBOX;
     self.alpha              = self.tur_head.alpha = self.gun1.alpha = self.gun2.alpha = 1;
-    self.tur_head.angles    = '0 0 0';    
+    self.tur_head.angles    = '0 0 0';
 
     setorigin(self, self.pos1 + '0 0 128');
     self.angles = self.pos2;
@@ -832,12 +827,12 @@ void spawnfunc_vehicle_spiderbot()
     {
         remove(self);
         return;
-    }        
+    }
 
     self.vehicle_flags |= VHF_DMGSHAKE;
     //self.vehicle_flags |= VHF_DMGROLL;
     //self.vehicle_flags |= VHF_DMGHEADROLL;
-    
+
     precache_model ( "models/vhshield.md3");
     precache_model ( "models/vehicles/spiderbot.dpm");
     precache_model ( "models/vehicles/spiderbot_top.dpm");
@@ -847,7 +842,7 @@ void spawnfunc_vehicle_spiderbot()
 
     precache_sound ( "weapons/uzi_fire.wav" );
     precache_sound ( "weapons/rocket_impact.wav");
-    
+
     precache_sound ( "vehicles/spiderbot_die.wav");
     precache_sound ( "vehicles/spiderbot_idle.wav");
     precache_sound ( "vehicles/spiderbot_jump.wav");
@@ -863,8 +858,8 @@ void spawnfunc_vehicle_spiderbot()
 
     if(autocvar_g_vehicle_spiderbot_health_regen)
         self.vehicle_flags |= VHF_HEALTHREGEN;
-        
-    if not (vehicle_initialize(
+
+    if(!vehicle_initialize(
              "Spiderbot",
              "models/vehicles/spiderbot.dpm",
              "models/vehicles/spiderbot_top.dpm",
@@ -877,7 +872,7 @@ void spawnfunc_vehicle_spiderbot()
              spiderbot_frame,
              spiderbot_enter, spiderbot_exit,
              spiderbot_die,   spiderbot_think,
-             FALSE, 
+             FALSE,
              autocvar_g_vehicle_spiderbot_health,
              autocvar_g_vehicle_spiderbot_shield))
     {
index aa72658b512b2137442d85cbfc969e8f51f473b3..b9740b5d88bfa5bee49fc6589962ef61298ed672 100644 (file)
@@ -46,7 +46,7 @@ float SendAuxiliaryXhair(entity to, float sf)
 
 void UpdateAuxiliaryXhair(entity own, vector loc, vector clr, float axh_id)
 {
-    if not(IS_REAL_CLIENT(own))
+    if (!IS_REAL_CLIENT(own))
         return;
 
     entity axh;
@@ -101,15 +101,15 @@ void SendAuxiliaryXhair2(entity own, vector loc, vector clr, float axh_id)
 **/
 void CSQCVehicleSetup(entity own, float vehicle_id)
 {
-    if not(IS_REAL_CLIENT(own))
+    if (!IS_REAL_CLIENT(own))
         return;
-       
+
        msg_entity = own;
 
        WriteByte(MSG_ONE, SVC_TEMPENTITY);
        WriteByte(MSG_ONE, TE_CSQC_VEHICLESETUP);
        if(vehicle_id != 0)
-           WriteByte(MSG_ONE, vehicle_id);        
+           WriteByte(MSG_ONE, vehicle_id);
        else
         WriteByte(MSG_ONE, 1 + own.vehicle.vehicle_weapon2mode + HUD_VEHICLE_LAST);
 }
@@ -275,7 +275,7 @@ void vehicles_locktarget(float incr, float decr, float _lock_time)
         if(trace_ent.deadflag != DEAD_NO)
             trace_ent = world;
 
-        if not (trace_ent.vehicle_flags & VHF_ISVEHICLE ||
+        if(!trace_ent.vehicle_flags & VHF_ISVEHICLE ||
                                trace_ent.turrcaps_flags & TFL_TURRCAPS_ISTURRET ||
                                trace_ent.takedamage == DAMAGE_TARGETDRONE)
             trace_ent = world;
@@ -517,10 +517,10 @@ void vehicles_spawn()
     setorigin(self, self.pos1 + '0 0 0');
     // Show it
     pointparticles(particleeffectnum("teleport"), self.origin + '0 0 64', '0 0 0', 1);
-    
+
     if(self.vehicle_controller)
         self.team = self.vehicle_controller.team;
-       
+
     vehicles_reset_colors();
     self.vehicle_spawn(VHSF_NORMAL);
 }
@@ -564,7 +564,7 @@ void vehicles_touch()
 {
        if(MUTATOR_CALLHOOK(VehicleTouch))
                return;
-       
+
     // Vehicle currently in use
     if(self.owner)
     {
@@ -584,7 +584,7 @@ void vehicles_touch()
         return;
     }
 
-    if not(IS_PLAYER(other))
+    if (!IS_PLAYER(other))
         return;
 
     if(other.deadflag != DEAD_NO)
@@ -599,8 +599,8 @@ var float autocvar_g_vehicles_allow_bots = 0;
 void vehicles_enter()
 {
    // Remove this when bots know how to use vehicles
-   
-    if (IS_BOT_CLIENT(other))    
+
+    if (IS_BOT_CLIENT(other))
         if (autocvar_g_vehicles_allow_bots)
             dprint("Bot enters vehicle\n"); // This is where we need to disconnect (some, all?) normal bot AI and hand over to vehicle's _aiframe()
         else
@@ -661,13 +661,13 @@ void vehicles_enter()
 
     self.team                 = self.owner.team;
     self.flags               -= FL_NOTARGET;
-    
+
     if (IS_REAL_CLIENT(other))
     {
         msg_entity = other;
         WriteByte (MSG_ONE, SVC_SETVIEWPORT);
         WriteEntity(MSG_ONE, self.vehicle_viewport);
-                
+
         WriteByte (MSG_ONE, SVC_SETVIEWANGLES);
         if(self.tur_head)
         {
@@ -686,7 +686,7 @@ void vehicles_enter()
     vehicles_clearreturn();
 
     CSQCVehicleSetup(self.owner, self.hud);
-    
+
     vh_player = other;
     vh_vehicle = self;
     MUTATOR_CALLHOOK(VehicleEnter);
@@ -760,31 +760,31 @@ void vehicles_exit(float eject)
     entity _vehicle;
     entity _player;
     entity _oldself = self;
-    
+
     if(vehicles_exit_running)
     {
         dprint("^1vehicles_exit allready running! this is not good..\n");
         return;
     }
-    
+
     vehicles_exit_running = TRUE;
     if(IS_CLIENT(self))
     {
         _vehicle = self.vehicle;
-            
+
         if (_vehicle.vehicle_flags & VHF_PLAYERSLOT)
         {
             _vehicle.vehicle_exit(eject);
             self = _oldself;
             vehicles_exit_running = FALSE;
-            return;            
+            return;
         }
     }
     else
         _vehicle = self;
-    
+
     _player = _vehicle.owner;
-    
+
     self = _vehicle;
 
     if (_player)
@@ -800,7 +800,7 @@ void vehicles_exit(float eject)
             WriteAngle(MSG_ONE, _vehicle.angles_y);
             WriteAngle(MSG_ONE, 0);
         }
-        
+
         setsize(_player, PL_MIN,PL_MAX);
 
         _player.takedamage     = DAMAGE_AIM;
@@ -818,12 +818,12 @@ void vehicles_exit(float eject)
         CSQCVehicleSetup(_player, HUD_NORMAL);
     }
     _vehicle.flags |= FL_NOTARGET;
-    
+
     if(_vehicle.deadflag == DEAD_NO)
         _vehicle.avelocity          = '0 0 0';
-    
+
     _vehicle.tur_head.nodrawtoclient             = world;
-    
+
     if(!teamplay)
         _vehicle.team = 0;
 
@@ -834,18 +834,18 @@ void vehicles_exit(float eject)
     _vehicle = vh_vehicle;
 
     _vehicle.team = _vehicle.tur_head.team;
-        
+
     sound (_vehicle, CH_TRIGGER_SINGLE, "misc/null.wav", 1, ATTEN_NORM);
-    _vehicle.vehicle_hudmodel.viewmodelforclient = _vehicle;   
+    _vehicle.vehicle_hudmodel.viewmodelforclient = _vehicle;
     _vehicle.phase = time + 1;
-    
+
     _vehicle.vehicle_exit(eject);
-    
+
     vehicles_setreturn();
-    vehicles_reset_colors();        
+    vehicles_reset_colors();
     _vehicle.owner = world;
     self = _oldself;
-    
+
     vehicles_exit_running = FALSE;
 }
 
@@ -857,7 +857,7 @@ void vehicles_regen(float timer, .float regen_field, float field_max, float rpau
     {
         if(_healthscale)
             regen = regen * (self.vehicle_health / self.tur_health);
-            
+
         self.regen_field = min(self.regen_field + regen * delta_time, field_max);
 
         if(self.owner)
@@ -905,24 +905,24 @@ void vehicles_painframe()
 void vehicles_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
 {
     self.dmg_time = time;
-    
+
     if(DEATH_ISWEAPON(deathtype, WEP_NEX))
         damage *= autocvar_g_vehicles_nex_damagerate;
-        
+
     if(DEATH_ISWEAPON(deathtype, WEP_UZI))
         damage *= autocvar_g_vehicles_uzi_damagerate;
-        
+
     if(DEATH_ISWEAPON(deathtype, WEP_RIFLE))
         damage *= autocvar_g_vehicles_rifle_damagerate;
-        
+
     if(DEATH_ISWEAPON(deathtype, WEP_MINSTANEX))
         damage *= autocvar_g_vehicles_minstanex_damagerate;
 
     if(DEATH_ISWEAPON(deathtype, WEP_SEEKER))
         damage *= autocvar_g_vehicles_tag_damagerate;
-    
+
     self.enemy = attacker;
-    
+
     if((self.vehicle_flags & VHF_HASSHIELD) && (self.vehicle_shield > 0))
     {
         if (wasfreed(self.vehicle_shieldent) || self.vehicle_shieldent == world)
@@ -967,7 +967,7 @@ void vehicles_damage(entity inflictor, entity attacker, float damage, float deat
         if(sound_allowed(MSG_BROADCAST, attacker))
             spamsound (self, CH_PAIN, "onslaught/ons_hit2.wav", VOL_BASE, ATTEN_NORM);  // FIXME: PLACEHOLDER
     }
-    
+
        if(self.damageforcescale < 1 && self.damageforcescale > 0)
                self.velocity += force * self.damageforcescale;
        else
@@ -1155,7 +1155,7 @@ void vehicle_use()
         self.active = ACTIVE_NOT;
     else
         self.active = ACTIVE_ACTIVE;
-    
+
     if(self.active == ACTIVE_ACTIVE && self.deadflag == DEAD_NO)
     {
         dprint("^3Eat shit yall!\n");
@@ -1164,18 +1164,18 @@ void vehicle_use()
     }
     else if(self.active == ACTIVE_NOT && self.deadflag != DEAD_NO)
     {
-        
+
     }
 }
 
-float vehicle_addplayerslot(    entity _owner, 
-                                entity _slot, 
-                                float _hud, 
+float vehicle_addplayerslot(    entity _owner,
+                                entity _slot,
+                                float _hud,
                                 string _hud_model,
-                                float() _framefunc, 
+                                float() _framefunc,
                                 void(float) _exitfunc)
 {
-    if not (_owner.vehicle_flags & VHF_MULTISLOT)
+    if (!(_owner.vehicle_flags & VHF_MULTISLOT))
         _owner.vehicle_flags |= VHF_MULTISLOT;
 
     _slot.PlayerPhysplug = _framefunc;
@@ -1186,13 +1186,13 @@ float vehicle_addplayerslot(    entity _owner,
     _slot.vehicle_hudmodel = spawn();
     _slot.vehicle_hudmodel.viewmodelforclient = _slot;
     _slot.vehicle_viewport.effects = (EF_ADDITIVE | EF_DOUBLESIDED | EF_FULLBRIGHT | EF_NODEPTHTEST | EF_NOGUNBOB | EF_NOSHADOW | EF_LOWPRECISION | EF_SELECTABLE | EF_TELEPORT_BIT);
-    
+
     setmodel(_slot.vehicle_hudmodel, _hud_model);
     setmodel(_slot.vehicle_viewport, "null");
-    
+
     setattachment(_slot.vehicle_hudmodel, _slot, "");
     setattachment(_slot.vehicle_viewport, _slot.vehicle_hudmodel, "");
-    
+
     return TRUE;
 }
 
@@ -1220,7 +1220,7 @@ float vehicle_initialize(string  net_name,
 {
        if(!autocvar_g_vehicles)
                return FALSE;
-       
+
     if(self.targetname)
     {
         self.vehicle_controller = find(world, target, self.targetname);
@@ -1230,19 +1230,19 @@ float vehicle_initialize(string  net_name,
         }
         else
         {
-            self.team = self.vehicle_controller.team;        
+            self.team = self.vehicle_controller.team;
             self.use = vehicle_use;
-            
+
             if(teamplay)
             {
                 if(self.vehicle_controller.team == 0)
                     self.active = ACTIVE_NOT;
                 else
-                    self.active = ACTIVE_ACTIVE;                
+                    self.active = ACTIVE_ACTIVE;
             }
         }
     }
-    
+
     precache_sound("onslaught/ons_hit2.wav");
     precache_sound("onslaught/electricity_explode.wav");
 
@@ -1331,25 +1331,25 @@ float vehicle_initialize(string  net_name,
     }
 
     setsize(self, min_s, max_s);
-    if not (nodrop)
+    if (!nodrop)
     {
         setorigin(self, self.origin);
         tracebox(self.origin + '0 0 100', min_s, max_s, self.origin - '0 0 10000', MOVE_WORLDONLY, self);
         setorigin(self, trace_endpos);
     }
-    
+
     self.pos1 = self.origin;
     self.pos2 = self.angles;
     self.tur_head.team = self.team;
-       
+
        if(MUTATOR_CALLHOOK(VehicleSpawn))
                return FALSE;
 
     return TRUE;
 }
 
-vector vehicle_aimturret(entity _vehic, vector _target, entity _turrret, string _tagname, 
-                         float _pichlimit_min, float _pichlimit_max, 
+vector vehicle_aimturret(entity _vehic, vector _target, entity _turrret, string _tagname,
+                         float _pichlimit_min, float _pichlimit_max,
                          float _rotlimit_min, float _rotlimit_max, float _aimspeed)
 {
     vector vtmp, vtag;
@@ -1361,7 +1361,7 @@ vector vehicle_aimturret(entity _vehic, vector _target, entity _turrret, string
     ftmp = _aimspeed * frametime;
     vtmp_y = bound(-ftmp, vtmp_y, ftmp);
     vtmp_x = bound(-ftmp, vtmp_x, ftmp);
-    _turrret.angles_y = bound(_rotlimit_min, _turrret.angles_y + vtmp_y, _rotlimit_max);    
+    _turrret.angles_y = bound(_rotlimit_min, _turrret.angles_y + vtmp_y, _rotlimit_max);
     _turrret.angles_x = bound(_pichlimit_min, _turrret.angles_x + vtmp_x, _pichlimit_max);
     return vtag;
 }
@@ -1391,23 +1391,23 @@ entity vehicle_tossgib(entity _template, vector _vel, string _tag, float _burn,
        _gib.movetype = MOVETYPE_TOSS;
        _gib.solid = SOLID_CORPSE;
        _gib.colormod = '-0.5 -0.5 -0.5';
-       _gib.effects = EF_LOWPRECISION; 
+       _gib.effects = EF_LOWPRECISION;
        _gib.avelocity = _rot;
-       
+
        if(_burn)
                _gib.effects |= EF_FLAME;
-       
+
        if(_explode)
        {
-               _gib.think = vehicles_gib_explode; 
+               _gib.think = vehicles_gib_explode;
                _gib.nextthink = time + random() * _explode;
                _gib.touch = vehicles_gib_explode;
        }
        else
        {
                _gib.cnt = time + _maxtime;
-               _gib.think = vehicles_gib_think; 
-               _gib.nextthink = time + _maxtime - 1;           
+               _gib.think = vehicles_gib_think;
+               _gib.nextthink = time + _maxtime - 1;
                _gib.alpha = 1;
        }
        return _gib;
index 2eca8c2cbbd03e64eaede7854ca99b2b7ad67b75..f51db6dd5dc48708f8c7477804fea7179b30d811 100644 (file)
@@ -35,9 +35,6 @@ void FireRailgunBullet (vector start, vector end, float bdamage, float bforce, f
 
        pseudoprojectile = world;
 
-       railgun_start = start;
-       railgun_end = end;
-
        dir = normalize(end - start);
        length = vlen(end - start);
        force = dir * bforce;
@@ -104,7 +101,10 @@ void FireRailgunBullet (vector start, vector end, float bdamage, float bforce, f
        // Find all non-hit players the beam passed close by
        if(deathtype == WEP_MINSTANEX || deathtype == WEP_NEX)
        {
-               FOR_EACH_REALCLIENT(msg_entity) if(msg_entity != self) if(!msg_entity.railgunhit) if not(IS_SPEC(msg_entity) && msg_entity.enemy == self) // we use realclient, so spectators can hear the whoosh too
+               FOR_EACH_REALCLIENT(msg_entity)
+               if(msg_entity != self)
+               if(!msg_entity.railgunhit)
+               if(!(IS_SPEC(msg_entity) && msg_entity.enemy == self)) // we use realclient, so spectators can hear the whoosh too
                {
                        // nearest point on the beam
                        beampos = start + dir * bound(0, (msg_entity.origin - start) * dir, length);
@@ -162,412 +162,150 @@ void FireRailgunBullet (vector start, vector end, float bdamage, float bforce, f
        trace_dphitq3surfaceflags = endq3surfaceflags;
 }
 
-.float dmg_force;
-.float dmg_radius;
-.float dmg_total;
-//.float last_yoda;
-void W_BallisticBullet_Hit (void)
-{
-       float f, q, g;
-
-       f = pow(bound(0, vlen(self.velocity) / vlen(self.oldvelocity), 1), 2); // energy multiplier
-       q = 1 + self.dmg_edge / self.dmg;
-
-       if(other.solid == SOLID_BSP || other.solid == SOLID_SLIDEBOX)
-               Damage_DamageInfo(self.origin, self.dmg * f, 0, 0, max(1, self.dmg_force) * normalize(self.velocity) * f, self.projectiledeathtype, other.species, self);
-
-       if(other && other != self.enemy)
-       {
-               endzcurveparticles();
-
-               yoda = 0;
-               railgun_start = self.origin - 2 * frametime * self.velocity;
-               railgun_end = self.origin + 2 * frametime * self.velocity;
-               g = accuracy_isgooddamage(self.realowner, other);
-               Damage(other, self, self.realowner, self.dmg * f, self.projectiledeathtype, self.origin, self.dmg_force * normalize(self.velocity) * f);
-
-               /*if(yoda && (time > (self.last_yoda + 5)))
-               {
-                       Send_Notification(NOTIF_ONE, self.realowner, MSG_ANNCE, ANNCE_ACHIEVEMENT_YODA);
-                       self.last_yoda = time; 
-               }*/
-
-               // calculate hits for ballistic weapons
-               if(g)
-               {
-                       // do not exceed 100%
-                       q = min(self.dmg * q, self.dmg_total + f * self.dmg) - self.dmg_total;
-                       self.dmg_total += f * self.dmg;
-                       accuracy_add(self.realowner, self.realowner.weapon, 0, q);
-               }
-       }
-
-       self.enemy = other; // don't hit the same player twice with the same bullet
-}
-
-.void(void) W_BallisticBullet_LeaveSolid_think_save;
-.float W_BallisticBullet_LeaveSolid_nextthink_save;
-.vector W_BallisticBullet_LeaveSolid_origin;
-.vector W_BallisticBullet_LeaveSolid_velocity;
-
-void W_BallisticBullet_LeaveSolid_think()
-{
-       setorigin(self, self.W_BallisticBullet_LeaveSolid_origin);
-       self.velocity = self.W_BallisticBullet_LeaveSolid_velocity;
-
-       self.think = self.W_BallisticBullet_LeaveSolid_think_save;
-       self.nextthink = max(time, self.W_BallisticBullet_LeaveSolid_nextthink_save);
-       self.W_BallisticBullet_LeaveSolid_think_save = func_null;
-
-       self.flags &= ~FL_ONGROUND;
-
-       if(self.enemy.solid == SOLID_BSP)
-       {
-               float f;
-               f = pow(bound(0, vlen(self.velocity) / vlen(self.oldvelocity), 1), 2); // energy multiplier
-               Damage_DamageInfo(self.origin, 0, 0, 0, max(1, self.dmg_force) * normalize(self.velocity) * -f, self.projectiledeathtype, 0, self);
-       }
-
-       UpdateCSQCProjectile(self);
-}
-
-float W_BallisticBullet_LeaveSolid(float eff)
-{
-       // move the entity along its velocity until it's out of solid, then let it resume
-       vector vel = self.velocity;
-       float dt, dst, velfactor, v0, vs;
-       float maxdist;
-       float E0_m, Es_m;
-       float constant = self.dmg_radius * (other.ballistics_density ? other.ballistics_density : 1);
-
-       // outside the world? forget it
-       if(self.origin_x > world.maxs_x || self.origin_y > world.maxs_y || self.origin_z > world.maxs_z || self.origin_x < world.mins_x || self.origin_y < world.mins_y || self.origin_z < world.mins_z)
-               return 0;
-
-       // special case for zero density and zero bullet constant: 
-
-       if(self.dmg_radius == 0)
-       {
-               if(other.ballistics_density < 0)
-                       constant = 0; // infinite travel distance
-               else
-                       return 0; // no penetration
-       }
-       else
-       {
-               if(other.ballistics_density < 0)
-                       constant = 0; // infinite travel distance
-               else if(other.ballistics_density == 0)
-                       constant = self.dmg_radius;
-               else
-                       constant = self.dmg_radius * other.ballistics_density;
-       }
-
-       // E(s) = E0 - constant * s, constant = area of bullet circle * material constant / mass
-       v0 = vlen(vel);
-
-       E0_m = 0.5 * v0 * v0;
-
-       if(constant)
-       {
-               maxdist = E0_m / constant;
-               // maxdist = 0.5 * v0 * v0 / constant
-               // dprint("max dist = ", ftos(maxdist), "\n");
-
-               if(maxdist <= autocvar_g_ballistics_mindistance)
-                       return 0;
-       }
-       else
-       {
-               maxdist = vlen(other.maxs - other.mins) + 1; // any distance, as long as we leave the entity
-       }
-
-       traceline_inverted (self.origin, self.origin + normalize(vel) * maxdist, MOVE_NORMAL, self, TRUE);
-       if(trace_fraction == 1) // 1: we never got out of solid
-               return 0;
-
-       self.W_BallisticBullet_LeaveSolid_origin = trace_endpos;
-
-       dst = max(autocvar_g_ballistics_mindistance, vlen(trace_endpos - self.origin));
-       // E(s) = E0 - constant * s, constant = area of bullet circle * material constant / mass
-       Es_m = E0_m - constant * dst;
-       if(Es_m <= 0)
-       {
-               // roundoff errors got us
-               return 0;
-       }
-       vs = sqrt(2 * Es_m);
-       velfactor = vs / v0;
-
-       dt = dst / (0.5 * (v0 + vs));
-       // this is not correct, but the differential equations have no analytic
-       // solution - and these times are very small anyway
-       //print("dt = ", ftos(dt), "\n");
-
-       self.W_BallisticBullet_LeaveSolid_think_save = self.think;
-       self.W_BallisticBullet_LeaveSolid_nextthink_save = self.nextthink;
-       self.think = W_BallisticBullet_LeaveSolid_think;
-       self.nextthink = time + dt;
-
-       vel = vel * velfactor;
-
-       self.velocity = '0 0 0';
-       self.flags |= FL_ONGROUND; // prevent moving
-       self.W_BallisticBullet_LeaveSolid_velocity = vel;
-
-       if(eff >= 0)
-               if(vlen(trace_endpos - self.origin) > 4)
-               {
-                       endzcurveparticles();
-                       trailparticles(self, eff, self.origin, trace_endpos);
-               }
-
-       return 1;
-}
-
-void W_BallisticBullet_Touch (void)
-{
-       //float density;
-
-       if(self.think == W_BallisticBullet_LeaveSolid_think) // skip this!
-               return;
-
-       PROJECTILE_TOUCH;
-       W_BallisticBullet_Hit ();
-
-       if(self.dmg_radius < 0) // these NEVER penetrate solid
-       {
-               remove(self);
-               return;
-       }
-
-       // if we hit "weapclip", bail out
-       //
-       // rationale of this check:
-       //
-       // any shader that is solid, nodraw AND trans is meant to clip weapon
-       // shots and players, but has no other effect!
-       //
-       // if it is not trans, it is caulk and should not have this side effect
-       //
-       // matching shaders:
-       //   common/weapclip (intended)
-       //   common/noimpact (is supposed to eat projectiles, but is erased farther above)
-       if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NODRAW)
-       if not(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NONSOLID)
-       if not(trace_dphitcontents & DPCONTENTS_OPAQUE)
-       {
-               remove(self);
-               return;
-       }
-
-       // go through solid!
-       if(!W_BallisticBullet_LeaveSolid(-1))
-       {
-               remove(self);
-               return;
-       }
-
-       self.projectiledeathtype |= HITTYPE_BOUNCE;
-}
-
-void endFireBallisticBullet()
-{
-       endzcurveparticles();
-}
-
-entity fireBallisticBullet_trace_callback_ent;
-float fireBallisticBullet_trace_callback_eff;
-void fireBallisticBullet_trace_callback(vector start, vector hit, vector end)
+float fireBullet_trace_callback_eff;
+entity fireBullet_last_hit;
+void fireBullet_trace_callback(vector start, vector hit, vector end)
 {
-       if(vlen(trace_endpos - fireBallisticBullet_trace_callback_ent.origin) > 16)
-               zcurveparticles_from_tracetoss(fireBallisticBullet_trace_callback_eff, fireBallisticBullet_trace_callback_ent.origin, trace_endpos, fireBallisticBullet_trace_callback_ent.velocity);
+       if(vlen(hit - start) > 16)
+               trailparticles(world, fireBullet_trace_callback_eff, start, hit);
        WarpZone_trace_forent = world;
-       self.owner = world;
+       fireBullet_last_hit = world;
 }
 
-void fireBallisticBullet(vector start, vector dir, float spread, float pSpeed, float lifetime, float damage, float force, float dtype, float tracereffects, float gravityfactor, float bulletconstant)
+void fireBullet(vector start, vector dir, float spread, float max_solid_penetration, float damage, float force, float dtype, float tracereffects)
 {
-       float lag, dt, savetime; //, density;
-       entity pl, oldself;
-       float antilagging;
-
-       antilagging = (autocvar_g_antilag_bullets && (pSpeed >= autocvar_g_antilag_bullets));
-
-       entity proj;
-       proj = spawn();
-       proj.classname = "bullet";
-       proj.owner = proj.realowner = self;
-       PROJECTILE_MAKETRIGGER(proj);
-       if(gravityfactor > 0)
-       {
-               proj.movetype = MOVETYPE_TOSS;
-               proj.gravity = gravityfactor;
-       }
-       else
-               proj.movetype = MOVETYPE_FLY;
-       proj.think = SUB_Remove;
-       proj.nextthink = time + lifetime; // min(pLifetime, vlen(world.maxs - world.mins) / pSpeed);
-       W_SetupProjectileVelocityEx(proj, dir, v_up, pSpeed, 0, 0, spread, antilagging);
-       proj.angles = vectoangles(proj.velocity);
-       if(bulletconstant > 0)
-               proj.dmg_radius = autocvar_g_ballistics_materialconstant / bulletconstant;
-       else if(bulletconstant == 0)
-               proj.dmg_radius = 0;
-       else
-               proj.dmg_radius = -1;
-       // so: bulletconstant = bullet mass / area of bullet circle
-       setorigin(proj, start);
-       proj.flags = FL_PROJECTILE;
-
-       proj.touch = W_BallisticBullet_Touch;
-       proj.dmg = damage;
-       proj.dmg_force = force;
-       proj.projectiledeathtype = dtype;
+       // TODO antilag takeback
+       vector  end;
 
-       proj.oldvelocity = proj.velocity;
+       dir = normalize(dir + randomvec() * spread);
+       end = start + dir * MAX_SHOT_DISTANCE;
 
-       other = proj; MUTATOR_CALLHOOK(EditProjectile);
+       entity pl;
+       fireBullet_last_hit = world;
+       float solid_penetration_left = 1;
+       float total_damage = 0;
 
-       if(antilagging)
+       if(tracereffects & EF_RED)
+               fireBullet_trace_callback_eff = particleeffectnum("tr_rifle");
+       else if(tracereffects & EF_BLUE)
+               fireBullet_trace_callback_eff = particleeffectnum("tr_rifle_weak");
+       else
+               fireBullet_trace_callback_eff = particleeffectnum("tr_bullet");
+
+       float lag = ANTILAG_LATENCY(self);
+       if(lag < 0.001)
+               lag = 0;
+       if (!IS_REAL_CLIENT(self))
+               lag = 0;
+       if(autocvar_g_antilag == 0 || self.cvar_cl_noantilag)
+               lag = 0; // only do hitscan, but no antilag
+       if(lag)
+               FOR_EACH_PLAYER(pl)
+                       if(pl != self)
+                               antilag_takeback(pl, time - lag);
+
+       WarpZone_trace_forent = self;
+
+       for (;;)
        {
-               float eff;
-
-               if(tracereffects & EF_RED)
-                       eff = particleeffectnum("tr_rifle");
-               else if(tracereffects & EF_BLUE)
-                       eff = particleeffectnum("tr_rifle_weak");
-               else
-                       eff = particleeffectnum("tr_bullet");
-
-               // NOTE: this may severely throw off weapon balance
-               lag = ANTILAG_LATENCY(self);
-               if(lag < 0.001)
-                       lag = 0;
-               if not(IS_REAL_CLIENT(self))
-                       lag = 0;
-               if(autocvar_g_antilag == 0 || self.cvar_cl_noantilag)
-                       lag = 0; // only do hitscan, but no antilag
-
-               if(lag)
-                       FOR_EACH_PLAYER(pl)
-                               if(pl != self)
-                                       antilag_takeback(pl, time - lag);
-
-               oldself = self;
-               self = proj;
+               // TODO also show effect while tracing
+               WarpZone_TraceBox_ThroughZone(start, '0 0 0', '0 0 0', end, FALSE, WarpZone_trace_forent, world, fireBullet_trace_callback);
+               dir = WarpZone_TransformVelocity(WarpZone_trace_transform, dir);
+               end = WarpZone_TransformOrigin(WarpZone_trace_transform, end);
+               start = trace_endpos;
+               entity hit = trace_ent;
+
+               // When hitting sky, stop.
+               if (pointcontents(start) == CONTENT_SKY)
+                       break;
 
-               savetime = frametime;
-               frametime = 0.05;
+               if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
+                       break;
 
-               for(;;)
+               // if we hit "weapclip", bail out
+               //
+               // rationale of this check:
+               //
+               // any shader that is solid, nodraw AND trans is meant to clip weapon
+               // shots and players, but has no other effect!
+               //
+               // if it is not trans, it is caulk and should not have this side effect
+               //
+               // matching shaders:
+               //   common/weapclip (intended)
+               //   common/noimpact (is supposed to eat projectiles, but is erased anyway)
+               float is_weapclip = 0;
+               if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NODRAW)
+               if (!(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NONSOLID))
+               if (!(trace_dphitcontents & DPCONTENTS_OPAQUE))
+                       is_weapclip = 1;
+
+               if(!hit || hit.solid == SOLID_BSP || hit.solid == SOLID_SLIDEBOX)
+                       Damage_DamageInfo(start, damage * solid_penetration_left, 0, 0, max(1, force) * dir * solid_penetration_left, dtype, hit.species, self);
+
+               if (hit && hit != WarpZone_trace_forent && hit != fireBullet_last_hit)  // Avoid self-damage (except after going through a warp); avoid hitting the same entity twice (engine bug).
                {
-                       // DP tracetoss is stupid and always traces in 0.05s
-                       // ticks. This makes it trace in 0.05*0.125s ticks
-                       // instead.
-                       vector v0;
-                       float g0;
-                       v0 = self.velocity;
-                       g0 = self.gravity;
-                       self.velocity = self.velocity * 0.125;
-                       self.gravity *= 0.125 * 0.125;
-                       trace_fraction = 0;
-                       fireBallisticBullet_trace_callback_ent = self;
-                       fireBallisticBullet_trace_callback_eff = eff;
-                       WarpZone_TraceToss_ThroughZone(self, self.owner, world, fireBallisticBullet_trace_callback);
-                       self.velocity = v0;
-                       self.gravity = g0;
-
-                       if(trace_fraction == 1)
-                               break;
-                               // won't hit anything anytime soon (DP's
-                               // tracetoss does 200 tics of, here,
-                               // 0.05*0.125s, that is, 1.25 seconds
-
-                       other = trace_ent;
-                       dt = WarpZone_tracetoss_time * 0.125; // this is only approximate!
-                       setorigin(self, trace_endpos);
-                       self.velocity = WarpZone_tracetoss_velocity * (1 / 0.125);
-
-                       if(!SUB_OwnerCheck())
+                       fireBullet_last_hit = hit;
+                       yoda = 0;
+                       float g = accuracy_isgooddamage(self, hit);
+                       Damage(hit, self, self, damage * solid_penetration_left, dtype, start, force * dir * solid_penetration_left);
+                       // calculate hits for ballistic weapons
+                       if(g)
                        {
-                               if(SUB_NoImpactCheck())
-                                       break;
-
-                               // hit the player
-                               W_BallisticBullet_Hit();
+                               // do not exceed 100%
+                               float added_damage = min(damage - total_damage, damage * solid_penetration_left);
+                               total_damage += damage * solid_penetration_left;
+                               accuracy_add(self, self.weapon, 0, added_damage);
                        }
-
-                       if(proj.dmg_radius < 0) // these NEVER penetrate solid
-                               break;
-
-                       // if we hit "weapclip", bail out
-                       //
-                       // rationale of this check:
-                       //
-                       // any shader that is solid, nodraw AND trans is meant to clip weapon
-                       // shots and players, but has no other effect!
-                       //
-                       // if it is not trans, it is caulk and should not have this side effect
-                       //
-                       // matching shaders:
-                       //   common/weapclip (intended)
-                       //   common/noimpact (is supposed to eat projectiles, but is erased farther above)
-                       if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NODRAW)
-                       if not(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NONSOLID)
-                       if not(trace_dphitcontents & DPCONTENTS_OPAQUE)
-                               break;
-
-                       // go through solid!
-                       if(!W_BallisticBullet_LeaveSolid((other && (other.solid != SOLID_BSP)) ? eff : -1))
-                               break;
-
-                       W_BallisticBullet_LeaveSolid_think();
-
-                       self.projectiledeathtype |= HITTYPE_BOUNCE;
                }
-               frametime = savetime;
-               self = oldself;
 
-               if(lag)
-                       FOR_EACH_PLAYER(pl)
-                               if(pl != self)
-                                       antilag_restore(pl);
+               if (is_weapclip)
+                       break;
 
-               remove(proj);
+               // go through solid!
+               // outside the world? forget it
+               if(start_x > world.maxs_x || start_y > world.maxs_y || start_z > world.maxs_z || start_x < world.mins_x || start_y < world.mins_y || start_z < world.mins_z)
+                       break;
 
-               return;
-       }
+               float maxdist;
+               if(max_solid_penetration < 0)
+                       break;
+               else if(hit.ballistics_density < -1)
+                       break; // -2: no solid penetration, ever
+               else if(hit.ballistics_density < 0)
+                       maxdist = vlen(hit.maxs - hit.mins) + 1; // -1: infinite travel distance
+               else if(hit.ballistics_density == 0)
+                       maxdist = max_solid_penetration * solid_penetration_left;
+               else
+                       maxdist = max_solid_penetration * solid_penetration_left * hit.ballistics_density;
 
-       if(tracereffects & EF_RED)
-               CSQCProjectile(proj, TRUE, PROJECTILE_BULLET_GLOWING_TRACER, TRUE);
-       else if(tracereffects & EF_BLUE)
-               CSQCProjectile(proj, TRUE, PROJECTILE_BULLET_GLOWING, TRUE);
-       else
-               CSQCProjectile(proj, TRUE, PROJECTILE_BULLET, TRUE);
-}
+               if(maxdist <= autocvar_g_ballistics_mindistance)
+                       break;
 
-void fireBullet (vector start, vector dir, float spread, float damage, float force, float dtype, float tracer)
-{
-       vector  end;
+               // move the entity along its velocity until it's out of solid, then let it resume
+               // The previously hit entity is ignored here!
+               traceline_inverted (start, start + dir * maxdist, MOVE_NORMAL, WarpZone_trace_forent, TRUE, hit);
+               if(trace_fraction == 1) // 1: we never got out of solid
+                       break;
 
-       dir = normalize(dir + randomvec() * spread);
-       end = start + dir * MAX_SHOT_DISTANCE;
-       if(self.antilag_debug)
-               traceline_antilag (self, start, end, FALSE, self, self.antilag_debug);
-       else
-               traceline_antilag (self, start, end, FALSE, self, ANTILAG_LATENCY(self));
+               float dist_taken = max(autocvar_g_ballistics_mindistance, vlen(trace_endpos - start));
+               solid_penetration_left *= (dist_taken / maxdist);
 
-       end = trace_endpos;
+               // Only show effect when going through a player (invisible otherwise)
+               if (hit && (hit.solid != SOLID_BSP))
+                       if(vlen(trace_endpos - start) > 4)
+                               trailparticles(self, fireBullet_trace_callback_eff, start, trace_endpos);
 
-       if (pointcontents (trace_endpos) != CONTENT_SKY)
-       {
-               if not (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
-                       Damage_DamageInfo(trace_endpos, damage, 0, 0, dir * max(1, force), dtype, trace_ent.species, self);                    
+               start = trace_endpos;
 
-               Damage (trace_ent, self, self, damage, dtype, trace_endpos, dir * force);
+               if(hit.solid == SOLID_BSP)
+                       Damage_DamageInfo(start, 0, 0, 0, max(1, force) * normalize(dir) * -solid_penetration_left, dtype, 0, self);
        }
-       trace_endpos = end;
+
+       if(lag)
+               FOR_EACH_PLAYER(pl)
+                       if(pl != self)
+                               antilag_restore(pl);
 }
 
 float W_CheckProjectileDamage(entity inflictor, entity projowner, float deathtype, float exception)
@@ -575,7 +313,7 @@ float W_CheckProjectileDamage(entity inflictor, entity projowner, float deathtyp
        float is_from_contents = (deathtype == DEATH_SLIME || deathtype == DEATH_LAVA);
        float is_from_owner = (inflictor == projowner);
        float is_from_exception = (exception != -1);
-       
+
        //dprint(strcat("W_CheckProjectileDamage: from_contents ", ftos(is_from_contents), " : from_owner ", ftos(is_from_owner), " : exception ", strcat(ftos(is_from_exception), " (", ftos(exception), "). \n")));
 
        if(autocvar_g_projectiles_damage <= -2)
@@ -593,14 +331,14 @@ float W_CheckProjectileDamage(entity inflictor, entity projowner, float deathtyp
        {
                if(is_from_exception)
                        return (exception); // if exception is detected, allow it to override
-               else if not(is_from_contents)
+               else if (!is_from_contents)
                        return FALSE; // otherwise, only allow damage from contents
-       }       
+       }
        else if(autocvar_g_projectiles_damage == 1)
        {
                if(is_from_exception)
                        return (exception); // if exception is detected, allow it to override
-               else if not(is_from_contents || is_from_owner)
+               else if (!(is_from_contents || is_from_owner))
                        return FALSE; // otherwise, only allow self damage and damage from contents
        }
        else if(autocvar_g_projectiles_damage == 2) // allow any damage, but override for exceptions
@@ -616,13 +354,13 @@ void W_PrepareExplosionByDamage(entity attacker, void() explode)
 {
        self.takedamage = DAMAGE_NO;
        self.event_damage = func_null;
-       
+
        if(IS_CLIENT(attacker) && !autocvar_g_projectiles_keep_owner)
        {
                self.owner = attacker;
                self.realowner = attacker;
        }
-       
+
        // do not explode NOW but in the NEXT FRAME!
        // because recursive calls to RadiusDamage are not allowed
        self.nextthink = time;
index 80af85acf34a3af5a65c631803aec4e2174aa70f..f7ad7583d16ba3727695b790db428fd065be2886 100644 (file)
@@ -241,7 +241,7 @@ float W_Crylink_Touch_WouldHitFriendly(entity projectile, float rad)
                        else
                                ++hit_enemy;
                }
-                       
+
                head = head.chain;
        }
 
@@ -267,7 +267,7 @@ void W_Crylink_Touch (void)
                f *= a;
 
        float totaldamage = RadiusDamage(self, self.realowner, autocvar_g_balance_crylink_primary_damage * f, autocvar_g_balance_crylink_primary_edgedamage * f, autocvar_g_balance_crylink_primary_radius, world, autocvar_g_balance_crylink_primary_force * f, self.projectiledeathtype, other);
-       
+
        if(totaldamage && ((autocvar_g_balance_crylink_primary_linkexplode == 2) || ((autocvar_g_balance_crylink_primary_linkexplode == 1) && !W_Crylink_Touch_WouldHitFriendly(self, autocvar_g_balance_crylink_primary_radius))))
        {
                if(self == self.realowner.crylink_lastgroup)
@@ -311,7 +311,7 @@ void W_Crylink_Touch2 (void)
                f *= a;
 
        float totaldamage = RadiusDamage(self, self.realowner, autocvar_g_balance_crylink_secondary_damage * f, autocvar_g_balance_crylink_secondary_edgedamage * f, autocvar_g_balance_crylink_secondary_radius, world, autocvar_g_balance_crylink_secondary_force * f, self.projectiledeathtype, other);
-               
+
        if(totaldamage && ((autocvar_g_balance_crylink_secondary_linkexplode == 2) || ((autocvar_g_balance_crylink_secondary_linkexplode == 1) && !W_Crylink_Touch_WouldHitFriendly(self, autocvar_g_balance_crylink_secondary_radius))))
        {
                if(self == self.realowner.crylink_lastgroup)
@@ -439,7 +439,7 @@ void W_Crylink_Attack (void)
 
                proj.flags = FL_PROJECTILE;
     proj.missile_flags = MIF_SPLASH;
-    
+
                CSQCProjectile(proj, TRUE, (proj.cnt ? PROJECTILE_CRYLINK_BOUNCING : PROJECTILE_CRYLINK), TRUE);
 
                other = proj; MUTATOR_CALLHOOK(EditProjectile);
@@ -555,7 +555,7 @@ void W_Crylink_Attack2 (void)
 
                proj.flags = FL_PROJECTILE;
         proj.missile_flags = MIF_SPLASH;
-        
+
                CSQCProjectile(proj, TRUE, (proj.cnt ? PROJECTILE_CRYLINK_BOUNCING : PROJECTILE_CRYLINK), TRUE);
 
                other = proj; MUTATOR_CALLHOOK(EditProjectile);
@@ -637,7 +637,7 @@ float w_crylink(float req)
                                }
                                self.crylink_waitrelease = 0;
                                if(!w_crylink(WR_CHECKAMMO1) && !w_crylink(WR_CHECKAMMO2))
-                               if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
+                               if (!(self.items & IT_UNLIMITED_WEAPON_AMMO))
                                {
                                        // ran out of ammo!
                                        self.cnt = WEP_CRYLINK;
index dcf4e6563344547210e5c847e8842e9e11dece03..0ad23a137ec53177cf29fb60390b8ba28f6512ee 100644 (file)
@@ -96,10 +96,10 @@ void W_Plasma_Damage (entity inflictor, entity attacker, float damage, float dea
 
        // note: combos are usually triggered by W_Plasma_TriggerCombo, not damage
        float is_combo = (inflictor.classname == "plasma_chain" || inflictor.classname == "plasma_prim");
-       
+
        if (!W_CheckProjectileDamage(inflictor.realowner, self.realowner, deathtype, (is_combo ? 1 : -1)))
-               return; // g_projectiles_damage says to halt    
-       
+               return; // g_projectiles_damage says to halt
+
        self.health = self.health - damage;
        if (self.health <= 0)
        {
@@ -279,7 +279,7 @@ void lgbeam_think()
        dt = frametime;
 
        // if this weapon is reloadable, decrease its load. Else decrease the player's ammo
-       if not(owner_player.items & IT_UNLIMITED_WEAPON_AMMO)
+       if (!(owner_player.items & IT_UNLIMITED_WEAPON_AMMO))
        {
                if(autocvar_g_balance_electro_primary_ammo)
                {
index b019bcc3163c7cd0e0661b18f8e5c042f17153aa..88e9d770fbf92bb295d5e36afea205dd6162b9f2 100644 (file)
@@ -125,10 +125,10 @@ void W_Fireball_Damage (entity inflictor, entity attacker, float damage, float d
 {
        if(self.health <= 0)
                return;
-               
+
        if (!W_CheckProjectileDamage(inflictor.realowner, self.realowner, deathtype, -1)) // no exceptions
                return; // g_projectiles_damage says to halt
-               
+
        self.health = self.health - damage;
        if (self.health <= 0)
        {
@@ -170,7 +170,7 @@ void W_Fireball_Attack1()
        setsize(proj, '-16 -16 -16', '16 16 16');
        proj.flags = FL_PROJECTILE;
     proj.missile_flags = MIF_SPLASH | MIF_PROXY;
-    
+
        CSQCProjectile(proj, TRUE, PROJECTILE_FIREBALL, TRUE);
 
        other = proj; MUTATOR_CALLHOOK(EditProjectile);
@@ -301,7 +301,7 @@ void W_Fireball_Attack2()
        proj.angles = vectoangles(proj.velocity);
        proj.flags = FL_PROJECTILE;
     proj.missile_flags = MIF_SPLASH | MIF_PROXY | MIF_ARC;
-    
+
        CSQCProjectile(proj, TRUE, PROJECTILE_FIREMINE, TRUE);
 
        other = proj; MUTATOR_CALLHOOK(EditProjectile);
index db8913b351ccb3f1acb37e2c649edb4491bf353f..17144d3a53028d2f07ea61751d7f337c19e4e5b4 100644 (file)
@@ -59,12 +59,12 @@ void W_Grenade_Damage (entity inflictor, entity attacker, float damage, float de
 {
        if (self.health <= 0)
                return;
-               
+
        if (!W_CheckProjectileDamage(inflictor.realowner, self.realowner, deathtype, -1)) // no exceptions
                return; // g_projectiles_damage says to halt
-               
+
        self.health = self.health - damage;
-       
+
        if (self.health <= 0)
                W_PrepareExplosionByDamage(attacker, self.use);
 }
@@ -152,10 +152,10 @@ void W_Grenade_Touch2 (void)
                        spamsound (self, CH_SHOTS, "weapons/grenade_bounce6.wav", VOL_BASE, ATTEN_NORM);
                self.projectiledeathtype |= HITTYPE_BOUNCE;
                self.gl_bouncecnt += 1;
-               
+
                if (autocvar_g_balance_grenadelauncher_secondary_lifetime_bounce && self.gl_bouncecnt == 1)
                        self.nextthink = time + autocvar_g_balance_grenadelauncher_secondary_lifetime_bounce;
-                       
+
        }
        else if(autocvar_g_balance_grenadelauncher_secondary_type == 2 && (!other || (other.takedamage != DAMAGE_AIM && other.movetype == MOVETYPE_NONE))) // stick
        {
index 811038b1427a9510769b133dd9ac689238c2398b..05768fc50b16a7e9bef2415efeba9820c6998cd7 100644 (file)
@@ -34,11 +34,11 @@ void W_Hagar_Damage (entity inflictor, entity attacker, float damage, float deat
 {
        if (self.health <= 0)
                return;
-               
+
        float is_linkexplode = ( ((inflictor.owner != world) ? (inflictor.owner == self.owner) : TRUE)
-               && (inflictor.projectiledeathtype & HITTYPE_SECONDARY) 
+               && (inflictor.projectiledeathtype & HITTYPE_SECONDARY)
                && (self.projectiledeathtype & HITTYPE_SECONDARY));
-       
+
        if(is_linkexplode)
                is_linkexplode = (is_linkexplode && autocvar_g_balance_hagar_secondary_load_linkexplode);
        else
@@ -49,7 +49,7 @@ void W_Hagar_Damage (entity inflictor, entity attacker, float damage, float deat
 
        self.health = self.health - damage;
        self.angles = vectoangles(self.velocity);
-       
+
        if (self.health <= 0)
                W_PrepareExplosionByDamage(attacker, self.think);
 }
@@ -90,13 +90,13 @@ void W_Hagar_Attack (void)
        missile.classname = "missile";
        missile.bot_dodge = TRUE;
        missile.bot_dodgerating = autocvar_g_balance_hagar_primary_damage;
-       
+
        missile.takedamage = DAMAGE_YES;
        missile.health = autocvar_g_balance_hagar_primary_health;
        missile.damageforcescale = autocvar_g_balance_hagar_primary_damageforcescale;
        missile.event_damage = W_Hagar_Damage;
        missile.damagedbycontents = TRUE;
-       
+
        missile.touch = W_Hagar_Touch;
        missile.use = W_Hagar_Explode;
        missile.think = adaptor_think2use_hittype_splash;
@@ -111,7 +111,7 @@ void W_Hagar_Attack (void)
 
        missile.angles = vectoangles (missile.velocity);
        missile.flags = FL_PROJECTILE;
-       missile.missile_flags = MIF_SPLASH; 
+       missile.missile_flags = MIF_SPLASH;
 
        CSQCProjectile(missile, TRUE, PROJECTILE_HAGAR, TRUE);
 
@@ -133,7 +133,7 @@ void W_Hagar_Attack2 (void)
        missile.classname = "missile";
        missile.bot_dodge = TRUE;
        missile.bot_dodgerating = autocvar_g_balance_hagar_secondary_damage;
-       
+
        missile.takedamage = DAMAGE_YES;
        missile.health = autocvar_g_balance_hagar_secondary_health;
        missile.damageforcescale = autocvar_g_balance_hagar_secondary_damageforcescale;
@@ -155,7 +155,7 @@ void W_Hagar_Attack2 (void)
 
        missile.angles = vectoangles (missile.velocity);
        missile.flags = FL_PROJECTILE;
-       missile.missile_flags = MIF_SPLASH; 
+       missile.missile_flags = MIF_SPLASH;
 
        CSQCProjectile(missile, TRUE, PROJECTILE_HAGAR_BOUNCING, TRUE);
 
@@ -193,7 +193,7 @@ void W_Hagar_Attack2_Load_Release (void)
                missile.classname = "missile";
                missile.bot_dodge = TRUE;
                missile.bot_dodgerating = autocvar_g_balance_hagar_secondary_damage;
-               
+
                missile.takedamage = DAMAGE_YES;
                missile.health = autocvar_g_balance_hagar_secondary_health;
                missile.damageforcescale = autocvar_g_balance_hagar_secondary_damageforcescale;
@@ -209,13 +209,13 @@ void W_Hagar_Attack2_Load_Release (void)
                setorigin (missile, w_shotorg);
                setsize(missile, '0 0 0', '0 0 0');
                missile.movetype = MOVETYPE_FLY;
-               missile.missile_flags = MIF_SPLASH; 
-               
+               missile.missile_flags = MIF_SPLASH;
+
                // per-shot spread calculation: the more shots there are, the less spread is applied (based on the bias cvar)
-               spread_pershot = ((shots - 1) / (autocvar_g_balance_hagar_secondary_load_max - 1)); 
+               spread_pershot = ((shots - 1) / (autocvar_g_balance_hagar_secondary_load_max - 1));
                spread_pershot = (1 - (spread_pershot * autocvar_g_balance_hagar_secondary_load_spread_bias));
                spread_pershot = (autocvar_g_balance_hagar_secondary_spread * spread_pershot * g_weaponspreadfactor);
-               
+
                // pattern spread calculation
                s = '0 0 0';
                if (counter == 0)
@@ -227,7 +227,7 @@ void W_Hagar_Attack2_Load_Release (void)
                        s_z = v_forward_y;
                }
                s = s * autocvar_g_balance_hagar_secondary_load_spread * g_weaponspreadfactor;
-               
+
                W_SetupProjectileVelocityEx(missile, w_shotdir + right * s_y + up * s_z, v_up, autocvar_g_balance_hagar_secondary_speed, 0, 0, spread_pershot, FALSE);
 
                missile.angles = vectoangles (missile.velocity);
@@ -246,7 +246,7 @@ void W_Hagar_Attack2_Load_Release (void)
 void W_Hagar_Attack2_Load (void)
 {
        // loadable hagar secondary attack, must always run each frame
-       
+
        if(time < game_starttime)
                return;
 
@@ -322,7 +322,7 @@ void W_Hagar_Attack2_Load (void)
                                self.hagar_warning = TRUE;
                        }
                }
-               
+
                // release if player let go of button or if they've held it in too long
                if(!self.BUTTON_ATCK2 || ((loaded || !enough_ammo) && self.hagar_loadstep < time && autocvar_g_balance_hagar_secondary_load_hold >= 0))
                {
@@ -337,7 +337,7 @@ void W_Hagar_Attack2_Load (void)
        }
 
        // we aren't checking ammo during an attack, so we must do it here
-       if not(weapon_action(self.weapon, WR_CHECKAMMO1) + weapon_action(self.weapon, WR_CHECKAMMO2))
+       if (!(weapon_action(self.weapon, WR_CHECKAMMO1) + weapon_action(self.weapon, WR_CHECKAMMO2)))
        {
                // note: this doesn't force the switch
                W_SwitchToOtherWeapon(self);
@@ -442,7 +442,7 @@ float w_hagar(float req)
        }
        else if (req == WR_RELOAD)
        {
-               if not(self.hagar_load) // require releasing loaded rockets first
+               if (!self.hagar_load) // require releasing loaded rockets first
                        W_Reload(min(autocvar_g_balance_hagar_primary_ammo, autocvar_g_balance_hagar_secondary_ammo), autocvar_g_balance_hagar_reload_ammo, autocvar_g_balance_hagar_reload_time, "weapons/reload.wav");
        }
        else if (req == WR_SUICIDEMESSAGE)
index 5959965a6c3414ed1e97b5877a20b342ac3346a5..5642ef057798ce32892fccfe9459a774f7552a43 100644 (file)
@@ -18,7 +18,7 @@ void W_HLAC_Touch (void)
        PROJECTILE_TOUCH;
 
        self.event_damage = func_null;
-       
+
        if(self.projectiledeathtype & HITTYPE_SECONDARY)
                RadiusDamage (self, self.realowner, autocvar_g_balance_hlac_secondary_damage, autocvar_g_balance_hlac_secondary_edgedamage, autocvar_g_balance_hlac_secondary_radius, world, autocvar_g_balance_hlac_secondary_force, self.projectiledeathtype, other);
        else
@@ -112,7 +112,7 @@ void W_HLAC_Attack2f (void)
     missile.nextthink = time + autocvar_g_balance_hlac_secondary_lifetime;
 
        missile.flags = FL_PROJECTILE;
-       missile.missile_flags = MIF_SPLASH; 
+       missile.missile_flags = MIF_SPLASH;
        missile.projectiledeathtype = WEP_HLAC | HITTYPE_SECONDARY;
 
        CSQCProjectile(missile, TRUE, PROJECTILE_HLAC, TRUE);
@@ -148,7 +148,7 @@ void HLAC_fire1_02()
        if (self.BUTTON_ATCK)
        {
                if (!weapon_action(self.weapon, WR_CHECKAMMO1))
-               if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
+               if (!(self.items & IT_UNLIMITED_WEAPON_AMMO))
                {
                        W_SwitchWeapon_Force(self, w_getbestweapon(self));
                        w_ready();
index 923083387faf12a0ce8846a8ebf33256ddd05d4c..f0310c702e7399967d3226758b217b0d44b06301 100644 (file)
@@ -66,12 +66,12 @@ void W_Hook_Damage (entity inflictor, entity attacker, float damage, float death
 {
        if (self.health <= 0)
                return;
-               
+
        if (!W_CheckProjectileDamage(inflictor.realowner, self.realowner, deathtype, -1)) // no exceptions
-               return; // g_projectiles_damage says to halt    
-       
+               return; // g_projectiles_damage says to halt
+
        self.health = self.health - damage;
-       
+
        if (self.health <= 0)
                W_PrepareExplosionByDamage(self.realowner, W_Hook_Explode2);
 }
@@ -104,7 +104,7 @@ void W_Hook_Attack2()
        gren.think = adaptor_think2use_hittype_splash;
        gren.use = W_Hook_Explode2;
        gren.touch = W_Hook_Touch2;
-       
+
        gren.takedamage = DAMAGE_YES;
        gren.health = autocvar_g_balance_hook_secondary_health;
        gren.damageforcescale = autocvar_g_balance_hook_secondary_damageforcescale;
@@ -141,7 +141,7 @@ void spawnfunc_weapon_hook (void)
 float w_hook(float req)
 {
        float hooked_time_max, hooked_fuel;
-               
+
        if (req == WR_AIM)
        {
                // ... sorry ...
@@ -151,14 +151,14 @@ float w_hook(float req)
                if (self.BUTTON_ATCK || (!(self.items & IT_JETPACK) && self.BUTTON_HOOK))
                {
                        if(!self.hook)
-                       if not(self.hook_state & HOOK_WAITING_FOR_RELEASE)
-                       if not(self.hook_state & HOOK_FIRING)
+                       if (!(self.hook_state & HOOK_WAITING_FOR_RELEASE))
+                       if (!(self.hook_state & HOOK_FIRING))
                        if (time > self.hook_refire)
                        if (weapon_prepareattack(0, -1))
                        {
                                W_DecreaseAmmo(ammo_fuel, autocvar_g_balance_hook_primary_fuel, FALSE);
                                self.hook_state |= HOOK_FIRING;
-                               weapon_thinkf(WFRAME_FIRE1, autocvar_g_balance_hook_primary_animtime, w_ready);                         
+                               weapon_thinkf(WFRAME_FIRE1, autocvar_g_balance_hook_primary_animtime, w_ready);
                        }
                }
 
@@ -177,25 +177,25 @@ float w_hook(float req)
                        self.hook_refire = max(self.hook_refire, time + autocvar_g_balance_hook_primary_refire * W_WeaponRateFactor());
 
                        // hook also inhibits health regeneration, but only for 1 second
-                       if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
+                       if (!(self.items & IT_UNLIMITED_WEAPON_AMMO))
                                self.pauseregen_finished = max(self.pauseregen_finished, time + autocvar_g_balance_pause_fuel_regen);
                }
 
                if(self.hook && self.hook.state == 1)
                {
-                       hooked_time_max = autocvar_g_balance_hook_primary_hooked_time_max;                      
+                       hooked_time_max = autocvar_g_balance_hook_primary_hooked_time_max;
                        if (hooked_time_max > 0)
                        {
                                if ( time > self.hook_time_hooked + hooked_time_max )
                                        self.hook_state |= HOOK_REMOVING;
                        }
-                       
+
                        hooked_fuel = autocvar_g_balance_hook_primary_hooked_fuel;
                        if (hooked_fuel > 0)
                        {
                                if ( time > self.hook_time_fueldecrease )
                                {
-                                       if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
+                                       if (!(self.items & IT_UNLIMITED_WEAPON_AMMO))
                                        {
                                                if ( self.ammo_fuel >= (time - self.hook_time_fueldecrease) * hooked_fuel )
                                                {
@@ -215,7 +215,7 @@ float w_hook(float req)
                }
                else
                {
-                       self.hook_time_hooked = time;                           
+                       self.hook_time_hooked = time;
                        self.hook_time_fueldecrease = time + autocvar_g_balance_hook_primary_hooked_time_free;
                }
 
index ac8cbf1c1d6e38d7b7d543d8b074edd40c1adf23..0a0704638c63aeebf2171f70cfaa2ae75f09f79b 100644 (file)
@@ -74,7 +74,7 @@ void W_Laser_Attack (float issecondary)
        missile.touch = W_Laser_Touch;
 
        missile.flags = FL_PROJECTILE;
-       missile.missile_flags = MIF_SPLASH; 
+       missile.missile_flags = MIF_SPLASH;
 
        missile.think = W_Laser_Think;
        missile.nextthink = time + autocvar_g_balance_laser_primary_delay;
index 5d427a5a0f1b02b9745e857c2b4b16679fa1b2fb..5d88df8b254ac08be41bcec0422d0af8a464a34c 100644 (file)
@@ -182,7 +182,7 @@ void W_Mine_Think (void)
                        self.movetype = MOVETYPE_NONE;
                }
        }
-       
+
        // our lifetime has expired, it's time to die - mine_time just allows us to play a sound for this
        // TODO: replace this mine_trigger.wav sound with a real countdown
        if ((time > self.cnt) && (!self.mine_time))
@@ -258,15 +258,15 @@ void W_Mine_Damage (entity inflictor, entity attacker, float damage, float death
 {
        if (self.health <= 0)
                return;
-               
+
        float is_from_enemy = (inflictor.realowner != self.realowner);
-               
+
        if (!W_CheckProjectileDamage(inflictor.realowner, self.realowner, deathtype, (is_from_enemy ? 1 : -1)))
                return; // g_projectiles_damage says to halt
-               
+
        self.health = self.health - damage;
        self.angles = vectoangles(self.velocity);
-       
+
        if (self.health <= 0)
                W_PrepareExplosionByDamage(attacker, W_Mine_Explode);
 }
@@ -337,7 +337,7 @@ void W_Mine_Attack (void)
        // common properties
 
        other = mine; MUTATOR_CALLHOOK(EditProjectile);
-       
+
        self.minelayer_mines = W_Mine_Count(self);
 }
 
@@ -470,7 +470,7 @@ float w_minelayer(float req)
                if(autocvar_g_balance_minelayer_reload_ammo && self.clip_load < autocvar_g_balance_minelayer_ammo) // forced reload
                {
                        // not if we're holding the minelayer without enough ammo, but can detonate existing mines
-                       if not (W_PlacedMines(FALSE) && self.ammo_rockets < autocvar_g_balance_minelayer_ammo)
+                       if (!(W_PlacedMines(FALSE) && self.ammo_rockets < autocvar_g_balance_minelayer_ammo))
                                weapon_action(self.weapon, WR_RELOAD);
                }
                else if (self.BUTTON_ATCK)
index 1bd4e11bd40b130c1db373ce141f2b1255e9f499..9fb80c6d515d3a03bfee39e7efccea6f4fce6792 100644 (file)
@@ -74,7 +74,7 @@ void W_MinstaNex_Attack (void)
                                WarpZone_TrailParticles(world, particleeffectnum("TE_TEI_G3"), w_shotorg, v);
                        break;
        }
-       
+
        W_DecreaseAmmo(ammo_cells, ((g_minstagib) ? 1 : autocvar_g_balance_minstanex_ammo), autocvar_g_balance_minstanex_reload_ammo);
 }
 
@@ -117,7 +117,7 @@ float w_minstanex(float req)
                        {
                                // handle refire manually, so that primary and secondary can be fired without conflictions (important for minstagib)
                                self.jump_interval = time + autocvar_g_balance_minstanex_laser_refire * W_WeaponRateFactor();
-                               
+
                                // decrease ammo for the laser?
                                if(autocvar_g_balance_minstanex_laser_ammo)
                                        W_DecreaseAmmo(ammo_cells, autocvar_g_balance_minstanex_laser_ammo, autocvar_g_balance_minstanex_reload_ammo);
@@ -128,7 +128,7 @@ float w_minstanex(float req)
                                self.weapon = WEP_LASER;
                                W_Laser_Attack(2);
                                self.weapon = w;
-                               
+
                                // now do normal refire
                                weapon_thinkf(WFRAME_FIRE2, autocvar_g_balance_minstanex_laser_animtime, w_ready);
                        }
index 5ab21e2eae01edd38cb1cd16d9f100f90cb816dc..919e27e5ae81b96022f65deeb5ffd6d6b9439178 100644 (file)
@@ -76,7 +76,7 @@ void W_Nex_Attack (float issecondary)
        FireRailgunBullet (w_shotorg, w_shotorg + w_shotdir * MAX_SHOT_DISTANCE, mydmg, myforce, mymindist, mymaxdist, myhalflife, myforcehalflife, WEP_NEX);
 
        if(yoda && flying)
-               Send_Notification(NOTIF_ONE, self, MSG_ANNCE, ANNCE_ACHIEVEMENT_YODA); 
+               Send_Notification(NOTIF_ONE, self, MSG_ANNCE, ANNCE_ACHIEVEMENT_YODA);
 
        //beam and muzzle flash done on client
        SendCSQCNexBeamParticle(charge);
@@ -156,7 +156,7 @@ float w_nex(float req)
                                                        if(self.BUTTON_ATCK2) // only eat ammo when the button is pressed
                                                        {
                                                                dt = min(dt, (1 - self.nex_charge) / autocvar_g_balance_nex_secondary_charge_rate);
-                                                               if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
+                                                               if (!(self.items & IT_UNLIMITED_WEAPON_AMMO))
                                                                {
                                                                        // if this weapon is reloadable, decrease its load. Else decrease the player's ammo
                                                                        if(autocvar_g_balance_nex_reload_ammo)
@@ -231,7 +231,7 @@ float w_nex(float req)
                {
                        // don't allow charging if we don't have enough ammo
                        ammo_amount = self.ammo_cells >= autocvar_g_balance_nex_secondary_ammo;
-                       ammo_amount += self.(weapon_load[WEP_NEX]) >= autocvar_g_balance_nex_secondary_ammo;    
+                       ammo_amount += self.(weapon_load[WEP_NEX]) >= autocvar_g_balance_nex_secondary_ammo;
                        return ammo_amount;
                }
                else
index c1ed230cf9cef0b31b22186dc9dfe3ea04faa992..0e3a5c0b02efed14c2c0eac782edf1a8a532b04a 100644 (file)
@@ -15,13 +15,13 @@ REGISTER_WEAPON(
 
 .float rifle_accumulator;
 
-void W_Rifle_FireBullet(float pSpread, float pDamage, float pForce, float pSpeed, float pLifetime, float pAmmo, float deathtype, float pBulletConstant, float pTracer, float pShots, string pSound)
+void W_Rifle_FireBullet(float pSpread, float pDamage, float pForce, float pSolidPenetration, float pAmmo, float deathtype, float pTracer, float pShots, string pSound)
 {
        float i;
 
        W_DecreaseAmmo(ammo_nails, pAmmo, autocvar_g_balance_rifle_reload_ammo);
 
-       W_SetupShot (self, autocvar_g_antilag_bullets && pSpeed >= autocvar_g_antilag_bullets, 2, pSound, CH_WEAPON_A, pDamage * pShots);
+       W_SetupShot (self, TRUE, 2, pSound, CH_WEAPON_A, pDamage * pShots);
 
        pointparticles(particleeffectnum("rifle_muzzleflash"), w_shotorg, w_shotdir * 2000, 1);
 
@@ -32,8 +32,7 @@ void W_Rifle_FireBullet(float pSpread, float pDamage, float pForce, float pSpeed
        }
 
        for(i = 0; i < pShots; ++i)
-               fireBallisticBullet(w_shotorg, w_shotdir, pSpread, pSpeed, pLifetime, pDamage, pForce, deathtype, (pTracer ? EF_RED : EF_BLUE), 1, pBulletConstant);
-       endFireBallisticBullet();
+               fireBullet(w_shotorg, w_shotdir, pSpread, pSolidPenetration, pDamage, pForce, deathtype, (pTracer ? EF_RED : EF_BLUE));
 
        if (autocvar_g_casings >= 2)
                SpawnCasing (((random () * 50 + 50) * v_right) - (v_forward * (random () * 25 + 25)) - ((random () * 5 - 70) * v_up), 2, vectoangles(v_forward),'0 250 0', 100, 3, self);
@@ -41,12 +40,12 @@ void W_Rifle_FireBullet(float pSpread, float pDamage, float pForce, float pSpeed
 
 void W_Rifle_Attack()
 {
-       W_Rifle_FireBullet(autocvar_g_balance_rifle_primary_spread, autocvar_g_balance_rifle_primary_damage, autocvar_g_balance_rifle_primary_force, autocvar_g_balance_rifle_primary_speed, autocvar_g_balance_rifle_primary_lifetime, autocvar_g_balance_rifle_primary_ammo, WEP_RIFLE, autocvar_g_balance_rifle_primary_bulletconstant, autocvar_g_balance_rifle_primary_tracer, autocvar_g_balance_rifle_primary_shots, "weapons/campingrifle_fire.wav");
+       W_Rifle_FireBullet(autocvar_g_balance_rifle_primary_spread, autocvar_g_balance_rifle_primary_damage, autocvar_g_balance_rifle_primary_force, autocvar_g_balance_rifle_primary_solidpenetration, autocvar_g_balance_rifle_primary_ammo, WEP_RIFLE, autocvar_g_balance_rifle_primary_tracer, autocvar_g_balance_rifle_primary_shots, "weapons/campingrifle_fire.wav");
 }
 
 void W_Rifle_Attack2()
 {
-       W_Rifle_FireBullet(autocvar_g_balance_rifle_secondary_spread, autocvar_g_balance_rifle_secondary_damage, autocvar_g_balance_rifle_secondary_force, autocvar_g_balance_rifle_secondary_speed, autocvar_g_balance_rifle_secondary_lifetime, autocvar_g_balance_rifle_secondary_ammo, WEP_RIFLE | HITTYPE_SECONDARY, autocvar_g_balance_rifle_secondary_bulletconstant, autocvar_g_balance_rifle_secondary_tracer, autocvar_g_balance_rifle_secondary_shots, "weapons/campingrifle_fire2.wav");
+       W_Rifle_FireBullet(autocvar_g_balance_rifle_secondary_spread, autocvar_g_balance_rifle_secondary_damage, autocvar_g_balance_rifle_secondary_force, autocvar_g_balance_rifle_secondary_solidpenetration, autocvar_g_balance_rifle_secondary_ammo, WEP_RIFLE | HITTYPE_SECONDARY, autocvar_g_balance_rifle_secondary_tracer, autocvar_g_balance_rifle_secondary_shots, "weapons/campingrifle_fire2.wav");
 }
 
 void spawnfunc_weapon_rifle (void)
@@ -126,7 +125,7 @@ float w_rifle(float req)
                        self.bot_secondary_riflemooth = 0;
                if(self.bot_secondary_riflemooth == 0)
                {
-                       if(bot_aim(autocvar_g_balance_rifle_primary_speed, 0, autocvar_g_balance_rifle_primary_lifetime, FALSE))
+                       if(bot_aim(1000000, 0, 0.001, FALSE))
                        {
                                self.BUTTON_ATCK = TRUE;
                                if(random() < 0.01) self.bot_secondary_riflemooth = 1;
@@ -134,7 +133,7 @@ float w_rifle(float req)
                }
                else
                {
-                       if(bot_aim(autocvar_g_balance_rifle_secondary_speed, 0, autocvar_g_balance_rifle_secondary_lifetime, FALSE))
+                       if(bot_aim(1000000, 0, 0.001, FALSE))
                        {
                                self.BUTTON_ATCK2 = TRUE;
                                if(random() < 0.03) self.bot_secondary_riflemooth = 0;
index 6c5bae99c13f13683ac0c7ebee3eb3c92c582a55..6cd8929f6f70bcf276de5cb39864b4c657d6a843 100644 (file)
@@ -147,8 +147,8 @@ void W_Rocket_Think (void)
        if (self.realowner.weapon == WEP_ROCKET_LAUNCHER)
        {
                if(self == self.realowner.lastrocket)
-               if not(self.realowner.rl_release)
-               if not(self.BUTTON_ATCK2)
+               if (!self.realowner.rl_release)
+               if (!self.BUTTON_ATCK2)
                if(autocvar_g_balance_rocketlauncher_guiderate)
                if(time > self.pushltime)
                if(self.realowner.deadflag == DEAD_NO)
@@ -207,13 +207,13 @@ void W_Rocket_Damage (entity inflictor, entity attacker, float damage, float dea
 {
        if (self.health <= 0)
                return;
-       
+
        if (!W_CheckProjectileDamage(inflictor.realowner, self.realowner, deathtype, -1)) // no exceptions
                return; // g_projectiles_damage says to halt
-               
+
        self.health = self.health - damage;
        self.angles = vectoangles(self.velocity);
-       
+
        if (self.health <= 0)
                W_PrepareExplosionByDamage(attacker, W_Rocket_Explode);
 }
@@ -260,7 +260,7 @@ void W_Rocket_Attack (void)
        missile.nextthink = time;
        missile.cnt = time + autocvar_g_balance_rocketlauncher_lifetime;
        missile.flags = FL_PROJECTILE;
-       missile.missile_flags = MIF_SPLASH; 
+       missile.missile_flags = MIF_SPLASH;
 
        CSQCProjectile(missile, autocvar_g_balance_rocketlauncher_guiderate == 0 && autocvar_g_balance_rocketlauncher_speedaccel == 0, PROJECTILE_ROCKET, FALSE); // because of fly sound
 
index ba580e702ee5e6348c1e1c9ec9c227dcfbbd53d6..c870f0868eaaff99b084721dd15a0effe3104ff5 100644 (file)
@@ -84,7 +84,7 @@ void Seeker_Missile_Think()
                        // Calc how important it is that we turn and add this to the desierd (enemy) dir.
                        desireddir  = normalize(((trace_plane_normal * (1 - trace_fraction)) + (desireddir * trace_fraction)) * 0.5);
                }
-               
+
                newdir = normalize(olddir + desireddir * turnrate); // take the average of the 2 directions; not the best method but simple & easy
                self.velocity = newdir * spd; // make me fly in the new direction at my flight speed
        }
@@ -136,7 +136,7 @@ void Seeker_Missile_Damage (entity inflictor, entity attacker, float damage, flo
 {
        if (self.health <= 0)
                return;
-               
+
        if (!W_CheckProjectileDamage(inflictor.realowner, self.realowner, deathtype, -1)) // no exceptions
                return; // g_projectiles_damage says to halt
 
@@ -144,7 +144,7 @@ void Seeker_Missile_Damage (entity inflictor, entity attacker, float damage, flo
                self.health = self.health - (damage * 0.25);
        else
                self.health = self.health - damage;
-               
+
        if (self.health <= 0)
                W_PrepareExplosionByDamage(attacker, Seeker_Missile_Explode);
 }
@@ -206,10 +206,10 @@ void Seeker_Fire_Missile(vector f_diff, entity m_target)
        missile.damageforcescale = autocvar_g_balance_seeker_missile_damageforcescale;
        missile.damagedbycontents = TRUE;
        //missile.think           = Seeker_Missile_Animate; // csqc projectiles.
-       
+
        if (missile.enemy != world)
                missile.projectiledeathtype = WEP_SEEKER | HITTYPE_SECONDARY;
-       else 
+       else
                missile.projectiledeathtype = WEP_SEEKER;
 
 
@@ -218,7 +218,7 @@ void Seeker_Fire_Missile(vector f_diff, entity m_target)
        missile.movetype    = MOVETYPE_FLYMISSILE;
        missile.flags       = FL_PROJECTILE;
        missile.missile_flags = MIF_SPLASH | MIF_GUIDED_TAG;
-       
+
        W_SETUPPROJECTILEVELOCITY_UP(missile, g_balance_seeker_missile);
 
        missile.angles = vectoangles (missile.velocity);
@@ -229,7 +229,7 @@ void Seeker_Fire_Missile(vector f_diff, entity m_target)
 }
 
 // ============================
-// Begin: FLAC, close range attack meant for defeating rockets which are coming at you. 
+// Begin: FLAC, close range attack meant for defeating rockets which are coming at you.
 // ============================
 void Seeker_Flac_Explode ()
 {
@@ -283,23 +283,23 @@ void Seeker_Fire_Flac()
        missile.bot_dodge               = TRUE;
        missile.bot_dodgerating = autocvar_g_balance_seeker_flac_damage;
        missile.touch                   = Seeker_Flac_Explode;
-       missile.use                     = Seeker_Flac_Explode; 
+       missile.use                     = Seeker_Flac_Explode;
        missile.think                   = adaptor_think2use_hittype_splash;
        missile.nextthink               = time + autocvar_g_balance_seeker_flac_lifetime + autocvar_g_balance_seeker_flac_lifetime_rand;
        missile.solid                   = SOLID_BBOX;
-       missile.movetype                = MOVETYPE_FLY; 
+       missile.movetype                = MOVETYPE_FLY;
        missile.projectiledeathtype = WEP_SEEKER;
        missile.projectiledeathtype = WEP_SEEKER | HITTYPE_SECONDARY;
        missile.flags                           = FL_PROJECTILE;
-       missile.missile_flags       = MIF_SPLASH; 
-       
+       missile.missile_flags       = MIF_SPLASH;
+
        // csqc projectiles
-       //missile.angles                                = vectoangles (missile.velocity);       
-       //missile.scale = 0.4; // BUG: the model is too big 
-       
+       //missile.angles                                = vectoangles (missile.velocity);
+       //missile.scale = 0.4; // BUG: the model is too big
+
        setorigin (missile, w_shotorg);
        setsize (missile, '-2 -2 -2', '2 2 2');
-               
+
        W_SETUPPROJECTILEVELOCITY_UP(missile, g_balance_seeker_flac);
        CSQCProjectile(missile, TRUE, PROJECTILE_FLAC, TRUE);
 
@@ -307,22 +307,22 @@ void Seeker_Fire_Flac()
 }
 
 // ============================
-// Begin: Tag and rocket controllers 
+// Begin: Tag and rocket controllers
 // ============================
 entity Seeker_Tagged_Info(entity isowner, entity istarget)
 {
        entity tag;
-       for(tag = world; (tag = find(tag, classname, "tag_tracker")); ) 
+       for(tag = world; (tag = find(tag, classname, "tag_tracker")); )
                if ((tag.realowner == isowner) && (tag.tag_target == istarget))
                        return tag;
-               
+
        return world;
 }
 
 void Seeker_Attack()
 {
        entity tracker, closest_target;
-       
+
        closest_target = world;
        for(tracker = world; (tracker = find(tracker, classname, "tag_tracker")); ) if (tracker.realowner == self)
        {
@@ -331,14 +331,14 @@ void Seeker_Attack()
                        if (vlen(self.origin - tracker.tag_target.origin) < vlen(self.origin - closest_target.origin))
                                closest_target = tracker.tag_target;
                }
-               else 
+               else
                        closest_target = tracker.tag_target;
        }
-               
+
        traceline(self.origin + self.view_ofs, closest_target.origin, MOVE_NOMONSTERS, self);
        if ((!closest_target) || ((trace_fraction < 1) && (trace_ent != closest_target)))
                closest_target = world;
-       
+
        Seeker_Fire_Missile('0 0 0', closest_target);
 }
 
@@ -355,13 +355,13 @@ void Seeker_Vollycontroller_Think() // TODO: Merge this with Seeker_Attack
        }
 
        self.nextthink = time + autocvar_g_balance_seeker_missile_delay * W_WeaponRateFactor();
-       
+
        oldself = self;
        self = self.realowner;
-       
+
        oldenemy = self.enemy;
        self.enemy = oldself.enemy;
-       
+
        c = mod(self.cnt, 4);
        switch(c)
        {
@@ -384,7 +384,7 @@ void Seeker_Vollycontroller_Think() // TODO: Merge this with Seeker_Attack
        self = oldself;
 }
 
-void Seeker_Tracker_Think() 
+void Seeker_Tracker_Think()
 {
        // commit suicide if: You die OR target dies OR you switch away from the seeker OR commit suicide if lifetime is up
        if ((self.realowner.deadflag != DEAD_NO) || (self.tag_target.deadflag != DEAD_NO) || (self.realowner.switchweapon != WEP_SEEKER)
@@ -397,13 +397,13 @@ void Seeker_Tracker_Think()
                }
                return;
        }
-       
+
        // Update the think method information
        self.nextthink = time;
 }
 
 // ============================
-// Begin: Tag projectile 
+// Begin: Tag projectile
 // ============================
 void Seeker_Tag_Explode ()
 {
@@ -428,7 +428,7 @@ void Seeker_Tag_Touch()
        vector dir;
        vector org2;
        entity e;
-       
+
        PROJECTILE_TOUCH;
 
        dir     = normalize (self.realowner.origin - self.origin);
@@ -443,38 +443,38 @@ void Seeker_Tag_Touch()
        {
                // check to see if this person is already tagged by me
                entity tag = Seeker_Tagged_Info(self.realowner, other);
-               
+
                if (tag != world)
                {
                        if (other.wps_tag_tracker && (autocvar_g_balance_seeker_type == 1)) // don't attach another waypointsprite without killing the old one first
                                WaypointSprite_Kill(other.wps_tag_tracker);
-                               
+
                        tag.tag_time = time;
                }
                else
-               {               
+               {
                        //sprint(self.realowner, strcat("You just tagged ^2", other.netname, "^7 with a tracking device!\n"));
                        e             = spawn();
                        e.cnt         = autocvar_g_balance_seeker_missile_count;
                        e.classname   = "tag_tracker";
                        e.owner       = self.owner;
                        e.realowner   = self.realowner;
-                       
+
                        if      (autocvar_g_balance_seeker_type == 1)
                        {
                                e.tag_target  = other;
                                e.tag_time    = time;
                                e.think       = Seeker_Tracker_Think;
                        }
-                       else 
+                       else
                        {
                                e.enemy     = other;
                                e.think     = Seeker_Vollycontroller_Think;
                        }
-                       
+
                        e.nextthink   = time;
                }
-               
+
                if      (autocvar_g_balance_seeker_type == 1)
                {
                        WaypointSprite_Spawn("tagged-target", autocvar_g_balance_seeker_tag_tracker_lifetime, 0, other, '0 0 64', self.realowner, 0, other, wps_tag_tracker, TRUE, RADARICON_TAGGED, '0.5 1 0');
@@ -513,7 +513,7 @@ void Seeker_Fire_Tag()
        setsize (missile, '-2 -2 -2', '2 2 2');
 
        missile.flags       = FL_PROJECTILE;
-       //missile.missile_flags = MIF_..?; 
+       //missile.missile_flags = MIF_..?;
 
        missile.movetype    = MOVETYPE_FLY;
        W_SETUPPROJECTILEVELOCITY(missile, g_balance_seeker_tag);
@@ -538,7 +538,7 @@ float w_seeker(float req)
 
        if (req == WR_AIM)
        {
-               if (autocvar_g_balance_seeker_type == 1) 
+               if (autocvar_g_balance_seeker_type == 1)
                        if (Seeker_Tagged_Info(self, self.enemy) != world)
                                self.BUTTON_ATCK = bot_aim(autocvar_g_balance_seeker_missile_speed_max, 0, autocvar_g_balance_seeker_missile_lifetime, FALSE);
                        else
@@ -550,10 +550,10 @@ float w_seeker(float req)
        {
                if(autocvar_g_balance_seeker_reload_ammo && self.clip_load < min(autocvar_g_balance_seeker_missile_ammo, autocvar_g_balance_seeker_tag_ammo)) // forced reload
                        weapon_action(self.weapon, WR_RELOAD);
-                       
+
                else if (self.BUTTON_ATCK)
                {
-                       if (autocvar_g_balance_seeker_type == 1) 
+                       if (autocvar_g_balance_seeker_type == 1)
                        {
                                if (weapon_prepareattack(0, autocvar_g_balance_seeker_missile_refire))
                                {
@@ -561,7 +561,7 @@ float w_seeker(float req)
                                        weapon_thinkf(WFRAME_FIRE2, autocvar_g_balance_seeker_missile_animtime, w_ready);
                                }
                        }
-                       else 
+                       else
                        {
                                if (weapon_prepareattack(0, autocvar_g_balance_seeker_tag_refire))
                                {
@@ -573,7 +573,7 @@ float w_seeker(float req)
 
                else if (self.BUTTON_ATCK2)
                {
-                       if (autocvar_g_balance_seeker_type == 1) 
+                       if (autocvar_g_balance_seeker_type == 1)
                        {
                                if (weapon_prepareattack(0, autocvar_g_balance_seeker_tag_refire))
                                {
@@ -581,7 +581,7 @@ float w_seeker(float req)
                                        weapon_thinkf(WFRAME_FIRE2, autocvar_g_balance_seeker_tag_animtime, w_ready);
                                }
                        }
-                       else 
+                       else
                        {
                                if (weapon_prepareattack(0, autocvar_g_balance_seeker_flac_refire))
                                {
@@ -608,7 +608,7 @@ float w_seeker(float req)
        }
        else if (req == WR_CHECKAMMO1)
        {
-               if (autocvar_g_balance_seeker_type == 1) 
+               if (autocvar_g_balance_seeker_type == 1)
                {
                        ammo_amount = self.ammo_rockets >= autocvar_g_balance_seeker_missile_ammo;
                        ammo_amount += self.(weapon_load[WEP_SEEKER]) >= autocvar_g_balance_seeker_missile_ammo;
@@ -618,12 +618,12 @@ float w_seeker(float req)
                        ammo_amount = self.ammo_rockets >= autocvar_g_balance_seeker_tag_ammo;
                        ammo_amount += self.(weapon_load[WEP_SEEKER]) >= autocvar_g_balance_seeker_tag_ammo;
                }
-               
+
                return ammo_amount;
        }
        else if (req == WR_CHECKAMMO2)
        {
-               if (autocvar_g_balance_seeker_type == 1) 
+               if (autocvar_g_balance_seeker_type == 1)
                {
                        ammo_amount = self.ammo_rockets >= autocvar_g_balance_seeker_tag_ammo;
                        ammo_amount += self.(weapon_load[WEP_SEEKER]) >= autocvar_g_balance_seeker_tag_ammo;
@@ -633,7 +633,7 @@ float w_seeker(float req)
                        ammo_amount = self.ammo_rockets >= autocvar_g_balance_seeker_flac_ammo;
                        ammo_amount += self.(weapon_load[WEP_SEEKER]) >= autocvar_g_balance_seeker_flac_ammo;
                }
-               
+
                return ammo_amount;
        }
        else if (req == WR_RELOAD)
index b26fca2b7a16944fadc7dc47a6788998d5c6da3e..6ac38747526568f66579eefe6580d95ea1555e94 100644 (file)
@@ -21,8 +21,7 @@ void W_Shotgun_Attack (void)
        float   d;
        float   f;
        float   spread;
-       float   bulletspeed;
-       float   bulletconstant;
+       float   solidpenetration;
        entity flash;
 
        ammoamount = autocvar_g_balance_shotgun_primary_ammo;
@@ -30,15 +29,13 @@ void W_Shotgun_Attack (void)
        d = autocvar_g_balance_shotgun_primary_damage;
        f = autocvar_g_balance_shotgun_primary_force;
        spread = autocvar_g_balance_shotgun_primary_spread;
-       bulletspeed = autocvar_g_balance_shotgun_primary_speed;
-       bulletconstant = autocvar_g_balance_shotgun_primary_bulletconstant;
+       solidpenetration = autocvar_g_balance_shotgun_primary_solidpenetration;
 
        W_DecreaseAmmo(ammo_shells, ammoamount, autocvar_g_balance_shotgun_reload_ammo);
 
-       W_SetupShot (self, autocvar_g_antilag_bullets && bulletspeed >= autocvar_g_antilag_bullets, 5, "weapons/shotgun_fire.wav", CH_WEAPON_A, d * bullets);
+       W_SetupShot (self, TRUE, 5, "weapons/shotgun_fire.wav", CH_WEAPON_A, d * bullets);
        for (sc = 0;sc < bullets;sc = sc + 1)
-               fireBallisticBullet(w_shotorg, w_shotdir, spread, bulletspeed, 5, d, f, WEP_SHOTGUN, 0, 1, bulletconstant);
-       endFireBallisticBullet();
+               fireBullet(w_shotorg, w_shotdir, spread, solidpenetration, d, f, WEP_SHOTGUN, 0);
 
        pointparticles(particleeffectnum("shotgun_muzzleflash"), w_shotorg, w_shotdir * 1000, autocvar_g_balance_shotgun_primary_ammo);
 
@@ -67,66 +64,66 @@ void shotgun_meleethink (void)
 
        if(!self.cnt) // set start time of melee
        {
-               self.cnt = time; 
+               self.cnt = time;
                W_PlayStrengthSound(self.realowner);
        }
 
        makevectors(self.realowner.v_angle); // update values for v_* vectors
-       
+
        // calculate swing percentage based on time
        meleetime = autocvar_g_balance_shotgun_secondary_melee_time * W_WeaponRateFactor();
        swing = bound(0, (self.cnt + meleetime - time) / meleetime, 10);
        f = ((1 - swing) * autocvar_g_balance_shotgun_secondary_melee_traces);
-       
+
        // check to see if we can still continue, otherwise give up now
        if((self.realowner.deadflag != DEAD_NO) && autocvar_g_balance_shotgun_secondary_melee_no_doubleslap)
        {
                remove(self);
                return;
        }
-       
-       // if okay, perform the traces needed for this frame 
+
+       // if okay, perform the traces needed for this frame
        for(i=self.swing_prev; i < f; ++i)
        {
                swing_factor = ((1 - (i / autocvar_g_balance_shotgun_secondary_melee_traces)) * 2 - 1);
-               
-               targpos = (self.realowner.origin + self.realowner.view_ofs 
+
+               targpos = (self.realowner.origin + self.realowner.view_ofs
                        + (v_forward * autocvar_g_balance_shotgun_secondary_melee_range)
                        + (v_up * swing_factor * autocvar_g_balance_shotgun_secondary_melee_swing_up)
                        + (v_right * swing_factor * autocvar_g_balance_shotgun_secondary_melee_swing_side));
 
                WarpZone_traceline_antilag(self, self.realowner.origin + self.realowner.view_ofs, targpos, FALSE, self, ANTILAG_LATENCY(self.realowner));
-               
+
                // draw lightning beams for debugging
-               //te_lightning2(world, targpos, self.realowner.origin + self.realowner.view_ofs + v_forward * 5 - v_up * 5); 
+               //te_lightning2(world, targpos, self.realowner.origin + self.realowner.view_ofs + v_forward * 5 - v_up * 5);
                //te_customflash(targpos, 40,  2, '1 1 1');
-               
+
                is_player = (IS_PLAYER(trace_ent) || trace_ent.classname == "body");
 
                if((trace_fraction < 1) // if trace is good, apply the damage and remove self
-                       && (trace_ent.takedamage == DAMAGE_AIM)  
+                       && (trace_ent.takedamage == DAMAGE_AIM)
                        && (trace_ent != self.swing_alreadyhit)
                        && (is_player || autocvar_g_balance_shotgun_secondary_melee_nonplayerdamage))
                {
                        target_victim = trace_ent; // so it persists through other calls
-                       
+
                        if(is_player) // this allows us to be able to nerf the non-player damage done in e.g. assault or onslaught.
                                swing_damage = (autocvar_g_balance_shotgun_secondary_damage * min(1, swing_factor + 1));
                        else
                                swing_damage = (autocvar_g_balance_shotgun_secondary_melee_nonplayerdamage * min(1, swing_factor + 1));
-                       
+
                        //print(strcat(self.realowner.netname, " hitting ", target_victim.netname, " with ", strcat(ftos(swing_damage), " damage (factor: ", ftos(swing_factor), ") at "), ftos(time), " seconds.\n"));
-                       
-                       Damage(target_victim, self.realowner, self.realowner, 
-                               swing_damage, WEP_SHOTGUN | HITTYPE_SECONDARY, 
-                               self.realowner.origin + self.realowner.view_ofs, 
+
+                       Damage(target_victim, self.realowner, self.realowner,
+                               swing_damage, WEP_SHOTGUN | HITTYPE_SECONDARY,
+                               self.realowner.origin + self.realowner.view_ofs,
                                v_forward * autocvar_g_balance_shotgun_secondary_force);
-                               
+
                        if(accuracy_isgooddamage(self.realowner, target_victim)) { accuracy_add(self.realowner, WEP_SHOTGUN, 0, swing_damage); }
-                               
+
                        // draw large red flash for debugging
                        //te_customflash(targpos, 200, 2, '15 0 0');
-                       
+
                        if(autocvar_g_balance_shotgun_secondary_melee_multihit) // allow multiple hits with one swing, but not against the same player twice.
                        {
                                self.swing_alreadyhit = target_victim;
@@ -139,7 +136,7 @@ void shotgun_meleethink (void)
                        }
                }
        }
-       
+
        if(time >= self.cnt + meleetime)
        {
                // melee is finished
@@ -148,7 +145,7 @@ void shotgun_meleethink (void)
        }
        else
        {
-               // set up next frame 
+               // set up next frame
                self.swing_prev = i;
                self.nextthink = time;
        }
@@ -178,19 +175,14 @@ float w_shotgun(float req)
                if(vlen(self.origin-self.enemy.origin) <= autocvar_g_balance_shotgun_secondary_melee_range)
                        self.BUTTON_ATCK2 = bot_aim(1000000, 0, 0.001, FALSE);
                else
-               {
-                       if(autocvar_g_antilag_bullets)
-                               self.BUTTON_ATCK = bot_aim(1000000, 0, 0.001, FALSE);
-                       else
-                               self.BUTTON_ATCK = bot_aim(autocvar_g_balance_shotgun_primary_speed, 0, 0.001, FALSE);
-               }
+                       self.BUTTON_ATCK = bot_aim(1000000, 0, 0.001, FALSE);
 
        else if (req == WR_THINK)
        {
                if(autocvar_g_balance_shotgun_reload_ammo && self.clip_load < autocvar_g_balance_shotgun_primary_ammo) // forced reload
                {
                        // don't force reload an empty shotgun if its melee attack is active
-                       if not(autocvar_g_balance_shotgun_secondary && self.ammo_shells < autocvar_g_balance_shotgun_primary_ammo)
+                       if (!(autocvar_g_balance_shotgun_secondary && self.ammo_shells < autocvar_g_balance_shotgun_primary_ammo))
                                weapon_action(self.weapon, WR_RELOAD);
                }
                else
index db4f95385267cb2b6d6e82940cfa4614a4aaa644..2e081095f12a5b46fe525e63744ef49d3f166d26 100644 (file)
@@ -72,7 +72,7 @@ float W_Tuba_HasPlayed(entity pl, string melody, float instrument, float ignorep
                        mmax = 240 / mintempo; // 60 = "0.25 means 1 sec", at 120 0.5 means 1 sec, at 240 1 means 1 sec
                else
                        mmax = 240; // you won't try THAT hard... (tempo 1)
-               //print(sprintf("initial tempo rules: %f %f\n", mmin, mmax));
+               //printf("initial tempo rules: %f %f\n", mmin, mmax);
 
                for(i = 0; i < n; ++i)
                {
@@ -96,10 +96,10 @@ float W_Tuba_HasPlayed(entity pl, string melody, float instrument, float ignorep
 
                                // vi_x <= vi_y <= vj_x <= vj_y
                                // ti <= tj
-                               //print(sprintf("first note: %f to %f, should be %f\n", vi_x, vi_y, ti));
-                               //print(sprintf("second note: %f to %f, should be %f\n", vj_x, vj_y, tj));
-                               //print(sprintf("m1 = %f\n", (vi_x - vj_y) / (ti - tj)));
-                               //print(sprintf("m2 = %f\n", (vi_y - vj_x) / (ti - tj)));
+                               //printf("first note: %f to %f, should be %f\n", vi_x, vi_y, ti);
+                               //printf("second note: %f to %f, should be %f\n", vj_x, vj_y, tj);
+                               //printf("m1 = %f\n", (vi_x - vj_y) / (ti - tj));
+                               //printf("m2 = %f\n", (vi_y - vj_x) / (ti - tj));
                                mmin = max(mmin, (vi_x - vj_y) / (ti - tj)); // lower bound
                                mmax = min(mmax, (vi_y - vj_x) / (ti - tj)); // upper bound
                        }
@@ -190,7 +190,7 @@ float Tuba_GetNote(entity pl, float hittype)
                note += 12;
        if(hittype & HITTYPE_SECONDARY)
                note += 7;
-       
+
        // we support two kinds of tubas, those tuned in Eb and those tuned in C
        // kind of tuba currently is player slot number, or team number if in
        // teamplay
@@ -205,7 +205,7 @@ float Tuba_GetNote(entity pl, float hittype)
                if(pl.clientcolors & 1)
                        note += 3;
        }
-       
+
        // total range of notes:
        //                       0
        //                 ***  ** ****
@@ -313,7 +313,7 @@ void W_Tuba_NoteOn(float hittype)
                }
        }
 
-       if not(self.tuba_note)
+       if (!self.tuba_note)
        {
                self.tuba_note = spawn();
                self.tuba_note.owner = self.tuba_note.realowner = self;
index b3852b8e876cd8cfa8f9be8022bc6d8ccd149d43..4fb6047430c77e7671cca794854c7182c13f3cbd 100644 (file)
@@ -51,7 +51,7 @@ void UziFlash()
 
 void W_UZI_Attack (float deathtype)
 {
-       W_SetupShot (self, autocvar_g_antilag_bullets && autocvar_g_balance_uzi_speed >= autocvar_g_antilag_bullets, 0, "weapons/uzi_fire.wav", CH_WEAPON_A, ((self.misc_bulletcounter == 1) ? autocvar_g_balance_uzi_first_damage : autocvar_g_balance_uzi_sustained_damage));
+       W_SetupShot (self, TRUE, 0, "weapons/uzi_fire.wav", CH_WEAPON_A, ((self.misc_bulletcounter == 1) ? autocvar_g_balance_uzi_first_damage : autocvar_g_balance_uzi_sustained_damage));
        if (!autocvar_g_norecoil)
        {
                self.punchangle_x = random () - 0.5;
@@ -62,10 +62,9 @@ void W_UZI_Attack (float deathtype)
        ATTACK_FINISHED(self) = time + autocvar_g_balance_uzi_first_refire * W_WeaponRateFactor();
 
        if (self.misc_bulletcounter == 1)
-               fireBallisticBullet(w_shotorg, w_shotdir, autocvar_g_balance_uzi_first_spread, autocvar_g_balance_uzi_speed, 5, autocvar_g_balance_uzi_first_damage, autocvar_g_balance_uzi_first_force, deathtype, 0, 1, autocvar_g_balance_uzi_bulletconstant);
+               fireBullet(w_shotorg, w_shotdir, autocvar_g_balance_uzi_first_spread, autocvar_g_balance_uzi_solidpenetration, autocvar_g_balance_uzi_first_damage, autocvar_g_balance_uzi_first_force, deathtype, 0);
        else
-               fireBallisticBullet(w_shotorg, w_shotdir, autocvar_g_balance_uzi_sustained_spread, autocvar_g_balance_uzi_speed, 5, autocvar_g_balance_uzi_sustained_damage, autocvar_g_balance_uzi_sustained_force, deathtype, 0, 1, autocvar_g_balance_uzi_bulletconstant);
-       endFireBallisticBullet();
+               fireBullet(w_shotorg, w_shotdir, autocvar_g_balance_uzi_sustained_spread, autocvar_g_balance_uzi_solidpenetration, autocvar_g_balance_uzi_sustained_damage, autocvar_g_balance_uzi_sustained_force, deathtype, 0);
 
        pointparticles(particleeffectnum("uzi_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
 
@@ -93,7 +92,7 @@ void uzi_fire1_02()
        if (self.BUTTON_ATCK)
        {
                if (!weapon_action(self.weapon, WR_CHECKAMMO2))
-               if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
+               if (!(self.items & IT_UNLIMITED_WEAPON_AMMO))
                {
                        W_SwitchWeapon_Force(self, w_getbestweapon(self));
                        w_ready();
@@ -119,7 +118,7 @@ void uzi_mode1_fire_auto()
        }
 
        if (!weapon_action(self.weapon, WR_CHECKAMMO1))
-       if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
+       if (!(self.items & IT_UNLIMITED_WEAPON_AMMO))
        {
                W_SwitchWeapon_Force(self, w_getbestweapon(self));
                w_ready();
@@ -128,7 +127,7 @@ void uzi_mode1_fire_auto()
 
        W_DecreaseAmmo(ammo_nails, autocvar_g_balance_uzi_sustained_ammo, autocvar_g_balance_uzi_reload_ammo);
 
-       W_SetupShot (self, autocvar_g_antilag_bullets && autocvar_g_balance_uzi_speed >= autocvar_g_antilag_bullets, 0, "weapons/uzi_fire.wav", CH_WEAPON_A, autocvar_g_balance_uzi_sustained_damage);
+       W_SetupShot (self, TRUE, 0, "weapons/uzi_fire.wav", CH_WEAPON_A, autocvar_g_balance_uzi_sustained_damage);
        if (!autocvar_g_norecoil)
        {
                self.punchangle_x = random () - 0.5;
@@ -136,8 +135,7 @@ void uzi_mode1_fire_auto()
        }
 
        uzi_spread = bound(autocvar_g_balance_uzi_spread_min, autocvar_g_balance_uzi_spread_min + (autocvar_g_balance_uzi_spread_add * self.misc_bulletcounter), autocvar_g_balance_uzi_spread_max);
-       fireBallisticBullet(w_shotorg, w_shotdir, uzi_spread, autocvar_g_balance_uzi_speed, 5, autocvar_g_balance_uzi_sustained_damage, autocvar_g_balance_uzi_sustained_force, WEP_UZI, 0, 1, autocvar_g_balance_uzi_bulletconstant);
-       endFireBallisticBullet();
+       fireBullet(w_shotorg, w_shotdir, uzi_spread, autocvar_g_balance_uzi_solidpenetration, autocvar_g_balance_uzi_sustained_damage, autocvar_g_balance_uzi_sustained_force, WEP_UZI, 0);
 
        self.misc_bulletcounter = self.misc_bulletcounter + 1;
 
@@ -155,16 +153,14 @@ void uzi_mode1_fire_auto()
 
 void uzi_mode1_fire_burst()
 {
-       W_SetupShot (self, autocvar_g_antilag_bullets && autocvar_g_balance_uzi_speed >= autocvar_g_antilag_bullets, 0, "weapons/uzi_fire.wav", CH_WEAPON_A, autocvar_g_balance_uzi_sustained_damage);
+       W_SetupShot (self, TRUE, 0, "weapons/uzi_fire.wav", CH_WEAPON_A, autocvar_g_balance_uzi_sustained_damage);
        if (!autocvar_g_norecoil)
        {
                self.punchangle_x = random () - 0.5;
                self.punchangle_y = random () - 0.5;
        }
 
-       fireBallisticBullet(w_shotorg, w_shotdir, autocvar_g_balance_uzi_burst_spread, autocvar_g_balance_uzi_speed, 5, autocvar_g_balance_uzi_sustained_damage, autocvar_g_balance_uzi_sustained_force, WEP_UZI, 0, 1, autocvar_g_balance_uzi_bulletconstant);
-       endFireBallisticBullet();
-
+       fireBullet(w_shotorg, w_shotdir, autocvar_g_balance_uzi_burst_spread, autocvar_g_balance_uzi_solidpenetration, autocvar_g_balance_uzi_sustained_damage, autocvar_g_balance_uzi_sustained_force, WEP_UZI, 0);
 
        pointparticles(particleeffectnum("uzi_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
 
@@ -216,7 +212,7 @@ float w_uzi(float req)
                        if(weapon_prepareattack(1, 0))
                        {
                                if (!weapon_action(self.weapon, WR_CHECKAMMO2))
-                               if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
+                               if (!(self.items & IT_UNLIMITED_WEAPON_AMMO))
                                {
                                        W_SwitchWeapon_Force(self, w_getbestweapon(self));
                                        w_ready();
index a5817fa502addef565a946eaaa55a7bd544f60ff..736cc564cc4c81bffaae6096cddc11b46c8ac867 100644 (file)
@@ -197,7 +197,7 @@ float WaypointSprite_visible_for_player(entity e)
        {
                if(self.team != e.team)
                        return FALSE;
-               if not(IS_PLAYER(e))
+               if (!IS_PLAYER(e))
                        return FALSE;
        }
 
@@ -251,7 +251,7 @@ float WaypointSprite_SendEntity(entity to, float sendflags)
        WriteByte(MSG_ENTITY, ENT_CLIENT_WAYPOINT);
 
        sendflags = sendflags & 0x7F;
-       
+
        if(g_nexball)
                sendflags &= ~0x80;
        else if(self.max_health || (self.pain_finished && (time < self.pain_finished + 0.25)))
@@ -462,8 +462,8 @@ entity WaypointSprite_AttachCarrier(
        e = WaypointSprite_Spawn(spr, 0, 0, carrier, '0 0 64', world, carrier.team, carrier, waypointsprite_attachedforcarrier, FALSE, icon, rgb);
        if(e)
        {
-               WaypointSprite_UpdateMaxHealth(e, '1 0 0' * healtharmor_maxdamage(start_health, start_armorvalue, autocvar_g_balance_armor_blockpercent) * 2);
-               WaypointSprite_UpdateHealth(e, '1 0 0' * healtharmor_maxdamage(carrier.health, carrier.armorvalue, autocvar_g_balance_armor_blockpercent));
+               WaypointSprite_UpdateMaxHealth(e, '1 0 0' * healtharmor_maxdamage(start_health, start_armorvalue, autocvar_g_balance_armor_blockpercent, DEATH_WEAPON) * 2);
+               WaypointSprite_UpdateHealth(e, '1 0 0' * healtharmor_maxdamage(carrier.health, carrier.armorvalue, autocvar_g_balance_armor_blockpercent, DEATH_WEAPON));
        }
        return e;
 }
diff --git a/qcsrc/uncrusticracy.sh b/qcsrc/uncrusticracy.sh
new file mode 100644 (file)
index 0000000..c71b6cd
--- /dev/null
@@ -0,0 +1,173 @@
+FILES=`find client common menu server warpzonelib -name \*.c -o -name \*.h -o -name \*.qc -o -name \*.qh`
+out_raw()
+{
+       printf "%s\n" "$LINE"
+}
+out()
+{
+       printf "%-40s = %-8s # %s\n" "$KEY" "$VAL" "$COMMENT"
+}
+decide()
+{
+       verybestchoice=
+       verybestscore=2147483647
+       bestchoice=
+       bestscore=2147483647
+       secondbestchoice=
+       secondbestscore=2147483647
+       worstscore=0
+       haveignore=false
+       havefalse=false
+       have0=false
+       seen=
+       for choice in "$VAL" "$@"; do
+               case " $seen " in
+                       *" $choice "*)
+                               continue
+                               ;;
+                       *)
+                               seen=$seen" $VAL"
+                               ;;
+               esac
+               if [ x"$choice" = x"force" ]; then
+                       continue
+               fi
+               if [ x"$choice" = x"ignore" ]; then
+                       haveignore=true
+               fi
+               if [ x"$choice" = x"false" ]; then
+                       havefalse=true
+               fi
+               if [ x"$choice" = x"0" ]; then
+                       have0=true
+               fi
+               if [ x"$MODE" = x"initialize" ]; then
+                       if [ x"$choice" = x"ignore" ]; then
+                               score=0
+                       else
+                               score=2147483647
+                       fi
+               else
+                       {
+                               cat uncrustify.cfg
+                               printf "%s = %s\n" "$KEY" "$choice"
+                       } > uncrustify.cfg.test
+                       UNCRUSTIFY_CONFIG=uncrustify.cfg.test sh uncrustify.sh $FILES >/dev/null 2>&1
+                       status=$?
+                       if [ $status -gt 1 ]; then
+                               echo "# ERROR: $KEY = $choice crashes with status $status."
+                               continue
+                       fi
+                       score=0
+                       git diff --numstat > diffstat.tmp
+                       while read -r add del rest; do
+                               if [ x"$add" != x"-" ]; then
+                                       score=$(($score + $add))
+                               fi
+                               if [ x"$del" != x"-" ]; then
+                                       score=$(($score + $del))
+                               fi
+                       done < diffstat.tmp
+                       git reset --hard >/dev/null 2>&1
+               fi
+               echo >&2 "$KEY = $choice: $score"
+               if [ x"$choice" != x"ignore" ]; then
+                       if [ $score -lt $bestscore ]; then
+                               secondbestscore=$bestscore
+                               secondbestchoice=$bestchoice
+                               bestscore=$score
+                               bestchoice=$choice
+                       elif [ $score -lt $secondbestscore ]; then
+                               secondbestscore=$score
+                               secondbestchoice=$choice
+                       fi
+               fi
+               if [ $score -lt $verybestscore ]; then
+                       verybestscore=$score
+                       verybestchoice=$choice
+               fi
+               if [ $score -gt $worstscore ]; then
+                       worstscore=$score
+                       worstchoice=$choice
+               fi
+       done
+       if [ -z "$bestchoice" ]; then
+               echo "# WARNING: No best choice identified"
+       elif [ $verybestscore -ge $worstscore ]; then
+               echo "# WARNING: Code doesn't seem to use this feature - delete from the config?"
+               if $haveignore; then
+                       VAL=ignore
+               elif $havefalse; then
+                       VAL=false
+               elif $have0; then
+                       VAL=0
+               fi
+       elif [ $bestscore -ge $worstscore ]; then
+               echo "# WARNING: Indifferent... please decide manually."
+       elif [ $bestscore -ge $secondbestscore ]; then
+               echo "# WARNING: Best is not unique ($bestchoice $secondbestchoice)"
+       elif [ $bestscore -gt $verybestscore ]; then
+               echo "# NOTE: is $(($bestscore - $verybestscore)) worse than $verybestchoice"
+               VAL=$bestchoice
+       else
+               VAL=$bestchoice
+       fi
+}
+while read -r LINE; do
+       case "$LINE" in
+               "# NOTE: "*)
+                       continue
+                       ;;
+               "# WARNING: "*)
+                       continue
+                       ;;
+               "# ERROR: "*)
+                       continue
+                       ;;
+               "#"*)
+                       out_raw
+                       continue
+                       ;;
+               *"#force"*|*"#ignore"*)
+                       out_raw
+                       continue
+                       ;;
+       esac
+       printf "%s\n" "$LINE" | while read KEY EQ VAL DELIM COMMENT; do
+               if \
+                       [ x"$EQ" != x"=" ] || \
+                       [ x"$DELIM" != x"#" ]; then
+                       out_raw
+                       continue
+               fi
+               case "$COMMENT" in
+                       number)
+                               case "$KEY" in
+                                       indent_columns|*tab*)
+                                               decide 1 2 4 8
+                                               ;;
+                                       *)
+                                               decide 0 1 2 3 indent_columns
+                                               ;;
+                               esac
+                               out
+                               ;;
+                       string)
+                               printf "# WARNING: unsupported %s\n" "$COMMENT"
+                               out_raw
+                               ;;
+                       *[!a-z/_]*)
+                               printf "# ERROR: invalid characters %s\n" "$COMMENT"
+                               out_raw
+                               ;;
+                       */*)
+                               decide `echo "$COMMENT" | tr / ' '`
+                               out
+                               ;;
+                       *)
+                               printf "# ERROR: only once choice %s\n" "$COMMENT"
+                               out_raw
+                               ;;
+               esac
+       done
+done < uncrustify.cfg
diff --git a/qcsrc/uncrustify.cfg b/qcsrc/uncrustify.cfg
new file mode 100644 (file)
index 0000000..982e527
--- /dev/null
@@ -0,0 +1,1849 @@
+# Uncrustify 0.60
+
+#
+# General options
+#
+
+# The type of line endings
+# WARNING: Best is not unique (auto lf)
+newlines                                 = auto     # auto/lf/crlf/cr
+
+# The original size of tabs in the input
+input_tab_size                           = 4        # number
+
+# The size of tabs in the output (only used if align_with_tabs=true)
+output_tab_size                          = 4        # number
+
+# The ASCII value of the string escape char, usually 92 (\) or 94 (^). (Pawn)
+string_escape_char                       = 92       # number #ignore
+
+# Alternate string escape char for Pawn. Only works right before the quote char.
+string_escape_char2                      = 0        # number #ignore
+
+# Allow interpreting '>=' and '>>=' as part of a template in 'void f(list<list<B>>=val);'.
+# If true (default), 'assert(x<0 && y>=3)' will be broken.
+# Improvements to template detection may make this option obsolete.
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+tok_split_gte                            = false    # false/true
+
+# Control what to do with the UTF-8 BOM (recommend 'remove')
+utf8_bom                                 = remove   # ignore/add/remove/force #force
+
+# If the file contains bytes with values between 128 and 255, but is not UTF-8, then output as UTF-8
+utf8_byte                                = true     # false/true #force
+
+# Force the output encoding to UTF-8
+utf8_force                               = true     # false/true #force
+
+#
+# Indenting
+#
+
+# The number of columns to indent per level.
+# Usually 2, 3, 4, or 8.
+indent_columns                           = 4        # number
+
+# The continuation indent. If non-zero, this overrides the indent of '(' and '=' continuation indents.
+# For FreeBSD, this is set to 4. Negative value is absolute and not increased for each ( level
+indent_continue                          = indent_columns # number
+
+# How to use tabs when indenting code
+# 0=spaces only
+# 1=indent with tabs to brace level, align with spaces
+# 2=indent and align with tabs, using spaces when not on a tabstop
+indent_with_tabs                         = 1        # number #force
+
+# Comments that are not a brace level are indented with tabs on a tabstop.
+# Requires indent_with_tabs=2. If false, will use spaces.
+indent_cmt_with_tabs                     = false    # false/true
+
+# Whether to indent strings broken by '\' so that they line up
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+indent_align_string                      = false    # false/true
+
+# The number of spaces to indent multi-line XML strings.
+# Requires indent_align_string=True
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+indent_xml_string                        = 0        # number
+
+# Spaces to indent '{' from level
+indent_brace                             = 0        # number
+
+# Whether braces are indented to the body level
+indent_braces                            = false    # false/true
+
+# Disabled indenting function braces if indent_braces is true
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+indent_braces_no_func                    = false    # false/true
+
+# Disabled indenting class braces if indent_braces is true
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+indent_braces_no_class                   = false    # false/true
+
+# Disabled indenting struct braces if indent_braces is true
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+indent_braces_no_struct                  = false    # false/true
+
+# Indent based on the size of the brace parent, i.e. 'if' => 3 spaces, 'for' => 4 spaces, etc.
+indent_brace_parent                      = false    # false/true
+
+# Whether the 'namespace' body is indented
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+indent_namespace                         = false    # false/true
+
+# The number of spaces to indent a namespace block
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+indent_namespace_level                   = 0        # number
+
+# If the body of the namespace is longer than this number, it won't be indented.
+# Requires indent_namespace=true. Default=0 (no limit)
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+indent_namespace_limit                   = 0        # number
+
+# Whether the 'extern "C"' body is indented
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+indent_extern                            = false    # false/true
+
+# Whether the 'class' body is indented
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+indent_class                             = false    # false/true
+
+# Whether to indent the stuff after a leading class colon
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+indent_class_colon                       = false    # false/true
+
+# Virtual indent from the ':' for member initializers. Default is 2
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+indent_ctor_init_leading                 = 0        # number
+
+# Additional indenting for constructor initializer list
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+indent_ctor_init                         = 0        # number
+
+# False=treat 'else\nif' as 'else if' for indenting purposes
+# True=indent the 'if' one level
+indent_else_if                           = true     # false/true
+
+# Amount to indent variable declarations after a open brace. neg=relative, pos=absolute
+indent_var_def_blk                       = 0        # number
+
+# Indent continued variable declarations instead of aligning.
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+indent_var_def_cont                      = false    # false/true
+
+# True:  force indentation of function definition to start in column 1
+# False: use the default behavior
+indent_func_def_force_col1               = false    # false/true
+
+# True:  indent continued function call parameters one indent level
+# False: align parameters under the open paren
+indent_func_call_param                   = true     # false/true
+
+# Same as indent_func_call_param, but for function defs
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+indent_func_def_param                    = false    # false/true
+
+# Same as indent_func_call_param, but for function protos
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+indent_func_proto_param                  = false    # false/true
+
+# Same as indent_func_call_param, but for class declarations
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+indent_func_class_param                  = false    # false/true
+
+# Same as indent_func_call_param, but for class variable constructors
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+indent_func_ctor_var_param               = false    # false/true
+
+# Same as indent_func_call_param, but for templates
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+indent_template_param                    = false    # false/true
+
+# Double the indent for indent_func_xxx_param options
+indent_func_param_double                 = true     # false/true
+
+# Indentation column for standalone 'const' function decl/proto qualifier
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+indent_func_const                        = 0        # number
+
+# Indentation column for standalone 'throw' function decl/proto qualifier
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+indent_func_throw                        = 0        # number
+
+# The number of spaces to indent a continued '->' or '.'
+# Usually set to 0, 1, or indent_columns.
+indent_member                            = 0        # number
+
+# Spaces to indent single line ('//') comments on lines before code
+indent_sing_line_comments                = 0        # number
+
+# If set, will indent trailing single line ('//') comments relative
+# to the code instead of trying to keep the same absolute column
+indent_relative_single_line_comments     = true    # false/true #force
+
+# Spaces to indent 'case' from 'switch'
+# Usually 0 or indent_columns.
+indent_switch_case                       = indent_columns # number
+
+# Spaces to shift the 'case' line, without affecting any other lines
+# Usually 0.
+indent_case_shift                        = 0        # number
+
+# Spaces to indent '{' from 'case'.
+# By default, the brace will appear under the 'c' in case.
+# Usually set to 0 or indent_columns.
+indent_case_brace                        = 0        # number
+
+# Whether to indent comments found in first column
+indent_col1_comment                      = false    # false/true
+
+# How to indent goto labels
+#  >0 : absolute column where 1 is the leftmost column
+#  <=0 : subtract from brace indent
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+indent_label                             = 0        # number
+
+# Same as indent_label, but for access specifiers that are followed by a colon
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+indent_access_spec                       = 0        # number
+
+# Indent the code after an access specifier by one level.
+# If set, this option forces 'indent_access_spec=0'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+indent_access_spec_body                  = false    # false/true
+
+# If an open paren is followed by a newline, indent the next line so that it lines up after the open paren (not recommended)
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+indent_paren_nl                          = false    # false/true
+
+# Controls the indent of a close paren after a newline.
+# 0: Indent to body level
+# 1: Align under the open paren
+# 2: Indent to the brace level
+indent_paren_close                       = 1        # number #force
+
+# Controls the indent of a comma when inside a paren.If TRUE, aligns under the open paren
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+indent_comma_paren                       = false    # false/true
+
+# Controls the indent of a BOOL operator when inside a paren.If TRUE, aligns under the open paren
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+indent_bool_paren                        = false    # false/true
+
+# If 'indent_bool_paren' is true, controls the indent of the first expression. If TRUE, aligns the first expression to the following ones
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+indent_first_bool_expr                   = false    # false/true
+
+# If an open square is followed by a newline, indent the next line so that it lines up after the open square (not recommended)
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+indent_square_nl                         = false    # false/true
+
+# Don't change the relative indent of ESQL/C 'EXEC SQL' bodies
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+indent_preserve_sql                      = false    # false/true
+
+# Align continued statements at the '='. Default=True
+# If FALSE or the '=' is followed by a newline, the next line is indent one tab.
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+indent_align_assign                      = false    # false/true
+
+# Indent OC blocks at brace level instead of usual rules.
+indent_oc_block                          = false    # false/true #ignore
+
+# Indent OC blocks in a message relative to the parameter name.
+# 0=use indent_oc_block rules, 1+=spaces to indent #ignore
+indent_oc_block_msg                      = 0        # number #ignore
+
+# Minimum indent for subsequent parameters
+indent_oc_msg_colon                      = 0        # number #ignore
+
+#
+# Spacing options
+#
+
+# Add or remove space around arithmetic operator '+', '-', '/', '*', etc
+sp_arith                                 = ignore   # ignore/add/remove/force #force
+
+# Add or remove space around assignment operator '=', '+=', etc
+# NOTE: is 54 worse than ignore
+sp_assign                                = add      # ignore/add/remove/force
+
+# Add or remove space around '=' in C++11 lambda capture specifications. Overrides sp_assign
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_cpp_lambda_assign                     = ignore   # ignore/add/remove/force
+
+# Add or remove space after the capture specification in C++11 lambda.
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_cpp_lambda_paren                      = ignore   # ignore/add/remove/force
+
+# Add or remove space around assignment operator '=' in a prototype
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_assign_default                        = ignore   # ignore/add/remove/force
+
+# Add or remove space before assignment operator '=', '+=', etc. Overrides sp_assign.
+sp_before_assign                         = ignore   # ignore/add/remove/force #force
+
+# Add or remove space after assignment operator '=', '+=', etc. Overrides sp_assign.
+sp_after_assign                          = ignore   # ignore/add/remove/force #force
+
+# Add or remove space around assignment '=' in enum
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_enum_assign                           = ignore   # ignore/add/remove/force
+
+# Add or remove space before assignment '=' in enum. Overrides sp_enum_assign.
+sp_enum_before_assign                    = ignore   # ignore/add/remove/force #force
+
+# Add or remove space after assignment '=' in enum. Overrides sp_enum_assign.
+sp_enum_after_assign                     = ignore   # ignore/add/remove/force #force
+
+# Add or remove space around preprocessor '##' concatenation operator. Default=Add
+# NOTE: is 4 worse than ignore
+sp_pp_concat                             = remove   # ignore/add/remove/force
+
+# Add or remove space after preprocessor '#' stringify operator. Also affects the '#@' charizing operator.
+sp_pp_stringify                          = remove   # ignore/add/remove/force
+
+# Add or remove space before preprocessor '#' stringify operator as in '#define x(y) L#y'.
+sp_before_pp_stringify                   = add      # ignore/add/remove/force
+
+# Add or remove space around boolean operators '&&' and '||'
+# NOTE: is 2 worse than ignore
+sp_bool                                  = add      # ignore/add/remove/force
+
+# Add or remove space around compare operator '<', '>', '==', etc
+# NOTE: is 198 worse than ignore
+sp_compare                               = add      # ignore/add/remove/force
+
+# Add or remove space inside '(' and ')'
+# NOTE: is 10 worse than ignore
+sp_inside_paren                          = remove   # ignore/add/remove/force
+
+# Add or remove space between nested parens
+# NOTE: is 18 worse than ignore
+sp_paren_paren                           = remove   # ignore/add/remove/force
+
+# Whether to balance spaces inside nested parens
+sp_balance_nested_parens                 = false    # false/true
+
+# Add or remove space between ')' and '{'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_paren_brace                           = ignore   # ignore/add/remove/force
+
+# Add or remove space before pointer star '*'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_before_ptr_star                       = ignore   # ignore/add/remove/force
+
+# Add or remove space before pointer star '*' that isn't followed by a variable name
+# If set to 'ignore', sp_before_ptr_star is used instead.
+sp_before_unnamed_ptr_star               = add      # ignore/add/remove/force
+
+# Add or remove space between pointer stars '*'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_between_ptr_star                      = ignore   # ignore/add/remove/force
+
+# Add or remove space after pointer star '*', if followed by a word.
+sp_after_ptr_star                        = add      # ignore/add/remove/force
+
+# Add or remove space after a pointer star '*', if followed by a func proto/def.
+sp_after_ptr_star_func                   = add      # ignore/add/remove/force
+
+# Add or remove space after a pointer star '*', if followed by an open paren (function types).
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_ptr_star_paren                        = ignore   # ignore/add/remove/force
+
+# Add or remove space before a pointer star '*', if followed by a func proto/def.
+sp_before_ptr_star_func                  = add      # ignore/add/remove/force
+
+# Add or remove space before a reference sign '&'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_before_byref                          = ignore   # ignore/add/remove/force
+
+# Add or remove space before a reference sign '&' that isn't followed by a variable name
+# If set to 'ignore', sp_before_byref is used instead.
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_before_unnamed_byref                  = ignore   # ignore/add/remove/force
+
+# Add or remove space after reference sign '&', if followed by a word.
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_after_byref                           = ignore   # ignore/add/remove/force
+
+# Add or remove space after a reference sign '&', if followed by a func proto/def.
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_after_byref_func                      = ignore   # ignore/add/remove/force
+
+# Add or remove space before a reference sign '&', if followed by a func proto/def.
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_before_byref_func                     = ignore   # ignore/add/remove/force
+
+# Add or remove space between type and word. Default=Force
+sp_after_type                            = add      # ignore/add/remove/force
+
+# Add or remove space before the paren in the D constructs 'template Foo(' and 'class Foo('.
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_before_template_paren                 = ignore   # ignore/add/remove/force
+
+# Add or remove space in 'template <' vs 'template<'.
+# If set to ignore, sp_before_angle is used.
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_template_angle                        = ignore   # ignore/add/remove/force
+
+# Add or remove space before '<>'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_before_angle                          = ignore   # ignore/add/remove/force
+
+# Add or remove space inside '<' and '>'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_inside_angle                          = ignore   # ignore/add/remove/force
+
+# Add or remove space after '<>'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_after_angle                           = ignore   # ignore/add/remove/force
+
+# Add or remove space between '<>' and '(' as found in 'new List<byte>();'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_angle_paren                           = ignore   # ignore/add/remove/force
+
+# Add or remove space between '<>' and a word as in 'List<byte> m;'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_angle_word                            = ignore   # ignore/add/remove/force
+
+# Add or remove space between '>' and '>' in '>>' (template stuff C++/C# only). Default=Add
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_angle_shift                           = ignore   # ignore/add/remove/force
+
+# Permit removal of the space between '>>' in 'foo<bar<int> >' (C++11 only). Default=False
+# sp_angle_shift cannot remove the space without this option.
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_permit_cpp11_shift                    = false    # false/true
+
+# Add or remove space before '(' of 'if', 'for', 'switch', and 'while'
+sp_before_sparen                         = remove   # ignore/add/remove/force #force
+
+# Add or remove space inside if-condition '(' and ')'
+# NOTE: is 42 worse than ignore
+sp_inside_sparen                         = remove   # ignore/add/remove/force
+
+# Add or remove space before if-condition ')'. Overrides sp_inside_sparen.
+sp_inside_sparen_close                   = ignore   # ignore/add/remove/force #force
+
+# Add or remove space before if-condition '('. Overrides sp_inside_sparen.
+sp_inside_sparen_open                    = ignore   # ignore/add/remove/force #force
+
+# Add or remove space after ')' of 'if', 'for', 'switch', and 'while'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_after_sparen                          = ignore   # ignore/add/remove/force
+
+# Add or remove space between ')' and '{' of 'if', 'for', 'switch', and 'while'
+sp_sparen_brace                          = add      # ignore/add/remove/force
+
+# Add or remove space between 'invariant' and '(' in the D language.
+sp_invariant_paren                       = ignore   # ignore/add/remove/force #ignore
+
+# Add or remove space after the ')' in 'invariant (C) c' in the D language.
+sp_after_invariant_paren                 = ignore   # ignore/add/remove/force #ignore
+
+# Add or remove space before empty statement ';' on 'if', 'for' and 'while'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_special_semi                          = ignore   # ignore/add/remove/force
+
+# Add or remove space before ';'. Default=Remove
+# NOTE: is 2 worse than ignore
+sp_before_semi                           = remove   # ignore/add/remove/force
+
+# Add or remove space before ';' in non-empty 'for' statements
+sp_before_semi_for                       = remove   # ignore/add/remove/force
+
+# Add or remove space before a semicolon of an empty part of a for statement.
+sp_before_semi_for_empty                 = add      # ignore/add/remove/force
+
+# Add or remove space after ';', except when followed by a comment. Default=Add
+# NOTE: is 56 worse than ignore
+sp_after_semi                            = add      # ignore/add/remove/force
+
+# Add or remove space after ';' in non-empty 'for' statements. Default=Force
+sp_after_semi_for                        = add      # ignore/add/remove/force
+
+# Add or remove space after the final semicolon of an empty part of a for statement: for ( ; ; <here> ).
+sp_after_semi_for_empty                  = add      # ignore/add/remove/force
+
+# Add or remove space before '[' (except '[]')
+sp_before_square                         = remove   # ignore/add/remove/force
+
+# Add or remove space before '[]'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_before_squares                        = ignore   # ignore/add/remove/force
+
+# Add or remove space inside a non-empty '[' and ']'
+sp_inside_square                         = remove   # ignore/add/remove/force
+
+# Add or remove space after ','
+sp_after_comma                           = add      # ignore/add/remove/force #force
+
+# Add or remove space before ','
+# NOTE: is 58 worse than ignore
+sp_before_comma                          = remove   # ignore/add/remove/force
+
+# Add or remove space between an open paren and comma: '(,' vs '( ,'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_paren_comma                           = ignore   # ignore/add/remove/force
+
+# Add or remove space before the variadic '...' when preceded by a non-punctuator
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_before_ellipsis                       = ignore   # ignore/add/remove/force
+
+# Add or remove space after class ':'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_after_class_colon                     = ignore   # ignore/add/remove/force
+
+# Add or remove space before class ':'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_before_class_colon                    = ignore   # ignore/add/remove/force
+
+# Add or remove space before case ':'. Default=Remove
+sp_before_case_colon                     = remove   # ignore/add/remove/force
+
+# Add or remove space between 'operator' and operator sign
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_after_operator                        = ignore   # ignore/add/remove/force
+
+# Add or remove space between the operator symbol and the open paren, as in 'operator ++('
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_after_operator_sym                    = ignore   # ignore/add/remove/force
+
+# Add or remove space after C/D cast, i.e. 'cast(int)a' vs 'cast(int) a' or '(int)a' vs '(int) a'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_after_cast                            = ignore   # ignore/add/remove/force
+
+# Add or remove spaces inside cast parens
+sp_inside_paren_cast                     = remove   # ignore/add/remove/force
+
+# Add or remove space between the type and open paren in a C++ cast, i.e. 'int(exp)' vs 'int (exp)'
+sp_cpp_cast_paren                        = remove   # ignore/add/remove/force
+
+# Add or remove space between 'sizeof' and '('
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_sizeof_paren                          = ignore   # ignore/add/remove/force
+
+# Add or remove space after the tag keyword (Pawn)
+sp_after_tag                             = ignore   # ignore/add/remove/force #ignore
+
+# Add or remove space inside enum '{' and '}'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_inside_braces_enum                    = ignore   # ignore/add/remove/force
+
+# Add or remove space inside struct/union '{' and '}'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_inside_braces_struct                  = ignore   # ignore/add/remove/force
+
+# Add or remove space inside '{' and '}'
+sp_inside_braces                         = add      # ignore/add/remove/force
+
+# Add or remove space inside '{}'
+# NOTE: is 10 worse than ignore
+sp_inside_braces_empty                   = remove   # ignore/add/remove/force
+
+# Add or remove space between return type and function name
+# A minimum of 1 is forced except for pointer return types.
+sp_type_func                             = add      # ignore/add/remove/force
+
+# Add or remove space between function name and '(' on function declaration
+# NOTE: is 30 worse than ignore
+sp_func_proto_paren                      = remove   # ignore/add/remove/force
+
+# Add or remove space between function name and '(' on function definition
+# NOTE: is 400 worse than ignore
+sp_func_def_paren                        = remove   # ignore/add/remove/force
+
+# Add or remove space inside empty function '()'
+sp_inside_fparens                        = remove   # ignore/add/remove/force
+
+# Add or remove space inside function '(' and ')'
+# NOTE: is 78 worse than ignore
+sp_inside_fparen                         = remove   # ignore/add/remove/force
+
+# Add or remove space inside the first parens in the function type: 'void (*x)(...)'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_inside_tparen                         = ignore   # ignore/add/remove/force
+
+# Add or remove between the parens in the function type: 'void (*x)(...)'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_after_tparen_close                    = ignore   # ignore/add/remove/force
+
+# Add or remove space between ']' and '(' when part of a function call.
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_square_fparen                         = ignore   # ignore/add/remove/force
+
+# Add or remove space between ')' and '{' of function
+sp_fparen_brace                          = add      # ignore/add/remove/force
+
+# Add or remove space between function name and '(' on function calls
+# NOTE: is 940 worse than ignore
+sp_func_call_paren                       = remove   # ignore/add/remove/force
+
+# Add or remove space between function name and '()' on function calls without parameters.
+# If set to 'ignore' (the default), sp_func_call_paren is used.
+sp_func_call_paren_empty                 = remove   # ignore/add/remove/force
+
+# Add or remove space between the user function name and '(' on function calls
+# You need to set a keyword to be a user function, like this: 'set func_call_user _' in the config file.
+sp_func_call_user_paren                  = remove   # ignore/add/remove/force
+
+# Add or remove space between a constructor/destructor and the open paren
+sp_func_class_paren                      = remove   # ignore/add/remove/force
+
+# Add or remove space between 'return' and '('
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_return_paren                          = ignore   # ignore/add/remove/force
+
+# Add or remove space between '__attribute__' and '('
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_attribute_paren                       = ignore   # ignore/add/remove/force
+
+# Add or remove space between 'defined' and '(' in '#if defined (FOO)'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_defined_paren                         = ignore   # ignore/add/remove/force
+
+# Add or remove space between 'throw' and '(' in 'throw (something)'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_throw_paren                           = ignore   # ignore/add/remove/force
+
+# Add or remove space between 'throw' and anything other than '(' as in '@throw [...];'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_after_throw                           = ignore   # ignore/add/remove/force
+
+# Add or remove space between 'catch' and '(' in 'catch (something) { }'
+# If set to ignore, sp_before_sparen is used.
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_catch_paren                           = ignore   # ignore/add/remove/force
+
+# Add or remove space between 'version' and '(' in 'version (something) { }' (D language)
+# If set to ignore, sp_before_sparen is used.
+sp_version_paren                         = ignore   # ignore/add/remove/force #ignore
+
+# Add or remove space between 'scope' and '(' in 'scope (something) { }' (D language)
+# If set to ignore, sp_before_sparen is used.
+sp_scope_paren                           = ignore   # ignore/add/remove/force #ignore
+
+# Add or remove space between macro and value
+sp_macro                                 = remove   # ignore/add/remove/force #force
+
+# Add or remove space between macro function ')' and value
+sp_macro_func                            = remove   # ignore/add/remove/force #force
+
+# Add or remove space between 'else' and '{' if on the same line
+sp_else_brace                            = add      # ignore/add/remove/force
+
+# Add or remove space between '}' and 'else' if on the same line
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_brace_else                            = ignore   # ignore/add/remove/force
+
+# Add or remove space between '}' and the name of a typedef on the same line
+sp_brace_typedef                         = add      # ignore/add/remove/force
+
+# Add or remove space between 'catch' and '{' if on the same line
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_catch_brace                           = ignore   # ignore/add/remove/force
+
+# Add or remove space between '}' and 'catch' if on the same line
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_brace_catch                           = ignore   # ignore/add/remove/force
+
+# Add or remove space between 'finally' and '{' if on the same line
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_finally_brace                         = ignore   # ignore/add/remove/force
+
+# Add or remove space between '}' and 'finally' if on the same line
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_brace_finally                         = ignore   # ignore/add/remove/force
+
+# Add or remove space between 'try' and '{' if on the same line
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_try_brace                             = ignore   # ignore/add/remove/force
+
+# Add or remove space between get/set and '{' if on the same line
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_getset_brace                          = ignore   # ignore/add/remove/force
+
+# Add or remove space before the '::' operator
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_before_dc                             = ignore   # ignore/add/remove/force
+
+# Add or remove space after the '::' operator
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_after_dc                              = ignore   # ignore/add/remove/force
+
+# Add or remove around the D named array initializer ':' operator
+sp_d_array_colon                         = ignore   # ignore/add/remove/force #ignore
+
+# Add or remove space after the '!' (not) operator. Default=Remove
+sp_not                                   = remove   # ignore/add/remove/force
+
+# Add or remove space after the '~' (invert) operator. Default=Remove
+sp_inv                                   = remove   # ignore/add/remove/force
+
+# Add or remove space after the '&' (address-of) operator. Default=Remove
+# This does not affect the spacing after a '&' that is part of a type.
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_addr                                  = ignore   # ignore/add/remove/force
+
+# Add or remove space around the '.' or '->' operators. Default=Remove
+# NOTE: is 28 worse than ignore
+sp_member                                = remove   # ignore/add/remove/force
+
+# Add or remove space after the '*' (dereference) operator. Default=Remove
+# This does not affect the spacing after a '*' that is part of a type.
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_deref                                 = ignore   # ignore/add/remove/force
+
+# Add or remove space after '+' or '-', as in 'x = -5' or 'y = +7'. Default=Remove
+# NOTE: is 4 worse than ignore
+sp_sign                                  = remove   # ignore/add/remove/force
+
+# Add or remove space before or after '++' and '--', as in '(--x)' or 'y++;'. Default=Remove
+sp_incdec                                = remove   # ignore/add/remove/force
+
+# Add or remove space before a backslash-newline at the end of a line. Default=Add
+sp_before_nl_cont                        = add      # ignore/add/remove/force #force
+
+# Add or remove space after the scope '+' or '-', as in '-(void) foo;' or '+(int) bar;'
+sp_after_oc_scope                        = ignore   # ignore/add/remove/force #ignore
+
+# Add or remove space after the colon in message specs
+# '-(int) f:(int) x;' vs '-(int) f: (int) x;'
+sp_after_oc_colon                        = ignore   # ignore/add/remove/force #ignore
+
+# Add or remove space before the colon in message specs
+# '-(int) f: (int) x;' vs '-(int) f : (int) x;'
+sp_before_oc_colon                       = ignore   # ignore/add/remove/force #ignore
+
+# Add or remove space after the colon in immutable dictionary expression
+# 'NSDictionary *test = @{@"foo" :@"bar"};'
+sp_after_oc_dict_colon                   = ignore   # ignore/add/remove/force #ignore
+
+# Add or remove space before the colon in immutable dictionary expression
+# 'NSDictionary *test = @{@"foo" :@"bar"};'
+sp_before_oc_dict_colon                  = ignore   # ignore/add/remove/force #ignore
+
+# Add or remove space after the colon in message specs
+# '[object setValue:1];' vs '[object setValue: 1];'
+sp_after_send_oc_colon                   = ignore   # ignore/add/remove/force #ignore
+
+# Add or remove space before the colon in message specs
+# '[object setValue:1];' vs '[object setValue :1];'
+sp_before_send_oc_colon                  = ignore   # ignore/add/remove/force #ignore
+
+# Add or remove space after the (type) in message specs
+# '-(int)f: (int) x;' vs '-(int)f: (int)x;'
+sp_after_oc_type                         = ignore   # ignore/add/remove/force #ignore
+
+# Add or remove space after the first (type) in message specs
+# '-(int) f:(int)x;' vs '-(int)f:(int)x;'
+sp_after_oc_return_type                  = ignore   # ignore/add/remove/force #ignore
+
+# Add or remove space between '@selector' and '('
+# '@selector(msgName)' vs '@selector (msgName)'
+# Also applies to @protocol() constructs
+sp_after_oc_at_sel                       = ignore   # ignore/add/remove/force #ignore
+
+# Add or remove space between '@selector(x)' and the following word
+# '@selector(foo) a:' vs '@selector(foo)a:'
+sp_after_oc_at_sel_parens                = ignore   # ignore/add/remove/force #ignore
+
+# Add or remove space inside '@selector' parens
+# '@selector(foo)' vs '@selector( foo )'
+# Also applies to @protocol() constructs
+sp_inside_oc_at_sel_parens               = ignore   # ignore/add/remove/force #ignore
+
+# Add or remove space before a block pointer caret
+# '^int (int arg){...}' vs. ' ^int (int arg){...}'
+sp_before_oc_block_caret                 = ignore   # ignore/add/remove/force #ignore
+
+# Add or remove space after a block pointer caret
+# '^int (int arg){...}' vs. '^ int (int arg){...}'
+sp_after_oc_block_caret                  = ignore   # ignore/add/remove/force #ignore
+
+# Add or remove space between the receiver and selector in a message.
+# '[receiver selector ...]'
+sp_after_oc_msg_receiver                 = ignore   # ignore/add/remove/force #ignore
+
+# Add or remove space after @property.
+sp_after_oc_property                     = ignore   # ignore/add/remove/force #ignore
+
+# Add or remove space around the ':' in 'b ? t : f'
+sp_cond_colon                            = add      # ignore/add/remove/force
+
+# Add or remove space around the '?' in 'b ? t : f'
+sp_cond_question                         = add      # ignore/add/remove/force
+
+# Fix the spacing between 'case' and the label. Only 'ignore' and 'force' make sense here.
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_case_label                            = ignore   # ignore/add/remove/force
+
+# Control the space around the D '..' operator.
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_range                                 = ignore   # ignore/add/remove/force
+
+# Control the spacing after ':' in 'for (TYPE VAR : EXPR)' (Java)
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_after_for_colon                       = ignore   # ignore/add/remove/force
+
+# Control the spacing before ':' in 'for (TYPE VAR : EXPR)' (Java)
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_before_for_colon                      = ignore   # ignore/add/remove/force
+
+# Control the spacing in 'extern (C)' (D)
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_extern_paren                          = ignore   # ignore/add/remove/force
+
+# Control the space after the opening of a C++ comment '// A' vs '//A'
+sp_cmt_cpp_start                         = add      # ignore/add/remove/force #force
+
+# Controls the spaces between #else or #endif and a trailing comment
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_endif_cmt                             = ignore   # ignore/add/remove/force
+
+# Controls the spaces after 'new', 'delete', and 'delete[]'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_after_new                             = ignore   # ignore/add/remove/force
+
+# Controls the spaces before a trailing or embedded comment
+sp_before_tr_emb_cmt                     = force    # ignore/add/remove/force #force
+
+# Number of spaces before a trailing or embedded comment
+sp_num_before_tr_emb_cmt                 = 2        # number #force
+
+# Control space between a Java annotation and the open paren.
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+sp_annotation_paren                      = ignore   # ignore/add/remove/force
+
+#
+# Code alignment (not left column spaces/tabs)
+#
+
+# Whether to keep non-indenting tabs
+align_keep_tabs                          = false    # false/true #force
+
+# Whether to use tabs for aligning
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+align_with_tabs                          = false    # false/true
+
+# Whether to bump out to the next tab when aligning
+align_on_tabstop                         = false    # false/true
+
+# Whether to left-align numbers
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+align_number_left                        = false    # false/true
+
+# Align variable definitions in prototypes and functions
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+align_func_params                        = false    # false/true
+
+# Align parameters in single-line functions that have the same name.
+# The function names must already be aligned with each other.
+align_same_func_call_params              = false    # false/true
+
+# The span for aligning variable definitions (0=don't align)
+align_var_def_span                       = 0        # number
+
+# How to align the star in variable definitions.
+#  0=Part of the type     'void *   foo;'
+#  1=Part of the variable 'void     *foo;'
+#  2=Dangling             'void    *foo;'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+align_var_def_star_style                 = 0        # number
+
+# How to align the '&' in variable definitions.
+#  0=Part of the type
+#  1=Part of the variable
+#  2=Dangling
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+align_var_def_amp_style                  = 0        # number
+
+# The threshold for aligning variable definitions (0=no limit)
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+align_var_def_thresh                     = 0        # number
+
+# The gap for aligning variable definitions
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+align_var_def_gap                        = 0        # number
+
+# Whether to align the colon in struct bit fields
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+align_var_def_colon                      = false    # false/true
+
+# Whether to align any attribute after the variable name
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+align_var_def_attribute                  = false    # false/true
+
+# Whether to align inline struct/enum/union variable definitions
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+align_var_def_inline                     = false    # false/true
+
+# The span for aligning on '=' in assignments (0=don't align)
+align_assign_span                        = 0        # number
+
+# The threshold for aligning on '=' in assignments (0=no limit)
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+align_assign_thresh                      = 0        # number
+
+# The span for aligning on '=' in enums (0=don't align)
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+align_enum_equ_span                      = 0        # number
+
+# The threshold for aligning on '=' in enums (0=no limit)
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+align_enum_equ_thresh                    = 0        # number
+
+# The span for aligning struct/union (0=don't align)
+align_var_struct_span                    = 0        # number
+
+# The threshold for aligning struct/union member definitions (0=no limit)
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+align_var_struct_thresh                  = 0        # number
+
+# The gap for aligning struct/union member definitions
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+align_var_struct_gap                     = 0        # number
+
+# The span for aligning struct initializer values (0=don't align)
+align_struct_init_span                   = 0        # number
+
+# The minimum space between the type and the synonym of a typedef
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+align_typedef_gap                        = 0        # number
+
+# The span for aligning single-line typedefs (0=don't align)
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+align_typedef_span                       = 0        # number
+
+# How to align typedef'd functions with other typedefs
+# 0: Don't mix them at all
+# 1: align the open paren with the types
+# 2: align the function type name with the other type names
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+align_typedef_func                       = 0        # number
+
+# Controls the positioning of the '*' in typedefs. Just try it.
+# 0: Align on typedef type, ignore '*'
+# 1: The '*' is part of type name: typedef int  *pint;
+# 2: The '*' is part of the type, but dangling: typedef int *pint;
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+align_typedef_star_style                 = 0        # number
+
+# Controls the positioning of the '&' in typedefs. Just try it.
+# 0: Align on typedef type, ignore '&'
+# 1: The '&' is part of type name: typedef int  &pint;
+# 2: The '&' is part of the type, but dangling: typedef int &pint;
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+align_typedef_amp_style                  = 0        # number
+
+# The span for aligning comments that end lines (0=don't align)
+align_right_cmt_span                     = 2        # number
+
+# If aligning comments, mix with comments after '}' and #endif with less than 3 spaces before the comment
+align_right_cmt_mix                      = false    # false/true
+
+# If a trailing comment is more than this number of columns away from the text it follows,
+# it will qualify for being aligned. This has to be > 0 to do anything.
+# WARNING: Best is not unique (0 1)
+align_right_cmt_gap                      = 0        # number
+
+# Align trailing comment at or beyond column N; 'pulls in' comments as a bonus side effect (0=ignore)
+# WARNING: Best is not unique (1 2)
+align_right_cmt_at_col                   = 0        # number
+
+# The span for aligning function prototypes (0=don't align)
+align_func_proto_span                    = 0        # number
+
+# Minimum gap between the return type and the function name.
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+align_func_proto_gap                     = 0        # number
+
+# Align function protos on the 'operator' keyword instead of what follows
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+align_on_operator                        = false    # false/true
+
+# Whether to mix aligning prototype and variable declarations.
+# If true, align_var_def_XXX options are used instead of align_func_proto_XXX options.
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+align_mix_var_proto                      = false    # false/true
+
+# Align single-line functions with function prototypes, uses align_func_proto_span
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+align_single_line_func                   = false    # false/true
+
+# Aligning the open brace of single-line functions.
+# Requires align_single_line_func=true, uses align_func_proto_span
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+align_single_line_brace                  = false    # false/true
+
+# Gap for align_single_line_brace.
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+align_single_line_brace_gap              = 0        # number
+
+# The span for aligning ObjC msg spec (0=don't align)
+align_oc_msg_spec_span                   = 0        # number #ignore
+
+# Whether to align macros wrapped with a backslash and a newline.
+# This will not work right if the macro contains a multi-line comment.
+align_nl_cont                            = false    # false/true
+
+# # Align macro functions and variables together
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+align_pp_define_together                 = false    # false/true
+
+# The minimum space between label and value of a preprocessor define
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+align_pp_define_gap                      = 0        # number
+
+# The span for aligning on '#define' bodies (0=don't align)
+align_pp_define_span                     = 0        # number
+
+# Align lines that start with '<<' with previous '<<'. Default=true
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+align_left_shift                         = false    # false/true
+
+# Span for aligning parameters in an Obj-C message call on the ':' (0=don't align)
+align_oc_msg_colon_span                  = 0        # number #ignore
+
+# If true, always align with the first parameter, even if it is too short.
+align_oc_msg_colon_first                 = false    # false/true #ignore
+
+# Aligning parameters in an Obj-C '+' or '-' declaration on the ':'
+align_oc_decl_colon                      = false    # false/true #ignore
+
+#
+# Newline adding and removing options
+#
+
+# Whether to collapse empty blocks between '{' and '}'
+nl_collapse_empty_body                   = false    # false/true
+
+# Don't split one-line braced assignments - 'foo_t f = { 1, 2 };'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_assign_leave_one_liners               = false    # false/true
+
+# Don't split one-line braced statements inside a class xx { } body
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_class_leave_one_liners                = false    # false/true
+
+# Don't split one-line enums: 'enum foo { BAR = 15 };'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_enum_leave_one_liners                 = false    # false/true
+
+# Don't split one-line get or set functions
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_getset_leave_one_liners               = false    # false/true
+
+# Don't split one-line function definitions - 'int foo() { return 0; }'
+nl_func_leave_one_liners                 = true     # false/true
+
+# Don't split one-line if/else statements - 'if(a) b++;'
+nl_if_leave_one_liners                   = true     # false/true
+
+# Don't split one-line OC messages
+nl_oc_msg_leave_one_liner                = false    # false/true #ignore
+
+# Add or remove newlines at the start of the file
+nl_start_of_file                         = remove   # ignore/add/remove/force #force
+
+# The number of newlines at the start of the file (only used if nl_start_of_file is 'add' or 'force'
+nl_start_of_file_min                     = 0        # number #force
+
+# Add or remove newline at the end of the file
+nl_end_of_file                           = add      # ignore/add/remove/force #force
+
+# The number of newlines at the end of the file (only used if nl_end_of_file is 'add' or 'force')
+nl_end_of_file_min                       = 1        # number #force
+
+# Add or remove newline between '=' and '{'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_assign_brace                          = ignore   # ignore/add/remove/force
+
+# Add or remove newline between '=' and '[' (D only)
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_assign_square                         = ignore   # ignore/add/remove/force
+
+# Add or remove newline after '= [' (D only). Will also affect the newline before the ']'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_after_square_assign                   = ignore   # ignore/add/remove/force
+
+# The number of blank lines after a block of variable definitions at the top of a function body
+# 0 = No change (default)
+nl_func_var_def_blk                      = 0        # number #force
+
+# The number of newlines before a block of typedefs
+# 0 = No change (default)
+nl_typedef_blk_start                     = 0        # number #force
+
+# The number of newlines after a block of typedefs
+# 0 = No change (default)
+nl_typedef_blk_end                       = 0        # number #force
+
+# The maximum consecutive newlines within a block of typedefs
+# 0 = No change (default)
+# WARNING: Best is not unique (0 2)
+nl_typedef_blk_in                        = 0        # number
+
+# The number of newlines before a block of variable definitions not at the top of a function body
+# 0 = No change (default)
+# WARNING: Best is not unique (0 1)
+nl_var_def_blk_start                     = 0        # number
+
+# The number of newlines after a block of variable definitions not at the top of a function body
+# 0 = No change (default)
+# WARNING: Best is not unique (0 1)
+nl_var_def_blk_end                       = 0        # number
+
+# The maximum consecutive newlines within a block of variable definitions
+# 0 = No change (default)
+# WARNING: Best is not unique (0 3)
+nl_var_def_blk_in                        = 0        # number
+
+# Add or remove newline between a function call's ')' and '{', as in:
+# list_for_each(item, &list) { }
+# NOTE: is 28 worse than ignore
+nl_fcall_brace                           = add      # ignore/add/remove/force
+
+# Add or remove newline between 'enum' and '{'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_enum_brace                            = ignore   # ignore/add/remove/force
+
+# Add or remove newline between 'struct and '{'
+nl_struct_brace                          = add      # ignore/add/remove/force
+
+# Add or remove newline between 'union' and '{'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_union_brace                           = ignore   # ignore/add/remove/force
+
+# Add or remove newline between 'if' and '{'
+# NOTE: is 231 worse than ignore
+nl_if_brace                              = add      # ignore/add/remove/force
+
+# Add or remove newline between '}' and 'else'
+nl_brace_else                            = add      # ignore/add/remove/force
+
+# Add or remove newline between 'else if' and '{'
+# If set to ignore, nl_if_brace is used instead
+nl_elseif_brace                          = add      # ignore/add/remove/force
+
+# Add or remove newline between 'else' and '{'
+nl_else_brace                            = add      # ignore/add/remove/force
+
+# Add or remove newline between 'else' and 'if'
+nl_else_if                               = remove   # ignore/add/remove/force
+
+# Add or remove newline between '}' and 'finally'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_brace_finally                         = ignore   # ignore/add/remove/force
+
+# Add or remove newline between 'finally' and '{'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_finally_brace                         = ignore   # ignore/add/remove/force
+
+# Add or remove newline between 'try' and '{'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_try_brace                             = ignore   # ignore/add/remove/force
+
+# Add or remove newline between get/set and '{'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_getset_brace                          = ignore   # ignore/add/remove/force
+
+# Add or remove newline between 'for' and '{'
+# NOTE: is 93 worse than ignore
+nl_for_brace                             = add      # ignore/add/remove/force
+
+# Add or remove newline between 'catch' and '{'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_catch_brace                           = ignore   # ignore/add/remove/force
+
+# Add or remove newline between '}' and 'catch'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_brace_catch                           = ignore   # ignore/add/remove/force
+
+# Add or remove newline between 'while' and '{'
+# NOTE: is 21 worse than ignore
+nl_while_brace                           = add      # ignore/add/remove/force
+
+# Add or remove newline between 'scope (x)' and '{' (D)
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_scope_brace                           = ignore   # ignore/add/remove/force
+
+# Add or remove newline between 'unittest' and '{' (D)
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_unittest_brace                        = ignore   # ignore/add/remove/force
+
+# Add or remove newline between 'version (x)' and '{' (D)
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_version_brace                         = ignore   # ignore/add/remove/force
+
+# Add or remove newline between 'using' and '{'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_using_brace                           = ignore   # ignore/add/remove/force
+
+# Add or remove newline between two open or close braces.
+# Due to general newline/brace handling, REMOVE may not work.
+nl_brace_brace                           = remove   # ignore/add/remove/force
+
+# Add or remove newline between 'do' and '{'
+# NOTE: is 3 worse than ignore
+nl_do_brace                              = add      # ignore/add/remove/force
+
+# Add or remove newline between '}' and 'while' of 'do' statement
+nl_brace_while                           = add      # ignore/add/remove/force #force
+
+# Add or remove newline between 'switch' and '{'
+# NOTE: is 21 worse than ignore
+nl_switch_brace                          = add      # ignore/add/remove/force
+
+# Add a newline between ')' and '{' if the ')' is on a different line than the if/for/etc.
+# Overrides nl_for_brace, nl_if_brace, nl_switch_brace, nl_while_switch, and nl_catch_brace.
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_multi_line_cond                       = false    # false/true
+
+# Force a newline in a define after the macro name for multi-line defines.
+nl_multi_line_define                     = false    # false/true
+
+# Whether to put a newline before 'case' statement
+nl_before_case                           = false    # false/true
+
+# Add or remove newline between ')' and 'throw'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_before_throw                          = ignore   # ignore/add/remove/force
+
+# Whether to put a newline after 'case' statement
+nl_after_case                            = false    # false/true
+
+# Add or remove a newline between a case ':' and '{'. Overrides nl_after_case.
+# NOTE: is 27 worse than ignore
+nl_case_colon_brace                      = add      # ignore/add/remove/force
+
+# Newline between namespace and {
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_namespace_brace                       = ignore   # ignore/add/remove/force
+
+# Add or remove newline between 'template<>' and whatever follows.
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_template_class                        = ignore   # ignore/add/remove/force
+
+# Add or remove newline between 'class' and '{'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_class_brace                           = ignore   # ignore/add/remove/force
+
+# Add or remove newline after each ',' in the constructor member initialization
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_class_init_args                       = ignore   # ignore/add/remove/force
+
+# Add or remove newline between return type and function name in a function definition
+nl_func_type_name                        = remove   # ignore/add/remove/force
+
+# Add or remove newline between return type and function name inside a class {}
+# Uses nl_func_type_name or nl_func_proto_type_name if set to ignore.
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_func_type_name_class                  = ignore   # ignore/add/remove/force
+
+# Add or remove newline between function scope and name in a definition
+# Controls the newline after '::' in 'void A::f() { }'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_func_scope_name                       = ignore   # ignore/add/remove/force
+
+# Add or remove newline between return type and function name in a prototype
+# NOTE: is 6 worse than ignore
+nl_func_proto_type_name                  = remove   # ignore/add/remove/force
+
+# Add or remove newline between a function name and the opening '('
+nl_func_paren                            = remove   # ignore/add/remove/force
+
+# Add or remove newline between a function name and the opening '(' in the definition
+nl_func_def_paren                        = remove   # ignore/add/remove/force
+
+# Add or remove newline after '(' in a function declaration
+# NOTE: is 6 worse than ignore
+nl_func_decl_start                       = remove   # ignore/add/remove/force
+
+# Add or remove newline after '(' in a function definition
+# NOTE: is 23 worse than ignore
+nl_func_def_start                        = remove   # ignore/add/remove/force
+
+# Overrides nl_func_decl_start when there is only one parameter.
+nl_func_decl_start_single                = ignore   # ignore/add/remove/force #force
+
+# Overrides nl_func_def_start when there is only one parameter.
+nl_func_def_start_single                 = ignore   # ignore/add/remove/force #force
+
+# Add or remove newline after each ',' in a function declaration
+# NOTE: is 38 worse than ignore
+nl_func_decl_args                        = remove   # ignore/add/remove/force
+
+# Add or remove newline after each ',' in a function definition
+# NOTE: is 37 worse than ignore
+nl_func_def_args                         = remove   # ignore/add/remove/force
+
+# Add or remove newline before the ')' in a function declaration
+nl_func_decl_end                         = remove   # ignore/add/remove/force
+
+# Add or remove newline before the ')' in a function definition
+nl_func_def_end                          = remove   # ignore/add/remove/force
+
+# Overrides nl_func_decl_end when there is only one parameter.
+nl_func_decl_end_single                  = ignore   # ignore/add/remove/force #force
+
+# Overrides nl_func_def_end when there is only one parameter.
+nl_func_def_end_single                   = ignore   # ignore/add/remove/force #force
+
+# Add or remove newline between '()' in a function declaration.
+nl_func_decl_empty                       = remove   # ignore/add/remove/force
+
+# Add or remove newline between '()' in a function definition.
+nl_func_def_empty                        = remove   # ignore/add/remove/force
+
+# Whether to put each OC message parameter on a separate line
+# See nl_oc_msg_leave_one_liner #ignore
+nl_oc_msg_args                           = false    # false/true #ignore
+
+# Add or remove newline between function signature and '{'
+# NOTE: is 156 worse than ignore
+nl_fdef_brace                            = add      # ignore/add/remove/force
+
+# Add or remove a newline between the return keyword and return expression.
+# NOTE: is 15 worse than ignore
+nl_return_expr                           = remove   # ignore/add/remove/force
+
+# Whether to put a newline after semicolons, except in 'for' statements
+nl_after_semicolon                       = false    # false/true
+
+# Whether to put a newline after brace open.
+# This also adds a newline before the matching brace close.
+nl_after_brace_open                      = false    # false/true
+
+# If nl_after_brace_open and nl_after_brace_open_cmt are true, a newline is
+# placed between the open brace and a trailing single-line comment.
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_after_brace_open_cmt                  = false    # false/true
+
+# Whether to put a newline after a virtual brace open with a non-empty body.
+# These occur in un-braced if/while/do/for statement bodies.
+nl_after_vbrace_open                     = false    # false/true
+
+# Whether to put a newline after a virtual brace open with an empty body.
+# These occur in un-braced if/while/do/for statement bodies.
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_after_vbrace_open_empty               = false    # false/true
+
+# Whether to put a newline after a brace close.
+# Does not apply if followed by a necessary ';'.
+nl_after_brace_close                     = false    # false/true
+
+# Whether to put a newline after a virtual brace close.
+# Would add a newline before return in: 'if (foo) a++; return;'
+nl_after_vbrace_close                    = false    # false/true
+
+# Control the newline between the close brace and 'b' in: 'struct { int a; } b;'
+# Affects enums, unions, and structures. If set to ignore, uses nl_after_brace_close
+nl_brace_struct_var                      = remove   # ignore/add/remove/force
+
+# Whether to alter newlines in '#define' macros
+nl_define_macro                          = false    # false/true
+
+# Whether to not put blanks after '#ifxx', '#elxx', or before '#endif'
+nl_squeeze_ifdef                         = false    # false/true
+
+# Add or remove blank line before 'if'
+nl_before_if                             = ignore   # ignore/add/remove/force #force
+
+# Add or remove blank line after 'if' statement
+nl_after_if                              = ignore   # ignore/add/remove/force #force
+
+# Add or remove blank line before 'for'
+nl_before_for                            = ignore   # ignore/add/remove/force #force
+
+# Add or remove blank line after 'for' statement
+nl_after_for                             = ignore   # ignore/add/remove/force #force
+
+# Add or remove blank line before 'while'
+nl_before_while                          = ignore   # ignore/add/remove/force #force
+
+# Add or remove blank line after 'while' statement
+nl_after_while                           = ignore   # ignore/add/remove/force #force
+
+# Add or remove blank line before 'switch'
+nl_before_switch                         = ignore   # ignore/add/remove/force #force
+
+# Add or remove blank line after 'switch' statement
+nl_after_switch                          = ignore   # ignore/add/remove/force #force
+
+# Add or remove blank line before 'do'
+nl_before_do                             = ignore   # ignore/add/remove/force #force
+
+# Add or remove blank line after 'do/while' statement
+nl_after_do                              = ignore   # ignore/add/remove/force #force
+
+# Whether to double-space commented-entries in struct/enum
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_ds_struct_enum_cmt                    = false    # false/true
+
+# Whether to double-space before the close brace of a struct/union/enum
+# (lower priority than 'eat_blanks_before_close_brace')
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_ds_struct_enum_close_brace            = false    # false/true
+
+# Add or remove a newline around a class colon.
+# Related to pos_class_colon, nl_class_init_args, and pos_comma.
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_class_colon                           = ignore   # ignore/add/remove/force
+
+# Change simple unbraced if statements into a one-liner
+# 'if(b)\n i++;' => 'if(b) i++;'
+nl_create_if_one_liner                   = false    # false/true
+
+# Change simple unbraced for statements into a one-liner
+# 'for (i=0;i<5;i++)\n foo(i);' => 'for (i=0;i<5;i++) foo(i);'
+nl_create_for_one_liner                  = false    # false/true
+
+# Change simple unbraced while statements into a one-liner
+# 'while (i<5)\n foo(i++);' => 'while (i<5) foo(i++);'
+nl_create_while_one_liner                = false    # false/true
+
+#
+# Positioning options
+#
+
+# The position of arithmetic operators in wrapped expressions
+pos_arith                                = lead     # ignore/join/lead/lead_break/lead_force/trail/trail_break/trail_force #force
+
+# The position of assignment in wrapped expressions.
+# Do not affect '=' followed by '{'
+pos_assign                               = trail    # ignore/join/lead/lead_break/lead_force/trail/trail_break/trail_force #force
+
+# The position of boolean operators in wrapped expressions
+pos_bool                                 = lead     # ignore/join/lead/lead_break/lead_force/trail/trail_break/trail_force #force
+
+# The position of comparison operators in wrapped expressions
+pos_compare                              = lead     # ignore/join/lead/lead_break/lead_force/trail/trail_break/trail_force #force
+
+# The position of conditional (b ? t : f) operators in wrapped expressions
+pos_conditional                          = lead     # ignore/join/lead/lead_break/lead_force/trail/trail_break/trail_force #force
+
+# The position of the comma in wrapped expressions
+pos_comma                                = trail    # ignore/join/lead/lead_break/lead_force/trail/trail_break/trail_force #force
+
+# The position of the comma in the constructor initialization list
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+pos_class_comma                          = ignore   # ignore/join/lead/lead_break/lead_force/trail/trail_break/trail_force
+
+# The position of colons between constructor and member initialization
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+pos_class_colon                          = ignore   # ignore/join/lead/lead_break/lead_force/trail/trail_break/trail_force
+
+#
+# Line Splitting options
+#
+
+# Try to limit code width to N number of columns
+code_width                               = 0        # number
+
+# Whether to fully split long 'for' statements at semi-colons
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+ls_for_split_full                        = false    # false/true
+
+# Whether to fully split long function protos/calls at commas
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+ls_func_split_full                       = false    # false/true
+
+# Whether to split lines as close to code_width as possible and ignore some groupings
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+ls_code_width                            = false    # false/true
+
+#
+# Blank line options
+#
+
+# The maximum consecutive newlines
+nl_max                                   = 3        # number #force
+
+# The number of newlines after a function prototype, if followed by another function prototype
+# WARNING: Best is not unique (0 1)
+nl_after_func_proto                      = 0        # number
+
+# The number of newlines after a function prototype, if not followed by another function prototype
+# WARNING: Best is not unique (0 1)
+nl_after_func_proto_group                = 0        # number
+
+# The number of newlines after '}' of a multi-line function body
+nl_after_func_body                       = 0        # number
+
+# The number of newlines after '}' of a multi-line function body in a class declaration
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_after_func_body_class                 = 0        # number
+
+# The number of newlines after '}' of a single line function body
+# WARNING: Best is not unique (0 1)
+nl_after_func_body_one_liner             = 0        # number
+
+# The minimum number of newlines before a multi-line comment.
+# Doesn't apply if after a brace open or another multi-line comment.
+# WARNING: Best is not unique (0 1)
+nl_before_block_comment                  = 0        # number
+
+# The minimum number of newlines before a single-line C comment.
+# Doesn't apply if after a brace open or other single-line C comments.
+# WARNING: Best is not unique (0 1)
+nl_before_c_comment                      = 0        # number
+
+# The minimum number of newlines before a CPP comment.
+# Doesn't apply if after a brace open or other CPP comments.
+# WARNING: Best is not unique (0 1)
+nl_before_cpp_comment                    = 0        # number
+
+# Whether to force a newline after a multi-line comment.
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_after_multiline_comment               = false    # false/true
+
+# The number of newlines after '}' or ';' of a struct/enum/union definition
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_after_struct                          = 0        # number
+
+# The number of newlines after '}' or ';' of a class definition
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_after_class                           = 0        # number
+
+# The number of newlines before a 'private:', 'public:', 'protected:', 'signals:', or 'slots:' label.
+# Will not change the newline count if after a brace open.
+# 0 = No change.
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_before_access_spec                    = 0        # number
+
+# The number of newlines after a 'private:', 'public:', 'protected:', 'signals:', or 'slots:' label.
+# 0 = No change.
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_after_access_spec                     = 0        # number
+
+# The number of newlines between a function def and the function comment.
+# 0 = No change.
+nl_comment_func_def                      = 0        # number
+
+# The number of newlines after a try-catch-finally block that isn't followed by a brace close.
+# 0 = No change.
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_after_try_catch_finally               = 0        # number
+
+# The number of newlines before and after a property, indexer or event decl.
+# 0 = No change.
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_around_cs_property                    = 0        # number
+
+# The number of newlines between the get/set/add/remove handlers in C#.
+# 0 = No change.
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_between_get_set                       = 0        # number
+
+# Add or remove newline between C# property and the '{'
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_property_brace                        = ignore   # ignore/add/remove/force
+
+# Whether to remove blank lines after '{'
+eat_blanks_after_open_brace              = true     # false/true #force
+
+# Whether to remove blank lines before '}'
+eat_blanks_before_close_brace            = true     # false/true #force
+
+# How aggressively to remove extra newlines not in preproc.
+# 0: No change
+# 1: Remove most newlines not handled by other config
+# 2: Remove all newlines and reformat completely by config
+# ERROR: nl_remove_extra_newlines = 1 crashes with status 139.
+# ERROR: nl_remove_extra_newlines = 2 crashes with status 139.
+# WARNING: Best is not unique (0 indent_columns)
+nl_remove_extra_newlines                 = 0        # number
+
+# Whether to put a blank line before 'return' statements, unless after an open brace.
+nl_before_return                         = false    # false/true #force
+
+# Whether to put a blank line after 'return' statements, unless followed by a close brace.
+nl_after_return                          = false    # false/true #force
+
+# Whether to put a newline after a Java annotation statement.
+# Only affects annotations that are after a newline.
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_after_annotation                      = ignore   # ignore/add/remove/force
+
+# Controls the newline between two annotations.
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+nl_between_annotation                    = ignore   # ignore/add/remove/force
+
+#
+# Code modifying options (non-whitespace)
+#
+
+# Add or remove braces on single-line 'do' statement
+mod_full_brace_do                        = add      # ignore/add/remove/force
+
+# Add or remove braces on single-line 'for' statement
+# NOTE: is 5 worse than ignore
+mod_full_brace_for                       = remove   # ignore/add/remove/force
+
+# Add or remove braces on single-line function definitions. (Pawn)
+mod_full_brace_function                  = ignore   # ignore/add/remove/force #ignore
+
+# Add or remove braces on single-line 'if' statement. Will not remove the braces if they contain an 'else'.
+mod_full_brace_if                        = add      # ignore/add/remove/force
+
+# Make all if/elseif/else statements in a chain be braced or not. Overrides mod_full_brace_if.
+# If any must be braced, they are all braced.  If all can be unbraced, then the braces are removed.
+mod_full_brace_if_chain                  = true     # false/true #force
+
+# Don't remove braces around statements that span N newlines
+mod_full_brace_nl                        = 2        # number #force
+
+# Add or remove braces on single-line 'while' statement
+mod_full_brace_while                     = remove   # ignore/add/remove/force
+
+# Add or remove braces on single-line 'using ()' statement
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+mod_full_brace_using                     = ignore   # ignore/add/remove/force
+
+# Add or remove unnecessary paren on 'return' statement
+# NOTE: is 42 worse than ignore
+mod_paren_on_return                      = remove   # ignore/add/remove/force
+
+# Whether to change optional semicolons to real semicolons
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+mod_pawn_semicolon                       = false    # false/true
+
+# Add parens on 'while' and 'if' statement around bools
+mod_full_paren_if_bool                   = false    # false/true
+
+# Whether to remove superfluous semicolons
+mod_remove_extra_semicolon               = false    # false/true
+
+# If a function body exceeds the specified number of newlines and doesn't have a comment after
+# the close brace, a comment will be added.
+mod_add_long_function_closebrace_comment = 0        # number
+
+# If a switch body exceeds the specified number of newlines and doesn't have a comment after
+# the close brace, a comment will be added.
+mod_add_long_switch_closebrace_comment   = 0        # number
+
+# If an #ifdef body exceeds the specified number of newlines and doesn't have a comment after
+# the #endif, a comment will be added.
+mod_add_long_ifdef_endif_comment         = 0        # number
+
+# If an #ifdef or #else body exceeds the specified number of newlines and doesn't have a comment after
+# the #else, a comment will be added.
+mod_add_long_ifdef_else_comment          = 0        # number
+
+# If TRUE, will sort consecutive single-line 'import' statements [Java, D]
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+mod_sort_import                          = false    # false/true
+
+# If TRUE, will sort consecutive single-line 'using' statements [C#]
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+mod_sort_using                           = false    # false/true
+
+# If TRUE, will sort consecutive single-line '#include' statements [C/C++] and '#import' statements [Obj-C]
+# This is generally a bad idea, as it may break your code.
+mod_sort_include                         = false    # false/true
+
+# If TRUE, it will move a 'break' that appears after a fully braced 'case' before the close brace.
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+mod_move_case_break                      = false    # false/true
+
+# Will add or remove the braces around a fully braced case statement.
+# Will only remove the braces if there are no variable declarations in the block.
+# NOTE: is 507 worse than ignore
+mod_case_brace                           = remove   # ignore/add/remove/force
+
+# If TRUE, it will remove a void 'return;' that appears as the last statement in a function.
+mod_remove_empty_return                  = true     # false/true #force
+
+#
+# Comment modifications
+#
+
+# Try to wrap comments at cmt_width columns
+cmt_width                                = 0        # number
+
+# Set the comment reflow mode (default: 0)
+# 0: no reflowing (apart from the line wrapping due to cmt_width)
+# 1: no touching at all
+# 2: full reflow
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+cmt_reflow_mode                          = 0        # number
+
+# If false, disable all multi-line comment changes, including cmt_width. keyword substitution, and leading chars.
+# Default is true.
+cmt_indent_multi                         = false    # false/true
+
+# Whether to group c-comments that look like they are in a block
+cmt_c_group                              = false    # false/true
+
+# Whether to put an empty '/*' on the first line of the combined c-comment
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+cmt_c_nl_start                           = false    # false/true
+
+# Whether to put a newline before the closing '*/' of the combined c-comment
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+cmt_c_nl_end                             = false    # false/true
+
+# Whether to group cpp-comments that look like they are in a block
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+cmt_cpp_group                            = false    # false/true
+
+# Whether to put an empty '/*' on the first line of the combined cpp-comment
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+cmt_cpp_nl_start                         = false    # false/true
+
+# Whether to put a newline before the closing '*/' of the combined cpp-comment
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+cmt_cpp_nl_end                           = false    # false/true
+
+# Whether to change cpp-comments into c-comments
+cmt_cpp_to_c                             = false    # false/true
+
+# Whether to put a star on subsequent comment lines
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+cmt_star_cont                            = false    # false/true
+
+# The number of spaces to insert at the start of subsequent comment lines
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+cmt_sp_before_star_cont                  = 0        # number
+
+# The number of spaces to insert after the star on subsequent comment lines
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+cmt_sp_after_star_cont                   = 0        # number
+
+# For multi-line comments with a '*' lead, remove leading spaces if the first and last lines of
+# the comment are the same length. Default=True
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+cmt_multi_check_last                     = false    # false/true
+
+# The filename that contains text to insert at the head of a file if the file doesn't start with a C/C++ comment.
+# Will substitute $(filename) with the current file's name.
+# WARNING: unsupported string
+cmt_insert_file_header                   = ""         # string
+
+# The filename that contains text to insert at the end of a file if the file doesn't end with a C/C++ comment.
+# Will substitute $(filename) with the current file's name.
+# WARNING: unsupported string
+cmt_insert_file_footer                   = ""         # string
+
+# The filename that contains text to insert before a function implementation if the function isn't preceded with a C/C++ comment.
+# Will substitute $(function) with the function name and $(javaparam) with the javadoc @param and @return stuff.
+# Will also substitute $(fclass) with the class name: void CFoo::Bar() { ... }
+# WARNING: unsupported string
+cmt_insert_func_header                   = ""         # string
+
+# The filename that contains text to insert before a class if the class isn't preceded with a C/C++ comment.
+# Will substitute $(class) with the class name.
+# WARNING: unsupported string
+cmt_insert_class_header                  = ""         # string
+
+# The filename that contains text to insert before a Obj-C message specification if the method isn't preceeded with a C/C++ comment.
+# Will substitute $(message) with the function name and $(javaparam) with the javadoc @param and @return stuff.
+cmt_insert_oc_msg_header                 = ""         # string #ignore
+
+# If a preprocessor is encountered when stepping backwards from a function name, then
+# this option decides whether the comment should be inserted.
+# Affects cmt_insert_oc_msg_header, cmt_insert_func_header and cmt_insert_class_header. #ignore
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+cmt_insert_before_preproc                = false    # false/true
+
+#
+# Preprocessor options
+#
+
+# Control indent of preprocessors inside #if blocks at brace level 0
+# WARNING: Indifferent... please decide manually.
+pp_indent                                = ignore   # ignore/add/remove/force
+
+# Whether to indent #if/#else/#endif at the brace level (true) or from column 1 (false)
+pp_indent_at_level                       = false    # false/true
+
+# If pp_indent_at_level=false, specifies the number of columns to indent per level. Default=1.
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+pp_indent_count                          = 0        # number
+
+# Add or remove space after # based on pp_level of #if blocks
+# NOTE: is 28 worse than ignore
+pp_space                                 = remove   # ignore/add/remove/force
+
+# Sets the number of spaces added with pp_space
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+pp_space_count                           = 0        # number
+
+# The indent for #region and #endregion in C# and '#pragma region' in C/C++
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+pp_indent_region                         = 0        # number
+
+# Whether to indent the code between #region and #endregion
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+pp_region_indent_code                    = false    # false/true
+
+# If pp_indent_at_level=true, sets the indent for #if, #else, and #endif when not at file-level
+# WARNING: Code doesn't seem to use this feature - delete from the config?
+pp_indent_if                             = 0        # number
+
+# Control whether to indent the code between #if, #else and #endif when not at file-level
+pp_if_indent_code                        = false    # false/true
+
+# Whether to indent '#define' at the brace level (true) or from column 1 (false)
+pp_define_at_level                       = true     # false/true
+
+# You can force a token to be a type with the 'type' option.
+# Example:
+# type myfoo1 myfoo2
+
+type void
+type float
+type vector
+type entity
+type string
+type .void
+type .float
+type .vector
+type .entity
+type .string
+
+#
+# You can create custom macro-based indentation using macro-open,
+# macro-else and macro-close.
+# Example:
+# macro-open  BEGIN_TEMPLATE_MESSAGE_MAP
+# macro-open  BEGIN_MESSAGE_MAP
+# macro-close END_MESSAGE_MAP
+#
+# You can assign any keyword to any type with the set option.
+# set func_call_user _ N_
+
+# menu QC OO
+macro-open CLASS
+macro-else EXTENDS
+macro-close ENDCLASS
+
+# translations
+set func_call_user _
+
+#
+# The full syntax description of all custom definition config entries
+# is shown below:
+#
+# define custom tokens as:
+# - embed whitespace in token using '' escape character, or
+#   put token in quotes
+# - these: ' " and ` are recognized as quote delimiters
+#
+# type token1 token2 token3 ...
+#             ^ optionally specify multiple tokens on a single line
+# define def_token output_token
+#                  ^ output_token is optional, then NULL is assumed
+# macro-open token
+# macro-close token
+# macro-else token
+# set id token1 token2 ...
+#               ^ optionally specify multiple tokens on a single line
+#     ^ id is one of the names in token_enum.h sans the CT_ prefix,
+#       e.g. PP_PRAGMA
+#
+# all tokens are separated by any mix of ',' commas, '=' equal signs
+# and whitespace (space, tab)
+#
diff --git a/qcsrc/uncrustify.sh b/qcsrc/uncrustify.sh
new file mode 100755 (executable)
index 0000000..2df39aa
--- /dev/null
@@ -0,0 +1,22 @@
+fix_function_types() {
+       # Uncrustify handles QC function types (example:
+       #  void(void) func;
+       # ) wrong and removes the space between type and variable. Fix this by
+       # a simple sed on ")letter" which should normally not occur.
+       sed -e 's/)\([A-Za-z0-9]\)/) \1/g' "$@"
+}
+
+if [ -z "$UNCRUSTIFY_CONFIG" ]; then
+       UNCRUSTIFY_CONFIG=`git rev-parse --show-toplevel`/qcsrc/uncrustify.cfg
+fi
+
+case "$#" in
+       0)
+               uncrustify --frag -c "$UNCRUSTIFY_CONFIG" |\
+               fix_function_types
+               ;;
+       *)
+               uncrustify --replace --no-backup -c "$UNCRUSTIFY_CONFIG" "$@" &&\
+               fix_function_types -i "$@"
+               ;;
+esac
index 6f75612343c32504af52c437cf3186a08515c114..f55cec1d52ea16ac280a04e44f3f1f496d85f9f1 100644 (file)
@@ -13,7 +13,7 @@ void WarpZone_Fade_PreDraw()
                self.alpha = bound(0, (self.warpzone_fadeend - vlen(org - self.origin - 0.5 * (self.mins + self.maxs))) / (self.warpzone_fadeend - self.warpzone_fadestart), 1);
        else
                self.alpha = 1;
-       //print(sprintf("%v <-> %v\n", view_origin, self.origin + 0.5 * (self.mins + self.maxs)));
+       //printf("%v <-> %v\n", view_origin, self.origin + 0.5 * (self.mins + self.maxs));
        if(self.alpha <= 0)
                self.drawmask = 0;
        else
@@ -25,7 +25,7 @@ void WarpZone_Read(float isnew)
        float f;
 
        warpzone_warpzones_exist = 1;
-       if not(self.enemy)
+       if (!self.enemy)
        {
                self.enemy = spawn();
                self.enemy.classname = "warpzone_from";
index 386615247ad9e55db4393b8aa8bb87ee4c0e79e2..6db41d133997388bc4ef125ca76b0aac6cd33215 100644 (file)
@@ -113,7 +113,7 @@ float WarpZoneLib_BoxTouchesBrush_Recurse()
                return 0;
        }
 #endif
-       if not(trace_ent)
+       if (!trace_ent)
                return 0;
        if (trace_ent == WarpZoneLib_BoxTouchesBrush_ent)
                return 1;
index 25bcd2901f9e449cffa4a1274a99b19c78936a7f..d25c769b08ba7957c0f11460657a2c759df8a564 100644 (file)
@@ -56,7 +56,7 @@ float WarpZone_Teleport(entity wz, entity player, float f0, float f1)
 
        o10 = o1 = WarpZone_TransformOrigin(wz, o0);
        v1 = WarpZone_TransformVelocity(wz, v0);
-       if not(IS_NOT_A_CLIENT(player))
+       if (!IS_NOT_A_CLIENT(player))
                a1 = WarpZone_TransformVAngles(wz, player.v_angle);
        else
                a1 = WarpZone_TransformAngles(wz, a0);
@@ -184,16 +184,16 @@ void WarpZone_Touch (void)
                save1 = self.target; self.target = string_null;
                save2 = self.target3; self.target3 = string_null;
                SUB_UseTargets();
-               if not(self.target) self.target = save1;
-               if not(self.target3) self.target3 = save2;
+               if (!self.target) self.target = save1;
+               if (!self.target3) self.target3 = save2;
 
                oldself = self;
                self = self.enemy;
                save1 = self.target; self.target = string_null;
                save2 = self.target2; self.target2 = string_null;
                SUB_UseTargets();
-               if not(self.target) self.target = save1;
-               if not(self.target2) self.target2 = save2;
+               if (!self.target) self.target = save1;
+               if (!self.target2) self.target2 = save2;
                self = oldself;
        }
        else
@@ -348,15 +348,15 @@ float WarpZone_CheckProjectileImpact(entity player)
                save1 = self.target; self.target = string_null;
                save2 = self.target3; self.target3 = string_null;
                SUB_UseTargets();
-               if not(self.target) self.target = save1;
-               if not(self.target3) self.target3 = save2;
+               if (!self.target) self.target = save1;
+               if (!self.target3) self.target3 = save2;
 
                self = self.enemy;
                save1 = self.target; self.target = string_null;
                save2 = self.target2; self.target2 = string_null;
                SUB_UseTargets();
-               if not(self.target) self.target = save1;
-               if not(self.target2) self.target2 = save2;
+               if (!self.target) self.target = save1;
+               if (!self.target2) self.target2 = save2;
                self = oldself;
        }
        else
@@ -537,7 +537,7 @@ void WarpZone_InitStep_UpdateTransform()
        for(i_s = 0; ; ++i_s)
        {
                tex = getsurfacetexture(self, i_s);
-               if not(tex)
+               if (!tex)
                        break; // this is beyond the last one
                if(tex == "textures/common/trigger" || tex == "trigger")
                        continue;
@@ -809,22 +809,22 @@ void WarpZone_StartFrame()
        for(e = world; (e = nextent(e)); )
        {
                if(warpzone_warpzones_exist) { WarpZone_StoreProjectileData(e); }
-               
+
                if(IS_REAL_CLIENT(e))
                {
                        if(e.solid == SOLID_NOT) // not spectating?
                        if(e.movetype == MOVETYPE_NOCLIP || e.movetype == MOVETYPE_FLY || e.movetype == MOVETYPE_FLY_WORLDONLY) // not spectating? (this is to catch observers)
                        {
                                other = e; // player
-                       
+
                                // warpzones
-                               if(warpzone_warpzones_exist) { 
-                               self = WarpZone_Find(e.origin + e.mins, e.origin + e.maxs); 
+                               if(warpzone_warpzones_exist) {
+                               self = WarpZone_Find(e.origin + e.mins, e.origin + e.maxs);
                                if(self)
                                if(!WarpZoneLib_ExactTrigger_Touch())
                                        if(WarpZone_PlaneDist(self, e.origin + e.view_ofs) <= 0)
                                                WarpZone_Teleport(self, e, -1, 0); } // NOT triggering targets by this!
-                       
+
                                // teleporters
                                self = Teleport_Find(e.origin + e.mins, e.origin + e.maxs);
                                if(self)
@@ -832,7 +832,7 @@ void WarpZone_StartFrame()
                                        Simple_TeleportPlayer(self, other); // NOT triggering targets by this!
                        }
                }
-               
+
                if(IS_NOT_A_CLIENT(e))
                {
                        if(warpzone_warpzones_exist)
index 34f06780665eb3766c12c23b3557a8c5f4189590..2fc82b5b4f81df66eb678839955f4d32839ff23c 100644 (file)
@@ -1,78 +1,77 @@
 0
-\XonoticSingleplayerDialog\Jouer en mode un joueur contre des adversaires contrôlés par l'ordinateur
+\XonoticSingleplayerDialog\Jouer tout seul contre des adversaires contrôlés par ordinateur
 
 
-\XonoticMultiplayerDialog\Jouer en ligne avec des amis en réseau local ou sur Internet
-\XonoticMultiplayerDialog/Serveurs\Trouver des serveurs pour y jouer dessus
+\XonoticMultiplayerDialog\Jouer en ligne, en LAN avec vos amis, voir vos démos et modifier vos paramètres joueur
+\XonoticMultiplayerDialog/Serveurs\Trouver des serveurs où jouer
 \menu_slist_showempty\Montrer les serveurs vides
 \menu_slist_showfull\Montrer les serveurs où toutes les places sont prises
-\net_slist_pause\Ne met pas à jour la liste de serveurs pour éviter de "glisser" sur un autre serveur
-\XonoticMultiplayerDialog/Info...\Montrer plus d'information sur le serveur séléctionné
+\net_slist_pause\Ne pas mettre à jour la liste de serveurs pour éviter de "glisser" sur un autre serveur
+\XonoticMultiplayerDialog/Info...\Montrer plus d'informations sur le serveur sélectionné
 \XonoticMultiplayerDialog/Marque-page\Mettre le serveur en haut de la liste pour pouvoir le repérer plus facilement plus tard
 \XonoticMultiplayerDialog/Créer\Héberger votre propre partie
-\XonoticMultiplayerDialog/Vidéos\Regarder des Vidéos pré-enregistrées
-\XonoticMultiplayerDialog/Player Setup\Personaliser vos paramètres
+\XonoticMultiplayerDialog/Vidéos\Parcourir et regarder vos démos
+\XonoticMultiplayerDialog/Player Setup\Personnaliser vos paramètres joueur
 
-\XonoticTeamSelectDialog/join 'best' team (auto-select)\Auto-séléction de l'équipe qui a le plus besoin de vous (recommandé)
-\XonoticTeamSelectDialog/rouge\Joindre l'équipe rouge
-\XonoticTeamSelectDialog/bleu\Joindre l'équipe bleue
-\XonoticTeamSelectDialog/jaune\Joindre l'équipe jaune
-\XonoticTeamSelectDialog/rose\Joindre l'équipe rose
+\XonoticTeamSelectDialog/join 'best' team (auto-select)\Auto-séléction de l'équipe (recommandé)
+\XonoticTeamSelectDialog/rouge\Rejoindre l'équipe rouge
+\XonoticTeamSelectDialog/bleu\Rejoindre l'équipe bleue
+\XonoticTeamSelectDialog/jaune\Rejoindre l'équipe jaune
+\XonoticTeamSelectDialog/rose\Rejoindre l'équipe rose
 
-\timelimit_override\Limite de temps au match, le match se finit quand elle est atteinte
-\fraglimit_override\Limite de tués pour le match, le match se finit quand elle est atteinte
+\timelimit_override\Limite de temps, le match se termine lorsque celle-ci est atteinte
+\fraglimit_override\Limite de frags pour le match, le match se termine lorsque celle-ci est atteinte
 \menu_maxplayers\Le nombre maximum de personnes pouvant jouer sur votre serveur en même temps
-\bot_number\Nombre d'adversaires ordinateur
+\bot_number\Nombre d'adversaires contrôlés par ordinateur
 \skill\Spécifier la difficulté des adversaires ordinateur
 \g_maplist_votable\Le nombre de cartes pouvant être votées à la fin du match
-\sv_vote_simple_majority_factor\À partir de 51% de oui seulement, un vote est gagné
-\XonoticMultiplayerDialog/Advanced settings...\Paramètres du serveur avancés
-\XonoticMultiplayerDialog/Mutators...\Spéciales et arènes d'une seule arme
-\g_dodging\Enable dodging
+\sv_vote_simple_majority_factor\La majorité simple remporte un vote
+\XonoticMultiplayerDialog/Advanced settings...\Paramètres serveur avancés
+\XonoticMultiplayerDialog/Mutators...\Mutators et arènes avec une seule arme
+\g_dodging\Activer les esquives
 \g_cloaked\Tous les joueurs sont presque invisibles
-\g_footsteps\Activer les bruitages de pas
-\g_midair\Il faut que votre adversaire soit en l'air pour lui faire mal
-\g_vampire\Les dégâts faits à vos enemies vous font gagner de la santé
-\g_bloodloss\Si vous avez moins de santé que spécifié ici, vous perdrez du sang et mourez progressivement
-\sv_gravity\Vous tombez plus lentement, comme sur la lune
+\g_footsteps\Activer les bruits de pas
+\g_midair\Il faut que votre adversaire soit en l'air pour lui infliger des dégâts
+\g_vampire\Les dégâts infligés à vos ennemis vous rendent la santé
+\g_bloodloss\Si vous avez moins de santé que spécifié ici, vous perdrez du sang et mourrez progressivement
+\sv_gravity\Vous tombez plus lentement, une valeur peu élevée correspond à une faible gravité
 \g_grappling_hook\Tous les joueurs ont un grappin
 \g_jetpack\Tous les joueurs ont un jetpack
-\g_pinata\Tous les joueurs lâchent toutes leurs armes quand ils meurent
-\g_weapon_stay\Les armes restent où elles sont quand elles sont prises sur la carte
-\g_weaponarena\Séléctionner une arène d'une seule arme donne des munitions illimitées pour cette arme, et désactive toutes les autres armes
-\menu_weaponarena_with_laser\Also enable the laser in the weapon arena
-\g_minstagib\Tous les joueurs reçoivent un MinstaNex, qui est un sniper hyperpuissant qui tue d'un coup. Si vous n'avez plus de munitions, vous mourez progressivement.
-\g_nix\No Items Xonotic; tous les joueurs ont la même arme en même temps, et on change d'arme régulièrement
-\g_nix_with_laser\Porter le laser avec l'arme du No Items Xonotic
-\XonoticMultiplayerDialog/Select all\Séléctionner toutes les cartes
-\XonoticMultiplayerDialog/Select none\Déséléctionner toutes les cartes
+\g_pinata\Les joueurs lâchent toutes leurs armes quand ils meurent
+\g_weapon_stay\Les armes restent où elles sont lorsqu'elles sont ramassées
+\g_weaponarena\Sélectionner une arène avec une seule arme fera apparaître les joueurs avec cette arme et des munitions illimitées, et désactive toutes les autres armes
+\g_minstagib\Tous les joueurs reçoivent un Minstanex, qui est un fusil de précision d'une puissance infinie. Si vous êtes à court de munition, vous mourrez dans les 10 secondes à moins de parvenir à recharger votre arme. Le tir secondaire est un laser qui n'inflige aucun dégât et qui est utile pour sauter sur de longues distances.
+\g_nix\No Items Xonotic - tous les joueurs jouent avec la même arme, et celle-ci change régulièrement.
+\g_nix_with_laser\Autoriser le laser en plus de l'arme courante dans le mode Nix
+\XonoticMultiplayerDialog/Select all\Sélectionner toutes les cartes
+\XonoticMultiplayerDialog/Select none\Désélectionner toutes les cartes
 
 
-\XonoticMultiplayerDialog/Test Performance\Faire un test de performance en utilisant la vidéo choisie
+\XonoticMultiplayerDialog/Test Performance\Faire un test de performance en utilisant la démo sélectionnée
 
 \fov\Champ de vision en degrés, par défaut 90, certains joueurs préfèrent entre 110 et 130
-\cl_bobcycle\Effet de "tremblement" de la caméra en courant
-\cl_zoomfactor\Facteur de Zoom
-\cl_zoomsensitivity\Changer la sensitivité du Zoom: 0 est la plus basse, 1 ne comporte pas de changement par rapport au mode dézoomé
-\cl_zoomspeed\Facteur "d'adoucissement" du Zoom, 0 désactive complètement
+\cl_bobcycle\Effet de "tremblement" de la vue lorsque vous courez
+\cl_zoomfactor\Facteur du zoom lorsque vous appuyez sur le bouton de zoom
+\cl_zoomsensitivity\Changer la sensibilité du zoom : 0 est la valeur la plus basse, 1 correspond à l'absence de zoom
+\cl_zoomspeed\Facteur "d'adoucissement" du zoom, 0 le désactive complètement
 \XonoticMultiplayerDialog/Weapon settings...\Paramétrer les armes (affichage, priorité)
 
-\cl_weaponpriority_useforcycling\Utiliser la liste de priorité pour le changement d'armes à la molette
-\cl_autoswitch\Automatiquement changer d'arme si vous avez une meilleure arme que celle que vous portez
-\r_drawviewmodel\Afficher l'arme à la permière personne
+\cl_weaponpriority_useforcycling\Utiliser la liste de priorité pour le changement d'armes avec la molette de la souris
+\cl_autoswitch\Automatiquement changer d'arme si vous ramassez une meilleure arme que celle que vous portez
+\r_drawviewmodel\Afficher l'arme à la première personne
 \cl_gunalign\Position de l'arme à l'écran, reconnection au serveur nécessaire pour prendre effet
 
-\crosshair_per_weapon\Set a different crosshair for each weapon, good if you play without weapon models
-\crosshair_color_per_weapon\Set the color of the crosshair depending on the weapon you are currently holding
+\crosshair_per_weapon\Définir un viseur différent pour chaque arme, utile si vous jouez sans afficher l'arme
+\crosshair_color_per_weapon\Définir la couleur du viseur selon l'arme que vous utilisez
 \crosshair_size\Ajuster la taille du viseur
 \crosshair_color_alpha\Ajuster l'opacité du viseur
-\crosshair_color\Ajuster le couleur du viseur
+\crosshair_color\Ajuster la couleur du viseur
 \sbar_hudselector\Utiliser l'ancienne interface HUD
 \XonoticMultiplayerDialog/Waypoints setup...\-
 \_cl_name\Pseudonyme utilisé pour vous reconnaître dans le jeu
 
 \XonoticSettingsDialog\Changer les paramètres du jeu
-\XonoticCreditsDialog\Les Crédits de Xonotic
+\XonoticCreditsDialog\Les crédits de Xonotic
 \XonoticTeamSelectDialog\-
 \XonoticMutatorsDialog\-
 \XonoticMapInfoDialog\-
 \XonoticQuitDialog/Non\'Faut que je fragge plus de monde!
 
 \XonoticSettingsDialog/Contrôles\Paramètres contrôle souris/clavier
-\sensitivity\Sensitivité de la souris
-\menu_mouse_speed\Sensitivité de la souris dans les menus, n'affecte pas le jeu
-\m_filter\Adoucit le mouvement de souris, mais crée une légère latence de souris
+\sensitivity\Sensibilité de la souris
+\menu_mouse_speed\Sensibilité de la souris dans les menus, n'affecte pas le jeu
+\m_filter\Adoucit le mouvement de souris, mais crée une légère latence
 \m_pitch\Inverser la souris sur l'axe vertical (mode jeu d'avion)
 \vid_dgamouse\Utiliser une souris DGA
-\con_closeontoggleconsole\Autoriser la fermeture de console avec la touche d'ouverture de console (sinon, Shift+Échap)
+\con_closeontoggleconsole\Permet de fermer la console avec le même raccourci utilisé pour l'ouvrir
 
-\XonoticSettingsDialog/Vidéo\Video settings
+\XonoticSettingsDialog/Vidéo\Paramètres vidéo
 \vid_width\Résolution de l'écran
-\vid_bitsperpixel\Profondeur des couleurs: 16 bits est plus rapide, mais 32 bits est de meilleure qualité (recommandé)
-\vid_fullscreen\Activer le mode plein écran (par défaut: activé)
-\vid_vsync\Activer la syncronisation verticale pour éviter des problèmes d'affichage, limite le nombre maximum d'images par seconde (par défaut: désactivé)
-\gl_texture_anisotropy\Qualité du filtrage anistrope (par défaut: 1x)
-\r_glsl\Activer les Shaders OpenGL 2.0 pour des effets de lumière améliorés
-\gl_vbo\Utiliser les VBOs pour stocker les modèles 3D statiques dans la mémoire pour une meilleure performance (par défaut: Points et Triangles)
-\r_depthfirst\Éviter des problèmes de profondeur de rendu en faisant un rendu de profondeur de la carte/joueurs avant le rendu "standard" (par défaut: désactivé)
-\gl_texturecompression\Compresser les textures pour économiser de la mémoire graphique (par défaut: aucun)
-\gl_finish\Faire attendre le processeur que le rendu graphique se finisse pour éviter des problèmes d'affichage divers (par défaut: désactivé) 
-\v_brightness\Luminosité du noir (par défaut: 0)
-\v_contrast\Luminosité du blanc (par défaut: 1)
-\v_gamma\Correction du gamma ne changeant pas la luminosité du noir ou du blanc (par défaut: 1.125)
-\v_contrastboost\Multiplier le constraste dans des salles sombres (par défaut: 1)
-\r_glsl_saturation\Ajustement de la saturation (0 = noir et blanc, 1 = normal, 2 = saturé) des couleurs (par défaut: 1)
-\v_glslgamma\Utiliser GLSL pour corriger le gamma, attention, cela risque d'augementer fortement l'utilisation de ressources (par défaut: désactivé)
-\r_ambient\Lumière ambiente, si elle est trop élévée, les cartes auront un éclairage plus "plat" et moins contrasté
-\r_hdr_scenebrightness\Éclairage du rendu global (par défaut: 1)
-\vid_samples\Activer l'anticrénelage, réduit l'effet d'escalier sur les modèles 3D, mais augmente fortement l'utilisation des ressources
-\v_flipped\Mode mirroir (par défaut: désactivé)
+\vid_bitsperpixel\Profondeur des couleurs : 16 bits est plus rapide, mais 32 bits est de meilleure qualité (recommandé)
+\vid_fullscreen\Activer le mode plein écran (par défaut : activé)
+\vid_vsync\Activer la syncronisation verticale pour éviter des problèmes d'affichage, limite le nombre maximum d'images par seconde (par défaut : désactivé)
+\gl_texture_anisotropy\Qualité du filtrage anistrope (par défaut : 1x)
+\r_glsl\Activer les Shaders OpenGL 2.0 pour des effets de lumière améliorés (par défaut : désactivé)
+\gl_vbo\Utiliser les VBOs pour stocker les modèles 3D statiques dans la mémoire pour une meilleure performance (par défaut : Points et Triangles)
+\r_depthfirst\Éviter des problèmes de profondeur de rendu en faisant un rendu de profondeur de la carte/joueurs avant le rendu "standard" (par défaut : désactivé)
+\gl_texturecompression\Compresser les textures pour économiser de la mémoire graphique (par défaut : aucun)
+\gl_finish\Demander au processeur d'attendre la fin du rendu graphique afin éviter des problèmes d'affichage divers (par défaut : désactivé) 
+\v_brightness\Luminosité du noir (par défaut : 0)
+\v_contrast\Luminosité du blanc (par défaut : 1)
+\v_gamma\Correction du gamma n'affectant pas la luminosité du noir ou du blanc (par défaut : 1.125)
+\v_contrastboost\Multiplier le constraste dans les salles sombres (par défaut : 1)
+\r_glsl_saturation\Ajustement de la saturation (0 = noir et blanc, 1 = normal, 2 = saturé) des couleurs (par défaut : 1)
+\v_glslgamma\Utiliser GLSL pour corriger le gamma, attention, cela risque d'augementer fortement l'utilisation de ressources (par défaut : désactivé)
+\r_ambient\Lumière ambiante, si elle est trop élévée, les cartes auront un éclairage plus "plat" et moins contrasté (par défaut : 4)
+\r_hdr_scenebrightness\Éclairage du rendu global (par défaut : 1)
+\vid_samples\Activer l'anticrénelage, réduit l'effet d'escalier sur les modèles 3D, mais augmente fortement l'utilisation des ressources (par défaut : désactivé)
+\v_flipped\Mode miroir (par défaut : désactivé)
 
 \XonoticSettingsDialog/Graphiques\Paramètres des effets graphiques
-\r_subdivisions_tolerance\Ajuster la qualité des modèles 3D de carte (courbes, tuyaux) (par défaut: normal)
-\gl_picmip\Ajuster la qualité des textures. La baisser diminue l'utilisation des ressources, mais rend les textures floues. (par défaut: normal)
-\r_picmipworld\If set, only reduce the texture quality of models (default: enabled)
-\mod_q3bsp_nolightmaps\Utiliser des lightmaps haute résolution, augmente l'utilisation des resources, mais rend les lightmaps plus nettes (par défaut: activé)
-\cl_particles_quality\Nombre de particules; moins de particules consomment moins de ressources (par défaut: 1.0)
-\r_drawparticles_drawdistance\Toutes les particules qui sont plus loin que cette distance ne seront pas affichées (par défaut: 1000)
-\cl_decals\Activer les marques d'impacts et de sang (par défaut: activé)
-\r_drawdecals_drawdistance\Toutes les marques d'impacts qui sont plus loin que cette distance ne seront pas affichées (par défaut: 300)
-\cl_decals_time\Temps en secondes avant que les marques d'impacts disparaissent (par défaut: 2 secondes)
-\cl_gentle\Remplacer les effets gore par des effets moins violents (par défaut: désactivé)
-\cl_nogibs\Réduire le nombre de Gibs ou les désactiver totalement (par défaut: beaucoup)
-\v_kicktime\Faire trembler la vue en recevant des dégâts (par défaut: 0)
-\r_glsl_deluxemapping\Utiliser les effets lumineux avancés (par défaut: activé)
-\r_shadow_gloss\Utiliser le reflet des textures (par défaut: activé)
-\gl_flashblend\Enable faster but uglier dynamic lights by rendering bright coronas instead of real dynamic lights (default: disabled)
-\r_shadow_realtime_dlight\Activer le rendu des lumières dynamiques en temps réel (par défaut: activé)
-\r_shadow_realtime_dlight_shadows\Activer le rendu des ombres depuis les lumières dynamiques en temps réel (par défaut: désactivé)
-\r_shadow_realtime_world\Activer le rendu des lumières carte en temps réel, a un gros impact sur la performance (par défaut: désactivé)
-\r_shadow_realtime_world_shadows\Activer le rendu des ombres depuis les lumières carte en temps réel, a un impact sur la performance aussi (par défaut: désactivé)
-\r_shadow_usenormalmap\Utiliser des effets d'ombrage de lumière sur les textures (par défaut: activé)
-\r_showsurfaces\Désactiver les textures et les remplacer par des couleurs unies. Utile pour les configurations très faible, mais laid. (par défaut: désactivé)
-\r_glsl_offsetmapping\Activer l'effet de relief sur les textures, a un léger impact sur la performance (par défaut: désactivé)
-\r_glsl_offsetmapping_reliefmapping\Augmenter la qualité des effets de relief sur les textures, a un gros impact sur la performance (par défaut: désactivé)
-\r_water\Activer des reflets de réflecion et de réfraction d'eau et des portails Warpzone (par défaut: désactivé)
-\r_water_resolutionmultiplier\Qualité des reflets d'eau et des portails Warpzone, l'augmenter a un gros impact sur la performance (par défaut: bon)
-\r_coronas\Activer des effets d'éblouissement peu gourmands (par défaut: activé)
-\r_coronas_occlusionquery\Prendre en compte la visibilité pour les effets "Brillance Lumière" (par défaut: activé)
-\r_bloom\Activer un effet d'éblouissement plus beau, mais gourmand (par défaut: désactivé)
-\r_hdr\Activer un effet d'ébloissement encore plus beau, mais encore plus gourmand (par défaut: désactivé)
+\r_subdivisions_tolerance\Ajuster la qualité des modèles 3D de la carte (courbes, tuyaux) (par défaut : normal)
+\gl_picmip\Ajuster la qualité des textures. La baisser diminue l'utilisation des ressources, mais rend les textures floues. (par défaut : bon)
+\r_picmipworld\Si activé, réduira uniquement la qualité des textures des joueurs (par défaut : activé)
+\mod_q3bsp_nolightmaps\Utiliser des lightmaps haute résolution, augmente l'utilisation de la mémoire, mais rend les lightmaps plus nettes (par défaut : activé)
+\cl_particles_quality\Nombre de particules ; moins de particules consomment moins de ressources (par défaut : 1)
+\r_drawparticles_drawdistance\Toutes les particules situées au-delà de cette distance ne seront pas affichées (par défaut : 1000)
+\cl_decals\Activer les marques d'impacts et de sang (par défaut : activé)
+\r_drawdecals_drawdistance\Toutes les marques d'impacts qui sont plus loin que cette distance ne seront pas affichées (par défaut : 300)
+\cl_decals_time\Durée en secondes avant que les marques d'impacts ne disparaissent (par défaut : 2)
+\cl_gentle\Remplacer les effets gores par des effets moins violents (par défaut : désactivé)
+\cl_nogibs\Réduire les effets gores ou les désactiver totalement (par défaut : beaucoup)
+\v_kicktime\Faire trembler la vue lorsque vous êtes touché (durée par défaut : 0)
+\r_glsl_deluxemapping\Utiliser les effets lumineux avancés (par défaut : activé)
+\r_shadow_gloss\Utiliser le reflet des textures (par défaut : activé)
+\gl_flashblend\Activer les lumières dynamiques rapides - mais plus laides - en affichant des couronnes de lumière à la place des vraies lumières dynamiques (par défaut : désactivé)
+\r_shadow_realtime_dlight\Activer le rendu des lumières dynamiques des explosions et des roquettes (par défaut : activé)
+\r_shadow_realtime_dlight_shadows\Activer le rendu des ombres depuis les lumières dynamiques en temps réel (par défaut : désactivé)
+\r_shadow_realtime_world\Activer le rendu des lumières carte en temps réel, a un gros impact sur la performance (par défaut : désactivé)
+\r_shadow_realtime_world_shadows\Activer le rendu des ombres depuis les lumières carte en temps réel (par défaut : désactivé)
+\r_shadow_usenormalmap\Utiliser des effets d'ombrage de lumière sur les textures (par défaut : activé)
+\r_showsurfaces\Désactiver les textures et les remplacer par des couleurs unies. Utile pour les configurations très légères, mais le rendu est très laid. (par défaut : désactivé)
+\r_glsl_offsetmapping\Activer l'effet de relief sur les textures, a un léger impact sur la performance (par défaut : désactivé)
+\r_glsl_offsetmapping_reliefmapping\Augmenter la qualité des effets de relief sur les textures, a un gros impact sur la performance (par défaut : désactivé)
+\r_water\Qualité des reflets et de la réfraction de l'eau et des portails, a un gros impact sur la performance dans les cartes avec des surfaces réfléchissantes (par défaut : désactivé)
+\r_water_resolutionmultiplier\Résolution des reflets/réfractions (par défaut : bon)
+\r_coronas\Activer des effets d'éblouissement peu gourmands autour de certaines sources de lumière (par défaut : activé)
+\r_coronas_occlusionquery\Estomper les effets d'éblouissement pour ne pas perdre en visibilité (par défaut : activé)
+\r_bloom\Activer l'effet "bloom", qui éclaire les pixels situés au voisinage de pixels très brillants. A un gros impact sur la performance (par défaut : désactivé)
+\r_hdr\Effet "bloom" de qualité encore supérieure, mais encore plus gourmand (par défaut : désactivé)
 \r_motionblur\Intensité du flou de mouvement - 0.4 est recommandé
+\hud_postprocessing_maxbluralpha\Activer des effets de postprocessing spéciaux lorque vous êtes touché, lorsque vous êtes sous l'eau ou lorsque vous utilisez un bonus (par défaut : désactivé)
 
-\XonoticSettingsDialog/Audio\Audio settings
+\XonoticSettingsDialog/Audio\Paramètres audio
 \mastervolume\-
 \bgmvolume\-
 \snd_staticvolume\-
 \snd_channel1volume\-
 \snd_speed\Fréquence de la sortie audio
 \snd_channels\Nombre de canaux pour la sortie audio
-\snd_swapstereo\Échanger les canneaux stéréo gauche/droite
-\snd_spatialization_control\Essayer de diminuer le "constraste" entre la partie gauche et droite du casque audio pour un meilleur son
-\cl_voice_directional\Activer les voix des personnages sur la carte
-\cl_voice_directional_taunt_attenuation\Distance à laquelle les voix sont audibles
-\cl_autotaunt\Automatiquement narguer les enemis quand vous les tuez
-\cl_sound_maptime_warning\Voix (en anglais) qui vous dit le temps restant avant la fin du match
-\cl_hitsound\Jouer un son quand vous touchez un enemi
-\menu_sounds\Jouer des sons en cliquant ou en passant la souris sur des options
-
-\XonoticSettingsDialog/Réseau\Paramètres du jeu en réseau
+\snd_swapstereo\Inverser les canaux stéréo gauche/droite
+\snd_spatialization_control\Essayer de diminuer le "contraste" entre la partie gauche et droite du casque pour un meilleur son
+\cl_voice_directional\Activer les voix directionnelles des personnages sur la carte
+\cl_voice_directional_taunt_attenuation\Distance jusqu'à laquelle les voix demeurent audibles
+\cl_autotaunt\Automatiquement narguer les ennemis lorsque vous les tuez
+\cl_sound_maptime_warning\Voix (en anglais) qui annonce le temps restant avant la fin du match
+\cl_hitsound\Jouer un son lorsque vous touchez un ennemi
+\menu_sounds\Jouer des sons en cliquant ou en survolant des boutons
+
+\XonoticSettingsDialog/Réseau\Paramètres réseau
 \cl_movement\Activer la prédiction des mouvements du joueur pour éviter les saccades lors de parties en réseau
 \cl_nolerp\Algorithme pour éviter les saccades lors de parties en réseau
-\shownetgraph\Show a graph of packet sizes and other information
-\_cl_rate\Specify your network speed with this slider
-\cl_netfps\Nombre maximum de paquets à envoyer au server chaque seconde
-\cl_curl_maxdownloads\Nombre maximum de téléchargements simultanés
-\cl_curl_maxspeed\Vitesse maximum de téléchargement
-\cl_port\Forcer le client à passer par le port défini (UDP) s'il n'est pas 0
+\shownetgraph\Afficher la taille des paquets et d'autres informations dans un graphique
+\_cl_rate\Spécifier la vitesse de votre réseau avec ce curseur
+\cl_netfps\Nombre maximum de paquets à envoyer au serveur chaque seconde
+\cl_curl_maxdownloads\Nombre maximum de téléchargements simultanés en HTTP/FTP
+\cl_curl_maxspeed\Vitesse maximale de téléchargement
+\cl_port\Forcer le client à passer par le port choisi sauf s'il est défini à 0
 
 \XonoticSettingsDialog/Autres\Autres paramètres
-\menu_tooltips\Menu tooltips: disabled, standard or advanced (also shows cvar or console command bound to the menu item)
-\showtime\Montrer l'heure, utile pour les captures d'écran
-\showdate\Montrer la date, utile pour les captures d'écran
-\showfps\Montrer le nombre d'Images Par Seconde rendues (Frames Per Second = FPS)
+\menu_tooltips\Info-bulles : désactivé, standard ou avancé (affiche aussi la cvar ou la commande associée)
+\showtime\Afficher l'heure, utile pour les captures d'écran
+\showdate\Afficher la date, utile pour les captures d'écran
+\showfps\Afficher le nombre d'images par seconde actuel (FPS = Frames Per Second)
 
 \XonoticSettingsDialog/Advanced settings...\Paramètres avancés pour configuer le jeu dans ses moindres détails
 \g_friendlyfire\Pourcentage de dégâts infligés aux équipiers si vous les touchez
 \g_mirrordamage\Pourcentage de dégâts infligés aux équipiers qui vous sera renvoyé
-\g_tdm_teams_override\Écraser le nombre d'équipes défini par la carte
+\g_tdm_teams_override\Outrepasser le nombre d'équipes définies par la carte
 
 \viewsize\Enable/Désactiver l'arrière plan de l'interface
-\cl_hidewaypoints\Montrer/Cacher les Waypoints (flèches 3D)
-\g_waypointsprite_scale\Ajuster la taille des Waypoints
-\g_waypointsprite_alpha\Ajuster l'opacité des Waypoints
-\cl_shownames\Afficher le nom du joueur que vous pointez avec votre viseur
+\cl_hidewaypoints\Afficher les waypoints (flèches 3D)
+\g_waypointsprite_scale\Ajuster la taille des waypoints
+\g_waypointsprite_alpha\Ajuster l'opacité des waypoints
+\cl_shownames\Afficher le nom du joueur que vous avez dans votre viseur
 
-\crosshair_hittest\Aucun: aucun effet de viseur - TrueAim: rendre le viseur flou si vous risquez de vous blesser vous même ou un équipier - Enemis: rendre le viseur plus grand si vous pouvez toucher un enemi
+\crosshair_hittest\Aucun: aucun effet de viseur - TrueAim: rendre le viseur flou si vous risquez de tirer dans un mur - Ennemis: rendre le viseur plus grand si vous pouvez toucher un ennemi
diff --git a/tx.sh b/tx.sh
index fb03700a42953d9c218e7c105bb1500531770d14..992ed3f502a4502adbcb536296139fa817b6f6db 100644 (file)
--- a/tx.sh
+++ b/tx.sh
@@ -61,5 +61,5 @@ for f in translations/xonotic.commonpot/*..po; do
                cp "$tcurfile" "$gnewfile"
        fi
 done
-tx push -t
+tx push -t --skip
 date > .tx/merge-base
index 1900a69c3f0e7cb072709f68135e0f2d8ad503aa..4258095f7c3b71c633f33f16813c4957262c24b6 100644 (file)
@@ -30,8 +30,7 @@ set g_vehicle_spiderbot_minigun_damage          24       // 400 (x2) DPS
 set g_vehicle_spiderbot_minigun_refire          0.06
 set g_vehicle_spiderbot_minigun_force           9
 set g_vehicle_spiderbot_minigun_spread          0.015
-set g_vehicle_spiderbot_minigun_speed           45000  // ~ 32QU
-set g_vehicle_spiderbot_minigun_bulletconstant  110
+set g_vehicle_spiderbot_minigun_solidpenetration 32
 set g_vehicle_spiderbot_minigun_ammo_cost       1
 set g_vehicle_spiderbot_minigun_ammo_max        100
 set g_vehicle_spiderbot_minigun_ammo_regen      40
index 42ad815528bc153409df8fc83cb9ce20b94d8176..9fe937716a1d5d78f25ea2509a52fba7d0dd508f 100644 (file)
@@ -2,7 +2,7 @@
 Rudolf "divVerent" Polzer
 Ant "Antibody" Zucaro
 Merlijn Hofstra
-Morphed
+Peter "Morphed" Pielak
 Samual "Ares" Lenks
 Tyler "-z-" Mulligan
 
@@ -31,7 +31,7 @@ Jan "zykure" Behrens
 *Art
 Severin "sev" Meyer
 Sahil "DiaboliK" Singhal
-Morphed
+Peter "Morphed" Pielak
 Sam "LJFHutch" Hutchinson
 Pearce "theShadow" Michal