]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge remote-tracking branch 'origin/debugger/superspec_options'
authorSamual Lenks <samual@xonotic.org>
Mon, 26 Aug 2013 03:14:12 +0000 (23:14 -0400)
committerSamual Lenks <samual@xonotic.org>
Mon, 26 Aug 2013 03:14:12 +0000 (23:14 -0400)
104 files changed:
_hud_common.cfg
_hud_descriptions.cfg
balance25.cfg
balanceFruitieX.cfg
balanceXDF.cfg
balanceXPM.cfg
balanceXonotic.cfg
commands.cfg
cpp.cfg
crosshairs.cfg
csprogs.dat.pot
defaultXDF.cfg
defaultXPM.cfg
defaultXonotic.cfg
effectinfo.txt
gamemodes.cfg
hud_luminos.cfg
hud_luminos_minimal.cfg
hud_luminos_minimal_xhair.cfg
hud_luminos_old.cfg
hud_nexuiz.cfg
input-rtlights.cfg
menu.dat.pot
models/ok_nade_counter/ok_nade_counter.md3 [new file with mode: 0644]
models/ok_nade_counter/ok_nade_counter.md3_0.skin [new file with mode: 0644]
models/ok_nade_counter/ok_nade_counter.md3_1.skin [new file with mode: 0644]
models/ok_nade_counter/ok_nade_counter.md3_2.skin [new file with mode: 0644]
models/ok_nade_counter/ok_nade_counter.md3_3.skin [new file with mode: 0644]
models/ok_nade_counter/ok_nade_counter.md3_4.skin [new file with mode: 0644]
models/ok_nade_counter/ok_nade_counter.md3_5.skin [new file with mode: 0644]
models/ok_nade_counter/ok_nade_counter.md3_6.skin [new file with mode: 0644]
models/ok_nade_counter/ok_nade_counter.md3_7.skin [new file with mode: 0644]
models/ok_nade_counter/ok_nade_counter.md3_8.skin [new file with mode: 0644]
models/ok_nade_counter/ok_nade_counter.md3_9.skin [new file with mode: 0644]
models/ok_nade_counter/ok_nade_counter_01.tga [new file with mode: 0644]
models/ok_nade_counter/ok_nade_counter_02.tga [new file with mode: 0644]
models/ok_nade_counter/ok_nade_counter_03.tga [new file with mode: 0644]
models/ok_nade_counter/ok_nade_counter_04.tga [new file with mode: 0644]
models/ok_nade_counter/ok_nade_counter_05.tga [new file with mode: 0644]
models/ok_nade_counter/ok_nade_counter_06.tga [new file with mode: 0644]
models/ok_nade_counter/ok_nade_counter_07.tga [new file with mode: 0644]
models/ok_nade_counter/ok_nade_counter_08.tga [new file with mode: 0644]
models/ok_nade_counter/ok_nade_counter_09.tga [new file with mode: 0644]
mutators.cfg [new file with mode: 0644]
physicsX.cfg
physicsX07.cfg [new file with mode: 0644]
physicsXSamual.cfg [deleted file]
qcsrc/client/View.qc
qcsrc/client/hud.qc
qcsrc/client/projectile.qc
qcsrc/common/constants.qh
qcsrc/common/deathtypes.qh
qcsrc/common/notifications.qh
qcsrc/common/util.qh
qcsrc/menu/menu.qc
qcsrc/server/autocvars.qh
qcsrc/server/bot/havocbot/havocbot.qc
qcsrc/server/cheats.qc
qcsrc/server/cl_client.qc
qcsrc/server/cl_physics.qc
qcsrc/server/cl_player.qc
qcsrc/server/cl_weaponsystem.qc
qcsrc/server/command/common.qc
qcsrc/server/command/getreplies.qc
qcsrc/server/command/getreplies.qh
qcsrc/server/command/sv_cmd.qc
qcsrc/server/defs.qh
qcsrc/server/g_damage.qc
qcsrc/server/g_world.qc
qcsrc/server/miscfunctions.qc
qcsrc/server/mutators/base.qh
qcsrc/server/mutators/gamemode_arena.qc
qcsrc/server/mutators/gamemode_ca.qc
qcsrc/server/mutators/gamemode_freezetag.qc
qcsrc/server/mutators/gamemode_lms.qc
qcsrc/server/mutators/gamemode_lms.qh
qcsrc/server/mutators/gamemode_nexball.qc
qcsrc/server/mutators/mutator_bloodloss.qc [new file with mode: 0644]
qcsrc/server/mutators/mutator_campcheck.qc [new file with mode: 0644]
qcsrc/server/mutators/mutator_dodging.qc
qcsrc/server/mutators/mutator_dodging.qh
qcsrc/server/mutators/mutator_melee_only.qc [new file with mode: 0644]
qcsrc/server/mutators/mutator_midair.qc [new file with mode: 0644]
qcsrc/server/mutators/mutator_minstagib.qc
qcsrc/server/mutators/mutator_multijump.qc [new file with mode: 0644]
qcsrc/server/mutators/mutator_nades.qc [new file with mode: 0644]
qcsrc/server/mutators/mutator_nades.qh [new file with mode: 0644]
qcsrc/server/mutators/mutator_pinata.qc [new file with mode: 0644]
qcsrc/server/mutators/mutator_random_gravity.qc [new file with mode: 0644]
qcsrc/server/mutators/mutator_vampire.qc
qcsrc/server/mutators/mutators.qh
qcsrc/server/progs.src
qcsrc/server/sv_main.qc
qcsrc/server/t_items.qc
qcsrc/server/t_jumppads.qc
qcsrc/server/teamplay.qc
qcsrc/server/w_crylink.qc
qcsrc/server/w_hlac.qc
qcsrc/server/w_uzi.qc
scripts/ok_nade_counter.shader [new file with mode: 0644]
scripts/shaderlist.txt
vehicle_racer.cfg
vehicle_raptor.cfg
vehicle_spiderbot.cfg

index 15453b7dcc018bbc8148b938a782d2717020cd27..4a499970697335a23c1c0a2d6d5b7d91c31e73bc 100644 (file)
@@ -81,7 +81,7 @@ seta hud_contents_fadeintime 0.02 "factor of time it takes for the alpha level t
 seta hud_contents_fadeouttime 0.1 "factor of time it takes for the alpha level to reach normal value when leaving the liquid"
 seta hud_contents_lava_alpha 0.7 "alpha of the lava"
 seta hud_contents_lava_color "0.8 0.1 0" "color blend when inside lava"
-seta hud_contents_slime_alpha 0.7 "alpha of the slime" 
+seta hud_contents_slime_alpha 0.7 "alpha of the slime"
 seta hud_contents_slime_color "0 0.4 0.1" "color blend when inside slime"
 seta hud_contents_water_alpha 0.5 "alpha of the water"
 seta hud_contents_water_color "0.4 0.3 0.3" "color blend when inside water"
index 9c7201d0ce78cf29cab9186b0189c8ab95c7c424..5f21867d353600ab2aa32dbad1c137f6d3a8ccae 100644 (file)
@@ -167,7 +167,7 @@ seta hud_panel_score_bg_color_team "" "override panel color with team color in t
 seta hud_panel_score_bg_alpha "" "if set to something else than \"\" = override default panel background alpha"
 seta hud_panel_score_bg_border "" "if set to something else than \"\" = override default size of border around the background"
 seta hud_panel_score_bg_padding "" "if set to something else than \"\" = override default padding of contents from border"
-seta hud_panel_score_rankings "" "show rankings: 1 always show my own score; 2 pure rankings" 
+seta hud_panel_score_rankings "" "show rankings: 1 always show my own score; 2 pure rankings"
 
 seta hud_panel_racetimer "" "enable/disable this panel"
 seta hud_panel_racetimer_pos "" "position of this base of the panel"
index 343891810adf6b8494361761137676bc31e831d1..9451d377d99757107948b7e805e8b63c2eeacfdc 100644 (file)
@@ -158,7 +158,7 @@ set g_projectiles_damage 2
 // possible values:
 // -2: absolutely no damage to projectiles (no exceptions)
 // -1: no damage other than the exceptions (electro combo, hagar join explode, ML mines)
-// 0: only damage from contents (lava/slime) or exceptions 
+// 0: only damage from contents (lava/slime) or exceptions
 // 1: only self damage or damage from contents or exceptions
 // 2: allow all damage to projectiles normally
 set g_projectiles_keep_owner 0
@@ -303,7 +303,7 @@ set g_balance_uzi_burst_animtime 0.75
 set g_balance_uzi_burst_refire 0.05            // refire between burst bullets
 set g_balance_uzi_burst_refire2 0.75   // refire after burst
 set g_balance_uzi_burst_spread 0.04
-set g_balance_uzi_burst_damage 18              
+set g_balance_uzi_burst_damage 18
 set g_balance_uzi_burst_force 50
 set g_balance_uzi_burst_ammo 3
 
@@ -440,7 +440,6 @@ set g_balance_crylink_primary_ammo 2
 set g_balance_crylink_primary_bouncedamagefactor 0.5
 set g_balance_crylink_primary_joindelay 0
 set g_balance_crylink_primary_joinspread 0
-set g_balance_crylink_primary_jointime 0
 set g_balance_crylink_primary_joinexplode 0
 set g_balance_crylink_primary_joinexplode_damage 0
 set g_balance_crylink_primary_joinexplode_edgedamage 0
@@ -469,9 +468,8 @@ set g_balance_crylink_secondary_ammo 2
 set g_balance_crylink_secondary_bouncedamagefactor 0.5
 set g_balance_crylink_secondary_joindelay 0
 set g_balance_crylink_secondary_joinspread 0
-set g_balance_crylink_secondary_jointime 0
-set g_balance_crylink_secondary_joinexplode 0                  
-set g_balance_crylink_secondary_joinexplode_damage 0   
+set g_balance_crylink_secondary_joinexplode 0
+set g_balance_crylink_secondary_joinexplode_damage 0
 set g_balance_crylink_secondary_joinexplode_edgedamage 0
 set g_balance_crylink_secondary_joinexplode_radius 0
 set g_balance_crylink_secondary_joinexplode_force 0
index ce125421f91a64877c6e975cba3bbdfce025dbe8..f985659f9c6549ea4c337004c5804e9d7d83e38b 100644 (file)
@@ -158,7 +158,7 @@ set g_projectiles_damage 2
 // possible values:
 // -2: absolutely no damage to projectiles (no exceptions)
 // -1: no damage other than the exceptions (electro combo, hagar join explode, ML mines)
-// 0: only damage from contents (lava/slime) or exceptions 
+// 0: only damage from contents (lava/slime) or exceptions
 // 1: only self damage or damage from contents or exceptions
 // 2: allow all damage to projectiles normally
 set g_projectiles_keep_owner 0
@@ -440,7 +440,6 @@ set g_balance_crylink_primary_ammo 2
 set g_balance_crylink_primary_bouncedamagefactor 0.2
 set g_balance_crylink_primary_joindelay 0
 set g_balance_crylink_primary_joinspread 0.2
-set g_balance_crylink_primary_jointime 0.1
 set g_balance_crylink_primary_joinexplode 0
 set g_balance_crylink_primary_joinexplode_damage 0
 set g_balance_crylink_primary_joinexplode_edgedamage 0
@@ -469,9 +468,8 @@ set g_balance_crylink_secondary_ammo 3 // LOG: 2 -> 3
 set g_balance_crylink_secondary_bouncedamagefactor 0.4 // LOG: 0.2 -> 0.4
 set g_balance_crylink_secondary_joindelay 0
 set g_balance_crylink_secondary_joinspread 0.2
-set g_balance_crylink_secondary_jointime 0.1
-set g_balance_crylink_secondary_joinexplode 0                  
-set g_balance_crylink_secondary_joinexplode_damage 0   
+set g_balance_crylink_secondary_joinexplode 0
+set g_balance_crylink_secondary_joinexplode_damage 0
 set g_balance_crylink_secondary_joinexplode_edgedamage 0
 set g_balance_crylink_secondary_joinexplode_radius 0
 set g_balance_crylink_secondary_joinexplode_force 0
index 5745548e21746e5bb625206498a6978fc0b659b8..4e0631523882e1ae1a045afef1598862eeba5ad2 100644 (file)
@@ -158,7 +158,7 @@ set g_projectiles_damage 2
 // possible values:
 // -2: absolutely no damage to projectiles (no exceptions)
 // -1: no damage other than the exceptions (electro combo, hagar join explode, ML mines)
-// 0: only damage from contents (lava/slime) or exceptions 
+// 0: only damage from contents (lava/slime) or exceptions
 // 1: only self damage or damage from contents or exceptions
 // 2: allow all damage to projectiles normally
 set g_projectiles_keep_owner 0
@@ -303,7 +303,7 @@ set g_balance_uzi_burst_animtime 0.3
 set g_balance_uzi_burst_refire 0.06            // refire between burst bullets
 set g_balance_uzi_burst_refire2 0.45   // refire after burst
 set g_balance_uzi_burst_spread 0.03
-set g_balance_uzi_burst_damage 25              
+set g_balance_uzi_burst_damage 25
 set g_balance_uzi_burst_force 20
 set g_balance_uzi_burst_ammo 3
 
@@ -425,7 +425,7 @@ set g_balance_electro_switchdelay_raise 0
 set g_balance_electro_reload_ammo 0 //default: 20
 set g_balance_electro_reload_time 2
 // }}}
-// {{{ crylink 
+// {{{ crylink
 set g_balance_crylink_primary_damage 12
 set g_balance_crylink_primary_edgedamage 6
 set g_balance_crylink_primary_force -50
@@ -440,7 +440,6 @@ set g_balance_crylink_primary_ammo 3
 set g_balance_crylink_primary_bouncedamagefactor 0.5
 set g_balance_crylink_primary_joindelay 0.1
 set g_balance_crylink_primary_joinspread 0.2
-set g_balance_crylink_primary_jointime 0
 set g_balance_crylink_primary_joinexplode 1
 set g_balance_crylink_primary_joinexplode_damage 0
 set g_balance_crylink_primary_joinexplode_edgedamage 0
@@ -450,7 +449,7 @@ set g_balance_crylink_primary_linkexplode 1
 
 set g_balance_crylink_primary_middle_lifetime 5 // range: 35000 full, fades to 70000
 set g_balance_crylink_primary_middle_fadetime 5
-set g_balance_crylink_primary_other_lifetime 5 
+set g_balance_crylink_primary_other_lifetime 5
 set g_balance_crylink_primary_other_fadetime 5
 
 set g_balance_crylink_secondary 1
@@ -469,9 +468,8 @@ set g_balance_crylink_secondary_ammo 2
 set g_balance_crylink_secondary_bouncedamagefactor 0.5
 set g_balance_crylink_secondary_joindelay 0
 set g_balance_crylink_secondary_joinspread 0
-set g_balance_crylink_secondary_jointime 0
-set g_balance_crylink_secondary_joinexplode 0                  
-set g_balance_crylink_secondary_joinexplode_damage 0   
+set g_balance_crylink_secondary_joinexplode 0
+set g_balance_crylink_secondary_joinexplode_damage 0
 set g_balance_crylink_secondary_joinexplode_edgedamage 0
 set g_balance_crylink_secondary_joinexplode_radius 0
 set g_balance_crylink_secondary_joinexplode_force 0
@@ -479,7 +477,7 @@ set g_balance_crylink_secondary_linkexplode 1
 
 set g_balance_crylink_secondary_middle_lifetime 5 // range: 35000 full, fades to 70000
 set g_balance_crylink_secondary_middle_fadetime 5
-set g_balance_crylink_secondary_line_lifetime 5 
+set g_balance_crylink_secondary_line_lifetime 5
 set g_balance_crylink_secondary_line_fadetime 5
 
 set g_balance_crylink_switchdelay_drop 0
@@ -669,7 +667,7 @@ set g_balance_tuba_pitchstep 6
 set g_balance_tuba_switchdelay_drop 0
 set g_balance_tuba_switchdelay_raise 0
 // }}}
-// {{{ fireball // this is a superweapon -- lets make it behave as one. 
+// {{{ fireball // this is a superweapon -- lets make it behave as one.
 set g_balance_fireball_primary_animtime 0.2
 set g_balance_fireball_primary_bfgdamage 100
 set g_balance_fireball_primary_bfgforce 0
index 9eebc5e867b11f4606ecca4aa7a02825bb374813..b60d779a51f3a6b966dc94076f65529a5fdca6b4 100644 (file)
@@ -158,7 +158,7 @@ set g_projectiles_damage 1
 // possible values:
 // -2: absolutely no damage to projectiles (no exceptions)
 // -1: no damage other than the exceptions (electro combo, hagar join explode, ML mines)
-// 0: only damage from contents (lava/slime) or exceptions 
+// 0: only damage from contents (lava/slime) or exceptions
 // 1: only self damage or damage from contents or exceptions
 // 2: allow all damage to projectiles normally
 set g_projectiles_keep_owner 0
@@ -303,7 +303,7 @@ set g_balance_uzi_burst_animtime 0.3
 set g_balance_uzi_burst_refire 0.06            // refire between burst bullets
 set g_balance_uzi_burst_refire2 0.45   // refire after burst
 set g_balance_uzi_burst_spread 0.02
-set g_balance_uzi_burst_damage 25              
+set g_balance_uzi_burst_damage 25
 set g_balance_uzi_burst_force 20
 set g_balance_uzi_burst_ammo 3
 
@@ -425,7 +425,7 @@ set g_balance_electro_switchdelay_raise 0.2
 set g_balance_electro_reload_ammo 0 //default: 20
 set g_balance_electro_reload_time 2
 // }}}
-// {{{ crylink 
+// {{{ crylink
 set g_balance_crylink_primary_damage 12
 set g_balance_crylink_primary_edgedamage 6
 set g_balance_crylink_primary_force -50
@@ -440,7 +440,6 @@ set g_balance_crylink_primary_ammo 3
 set g_balance_crylink_primary_bouncedamagefactor 0.5
 set g_balance_crylink_primary_joindelay 0.1
 set g_balance_crylink_primary_joinspread 0.2
-set g_balance_crylink_primary_jointime 0
 set g_balance_crylink_primary_joinexplode 1
 set g_balance_crylink_primary_joinexplode_damage 0
 set g_balance_crylink_primary_joinexplode_edgedamage 0
@@ -450,7 +449,7 @@ set g_balance_crylink_primary_linkexplode 1
 
 set g_balance_crylink_primary_middle_lifetime 5 // range: 35000 full, fades to 70000
 set g_balance_crylink_primary_middle_fadetime 5
-set g_balance_crylink_primary_other_lifetime 5 
+set g_balance_crylink_primary_other_lifetime 5
 set g_balance_crylink_primary_other_fadetime 5
 
 set g_balance_crylink_secondary 1
@@ -469,9 +468,8 @@ set g_balance_crylink_secondary_ammo 2
 set g_balance_crylink_secondary_bouncedamagefactor 0.5
 set g_balance_crylink_secondary_joindelay 0
 set g_balance_crylink_secondary_joinspread 0
-set g_balance_crylink_secondary_jointime 0
-set g_balance_crylink_secondary_joinexplode 0                  
-set g_balance_crylink_secondary_joinexplode_damage 0   
+set g_balance_crylink_secondary_joinexplode 0
+set g_balance_crylink_secondary_joinexplode_damage 0
 set g_balance_crylink_secondary_joinexplode_edgedamage 0
 set g_balance_crylink_secondary_joinexplode_radius 0
 set g_balance_crylink_secondary_joinexplode_force 0
@@ -479,7 +477,7 @@ set g_balance_crylink_secondary_linkexplode 1
 
 set g_balance_crylink_secondary_middle_lifetime 5 // range: 35000 full, fades to 70000
 set g_balance_crylink_secondary_middle_fadetime 5
-set g_balance_crylink_secondary_line_lifetime 5 
+set g_balance_crylink_secondary_line_lifetime 5
 set g_balance_crylink_secondary_line_fadetime 5
 
 set g_balance_crylink_switchdelay_drop 0.2
@@ -669,7 +667,7 @@ set g_balance_tuba_pitchstep 6
 set g_balance_tuba_switchdelay_drop 0.2
 set g_balance_tuba_switchdelay_raise 0.2
 // }}}
-// {{{ fireball // this is a superweapon -- lets make it behave as one. 
+// {{{ fireball // this is a superweapon -- lets make it behave as one.
 set g_balance_fireball_primary_animtime 0.2
 set g_balance_fireball_primary_bfgdamage 100
 set g_balance_fireball_primary_bfgforce 0
index fa4795cbf8768d340af609ccaaf244ca497f79a5..3b8724ca443af8bbc51d038b3a757b4bc84d0545 100644 (file)
@@ -158,7 +158,7 @@ set g_projectiles_damage 2
 // possible values:
 // -2: absolutely no damage to projectiles (no exceptions)
 // -1: no damage other than the exceptions (electro combo, hagar join explode, ML mines)
-// 0: only damage from contents (lava/slime) or exceptions 
+// 0: only damage from contents (lava/slime) or exceptions
 // 1: only self damage or damage from contents or exceptions
 // 2: allow all damage to projectiles normally
 set g_projectiles_keep_owner 0
@@ -303,7 +303,7 @@ set g_balance_uzi_burst_animtime 0.3
 set g_balance_uzi_burst_refire 0.06            // refire between burst bullets
 set g_balance_uzi_burst_refire2 0.45   // refire after burst
 set g_balance_uzi_burst_spread 0.02
-set g_balance_uzi_burst_damage 25              
+set g_balance_uzi_burst_damage 25
 set g_balance_uzi_burst_force 20
 set g_balance_uzi_burst_ammo 3
 
@@ -425,7 +425,7 @@ set g_balance_electro_switchdelay_raise 0.2
 set g_balance_electro_reload_ammo 0 //default: 20
 set g_balance_electro_reload_time 2
 // }}}
-// {{{ crylink 
+// {{{ crylink
 set g_balance_crylink_primary_damage 12
 set g_balance_crylink_primary_edgedamage 6
 set g_balance_crylink_primary_force -50
@@ -440,7 +440,6 @@ set g_balance_crylink_primary_ammo 3
 set g_balance_crylink_primary_bouncedamagefactor 0.5
 set g_balance_crylink_primary_joindelay 0.1
 set g_balance_crylink_primary_joinspread 0.2
-set g_balance_crylink_primary_jointime 0
 set g_balance_crylink_primary_joinexplode 1
 set g_balance_crylink_primary_joinexplode_damage 0
 set g_balance_crylink_primary_joinexplode_edgedamage 0
@@ -450,7 +449,7 @@ set g_balance_crylink_primary_linkexplode 1
 
 set g_balance_crylink_primary_middle_lifetime 5 // range: 35000 full, fades to 70000
 set g_balance_crylink_primary_middle_fadetime 5
-set g_balance_crylink_primary_other_lifetime 5 
+set g_balance_crylink_primary_other_lifetime 5
 set g_balance_crylink_primary_other_fadetime 5
 
 set g_balance_crylink_secondary 1
@@ -469,9 +468,8 @@ set g_balance_crylink_secondary_ammo 2
 set g_balance_crylink_secondary_bouncedamagefactor 0.5
 set g_balance_crylink_secondary_joindelay 0
 set g_balance_crylink_secondary_joinspread 0
-set g_balance_crylink_secondary_jointime 0
-set g_balance_crylink_secondary_joinexplode 0                  
-set g_balance_crylink_secondary_joinexplode_damage 0   
+set g_balance_crylink_secondary_joinexplode 0
+set g_balance_crylink_secondary_joinexplode_damage 0
 set g_balance_crylink_secondary_joinexplode_edgedamage 0
 set g_balance_crylink_secondary_joinexplode_radius 0
 set g_balance_crylink_secondary_joinexplode_force 0
@@ -479,7 +477,7 @@ set g_balance_crylink_secondary_linkexplode 1
 
 set g_balance_crylink_secondary_middle_lifetime 5 // range: 35000 full, fades to 70000
 set g_balance_crylink_secondary_middle_fadetime 5
-set g_balance_crylink_secondary_line_lifetime 5 
+set g_balance_crylink_secondary_line_lifetime 5
 set g_balance_crylink_secondary_line_fadetime 5
 
 set g_balance_crylink_switchdelay_drop 0.2
@@ -669,7 +667,7 @@ set g_balance_tuba_pitchstep 6
 set g_balance_tuba_switchdelay_drop 0.2
 set g_balance_tuba_switchdelay_raise 0.2
 // }}}
-// {{{ fireball // this is a superweapon -- lets make it behave as one. 
+// {{{ fireball // this is a superweapon -- lets make it behave as one.
 set g_balance_fireball_primary_animtime 0.2
 set g_balance_fireball_primary_bfgdamage 100
 set g_balance_fireball_primary_bfgforce 0
index 20f8b6bdabc4d77c9f5b728139f07baebf43632f..dca2334bc745a8a1a0f1cb869aec1b1ede7b5d4c 100644 (file)
@@ -43,7 +43,6 @@ alias cvar_purechanges     "qc_cmd_svcmd  cvar_purechanges     ${* ?}" // Prints
 alias info                 "qc_cmd_svcmd  info                 ${* ?}" // Request for unique server information set up by admin
 alias ladder               "qc_cmd_svcmd  ladder               ${* ?}" // Get information about top players if supported
 alias lsmaps               "qc_cmd_svcmd  lsmaps               ${* ?}" // List maps which can be used with the current game mode
-alias lsnewmaps            "qc_cmd_svcmd  lsnewmaps            ${* ?}" // List maps which have no records or are seemingly unplayed yet
 alias printmaplist         "qc_cmd_svcmd  printmaplist         ${* ?}" // Display full server maplist reply
 alias rankings             "qc_cmd_svcmd  rankings             ${* ?}" // Print information about rankings
 alias records              "qc_cmd_svcmd  records              ${* ?}" // List top 10 records for the current map
@@ -226,7 +225,7 @@ alias movetoauto "moveplayer ${1 ?} auto"
 
 
 // =======================================================
-//  Aliases for settemp subsystem. Warning: Do not touch. 
+//  Aliases for settemp subsystem. Warning: Do not touch.
 //  Usage: settemp variable value, next map resets it.
 // =======================================================
 alias settemp "qc_cmd_svcl settemp $*"
diff --git a/cpp.cfg b/cpp.cfg
index 3a190533eabb78cb94946cd874dee38d808b0f92..16cab2284d87fe20237cce1f40aaf03f105c0b2c 100644 (file)
--- a/cpp.cfg
+++ b/cpp.cfg
@@ -1,6 +1,6 @@
 alias _dont        ""
 alias _do          "$*"
-                  
+
 set _ifstack       ""
 alias #            "$_ifstack $*"
 
index e02e7c2e2ebe50949338d03c0794e6187a174813..c6a9e837b044ecb390bee079c8a811d475506454 100644 (file)
@@ -10,10 +10,10 @@ seta crosshair_alpha 0.75
 seta crosshair_size 0.3
 
 // crosshair dot settings
-seta crosshair_dot 0 
+seta crosshair_dot 0
 seta crosshair_dot_alpha 1
 seta crosshair_dot_size 0.600000
-seta crosshair_dot_color "1 0 0" 
+seta crosshair_dot_color "1 0 0"
 seta crosshair_dot_color_custom 1 "use a custom color for the crosshair dot"
 
 // smooth transitions for crosshair changes
index bb73408413623978371489386b3f370869f1f895..fa7ef844fd558d300789e7975c724f3489866a69 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-06-04 18:02-0400\n"
+"POT-Creation-Date: 2013-08-24 21:59-0400\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"
@@ -40,7 +40,7 @@ msgstr ""
 msgid "Intermediate %d"
 msgstr ""
 
-#: qcsrc/client/hud.qc:221 qcsrc/client/Main.qc:1357
+#: qcsrc/client/hud.qc:221 qcsrc/client/Main.qc:1300
 #, c-format
 msgid "%s (%s)"
 msgstr ""
@@ -274,30 +274,30 @@ msgstr ""
 msgid "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"
 msgstr ""
 
-#: qcsrc/client/Main.qc:95
+#: 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:105
+#: qcsrc/client/Main.qc:56
 #, c-format
 msgid "^4CSQC Build information: ^1%s\n"
 msgstr ""
 
-#: qcsrc/client/Main.qc:273 qcsrc/client/Main.qc:289
+#: 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:892
+#: 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:1352
+#: qcsrc/client/Main.qc:1295
 #, c-format
 msgid "%s (not bound)"
 msgstr ""
@@ -766,7 +766,7 @@ msgstr ""
 msgid "You are dead, press ^2%s^7 to respawn"
 msgstr ""
 
-#: qcsrc/client/target_music.qc:93 qcsrc/client/target_music.qc:182
+#: qcsrc/client/target_music.qc:94 qcsrc/client/target_music.qc:183
 #, c-format
 msgid "Cannot initialize sound %s\n"
 msgstr ""
@@ -788,7 +788,7 @@ msgstr ""
 msgid "No left gunner!"
 msgstr ""
 
-#: qcsrc/client/View.qc:1089
+#: qcsrc/client/View.qc:1097
 msgid "Revival progress"
 msgstr ""
 
@@ -1220,7 +1220,7 @@ msgstr ""
 msgid "@!#%'n Tuba Throwing"
 msgstr ""
 
-#: qcsrc/common/mapinfo.qc:1103
+#: qcsrc/common/mapinfo.qc:1104
 #, c-format
 msgid "%s: %s"
 msgstr ""
@@ -1394,1696 +1394,1731 @@ msgstr ""
 
 #: qcsrc/common/notifications.qh:266
 #, c-format
-msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s\n"
+msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s\n"
 msgstr ""
 
 #: qcsrc/common/notifications.qh:267
 #, c-format
-msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s\n"
+msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s\n"
 msgstr ""
 
 #: qcsrc/common/notifications.qh:268
 #, c-format
-msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s\n"
+msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s\n"
 msgstr ""
 
 #: qcsrc/common/notifications.qh:269
 #, c-format
+msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s\n"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:270
+#, c-format
 msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:269
+#: qcsrc/common/notifications.qh:270
 #, c-format
 msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:270
+#: qcsrc/common/notifications.qh:271
 #, c-format
 msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:271
+#: qcsrc/common/notifications.qh:272
 #, c-format
 msgid ""
 "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:272
+#: qcsrc/common/notifications.qh:273
 #, c-format
 msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:273
+#: qcsrc/common/notifications.qh:274
 #, c-format
 msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:274
+#: qcsrc/common/notifications.qh:275
 #, c-format
 msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:275
+#: qcsrc/common/notifications.qh:276
 #, c-format
 msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:276
+#: qcsrc/common/notifications.qh:277
 #, c-format
 msgid ""
 "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:277
+#: qcsrc/common/notifications.qh:278
 #, c-format
 msgid ""
 "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:278
+#: qcsrc/common/notifications.qh:279
 #, c-format
 msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:279
+#: qcsrc/common/notifications.qh:280
 #, c-format
 msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:280
+#: qcsrc/common/notifications.qh:281
 #, c-format
 msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:281
+#: qcsrc/common/notifications.qh:282
 #, c-format
 msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:282
+#: qcsrc/common/notifications.qh:283
 #, c-format
 msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:283
+#: qcsrc/common/notifications.qh:284
 #, c-format
 msgid "^BG%s%s^K1 was thrown into a world of hurt by ^BG%s^K1%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:284
+#: qcsrc/common/notifications.qh:285
 #, c-format
 msgid "^BG%s^K1 was moved into the %s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:285
+#: qcsrc/common/notifications.qh:286
 #, c-format
 msgid "^BG%s^K1 became enemies with the Lord of Teamplay%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:286
+#: qcsrc/common/notifications.qh:287
 #, c-format
 msgid "^BG%s^K1 thought they found a nice camping ground%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:287
+#: qcsrc/common/notifications.qh:288
 #, c-format
 msgid "^BG%s^K1 unfairly eliminated themself%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:288
+#: qcsrc/common/notifications.qh:289
 #, c-format
 msgid "^BG%s^K1 %s^K1%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:289
+#: qcsrc/common/notifications.qh:290
 #, c-format
 msgid "^BG%s^K1 couldn't catch their breath%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:289
+#: qcsrc/common/notifications.qh:290
 #, c-format
 msgid "^BG%s^K1 was in the water for too long%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:290
+#: qcsrc/common/notifications.qh:291
 #, c-format
 msgid "^BG%s^K1 hit the ground with a crunch%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:290
+#: qcsrc/common/notifications.qh:291
 #, c-format
 msgid "^BG%s^K1 hit the ground with a bit too much force%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:291
+#: qcsrc/common/notifications.qh:292
 #, c-format
 msgid "^BG%s^K1 became a bit too crispy%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:291
+#: qcsrc/common/notifications.qh:292
 #, c-format
 msgid "^BG%s^K1 felt a little hot%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:292
+#: qcsrc/common/notifications.qh:293
 #, c-format
 msgid "^BG%s^K1 died%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:293
+#: qcsrc/common/notifications.qh:294
 #, c-format
 msgid "^BG%s^K1 turned into hot slag%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:293
+#: qcsrc/common/notifications.qh:294
 #, c-format
 msgid "^BG%s^K1 found a hot place%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:294
+#: qcsrc/common/notifications.qh:295
+#, c-format
+msgid "^BG%s^K1 mastered the art of self-nading%s%s\n"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:296
 #, c-format
 msgid "^BG%s^K1 died%s%s. What's the point of living without ammo?\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:294
+#: qcsrc/common/notifications.qh:296
 #, c-format
 msgid "^BG%s^K1 ran out of ammo%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:295
+#: qcsrc/common/notifications.qh:297
 #, c-format
 msgid "^BG%s^K1 rotted away%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:296
+#: qcsrc/common/notifications.qh:298
 #, c-format
 msgid "^BG%s^K1 became a shooting star%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:297
+#: qcsrc/common/notifications.qh:299
 #, c-format
 msgid "^BG%s^K1 was slimed%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:298
+#: qcsrc/common/notifications.qh:300
 #, c-format
 msgid "^BG%s^K1 couldn't take it anymore%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:299
+#: qcsrc/common/notifications.qh:301
 #, c-format
 msgid "^BG%s^K1 is now preserved for centuries to come%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:300
+#: qcsrc/common/notifications.qh:302
 #, c-format
 msgid "^BG%s^K1 switched to the %s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:301
+#: qcsrc/common/notifications.qh:303
 #, c-format
 msgid "^BG%s^K1 died in an accident%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:302
+#: qcsrc/common/notifications.qh:304
 #, c-format
 msgid "^BG%s^K1 ran into a turret%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:303
+#: qcsrc/common/notifications.qh:305
 #, c-format
 msgid "^BG%s^K1 was blasted away by an eWheel turret%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:304
+#: qcsrc/common/notifications.qh:306
 #, c-format
 msgid "^BG%s^K1 got caught up in the FLAC turret fire%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:305
+#: qcsrc/common/notifications.qh:307
 #, c-format
 msgid "^BG%s^K1 was blasted away by a Hellion turret%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:306
+#: qcsrc/common/notifications.qh:308
 #, c-format
 msgid "^BG%s^K1 could not hide from the Hunter turret%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:307
+#: qcsrc/common/notifications.qh:309
 #, c-format
 msgid "^BG%s^K1 was riddled full of holes by a Machinegun turret%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:308
+#: qcsrc/common/notifications.qh:310
 #, c-format
 msgid "^BG%s^K1 got turned into smoldering gibs by an MLRS turret%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:309
+#: qcsrc/common/notifications.qh:311
 #, c-format
 msgid "^BG%s^K1 was phased out by a turret%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:310
+#: qcsrc/common/notifications.qh:312
 #, c-format
 msgid "^BG%s^K1 got served some superheated plasma from a turret%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:311
+#: qcsrc/common/notifications.qh:313
 #, c-format
 msgid "^BG%s^K1 was electrocuted by a Tesla turret%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:312
+#: qcsrc/common/notifications.qh:314
 #, c-format
 msgid "^BG%s^K1 got served a lead enrichment by a Walker turret%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:313
+#: qcsrc/common/notifications.qh:315
 #, c-format
 msgid "^BG%s^K1 was impaled by a Walker turret%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:314
+#: qcsrc/common/notifications.qh:316
 #, c-format
 msgid "^BG%s^K1 was blasted away by a Walker turret%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:315
+#: qcsrc/common/notifications.qh:317
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Bumblebee explosion%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:316
+#: qcsrc/common/notifications.qh:318
 #, c-format
 msgid "^BG%s^K1 was crushed by a vehicle%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:317
+#: qcsrc/common/notifications.qh:319
 #, c-format
 msgid "^BG%s^K1 was caught in a Raptor cluster bomb%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:318
+#: qcsrc/common/notifications.qh:320
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Raptor explosion%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:319
+#: qcsrc/common/notifications.qh:321
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Spiderbot explosion%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:320
+#: qcsrc/common/notifications.qh:322
 #, c-format
 msgid "^BG%s^K1 was blasted to bits by a Spiderbot rocket%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:321
+#: qcsrc/common/notifications.qh:323
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Racer explosion%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:322
+#: qcsrc/common/notifications.qh:324
 #, c-format
 msgid "^BG%s^K1 couldn't find shelter from a Racer rocket%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:323
+#: qcsrc/common/notifications.qh:325
 #, c-format
 msgid "^BG%s^K1 was in the wrong place%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:324
+#: qcsrc/common/notifications.qh:326
 #, c-format
 msgid "^BG%s^K1 was betrayed by ^BG%s^K1%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:325
+#: qcsrc/common/notifications.qh:327
 #, c-format
 msgid "^BG%s^K1 was frozen by ^BG%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:326
+#: qcsrc/common/notifications.qh:328
 #, c-format
 msgid "^BG%s^K3 was revived by ^BG%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:327
+#: qcsrc/common/notifications.qh:329
+#, c-format
+msgid "^BG%s^K3 was revived by falling\n"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:330
 #, c-format
 msgid "^BG%s^K3 was automatically revived after %s second(s)\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:328
+#: qcsrc/common/notifications.qh:331
 msgid "^TC^TT^BG team wins the round\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:329
+#: qcsrc/common/notifications.qh:332
 #, c-format
 msgid "^BG%s^BG wins the round\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:330
+#: qcsrc/common/notifications.qh:333
 msgid "^BGRound tied\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:331
+#: qcsrc/common/notifications.qh:334
 msgid "^BGRound over, there's no winner\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:332
+#: qcsrc/common/notifications.qh:335
 #, c-format
 msgid "^BG%s^K1 froze themself\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:333
+#: qcsrc/common/notifications.qh:336
 #, c-format
 msgid "^BGGodmode saved you %s units of damage, cheater!\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:334
+#: qcsrc/common/notifications.qh:337
 #, c-format
 msgid "^BGYou do not have the ^F1%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:335
+#: qcsrc/common/notifications.qh:338
 #, c-format
 msgid "^BGYou dropped the ^F1%s^BG%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:336
+#: qcsrc/common/notifications.qh:339
 #, c-format
 msgid "^BGYou got the ^F1%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:337
+#: qcsrc/common/notifications.qh:340
 #, c-format
 msgid "^BGYou don't have enough ammo for the ^F1%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:338
+#: qcsrc/common/notifications.qh:341
 #, c-format
 msgid "^F1%s %s^BG is unable to fire, but its ^F1%s^BG can\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:339
+#: qcsrc/common/notifications.qh:342
 #, c-format
 msgid "^F1%s^BG is ^F4not available^BG on this map\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:340
+#: qcsrc/common/notifications.qh:343
 #, c-format
 msgid "^BG%s^F3 connected%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:341
+#: qcsrc/common/notifications.qh:344
 #, c-format
-msgid "^BG%s^F3 connected and joined the ^TC^TT\n"
+msgid "^BG%s^F3 connected and joined the ^TC^TT team\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:342
+#: qcsrc/common/notifications.qh:345
 #, c-format
 msgid "^BG%s^F3 is now playing\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:343
+#: qcsrc/common/notifications.qh:346
 #, c-format
 msgid "^BG%s^BG has dropped the ball!\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:344
+#: qcsrc/common/notifications.qh:347
 #, c-format
 msgid "^BG%s^BG has picked up the ball!\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:345
+#: qcsrc/common/notifications.qh:348
 #, c-format
 msgid "^BG%s^BG captured the keys for the ^TC^TT team\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:346
+#: qcsrc/common/notifications.qh:349
 #, c-format
 msgid "^BG%s^BG dropped the ^TC^TT Key\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:347
+#: qcsrc/common/notifications.qh:350
 #, c-format
 msgid "^BG%s^BG lost the ^TC^TT Key\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:348
+#: qcsrc/common/notifications.qh:351
 #, c-format
 msgid "^BG%s^BG picked up the ^TC^TT Key\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:349
+#: qcsrc/common/notifications.qh:352
 #, c-format
 msgid "^BG%s^F3 forfeited\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:350
+#: qcsrc/common/notifications.qh:353
 #, c-format
 msgid "^BG%s^F3 has no more lives left\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:351
+#: qcsrc/common/notifications.qh:354
 #, c-format
 msgid "^BG%s^K1 picked up Invisibility\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:352
+#: qcsrc/common/notifications.qh:355
 #, c-format
 msgid "^BG%s^K1 picked up Shield\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:353
+#: qcsrc/common/notifications.qh:356
 #, c-format
 msgid "^BG%s^K1 picked up Speed\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:354
+#: qcsrc/common/notifications.qh:357
 #, c-format
 msgid "^BG%s^K1 picked up Strength\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:355
+#: qcsrc/common/notifications.qh:358
 #, c-format
 msgid "^BG%s^F3 disconnected\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:356
+#: qcsrc/common/notifications.qh:359
 #, c-format
 msgid "^BG%s^F3 was kicked for idling\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:357
+#: qcsrc/common/notifications.qh:360
 msgid ""
 "^F2You were kicked from the server because you are a spectator and "
 "spectators aren't allowed at the moment.\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:358
+#: qcsrc/common/notifications.qh:361
 #, c-format
 msgid "^BG%s^F3 is now spectating\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:359
+#: qcsrc/common/notifications.qh:362
 #, c-format
 msgid "^BG%s^BG has abandoned the race\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:360
+#: qcsrc/common/notifications.qh:363
 #, c-format
 msgid "^BG%s^BG couldn't break their %s%s^BG place record of %s%s %s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:361
+#: qcsrc/common/notifications.qh:364
 #, c-format
 msgid "^BG%s^BG couldn't break the %s%s^BG place record of %s%s %s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:362
+#: qcsrc/common/notifications.qh:365
 #, c-format
 msgid "^BG%s^BG has finished the race\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:363
+#: qcsrc/common/notifications.qh:366
 #, c-format
 msgid "^BG%s^BG broke %s^BG's %s%s^BG place record with %s%s %s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:364
+#: qcsrc/common/notifications.qh:367
 #, c-format
 msgid "^BG%s^BG improved their %s%s^BG place record with %s%s %s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:365
+#: qcsrc/common/notifications.qh:368
 #, c-format
 msgid ""
 "^BG%s^BG scored a new record with ^F2%s^BG, but unfortunately lacks a UID "
 "and will be lost.\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:366
+#: qcsrc/common/notifications.qh:369
 #, c-format
 msgid "^BG%s^BG set the %s%s^BG place record with %s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:367
+#: qcsrc/common/notifications.qh:370
 msgid "^TC^TT ^BGteam scores!\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:368
+#: qcsrc/common/notifications.qh:371
 #, 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!\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:369
+#: qcsrc/common/notifications.qh:372
 #, c-format
 msgid "^BG%s^K1 picked up a Superweapon\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:370
+#: qcsrc/common/notifications.qh:373
 #, c-format
 msgid ""
 "^F4NOTE: ^BGThe server is running ^F1Xonotic %s (beta)^BG, you have "
 "^F2Xonotic %s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:371
+#: qcsrc/common/notifications.qh:374
 #, c-format
 msgid ""
 "^F4NOTE: ^BGThe server is running ^F1Xonotic %s^BG, you have ^F2Xonotic %s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:372
+#: qcsrc/common/notifications.qh:375
 #, 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!\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:373
+#: qcsrc/common/notifications.qh:376
 #, c-format
 msgid "^F3SVQC Build information: ^F4%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:374
+#: qcsrc/common/notifications.qh:377
 #, c-format
 msgid ""
 "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Accordeon%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:375
+#: qcsrc/common/notifications.qh:378
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Accordeon%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:376
+#: qcsrc/common/notifications.qh:379
 #, c-format
 msgid "^BG%s%s^K1 felt the strong pull of ^BG%s^K1's Crylink%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:377
+#: qcsrc/common/notifications.qh:380
 #, c-format
 msgid "^BG%s^K1 felt the strong pull of their Crylink%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:378
+#: qcsrc/common/notifications.qh:381
 #, c-format
 msgid "^BG%s%s^K1 was blasted by ^BG%s^K1's Electro bolt%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:379
+#: qcsrc/common/notifications.qh:382
 #, c-format
 msgid "^BG%s%s^K1 felt the electrifying air of ^BG%s^K1's Electro combo%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:380
+#: qcsrc/common/notifications.qh:383
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Electro plasma%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:384
 #, c-format
 msgid "^BG%s^K1 played with Electro plasma%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:385
 #, c-format
 msgid "^BG%s^K1 could not remember where they put their Electro plasma%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:386
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's fireball%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:387
 #, c-format
 msgid "^BG%s%s^K1 got burnt by ^BG%s^K1's firemine%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:388
 #, c-format
 msgid "^BG%s^K1 should have used a smaller gun%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:389
 #, c-format
 msgid "^BG%s^K1 forgot about their firemine%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:390
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by a burst of ^BG%s^K1's Hagar rockets%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:391
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Hagar rockets%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:392
 #, c-format
 msgid "^BG%s^K1 played with tiny Hagar rockets%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:393
 #, c-format
 msgid "^BG%s%s^K1 was cut down with ^BG%s^K1's HLAC%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:394
 #, c-format
 msgid "^BG%s^K1 got a little jumpy with their HLAC%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:395
 #, c-format
 msgid "^BG%s%s^K1 was caught in ^BG%s^K1's Hook gravity bomb%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:396
 #, c-format
 msgid ""
 "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Klein Bottle%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:397
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Klein Bottle%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:398
 #, c-format
 msgid "^BG%s%s^K1 was shot to death by ^BG%s^K1's Laser%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:399
 #, c-format
 msgid "^BG%s^K1 shot themself to hell with their Laser%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:400
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's mine%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:401
 #, c-format
 msgid "^BG%s^K1 forgot about their mine%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:402
 #, c-format
 msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Minstanex%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:403
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Mortar grenade%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:401
+#: qcsrc/common/notifications.qh:404
 #, c-format
 msgid "^BG%s%s^K1 ate ^BG%s^K1's Mortar grenade%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:402
+#: qcsrc/common/notifications.qh:405
 #, c-format
 msgid "^BG%s^K1 didn't see their own Mortar grenade%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:403
+#: qcsrc/common/notifications.qh:406
 #, c-format
 msgid "^BG%s^K1 blew themself up with their own Mortar%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:404
+#: qcsrc/common/notifications.qh:407
 #, c-format
 msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Nex%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:405
+#: qcsrc/common/notifications.qh:408
 #, c-format
 msgid "^BG%s%s^K1 was sniped with a Rifle by ^BG%s^K1%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:406
+#: qcsrc/common/notifications.qh:409
 #, c-format
 msgid "^BG%s%s^K1 died in ^BG%s^K1's Rifle bullet hail%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:407
+#: qcsrc/common/notifications.qh:410
 #, c-format
 msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle bullet hail%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:408
+#: qcsrc/common/notifications.qh:411
 #, c-format
 msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:409
+#: qcsrc/common/notifications.qh:412
 #, c-format
 msgid "^BG%s%s^K1 ate ^BG%s^K1's rocket%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:410
+#: qcsrc/common/notifications.qh:413
 #, c-format
 msgid "^BG%s%s^K1 got too close ^BG%s^K1's rocket%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:411
+#: qcsrc/common/notifications.qh:414
 #, c-format
 msgid "^BG%s^K1 blew themself up with their Rocketlauncher%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:412
+#: qcsrc/common/notifications.qh:415
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Seeker rockets%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:413
+#: qcsrc/common/notifications.qh:416
 #, c-format
 msgid "^BG%s%s^K1 was tagged by ^BG%s^K1's Seeker%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:414
+#: qcsrc/common/notifications.qh:417
 #, c-format
 msgid "^BG%s^K1 played with tiny Seeker rockets%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:415
+#: qcsrc/common/notifications.qh:418
 #, c-format
 msgid "^BG%s%s^K1 was gunned down by ^BG%s^K1's Shotgun%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:416
+#: qcsrc/common/notifications.qh:419
 #, c-format
 msgid "^BG%s%s^K1 slapped ^BG%s^K1 around a bit with a large Shotgun%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:417
+#: qcsrc/common/notifications.qh:420
 #, c-format
 msgid "^BG%s^K1 is now thinking with portals%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:418
+#: qcsrc/common/notifications.qh:421
 #, c-format
 msgid "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Tuba%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:419
+#: qcsrc/common/notifications.qh:422
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Tuba%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:420
+#: qcsrc/common/notifications.qh:423
 #, c-format
 msgid "^BG%s%s^K1 was sniped by ^BG%s^K1's Machine Gun%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:421
+#: qcsrc/common/notifications.qh:424
 #, c-format
 msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:433
+#: qcsrc/common/notifications.qh:436
 msgid "^BGYou are attacking!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:434
+#: qcsrc/common/notifications.qh:437
 msgid "^BGYou are defending!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:435
+#: qcsrc/common/notifications.qh:438
 msgid "^F4Begin!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:436
+#: qcsrc/common/notifications.qh:439
 msgid "^F4Game starts in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:437
+#: qcsrc/common/notifications.qh:440
 msgid "^F4Round starts in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:438
+#: qcsrc/common/notifications.qh:441
 msgid "^F4Round cannot start"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:439
+#: qcsrc/common/notifications.qh:442
 msgid "^BGRound tied"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:440
+#: qcsrc/common/notifications.qh:443
 msgid "^BGRound over, there's no winner"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:441
+#: qcsrc/common/notifications.qh:444
+msgid "^F2Don't camp!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:445
 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:442
+#: qcsrc/common/notifications.qh:446
 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:443
+#: qcsrc/common/notifications.qh:447
 msgid "^BGYou captured the ^TC^TT^BG flag!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:444
+#: qcsrc/common/notifications.qh:448
 #, c-format
 msgid "^BGToo many flag throws! Throwing disabled for %s."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:445
+#: qcsrc/common/notifications.qh:449
 #, c-format
 msgid "^BG%s^BG passed the ^TC^TT^BG flag to %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:446
+#: qcsrc/common/notifications.qh:450
 #, c-format
 msgid "^BGYou received the ^TC^TT^BG flag from %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:447
+#: qcsrc/common/notifications.qh:451
 #, c-format
 msgid "^BG%s^BG requests you to pass the flag%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:448
+#: qcsrc/common/notifications.qh:452
 #, c-format
 msgid "^BGRequesting %s^BG to pass you the flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:449
+#: qcsrc/common/notifications.qh:453
 #, c-format
 msgid "^BGYou passed the ^TC^TT^BG flag to %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:450
+#: qcsrc/common/notifications.qh:454
 msgid "^BGYou got the ^TC^TT^BG flag!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:451
+#: qcsrc/common/notifications.qh:455
 #, c-format
 msgid "^BGThe %senemy^BG got your flag! Retrieve it!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:452
+#: qcsrc/common/notifications.qh:456
 #, c-format
 msgid "^BGThe %senemy (^BG%s%s)^BG got your flag! Retrieve it!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:453
+#: qcsrc/common/notifications.qh:457
 #, c-format
 msgid "^BGYour %steam mate^BG got the flag! Protect them!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:454
+#: qcsrc/common/notifications.qh:458
 #, c-format
 msgid "^BGYour %steam mate (^BG%s%s)^BG got the flag! Protect them!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:455
+#: qcsrc/common/notifications.qh:459
 msgid "^BGYou returned the ^TC^TT^BG flag!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:456
+#: qcsrc/common/notifications.qh:460
 msgid "^BGStalemate! Enemies can now see you on radar!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:457
+#: qcsrc/common/notifications.qh:461
 msgid "^BGStalemate! Flag carriers can now be seen by enemies on radar!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:458
+#: qcsrc/common/notifications.qh:462
 #, c-format
 msgid "^K3%sYou fragged ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:458
+#: qcsrc/common/notifications.qh:462
 #, c-format
 msgid "^K3%sYou scored against ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:459
+#: qcsrc/common/notifications.qh:463
 #, c-format
 msgid "^K1%sYou were fragged by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:459
+#: qcsrc/common/notifications.qh:463
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:460
+#: qcsrc/common/notifications.qh:464
 #, c-format
 msgid "^K1%sYou were fragged by ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:460
+#: qcsrc/common/notifications.qh:464
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:461
+#: qcsrc/common/notifications.qh:465
 #, c-format
 msgid "^K3%sYou fragged ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:461
+#: qcsrc/common/notifications.qh:465
 #, c-format
 msgid "^K3%sYou scored against ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:462
+#: qcsrc/common/notifications.qh:466
 #, c-format
 msgid "^K1%sYou typefragged ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:462
+#: qcsrc/common/notifications.qh:466
 #, c-format
 msgid "^K1%sYou scored against ^BG%s^K1 while they were typing"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:463
+#: qcsrc/common/notifications.qh:467
 #, c-format
 msgid "^K1%sYou were typefragged by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:463
+#: qcsrc/common/notifications.qh:467
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^K1 while typing!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:464
+#: qcsrc/common/notifications.qh:468
 #, c-format
 msgid "^K1%sYou were typefragged by ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:464
+#: qcsrc/common/notifications.qh:468
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^K1 while typing^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:465
+#: qcsrc/common/notifications.qh:469
 #, c-format
 msgid "^K1%sYou typefragged ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:465
+#: qcsrc/common/notifications.qh:469
 #, c-format
 msgid "^K1%sYou scored against ^BG%s^K1 while they were typing^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:466
+#: qcsrc/common/notifications.qh:470
+msgid "^BGPress ^F2DROPWEAPON^BG again to toss the nade!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:471
 #, c-format
 msgid ""
 "^BGYou have been moved into a different team\n"
 "You are now on: %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:467
+#: qcsrc/common/notifications.qh:472
 msgid "^K1Don't shoot your team mates!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:467
+#: qcsrc/common/notifications.qh:472
 msgid "^K1Don't go against your team mates!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:468
+#: qcsrc/common/notifications.qh:473
 msgid "^K1Die camper!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:468
+#: qcsrc/common/notifications.qh:473
 msgid "^K1Reconsider your tactics, camper!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:469
+#: qcsrc/common/notifications.qh:474
 msgid "^K1You unfairly eliminated yourself!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:470
+#: qcsrc/common/notifications.qh:475
 #, c-format
 msgid "^K1You were %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:471
+#: qcsrc/common/notifications.qh:476
 msgid "^K1You couldn't catch your breath!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:472
+#: qcsrc/common/notifications.qh:477
 msgid "^K1You hit the ground with a crunch!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:473
+#: qcsrc/common/notifications.qh:478
 msgid "^K1You got a little bit too crispy!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:473
+#: qcsrc/common/notifications.qh:478
 msgid "^K1You felt a little too hot!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:474
+#: qcsrc/common/notifications.qh:479
 msgid "^K1You killed your own dumb self!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:474
+#: qcsrc/common/notifications.qh:479
 msgid "^K1You need to be more careful!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:475
+#: qcsrc/common/notifications.qh:480
 msgid "^K1You couldn't stand the heat!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:476
+#: qcsrc/common/notifications.qh:481
+msgid "^K1You forgot to put the pin back in!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:481
+msgid "^K1Tastes like chicken!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:482
 msgid "^K1You were killed for running out of ammo..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:476
+#: qcsrc/common/notifications.qh:482
 msgid "^K1You are respawning for running out of ammo..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:477
+#: qcsrc/common/notifications.qh:483
 msgid "^K1You grew too old without taking your medicine"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:477
+#: qcsrc/common/notifications.qh:483
 msgid "^K1You need to preserve your health"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:478
+#: qcsrc/common/notifications.qh:484
 msgid "^K1You became a shooting star!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:479
+#: qcsrc/common/notifications.qh:485
 msgid "^K1You melted away in slime!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:480
+#: qcsrc/common/notifications.qh:486
 msgid "^K1You committed suicide!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:480
+#: qcsrc/common/notifications.qh:486
 msgid "^K1You ended it all!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:481
+#: qcsrc/common/notifications.qh:487
 msgid "^K1You got stuck in a swamp!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:482
+#: qcsrc/common/notifications.qh:488
 #, c-format
 msgid "^BGYou are now on: %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:483
+#: qcsrc/common/notifications.qh:489
 msgid "^K1You died in an accident!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:484
+#: qcsrc/common/notifications.qh:490
 msgid "^K1You were fragged by a turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:484
+#: qcsrc/common/notifications.qh:490
 msgid "^K1You had an unfortunate run in with a turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:485
+#: qcsrc/common/notifications.qh:491
 msgid "^K1You were fragged by an eWheel turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:485
+#: qcsrc/common/notifications.qh:491
 msgid "^K1You had an unfortunate run in with an eWheel turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:486
+#: qcsrc/common/notifications.qh:492
 msgid "^K1You were fragged by a Walker turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:486
+#: qcsrc/common/notifications.qh:492
 msgid "^K1You had an unfortunate run in with a Walker turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:487
+#: qcsrc/common/notifications.qh:493
 msgid "^K1You got caught in the blast of a Bumblebee explosion!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:488
+#: qcsrc/common/notifications.qh:494
 msgid "^K1You were crushed by a vehicle!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:489
+#: qcsrc/common/notifications.qh:495
 msgid "^K1You were caught in a Raptor cluster bomb!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:490
+#: qcsrc/common/notifications.qh:496
 msgid "^K1You got caught in the blast of a Raptor explosion!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:491
+#: qcsrc/common/notifications.qh:497
 msgid "^K1You got caught in the blast of a Spiderbot explosion!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:492
+#: qcsrc/common/notifications.qh:498
 msgid "^K1You were blasted to bits by a Spiderbot rocket!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:493
+#: qcsrc/common/notifications.qh:499
 msgid "^K1You got caught in the blast of a Racer explosion!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:494
+#: qcsrc/common/notifications.qh:500
 msgid "^K1You couldn't find shelter from a Racer rocket!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:495
+#: qcsrc/common/notifications.qh:501
 msgid "^K1Watch your step!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:496
+#: qcsrc/common/notifications.qh:502
 #, c-format
 msgid "^K1Moron! You fragged ^BG%s^K1, a team mate!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:496
+#: qcsrc/common/notifications.qh:502
 #, c-format
 msgid "^K1Moron! You went against ^BG%s^K1, a team mate!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:497
+#: qcsrc/common/notifications.qh:503
 #, c-format
 msgid "^K1You were fragged by ^BG%s^K1, a team mate"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:497
+#: qcsrc/common/notifications.qh:503
 #, c-format
 msgid "^K1You were scored against by ^BG%s^K1, a team mate"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:498
+#: qcsrc/common/notifications.qh:504
 msgid ""
 "^K1Stop idling!\n"
 "^BGDisconnecting in ^COUNT..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:499
+#: qcsrc/common/notifications.qh:505
 msgid "^F2You picked up some extra lives"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:500
+#: qcsrc/common/notifications.qh:506
 #, c-format
 msgid "^K3You froze ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:501
+#: qcsrc/common/notifications.qh:507
 #, c-format
 msgid "^K1You were frozen by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:502
+#: qcsrc/common/notifications.qh:508
 #, c-format
 msgid "^K3You revived ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:503
+#: qcsrc/common/notifications.qh:509
+msgid "^K3You revived yourself"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:510
 #, c-format
 msgid "^K3You were revived by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:504
+#: qcsrc/common/notifications.qh:511
 #, c-format
 msgid "^K3You were automatically revived after %s second(s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:505
+#: qcsrc/common/notifications.qh:512
 msgid "^TC^TT^BG team wins the round"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:506
+#: qcsrc/common/notifications.qh:513
 #, c-format
 msgid "^BG%s^BG wins the round"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:507
+#: qcsrc/common/notifications.qh:514
 msgid "^K1You froze yourself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:508
+#: qcsrc/common/notifications.qh:515
 msgid "^K1Round already started, you spawn as frozen"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:509
+#: qcsrc/common/notifications.qh:516
 #, c-format
 msgid "^BGYou do not have the ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:510
+#: qcsrc/common/notifications.qh:517
 #, c-format
 msgid "^BGYou dropped the ^F1%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:511
+#: qcsrc/common/notifications.qh:518
 #, c-format
 msgid "^BGYou got the ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:512
+#: qcsrc/common/notifications.qh:519
 #, c-format
 msgid "^BGYou don't have enough ammo for the ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:513
+#: qcsrc/common/notifications.qh:520
 #, c-format
 msgid "^F1%s %s^BG is unable to fire, but its ^F1%s^BG can"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:514
+#: qcsrc/common/notifications.qh:521
 #, c-format
 msgid "^F1%s^BG is ^F4not available^BG on this map"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:515
+#: qcsrc/common/notifications.qh:522
 msgid ""
 "^K1No spawnpoints available!\n"
 "Hope your team can fix it..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:516
+#: qcsrc/common/notifications.qh:523
 msgid ""
 "^K1You may not join the game at this time.\n"
 "The player limit reached maximum capacity."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:517
+#: qcsrc/common/notifications.qh:524
 #, c-format
 msgid "^BG%s^BG has dropped the ball!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:518
+#: qcsrc/common/notifications.qh:525
 #, c-format
 msgid "^BG%s^BG has picked up the ball!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:519
+#: qcsrc/common/notifications.qh:526
 msgid "^BGKilling people while you don't have the ball gives no points!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:520
+#: qcsrc/common/notifications.qh:527
 msgid ""
 "^BGAll keys are in your team's hands!\n"
 "Help the key carriers to meet!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:521
+#: qcsrc/common/notifications.qh:528
 msgid ""
 "^BGAll keys are in ^TC^TT team^BG's hands!\n"
 "Interfere ^F4NOW^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:522
+#: qcsrc/common/notifications.qh:529
 msgid ""
 "^BGAll keys are in your team's hands!\n"
 "Meet the other key carriers ^F4NOW^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:523
+#: qcsrc/common/notifications.qh:530
 msgid "^F4Round will start in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:524
+#: qcsrc/common/notifications.qh:531
 msgid "^BGScanning frequency range..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:525
+#: qcsrc/common/notifications.qh:532
 msgid "^BGYou are starting with the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:526 qcsrc/common/notifications.qh:527
+#: qcsrc/common/notifications.qh:533 qcsrc/common/notifications.qh:534
 #, c-format
 msgid ""
 "^BGWaiting for players to join...\n"
 "Need active players for: %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:528
+#: qcsrc/common/notifications.qh:535
 #, c-format
 msgid "^BGWaiting for %s player(s) to join..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:529
-msgid "^F2Don't camp!"
-msgstr ""
-
-#: qcsrc/common/notifications.qh:530
+#: qcsrc/common/notifications.qh:536
 msgid "^F4^COUNT^BG left to find some ammo!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:531
+#: qcsrc/common/notifications.qh:537
 msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:531
+#: qcsrc/common/notifications.qh:537
 msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:532
+#: qcsrc/common/notifications.qh:538
 #, c-format
 msgid "^F2Extra lives remaining: ^K1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:533
+#: qcsrc/common/notifications.qh:539
 msgid "^BGSecondary fire inflicts no damage!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:534
+#: qcsrc/common/notifications.qh:540
 #, c-format
 msgid "^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:535
+#: qcsrc/common/notifications.qh:541
 #, c-format
 msgid ""
 "^F2^COUNT^BG until weapon change...\n"
 "Next weapon: ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:536
+#: qcsrc/common/notifications.qh:542
 #, c-format
 msgid "^F2Active weapon: ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:537
+#: qcsrc/common/notifications.qh:543
+msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:544
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "Keep fragging until we have a winner!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:537
+#: qcsrc/common/notifications.qh:544
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "Keep scoring until we have a winner!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:538
+#: qcsrc/common/notifications.qh:545
 #, c-format
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "^BGAdded ^F4%s^BG to the game!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:539
+#: qcsrc/common/notifications.qh:546
 msgid "^F2Invisibility has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:540
+#: qcsrc/common/notifications.qh:547
 msgid "^F2Shield has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:541
+#: qcsrc/common/notifications.qh:548
 msgid "^F2Speed has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:542
+#: qcsrc/common/notifications.qh:549
 msgid "^F2Strength has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:543
+#: qcsrc/common/notifications.qh:550
 msgid "^F2You are invisible"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:544
+#: qcsrc/common/notifications.qh:551
 msgid "^F2Shield surrounds you"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:545
+#: qcsrc/common/notifications.qh:552
 msgid "^F2You are on speed"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:546
+#: qcsrc/common/notifications.qh:553
 msgid "^F2Strength infuses your weapons with devastating power"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:547
+#: qcsrc/common/notifications.qh:554
 msgid "^F2The race is over, finish your lap!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:548
+#: qcsrc/common/notifications.qh:555
 msgid "^F2Superweapons have broken down"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:549
+#: qcsrc/common/notifications.qh:556
 msgid "^F2Superweapons have been lost"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:550
+#: qcsrc/common/notifications.qh:557
 msgid "^F2You now have a superweapon"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:551
+#: qcsrc/common/notifications.qh:558
 msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:552
+#: qcsrc/common/notifications.qh:559
 msgid "^K1Changing team in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:553
+#: qcsrc/common/notifications.qh:560
 msgid "^K1Spectating in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:554
+#: qcsrc/common/notifications.qh:561
 msgid "^K1Suicide in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:555
+#: qcsrc/common/notifications.qh:562
 msgid "^F4Timeout begins in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:556
+#: qcsrc/common/notifications.qh:563
 msgid "^F4Timeout ends in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:788 qcsrc/common/notifications.qh:789
+#: qcsrc/common/notifications.qh:797 qcsrc/common/notifications.qh:798
 #, c-format
 msgid " (near %s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:796 qcsrc/common/notifications.qh:797
+#: qcsrc/common/notifications.qh:805 qcsrc/common/notifications.qh:806
 msgid "secondary"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:796 qcsrc/common/notifications.qh:797
+#: qcsrc/common/notifications.qh:805 qcsrc/common/notifications.qh:806
 msgid "primary"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:807
+#: qcsrc/common/notifications.qh:816
 #, c-format
 msgid " ^F1(Press %s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:816
+#: qcsrc/common/notifications.qh:825
 #, c-format
 msgid " with %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:825
+#: qcsrc/common/notifications.qh:834
 msgid "TRIPLE FRAG! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:825
+#: qcsrc/common/notifications.qh:834
 #, c-format
 msgid "%s^K1 made a TRIPLE FRAG! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:825
+#: qcsrc/common/notifications.qh:834
 #, c-format
 msgid "%s^K1 made a TRIPLE SCORE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:826
+#: qcsrc/common/notifications.qh:835
 msgid "RAGE! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:826
+#: qcsrc/common/notifications.qh:835
 #, c-format
 msgid "%s^K1 unlocked RAGE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:826
+#: qcsrc/common/notifications.qh:835
 #, c-format
 msgid "%s^K1 made FIVE SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:827
+#: qcsrc/common/notifications.qh:836
 msgid "MASSACRE! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:827
+#: qcsrc/common/notifications.qh:836
 #, c-format
 msgid "%s^K1 started a MASSACRE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:827
+#: qcsrc/common/notifications.qh:836
 #, c-format
 msgid "%s^K1 made TEN SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:828
+#: qcsrc/common/notifications.qh:837
 msgid "MAYHEM! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:828
+#: qcsrc/common/notifications.qh:837
 #, c-format
 msgid "%s^K1 executed MAYHEM! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:828
+#: qcsrc/common/notifications.qh:837
 #, c-format
 msgid "%s^K1 made FIFTEEN SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:829
+#: qcsrc/common/notifications.qh:838
 msgid "BERSERKER! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:829
+#: qcsrc/common/notifications.qh:838
 #, c-format
 msgid "%s^K1 is a BERSERKER! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:829
+#: qcsrc/common/notifications.qh:838
 #, c-format
 msgid "%s^K1 made TWENTY SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:830
+#: qcsrc/common/notifications.qh:839
 msgid "CARNAGE! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:830
+#: qcsrc/common/notifications.qh:839
 #, c-format
 msgid "%s^K1 inflicts CARNAGE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:830
+#: qcsrc/common/notifications.qh:839
 #, c-format
 msgid "%s^K1 made TWENTY FIVE SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:831
+#: qcsrc/common/notifications.qh:840
 msgid "ARMAGEDDON! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:831
+#: qcsrc/common/notifications.qh:840
 #, c-format
 msgid "%s^K1 unleashes ARMAGEDDON! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:831
+#: qcsrc/common/notifications.qh:840
 #, c-format
 msgid "%s^K1 made THIRTY SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:837
+#: qcsrc/common/notifications.qh:846
 #, c-format
 msgid "%s(^F1Bot^BG)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:839
+#: qcsrc/common/notifications.qh:848
 #, c-format
 msgid "%s(Ping ^F1%d^BG)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:845
+#: qcsrc/common/notifications.qh:854
 #, c-format
 msgid ""
 "\n"
 "(Health ^1%d^BG / Armor ^2%d^BG)%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:847
+#: qcsrc/common/notifications.qh:856
 #, c-format
 msgid ""
 "\n"
 "(^F4Dead^BG)%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:884 qcsrc/common/notifications.qh:897
+#: qcsrc/common/notifications.qh:893 qcsrc/common/notifications.qh:906
 #, c-format
 msgid "%d score spree! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:896
+#: qcsrc/common/notifications.qh:905
 #, c-format
 msgid "%d frag spree! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:909
+#: qcsrc/common/notifications.qh:918
 msgid "First blood! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:909
+#: qcsrc/common/notifications.qh:918
 msgid "First score! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:913
+#: qcsrc/common/notifications.qh:922
 msgid "First victim! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:913
+#: qcsrc/common/notifications.qh:922
 msgid "First casualty! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:954
+#: qcsrc/common/notifications.qh:963
 #, c-format
 msgid "%s^K1 has %d frags in a row! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:955
+#: qcsrc/common/notifications.qh:964
 #, c-format
 msgid "%s^K1 made %d scores in a row! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:973
+#: qcsrc/common/notifications.qh:982
 #, c-format
 msgid "%s^K1 drew first blood! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:974
+#: qcsrc/common/notifications.qh:983
 #, c-format
 msgid "%s^K1 got the first score! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:990
+#: qcsrc/common/notifications.qh:999
 #, c-format
 msgid ", ending their %d frag spree"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:991
+#: qcsrc/common/notifications.qh:1000
 #, c-format
 msgid ", ending their %d score spree"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1005
+#: qcsrc/common/notifications.qh:1014
 #, c-format
 msgid ", losing their %d frag spree"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1006
+#: qcsrc/common/notifications.qh:1015
 #, c-format
 msgid ", losing their %d score spree"
 msgstr ""
index f5a5442e3b08b78da0772105bdb6cb78f2d1c4d2..5d3142665197c31a07b26728ba35926dfd76ad34 100644 (file)
@@ -9,7 +9,7 @@ exec physicsXDF.cfg
 // general gameplay
 set g_jump_grunt 1 // make enemies even easier to hear when they're jumping around
 set g_shootfromcenter 1 // hit where you point at with the crosshair (almost so, no shooteye because it's really ugly)
-set g_balance_kill_antispam 0 
+set g_balance_kill_antispam 0
 set g_forced_respawn 1
 set g_jump_grunt 1
 // g_playerclip_collisions 0 // do not check playerclips
index 0e96e08848587709836ed01eec9f470f187a4814..4a55a5ee7c1ec372f727d030c7a520f4be9700f8 100644 (file)
@@ -6,7 +6,7 @@ exec defaultXonotic.cfg
 exec balanceXPM.cfg
 
 // general gameplay
-set g_norecoil 1 
+set g_norecoil 1
 set g_shootfromcenter 1 // hit where you point at with the crosshair (almost so, no shooteye because it's really ugly)
 set g_balance_kill_antispam 0
 set g_forced_respawn 1
index c392e9a1580728f922da3abfadfce58a2e25d1f3..7d59ac4a0d0d919aca36460e357326ddc8f60c4f 100644 (file)
@@ -245,7 +245,7 @@ set cl_deathglow 0.8 "number of seconds during which dead bodies glow out"
 
 set sv_gibhealth 100 "Minus health a dead body must have in order to get gibbed"
 
-// fragmessage: This allows extra information to be displayed with the frag centerprints. 
+// fragmessage: This allows extra information to be displayed with the frag centerprints.
 set sv_fraginfo 1 "Enable extra frag message information, 0 = Never display, 1 = Display only in warmup mode; 2 = Always display"
 set sv_fraginfo_ping 1 "Enable ping display information, 0 = Never display, 1 = Always display (If the player is a bot, it will say bot instead of the ping.)"
 set sv_fraginfo_handicap 1 "Enable handicap display information, 0 = Never display, 1 = Only when the player has handicap on, 2 = Always display (Displays Off if disabled)"
@@ -380,13 +380,6 @@ set g_weapon_throwable 1 "if set to 1, weapons can be dropped"
 set g_powerups -1 "if set to 0 the strength and shield (invincibility) will not spawn on the map, if 1 they will spawn in all game modes, -1 is game mode default"
 set g_use_ammunition 1 "if set to 0 all weapons have unlimited ammunition"
 set g_pickup_items -1 "if set to 0 all items (health, armor, ammo, weapons...) are removed from the map, if 1 they are forced to spawn"
-set g_minstagib 0      "enable minstagib"
-set g_minstagib_extralives 1   "how many extra lives you will get per powerup"
-set g_minstagib_ammo_start 10  "starting ammo"
-set g_minstagib_ammo_drop 5    "how much ammo you'll get for weapons or cells"
-set g_minstagib_invis_alpha 0.15
-set g_minstagib_speed_highspeed 1.5 "speed-multiplier that applies while you carry the invincibility powerup"
-set g_vampire 0 "set to 1 to enable the vampire mode, where the damage done to your opponent gets added to your own health"
 set g_weaponarena "0"  "put in a list of weapons to enable a weapon arena mode, or try \"all\" or \"most\""
 set g_weaponarena_random "0"   "if set to a number, only that weapon count is given on every spawn (randomly)"
 set g_weaponarena_random_with_laser "1"        "additionally, always provide the laser in random weapon arena games"
@@ -416,23 +409,6 @@ set g_player_alpha 1
 set g_player_brightness 0      "set to 2 for brighter players"
 seta g_balance_cloaked_alpha 0.25
 
-set g_sandbox 0 "allow players to spawn and edit objects around the map"
-set g_sandbox_info 1 "print object information to the server. 1 prints info about spawned / removed objects, 2 also prints info about edited objects"
-set g_sandbox_readonly 0 "when this mode is active, players cannot modify objects or use any sandbox commands"
-set g_sandbox_storage_name default "name of the selected storage to use"
-set g_sandbox_storage_autosave 5 "storage is automatically saved every specified number of seconds"
-set g_sandbox_storage_autoload 1 "if a storage file exists for the given map, automatically load it at startup"
-set g_sandbox_editor_flood 1 "players must wait this many seconds between spawning objects"
-set g_sandbox_editor_maxobjects 1000 "maximum number of objects that may exist at a time"
-set g_sandbox_editor_free 1 "0 = players can only copy or edit their own objects, 1 = players can copy but not edit other objects, 2 = players can copy and edit all object"
-set g_sandbox_editor_distance_spawn 200 "distance at which objects spawn in front of the player"
-set g_sandbox_editor_distance_edit 300 "distance at which players can edit or remove objects they are looking at"
-set g_sandbox_object_scale_min 0.1 "minimum scale that objects can be set to"
-set g_sandbox_object_scale_max 2 "maximum scale that objects can be set to"
-set g_sandbox_object_material_velocity_min 100 "velocity objects must have while colliding for material effects to be applied"
-set g_sandbox_object_material_velocity_factor 0.002 "velocity range which decides the intensity of material effects"
-set cl_sandbox_clipboard ""
-
 seta menu_sandbox_spawn_model ""
 seta menu_sandbox_attach_bone ""
 seta menu_sandbox_edit_skin 0
@@ -455,26 +431,9 @@ 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_invincible_projectiles 0 "set to 1 to disable any damage to projectiles in all balance configs, regardless of g_projectiles_damage"
-set g_dodging 0 "set to 1 to enable dodging in games"
-set g_rocket_flying 0 "set to 1 to enable rocket flying in all balance configs"
-
-seta cl_dodging_timeout 0.2 "determines how long apart (in seconds) two taps on the same direction key are considered a dodge. use 0 to disable"
-
-set sv_dodging_wall_dodging 0 "set to 1 to allow dodging off walls. 0 to disable"
-set sv_dodging_delay 0.5 "determines how long a player has to wait to be able to dodge again after dodging"
-set sv_dodging_up_speed 200 "the jump velocity of the dodge"
-set sv_dodging_horiz_speed 400 "the horizontal velocity of the dodge"
-set sv_dodging_ramp_time 0.1 "a ramp so that the horizontal part of the dodge is added smoothly (seconds)"
-set sv_dodging_height_threshold 10 "the maximum height above ground where to allow dodging"
-set sv_dodging_wall_distance_threshold 10 "the maximum distance from a wall that still allows dodging"
-set sv_dodging_sound 1 "if 1 dodging makes a sound. if 0 dodging is silent"
-
 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"
 set g_spawn_furthest 1 "this amount of the spawns shall be far away from any players"
 set g_spawn_useallspawns 0 "use all spawns, e.g. also team spawns in non-teamplay, and all spawns, even enemy spawns, in teamplay"
-set g_spawn_near_teammate 0 "if set, players prefer spawns near a team mate"
-set g_spawn_near_teammate_distance 640 "max distance to consider a spawn to be near a team mate"
 // respawn delay
 set g_respawn_delay 2 "number of seconds you have to wait before you can respawn again"
 set g_respawn_waves 0 "respawn in waves (every n seconds), intended to decrease overwhelming base attacks"
@@ -751,13 +710,6 @@ bind F2 vno
 //used for spectate/observer mode
 bind F3 spec
 
-// NIX (No Items Xonotic) - at each time, everyone uses the same weapon,
-// and in regular intervals, this weapon is cycled
-set g_nix 0 "No Items Xonotic - instead of pickup items, everyone plays with the same weapon. After some time, a countdown will start, after which everyone will switch to another weapon, and so on"
-set g_nix_with_laser 0 "always carry the laser as an additional weapon in NIX"
-set g_nix_with_healtharmor 0 "when 1, health and armor still show up in NIX"
-set g_nix_with_powerups 0 "when 1, powerups still show up in NIX"
-
 // score log
 set sv_logscores_console 0     "print scores to server console"
 set sv_logscores_file 0        "print scores to file"
@@ -975,7 +927,7 @@ seta scoreboard_color_bg_team 0.5 "team color multiplier of the scoreboard backg
 seta scoreboard_alpha_bg 0.6 "scoreboard background alpha"
 seta scoreboard_alpha_fg 1 "scoreboard foreground alpha"
 seta scoreboard_alpha_name 0.9 "alpha of player text in scoreboard list other than self"
-seta scoreboard_alpha_name_self 1 "alpha of player text in scoreboard list of self" 
+seta scoreboard_alpha_name_self 1 "alpha of player text in scoreboard list of self"
 seta scoreboard_fadeinspeed 10 "speed at which scoreboard fades in, higher is faster (0 = instant)"
 seta scoreboard_fadeoutspeed 5 "speed at which scoreboard fades out, higher is faster (0 = instant)"
 seta scoreboard_highlight 1 "enable highlighting for rows and columns in the scoreboard"
@@ -1091,10 +1043,6 @@ alias sethostname "set menu_use_default_hostname 0; hostname $*"
 
 set sv_foginterval 1 "force enable fog in regular intervals"
 
-set g_physical_items 0 "1 uses ODE physics for dropped weapons, 2 for all items, requires physics_ode to be enabled"
-set g_physical_items_damageforcescale 3 "how affected physical weapons are by damage"
-set g_physical_items_reset 1 "return map items to their original lotation after being picked up"
-
 // Audio track names (for old-style "cd loop NUMBER" usage)
 set _cdtrack_first "1"
 alias _cdtrack_0 "g_cdtracks_remaplist \"$g_cdtracks_remaplist $1\""
@@ -1153,7 +1101,7 @@ set sv_clones 0   "number of clones a player may make (reset by the \"kill\" comma
 
 set cl_handicap 1      "the higher, the more damage you will receive (client setting) NOTE: reconnect or use sendcvar command to update the choice."
 
-seta cl_clippedspectating 1 "movement collision for spectators so that you can't pass through walls and such. (client setting) NOTE: reconnect or use sendcvar command to update the choice." 
+seta cl_clippedspectating 1 "movement collision for spectators so that you can't pass through walls and such. (client setting) NOTE: reconnect or use sendcvar command to update the choice."
 
 seta cl_autoscreenshot 1 "Take a screenshot upon the end of a match... 0 = Disable completely, 1 = Allow sv_autoscreenshot to take a screenshot when requested, 2 = Always take an autoscreenshot anyway."
 
@@ -1177,12 +1125,6 @@ set g_bugrigs_speed_ref 400      "reference speed for accel and steer responsiveness"
 set g_bugrigs_speed_pow 2      "reference power for accel and steer responsiveness"
 set g_bugrigs_steer 1  "steering amount"
 
-set g_touchexplode 0
-set g_touchexplode_radius 50
-set g_touchexplode_damage 10
-set g_touchexplode_edgedamage 0
-set g_touchexplode_force 150
-
 set g_ban_sync_uri ""  "sync using this ban list provider (empty string to disable)"
 set g_ban_sync_interval 5      "sync every 5 minutes"
 set g_ban_sync_trusted_servers ""      "request ban lists from these xonotic servers (do not include your own server there, or unbanning may fail)"
@@ -1284,7 +1226,7 @@ seta cl_casings_maxcount 100 "maximum amount of shell casings (must be at least
 seta cl_gibs_maxcount 100 "maximum amount of gibs (must be at least 1)"
 seta cl_vehicle_spiderbot_cross_alpha 0.6
 seta cl_vehicle_spiderbot_cross_size 1
-seta cl_vehicles_hudscale 0.5 
+seta cl_vehicles_hudscale 0.5
 seta cl_vehicles_hudalpha 0.75
 seta cl_vehicles_hud_tactical 1
 
@@ -1341,10 +1283,6 @@ seta cl_forcemyplayerskin 0 "set to the skin number you want to show yourself as
 seta cl_forcemyplayercolors 0 "set to the color value (encoding is same as _cl_color) for your own player model (ignored in teamplay; does not affect how enemies look with cl_forceplayermodels)"
 seta cl_movement_errorcompensation 1 "try to compensate for prediction errors and reduce preceived lag"
 
-// debug cvars for keyhunt attaching
-set _angles "0 0 0"
-set _origin "0 0 0"
-
 // campaign internal, set when loading a campaign map1G
 set _campaign_index ""
 set _campaign_name ""
@@ -1571,6 +1509,7 @@ exec turrets.cfg
 exec vehicles.cfg
 exec crosshairs.cfg
 exec gamemodes.cfg
+exec mutators.cfg
 exec notifications.cfg
 
 // load console command aliases and settings
@@ -1584,7 +1523,7 @@ exec _hud_descriptions.cfg
 exec hud_luminos.cfg
 
 
-// ... and now that everything is configured/aliased, we can do some things: 
+// ... and now that everything is configured/aliased, we can do some things:
 
 // Change g_start_delay based upon if the server is local or not.
 if_client set g_start_delay 0  "delay before the game starts, so everyone can join; recommended to set this to like 15 on a public server"
@@ -1604,5 +1543,3 @@ set cl_simpleitems_postfix "_simple" "posfix to add fo model name when simple it
 set cl_fullbright_items 0 "enable fullbright items (if server allows, controled by g_fullbrightitems)"
 set cl_weapon_stay_color "2 0.5 0.5" "Color of picked up weapons when g_weapon_stay > 0"
 set cl_weapon_stay_alpha 0.75 "Alpha of picked up weapons when g_weapon_stay > 0"
-
-seta g_superspectate 0 "server side, allows extended spectator functions through the cmd interface. followpowerup, followstrength, followstshield or followfc [red|blue] will transfer spectation to the relevent player, if any"
index c2f702fa5ab243ac7d032a8583bb07e0c8d82570..d069d5f0fc0d797a06ede44d4e0814e254d5dfb6 100644 (file)
@@ -7977,3 +7977,976 @@ size 100 100
 alpha 190 190 180
 sizeincrease -80
 color 0xFFFFFF 0xFFFFFF
+
+
+// nade effects
+effect nade_blue
+trailspacing 1
+type smoke
+color 0x006cff 0x0600ff
+tex 65 65
+size 3 3
+sizeincrease -1
+alpha 100 100 250
+//gravity -0.11
+// fire
+effect nade_blue
+notunderwater
+trailspacing 8
+type smoke
+color 0x0600ff 0x9794ff
+tex 65 65
+size 15 25
+sizeincrease -10
+alpha 30 30 150
+// bubbles
+effect nade_blue
+underwater
+trailspacing 16
+type bubble
+tex 62 62
+color 0x006cff 0x0600ff
+size 1 1
+alpha 256 256 256
+gravity -0.125
+bounce 1.5
+liquidfriction 4
+velocityjitter 16 16 16
+
+effect nade_red
+trailspacing 1
+type smoke
+color 0xff0000 0xff3c00
+tex 65 65
+size 3 3
+sizeincrease -1
+alpha 100 100 250
+//gravity -0.11
+// fire
+effect nade_red
+notunderwater
+trailspacing 8
+type smoke
+color 0xff0000 0xffa2a2
+tex 65 65
+size 15 25
+sizeincrease -10
+alpha 30 30 150
+// bubbles
+effect nade_red
+underwater
+trailspacing 16
+type bubble
+tex 62 62
+color 0xff0000 0xff3c00
+size 1 1
+alpha 256 256 256
+gravity -0.125
+bounce 1.5
+liquidfriction 4
+velocityjitter 16 16 16
+
+effect nade_yellow
+trailspacing 1
+type smoke
+color 0xFFFF0F 0xFFFF0F
+tex 65 65
+size 3 3
+sizeincrease -1
+alpha 100 100 250
+//gravity -0.11
+// fire
+effect nade_yellow
+notunderwater
+trailspacing 8
+type smoke
+color 0xFFFF0F 0xFFFF0F
+tex 65 65
+size 15 25
+sizeincrease -10
+alpha 30 30 150
+// bubbles
+effect nade_yellow
+underwater
+trailspacing 16
+type bubble
+tex 62 62
+color 0xFFFF0F 0xFFFF0F
+size 1 1
+alpha 256 256 256
+gravity -0.125
+bounce 1.5
+liquidfriction 4
+velocityjitter 16 16 16
+
+effect nade_pink
+trailspacing 1
+type smoke
+color 0xFF0FFF 0xFF0FFF
+tex 65 65
+size 3 3
+sizeincrease -1
+alpha 100 100 250
+//gravity -0.11
+// fire
+effect nade_pink
+notunderwater
+trailspacing 8
+type smoke
+color 0xFF0FFF 0xFF0FFF
+tex 65 65
+size 15 25
+sizeincrease -10
+alpha 30 30 150
+// bubbles
+effect nade_pink
+underwater
+trailspacing 16
+type bubble
+tex 62 62
+color 0xFF0FFF 0xFF0FFF
+size 1 1
+alpha 256 256 256
+gravity -0.125
+bounce 1.5
+liquidfriction 4
+velocityjitter 16 16 16
+
+effect nade
+trailspacing 1
+type smoke
+color 0xFFFFFF 0xFFFFFF
+tex 65 65
+size 3 3
+sizeincrease -1
+alpha 100 100 250
+//gravity -0.11
+// fire
+effect nade
+notunderwater
+trailspacing 8
+type smoke
+color 0xFFFFFF 0xFFFFFF
+tex 65 65
+size 15 25
+sizeincrease -10
+alpha 30 30 150
+// bubbles
+effect nade
+underwater
+trailspacing 16
+type bubble
+tex 62 62
+color 0xFFFFFF 0xFFFFFF
+size 1 1
+alpha 256 256 256
+gravity -0.125
+bounce 1.5
+liquidfriction 4
+velocityjitter 16 16 16
+
+effect nade_red_burn
+trailspacing 1
+type smoke
+color 0xff0000 0xff3c00
+tex 65 65
+size 5 5
+sizeincrease -1
+alpha 100 100 250
+//gravity -0.11
+// fire
+effect nade_red_burn
+notunderwater
+trailspacing 64
+type smoke
+color 0xff0000 0xffa2a2
+tex 65 65
+size 45 25
+sizeincrease -30
+alpha 200 200 1000
+// bubbles
+effect nade_red_burn
+underwater
+trailspacing 16
+type bubble
+tex 62 62
+color 0xff0000 0xff3c00
+size 1 1
+alpha 256 256 256
+gravity -0.125
+bounce 1.5
+liquidfriction 4
+velocityjitter 16 16 16
+effect nade_red_burn
+trailspacing 16
+type smoke
+color 0xff0000 0xff3c00
+tex 71 73
+size 15 25
+sizeincrease -40
+rotate -180 180 20 -20
+originjitter 2 2 2
+velocityjitter 10 10 10
+alpha 300 900 1500
+
+effect nade_blue_burn
+trailspacing 1
+type smoke
+color 0x006cff 0x0600ff
+tex 65 65
+size 5 5
+sizeincrease -1
+alpha 100 100 250
+//gravity -0.11
+// fire
+effect nade_blue_burn
+notunderwater
+trailspacing 64
+type smoke
+color 0x0600ff 0x9794ff
+tex 65 65
+size 45 25
+sizeincrease -30
+alpha 200 200 1000
+// bubbles
+effect nade_blue_burn
+underwater
+trailspacing 16
+type bubble
+tex 62 62
+color 0x006cff 0x0600ff
+size 1 1
+alpha 256 256 256
+gravity -0.125
+bounce 1.5
+liquidfriction 4
+velocityjitter 16 16 16
+effect nade_blue_burn
+trailspacing 16
+type smoke
+color 0x006cff 0x0600ff
+tex 33 33
+size 25 25
+sizeincrease -30
+
+effect nade_yellow_burn
+trailspacing 1
+type smoke
+color 0xFFFF0F 0xFFFF0F
+tex 65 65
+size 5 5
+sizeincrease -1
+alpha 100 100 250
+//gravity -0.11
+// fire
+effect nade_yellow_burn
+notunderwater
+trailspacing 64
+type smoke
+color 0xFFFF0F 0xFFFF0F
+tex 65 65
+size 45 25
+sizeincrease -30
+alpha 200 200 1000
+// bubbles
+effect nade_yellow_burn
+underwater
+trailspacing 16
+type bubble
+tex 62 62
+color 0xFFFF0F 0xFFFF0F
+size 1 1
+alpha 256 256 256
+gravity -0.125
+bounce 1.5
+liquidfriction 4
+velocityjitter 16 16 16
+effect nade_yellow_burn
+trailspacing 16
+type smoke
+color 0xFFFF0F 0xFFFF0F
+tex 33 33
+size 25 25
+sizeincrease -30
+
+effect nade_pink_burn
+trailspacing 1
+type smoke
+color 0xFF0FFF 0xFF0FFF
+tex 65 65
+size 5 5
+sizeincrease -1
+alpha 100 100 250
+//gravity -0.11
+// fire
+effect nade_pink_burn
+notunderwater
+trailspacing 64
+type smoke
+color 0xFF0FFF 0xFF0FFF
+tex 65 65
+size 45 25
+sizeincrease -30
+alpha 200 200 1000
+// bubbles
+effect nade_pink_burn
+underwater
+trailspacing 16
+type bubble
+tex 62 62
+color 0xFF0FFF 0xFF0FFF
+size 1 1
+alpha 256 256 256
+gravity -0.125
+bounce 1.5
+liquidfriction 4
+velocityjitter 16 16 16
+effect nade_pink_burn
+trailspacing 16
+type smoke
+color 0xFF0FFF 0xFF0FFF
+tex 33 33
+size 25 25
+sizeincrease -30
+
+effect nade_burn
+trailspacing 1
+type smoke
+color 0xFFFFFF 0xFFFFFF
+tex 65 65
+size 5 5
+sizeincrease -1
+alpha 100 100 250
+//gravity -0.11
+// fire
+effect nade_burn
+notunderwater
+trailspacing 64
+type smoke
+color 0xFFFFFF 0xFFFFFF
+tex 65 65
+size 45 25
+sizeincrease -30
+alpha 200 200 1000
+// bubbles
+effect nade_burn
+underwater
+trailspacing 16
+type bubble
+tex 62 62
+color 0xFFFFFF 0xFFFFFF
+size 1 1
+alpha 256 256 256
+gravity -0.125
+bounce 1.5
+liquidfriction 4
+velocityjitter 16 16 16
+effect nade_burn
+trailspacing 16
+type smoke
+color 0xFFFFFF 0xFFFFFF
+tex 33 33
+size 25 25
+sizeincrease -30
+
+effect nade_blue_explode
+countabsolute 1
+type decal
+tex 8 16
+size 88 88
+alpha 256 256 0
+originjitter 26 26 26
+lightradius 300
+lightradiusfade 1500
+lightcolor 20 20 100
+// shockwave
+effect nade_blue_explode
+type smoke
+countabsolute 1
+tex 33 33
+size 32 32
+sizeincrease 1800
+color 0x80C0FF 0x80C0FF
+alpha 80 80 650
+velocitymultiplier 44
+// fire
+effect nade_blue_explode
+notunderwater
+count 16
+type smoke
+color 0x629dff 0x0018ff
+tex 48 55
+size 20 24
+sizeincrease 555
+alpha 400 656 2000
+airfriction 30
+originjitter 50 50 50
+velocityjitter 320 320 320
+rotate -180 180 -9 9
+// fire streched
+effect nade_blue_explode
+count 8
+type spark
+tex 48 55
+color 0x629dff 0x0018ff
+size 60 90
+alpha 1500 3000 13000
+stretchfactor 80
+sizeincrease 40
+velocityjitter 30 30 30
+airfriction -9
+//smoke
+effect nade_blue_explode
+type smoke
+count 32
+blend alpha
+tex 0 7
+size 60 30
+color 0x222222 0x000000
+alpha 128 328 390
+rotate -180 180 2 -2
+velocityjitter 200 200 200
+velocityoffset 0 0 180
+originjitter 50 50 10
+sizeincrease 50
+airfriction 0.04
+gravity 0.4
+// underwater bubbles
+effect nade_blue_explode
+underwater
+count 32
+type bubble
+tex 62 62
+color 0x404040 0x808080
+size 3 6
+alpha 128 256 64
+gravity -0.125
+bounce 1.5
+liquidfriction 0.25
+originjitter 16 16 16
+velocityjitter 196 196 196
+rotate 0 0 0 0
+// bouncing sparks
+effect nade_blue_explode
+notunderwater
+count 8
+type spark
+tex 40 40
+color 0x006cff 0x0600ff
+size 1 2
+alpha 644 956 484
+gravity 1
+airfriction 1
+bounce 1.6
+liquidfriction 0.8
+velocityoffset 0 0 80
+originjitter 16 16 16
+velocityjitter 424 424 624
+// notbouncing sparks
+effect nade_blue_explode
+count 16
+type spark
+tex 40 40
+color 0x006cff 0x0600ff
+size 1 2
+alpha 644 956 684
+gravity 0.5
+airfriction 0.7
+liquidfriction 0.8
+velocityoffset 0 0 80
+originjitter 16 16 16
+velocityjitter 424 424 624
+// derbis
+effect nade_blue_explode
+notunderwater
+count 12
+type alphastatic
+tex 66 68
+color 0x6a3d25 0xcac5b4
+size 2 6
+alpha 644 956 684
+gravity 1.3
+airfriction 0.5
+bounce 1.6
+velocityjitter 324 324 524
+rotate -180 180 -1000 1000
+
+effect nade_red_explode
+countabsolute 1
+type decal
+tex 8 16
+size 88 88
+alpha 256 256 0
+originjitter 26 26 26
+lightradius 300
+lightradiusfade 1500
+lightcolor 100 20 20
+// shockwave
+effect nade_red_explode
+type smoke
+countabsolute 1
+tex 33 33
+size 32 32
+sizeincrease 2200
+color 0xff0000 0xffa2a2
+alpha 80 80 650
+velocitymultiplier 44
+// fire
+effect nade_red_explode
+notunderwater
+count 16
+type smoke
+color 0xff0000 0xff4200
+tex 48 55
+size 20 24
+sizeincrease 555
+alpha 400 656 2000
+airfriction 30
+originjitter 50 50 50
+velocityjitter 320 320 320
+rotate -180 180 -9 9
+// fire streched
+effect nade_red_explode
+count 8
+type spark
+tex 48 55
+color 0xff0000 0xff4200
+size 60 90
+alpha 1500 3000 13000
+stretchfactor 80
+sizeincrease 40
+velocityjitter 30 30 30
+airfriction -9
+//smoke
+effect nade_red_explode
+type smoke
+count 32
+blend alpha
+tex 0 7
+size 60 30
+color 0x222222 0x000000
+alpha 128 328 390
+rotate -180 180 2 -2
+velocityjitter 200 200 200
+velocityoffset 0 0 180
+originjitter 50 50 10
+sizeincrease 50
+airfriction 0.04
+gravity 0.4
+// underwater bubbles
+effect nade_red_explode
+underwater
+count 32
+type bubble
+tex 62 62
+color 0x404040 0x808080
+size 3 6
+alpha 128 256 64
+gravity -0.125
+bounce 1.5
+liquidfriction 0.25
+originjitter 16 16 16
+velocityjitter 196 196 196
+rotate 0 0 0 0
+// bouncing sparks
+effect nade_red_explode
+notunderwater
+count 8
+type spark
+tex 40 40
+color 0xff0000 0xffa2a2
+size 1 2
+alpha 644 956 484
+gravity 1
+airfriction 1
+bounce 1.6
+liquidfriction 0.8
+velocityoffset 0 0 80
+originjitter 16 16 16
+velocityjitter 424 424 624
+// notbouncing sparks
+effect nade_red_explode
+count 16
+type spark
+tex 40 40
+color 0xff0000 0xffa2a2
+size 1 2
+alpha 644 956 684
+gravity 0.5
+airfriction 0.7
+liquidfriction 0.8
+velocityoffset 0 0 80
+originjitter 16 16 16
+velocityjitter 424 424 624
+// derbis
+effect nade_red_explode
+notunderwater
+count 8
+type smoke
+tex 71 73
+color 0xff0000 0xffa2a2
+size 20 40
+alpha 644 956 2500
+originjitter 64 64 64
+velocityjitter 324 324 324
+rotate -180 180 -100 100
+
+effect nade_yellow_explode
+countabsolute 1
+type decal
+tex 8 16
+size 88 88
+alpha 256 256 0
+originjitter 26 26 26
+lightradius 300
+lightradiusfade 1500
+lightcolor 100 20 20
+// shockwave
+effect nade_yellow_explode
+type smoke
+countabsolute 1
+tex 33 33
+size 32 32
+sizeincrease 2200
+color 0xff0000 0xffa2a2
+alpha 80 80 650
+velocitymultiplier 44
+// fire
+effect nade_yellow_explode
+notunderwater
+count 16
+type smoke
+color 0xFFFF0F 0xFFFF0F
+tex 48 55
+size 20 24
+sizeincrease 555
+alpha 400 656 2000
+airfriction 30
+originjitter 50 50 50
+velocityjitter 320 320 320
+rotate -180 180 -9 9
+// fire streched
+effect nade_yellow_explode
+count 8
+type spark
+tex 48 55
+color 0xFFFF0F 0xFFFF0F
+size 60 90
+alpha 1500 3000 13000
+stretchfactor 80
+sizeincrease 40
+velocityjitter 30 30 30
+airfriction -9
+//smoke
+effect nade_yellow_explode
+type smoke
+count 32
+blend alpha
+tex 0 7
+size 60 30
+color 0x222222 0x000000
+alpha 128 328 390
+rotate -180 180 2 -2
+velocityjitter 200 200 200
+velocityoffset 0 0 180
+originjitter 50 50 10
+sizeincrease 50
+airfriction 0.04
+gravity 0.4
+// underwater bubbles
+effect nade_yellow_explode
+underwater
+count 32
+type bubble
+tex 62 62
+color 0x404040 0x808080
+size 3 6
+alpha 128 256 64
+gravity -0.125
+bounce 1.5
+liquidfriction 0.25
+originjitter 16 16 16
+velocityjitter 196 196 196
+rotate 0 0 0 0
+// bouncing sparks
+effect nade_yellow_explode
+notunderwater
+count 8
+type spark
+tex 40 40
+color 0xff0000 0xffa2a2
+size 1 2
+alpha 644 956 484
+gravity 1
+airfriction 1
+bounce 1.6
+liquidfriction 0.8
+velocityoffset 0 0 80
+originjitter 16 16 16
+velocityjitter 424 424 624
+// notbouncing sparks
+effect nade_yellow_explode
+count 16
+type spark
+tex 40 40
+color 0xff0000 0xffa2a2
+size 1 2
+alpha 644 956 684
+gravity 0.5
+airfriction 0.7
+liquidfriction 0.8
+velocityoffset 0 0 80
+originjitter 16 16 16
+velocityjitter 424 424 624
+// derbis
+effect nade_yellow_explode
+notunderwater
+count 8
+type smoke
+tex 71 73
+color 0xff0000 0xffa2a2
+size 20 40
+alpha 644 956 2500
+originjitter 64 64 64
+velocityjitter 324 324 324
+rotate -180 180 -100 100
+
+effect nade_pink_explode
+countabsolute 1
+type decal
+tex 8 16
+size 88 88
+alpha 256 256 0
+originjitter 26 26 26
+lightradius 300
+lightradiusfade 1500
+lightcolor 100 20 20
+// shockwave
+effect nade_pink_explode
+type smoke
+countabsolute 1
+tex 33 33
+size 32 32
+sizeincrease 2200
+color 0xff0000 0xffa2a2
+alpha 80 80 650
+velocitymultiplier 44
+// fire
+effect nade_pink_explode
+notunderwater
+count 16
+type smoke
+color 0xFF0FFF 0xFF0FFF
+tex 48 55
+size 20 24
+sizeincrease 555
+alpha 400 656 2000
+airfriction 30
+originjitter 50 50 50
+velocityjitter 320 320 320
+rotate -180 180 -9 9
+// fire streched
+effect nade_pink_explode
+count 8
+type spark
+tex 48 55
+color 0xFF0FFF 0xFF0FFF
+size 60 90
+alpha 1500 3000 13000
+stretchfactor 80
+sizeincrease 40
+velocityjitter 30 30 30
+airfriction -9
+//smoke
+effect nade_pink_explode
+type smoke
+count 32
+blend alpha
+tex 0 7
+size 60 30
+color 0x222222 0x000000
+alpha 128 328 390
+rotate -180 180 2 -2
+velocityjitter 200 200 200
+velocityoffset 0 0 180
+originjitter 50 50 10
+sizeincrease 50
+airfriction 0.04
+gravity 0.4
+// underwater bubbles
+effect nade_pink_explode
+underwater
+count 32
+type bubble
+tex 62 62
+color 0x404040 0x808080
+size 3 6
+alpha 128 256 64
+gravity -0.125
+bounce 1.5
+liquidfriction 0.25
+originjitter 16 16 16
+velocityjitter 196 196 196
+rotate 0 0 0 0
+// bouncing sparks
+effect nade_pink_explode
+notunderwater
+count 8
+type spark
+tex 40 40
+color 0xff0000 0xffa2a2
+size 1 2
+alpha 644 956 484
+gravity 1
+airfriction 1
+bounce 1.6
+liquidfriction 0.8
+velocityoffset 0 0 80
+originjitter 16 16 16
+velocityjitter 424 424 624
+// notbouncing sparks
+effect nade_pink_explode
+count 16
+type spark
+tex 40 40
+color 0xff0000 0xffa2a2
+size 1 2
+alpha 644 956 684
+gravity 0.5
+airfriction 0.7
+liquidfriction 0.8
+velocityoffset 0 0 80
+originjitter 16 16 16
+velocityjitter 424 424 624
+// derbis
+effect nade_pink_explode
+notunderwater
+count 8
+type smoke
+tex 71 73
+color 0xff0000 0xffa2a2
+size 20 40
+alpha 644 956 2500
+originjitter 64 64 64
+velocityjitter 324 324 324
+rotate -180 180 -100 100
+
+effect nade_explode
+countabsolute 1
+type decal
+tex 8 16
+size 88 88
+alpha 256 256 0
+originjitter 26 26 26
+lightradius 300
+lightradiusfade 1500
+lightcolor 100 20 20
+// shockwave
+effect nade_explode
+type smoke
+countabsolute 1
+tex 33 33
+size 32 32
+sizeincrease 2200
+color 0xff0000 0xffa2a2
+alpha 80 80 650
+velocitymultiplier 44
+// fire
+effect nade_explode
+notunderwater
+count 16
+type smoke
+color 0xFFFFFF 0xFFFFFF
+tex 48 55
+size 20 24
+sizeincrease 555
+alpha 400 656 2000
+airfriction 30
+originjitter 50 50 50
+velocityjitter 320 320 320
+rotate -180 180 -9 9
+// fire streched
+effect nade_explode
+count 8
+type spark
+tex 48 55
+color 0xFFFFFF 0xFFFFFF
+size 60 90
+alpha 1500 3000 13000
+stretchfactor 80
+sizeincrease 40
+velocityjitter 30 30 30
+airfriction -9
+//smoke
+effect nade_explode
+type smoke
+count 32
+blend alpha
+tex 0 7
+size 60 30
+color 0x222222 0x000000
+alpha 128 328 390
+rotate -180 180 2 -2
+velocityjitter 200 200 200
+velocityoffset 0 0 180
+originjitter 50 50 10
+sizeincrease 50
+airfriction 0.04
+gravity 0.4
+// underwater bubbles
+effect nade_explode
+underwater
+count 32
+type bubble
+tex 62 62
+color 0x404040 0x808080
+size 3 6
+alpha 128 256 64
+gravity -0.125
+bounce 1.5
+liquidfriction 0.25
+originjitter 16 16 16
+velocityjitter 196 196 196
+rotate 0 0 0 0
+// bouncing sparks
+effect nade_explode
+notunderwater
+count 8
+type spark
+tex 40 40
+color 0xff0000 0xffa2a2
+size 1 2
+alpha 644 956 484
+gravity 1
+airfriction 1
+bounce 1.6
+liquidfriction 0.8
+velocityoffset 0 0 80
+originjitter 16 16 16
+velocityjitter 424 424 624
+// notbouncing sparks
+effect nade_explode
+count 16
+type spark
+tex 40 40
+color 0xff0000 0xffa2a2
+size 1 2
+alpha 644 956 684
+gravity 0.5
+airfriction 0.7
+liquidfriction 0.8
+velocityoffset 0 0 80
+originjitter 16 16 16
+velocityjitter 424 424 624
+// derbis
+effect nade_explode
+notunderwater
+count 8
+type smoke
+tex 71 73
+color 0xff0000 0xffa2a2
+size 20 40
+alpha 644 956 2500
+originjitter 64 64 64
+velocityjitter 324 324 324
+rotate -180 180 -100 100
index a1ad723d2748dd155db645f1f44ec0a633cd9bdb..665fa558490b75fac0e554e8f8badc87cc00e218 100644 (file)
@@ -278,6 +278,8 @@ seta g_freezetag_point_leadlimit -1 "Freeze Tag point lead limit overriding the
 set g_freezetag_revive_speed 0.4 "Speed for reviving a frozen teammate"
 set g_freezetag_revive_clearspeed 1.6 "Speed at which reviving progress gets lost when out of range"
 set g_freezetag_revive_extra_size 100 "Distance in qu that you can stand from a frozen teammate to keep reviving him"
+set g_freezetag_revive_falldamage 0 "Enable reviving from this amount of fall damage"
+set g_freezetag_revive_falldamage_health 40 "Amount of health player has if they revived from falling"
 set g_freezetag_round_timelimit 180
 set g_freezetag_frozen_force 0.6 "How much to multiply the force on a frozen player with"
 set g_freezetag_frozen_maxtime 60 "frozen players will be automatically unfrozen after this time in seconds"
@@ -343,9 +345,6 @@ set g_lms 0 "Last Man Standing: everyone starts with a certain amount of lives,
 set g_lms_lives_override -1
 set g_lms_extra_lives 0
 set g_lms_regenerate 0
-set g_lms_campcheck_interval 10
-set g_lms_campcheck_damage 100
-set g_lms_campcheck_distance 1800
 set g_lms_last_join 3  "if g_lms_join_anytime is false, new players can only join if the worst active player has more than (fraglimit - g_lms_last_join) lives"
 set g_lms_join_anytime 1       "if true, new players can join, but get same amount of lives as the worst player"
 
index f99494a1cc154d5c39115e1c347d73fc73de8d39..f2b4fa4bd8504dca76aae7b705b2d948614518c0 100644 (file)
@@ -20,9 +20,9 @@ seta hud_progressbar_health_color "0.6 0 0"
 seta hud_progressbar_armor_color "0 0.6 0"
 seta hud_progressbar_fuel_color "0.6 0.6 0"
 seta hud_progressbar_nexball_color "0.7 0.1 0"
-seta hud_progressbar_speed_color "1 0.75 0" 
-seta hud_progressbar_acceleration_color "0.5 0.75 1" 
-seta hud_progressbar_acceleration_neg_color "0.125 0.25 0.5" 
+seta hud_progressbar_speed_color "1 0.75 0"
+seta hud_progressbar_acceleration_color "0.5 0.75 1"
+seta hud_progressbar_acceleration_neg_color "0.125 0.25 0.5"
 
 seta _hud_panelorder "15 12 9 10 5 6 14 0 7 4 11 2 1 3 8 13 16 "
 
@@ -54,7 +54,7 @@ seta hud_panel_weapons_ammo_alpha "1"
 seta hud_panel_weapons_aspect "2"
 seta hud_panel_weapons_timeout "1"
 seta hud_panel_weapons_timeout_effect "1"
-seta hud_panel_weapons_timeout_fadebgmin "0.4" 
+seta hud_panel_weapons_timeout_fadebgmin "0.4"
 seta hud_panel_weapons_timeout_fadefgmin "0.4"
 seta hud_panel_weapons_timeout_speed_in "0.25"
 seta hud_panel_weapons_timeout_speed_out "0.75"
@@ -290,7 +290,7 @@ seta hud_panel_centerprint_fade_out "0.5"
 seta hud_panel_centerprint_fade_subsequent "1"
 seta hud_panel_centerprint_fade_subsequent_passone "3"
 seta hud_panel_centerprint_fade_subsequent_passone_minalpha "0.5"
-seta hud_panel_centerprint_fade_subsequent_passtwo "10" 
+seta hud_panel_centerprint_fade_subsequent_passtwo "10"
 seta hud_panel_centerprint_fade_subsequent_passtwo_minalpha "0.5"
 seta hud_panel_centerprint_fade_subsequent_minfontsize "0.75"
 seta hud_panel_centerprint_fade_minfontsize "0"
index bfa0c0b3e4c510536133ebd520010576001b14ea..c401132ac3d2fe00f44ca3d1c3da806f85ea6a5b 100644 (file)
@@ -20,9 +20,9 @@ seta hud_progressbar_health_color "0.6 0 0"
 seta hud_progressbar_armor_color "0 0.6 0"
 seta hud_progressbar_fuel_color "0.6 0.6 0"
 seta hud_progressbar_nexball_color "0.7 0.1 0"
-seta hud_progressbar_speed_color "1 0.75 0" 
-seta hud_progressbar_acceleration_color "0.5 0.75 1" 
-seta hud_progressbar_acceleration_neg_color "0.125 0.25 0.5" 
+seta hud_progressbar_speed_color "1 0.75 0"
+seta hud_progressbar_acceleration_color "0.5 0.75 1"
+seta hud_progressbar_acceleration_neg_color "0.125 0.25 0.5"
 
 seta _hud_panelorder "10 3 0 14 6 9 13 4 1 2 11 12 7 5 8 15 16 "
 
@@ -54,7 +54,7 @@ seta hud_panel_weapons_ammo_alpha "1"
 seta hud_panel_weapons_aspect "2"
 seta hud_panel_weapons_timeout "0"
 seta hud_panel_weapons_timeout_effect "0"
-seta hud_panel_weapons_timeout_fadebgmin "0" 
+seta hud_panel_weapons_timeout_fadebgmin "0"
 seta hud_panel_weapons_timeout_fadefgmin "0"
 seta hud_panel_weapons_timeout_speed_in "0.25"
 seta hud_panel_weapons_timeout_speed_out "0.75"
@@ -290,7 +290,7 @@ seta hud_panel_centerprint_fade_out "0.5"
 seta hud_panel_centerprint_fade_subsequent "1"
 seta hud_panel_centerprint_fade_subsequent_passone "3"
 seta hud_panel_centerprint_fade_subsequent_passone_minalpha "0.5"
-seta hud_panel_centerprint_fade_subsequent_passtwo "10" 
+seta hud_panel_centerprint_fade_subsequent_passtwo "10"
 seta hud_panel_centerprint_fade_subsequent_passtwo_minalpha "0.5"
 seta hud_panel_centerprint_fade_subsequent_minfontsize "0.75"
 seta hud_panel_centerprint_fade_minfontsize "0"
index 27ca9ab80d0e0133937453d8314579a433b388de..518492ed4a7998973481221c835453a6f4d71bab 100644 (file)
@@ -20,9 +20,9 @@ seta hud_progressbar_health_color "0.6 0 0"
 seta hud_progressbar_armor_color "0 0.6 0"
 seta hud_progressbar_fuel_color "0.6 0.6 0"
 seta hud_progressbar_nexball_color "0.7 0.1 0"
-seta hud_progressbar_speed_color "1 0.75 0" 
-seta hud_progressbar_acceleration_color "0.5 0.75 1" 
-seta hud_progressbar_acceleration_neg_color "0.125 0.25 0.5" 
+seta hud_progressbar_speed_color "1 0.75 0"
+seta hud_progressbar_acceleration_color "0.5 0.75 1"
+seta hud_progressbar_acceleration_neg_color "0.125 0.25 0.5"
 
 seta _hud_panelorder "15 3 1 2 11 10 0 14 6 9 13 4 12 7 5 8 16 "
 
@@ -54,7 +54,7 @@ seta hud_panel_weapons_ammo_alpha "1"
 seta hud_panel_weapons_aspect "2"
 seta hud_panel_weapons_timeout "0"
 seta hud_panel_weapons_timeout_effect "0"
-seta hud_panel_weapons_timeout_fadebgmin "0" 
+seta hud_panel_weapons_timeout_fadebgmin "0"
 seta hud_panel_weapons_timeout_fadefgmin "0"
 seta hud_panel_weapons_timeout_speed_in "0.25"
 seta hud_panel_weapons_timeout_speed_out "0.75"
@@ -290,7 +290,7 @@ seta hud_panel_centerprint_fade_out "0.5"
 seta hud_panel_centerprint_fade_subsequent "1"
 seta hud_panel_centerprint_fade_subsequent_passone "3"
 seta hud_panel_centerprint_fade_subsequent_passone_minalpha "0.5"
-seta hud_panel_centerprint_fade_subsequent_passtwo "10" 
+seta hud_panel_centerprint_fade_subsequent_passtwo "10"
 seta hud_panel_centerprint_fade_subsequent_passtwo_minalpha "0.5"
 seta hud_panel_centerprint_fade_subsequent_minfontsize "0.75"
 seta hud_panel_centerprint_fade_minfontsize "0"
index 3a489a04e44c95dd2b1e6aef6379bfba7c4a96c3..0a5f05955ef8d1a24b1fd5dbcbc95db0e8de84bf 100644 (file)
@@ -20,9 +20,9 @@ seta hud_progressbar_health_color "0.6 0 0"
 seta hud_progressbar_armor_color "0 0.6 0"
 seta hud_progressbar_fuel_color "0.6 0.6 0"
 seta hud_progressbar_nexball_color "0.7 0.1 0"
-seta hud_progressbar_speed_color "1 0.75 0" 
-seta hud_progressbar_acceleration_color "0.5 0.75 1" 
-seta hud_progressbar_acceleration_neg_color "0.125 0.25 0.5" 
+seta hud_progressbar_speed_color "1 0.75 0"
+seta hud_progressbar_acceleration_color "0.5 0.75 1"
+seta hud_progressbar_acceleration_neg_color "0.125 0.25 0.5"
 
 seta _hud_panelorder "15 10 9 6 8 14 5 0 4 13 2 7 1 3 11 12 16 "
 
@@ -54,7 +54,7 @@ seta hud_panel_weapons_ammo_alpha "1"
 seta hud_panel_weapons_aspect "2"
 seta hud_panel_weapons_timeout "3"
 seta hud_panel_weapons_timeout_effect "1"
-seta hud_panel_weapons_timeout_fadebgmin "0" 
+seta hud_panel_weapons_timeout_fadebgmin "0"
 seta hud_panel_weapons_timeout_fadefgmin "0"
 seta hud_panel_weapons_timeout_speed_in "0.25"
 seta hud_panel_weapons_timeout_speed_out "0.75"
@@ -290,7 +290,7 @@ seta hud_panel_centerprint_fade_out "0.5"
 seta hud_panel_centerprint_fade_subsequent "1"
 seta hud_panel_centerprint_fade_subsequent_passone "3"
 seta hud_panel_centerprint_fade_subsequent_passone_minalpha "0.5"
-seta hud_panel_centerprint_fade_subsequent_passtwo "10" 
+seta hud_panel_centerprint_fade_subsequent_passtwo "10"
 seta hud_panel_centerprint_fade_subsequent_passtwo_minalpha "0.5"
 seta hud_panel_centerprint_fade_subsequent_minfontsize "0.75"
 seta hud_panel_centerprint_fade_minfontsize "0"
index 57053411d74d9e91fabc67c42a294b6f6574ad39..acf3ad921e84dd874a96f9b8bd6ca8d4253679ee 100644 (file)
@@ -20,9 +20,9 @@ seta hud_progressbar_health_color "0.6 0 0"
 seta hud_progressbar_armor_color "0 0.6 0"
 seta hud_progressbar_fuel_color "0.6 0.6 0"
 seta hud_progressbar_nexball_color "0.7 0.1 0"
-seta hud_progressbar_speed_color "1 0.75 0" 
-seta hud_progressbar_acceleration_color "0.5 0.75 1" 
-seta hud_progressbar_acceleration_neg_color "0.125 0.25 0.5" 
+seta hud_progressbar_speed_color "1 0.75 0"
+seta hud_progressbar_acceleration_color "0.5 0.75 1"
+seta hud_progressbar_acceleration_neg_color "0.125 0.25 0.5"
 
 seta _hud_panelorder "15 0 11 8 5 6 14 9 13 7 2 3 1 10 12 4 16 "
 
@@ -54,7 +54,7 @@ seta hud_panel_weapons_ammo_alpha "1"
 seta hud_panel_weapons_aspect "2"
 seta hud_panel_weapons_timeout "0"
 seta hud_panel_weapons_timeout_effect "0"
-seta hud_panel_weapons_timeout_fadebgmin "0" 
+seta hud_panel_weapons_timeout_fadebgmin "0"
 seta hud_panel_weapons_timeout_fadefgmin "0"
 seta hud_panel_weapons_timeout_speed_in "0.25"
 seta hud_panel_weapons_timeout_speed_out "0.75"
@@ -290,7 +290,7 @@ seta hud_panel_centerprint_fade_out "0.5"
 seta hud_panel_centerprint_fade_subsequent "1"
 seta hud_panel_centerprint_fade_subsequent_passone "3"
 seta hud_panel_centerprint_fade_subsequent_passone_minalpha "0.5"
-seta hud_panel_centerprint_fade_subsequent_passtwo "10" 
+seta hud_panel_centerprint_fade_subsequent_passtwo "10"
 seta hud_panel_centerprint_fade_subsequent_passtwo_minalpha "0.5"
 seta hud_panel_centerprint_fade_subsequent_minfontsize "0.75"
 seta hud_panel_centerprint_fade_minfontsize "0"
index fbeba74f053aa97e6b9924550b615fb5d642cf67..3f6d65fa73b44eb2796da16279f4e9d697ca72db 100644 (file)
@@ -1,12 +1,12 @@
 //     small   big     dark    bright  -red    +red    -green  +green  -blue   +blue                                   higher
 //     1       2       3       4       5       6       7       8       9       0                                       Page ^
-//     
+//
 //     spawn   ^       remove  static  style   style   style   style   style   style                                   lower
 //     Q       W       E       R       T       Y       U       I       O       P                                       Page v
-//     
+//
 //     <       v       >       style   style   style   style   style   style           save                    north
 //     A       S       D       F       G       H       J       K       L               ENTER                   ^
-//     
+//
 //                     copy    paste                           fine    coarse                          west    south   east
 //     Z       X       C       V       B       N       M       ,       .                               <       v       >
 
index 4499ef722bb146c090feda5b0c35f6b64554987c..c12d910526d645a2e4d0daf91b1d615e3e470791 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-06-04 18:02-0400\n"
+"POT-Creation-Date: 2013-08-24 21:59-0400\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"
@@ -1396,7 +1396,7 @@ msgid "HUD settings"
 msgstr ""
 
 #: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:180
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:184
+#: 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
@@ -1859,168 +1859,168 @@ msgstr ""
 msgid "Master:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:35
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:33
 msgid "Music:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:45
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:41
 msgid "VOL^Ambient:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:54
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:48
 msgid "Info:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:63
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:55
 msgid "Items:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:72
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:62
 msgid "Pain:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:81
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:69
 msgid "Player:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:90
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:76
 msgid "Shots:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:99
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:83
 msgid "Voice:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:109
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:91
 msgid "Weapons:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:117
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:97
 msgid "New style sound attenuation"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:119
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:99
 msgid "Mute sounds when not active"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:122
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:176
+#: 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:124
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:104
 msgid "8 kHz"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:125
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:105
 msgid "11.025 kHz"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:126
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:106
 msgid "16 kHz"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:127
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:107
 msgid "22.05 kHz"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:128
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:108
 msgid "24 kHz"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:129
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:109
 msgid "32 kHz"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:130
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:110
 msgid "44.1 kHz"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:131
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:111
 msgid "48 kHz"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:134
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:114
 msgid "Channels:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:136
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:116
 msgid "Mono"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:137
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:117
 msgid "Stereo"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:138
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:118
 msgid "2.1"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:139
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:119
 msgid "4"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:140
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:120
 msgid "5"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:141
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:121
 msgid "5.1"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:142
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:122
 msgid "6.1"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:143
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:123
 msgid "7.1"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:146
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:126
 msgid "Swap Stereo"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:148
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:128
 msgid "Headphone friendly mode"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:152
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:132
 msgid "Hit indication sound"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:154
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:134
 msgid "Chat message sound"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:156
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:136
 msgid "Menu sounds"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:159
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:139
 msgid "Time announcer:"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:161
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:141
 msgid "WRN^Disabled"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:162
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:142
 msgid "1 minute"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:163
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:143
 msgid "5 minutes"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:164
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:144
 msgid "WRN^Both"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:171
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:151
 msgid "Automatic taunts"
 msgstr ""
 
-#: qcsrc/menu/xonotic/dialog_settings_audio.c:181
+#: qcsrc/menu/xonotic/dialog_settings_audio.c:161
 msgid "Debug info about sounds"
 msgstr ""
 
@@ -2902,20 +2902,35 @@ msgstr ""
 msgid "<AUTHOR>"
 msgstr ""
 
-#: qcsrc/menu/xonotic/skinlist.c:166 qcsrc/common/mapinfo.qc:1103
+#: qcsrc/menu/xonotic/skinlist.c:166 qcsrc/common/mapinfo.qc:1104
 #, c-format
 msgid "%s: %s"
 msgstr ""
 
-#: qcsrc/menu/xonotic/slider_decibels.c:62
+#: qcsrc/menu/xonotic/slider_decibels.c:77
 msgid "VOL^MAX"
 msgstr ""
 
-#: qcsrc/menu/xonotic/slider_decibels.c:64
+#: qcsrc/menu/xonotic/slider_decibels.c:79
 msgid "VOL^OFF"
 msgstr ""
 
-#: qcsrc/menu/xonotic/slider_decibels.c:65
+#: 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 ""
@@ -3378,1696 +3393,1731 @@ msgstr ""
 
 #: qcsrc/common/notifications.qh:266
 #, c-format
-msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s\n"
+msgid "^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s\n"
 msgstr ""
 
 #: qcsrc/common/notifications.qh:267
 #, c-format
-msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s\n"
+msgid "^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s\n"
 msgstr ""
 
 #: qcsrc/common/notifications.qh:268
 #, c-format
-msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s\n"
+msgid "^BG%s%s^K1 was slimed by ^BG%s^K1%s%s\n"
 msgstr ""
 
 #: qcsrc/common/notifications.qh:269
 #, c-format
+msgid "^BG%s%s^K1 was preserved by ^BG%s^K1%s%s\n"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:270
+#, c-format
 msgid "^BG%s%s^K1 was telefragged by ^BG%s^K1%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:269
+#: qcsrc/common/notifications.qh:270
 #, c-format
 msgid "^BG%s%s^K1 tried to occupy ^BG%s^K1's teleport destination space%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:270
+#: qcsrc/common/notifications.qh:271
 #, c-format
 msgid "^BG%s%s^K1 died in an accident with ^BG%s^K1%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:271
+#: qcsrc/common/notifications.qh:272
 #, c-format
 msgid ""
 "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Bumblebee exploded%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:272
+#: qcsrc/common/notifications.qh:273
 #, c-format
 msgid "^BG%s%s^K1 saw the pretty lights of ^BG%s^K1's Bumblebee gun%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:273
+#: qcsrc/common/notifications.qh:274
 #, c-format
 msgid "^BG%s%s^K1 was crushed by ^BG%s^K1%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:274
+#: qcsrc/common/notifications.qh:275
 #, c-format
 msgid "^BG%s%s^K1 was cluster bombed by ^BG%s^K1's Raptor%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:275
+#: qcsrc/common/notifications.qh:276
 #, c-format
 msgid "^BG%s%s^K1 couldn't resist ^BG%s^K1's purple blobs%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:276
+#: qcsrc/common/notifications.qh:277
 #, c-format
 msgid ""
 "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Raptor exploded%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:277
+#: qcsrc/common/notifications.qh:278
 #, c-format
 msgid ""
 "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Spiderbot exploded%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:278
+#: qcsrc/common/notifications.qh:279
 #, c-format
 msgid "^BG%s%s^K1 got shredded by ^BG%s^K1's Spiderbot%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:279
+#: qcsrc/common/notifications.qh:280
 #, c-format
 msgid "^BG%s%s^K1 was blasted to bits by ^BG%s^K1's Spiderbot%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:280
+#: qcsrc/common/notifications.qh:281
 #, c-format
 msgid "^BG%s%s^K1 got caught in the blast when ^BG%s^K1's Racer exploded%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:281
+#: qcsrc/common/notifications.qh:282
 #, c-format
 msgid "^BG%s%s^K1 was bolted down by ^BG%s^K1's Racer%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:282
+#: qcsrc/common/notifications.qh:283
 #, c-format
 msgid "^BG%s%s^K1 couldn't find shelter from ^BG%s^K1's Racer%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:283
+#: qcsrc/common/notifications.qh:284
 #, c-format
 msgid "^BG%s%s^K1 was thrown into a world of hurt by ^BG%s^K1%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:284
+#: qcsrc/common/notifications.qh:285
 #, c-format
 msgid "^BG%s^K1 was moved into the %s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:285
+#: qcsrc/common/notifications.qh:286
 #, c-format
 msgid "^BG%s^K1 became enemies with the Lord of Teamplay%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:286
+#: qcsrc/common/notifications.qh:287
 #, c-format
 msgid "^BG%s^K1 thought they found a nice camping ground%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:287
+#: qcsrc/common/notifications.qh:288
 #, c-format
 msgid "^BG%s^K1 unfairly eliminated themself%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:288
+#: qcsrc/common/notifications.qh:289
 #, c-format
 msgid "^BG%s^K1 %s^K1%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:289
+#: qcsrc/common/notifications.qh:290
 #, c-format
 msgid "^BG%s^K1 couldn't catch their breath%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:289
+#: qcsrc/common/notifications.qh:290
 #, c-format
 msgid "^BG%s^K1 was in the water for too long%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:290
+#: qcsrc/common/notifications.qh:291
 #, c-format
 msgid "^BG%s^K1 hit the ground with a crunch%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:290
+#: qcsrc/common/notifications.qh:291
 #, c-format
 msgid "^BG%s^K1 hit the ground with a bit too much force%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:291
+#: qcsrc/common/notifications.qh:292
 #, c-format
 msgid "^BG%s^K1 became a bit too crispy%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:291
+#: qcsrc/common/notifications.qh:292
 #, c-format
 msgid "^BG%s^K1 felt a little hot%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:292
+#: qcsrc/common/notifications.qh:293
 #, c-format
 msgid "^BG%s^K1 died%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:293
+#: qcsrc/common/notifications.qh:294
 #, c-format
 msgid "^BG%s^K1 turned into hot slag%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:293
+#: qcsrc/common/notifications.qh:294
 #, c-format
 msgid "^BG%s^K1 found a hot place%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:294
+#: qcsrc/common/notifications.qh:295
+#, c-format
+msgid "^BG%s^K1 mastered the art of self-nading%s%s\n"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:296
 #, c-format
 msgid "^BG%s^K1 died%s%s. What's the point of living without ammo?\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:294
+#: qcsrc/common/notifications.qh:296
 #, c-format
 msgid "^BG%s^K1 ran out of ammo%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:295
+#: qcsrc/common/notifications.qh:297
 #, c-format
 msgid "^BG%s^K1 rotted away%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:296
+#: qcsrc/common/notifications.qh:298
 #, c-format
 msgid "^BG%s^K1 became a shooting star%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:297
+#: qcsrc/common/notifications.qh:299
 #, c-format
 msgid "^BG%s^K1 was slimed%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:298
+#: qcsrc/common/notifications.qh:300
 #, c-format
 msgid "^BG%s^K1 couldn't take it anymore%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:299
+#: qcsrc/common/notifications.qh:301
 #, c-format
 msgid "^BG%s^K1 is now preserved for centuries to come%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:300
+#: qcsrc/common/notifications.qh:302
 #, c-format
 msgid "^BG%s^K1 switched to the %s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:301
+#: qcsrc/common/notifications.qh:303
 #, c-format
 msgid "^BG%s^K1 died in an accident%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:302
+#: qcsrc/common/notifications.qh:304
 #, c-format
 msgid "^BG%s^K1 ran into a turret%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:303
+#: qcsrc/common/notifications.qh:305
 #, c-format
 msgid "^BG%s^K1 was blasted away by an eWheel turret%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:304
+#: qcsrc/common/notifications.qh:306
 #, c-format
 msgid "^BG%s^K1 got caught up in the FLAC turret fire%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:305
+#: qcsrc/common/notifications.qh:307
 #, c-format
 msgid "^BG%s^K1 was blasted away by a Hellion turret%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:306
+#: qcsrc/common/notifications.qh:308
 #, c-format
 msgid "^BG%s^K1 could not hide from the Hunter turret%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:307
+#: qcsrc/common/notifications.qh:309
 #, c-format
 msgid "^BG%s^K1 was riddled full of holes by a Machinegun turret%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:308
+#: qcsrc/common/notifications.qh:310
 #, c-format
 msgid "^BG%s^K1 got turned into smoldering gibs by an MLRS turret%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:309
+#: qcsrc/common/notifications.qh:311
 #, c-format
 msgid "^BG%s^K1 was phased out by a turret%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:310
+#: qcsrc/common/notifications.qh:312
 #, c-format
 msgid "^BG%s^K1 got served some superheated plasma from a turret%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:311
+#: qcsrc/common/notifications.qh:313
 #, c-format
 msgid "^BG%s^K1 was electrocuted by a Tesla turret%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:312
+#: qcsrc/common/notifications.qh:314
 #, c-format
 msgid "^BG%s^K1 got served a lead enrichment by a Walker turret%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:313
+#: qcsrc/common/notifications.qh:315
 #, c-format
 msgid "^BG%s^K1 was impaled by a Walker turret%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:314
+#: qcsrc/common/notifications.qh:316
 #, c-format
 msgid "^BG%s^K1 was blasted away by a Walker turret%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:315
+#: qcsrc/common/notifications.qh:317
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Bumblebee explosion%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:316
+#: qcsrc/common/notifications.qh:318
 #, c-format
 msgid "^BG%s^K1 was crushed by a vehicle%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:317
+#: qcsrc/common/notifications.qh:319
 #, c-format
 msgid "^BG%s^K1 was caught in a Raptor cluster bomb%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:318
+#: qcsrc/common/notifications.qh:320
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Raptor explosion%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:319
+#: qcsrc/common/notifications.qh:321
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Spiderbot explosion%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:320
+#: qcsrc/common/notifications.qh:322
 #, c-format
 msgid "^BG%s^K1 was blasted to bits by a Spiderbot rocket%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:321
+#: qcsrc/common/notifications.qh:323
 #, c-format
 msgid "^BG%s^K1 got caught in the blast of a Racer explosion%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:322
+#: qcsrc/common/notifications.qh:324
 #, c-format
 msgid "^BG%s^K1 couldn't find shelter from a Racer rocket%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:323
+#: qcsrc/common/notifications.qh:325
 #, c-format
 msgid "^BG%s^K1 was in the wrong place%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:324
+#: qcsrc/common/notifications.qh:326
 #, c-format
 msgid "^BG%s^K1 was betrayed by ^BG%s^K1%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:325
+#: qcsrc/common/notifications.qh:327
 #, c-format
 msgid "^BG%s^K1 was frozen by ^BG%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:326
+#: qcsrc/common/notifications.qh:328
 #, c-format
 msgid "^BG%s^K3 was revived by ^BG%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:327
+#: qcsrc/common/notifications.qh:329
+#, c-format
+msgid "^BG%s^K3 was revived by falling\n"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:330
 #, c-format
 msgid "^BG%s^K3 was automatically revived after %s second(s)\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:328
+#: qcsrc/common/notifications.qh:331
 msgid "^TC^TT^BG team wins the round\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:329
+#: qcsrc/common/notifications.qh:332
 #, c-format
 msgid "^BG%s^BG wins the round\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:330
+#: qcsrc/common/notifications.qh:333
 msgid "^BGRound tied\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:331
+#: qcsrc/common/notifications.qh:334
 msgid "^BGRound over, there's no winner\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:332
+#: qcsrc/common/notifications.qh:335
 #, c-format
 msgid "^BG%s^K1 froze themself\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:333
+#: qcsrc/common/notifications.qh:336
 #, c-format
 msgid "^BGGodmode saved you %s units of damage, cheater!\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:334
+#: qcsrc/common/notifications.qh:337
 #, c-format
 msgid "^BGYou do not have the ^F1%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:335
+#: qcsrc/common/notifications.qh:338
 #, c-format
 msgid "^BGYou dropped the ^F1%s^BG%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:336
+#: qcsrc/common/notifications.qh:339
 #, c-format
 msgid "^BGYou got the ^F1%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:337
+#: qcsrc/common/notifications.qh:340
 #, c-format
 msgid "^BGYou don't have enough ammo for the ^F1%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:338
+#: qcsrc/common/notifications.qh:341
 #, c-format
 msgid "^F1%s %s^BG is unable to fire, but its ^F1%s^BG can\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:339
+#: qcsrc/common/notifications.qh:342
 #, c-format
 msgid "^F1%s^BG is ^F4not available^BG on this map\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:340
+#: qcsrc/common/notifications.qh:343
 #, c-format
 msgid "^BG%s^F3 connected%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:341
+#: qcsrc/common/notifications.qh:344
 #, c-format
-msgid "^BG%s^F3 connected and joined the ^TC^TT\n"
+msgid "^BG%s^F3 connected and joined the ^TC^TT team\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:342
+#: qcsrc/common/notifications.qh:345
 #, c-format
 msgid "^BG%s^F3 is now playing\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:343
+#: qcsrc/common/notifications.qh:346
 #, c-format
 msgid "^BG%s^BG has dropped the ball!\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:344
+#: qcsrc/common/notifications.qh:347
 #, c-format
 msgid "^BG%s^BG has picked up the ball!\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:345
+#: qcsrc/common/notifications.qh:348
 #, c-format
 msgid "^BG%s^BG captured the keys for the ^TC^TT team\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:346
+#: qcsrc/common/notifications.qh:349
 #, c-format
 msgid "^BG%s^BG dropped the ^TC^TT Key\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:347
+#: qcsrc/common/notifications.qh:350
 #, c-format
 msgid "^BG%s^BG lost the ^TC^TT Key\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:348
+#: qcsrc/common/notifications.qh:351
 #, c-format
 msgid "^BG%s^BG picked up the ^TC^TT Key\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:349
+#: qcsrc/common/notifications.qh:352
 #, c-format
 msgid "^BG%s^F3 forfeited\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:350
+#: qcsrc/common/notifications.qh:353
 #, c-format
 msgid "^BG%s^F3 has no more lives left\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:351
+#: qcsrc/common/notifications.qh:354
 #, c-format
 msgid "^BG%s^K1 picked up Invisibility\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:352
+#: qcsrc/common/notifications.qh:355
 #, c-format
 msgid "^BG%s^K1 picked up Shield\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:353
+#: qcsrc/common/notifications.qh:356
 #, c-format
 msgid "^BG%s^K1 picked up Speed\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:354
+#: qcsrc/common/notifications.qh:357
 #, c-format
 msgid "^BG%s^K1 picked up Strength\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:355
+#: qcsrc/common/notifications.qh:358
 #, c-format
 msgid "^BG%s^F3 disconnected\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:356
+#: qcsrc/common/notifications.qh:359
 #, c-format
 msgid "^BG%s^F3 was kicked for idling\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:357
+#: qcsrc/common/notifications.qh:360
 msgid ""
 "^F2You were kicked from the server because you are a spectator and "
 "spectators aren't allowed at the moment.\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:358
+#: qcsrc/common/notifications.qh:361
 #, c-format
 msgid "^BG%s^F3 is now spectating\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:359
+#: qcsrc/common/notifications.qh:362
 #, c-format
 msgid "^BG%s^BG has abandoned the race\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:360
+#: qcsrc/common/notifications.qh:363
 #, c-format
 msgid "^BG%s^BG couldn't break their %s%s^BG place record of %s%s %s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:361
+#: qcsrc/common/notifications.qh:364
 #, c-format
 msgid "^BG%s^BG couldn't break the %s%s^BG place record of %s%s %s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:362
+#: qcsrc/common/notifications.qh:365
 #, c-format
 msgid "^BG%s^BG has finished the race\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:363
+#: qcsrc/common/notifications.qh:366
 #, c-format
 msgid "^BG%s^BG broke %s^BG's %s%s^BG place record with %s%s %s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:364
+#: qcsrc/common/notifications.qh:367
 #, c-format
 msgid "^BG%s^BG improved their %s%s^BG place record with %s%s %s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:365
+#: qcsrc/common/notifications.qh:368
 #, c-format
 msgid ""
 "^BG%s^BG scored a new record with ^F2%s^BG, but unfortunately lacks a UID "
 "and will be lost.\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:366
+#: qcsrc/common/notifications.qh:369
 #, c-format
 msgid "^BG%s^BG set the %s%s^BG place record with %s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:367
+#: qcsrc/common/notifications.qh:370
 msgid "^TC^TT ^BGteam scores!\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:368
+#: qcsrc/common/notifications.qh:371
 #, 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!\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:369
+#: qcsrc/common/notifications.qh:372
 #, c-format
 msgid "^BG%s^K1 picked up a Superweapon\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:370
+#: qcsrc/common/notifications.qh:373
 #, c-format
 msgid ""
 "^F4NOTE: ^BGThe server is running ^F1Xonotic %s (beta)^BG, you have "
 "^F2Xonotic %s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:371
+#: qcsrc/common/notifications.qh:374
 #, c-format
 msgid ""
 "^F4NOTE: ^BGThe server is running ^F1Xonotic %s^BG, you have ^F2Xonotic %s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:372
+#: qcsrc/common/notifications.qh:375
 #, 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!\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:373
+#: qcsrc/common/notifications.qh:376
 #, c-format
 msgid "^F3SVQC Build information: ^F4%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:374
+#: qcsrc/common/notifications.qh:377
 #, c-format
 msgid ""
 "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Accordeon%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:375
+#: qcsrc/common/notifications.qh:378
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Accordeon%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:376
+#: qcsrc/common/notifications.qh:379
 #, c-format
 msgid "^BG%s%s^K1 felt the strong pull of ^BG%s^K1's Crylink%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:377
+#: qcsrc/common/notifications.qh:380
 #, c-format
 msgid "^BG%s^K1 felt the strong pull of their Crylink%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:378
+#: qcsrc/common/notifications.qh:381
 #, c-format
 msgid "^BG%s%s^K1 was blasted by ^BG%s^K1's Electro bolt%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:379
+#: qcsrc/common/notifications.qh:382
 #, c-format
 msgid "^BG%s%s^K1 felt the electrifying air of ^BG%s^K1's Electro combo%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:380
+#: qcsrc/common/notifications.qh:383
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Electro plasma%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:381
+#: qcsrc/common/notifications.qh:384
 #, c-format
 msgid "^BG%s^K1 played with Electro plasma%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:382
+#: qcsrc/common/notifications.qh:385
 #, c-format
 msgid "^BG%s^K1 could not remember where they put their Electro plasma%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:383
+#: qcsrc/common/notifications.qh:386
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's fireball%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:384
+#: qcsrc/common/notifications.qh:387
 #, c-format
 msgid "^BG%s%s^K1 got burnt by ^BG%s^K1's firemine%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:385
+#: qcsrc/common/notifications.qh:388
 #, c-format
 msgid "^BG%s^K1 should have used a smaller gun%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:386
+#: qcsrc/common/notifications.qh:389
 #, c-format
 msgid "^BG%s^K1 forgot about their firemine%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:387
+#: qcsrc/common/notifications.qh:390
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by a burst of ^BG%s^K1's Hagar rockets%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:388
+#: qcsrc/common/notifications.qh:391
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Hagar rockets%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:389
+#: qcsrc/common/notifications.qh:392
 #, c-format
 msgid "^BG%s^K1 played with tiny Hagar rockets%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:390
+#: qcsrc/common/notifications.qh:393
 #, c-format
 msgid "^BG%s%s^K1 was cut down with ^BG%s^K1's HLAC%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:391
+#: qcsrc/common/notifications.qh:394
 #, c-format
 msgid "^BG%s^K1 got a little jumpy with their HLAC%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:392
+#: qcsrc/common/notifications.qh:395
 #, c-format
 msgid "^BG%s%s^K1 was caught in ^BG%s^K1's Hook gravity bomb%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:393
+#: qcsrc/common/notifications.qh:396
 #, c-format
 msgid ""
 "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Klein Bottle%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:394
+#: qcsrc/common/notifications.qh:397
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Klein Bottle%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:395
+#: qcsrc/common/notifications.qh:398
 #, c-format
 msgid "^BG%s%s^K1 was shot to death by ^BG%s^K1's Laser%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:396
+#: qcsrc/common/notifications.qh:399
 #, c-format
 msgid "^BG%s^K1 shot themself to hell with their Laser%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:397
+#: qcsrc/common/notifications.qh:400
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's mine%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:398
+#: qcsrc/common/notifications.qh:401
 #, c-format
 msgid "^BG%s^K1 forgot about their mine%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:399
+#: qcsrc/common/notifications.qh:402
 #, c-format
 msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Minstanex%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:400
+#: qcsrc/common/notifications.qh:403
 #, c-format
 msgid "^BG%s%s^K1 got too close to ^BG%s^K1's Mortar grenade%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:401
+#: qcsrc/common/notifications.qh:404
 #, c-format
 msgid "^BG%s%s^K1 ate ^BG%s^K1's Mortar grenade%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:402
+#: qcsrc/common/notifications.qh:405
 #, c-format
 msgid "^BG%s^K1 didn't see their own Mortar grenade%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:403
+#: qcsrc/common/notifications.qh:406
 #, c-format
 msgid "^BG%s^K1 blew themself up with their own Mortar%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:404
+#: qcsrc/common/notifications.qh:407
 #, c-format
 msgid "^BG%s%s^K1 has been vaporized by ^BG%s^K1's Nex%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:405
+#: qcsrc/common/notifications.qh:408
 #, c-format
 msgid "^BG%s%s^K1 was sniped with a Rifle by ^BG%s^K1%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:406
+#: qcsrc/common/notifications.qh:409
 #, c-format
 msgid "^BG%s%s^K1 died in ^BG%s^K1's Rifle bullet hail%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:407
+#: qcsrc/common/notifications.qh:410
 #, c-format
 msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle bullet hail%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:408
+#: qcsrc/common/notifications.qh:411
 #, c-format
 msgid "^BG%s%s^K1 failed to hide from ^BG%s^K1's Rifle%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:409
+#: qcsrc/common/notifications.qh:412
 #, c-format
 msgid "^BG%s%s^K1 ate ^BG%s^K1's rocket%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:410
+#: qcsrc/common/notifications.qh:413
 #, c-format
 msgid "^BG%s%s^K1 got too close ^BG%s^K1's rocket%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:411
+#: qcsrc/common/notifications.qh:414
 #, c-format
 msgid "^BG%s^K1 blew themself up with their Rocketlauncher%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:412
+#: qcsrc/common/notifications.qh:415
 #, c-format
 msgid "^BG%s%s^K1 was pummeled by ^BG%s^K1's Seeker rockets%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:413
+#: qcsrc/common/notifications.qh:416
 #, c-format
 msgid "^BG%s%s^K1 was tagged by ^BG%s^K1's Seeker%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:414
+#: qcsrc/common/notifications.qh:417
 #, c-format
 msgid "^BG%s^K1 played with tiny Seeker rockets%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:415
+#: qcsrc/common/notifications.qh:418
 #, c-format
 msgid "^BG%s%s^K1 was gunned down by ^BG%s^K1's Shotgun%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:416
+#: qcsrc/common/notifications.qh:419
 #, c-format
 msgid "^BG%s%s^K1 slapped ^BG%s^K1 around a bit with a large Shotgun%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:417
+#: qcsrc/common/notifications.qh:420
 #, c-format
 msgid "^BG%s^K1 is now thinking with portals%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:418
+#: qcsrc/common/notifications.qh:421
 #, c-format
 msgid "^BG%s%s^K1 died of ^BG%s^K1's great playing on the @!#%%'n Tuba%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:419
+#: qcsrc/common/notifications.qh:422
 #, c-format
 msgid "^BG%s^K1 hurt their own ears with the @!#%%'n Tuba%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:420
+#: qcsrc/common/notifications.qh:423
 #, c-format
 msgid "^BG%s%s^K1 was sniped by ^BG%s^K1's Machine Gun%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:421
+#: qcsrc/common/notifications.qh:424
 #, c-format
 msgid "^BG%s%s^K1 was riddled full of holes by ^BG%s^K1's Machine Gun%s%s\n"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:433
+#: qcsrc/common/notifications.qh:436
 msgid "^BGYou are attacking!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:434
+#: qcsrc/common/notifications.qh:437
 msgid "^BGYou are defending!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:435
+#: qcsrc/common/notifications.qh:438
 msgid "^F4Begin!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:436
+#: qcsrc/common/notifications.qh:439
 msgid "^F4Game starts in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:437
+#: qcsrc/common/notifications.qh:440
 msgid "^F4Round starts in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:438
+#: qcsrc/common/notifications.qh:441
 msgid "^F4Round cannot start"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:439
+#: qcsrc/common/notifications.qh:442
 msgid "^BGRound tied"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:440
+#: qcsrc/common/notifications.qh:443
 msgid "^BGRound over, there's no winner"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:441
+#: qcsrc/common/notifications.qh:444
+msgid "^F2Don't camp!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:445
 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:442
+#: qcsrc/common/notifications.qh:446
 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:443
+#: qcsrc/common/notifications.qh:447
 msgid "^BGYou captured the ^TC^TT^BG flag!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:444
+#: qcsrc/common/notifications.qh:448
 #, c-format
 msgid "^BGToo many flag throws! Throwing disabled for %s."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:445
+#: qcsrc/common/notifications.qh:449
 #, c-format
 msgid "^BG%s^BG passed the ^TC^TT^BG flag to %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:446
+#: qcsrc/common/notifications.qh:450
 #, c-format
 msgid "^BGYou received the ^TC^TT^BG flag from %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:447
+#: qcsrc/common/notifications.qh:451
 #, c-format
 msgid "^BG%s^BG requests you to pass the flag%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:448
+#: qcsrc/common/notifications.qh:452
 #, c-format
 msgid "^BGRequesting %s^BG to pass you the flag"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:449
+#: qcsrc/common/notifications.qh:453
 #, c-format
 msgid "^BGYou passed the ^TC^TT^BG flag to %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:450
+#: qcsrc/common/notifications.qh:454
 msgid "^BGYou got the ^TC^TT^BG flag!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:451
+#: qcsrc/common/notifications.qh:455
 #, c-format
 msgid "^BGThe %senemy^BG got your flag! Retrieve it!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:452
+#: qcsrc/common/notifications.qh:456
 #, c-format
 msgid "^BGThe %senemy (^BG%s%s)^BG got your flag! Retrieve it!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:453
+#: qcsrc/common/notifications.qh:457
 #, c-format
 msgid "^BGYour %steam mate^BG got the flag! Protect them!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:454
+#: qcsrc/common/notifications.qh:458
 #, c-format
 msgid "^BGYour %steam mate (^BG%s%s)^BG got the flag! Protect them!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:455
+#: qcsrc/common/notifications.qh:459
 msgid "^BGYou returned the ^TC^TT^BG flag!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:456
+#: qcsrc/common/notifications.qh:460
 msgid "^BGStalemate! Enemies can now see you on radar!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:457
+#: qcsrc/common/notifications.qh:461
 msgid "^BGStalemate! Flag carriers can now be seen by enemies on radar!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:458
+#: qcsrc/common/notifications.qh:462
 #, c-format
 msgid "^K3%sYou fragged ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:458
+#: qcsrc/common/notifications.qh:462
 #, c-format
 msgid "^K3%sYou scored against ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:459
+#: qcsrc/common/notifications.qh:463
 #, c-format
 msgid "^K1%sYou were fragged by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:459
+#: qcsrc/common/notifications.qh:463
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:460
+#: qcsrc/common/notifications.qh:464
 #, c-format
 msgid "^K1%sYou were fragged by ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:460
+#: qcsrc/common/notifications.qh:464
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:461
+#: qcsrc/common/notifications.qh:465
 #, c-format
 msgid "^K3%sYou fragged ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:461
+#: qcsrc/common/notifications.qh:465
 #, c-format
 msgid "^K3%sYou scored against ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:462
+#: qcsrc/common/notifications.qh:466
 #, c-format
 msgid "^K1%sYou typefragged ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:462
+#: qcsrc/common/notifications.qh:466
 #, c-format
 msgid "^K1%sYou scored against ^BG%s^K1 while they were typing"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:463
+#: qcsrc/common/notifications.qh:467
 #, c-format
 msgid "^K1%sYou were typefragged by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:463
+#: qcsrc/common/notifications.qh:467
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^K1 while typing!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:464
+#: qcsrc/common/notifications.qh:468
 #, c-format
 msgid "^K1%sYou were typefragged by ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:464
+#: qcsrc/common/notifications.qh:468
 #, c-format
 msgid "^K1%sYou were scored against by ^BG%s^K1 while typing^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:465
+#: qcsrc/common/notifications.qh:469
 #, c-format
 msgid "^K1%sYou typefragged ^BG%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:465
+#: qcsrc/common/notifications.qh:469
 #, c-format
 msgid "^K1%sYou scored against ^BG%s^K1 while they were typing^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:466
+#: qcsrc/common/notifications.qh:470
+msgid "^BGPress ^F2DROPWEAPON^BG again to toss the nade!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:471
 #, c-format
 msgid ""
 "^BGYou have been moved into a different team\n"
 "You are now on: %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:467
+#: qcsrc/common/notifications.qh:472
 msgid "^K1Don't shoot your team mates!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:467
+#: qcsrc/common/notifications.qh:472
 msgid "^K1Don't go against your team mates!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:468
+#: qcsrc/common/notifications.qh:473
 msgid "^K1Die camper!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:468
+#: qcsrc/common/notifications.qh:473
 msgid "^K1Reconsider your tactics, camper!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:469
+#: qcsrc/common/notifications.qh:474
 msgid "^K1You unfairly eliminated yourself!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:470
+#: qcsrc/common/notifications.qh:475
 #, c-format
 msgid "^K1You were %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:471
+#: qcsrc/common/notifications.qh:476
 msgid "^K1You couldn't catch your breath!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:472
+#: qcsrc/common/notifications.qh:477
 msgid "^K1You hit the ground with a crunch!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:473
+#: qcsrc/common/notifications.qh:478
 msgid "^K1You got a little bit too crispy!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:473
+#: qcsrc/common/notifications.qh:478
 msgid "^K1You felt a little too hot!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:474
+#: qcsrc/common/notifications.qh:479
 msgid "^K1You killed your own dumb self!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:474
+#: qcsrc/common/notifications.qh:479
 msgid "^K1You need to be more careful!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:475
+#: qcsrc/common/notifications.qh:480
 msgid "^K1You couldn't stand the heat!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:476
+#: qcsrc/common/notifications.qh:481
+msgid "^K1You forgot to put the pin back in!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:481
+msgid "^K1Tastes like chicken!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:482
 msgid "^K1You were killed for running out of ammo..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:476
+#: qcsrc/common/notifications.qh:482
 msgid "^K1You are respawning for running out of ammo..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:477
+#: qcsrc/common/notifications.qh:483
 msgid "^K1You grew too old without taking your medicine"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:477
+#: qcsrc/common/notifications.qh:483
 msgid "^K1You need to preserve your health"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:478
+#: qcsrc/common/notifications.qh:484
 msgid "^K1You became a shooting star!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:479
+#: qcsrc/common/notifications.qh:485
 msgid "^K1You melted away in slime!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:480
+#: qcsrc/common/notifications.qh:486
 msgid "^K1You committed suicide!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:480
+#: qcsrc/common/notifications.qh:486
 msgid "^K1You ended it all!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:481
+#: qcsrc/common/notifications.qh:487
 msgid "^K1You got stuck in a swamp!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:482
+#: qcsrc/common/notifications.qh:488
 #, c-format
 msgid "^BGYou are now on: %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:483
+#: qcsrc/common/notifications.qh:489
 msgid "^K1You died in an accident!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:484
+#: qcsrc/common/notifications.qh:490
 msgid "^K1You were fragged by a turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:484
+#: qcsrc/common/notifications.qh:490
 msgid "^K1You had an unfortunate run in with a turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:485
+#: qcsrc/common/notifications.qh:491
 msgid "^K1You were fragged by an eWheel turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:485
+#: qcsrc/common/notifications.qh:491
 msgid "^K1You had an unfortunate run in with an eWheel turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:486
+#: qcsrc/common/notifications.qh:492
 msgid "^K1You were fragged by a Walker turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:486
+#: qcsrc/common/notifications.qh:492
 msgid "^K1You had an unfortunate run in with a Walker turret!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:487
+#: qcsrc/common/notifications.qh:493
 msgid "^K1You got caught in the blast of a Bumblebee explosion!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:488
+#: qcsrc/common/notifications.qh:494
 msgid "^K1You were crushed by a vehicle!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:489
+#: qcsrc/common/notifications.qh:495
 msgid "^K1You were caught in a Raptor cluster bomb!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:490
+#: qcsrc/common/notifications.qh:496
 msgid "^K1You got caught in the blast of a Raptor explosion!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:491
+#: qcsrc/common/notifications.qh:497
 msgid "^K1You got caught in the blast of a Spiderbot explosion!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:492
+#: qcsrc/common/notifications.qh:498
 msgid "^K1You were blasted to bits by a Spiderbot rocket!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:493
+#: qcsrc/common/notifications.qh:499
 msgid "^K1You got caught in the blast of a Racer explosion!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:494
+#: qcsrc/common/notifications.qh:500
 msgid "^K1You couldn't find shelter from a Racer rocket!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:495
+#: qcsrc/common/notifications.qh:501
 msgid "^K1Watch your step!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:496
+#: qcsrc/common/notifications.qh:502
 #, c-format
 msgid "^K1Moron! You fragged ^BG%s^K1, a team mate!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:496
+#: qcsrc/common/notifications.qh:502
 #, c-format
 msgid "^K1Moron! You went against ^BG%s^K1, a team mate!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:497
+#: qcsrc/common/notifications.qh:503
 #, c-format
 msgid "^K1You were fragged by ^BG%s^K1, a team mate"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:497
+#: qcsrc/common/notifications.qh:503
 #, c-format
 msgid "^K1You were scored against by ^BG%s^K1, a team mate"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:498
+#: qcsrc/common/notifications.qh:504
 msgid ""
 "^K1Stop idling!\n"
 "^BGDisconnecting in ^COUNT..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:499
+#: qcsrc/common/notifications.qh:505
 msgid "^F2You picked up some extra lives"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:500
+#: qcsrc/common/notifications.qh:506
 #, c-format
 msgid "^K3You froze ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:501
+#: qcsrc/common/notifications.qh:507
 #, c-format
 msgid "^K1You were frozen by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:502
+#: qcsrc/common/notifications.qh:508
 #, c-format
 msgid "^K3You revived ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:503
+#: qcsrc/common/notifications.qh:509
+msgid "^K3You revived yourself"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:510
 #, c-format
 msgid "^K3You were revived by ^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:504
+#: qcsrc/common/notifications.qh:511
 #, c-format
 msgid "^K3You were automatically revived after %s second(s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:505
+#: qcsrc/common/notifications.qh:512
 msgid "^TC^TT^BG team wins the round"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:506
+#: qcsrc/common/notifications.qh:513
 #, c-format
 msgid "^BG%s^BG wins the round"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:507
+#: qcsrc/common/notifications.qh:514
 msgid "^K1You froze yourself"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:508
+#: qcsrc/common/notifications.qh:515
 msgid "^K1Round already started, you spawn as frozen"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:509
+#: qcsrc/common/notifications.qh:516
 #, c-format
 msgid "^BGYou do not have the ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:510
+#: qcsrc/common/notifications.qh:517
 #, c-format
 msgid "^BGYou dropped the ^F1%s^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:511
+#: qcsrc/common/notifications.qh:518
 #, c-format
 msgid "^BGYou got the ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:512
+#: qcsrc/common/notifications.qh:519
 #, c-format
 msgid "^BGYou don't have enough ammo for the ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:513
+#: qcsrc/common/notifications.qh:520
 #, c-format
 msgid "^F1%s %s^BG is unable to fire, but its ^F1%s^BG can"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:514
+#: qcsrc/common/notifications.qh:521
 #, c-format
 msgid "^F1%s^BG is ^F4not available^BG on this map"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:515
+#: qcsrc/common/notifications.qh:522
 msgid ""
 "^K1No spawnpoints available!\n"
 "Hope your team can fix it..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:516
+#: qcsrc/common/notifications.qh:523
 msgid ""
 "^K1You may not join the game at this time.\n"
 "The player limit reached maximum capacity."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:517
+#: qcsrc/common/notifications.qh:524
 #, c-format
 msgid "^BG%s^BG has dropped the ball!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:518
+#: qcsrc/common/notifications.qh:525
 #, c-format
 msgid "^BG%s^BG has picked up the ball!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:519
+#: qcsrc/common/notifications.qh:526
 msgid "^BGKilling people while you don't have the ball gives no points!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:520
+#: qcsrc/common/notifications.qh:527
 msgid ""
 "^BGAll keys are in your team's hands!\n"
 "Help the key carriers to meet!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:521
+#: qcsrc/common/notifications.qh:528
 msgid ""
 "^BGAll keys are in ^TC^TT team^BG's hands!\n"
 "Interfere ^F4NOW^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:522
+#: qcsrc/common/notifications.qh:529
 msgid ""
 "^BGAll keys are in your team's hands!\n"
 "Meet the other key carriers ^F4NOW^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:523
+#: qcsrc/common/notifications.qh:530
 msgid "^F4Round will start in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:524
+#: qcsrc/common/notifications.qh:531
 msgid "^BGScanning frequency range..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:525
+#: qcsrc/common/notifications.qh:532
 msgid "^BGYou are starting with the ^TC^TT Key"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:526 qcsrc/common/notifications.qh:527
+#: qcsrc/common/notifications.qh:533 qcsrc/common/notifications.qh:534
 #, c-format
 msgid ""
 "^BGWaiting for players to join...\n"
 "Need active players for: %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:528
+#: qcsrc/common/notifications.qh:535
 #, c-format
 msgid "^BGWaiting for %s player(s) to join..."
 msgstr ""
 
-#: qcsrc/common/notifications.qh:529
-msgid "^F2Don't camp!"
-msgstr ""
-
-#: qcsrc/common/notifications.qh:530
+#: qcsrc/common/notifications.qh:536
 msgid "^F4^COUNT^BG left to find some ammo!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:531
+#: qcsrc/common/notifications.qh:537
 msgid "^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:531
+#: qcsrc/common/notifications.qh:537
 msgid "^BGGet some ammo! ^F4^COUNT^BG left!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:532
+#: qcsrc/common/notifications.qh:538
 #, c-format
 msgid "^F2Extra lives remaining: ^K1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:533
+#: qcsrc/common/notifications.qh:539
 msgid "^BGSecondary fire inflicts no damage!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:534
+#: qcsrc/common/notifications.qh:540
 #, c-format
 msgid "^BG%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:535
+#: qcsrc/common/notifications.qh:541
 #, c-format
 msgid ""
 "^F2^COUNT^BG until weapon change...\n"
 "Next weapon: ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:536
+#: qcsrc/common/notifications.qh:542
 #, c-format
 msgid "^F2Active weapon: ^F1%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:537
+#: qcsrc/common/notifications.qh:543
+msgid "^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"
+msgstr ""
+
+#: qcsrc/common/notifications.qh:544
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "Keep fragging until we have a winner!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:537
+#: qcsrc/common/notifications.qh:544
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "Keep scoring until we have a winner!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:538
+#: qcsrc/common/notifications.qh:545
 #, c-format
 msgid ""
 "^F2Now playing ^F4OVERTIME^F2!\n"
 "^BGAdded ^F4%s^BG to the game!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:539
+#: qcsrc/common/notifications.qh:546
 msgid "^F2Invisibility has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:540
+#: qcsrc/common/notifications.qh:547
 msgid "^F2Shield has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:541
+#: qcsrc/common/notifications.qh:548
 msgid "^F2Speed has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:542
+#: qcsrc/common/notifications.qh:549
 msgid "^F2Strength has worn off"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:543
+#: qcsrc/common/notifications.qh:550
 msgid "^F2You are invisible"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:544
+#: qcsrc/common/notifications.qh:551
 msgid "^F2Shield surrounds you"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:545
+#: qcsrc/common/notifications.qh:552
 msgid "^F2You are on speed"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:546
+#: qcsrc/common/notifications.qh:553
 msgid "^F2Strength infuses your weapons with devastating power"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:547
+#: qcsrc/common/notifications.qh:554
 msgid "^F2The race is over, finish your lap!"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:548
+#: qcsrc/common/notifications.qh:555
 msgid "^F2Superweapons have broken down"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:549
+#: qcsrc/common/notifications.qh:556
 msgid "^F2Superweapons have been lost"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:550
+#: qcsrc/common/notifications.qh:557
 msgid "^F2You now have a superweapon"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:551
+#: qcsrc/common/notifications.qh:558
 msgid "^K1Changing to ^TC^TT^K1 in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:552
+#: qcsrc/common/notifications.qh:559
 msgid "^K1Changing team in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:553
+#: qcsrc/common/notifications.qh:560
 msgid "^K1Spectating in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:554
+#: qcsrc/common/notifications.qh:561
 msgid "^K1Suicide in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:555
+#: qcsrc/common/notifications.qh:562
 msgid "^F4Timeout begins in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:556
+#: qcsrc/common/notifications.qh:563
 msgid "^F4Timeout ends in ^COUNT"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:788 qcsrc/common/notifications.qh:789
+#: qcsrc/common/notifications.qh:797 qcsrc/common/notifications.qh:798
 #, c-format
 msgid " (near %s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:796 qcsrc/common/notifications.qh:797
+#: qcsrc/common/notifications.qh:805 qcsrc/common/notifications.qh:806
 msgid "secondary"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:796 qcsrc/common/notifications.qh:797
+#: qcsrc/common/notifications.qh:805 qcsrc/common/notifications.qh:806
 msgid "primary"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:807
+#: qcsrc/common/notifications.qh:816
 #, c-format
 msgid " ^F1(Press %s)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:816
+#: qcsrc/common/notifications.qh:825
 #, c-format
 msgid " with %s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:825
+#: qcsrc/common/notifications.qh:834
 msgid "TRIPLE FRAG! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:825
+#: qcsrc/common/notifications.qh:834
 #, c-format
 msgid "%s^K1 made a TRIPLE FRAG! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:825
+#: qcsrc/common/notifications.qh:834
 #, c-format
 msgid "%s^K1 made a TRIPLE SCORE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:826
+#: qcsrc/common/notifications.qh:835
 msgid "RAGE! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:826
+#: qcsrc/common/notifications.qh:835
 #, c-format
 msgid "%s^K1 unlocked RAGE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:826
+#: qcsrc/common/notifications.qh:835
 #, c-format
 msgid "%s^K1 made FIVE SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:827
+#: qcsrc/common/notifications.qh:836
 msgid "MASSACRE! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:827
+#: qcsrc/common/notifications.qh:836
 #, c-format
 msgid "%s^K1 started a MASSACRE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:827
+#: qcsrc/common/notifications.qh:836
 #, c-format
 msgid "%s^K1 made TEN SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:828
+#: qcsrc/common/notifications.qh:837
 msgid "MAYHEM! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:828
+#: qcsrc/common/notifications.qh:837
 #, c-format
 msgid "%s^K1 executed MAYHEM! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:828
+#: qcsrc/common/notifications.qh:837
 #, c-format
 msgid "%s^K1 made FIFTEEN SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:829
+#: qcsrc/common/notifications.qh:838
 msgid "BERSERKER! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:829
+#: qcsrc/common/notifications.qh:838
 #, c-format
 msgid "%s^K1 is a BERSERKER! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:829
+#: qcsrc/common/notifications.qh:838
 #, c-format
 msgid "%s^K1 made TWENTY SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:830
+#: qcsrc/common/notifications.qh:839
 msgid "CARNAGE! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:830
+#: qcsrc/common/notifications.qh:839
 #, c-format
 msgid "%s^K1 inflicts CARNAGE! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:830
+#: qcsrc/common/notifications.qh:839
 #, c-format
 msgid "%s^K1 made TWENTY FIVE SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:831
+#: qcsrc/common/notifications.qh:840
 msgid "ARMAGEDDON! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:831
+#: qcsrc/common/notifications.qh:840
 #, c-format
 msgid "%s^K1 unleashes ARMAGEDDON! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:831
+#: qcsrc/common/notifications.qh:840
 #, c-format
 msgid "%s^K1 made THIRTY SCORES IN A ROW! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:837
+#: qcsrc/common/notifications.qh:846
 #, c-format
 msgid "%s(^F1Bot^BG)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:839
+#: qcsrc/common/notifications.qh:848
 #, c-format
 msgid "%s(Ping ^F1%d^BG)"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:845
+#: qcsrc/common/notifications.qh:854
 #, c-format
 msgid ""
 "\n"
 "(Health ^1%d^BG / Armor ^2%d^BG)%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:847
+#: qcsrc/common/notifications.qh:856
 #, c-format
 msgid ""
 "\n"
 "(^F4Dead^BG)%s"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:884 qcsrc/common/notifications.qh:897
+#: qcsrc/common/notifications.qh:893 qcsrc/common/notifications.qh:906
 #, c-format
 msgid "%d score spree! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:896
+#: qcsrc/common/notifications.qh:905
 #, c-format
 msgid "%d frag spree! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:909
+#: qcsrc/common/notifications.qh:918
 msgid "First blood! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:909
+#: qcsrc/common/notifications.qh:918
 msgid "First score! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:913
+#: qcsrc/common/notifications.qh:922
 msgid "First victim! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:913
+#: qcsrc/common/notifications.qh:922
 msgid "First casualty! "
 msgstr ""
 
-#: qcsrc/common/notifications.qh:954
+#: qcsrc/common/notifications.qh:963
 #, c-format
 msgid "%s^K1 has %d frags in a row! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:955
+#: qcsrc/common/notifications.qh:964
 #, c-format
 msgid "%s^K1 made %d scores in a row! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:973
+#: qcsrc/common/notifications.qh:982
 #, c-format
 msgid "%s^K1 drew first blood! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:974
+#: qcsrc/common/notifications.qh:983
 #, c-format
 msgid "%s^K1 got the first score! %s^BG"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:990
+#: qcsrc/common/notifications.qh:999
 #, c-format
 msgid ", ending their %d frag spree"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:991
+#: qcsrc/common/notifications.qh:1000
 #, c-format
 msgid ", ending their %d score spree"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1005
+#: qcsrc/common/notifications.qh:1014
 #, c-format
 msgid ", losing their %d frag spree"
 msgstr ""
 
-#: qcsrc/common/notifications.qh:1006
+#: qcsrc/common/notifications.qh:1015
 #, c-format
 msgid ", losing their %d score spree"
 msgstr ""
diff --git a/models/ok_nade_counter/ok_nade_counter.md3 b/models/ok_nade_counter/ok_nade_counter.md3
new file mode 100644 (file)
index 0000000..7bcd7ef
Binary files /dev/null and b/models/ok_nade_counter/ok_nade_counter.md3 differ
diff --git a/models/ok_nade_counter/ok_nade_counter.md3_0.skin b/models/ok_nade_counter/ok_nade_counter.md3_0.skin
new file mode 100644 (file)
index 0000000..f510486
--- /dev/null
@@ -0,0 +1 @@
+sprite,models/ok_nade_counter/ok_nade_counter_01
\ No newline at end of file
diff --git a/models/ok_nade_counter/ok_nade_counter.md3_1.skin b/models/ok_nade_counter/ok_nade_counter.md3_1.skin
new file mode 100644 (file)
index 0000000..c7bfc3b
--- /dev/null
@@ -0,0 +1 @@
+sprite,models/ok_nade_counter/ok_nade_counter_02
\ No newline at end of file
diff --git a/models/ok_nade_counter/ok_nade_counter.md3_2.skin b/models/ok_nade_counter/ok_nade_counter.md3_2.skin
new file mode 100644 (file)
index 0000000..ee84c4f
--- /dev/null
@@ -0,0 +1 @@
+sprite,models/ok_nade_counter/ok_nade_counter_03
\ No newline at end of file
diff --git a/models/ok_nade_counter/ok_nade_counter.md3_3.skin b/models/ok_nade_counter/ok_nade_counter.md3_3.skin
new file mode 100644 (file)
index 0000000..df0b108
--- /dev/null
@@ -0,0 +1 @@
+sprite,models/ok_nade_counter/ok_nade_counter_04
\ No newline at end of file
diff --git a/models/ok_nade_counter/ok_nade_counter.md3_4.skin b/models/ok_nade_counter/ok_nade_counter.md3_4.skin
new file mode 100644 (file)
index 0000000..d76d110
--- /dev/null
@@ -0,0 +1 @@
+sprite,models/ok_nade_counter/ok_nade_counter_05
\ No newline at end of file
diff --git a/models/ok_nade_counter/ok_nade_counter.md3_5.skin b/models/ok_nade_counter/ok_nade_counter.md3_5.skin
new file mode 100644 (file)
index 0000000..c25c2b5
--- /dev/null
@@ -0,0 +1 @@
+sprite,models/ok_nade_counter/ok_nade_counter_06
\ No newline at end of file
diff --git a/models/ok_nade_counter/ok_nade_counter.md3_6.skin b/models/ok_nade_counter/ok_nade_counter.md3_6.skin
new file mode 100644 (file)
index 0000000..df03930
--- /dev/null
@@ -0,0 +1 @@
+sprite,models/ok_nade_counter/ok_nade_counter_07
\ No newline at end of file
diff --git a/models/ok_nade_counter/ok_nade_counter.md3_7.skin b/models/ok_nade_counter/ok_nade_counter.md3_7.skin
new file mode 100644 (file)
index 0000000..3021e51
--- /dev/null
@@ -0,0 +1 @@
+sprite,models/ok_nade_counter/ok_nade_counter_08
\ No newline at end of file
diff --git a/models/ok_nade_counter/ok_nade_counter.md3_8.skin b/models/ok_nade_counter/ok_nade_counter.md3_8.skin
new file mode 100644 (file)
index 0000000..e3df814
--- /dev/null
@@ -0,0 +1 @@
+sprite,models/ok_nade_counter/ok_nade_counter_09
\ No newline at end of file
diff --git a/models/ok_nade_counter/ok_nade_counter.md3_9.skin b/models/ok_nade_counter/ok_nade_counter.md3_9.skin
new file mode 100644 (file)
index 0000000..1402b7a
--- /dev/null
@@ -0,0 +1 @@
+sprite,models/ok_nade_counter/ok_nade_counter_10
\ No newline at end of file
diff --git a/models/ok_nade_counter/ok_nade_counter_01.tga b/models/ok_nade_counter/ok_nade_counter_01.tga
new file mode 100644 (file)
index 0000000..c58a70d
Binary files /dev/null and b/models/ok_nade_counter/ok_nade_counter_01.tga differ
diff --git a/models/ok_nade_counter/ok_nade_counter_02.tga b/models/ok_nade_counter/ok_nade_counter_02.tga
new file mode 100644 (file)
index 0000000..3d91413
Binary files /dev/null and b/models/ok_nade_counter/ok_nade_counter_02.tga differ
diff --git a/models/ok_nade_counter/ok_nade_counter_03.tga b/models/ok_nade_counter/ok_nade_counter_03.tga
new file mode 100644 (file)
index 0000000..eddb7cb
Binary files /dev/null and b/models/ok_nade_counter/ok_nade_counter_03.tga differ
diff --git a/models/ok_nade_counter/ok_nade_counter_04.tga b/models/ok_nade_counter/ok_nade_counter_04.tga
new file mode 100644 (file)
index 0000000..7f14db6
Binary files /dev/null and b/models/ok_nade_counter/ok_nade_counter_04.tga differ
diff --git a/models/ok_nade_counter/ok_nade_counter_05.tga b/models/ok_nade_counter/ok_nade_counter_05.tga
new file mode 100644 (file)
index 0000000..a7cdf8c
Binary files /dev/null and b/models/ok_nade_counter/ok_nade_counter_05.tga differ
diff --git a/models/ok_nade_counter/ok_nade_counter_06.tga b/models/ok_nade_counter/ok_nade_counter_06.tga
new file mode 100644 (file)
index 0000000..150f061
Binary files /dev/null and b/models/ok_nade_counter/ok_nade_counter_06.tga differ
diff --git a/models/ok_nade_counter/ok_nade_counter_07.tga b/models/ok_nade_counter/ok_nade_counter_07.tga
new file mode 100644 (file)
index 0000000..36e5c3b
Binary files /dev/null and b/models/ok_nade_counter/ok_nade_counter_07.tga differ
diff --git a/models/ok_nade_counter/ok_nade_counter_08.tga b/models/ok_nade_counter/ok_nade_counter_08.tga
new file mode 100644 (file)
index 0000000..3f42394
Binary files /dev/null and b/models/ok_nade_counter/ok_nade_counter_08.tga differ
diff --git a/models/ok_nade_counter/ok_nade_counter_09.tga b/models/ok_nade_counter/ok_nade_counter_09.tga
new file mode 100644 (file)
index 0000000..31219ab
Binary files /dev/null and b/models/ok_nade_counter/ok_nade_counter_09.tga differ
diff --git a/mutators.cfg b/mutators.cfg
new file mode 100644 (file)
index 0000000..e88fbc0
--- /dev/null
@@ -0,0 +1,158 @@
+// =========================
+//  Config for all mutators
+// =========================
+
+
+// =========
+//  dodging
+// =========
+set g_dodging 0 "set to 1 to enable dodging in games"
+
+seta cl_dodging_timeout 0.2 "determines how long apart (in seconds) two taps on the same direction key are considered a dodge. use 0 to disable"
+
+set sv_dodging_wall_dodging 0 "set to 1 to allow dodging off walls. 0 to disable"
+set sv_dodging_delay 0.7 "determines how long a player has to wait to be able to dodge again after dodging"
+set sv_dodging_up_speed 200 "the jump velocity of the dodge"
+set sv_dodging_horiz_speed 400 "the horizontal velocity of the dodge"
+set sv_dodging_horiz_speed_frozen 200 "the horizontal velocity of the dodge while frozen"
+set sv_dodging_ramp_time 0.1 "a ramp so that the horizontal part of the dodge is added smoothly (seconds)"
+set sv_dodging_height_threshold 10 "the maximum height above ground where to allow dodging"
+set sv_dodging_wall_distance_threshold 10 "the maximum distance from a wall that still allows dodging"
+set sv_dodging_sound 1 "if 1 dodging makes a sound. if 0 dodging is silent"
+set sv_dodging_frozen 0 "allow dodging while frozen"
+
+
+// ===========
+//  minstagib
+// ===========
+set g_minstagib 0 "enable minstagib"
+set g_minstagib_extralives 1 "how many extra lives you will get per powerup"
+set g_minstagib_ammo_start 10 "starting ammo"
+set g_minstagib_ammo_drop 5 "how much ammo you'll get for weapons or cells"
+set g_minstagib_invis_alpha 0.15
+set g_minstagib_speed_highspeed 1.5 "speed-multiplier that applies while you carry the invincibility powerup"
+
+
+// =========
+//  vampire
+// =========
+set g_vampire 0 "set to 1 to enable the vampire mode, where the damage done to your opponent gets added to your own health"
+
+
+// =========
+//  sandbox
+// =========
+set g_sandbox 0 "allow players to spawn and edit objects around the map"
+set g_sandbox_info 1 "print object information to the server. 1 prints info about spawned / removed objects, 2 also prints info about edited objects"
+set g_sandbox_readonly 0 "when this mode is active, players cannot modify objects or use any sandbox commands"
+set g_sandbox_storage_name default "name of the selected storage to use"
+set g_sandbox_storage_autosave 5 "storage is automatically saved every specified number of seconds"
+set g_sandbox_storage_autoload 1 "if a storage file exists for the given map, automatically load it at startup"
+set g_sandbox_editor_flood 1 "players must wait this many seconds between spawning objects"
+set g_sandbox_editor_maxobjects 1000 "maximum number of objects that may exist at a time"
+set g_sandbox_editor_free 1 "0 = players can only copy or edit their own objects, 1 = players can copy but not edit other objects, 2 = players can copy and edit all object"
+set g_sandbox_editor_distance_spawn 200 "distance at which objects spawn in front of the player"
+set g_sandbox_editor_distance_edit 300 "distance at which players can edit or remove objects they are looking at"
+set g_sandbox_object_scale_min 0.1 "minimum scale that objects can be set to"
+set g_sandbox_object_scale_max 2 "maximum scale that objects can be set to"
+set g_sandbox_object_material_velocity_min 100 "velocity objects must have while colliding for material effects to be applied"
+set g_sandbox_object_material_velocity_factor 0.002 "velocity range which decides the intensity of material effects"
+set cl_sandbox_clipboard ""
+
+
+// ========================
+//  invincible projectiles
+// ========================
+set g_invincible_projectiles 0 "set to 1 to disable any damage to projectiles in all balance configs, regardless of g_projectiles_damage"
+
+
+// ===============
+//  rocket flying
+// ===============
+set g_rocket_flying 0 "set to 1 to enable rocket flying in all balance configs"
+
+
+// =====================
+//  spawn near teammate
+// =====================
+set g_spawn_near_teammate 0 "if set, players prefer spawns near a team mate"
+set g_spawn_near_teammate_distance 640 "max distance to consider a spawn to be near a team mate"
+
+
+// ========================
+//  NIX (No Items Xonotic)
+// ========================
+// at each time, everyone uses the same weapon,
+// and in regular intervals, this weapon is cycled
+set g_nix 0 "No Items Xonotic - instead of pickup items, everyone plays with the same weapon. After some time, a countdown will start, after which everyone will switch to another weapon, and so on"
+set g_nix_with_laser 0 "always carry the laser as an additional weapon in NIX"
+set g_nix_with_healtharmor 0 "when 1, health and armor still show up in NIX"
+set g_nix_with_powerups 0 "when 1, powerups still show up in NIX"
+
+
+// ================
+//  physical items
+// ================
+set g_physical_items 0 "1 uses ODE physics for dropped weapons, 2 for all items, requires physics_ode to be enabled"
+set g_physical_items_damageforcescale 3 "how affected physical weapons are by damage"
+set g_physical_items_reset 1 "return map items to their original lotation after being picked up"
+
+
+// ===============
+//  touch explode
+// ===============
+set g_touchexplode 0 "touching other players causes an explosion"
+set g_touchexplode_radius 50
+set g_touchexplode_damage 10
+set g_touchexplode_edgedamage 0
+set g_touchexplode_force 150
+
+
+// ================
+//  super spectate
+// ================
+set g_superspectate 0 "server side, allows extended spectator functions through the cmd interface. followpowerup, followstrength, followstshield or followfc [red|blue] will transfer spectation to the relevent player, if any"
+
+
+// ==================
+//  melee only arena
+// ==================
+set g_melee_only 0 "enable melee only arena"
+
+
+// ================
+//  random gravity
+// ================
+set g_random_gravity 0 "enable random gravity mutator"
+set g_random_gravity_delay 3 "delay between gravity changes"
+set g_random_gravity_negative_chance 0.5 "chance of gravity being a negative value"
+set g_random_gravity_min -2000 "minimum gravity"
+set g_random_gravity_max 2000 "maximum gravity"
+set g_random_gravity_positive 1000 "positive gravity multiplier"
+set g_random_gravity_negative 1000 "negative gravity multiplier"
+
+
+// =======
+//  nades
+// =======
+set g_nades 0 "enable off-hand grenades"
+set g_nades_spawn 1 "give nades right away when player spawns rather than delaying entire refire"
+set g_nades_nade_lifetime 3.5
+set g_nades_nade_minforce 400
+set g_nades_nade_maxforce 2000
+set g_nades_nade_health 25
+set g_nades_nade_refire 6
+set g_nades_nade_damage 225
+set g_nades_nade_edgedamage 90
+set g_nades_nade_radius 300
+set g_nades_nade_force 650
+set g_nades_nade_newton_style 0
+
+
+// ============
+//  camp check
+// ============
+set g_campcheck 0 "damages campers every few seconds"
+set g_campcheck_interval 10
+set g_campcheck_damage 100
+set g_campcheck_distance 1800
index e2a3ef648087b64716ae7b5a7153a9663995ec67..54955371bfba11cc8e98fdb77a26e14fdb4c3d46 100644 (file)
@@ -1,29 +1,28 @@
 g_mod_physics Xonotic
 // current Xonotic physics
 
-sv_gravity 800
+sv_gravity 700
 sv_maxspeed 360
 sv_maxairspeed 360
 
 sv_stopspeed 100
 sv_accelerate 15
 sv_airaccelerate 2
-sv_friction 8
+sv_friction 6
 edgefriction 1
-sv_stepheight 26
+sv_stepheight 31
 // Q1: 16+2
 // Nex: 32+2
-// we try: 24+2
+// Xon 0.7: 24+2
+// Samual: 31 (just below 32, keeping things smooth without allowing 32qu steps)
 
-// actually, what we want is 266.6666 for 180bpm
-// but 260 takes same amount of frames and is nicer to mappers
 // jump height == sv_jumpvelocity^2 / (2*sv_gravity)
-// in this case: 42.25 qu
+// in this case: 42.87 qu
 // player: 24+45 qu
-// total: 111.25qu
+// total: 111.87qu
 // this is smaller than 112 qu, so a 112 qu high corridor (7 of 8 grid units in
 // the 16 grid, and the 8th unit used for wall/floor) just lets a player jump!
-sv_jumpvelocity 260
+sv_jumpvelocity 245
 sv_wateraccelerate -1
 sv_waterfriction -1
 sv_airaccel_sideways_friction 0
@@ -31,13 +30,13 @@ sv_airaccel_qw -0.8
 sv_airaccel_qw_stretchfactor 2
 
 sv_airstopaccelerate 3
-sv_airstrafeaccelerate 24
+sv_airstrafeaccelerate 18
 sv_maxairstrafespeed 100
 sv_airstrafeaccel_qw -0.95
-sv_aircontrol 125
-sv_aircontrol_penalty 180
+sv_aircontrol 100
+sv_aircontrol_penalty 0
 sv_aircontrol_power 2
-sv_airspeedlimit_nonqw 800
+sv_airspeedlimit_nonqw 900
 sv_warsowbunny_turnaccel 0
 sv_warsowbunny_accel 0.1593
 sv_warsowbunny_topspeed 925
diff --git a/physicsX07.cfg b/physicsX07.cfg
new file mode 100644 (file)
index 0000000..e2a3ef6
--- /dev/null
@@ -0,0 +1,50 @@
+g_mod_physics Xonotic
+// current Xonotic physics
+
+sv_gravity 800
+sv_maxspeed 360
+sv_maxairspeed 360
+
+sv_stopspeed 100
+sv_accelerate 15
+sv_airaccelerate 2
+sv_friction 8
+edgefriction 1
+sv_stepheight 26
+// Q1: 16+2
+// Nex: 32+2
+// we try: 24+2
+
+// actually, what we want is 266.6666 for 180bpm
+// but 260 takes same amount of frames and is nicer to mappers
+// jump height == sv_jumpvelocity^2 / (2*sv_gravity)
+// in this case: 42.25 qu
+// player: 24+45 qu
+// total: 111.25qu
+// this is smaller than 112 qu, so a 112 qu high corridor (7 of 8 grid units in
+// the 16 grid, and the 8th unit used for wall/floor) just lets a player jump!
+sv_jumpvelocity 260
+sv_wateraccelerate -1
+sv_waterfriction -1
+sv_airaccel_sideways_friction 0
+sv_airaccel_qw -0.8
+sv_airaccel_qw_stretchfactor 2
+
+sv_airstopaccelerate 3
+sv_airstrafeaccelerate 24
+sv_maxairstrafespeed 100
+sv_airstrafeaccel_qw -0.95
+sv_aircontrol 125
+sv_aircontrol_penalty 180
+sv_aircontrol_power 2
+sv_airspeedlimit_nonqw 800
+sv_warsowbunny_turnaccel 0
+sv_warsowbunny_accel 0.1593
+sv_warsowbunny_topspeed 925
+sv_warsowbunny_backtosideratio 0.8
+sv_friction_on_land 0
+sv_doublejump 0
+sv_jumpspeedcap_min ""
+sv_jumpspeedcap_max ""
+sv_jumpspeedcap_max_disable_on_ramps 1
+g_teleport_maxspeed 0
diff --git a/physicsXSamual.cfg b/physicsXSamual.cfg
deleted file mode 100644 (file)
index 0f9f77a..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-g_mod_physics Xonotic
-// current Xonotic physics
-
-sv_gravity 700
-sv_maxspeed 360
-sv_maxairspeed 360
-
-sv_stopspeed 100
-sv_accelerate 15
-sv_airaccelerate 2
-sv_friction 6
-edgefriction 1
-sv_stepheight 34
-// Q1: 16+2
-// Nex: 32+2
-// we try: 24+2
-// samual: 32+2
-
-// jump height == sv_jumpvelocity^2 / (2*sv_gravity)
-// in this case: 42.87 qu
-// player: 24+45 qu
-// total: 111.87qu
-// this is smaller than 112 qu, so a 112 qu high corridor (7 of 8 grid units in
-// the 16 grid, and the 8th unit used for wall/floor) just lets a player jump!
-sv_jumpvelocity 245
-sv_wateraccelerate -1
-sv_waterfriction -1
-sv_airaccel_sideways_friction 0
-sv_airaccel_qw -0.8
-sv_airaccel_qw_stretchfactor 2
-
-sv_airstopaccelerate 3
-sv_airstrafeaccelerate 18
-sv_maxairstrafespeed 100
-sv_airstrafeaccel_qw -0.95
-sv_aircontrol 100
-sv_aircontrol_penalty 0
-sv_aircontrol_power 2
-sv_airspeedlimit_nonqw 900
-sv_warsowbunny_turnaccel 0
-sv_warsowbunny_accel 0.1593
-sv_warsowbunny_topspeed 925
-sv_warsowbunny_backtosideratio 0.8
-sv_friction_on_land 0
-sv_doublejump 0
-sv_jumpspeedcap_min ""
-sv_jumpspeedcap_max ""
-sv_jumpspeedcap_max_disable_on_ramps 1
-g_teleport_maxspeed 0
index 13e41a4167c531dcbba9387dfca2af50cb29ab2b..44f8236f2f55cb859b9a04e3b5eff1d58567c433 100644 (file)
@@ -483,7 +483,15 @@ void CSQC_UpdateView(float w, float h)
                if(spectatee_status >= 0 && (autocvar_cl_eventchase_death && is_dead) || intermission)
                {
                        // 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) + autocvar_cl_eventchase_viewoffset);
+                       vector current_view_origin = (csqcplayer ? csqcplayer.origin : pmove_org);
+
+                       // detect maximum viewoffset and use it
+                       if(autocvar_cl_eventchase_viewoffset)
+                       {
+                               WarpZone_TraceLine(current_view_origin, current_view_origin + autocvar_cl_eventchase_viewoffset + ('0 0 1' * autocvar_cl_eventchase_maxs_z), MOVE_WORLDONLY, self);
+                               if(trace_fraction == 1) { current_view_origin += autocvar_cl_eventchase_viewoffset; }
+                               else { current_view_origin_z += max(0, (trace_endpos_z - current_view_origin_z) - autocvar_cl_eventchase_maxs_z); }
+                       }
 
                        // We must enable chase_active to get a third person view (weapon viewmodel hidden and own player model showing).
                        // Ideally, there should be another way to enable third person cameras, such as through setproperty()
index 273f427e49d11b182662b0a9566c80734e1051f7..5444c8ab086193bad827851da43384766a1c5835 100644 (file)
@@ -4209,7 +4209,7 @@ void HUD_CenterPrint (void)
                        float r;
                        r = random();
                        if (r > 0.9)
-                               centerprint_generic(floor(r*1000), strcat(sprintf("^3Countdown message at time %s", seconds_tostring(time)), ", seconds left: %d"), 1, 10);
+                               centerprint_generic(floor(r*1000), strcat(sprintf("^3Countdown message at time %s", seconds_tostring(time)), ", seconds left: ^COUNT"), 1, 10);
                        else if (r > 0.8)
                                centerprint_generic(0, sprintf("^1Multiline message at time %s that\n^1lasts longer than normal", seconds_tostring(time)), 20, 0);
                        else
@@ -4593,7 +4593,7 @@ void HUD_Main (void)
                                hud_panel[panel_order[i]].update_time = time;
                }
        }
-       else if (hud_configure_prev && autocvar_hud_cursormode)
+       else if(hud_configure_prev && hud_configure_prev != -1 && autocvar_hud_cursormode)
                setcursormode(0);
 
        hud_configure_prev = autocvar__hud_configure;
index 09276650dda5974782bec2eb0f322601c3c263dc..de45141a136c1bb71aba06fafa4de21ad7fa027b 100644 (file)
@@ -101,6 +101,18 @@ void Projectile_Draw()
                        case PROJECTILE_GRENADE_BOUNCING:
                                rot = '0 -1000 0'; // sideways
                                break;
+                       case PROJECTILE_NADE_RED_BURN:
+                       case PROJECTILE_NADE_RED:
+                       case PROJECTILE_NADE_BLUE_BURN:
+                       case PROJECTILE_NADE_BLUE:
+                       case PROJECTILE_NADE_YELLOW_BURN:
+                       case PROJECTILE_NADE_YELLOW:
+                       case PROJECTILE_NADE_PINK_BURN:
+                       case PROJECTILE_NADE_PINK:
+                       case PROJECTILE_NADE_BURN:
+                       case PROJECTILE_NADE:
+                               rot = self.avelocity; 
+                               break;
                        case PROJECTILE_HOOKBOMB:
                                rot = '1000 0 0'; // forward
                                break;
@@ -124,6 +136,18 @@ void Projectile_Draw()
        trailorigin = self.origin;
        switch(self.cnt)
        {
+           case PROJECTILE_NADE_RED_BURN:
+               case PROJECTILE_NADE_RED:
+               case PROJECTILE_NADE_BLUE_BURN:
+               case PROJECTILE_NADE_BLUE:
+               case PROJECTILE_NADE_YELLOW_BURN:
+               case PROJECTILE_NADE_YELLOW:
+               case PROJECTILE_NADE_PINK_BURN:
+               case PROJECTILE_NADE_PINK:
+               case PROJECTILE_NADE_BURN:
+               case PROJECTILE_NADE:
+                       trailorigin += v_up * 4;
+                       break;
                case PROJECTILE_GRENADE:
                case PROJECTILE_GRENADE_BOUNCING:
                        trailorigin += v_right * 1 + v_forward * -10;
@@ -300,6 +324,17 @@ 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;
+                       case PROJECTILE_NADE_BLUE_BURN: setmodel(self, "models/weapons/v_ok_grenade.md3");self.traileffect = particleeffectnum("nade_blue_burn"); break;
+                       case PROJECTILE_NADE_YELLOW: setmodel(self, "models/weapons/v_ok_grenade.md3");self.traileffect = particleeffectnum("nade_yellow"); break;
+                       case PROJECTILE_NADE_YELLOW_BURN: setmodel(self, "models/weapons/v_ok_grenade.md3");self.traileffect = particleeffectnum("nade_yellow_burn"); break;
+                       case PROJECTILE_NADE_PINK: setmodel(self, "models/weapons/v_ok_grenade.md3");self.traileffect = particleeffectnum("nade_pink"); break;
+                       case PROJECTILE_NADE_PINK_BURN: setmodel(self, "models/weapons/v_ok_grenade.md3");self.traileffect = particleeffectnum("nade_pink_burn"); break;
+                       case PROJECTILE_NADE: setmodel(self, "models/weapons/v_ok_grenade.md3");self.traileffect = particleeffectnum("nade"); break;
+                       case PROJECTILE_NADE_BURN: setmodel(self, "models/weapons/v_ok_grenade.md3");self.traileffect = particleeffectnum("nade_burn"); break;
 
                        default:
                                error("Received invalid CSQC projectile, can't work with this!");
@@ -334,6 +369,17 @@ void Ent_Projectile()
                                self.mins = '-3 -3 -3';
                                self.maxs = '3 3 3';
                                break;
+                       case PROJECTILE_NADE_RED_BURN:
+                       case PROJECTILE_NADE_RED:
+                       case PROJECTILE_NADE_BLUE_BURN:
+                       case PROJECTILE_NADE_BLUE:
+                               self.mins = '-3 -3 -3';
+                               self.maxs = '3 3 3';
+                               self.move_movetype = MOVETYPE_BOUNCE;
+                               self.move_touch = func_null;
+                               self.scale = 1.5;
+                               self.avelocity = randomvec() * 720;
+                               break;
                        case PROJECTILE_GRENADE_BOUNCING:
                                self.mins = '-3 -3 -3';
                                self.maxs = '3 3 3';
@@ -342,6 +388,23 @@ void Ent_Projectile()
                                self.move_bounce_factor = g_balance_grenadelauncher_bouncefactor;
                                self.move_bounce_stopspeed = g_balance_grenadelauncher_bouncestop;
                                break;
+                       case PROJECTILE_NADE_RED_BURN:
+                       case PROJECTILE_NADE_RED:
+                       case PROJECTILE_NADE_BLUE_BURN:
+                       case PROJECTILE_NADE_BLUE:
+                       case PROJECTILE_NADE_YELLOW_BURN:
+                       case PROJECTILE_NADE_YELLOW:
+                       case PROJECTILE_NADE_PINK_BURN:
+                       case PROJECTILE_NADE_PINK:
+                       case PROJECTILE_NADE_BURN:
+                       case PROJECTILE_NADE:
+                               self.mins = '-16 -16 -16';
+                               self.maxs = '16 16 16';
+                               self.move_movetype = MOVETYPE_BOUNCE;
+                               self.move_touch = func_null;
+                               self.scale = 1.5;
+                               self.avelocity = randomvec() * 720;
+                               break;
                        case PROJECTILE_MINE:
                                self.mins = '-4 -4 -4';
                                self.maxs = '4 4 4';
@@ -460,6 +523,8 @@ 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");
        precache_sound("weapons/rocket_fly.wav");
index b399f3857c3454e3c16572d0aed19a7aea627801..1a70b341d3d8118aef7ecff219d5c8bb13e445d0 100644 (file)
@@ -355,6 +355,17 @@ float PROJECTILE_WAKICANNON     = 29;
 float PROJECTILE_BUMBLE_GUN     = 30;
 float PROJECTILE_BUMBLE_BEAM    = 31;
 
+float PROJECTILE_NADE_RED              = 50;
+float PROJECTILE_NADE_RED_BURN         = 51;
+float PROJECTILE_NADE_BLUE             = 52;
+float PROJECTILE_NADE_BLUE_BURN        = 53;
+float PROJECTILE_NADE_YELLOW           = 54;
+float PROJECTILE_NADE_YELLOW_BURN      = 55;
+float PROJECTILE_NADE_PINK             = 56;
+float PROJECTILE_NADE_PINK_BURN        = 57;
+float PROJECTILE_NADE                          = 58;
+float PROJECTILE_NADE_BURN                     = 59;
+
 float SPECIES_HUMAN        =  0;
 float SPECIES_ROBOT_SOLID  =  1;
 float SPECIES_ALIEN        =  2;
index f9a9ceba25b1e0df2da7e77db433f5982e644b99..48a269b1a3937271f6e4b10c297d20adac78f629 100644 (file)
@@ -15,6 +15,7 @@
        DEATHTYPE(DEATH_KILL,                   DEATH_SELF_SUICIDE,                 NO_MSG,                        NORMAL_POS) \
        DEATHTYPE(DEATH_LAVA,                   DEATH_SELF_LAVA,                    DEATH_MURDER_LAVA,             NORMAL_POS) \
        DEATHTYPE(DEATH_MIRRORDAMAGE,           DEATH_SELF_BETRAYAL,                NO_MSG,                        NORMAL_POS) \
+       DEATHTYPE(DEATH_NADE,                                   DEATH_SELF_NADE,                                        DEATH_MURDER_NADE,                         NORMAL_POS) \
        DEATHTYPE(DEATH_NOAMMO,                 DEATH_SELF_NOAMMO,                  NO_MSG,                        NORMAL_POS) \
        DEATHTYPE(DEATH_ROT,                    DEATH_SELF_ROT,                     NO_MSG,                        NORMAL_POS) \
        DEATHTYPE(DEATH_SHOOTING_STAR,          DEATH_SELF_SHOOTING_STAR,           DEATH_MURDER_SHOOTING_STAR,    NORMAL_POS) \
index 9bd8d5e32f4d3a8fd116054977b071aaf1ae3404..1ad03e59b64eaedf029269bdd3d6517f3eaaf1d0 100644 (file)
@@ -263,6 +263,7 @@ void Send_Notification_WOVA(
        MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_FALL,              3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_fall",          _("^BG%s%s^K1 was grounded by ^BG%s^K1%s%s\n"), "") \
        MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_FIRE,              3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_death",         _("^BG%s%s^K1 was burnt up into a crisp by ^BG%s^K1%s%s\n"), _("^BG%s%s^K1 felt a little hot from ^BG%s^K1's fire^K1%s%s\n")) \
        MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_LAVA,              3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_lava",          _("^BG%s%s^K1 was cooked by ^BG%s^K1%s%s\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_NADE,              3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_death",         _("^BG%s%s^K1 was blown up by ^BG%s^K1's Nade%s%s\n"), "") \
        MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_SHOOTING_STAR,     3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_shootingstar",  _("^BG%s%s^K1 was shot into space by ^BG%s^K1%s%s\n"), "") \
        MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_SLIME,             3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_slime",         _("^BG%s%s^K1 was slimed by ^BG%s^K1%s%s\n"), "") \
        MSG_INFO_NOTIF(1, INFO_DEATH_MURDER_SWAMP,             3, 2, "spree_inf s1 s2 s3loc spree_end", "s2 s1",  "notify_slime",         _("^BG%s%s^K1 was preserved by ^BG%s^K1%s%s\n"), "") \
@@ -291,6 +292,7 @@ void Send_Notification_WOVA(
        MSG_INFO_NOTIF(1, INFO_DEATH_SELF_FIRE,                2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 became a bit too crispy%s%s\n"), _("^BG%s^K1 felt a little hot%s%s\n")) \
        MSG_INFO_NOTIF(1, INFO_DEATH_SELF_GENERIC,             2, 1, "s1 s2loc spree_lost", "s1",       "notify_selfkill",      _("^BG%s^K1 died%s%s\n"), "") \
        MSG_INFO_NOTIF(1, INFO_DEATH_SELF_LAVA,                2, 1, "s1 s2loc spree_lost", "s1",       "notify_lava",          _("^BG%s^K1 turned into hot slag%s%s\n"), _("^BG%s^K1 found a hot place%s%s\n")) \
+       MSG_INFO_NOTIF(1, INFO_DEATH_SELF_NADE,                2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 mastered the art of self-nading%s%s\n"), "") \
        MSG_INFO_NOTIF(1, INFO_DEATH_SELF_NOAMMO,              2, 1, "s1 s2loc spree_lost", "s1",       "notify_outofammo",     _("^BG%s^K1 died%s%s. What's the point of living without ammo?\n"), _("^BG%s^K1 ran out of ammo%s%s\n")) \
        MSG_INFO_NOTIF(1, INFO_DEATH_SELF_ROT,                 2, 1, "s1 s2loc spree_lost", "s1",       "notify_death",         _("^BG%s^K1 rotted away%s%s\n"), "") \
        MSG_INFO_NOTIF(1, INFO_DEATH_SELF_SHOOTING_STAR,       2, 1, "s1 s2loc spree_lost", "s1",       "notify_shootingstar",  _("^BG%s^K1 became a shooting star%s%s\n"), "") \
@@ -324,6 +326,7 @@ void Send_Notification_WOVA(
        MULTITEAM_INFO(1, INFO_DEATH_TEAMKILL_, 4,             3, 1, "s1 s2 s3loc spree_end", "s2 s1",  "notify_teamkill_%s",   _("^BG%s^K1 was betrayed by ^BG%s^K1%s%s\n"), "") \
        MSG_INFO_NOTIF(1, INFO_FREEZETAG_FREEZE,               2, 0, "s1 s2", "",                       "",                     _("^BG%s^K1 was frozen by ^BG%s\n"), "") \
        MSG_INFO_NOTIF(1, INFO_FREEZETAG_REVIVED,              2, 0, "s1 s2", "",                       "",                     _("^BG%s^K3 was revived by ^BG%s\n"), "") \
+       MSG_INFO_NOTIF(1, INFO_FREEZETAG_REVIVED_FALL,         1, 0, "s1", "",                          "",                     _("^BG%s^K3 was revived by falling\n"), "") \
        MSG_INFO_NOTIF(1, INFO_FREEZETAG_AUTO_REVIVED,         1, 1, "s1 f1", "",                       "",                     _("^BG%s^K3 was automatically revived after %s second(s)\n"), "") \
        MULTITEAM_INFO(1, INFO_ROUND_TEAM_WIN_, 4,             0, 0, "", "",                            "",                     _("^TC^TT^BG team wins the round\n"), "") \
        MSG_INFO_NOTIF(1, INFO_ROUND_PLAYER_WIN,               1, 0, "s1", "",                          "",                     _("^BG%s^BG wins the round\n"), "") \
@@ -438,6 +441,7 @@ void Send_Notification_WOVA(
        MSG_CENTER_NOTIF(1, CENTER_COUNTDOWN_ROUNDSTOP,         0, 0, "",             CPID_ROUND,          "2 0", _("^F4Round cannot start"), "") \
        MSG_CENTER_NOTIF(1, CENTER_ROUND_TIED,                  0, 0, "",             CPID_ROUND,          "0 0", _("^BGRound tied"), "") \
        MSG_CENTER_NOTIF(1, CENTER_ROUND_OVER,                  0, 0, "",             CPID_ROUND,          "0 0", _("^BGRound over, there's no winner"), "") \
+       MSG_CENTER_NOTIF(1, CENTER_CAMPCHECK,                   0, 0, "",             CPID_CAMPCHECK,      "0 0", _("^F2Don't camp!"), "") \
        MSG_CENTER_NOTIF(1, CENTER_CTF_CAPTURESHIELD_FREE,      0, 0, "",             CPID_CTF_CAPSHIELD,  "0 0", _("^BGYou are now free.\n^BGFeel free to ^F2try to capture^BG the flag again\n^BGif you think you will succeed."), "") \
        MSG_CENTER_NOTIF(1, CENTER_CTF_CAPTURESHIELD_SHIELDED,  0, 0, "",             CPID_CTF_CAPSHIELD,  "0 0", _("^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."), "") \
        MULTITEAM_CENTER(1, CENTER_CTF_CAPTURE_, 2,             0, 0, "",             CPID_CTF_LOWPRIO,    "0 0", _("^BGYou captured the ^TC^TT^BG flag!"), "") \
@@ -463,6 +467,7 @@ void Send_Notification_WOVA(
        MSG_CENTER_NOTIF(1, CENTER_DEATH_MURDER_TYPEFRAGGED,          1, 1, "spree_cen s1",             NO_CPID, "0 0", _("^K1%sYou were typefragged by ^BG%s"), _("^K1%sYou were scored against by ^BG%s^K1 while typing!")) \
        MSG_CENTER_NOTIF(1, CENTER_DEATH_MURDER_TYPEFRAGGED_VERBOSE,  1, 4, "spree_cen s1 frag_stats",  NO_CPID, "0 0", _("^K1%sYou were typefragged by ^BG%s^BG%s"), _("^K1%sYou were scored against by ^BG%s^K1 while typing^BG%s")) \
        MSG_CENTER_NOTIF(1, CENTER_DEATH_MURDER_TYPEFRAG_VERBOSE,     1, 2, "spree_cen s1 frag_ping",   NO_CPID, "0 0", _("^K1%sYou typefragged ^BG%s^BG%s"), _("^K1%sYou scored against ^BG%s^K1 while they were typing^BG%s")) \
+       MSG_CENTER_NOTIF(1, CENTER_NADE_THROW,                          0, 0, "",             CPID_NADES,          "0 0", _("^BGPress ^F2DROPWEAPON^BG again to toss the nade!"), "") \
        MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_AUTOTEAMCHANGE,   0, 1, "death_team",   NO_CPID,             "0 0", _("^BGYou have been moved into a different team\nYou are now on: %s"), "") \
        MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_BETRAYAL,         0, 0, "",             NO_CPID,             "0 0", _("^K1Don't shoot your team mates!"), _("^K1Don't go against your team mates!")) \
        MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_CAMP,             0, 0, "",             NO_CPID,             "0 0", _("^K1Die camper!"), _("^K1Reconsider your tactics, camper!")) \
@@ -473,6 +478,7 @@ void Send_Notification_WOVA(
        MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_FIRE,             0, 0, "",             NO_CPID,             "0 0", _("^K1You got a little bit too crispy!"), _("^K1You felt a little too hot!")) \
        MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_GENERIC,          0, 0, "",             NO_CPID,             "0 0", _("^K1You killed your own dumb self!"), _("^K1You need to be more careful!")) \
        MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_LAVA,             0, 0, "",             NO_CPID,             "0 0", _("^K1You couldn't stand the heat!"), "") \
+       MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_NADE,                             0, 0, "",                         NO_CPID,                         "0 0", _("^K1You forgot to put the pin back in!"), _("^K1Tastes like chicken!")) \
        MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_NOAMMO,           0, 0, "",             NO_CPID,             "0 0", _("^K1You were killed for running out of ammo..."), _("^K1You are respawning for running out of ammo...")) \
        MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_ROT,              0, 0, "",             NO_CPID,             "0 0", _("^K1You grew too old without taking your medicine"), _("^K1You need to preserve your health")) \
        MSG_CENTER_NOTIF(1, CENTER_DEATH_SELF_SHOOTING_STAR,    0, 0, "",             NO_CPID,             "0 0", _("^K1You became a shooting star!"), "") \
@@ -500,6 +506,7 @@ void Send_Notification_WOVA(
        MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_FREEZE,            1, 0, "s1",           NO_CPID,             "0 0", _("^K3You froze ^BG%s"), "") \
        MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_FROZEN,            1, 0, "s1",           NO_CPID,             "0 0", _("^K1You were frozen by ^BG%s"), "") \
        MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_REVIVE,            1, 0, "s1",           NO_CPID,             "0 0", _("^K3You revived ^BG%s"), "") \
+       MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_REVIVE_FALL,       0, 0, "",             NO_CPID,             "0 0", _("^K3You revived yourself"), "") \
        MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_REVIVED,           1, 0, "s1",           NO_CPID,             "0 0", _("^K3You were revived by ^BG%s"), "") \
        MSG_CENTER_NOTIF(1, CENTER_FREEZETAG_AUTO_REVIVED,      0, 1, "f1",           NO_CPID,             "0 0", _("^K3You were automatically revived after %s second(s)"), "") \
        MULTITEAM_CENTER(1, CENTER_ROUND_TEAM_WIN_, 4,          0, 0, "",             CPID_ROUND,          "0 0", _("^TC^TT^BG team wins the round"), "") \
@@ -526,7 +533,6 @@ void Send_Notification_WOVA(
        MSG_CENTER_NOTIF(1, CENTER_KEYHUNT_WAIT,                0, 4, "missing_teams", CPID_KEYHUNT_OTHER,    "0 0", _("^BGWaiting for players to join...\nNeed active players for: %s"), "") \
        MSG_CENTER_NOTIF(1, CENTER_MISSING_TEAMS,               0, 4, "missing_teams", CPID_MISSING_TEAMS,    "-1 0", _("^BGWaiting for players to join...\nNeed active players for: %s"), "") \
        MSG_CENTER_NOTIF(1, CENTER_MISSING_PLAYERS,             0, 1, "f1",            CPID_MISSING_PLAYERS,  "-1 0", _("^BGWaiting for %s player(s) to join..."), "") \
-       MSG_CENTER_NOTIF(1, CENTER_LMS_CAMPCHECK,               0, 0, "",              CPID_LMS_CAMP,         "0 0", _("^F2Don't camp!"), "") \
        MSG_CENTER_NOTIF(1, CENTER_MINSTA_FINDAMMO,             0, 0, "",              CPID_MINSTA_FINDAMMO,  "1 9", _("^F4^COUNT^BG left to find some ammo!"), "") \
        MSG_CENTER_NOTIF(1, CENTER_MINSTA_FINDAMMO_FIRST,       0, 0, "",              CPID_MINSTA_FINDAMMO,  "1 10", _("^BGGet some ammo or you'll be dead in ^F4^COUNT^BG!"), _("^BGGet some ammo! ^F4^COUNT^BG left!")) \
        MSG_CENTER_NOTIF(1, CENTER_MINSTA_LIVES_REMAINING,      0, 1, "f1",            NO_CPID,                           "0 0", _("^F2Extra lives remaining: ^K1%s"), "") \
@@ -534,6 +540,7 @@ void Send_Notification_WOVA(
        MSG_CENTER_NOTIF(1, CENTER_MOTD,                        1, 0, "s1",            CPID_MOTD,             "-1 0", _("^BG%s"), "") \
        MSG_CENTER_NOTIF(1, CENTER_NIX_COUNTDOWN,               0, 2, "item_wepname",  CPID_NIX,              "1 f2", _("^F2^COUNT^BG until weapon change...\nNext weapon: ^F1%s"), "") \
        MSG_CENTER_NOTIF(1, CENTER_NIX_NEWWEAPON,               0, 1, "item_wepname",  CPID_NIX,              "0 0", _("^F2Active weapon: ^F1%s"), "") \
+       MSG_CENTER_NOTIF(1, CENTER_NADE,                                0, 0, "",              NO_CPID,                   "0 0", _("^BGPress ^F2DROPWEAPON^BG again to toss the grenade!"), "") \
        MSG_CENTER_NOTIF(1, CENTER_OVERTIME_FRAG,               0, 0, "",              CPID_OVERTIME,         "0 0", _("^F2Now playing ^F4OVERTIME^F2!\nKeep fragging until we have a winner!"), _("^F2Now playing ^F4OVERTIME^F2!\nKeep scoring until we have a winner!")) \
        MSG_CENTER_NOTIF(1, CENTER_OVERTIME_TIME,               0, 1, "f1time",        CPID_OVERTIME,         "0 0", _("^F2Now playing ^F4OVERTIME^F2!\n^BGAdded ^F4%s^BG to the game!"), "") \
        MSG_CENTER_NOTIF(1, CENTER_POWERDOWN_INVISIBILITY,      0, 0, "",              CPID_POWERUP,          "0 0", _("^F2Invisibility has worn off"), "") \
@@ -561,6 +568,7 @@ void Send_Notification_WOVA(
        MSG_MULTI_NOTIF(1, DEATH_MURDER_FALL,                    NO_MSG,        INFO_DEATH_MURDER_FALL,                    NO_MSG) \
        MSG_MULTI_NOTIF(1, DEATH_MURDER_FIRE,                    NO_MSG,        INFO_DEATH_MURDER_FIRE,                    NO_MSG) \
        MSG_MULTI_NOTIF(1, DEATH_MURDER_LAVA,                    NO_MSG,        INFO_DEATH_MURDER_LAVA,                    NO_MSG) \
+       MSG_MULTI_NOTIF(1, DEATH_MURDER_NADE,                    NO_MSG,        INFO_DEATH_MURDER_NADE,                   NO_MSG) \
        MSG_MULTI_NOTIF(1, DEATH_MURDER_SHOOTING_STAR,           NO_MSG,        INFO_DEATH_MURDER_SHOOTING_STAR,           NO_MSG) \
        MSG_MULTI_NOTIF(1, DEATH_MURDER_SLIME,                   NO_MSG,        INFO_DEATH_MURDER_SLIME,                   NO_MSG) \
        MSG_MULTI_NOTIF(1, DEATH_MURDER_SWAMP,                   NO_MSG,        INFO_DEATH_MURDER_SWAMP,                   NO_MSG) \
@@ -589,6 +597,7 @@ void Send_Notification_WOVA(
        MSG_MULTI_NOTIF(1, DEATH_SELF_FIRE,                      NO_MSG,        INFO_DEATH_SELF_FIRE,                      CENTER_DEATH_SELF_FIRE) \
        MSG_MULTI_NOTIF(1, DEATH_SELF_GENERIC,                   NO_MSG,        INFO_DEATH_SELF_GENERIC,                   CENTER_DEATH_SELF_GENERIC) \
        MSG_MULTI_NOTIF(1, DEATH_SELF_LAVA,                      NO_MSG,        INFO_DEATH_SELF_LAVA,                      CENTER_DEATH_SELF_LAVA) \
+       MSG_MULTI_NOTIF(1, DEATH_SELF_NADE,                                              NO_MSG,                INFO_DEATH_SELF_NADE,                                      CENTER_DEATH_SELF_NADE) \
        MSG_MULTI_NOTIF(1, DEATH_SELF_NOAMMO,                    NO_MSG,        INFO_DEATH_SELF_NOAMMO,                    CENTER_DEATH_SELF_NOAMMO) \
        MSG_MULTI_NOTIF(1, DEATH_SELF_ROT,                       NO_MSG,        INFO_DEATH_SELF_ROT,                       CENTER_DEATH_SELF_ROT) \
        MSG_MULTI_NOTIF(1, DEATH_SELF_SHOOTING_STAR,             NO_MSG,        INFO_DEATH_SELF_SHOOTING_STAR,             CENTER_DEATH_SELF_SHOOTING_STAR) \
index e9bd01cfa4d34fdacb55dc1c16cd1a92b94ef1cd..ad612f954f459ca0aaba9e2e553dbd72b8293122 100644 (file)
@@ -203,7 +203,7 @@ float compressShotOrigin(vector v);
 vector decompressShotOrigin(float f);
 
 #ifdef SVQC
-string rankings_reply, ladder_reply, lsmaps_reply, lsnewmaps_reply, maplist_reply; // cached replies
+string rankings_reply, ladder_reply, lsmaps_reply, maplist_reply; // cached replies
 string records_reply[10];
 #endif
 
index a76efb8e367840cc3737734a781c104556bbe935..78c196995d194a6060216c0843f1b31ca0ad6f22 100644 (file)
@@ -257,6 +257,19 @@ void m_keydown(float key, float ascii)
                return;
        if(!Menu_Active)
                return;
+
+       if(menuMouseMode)
+       if(key >= K_MOUSE1 && key <= K_MOUSE3)
+       {
+               // detect a click outside of the game window
+               vector p = getmousepos();
+               if(p_x < 0 || p_x > realconwidth || p_y < 0 || p_y > realconheight)
+               {
+                       ++mouseButtonsPressed;
+                       return;
+               }
+       }
+
        if(keyGrabber)
        {
                entity e;
index dead5a9d4b360d924a0642f4b21fe0161e734ccd..711d9143600eff8956d57084845fc784bd61b6a0 100644 (file)
@@ -139,7 +139,6 @@ float autocvar_g_balance_crylink_primary_joinexplode_edgedamage;
 float autocvar_g_balance_crylink_primary_joinexplode_force;
 float autocvar_g_balance_crylink_primary_joinexplode_radius;
 float autocvar_g_balance_crylink_primary_joinspread;
-float autocvar_g_balance_crylink_primary_jointime;
 float autocvar_g_balance_crylink_primary_linkexplode;
 float autocvar_g_balance_crylink_primary_middle_fadetime;
 float autocvar_g_balance_crylink_primary_middle_lifetime;
@@ -165,7 +164,6 @@ float autocvar_g_balance_crylink_secondary_joinexplode_edgedamage;
 float autocvar_g_balance_crylink_secondary_joinexplode_force;
 float autocvar_g_balance_crylink_secondary_joinexplode_radius;
 float autocvar_g_balance_crylink_secondary_joinspread;
-float autocvar_g_balance_crylink_secondary_jointime;
 float autocvar_g_balance_crylink_secondary_line_fadetime;
 float autocvar_g_balance_crylink_secondary_line_lifetime;
 float autocvar_g_balance_crylink_secondary_linkexplode;
@@ -817,6 +815,8 @@ string autocvar_g_forced_team_red;
 string autocvar_g_forced_team_yellow;
 float autocvar_g_freezetag_frozen_force;
 float autocvar_g_freezetag_frozen_maxtime;
+float autocvar_g_freezetag_revive_falldamage;
+float autocvar_g_freezetag_revive_falldamage_health;
 float autocvar_g_freezetag_point_leadlimit;
 float autocvar_g_freezetag_point_limit;
 float autocvar_g_freezetag_revive_extra_size;
@@ -865,10 +865,7 @@ float autocvar_g_keyhunt_point_leadlimit;
 #define autocvar_g_keyhunt_point_limit cvar("g_keyhunt_point_limit")
 float autocvar_g_keyhunt_teams;
 float autocvar_g_keyhunt_teams_override;
-float autocvar_g_lms_campcheck_damage;
-float autocvar_g_lms_campcheck_distance;
 float autocvar_g_lms_extra_lives;
-float autocvar_g_lms_campcheck_interval;
 float autocvar_g_lms_join_anytime;
 float autocvar_g_lms_last_join;
 #define autocvar_g_lms_lives_override cvar("g_lms_lives_override")
@@ -892,7 +889,6 @@ float autocvar_g_maxplayers;
 float autocvar_g_maxplayers_spectator_blocktime;
 float autocvar_g_maxpushtime;
 float autocvar_g_maxspeed;
-#define autocvar_g_midair cvar("g_midair")
 float autocvar_g_midair_shieldtime;
 #define autocvar_g_minstagib cvar("g_minstagib")
 float autocvar_g_minstagib_ammo_drop;
@@ -1110,11 +1106,13 @@ float autocvar_sv_defaultplayerskin;
 float autocvar_sv_dodging_delay;
 float autocvar_sv_dodging_height_threshold;
 float autocvar_sv_dodging_horiz_speed;
+float autocvar_sv_dodging_horiz_speed_frozen;
 float autocvar_sv_dodging_ramp_time;
 float autocvar_sv_dodging_sound;
 float autocvar_sv_dodging_up_speed;
 float autocvar_sv_dodging_wall_distance_threshold;
 float autocvar_sv_dodging_wall_dodging;
+float autocvar_sv_dodging_frozen;
 float autocvar_sv_doublejump;
 float autocvar_sv_eventlog;
 float autocvar_sv_eventlog_console;
@@ -1234,3 +1232,26 @@ float autocvar_g_touchexplode_radius;
 float autocvar_g_touchexplode_damage;
 float autocvar_g_touchexplode_edgedamage;
 float autocvar_g_touchexplode_force;
+#define autocvar_g_bloodloss cvar("g_bloodloss")
+float autocvar_g_random_gravity_negative_chance;
+float autocvar_g_random_gravity_min;
+float autocvar_g_random_gravity_max;
+float autocvar_g_random_gravity_positive;
+float autocvar_g_random_gravity_negative;
+float autocvar_g_random_gravity_delay;
+float autocvar_g_nades;
+float autocvar_g_nades_spawn;
+float autocvar_g_nades_nade_lifetime;
+float autocvar_g_nades_nade_minforce;
+float autocvar_g_nades_nade_maxforce;
+float autocvar_g_nades_nade_health;
+float autocvar_g_nades_nade_refire;
+float autocvar_g_nades_nade_damage;
+float autocvar_g_nades_nade_edgedamage;
+float autocvar_g_nades_nade_radius;
+float autocvar_g_nades_nade_force;
+float autocvar_g_nades_nade_newton_style;
+float autocvar_g_campcheck_damage;
+float autocvar_g_campcheck_distance;
+float autocvar_g_campcheck_interval;
+float autocvar_g_jump_grunt;
index a9a3ea9f62b29796504d03eb5167b7218c2d748c..5b889b8ca140f43f46f3633f3b5a924438b75788 100644 (file)
@@ -253,9 +253,6 @@ void havocbot_bunnyhop(vector dir)
        float maxspeed;
        vector gco, gno;
 
-       if(autocvar_g_midair)
-               return;
-
        // Don't jump when attacking
        if(self.aistatus & AI_STATUS_ATTACKING)
                return;
index 017999d761becfb892d56dc535ff8f2c43a9a148..c87eee433669cc01da6cd30de366ff459b0d42d7 100644 (file)
@@ -236,7 +236,7 @@ float CheatImpulse(float i)
                                        break;
                                }
                        }
-                       if(MoveToRandomMapLocation(self, DPCONTENTS_SOLID | DPCONTENTS_CORPSE | DPCONTENTS_PLAYERCLIP, DPCONTENTS_SLIME | DPCONTENTS_LAVA | DPCONTENTS_SKY | DPCONTENTS_BODY | DPCONTENTS_DONOTENTER, Q3SURFACEFLAG_SKY, ((gamestart_sv_cheats < 2) ? 100 : 100000), 1024, 256))
+                       if(MoveToRandomMapLocation(self, DPCONTENTS_SOLID | DPCONTENTS_CORPSE | DPCONTENTS_PLAYERCLIP, DPCONTENTS_SLIME | DPCONTENTS_LAVA | DPCONTENTS_SKY | DPCONTENTS_BODY | DPCONTENTS_DONOTENTER, Q3SURFACEFLAG_SKY, ((gamestart_sv_cheats < 2) ? 100 : 100000), 384, 384))
                        {
                                sprint(self, "Emergency teleport used random location\n");
                                self.angles_x = -self.angles_x;
index c687c4502c33ae7c7ec9c8c69fc95559f6d2a788..d7ca62ba01a800c4ee8f7ee848940649b84206a0 100644 (file)
@@ -1517,15 +1517,6 @@ void player_powerups (void)
        if(autocvar_g_fullbrightplayers)
                self.effects = self.effects | EF_FULLBRIGHT;
 
-       // midair gamemode: damage only while in the air
-       // if in midair mode, being on ground grants temporary invulnerability
-       // (this is so that multishot weapon don't clear the ground flag on the
-       // first damage in the frame, leaving the player vulnerable to the
-       // remaining hits in the same frame)
-       if (self.flags & FL_ONGROUND)
-       if (g_midair)
-               self.spawnshieldtime = max(self.spawnshieldtime, time + autocvar_g_midair_shieldtime);
-
        if (time >= game_starttime)
        if (time < self.spawnshieldtime)
                self.effects = self.effects | (EF_ADDITIVE | EF_FULLBRIGHT);
@@ -2355,8 +2346,6 @@ void PlayerPreThink (void)
                float do_crouch = self.BUTTON_CROUCH;
                if(self.hook.state)
                        do_crouch = 0;
-               if(self.health <= g_bloodloss)
-                       do_crouch = 1;
                if(self.vehicle)
                        do_crouch = 0;
                if(self.freezetag_frozen)
@@ -2388,15 +2377,6 @@ void PlayerPreThink (void)
                        }
                }
 
-               if(self.health <= g_bloodloss && self.deadflag == DEAD_NO)
-               {
-                       if(self.bloodloss_timer < time)
-                       {
-                               self.event_damage(self, self, 1, DEATH_ROT, self.origin, '0 0 0');
-                               self.bloodloss_timer = time + 0.5 + random() * 0.5;
-                       }
-               }
-
                FixPlayermodel();
 
                GrapplingHookFrame();
@@ -2424,9 +2404,6 @@ void PlayerPreThink (void)
 
                if(frametime)
                        player_anim();
-
-               if(g_nexball)
-                       nexball_setstatus();
                
                // secret status
                secrets_setstatus();
index 5ce7b7d475f4d6848442b8fa9761106e5927ed2c..a7051ff14c4b18da5e95a228fae1ccd4c64c44ff 100644 (file)
 .float wasFlying;
 .float spectatorspeed;
 
-.float multijump_count;
-.float multijump_ready;
-.float prevjumpbutton;
-
 /*
 =============
 PlayerJump
@@ -23,13 +19,16 @@ When you press the jump key
 */
 void PlayerJump (void)
 {
-       if(self.freezetag_frozen)
-               return; // no jumping in freezetag when frozen
+       float doublejump = FALSE;
 
-       float mjumpheight;
-       float doublejump;
+       player_multijump = doublejump;
+       if(MUTATOR_CALLHOOK(PlayerJump))
+               return;
+               
+       doublejump = player_multijump;
 
-       doublejump = FALSE;
+       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);
@@ -52,56 +51,6 @@ void PlayerJump (void)
                return;
        }
 
-       if (autocvar_g_multijump)
-       {
-               if (self.prevjumpbutton == FALSE && !(self.flags & FL_ONGROUND)) // jump button pressed this frame and we are in midair
-                       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(!doublejump && self.multijump_ready && self.multijump_count < autocvar_g_multijump && self.velocity_z > autocvar_g_multijump_speed)
-       {
-               // doublejump = FALSE; // checked above in the if
-               if (autocvar_g_multijump)
-               {
-                       if (autocvar_g_multijump_add == 0) // in this case we make the z velocity == jumpvelocity
-                       {
-                               if (self.velocity_z < mjumpheight)
-                               {
-                                       doublejump = TRUE;
-                                       self.velocity_z = 0;
-                               }
-                       }
-                       else
-                               doublejump = TRUE;
-
-                       if(doublejump)
-                       {
-                               if(self.movement_x != 0 || self.movement_y != 0) // don't remove all speed if player isnt pressing any movement keys
-                               {
-                                       float curspeed;
-                                       vector wishvel, wishdir;
-
-                                       curspeed = max(
-                                               vlen(vec2(self.velocity)), // current xy speed
-                                               vlen(vec2(antilag_takebackavgvelocity(self, max(self.lastteleporttime + sys_frametime, time - 0.25), time))) // average xy topspeed over the last 0.25 secs
-                                       );
-                                       makevectors(self.v_angle_y * '0 1 0');
-                                       wishvel = v_forward * self.movement_x + v_right * self.movement_y;
-                                       wishdir = normalize(wishvel);
-
-                                       self.velocity_x = wishdir_x * curspeed; // allow "dodging" at a multijump
-                                       self.velocity_y = wishdir_y * curspeed;
-                                       // keep velocity_z unchanged!
-                               }
-                               if (autocvar_g_multijump > 0)
-                                       self.multijump_count += 1;
-                       }
-               }
-               self.multijump_ready = FALSE; // require releasing and pressing the jump button again for the next jump
-       }
-
        if (!doublejump)
                if (!(self.flags & FL_ONGROUND))
                        return;
@@ -110,9 +59,6 @@ void PlayerJump (void)
                if (!(self.flags & FL_JUMPRELEASED))
                        return;
 
-       if(self.health <= g_bloodloss)
-               return;
-
        // sv_jumpspeedcap_min/sv_jumpspeedcap_max act as baseline
        // velocity bounds.  Final velocity is bound between (jumpheight *
        // min + jumpheight) and (jumpheight * max + jumpheight);
@@ -164,8 +110,8 @@ void PlayerJump (void)
        self.flags &~= FL_JUMPRELEASED;
 
        animdecide_setaction(self, ANIMACTION_JUMP, TRUE);
-
-       if(g_jump_grunt)
+       
+       if(autocvar_g_jump_grunt)
                PlayerSound(playersound_jump, CH_PLAYER, VOICETYPE_PLAYERSOUND);
 
        self.restart_jump = -1; // restart jump anim next time
@@ -201,14 +147,6 @@ void CheckWaterJump()
 }
 void CheckPlayerJump()
 {
-       if(self.flags & FL_ONGROUND)
-       {
-               if (autocvar_g_multijump > 0)
-                       self.multijump_count = 0;
-               else
-                       self.multijump_count = -2; // the cvar value for infinite jumps is -1, so this needs to be smaller
-       }
-
        if (self.BUTTON_JUMP)
                PlayerJump ();
        else
@@ -216,7 +154,6 @@ void CheckPlayerJump()
 
        if (self.waterlevel == WATERLEVEL_SWIMMING)
                CheckWaterJump ();
-       self.prevjumpbutton = self.BUTTON_JUMP;
 }
 
 float racecar_angle(float forward, float down)
index 68a2de343901fba60b3c926e7a9a42121cc68e69..fbe6d7aea9dbda56745613bc34d0944d39c1cdad 100644 (file)
@@ -262,22 +262,9 @@ void player_anim (void)
 
 void SpawnThrownWeapon (vector org, float w)
 {
-       if(g_pinata)
-       {
-               float j;
-               for(j = WEP_FIRST; j <= WEP_LAST; ++j)
-               {
-                       if(WEPSET_CONTAINS_EW(self, j))
-                               if(W_IsWeaponThrowable(j))
-                                       W_ThrowNewWeapon(self, j, FALSE, org, randomvec() * 175 + '0 0 325');
-               }
-       }
-       else
-       {
-               if(WEPSET_CONTAINS_EW(self, self.weapon))
-                       if(W_IsWeaponThrowable(self.weapon))
-                               W_ThrowNewWeapon(self, self.weapon, FALSE, org, randomvec() * 125 + '0 0 200');
-       }
+       if(WEPSET_CONTAINS_EW(self, self.weapon))
+               if(W_IsWeaponThrowable(self.weapon))
+                       W_ThrowNewWeapon(self, self.weapon, FALSE, org, randomvec() * 125 + '0 0 200');
 }
 
 void PlayerCorpseDamage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
@@ -498,9 +485,6 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, float deatht
        self.dmg_take = self.dmg_take + take;//max(take - 10, 0);
        self.dmg_inflictor = inflictor;
 
-       if(g_ca && self != attacker && IS_PLAYER(attacker))
-               PlayerTeamScore_Add(attacker, SP_SCORE, ST_SCORE, (damage - excess) * autocvar_g_ca_damage2score_multiplier);
-
        float abot, vbot, awep;
        abot = (IS_BOT_CLIENT(attacker));
        vbot = (IS_BOT_CLIENT(self));
index 26af874e2afdb88abe26f2532a55a89b79622969..81a4f5a7ef895e4a704b91b9a02ea9c0aad4436a 100644 (file)
@@ -233,7 +233,7 @@ void W_SetupShot_Dir_ProjectileSize_Range(entity ent, vector s_forward, vector m
 
        ent.dphitcontentsmask = oldsolid; // restore solid type (generally SOLID_SLIDEBOX)
 
-       if (!g_norecoil)
+       if (!autocvar_g_norecoil)
                ent.punchangle_x = recoil * -1;
 
        if (snd != "")
@@ -667,6 +667,9 @@ 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 && !WEPSET_CONTAINS_EW(cl, wpn) && !WEPSET_CONTAINS_AW(weaponsInMap, wpn))
+               complain = 0;
 
        if (wpn < WEP_FIRST || wpn > WEP_LAST)
        {
index 73bf0df4f7d279bb92709f1203a711c290831edf..80b1d23a442f00c4dc1fb418f653bf128401ee7e 100644 (file)
@@ -360,26 +360,6 @@ void CommonCommand_lsmaps(float request, entity caller)
        }
 }
 
-void CommonCommand_lsnewmaps(float request, entity caller)
-{
-       switch(request)
-       {
-               case CMD_REQUEST_COMMAND:
-               {
-                       print_to(caller, lsnewmaps_reply);
-                       return; // never fall through to usage
-               }
-                       
-               default:
-               case CMD_REQUEST_USAGE:
-               {
-                       print_to(caller, strcat("\nUsage:^3 ", GetCommandPrefix(caller), " lsnewmaps"));
-                       print_to(caller, "  No arguments required.");
-                       return;
-               }
-       }
-}
-
 void CommonCommand_printmaplist(float request, entity caller)
 {
        switch(request)
@@ -693,7 +673,6 @@ void CommonCommand_(float request, entity caller)
        COMMON_COMMAND("info", CommonCommand_info(request, caller, arguments), "Request for unique server information set up by admin") \
        COMMON_COMMAND("ladder", CommonCommand_ladder(request, caller), "Get information about top players if supported") \
        COMMON_COMMAND("lsmaps", CommonCommand_lsmaps(request, caller), "List maps which can be used with the current game mode") \
-       COMMON_COMMAND("lsnewmaps", CommonCommand_lsnewmaps(request, caller), "List maps which have no records or are seemingly unplayed yet") \
        COMMON_COMMAND("printmaplist", CommonCommand_printmaplist(request, caller), "Display full server maplist reply") \
        COMMON_COMMAND("rankings", CommonCommand_rankings(request, caller), "Print information about rankings") \
        COMMON_COMMAND("records", CommonCommand_records(request, caller), "List top 10 records for the current map") \
index 39206966cfee11bf0c8326ca76a6b138c0eebe4f..c566a9bad3a542bdef42ca77b7784fd7a211b486 100644 (file)
@@ -285,3 +285,58 @@ string getladder()
        else
                return strcat("Top ", ftos(LADDER_SIZE), " ladder rankings:\n", s);
 }
+
+string getmaplist()
+{
+       string maplist = "", col;
+       float i, argc;
+       
+       argc = tokenize_console(autocvar_g_maplist);
+       for(i = 0; i < argc; ++i)
+       {
+               if(MapInfo_CheckMap(argv(i)))
+               {
+                       if(mod(i, 2)) { col = "^2"; }
+                       else { col = "^3"; }
+                       maplist = sprintf("%s%s%s ", maplist, col, argv(i));
+               }
+       }
+
+       MapInfo_ClearTemps();
+       return sprintf(_("^7Maps in list: %s\n"), maplist);
+}
+
+       
+string getlsmaps()
+{
+       string lsmaps = "", col;
+       float i, newmaps;
+       
+       for(i = 0; i < MapInfo_count; ++i)
+       {
+               if((MapInfo_Get_ByID(i)) && !(MapInfo_Map_flags & MapInfo_ForbiddenFlags()))
+               {
+                       // todo: Check by play count of maps for other game types?
+                       if(
+                               (g_race && !stof(db_get(ServerProgsDB, strcat(MapInfo_Map_bspname, RACE_RECORD, "time"))))
+                               ||
+                               (g_cts && !stof(db_get(ServerProgsDB, strcat(MapInfo_Map_bspname, CTS_RECORD, "time"))))
+                       )
+                       {
+                               newmaps = TRUE;
+                               if(mod(i, 2)) { col = "^4*"; }
+                               else { col = "^5*"; }
+                       }
+                       else
+                       {
+                               if(mod(i, 2)) { col = "^2"; }
+                               else { col = "^3"; }
+                       }
+
+                       lsmaps = sprintf("%s%s%s ", lsmaps, col, MapInfo_Map_bspname);
+               }
+       }
+
+       MapInfo_ClearTemps();
+       return sprintf(_("^7Maps available%s: %s\n"), (newmaps ? _(" (New maps have asterisks marked in blue)") : ""), lsmaps);
+}
index af941a79d2397038236e479b3cab7b4d34c87525..77da27219241db4d587b9304d9fc605aece1ca8e 100644 (file)
@@ -14,4 +14,6 @@ float top_scores[LADDER_SIZE];
 // allow functions to be used in other code like g_world.qc and race.qc
 string getrecords(float page);
 string getrankings(void);
-string getladder(void);
\ No newline at end of file
+string getladder(void);
+string getmaplist(void);
+string getlsmaps(void);
index ba9b48a294a7ea5f9bc4bbda9eff993f0c8168b2..b336d3ee26da2ee8758b89a0d1eeb464b7f43217 100644 (file)
@@ -736,7 +736,12 @@ void GameCommand_gametype(float request, float argc)
                                        MapInfo_SwitchGameType(t);
                                        MapInfo_FilterGametype(MapInfo_CurrentGametype(), MapInfo_CurrentFeatures(), MapInfo_RequiredFlags(), MapInfo_ForbiddenFlags(), 0);
                                        if(MapInfo_count > 0)
+                                       {
+                                               // update lsmaps in case the gametype changed, this way people can easily list maps for it
+                                               if(lsmaps_reply != "") { strunzone(lsmaps_reply); }
+                                               lsmaps_reply = strzone(getlsmaps());
                                                bprint("Game type successfully switched to ", s, "\n");
+                                       }
                                        else
                                        {
                                                bprint("Cannot use this game type: no map for it found\n");
index 7d3585725d2544ecd4dab000d907c51cbab6354e..74d4345b824529469b3855d185a249e14221ccd4 100644 (file)
@@ -16,7 +16,7 @@ noref float require_spawnfunc_prefix; // if this float exists, only functions wi
 
 // Globals
 
-float g_cloaked, g_footsteps, g_jump_grunt, g_grappling_hook, g_midair, g_minstagib, g_pinata, g_norecoil, g_bloodloss;
+float g_cloaked, g_footsteps, g_grappling_hook, g_minstagib;
 float g_warmup_limit;
 float g_warmup_allguns;
 float g_warmup_allow_timeout;
@@ -549,7 +549,6 @@ float client_cefc_accumulatortime;
 
 .float spectatee_status;
 .float zoomstate;
-.float bloodloss_timer;
 .float restriction;
 
 .entity clientdata;
index da013fc75d0eebe984ebc4a39717489d47d72f45..bd4fe2b8b07a143b9c9009b70b8ab36283e1bacb 100644 (file)
@@ -626,13 +626,10 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float
                                                {
                                                        attacker.dmg_team = attacker.dmg_team + damage;
                                                        complainteamdamage = attacker.dmg_team - autocvar_g_teamdamage_threshold;
-                                                       if(complainteamdamage > 0 && !g_ca) // FIXME why is g_ca ruled out here? Why not just g_mirrordamage 0 on CA servers?
+                                                       if(complainteamdamage > 0)
                                                                mirrordamage = autocvar_g_mirrordamage * complainteamdamage;
                                                        mirrorforce = autocvar_g_mirrordamage * vlen(force);
-                                                       if(g_ca)
-                                                               damage = 0;
-                                                       else
-                                                               damage = autocvar_g_friendlyfire * damage;
+                                                       damage = autocvar_g_friendlyfire * damage;
                                                        // mirrordamage will be used LATER
 
                                                        if(autocvar_g_mirrordamage_virtual)
@@ -708,7 +705,7 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float
 
                if (targ == attacker)
                {
-                       if(g_ca || (g_cts && !autocvar_g_cts_selfdamage))
+                       if(g_cts && !autocvar_g_cts_selfdamage)
                                damage = 0;
                        else
                                damage = damage * autocvar_g_balance_selfdamagepercent; // Partial damage if the attacker hits himself
@@ -772,7 +769,7 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float
        // apply push
        if (self.damageforcescale)
        if (vlen(force))
-       if (!IS_PLAYER(self) || time >= self.spawnshieldtime || g_midair)
+       if (!IS_PLAYER(self) || time >= self.spawnshieldtime)
        {
                vector farce = damage_explosion_calcpush(self.damageforcescale * force, self.velocity, autocvar_g_balance_damagepush_speedfactor);
                if(self.movetype == MOVETYPE_PHYSICS)
index 7146c2fc727129e107d708a58e5fb905f1180a97..e3b796c4a6271041f31296f5549a4db39650ec00 100644 (file)
@@ -563,7 +563,7 @@ void WeaponStats_Shutdown();
 void spawnfunc_worldspawn (void)
 {
        float fd, l, i, j, n;
-       string s, col;
+       string s;
 
        cvar = cvar_normal;
        cvar_string = cvar_string_normal;
@@ -706,10 +706,6 @@ void spawnfunc_worldspawn (void)
                if(autocvar_g_norecoil)
                        s = strcat(s, ":norecoil");
 
-               // TODO to mutator system
-               if(autocvar_g_midair)
-                       s = strcat(s, ":midair");
-
                // TODO to mutator system
                if(autocvar_g_powerups == 0)
                        s = strcat(s, ":no_powerups");
@@ -818,58 +814,15 @@ void spawnfunc_worldspawn (void)
        detect_maptype();
 
        // set up information replies for clients and server to use
-       lsmaps_reply = "^7Maps available: ";
-       lsnewmaps_reply = "^7Maps without a record set: ";
-       for(i = 0, j = 0; i < MapInfo_count; ++i)
-       {
-               if(MapInfo_Get_ByID(i))
-                       if not(MapInfo_Map_flags & MapInfo_ForbiddenFlags())
-                       {
-                               if(mod(i, 2))
-                                       col = "^2";
-                               else
-                                       col = "^3";
-
-                               ++j;
-
-                               lsmaps_reply = strcat(lsmaps_reply, col, MapInfo_Map_bspname, " ");
-
-                               if(g_race && !stof(db_get(ServerProgsDB, strcat(MapInfo_Map_bspname, RACE_RECORD, "time"))))
-                                       lsnewmaps_reply = strcat(lsnewmaps_reply, col, MapInfo_Map_bspname, " ");
-                               else if(g_cts && !stof(db_get(ServerProgsDB, strcat(MapInfo_Map_bspname, CTS_RECORD, "time"))))
-                                       lsnewmaps_reply = strcat(lsnewmaps_reply, col, MapInfo_Map_bspname, " ");
-                       }
-       }
-
-       lsmaps_reply = strzone(strcat(lsmaps_reply, "\n"));
-       lsnewmaps_reply = strzone(strcat(((!g_race && !g_cts) ? "Need to be playing race or CTS for lsnewmaps to work." : lsnewmaps_reply), "\n"));
-
-       maplist_reply = "^7Maps in list: ";
-       n = tokenize_console(autocvar_g_maplist);
-       for(i = 0, j = 0; i < n; ++i)
-       {
-               if(MapInfo_CheckMap(argv(i)))
-               {
-                       if(mod(j, 2))
-                               col = "^2";
-                       else
-                               col = "^3";
-                       maplist_reply = strcat(maplist_reply, col, argv(i), " ");
-                       ++j;
-               }
-       }
-       maplist_reply = strzone(strcat(maplist_reply, "\n"));
-       MapInfo_ClearTemps();
-
+       maplist_reply = strzone(getmaplist());
+       lsmaps_reply = strzone(getlsmaps());
        for(i = 0; i < 10; ++i)
        {
                s = getrecords(i);
                if (s)
                        records_reply[i] = strzone(s);
        }
-
        ladder_reply = strzone(getladder());
-
        rankings_reply = strzone(getrankings());
 
        // begin other init
index df09032139b62e7158c6ef20d95a841b037c7c9a..ef05b5a5b6ccc4fa647c7b13d724e96592dacab6 100644 (file)
@@ -767,7 +767,6 @@ void readplayerstartcvars()
 
        if (g_weaponarena)
        {
-               g_pinata = 0; // incompatible
                g_weapon_stay = 0; // incompatible
                WEPSET_COPY_AA(start_weapons, g_weaponarena_weapons);
                start_items |= IT_UNLIMITED_AMMO;
@@ -789,10 +788,7 @@ void readplayerstartcvars()
 
        if(!cvar("g_use_ammunition"))
                start_items |= IT_UNLIMITED_AMMO;
-
-       if(cvar("g_nexball"))
-               start_items |= IT_UNLIMITED_SUPERWEAPONS; // FIXME BAD BAD BAD BAD HACK, NEXBALL SHOULDN'T ABUSE PORTO'S WEAPON SLOT
-
+       
        if(start_items & IT_UNLIMITED_WEAPON_AMMO)
        {
                start_ammo_rockets = 999;
@@ -919,7 +915,15 @@ void readlevelcvars(void)
        CHECK_MUTATOR_ADD("g_rocket_flying", mutator_rocketflying, !cvar("g_minstagib"));
        CHECK_MUTATOR_ADD("g_vampire", mutator_vampire, !cvar("g_minstagib"));
        CHECK_MUTATOR_ADD("g_superspectate", mutator_superspec, 1);
+       CHECK_MUTATOR_ADD("g_pinata", mutator_pinata, !cvar("g_minstagib"));
+       CHECK_MUTATOR_ADD("g_midair", mutator_midair, 1);
+       CHECK_MUTATOR_ADD("g_bloodloss", mutator_bloodloss, !cvar("g_minstagib"));
+       CHECK_MUTATOR_ADD("g_random_gravity", mutator_random_gravity, 1);
+       CHECK_MUTATOR_ADD("g_multijump", mutator_multijump, 1);
+       CHECK_MUTATOR_ADD("g_melee_only", mutator_melee_only, !cvar("g_minstagib"));
+       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
        
@@ -949,13 +953,9 @@ void readlevelcvars(void)
        g_cloaked = cvar("g_cloaked");
     if(g_cts)
         g_cloaked = 1; // always enable cloak in CTS
-       g_jump_grunt = cvar("g_jump_grunt");
        g_footsteps = cvar("g_footsteps");
        g_grappling_hook = cvar("g_grappling_hook");
        g_jetpack = cvar("g_jetpack");
-       g_midair = cvar("g_midair");
-       g_norecoil = cvar("g_norecoil");
-       g_bloodloss = cvar("g_bloodloss");
        sv_maxidle = cvar("sv_maxidle");
        sv_maxidle_spectatorsareidle = cvar("sv_maxidle_spectatorsareidle");
        sv_autotaunt = cvar("sv_autotaunt");
@@ -966,7 +966,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_minstagib || g_assault || cvar("g_campaign"))
+       if ((g_race && g_race_qualifying == 2) || g_arena || g_assault || cvar("g_campaign"))
                inWarmupStage = 0; // these modes cannot work together, sorry
 
        g_pickup_respawntime_weapon = cvar("g_pickup_respawntime_weapon");
@@ -1029,8 +1029,6 @@ void readlevelcvars(void)
        g_pickup_ammo_anyway = cvar("g_pickup_ammo_anyway");
        g_pickup_weapons_anyway = cvar("g_pickup_weapons_anyway");
 
-       g_pinata = cvar("g_pinata");
-
     g_weapon_stay = cvar(strcat("g_", GetGametype(), "_weapon_stay"));
     if(!g_weapon_stay)
         g_weapon_stay = cvar("g_weapon_stay");
index ee0da7e0cd9eb1ae4d67217bed3841521b53a95b..98a44944dd7d7c84c3c4c0a478e97b14c02203d8 100644 (file)
@@ -72,6 +72,11 @@ 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:
+               float player_multijump;
 
 MUTATOR_HOOKABLE(GiveFragsForKill);
        // called when someone was fragged by "self", and is expected to change frag_score to adjust scoring for the kill
index 46b8faccc182bc60f5c8b997df036e77c0535196..bb6312ea1f7593f414977604b763e5c58e00543c 100644 (file)
@@ -237,6 +237,15 @@ MUTATOR_HOOKFUNCTION(arena_SV_StartFrame)
        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);
@@ -260,6 +269,7 @@ MUTATOR_DEFINITION(gamemode_arena)
        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
        {
index 7c8c1cb77c62c8d451e5fa7f0def6c9cc5e5e019..7c49045650b3479f170f67f9b16d7c126f351ddc 100644 (file)
@@ -238,6 +238,40 @@ MUTATOR_HOOKFUNCTION(ca_SetStartItems)
        return 0;
 }
 
+MUTATOR_HOOKFUNCTION(ca_PlayerDamage)
+{
+       if(IS_PLAYER(frag_target))
+       if(frag_target.deadflag == DEAD_NO)
+       if(frag_target == frag_attacker || !IsDifferentTeam(frag_target, frag_attacker) || frag_deathtype == DEATH_FALL)
+               frag_damage = 0;
+               
+       frag_mirrordamage = 0;
+               
+       return FALSE;
+}
+
+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;
+}
+
 // scoreboard setup
 void ca_ScoreRules()
 {
@@ -280,6 +314,9 @@ MUTATOR_DEFINITION(gamemode_ca)
        MUTATOR_HOOK(ForbidThrowCurrentWeapon, ca_ForbidThrowCurrentWeapon, CBC_ORDER_ANY);
        MUTATOR_HOOK(GiveFragsForKill, ca_GiveFragsForKill, CBC_ORDER_FIRST);
        MUTATOR_HOOK(SetStartItems, ca_SetStartItems, CBC_ORDER_ANY);
+       MUTATOR_HOOK(PlayerDamage_Calculate, ca_PlayerDamage, CBC_ORDER_ANY);
+       MUTATOR_HOOK(FilterItem, ca_FilterItem, CBC_ORDER_ANY);
+       MUTATOR_HOOK(PlayerDamage_SplitHealthArmor, ca_PlayerDamage_SplitHealthArmor, CBC_ORDER_ANY);
 
        MUTATOR_ONADD
        {
index 82147826ee56345cad3162601515a20c05e631db..0c22db05bc4216110662ee8e6ea93a01f4da7c3a 100644 (file)
@@ -523,7 +523,15 @@ MUTATOR_HOOKFUNCTION(freezetag_PlayerPhysics)
 {
        if(self.freezetag_frozen)
        {
-               self.movement = '0 0 0';
+               if(autocvar_sv_dodging_frozen && IS_REAL_CLIENT(self))
+               {
+                       self.movement_x = bound(-5, self.movement_x, 5);
+                       self.movement_y = bound(-5, self.movement_y, 5);
+                       self.movement_z = bound(-5, self.movement_z, 5);
+               }
+               else
+                       self.movement = '0 0 0';
+                       
                self.disableclientprediction = 1;
        }
        return 1;
@@ -533,12 +541,31 @@ MUTATOR_HOOKFUNCTION(freezetag_PlayerDamage_Calculate)
 {
        if(frag_target.freezetag_frozen && frag_deathtype != DEATH_HURTTRIGGER)
        {
+               if(autocvar_g_freezetag_revive_falldamage > 0)
+               if(frag_deathtype == DEATH_FALL)
+               if(frag_damage >= autocvar_g_freezetag_revive_falldamage)
+               {
+                       freezetag_Unfreeze(frag_target);
+                       frag_target.health = autocvar_g_freezetag_revive_falldamage_health;
+                       pointparticles(particleeffectnum("iceorglass"), frag_target.origin, '0 0 0', 3);
+                       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;
        }
        return 1;
 }
 
+MUTATOR_HOOKFUNCTION(freezetag_PlayerJump)
+{
+       if(self.freezetag_frozen)
+               return TRUE; // no jumping in freezetag when frozen
+       
+       return FALSE;
+}
+
 MUTATOR_HOOKFUNCTION(freezetag_ForbidThrowCurrentWeapon)
 {
        if (self.freezetag_frozen)
@@ -619,6 +646,7 @@ MUTATOR_DEFINITION(gamemode_freezetag)
        MUTATOR_HOOK(PlayerPreThink, freezetag_PlayerPreThink, CBC_ORDER_FIRST);
        MUTATOR_HOOK(PlayerPhysics, freezetag_PlayerPhysics, CBC_ORDER_FIRST);
        MUTATOR_HOOK(PlayerDamage_Calculate, freezetag_PlayerDamage_Calculate, CBC_ORDER_ANY);
+       MUTATOR_HOOK(PlayerJump, freezetag_PlayerJump, CBC_ORDER_ANY);
        MUTATOR_HOOK(ForbidThrowCurrentWeapon, freezetag_ForbidThrowCurrentWeapon, CBC_ORDER_ANY);
        MUTATOR_HOOK(ItemTouch, freezetag_ItemTouch, CBC_ORDER_ANY);
        MUTATOR_HOOK(HavocBot_ChooseRule, freezetag_BotRoles, CBC_ORDER_ANY);
index 193b5378ecf594af3e08e5891e1fe216a531f28d..aa8e8f37eaa656cea53e3273e364d33ef30bf614 100644 (file)
@@ -46,14 +46,6 @@ MUTATOR_HOOKFUNCTION(lms_PlayerPreSpawn)
        return FALSE;
 }
 
-MUTATOR_HOOKFUNCTION(lms_PlayerSpawn)
-{
-       self.lms_nextcheck = time + autocvar_g_lms_campcheck_interval*2;
-       self.lms_traveled_distance = 0;
-               
-       return FALSE;
-}
-
 MUTATOR_HOOKFUNCTION(lms_PlayerDies)
 {
        self.respawn_flags |= RESPAWN_FORCE;
@@ -97,50 +89,6 @@ MUTATOR_HOOKFUNCTION(lms_PlayerThink)
        if(self.deadflag == DEAD_DYING)
                self.deadflag = DEAD_RESPAWNING;
                
-       if not(self.deadflag)
-       if(autocvar_g_lms_campcheck_interval)
-       {
-               vector dist;
-
-               // calculate player movement (in 2 dimensions only, so jumping on one spot doesn't count as movement)
-               dist = self.prevorigin - self.origin;
-               dist_z = 0;
-               self.lms_traveled_distance += fabs(vlen(dist));
-
-               if((autocvar_g_campaign && !campaign_bots_may_start) || (time < game_starttime))
-               {
-                       self.lms_nextcheck = time + autocvar_g_lms_campcheck_interval*2;
-                       self.lms_traveled_distance = 0;
-               }
-
-               if(time > self.lms_nextcheck)
-               {
-                       if(self.lms_traveled_distance < autocvar_g_lms_campcheck_distance)
-                       {
-                               Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_LMS_CAMPCHECK);
-                               if(self.vehicle)
-                                       Damage(self.vehicle, self, self, autocvar_g_lms_campcheck_damage * 2, DEATH_CAMP, self.vehicle.origin, '0 0 0');
-                               else
-                                       Damage(self, self, self, bound(0, autocvar_g_lms_campcheck_damage, self.health + self.armorvalue * autocvar_g_balance_armor_blockpercent + 5), DEATH_CAMP, self.origin, '0 0 0');
-                       }
-                       self.lms_nextcheck = time + autocvar_g_lms_campcheck_interval;
-                       self.lms_traveled_distance = 0;
-               }
-       }
-               
-       return FALSE;
-}
-
-MUTATOR_HOOKFUNCTION(lms_PlayerDamage)
-{
-       if(IS_PLAYER(frag_target))
-       if(IS_PLAYER(frag_attacker))
-       if(frag_attacker != frag_target)
-       {
-               frag_target.lms_traveled_distance = autocvar_g_lms_campcheck_distance;
-               frag_attacker.lms_traveled_distance = autocvar_g_lms_campcheck_distance;
-       }
-               
        return FALSE;
 }
 
@@ -237,12 +185,10 @@ MUTATOR_DEFINITION(gamemode_lms)
        MUTATOR_HOOK(reset_map_global, lms_ResetMap, CBC_ORDER_ANY);
        MUTATOR_HOOK(reset_map_players, lms_ResetPlayers, CBC_ORDER_ANY);
        MUTATOR_HOOK(PutClientInServer, lms_PlayerPreSpawn, CBC_ORDER_ANY);
-       MUTATOR_HOOK(PlayerSpawn, lms_PlayerSpawn, CBC_ORDER_ANY);
        MUTATOR_HOOK(PlayerDies, lms_PlayerDies, CBC_ORDER_ANY);
        MUTATOR_HOOK(MakePlayerObserver, lms_RemovePlayer, CBC_ORDER_ANY);
        MUTATOR_HOOK(ClientConnect, lms_ClientConnect, CBC_ORDER_ANY);
        MUTATOR_HOOK(PlayerPreThink, lms_PlayerThink, CBC_ORDER_ANY);
-       MUTATOR_HOOK(PlayerDamage_Calculate, lms_PlayerDamage, CBC_ORDER_ANY);
        MUTATOR_HOOK(ForbidThrowCurrentWeapon, lms_ForbidThrowing, CBC_ORDER_ANY);
        MUTATOR_HOOK(GiveFragsForKill, lms_GiveFragsForKill, CBC_ORDER_ANY);
        MUTATOR_HOOK(SetStartItems, lms_SetStartItems, CBC_ORDER_ANY);
index 508bf8c6cd12b98af08be540322c31a346adea79..16fda61550823e6a098e27a2f47e1cfe2506550d 100644 (file)
@@ -5,8 +5,4 @@
 // lives related defs
 float lms_lowest_lives;
 float lms_next_place;
-float LMS_NewPlayerLives();
-
-// camp check
-.float lms_nextcheck;
-.float lms_traveled_distance;
\ No newline at end of file
+float LMS_NewPlayerLives();
\ No newline at end of file
index 78d9d707689b5ce2332287daa108aa67e00fa0b2..adfb31a1b57112685e62e9ddfa04dd2337cfedba 100644 (file)
@@ -929,6 +929,9 @@ MUTATOR_HOOKFUNCTION(nexball_PlayerPreThink)
                }
                
        }
+       
+       nexball_setstatus();
+       
        return FALSE;
 }
 
@@ -944,6 +947,13 @@ MUTATOR_HOOKFUNCTION(nexball_PlayerSpawn)
        return FALSE;
 }
 
+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;
+}
+
 MUTATOR_DEFINITION(gamemode_nexball)
 {
        MUTATOR_HOOK(PlayerDies, nexball_BallDrop, CBC_ORDER_ANY);
@@ -953,6 +963,7 @@ MUTATOR_DEFINITION(gamemode_nexball)
        MUTATOR_HOOK(BuildMutatorsString, nexball_BuildMutatorsString, CBC_ORDER_ANY);
        MUTATOR_HOOK(PlayerSpawn, nexball_PlayerSpawn, CBC_ORDER_ANY);
        MUTATOR_HOOK(PlayerPreThink, nexball_PlayerPreThink, CBC_ORDER_ANY);
+       MUTATOR_HOOK(SetStartItems, nexball_SetStartItems, CBC_ORDER_ANY);
 
        MUTATOR_ONADD
        {
diff --git a/qcsrc/server/mutators/mutator_bloodloss.qc b/qcsrc/server/mutators/mutator_bloodloss.qc
new file mode 100644 (file)
index 0000000..adffdec
--- /dev/null
@@ -0,0 +1,48 @@
+.float bloodloss_timer;
+
+MUTATOR_HOOKFUNCTION(bloodloss_PlayerThink)
+{
+       if(IS_PLAYER(self))
+       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;
+}
+
+MUTATOR_HOOKFUNCTION(bloodloss_PlayerJump)
+{
+       if(self.health <= autocvar_g_bloodloss)
+               return TRUE;
+               
+       return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(bloodloss_BuildMutatorsString)
+{
+       ret_string = strcat(ret_string, ":bloodloss");
+       return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(bloodloss_BuildMutatorsPrettyString)
+{
+       ret_string = strcat(ret_string, ", Blood loss");
+       return FALSE;
+}
+
+MUTATOR_DEFINITION(mutator_bloodloss)
+{
+       MUTATOR_HOOK(PlayerPreThink, bloodloss_PlayerThink, CBC_ORDER_ANY);
+       MUTATOR_HOOK(PlayerJump, bloodloss_PlayerJump, CBC_ORDER_ANY);
+       MUTATOR_HOOK(BuildMutatorsString, bloodloss_BuildMutatorsString, CBC_ORDER_ANY);
+       MUTATOR_HOOK(BuildMutatorsPrettyString, bloodloss_BuildMutatorsPrettyString, CBC_ORDER_ANY);
+
+       return FALSE;
+}
diff --git a/qcsrc/server/mutators/mutator_campcheck.qc b/qcsrc/server/mutators/mutator_campcheck.qc
new file mode 100644 (file)
index 0000000..d9d219c
--- /dev/null
@@ -0,0 +1,84 @@
+.float campcheck_nextcheck;
+.float campcheck_traveled_distance;
+
+MUTATOR_HOOKFUNCTION(campcheck_PlayerDies)
+{
+       Kill_Notification(NOTIF_ONE_ONLY, self, MSG_CENTER_CPID, CPID_CAMPCHECK);
+       
+       return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(campcheck_PlayerDamage)
+{
+       if(IS_PLAYER(frag_target))
+       if(IS_PLAYER(frag_attacker))
+       if(frag_attacker != frag_target)
+       {
+               frag_target.campcheck_traveled_distance = autocvar_g_campcheck_distance;
+               frag_attacker.campcheck_traveled_distance = autocvar_g_campcheck_distance;
+       }
+       
+       return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(campcheck_PlayerThink)
+{
+       if(IS_PLAYER(self))
+       if(self.deadflag == DEAD_NO)
+       if(autocvar_g_campcheck_interval)
+       {
+               vector dist;
+
+               // calculate player movement (in 2 dimensions only, so jumping on one spot doesn't count as movement)
+               dist = self.prevorigin - self.origin;
+               dist_z = 0;
+               self.campcheck_traveled_distance += fabs(vlen(dist));
+
+               if((autocvar_g_campaign && !campaign_bots_may_start) || (time < game_starttime) || (round_handler_IsActive() && !round_handler_IsRoundStarted()))
+               {
+                       self.campcheck_nextcheck = time + autocvar_g_campcheck_interval * 2;
+                       self.campcheck_traveled_distance = 0;
+               }
+
+               if(time > self.campcheck_nextcheck)
+               {
+                       if(self.campcheck_traveled_distance < autocvar_g_campcheck_distance)
+                       {
+                               Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_CAMPCHECK);
+                               if(self.vehicle)
+                                       Damage(self.vehicle, self, self, autocvar_g_campcheck_damage * 2, DEATH_CAMP, self.vehicle.origin, '0 0 0');
+                               else
+                                       Damage(self, self, self, bound(0, autocvar_g_campcheck_damage, self.health + self.armorvalue * autocvar_g_balance_armor_blockpercent + 5), DEATH_CAMP, self.origin, '0 0 0');
+                       }
+                       self.campcheck_nextcheck = time + autocvar_g_campcheck_interval;
+                       self.campcheck_traveled_distance = 0;
+               }
+       }
+
+       return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(campcheck_PlayerSpawn)
+{
+       self.campcheck_nextcheck = time + autocvar_g_campcheck_interval * 2;
+       self.campcheck_traveled_distance = 0;
+               
+       return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(campcheck_BuildMutatorsString)
+{
+       ret_string = strcat(ret_string, ":CampCheck");
+       return FALSE;
+}
+
+MUTATOR_DEFINITION(mutator_campcheck)
+{
+       MUTATOR_HOOK(PlayerDies, campcheck_PlayerDies, CBC_ORDER_ANY);
+       MUTATOR_HOOK(PlayerDamage_Calculate, campcheck_PlayerDamage, CBC_ORDER_ANY);
+       MUTATOR_HOOK(PlayerPreThink, campcheck_PlayerThink, CBC_ORDER_ANY);
+       MUTATOR_HOOK(PlayerSpawn, campcheck_PlayerSpawn, CBC_ORDER_ANY);
+       MUTATOR_HOOK(BuildMutatorsString, campcheck_BuildMutatorsString, CBC_ORDER_ANY);
+
+       return FALSE;
+}
index 1d6dd911eb7f958fad79b957c120e06575433530..263df8225f3f365746239fec3fca43c3d13b41ae 100644 (file)
 // and to ramp up the dodge acceleration in the physics hook.
 .float last_dodging_time;
 
-// set to 1 to indicate dodging has started.. reset by physics hook after dodge has been done..
-.float dodging_action;
-
 // This is the velocity gain to be added over the ramp time.
 // It will decrease from frame to frame during dodging_action = 1
 // until it's 0.
 .float dodging_velocity_gain;
 
-// the jump part of the dodge cannot be ramped
-.float dodging_single_action;
-
 MUTATOR_HOOKFUNCTION(dodging_GetCvars) {
        GetCvars_handleFloat(get_cvars_s, get_cvars_f, cvar_cl_dodging_timeout, "cl_dodging_timeout");
        return 0;
@@ -39,6 +33,10 @@ MUTATOR_HOOKFUNCTION(dodging_PlayerPhysics) {
        float new_velocity_gain;
        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;
 
     if (self.deadflag != DEAD_NO)
         return 0;
@@ -72,7 +70,7 @@ MUTATOR_HOOKFUNCTION(dodging_PlayerPhysics) {
        if (common_factor > 1) 
                common_factor = 1;
 
-       new_velocity_gain = self.dodging_velocity_gain - (common_factor * autocvar_sv_dodging_horiz_speed);
+       new_velocity_gain = self.dodging_velocity_gain - (common_factor * horiz_speed);
        if (new_velocity_gain < 0)
                new_velocity_gain = 0;
 
@@ -170,6 +168,9 @@ MUTATOR_HOOKFUNCTION(dodging_GetPressedKeys) {
 
        tap_direction_x = 0;
        tap_direction_y = 0;
+       
+       float frozen_dodging;
+       frozen_dodging = (self.freezetag_frozen && autocvar_sv_dodging_frozen);
 
        float dodge_detected;
        if (g_dodging == 0)
@@ -187,7 +188,7 @@ MUTATOR_HOOKFUNCTION(dodging_GetPressedKeys) {
 
        if (self.movement_x > 0) {
                // is this a state change?
-               if (!(self.pressedkeys & KEY_FORWARD)) {
+               if (!(self.pressedkeys & KEY_FORWARD) || frozen_dodging) {
                        if ((time - self.last_FORWARD_KEY_time) < self.cvar_cl_dodging_timeout) { 
                                tap_direction_x = 1.0;
                                dodge_detected = 1;
@@ -198,7 +199,7 @@ MUTATOR_HOOKFUNCTION(dodging_GetPressedKeys) {
 
        if (self.movement_x < 0) {
                // is this a state change?
-               if (!(self.pressedkeys & KEY_BACKWARD)) {
+               if (!(self.pressedkeys & KEY_BACKWARD) || frozen_dodging) {
                        tap_direction_x = -1.0;
                        if ((time - self.last_BACKWARD_KEY_time) < self.cvar_cl_dodging_timeout)        { 
                                dodge_detected = 1;
@@ -209,7 +210,7 @@ MUTATOR_HOOKFUNCTION(dodging_GetPressedKeys) {
 
        if (self.movement_y > 0) {
                // is this a state change?
-               if (!(self.pressedkeys & KEY_RIGHT)) {
+               if (!(self.pressedkeys & KEY_RIGHT) || frozen_dodging) {
                        tap_direction_y = 1.0;
                        if ((time - self.last_RIGHT_KEY_time) < self.cvar_cl_dodging_timeout)   { 
                                dodge_detected = 1;
@@ -220,7 +221,7 @@ MUTATOR_HOOKFUNCTION(dodging_GetPressedKeys) {
 
        if (self.movement_y < 0) {
                // is this a state change?
-               if (!(self.pressedkeys & KEY_LEFT)) {
+               if (!(self.pressedkeys & KEY_LEFT) || frozen_dodging) {
                        tap_direction_y = -1.0;
                        if ((time - self.last_LEFT_KEY_time) < self.cvar_cl_dodging_timeout)    { 
                                dodge_detected = 1;
index 8e8be2513d49f90c1a952685ef6e21ae03a49940..9840325d97ce8a0ee71ac932242de069a0e3cabf 100644 (file)
@@ -1,2 +1,7 @@
 float g_dodging;
 
+// set to 1 to indicate dodging has started.. reset by physics hook after dodge has been done..
+.float dodging_action;
+
+// the jump part of the dodge cannot be ramped
+.float dodging_single_action;
diff --git a/qcsrc/server/mutators/mutator_melee_only.qc b/qcsrc/server/mutators/mutator_melee_only.qc
new file mode 100644 (file)
index 0000000..639bba5
--- /dev/null
@@ -0,0 +1,44 @@
+MUTATOR_HOOKFUNCTION(melee_SetStartItems)
+{
+       start_ammo_shells = 0;
+       warmup_start_ammo_shells = 0;
+       
+       WEPSET_COPY_AW(start_weapons, WEP_SHOTGUN);
+       WEPSET_COPY_AW(warmup_start_weapons, WEP_SHOTGUN);
+               
+       return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(melee_FilterItem)
+{
+       switch (self.items)
+       {
+               case IT_5HP:
+               case IT_ARMOR_SHARD:
+                       return FALSE;
+       }
+       
+       return TRUE;
+}
+
+MUTATOR_HOOKFUNCTION(melee_BuildMutatorsString)
+{
+       ret_string = strcat(ret_string, ":MeleeOnly");
+       return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(melee_BuildMutatorsPrettyString)
+{
+       ret_string = strcat(ret_string, ", Melee Only Arena");
+       return FALSE;
+}
+
+MUTATOR_DEFINITION(mutator_melee_only)
+{
+       MUTATOR_HOOK(SetStartItems, melee_SetStartItems, CBC_ORDER_ANY);
+       MUTATOR_HOOK(FilterItem, melee_FilterItem, CBC_ORDER_ANY);
+       MUTATOR_HOOK(BuildMutatorsString, melee_BuildMutatorsString, CBC_ORDER_ANY);
+       MUTATOR_HOOK(BuildMutatorsPrettyString, melee_BuildMutatorsPrettyString, CBC_ORDER_ANY);
+
+       return FALSE;
+}
diff --git a/qcsrc/server/mutators/mutator_midair.qc b/qcsrc/server/mutators/mutator_midair.qc
new file mode 100644 (file)
index 0000000..0d48fef
--- /dev/null
@@ -0,0 +1,54 @@
+.float midair_shieldtime;
+
+MUTATOR_HOOKFUNCTION(midair_PlayerDamage)
+{
+       if(IS_PLAYER(frag_attacker))
+       if(IS_PLAYER(frag_target))
+       if(time < self.midair_shieldtime)
+               frag_damage = FALSE;
+
+       return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(midair_PlayerPowerups)
+{
+       if(time >= game_starttime)
+       if(self.flags & FL_ONGROUND)
+       {
+               self.effects |= (EF_ADDITIVE | EF_FULLBRIGHT);
+               self.midair_shieldtime = max(self.midair_shieldtime, time + autocvar_g_midair_shieldtime);
+       }
+               
+       return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(midair_PlayerSpawn)
+{
+       if(IS_BOT_CLIENT(self))
+               self.bot_moveskill = 0; // disable bunnyhopping
+
+       return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(midair_BuildMutatorsString)
+{
+       ret_string = strcat(ret_string, ":midair");
+       return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(midair_BuildMutatorsPrettyString)
+{
+       ret_string = strcat(ret_string, ", Midair");
+       return FALSE;
+}
+
+MUTATOR_DEFINITION(mutator_midair)
+{
+       MUTATOR_HOOK(PlayerDamage_Calculate, midair_PlayerDamage, CBC_ORDER_ANY);
+       MUTATOR_HOOK(PlayerPowerups, midair_PlayerPowerups, CBC_ORDER_ANY);
+       MUTATOR_HOOK(PlayerSpawn, midair_PlayerSpawn, CBC_ORDER_ANY);
+       MUTATOR_HOOK(BuildMutatorsString, midair_BuildMutatorsString, CBC_ORDER_ANY);
+       MUTATOR_HOOK(BuildMutatorsPrettyString, midair_BuildMutatorsPrettyString, CBC_ORDER_ANY);
+
+       return FALSE;
+}
index a0786b7dabfee8c9369eef9f591cf33467075cd4..9b4bd7012f50db0f6f72c9691b5c206106aa1570 100644 (file)
@@ -203,6 +203,7 @@ MUTATOR_HOOKFUNCTION(minstagib_SplitHealthArmor)
 MUTATOR_HOOKFUNCTION(minstagib_ForbidThrowing)
 {
        // weapon dropping on death handled by FilterItem
+       nades_CheckThrow();
 
        return TRUE;
 }
@@ -275,6 +276,7 @@ MUTATOR_HOOKFUNCTION(minstagib_SetStartItems)
        start_health = 100;
        start_armorvalue = 0;
        WEPSET_COPY_AW(start_weapons, WEP_MINSTANEX);
+       WEPSET_COPY_AW(warmup_start_weapons, WEP_MINSTANEX);
        start_items |= IT_UNLIMITED_SUPERWEAPONS;
                
        return FALSE;
diff --git a/qcsrc/server/mutators/mutator_multijump.qc b/qcsrc/server/mutators/mutator_multijump.qc
new file mode 100644 (file)
index 0000000..c945e1c
--- /dev/null
@@ -0,0 +1,88 @@
+.float multijump_count;
+.float multijump_ready;
+
+MUTATOR_HOOKFUNCTION(multijump_PlayerPhysics)
+{
+       if(self.flags & FL_ONGROUND)
+       {
+               if (autocvar_g_multijump > 0)
+                       self.multijump_count = 0;
+               else
+                       self.multijump_count = -2; // the cvar value for infinite jumps is -1, so this needs to be smaller
+       }
+               
+       return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(multijump_PlayerJump)
+{
+       if (self.flags & FL_JUMPRELEASED && !(self.flags & FL_ONGROUND)) // jump button pressed this frame and we are in midair
+               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)
+               {
+                       if (autocvar_g_multijump_add == 0) // in this case we make the z velocity == jumpvelocity
+                       {
+                               if (self.velocity_z < autocvar_sv_jumpvelocity)
+                               {
+                                       player_multijump = TRUE;
+                                       self.velocity_z = 0;
+                               }
+                       }
+                       else
+                               player_multijump = TRUE;
+
+                       if(player_multijump)
+                       {
+                               if(self.movement_x != 0 || self.movement_y != 0) // don't remove all speed if player isnt pressing any movement keys
+                               {
+                                       float curspeed;
+                                       vector wishvel, wishdir;
+
+                                       curspeed = max(
+                                               vlen(vec2(self.velocity)), // current xy speed
+                                               vlen(vec2(antilag_takebackavgvelocity(self, max(self.lastteleporttime + sys_frametime, time - 0.25), time))) // average xy topspeed over the last 0.25 secs
+                                       );
+                                       makevectors(self.v_angle_y * '0 1 0');
+                                       wishvel = v_forward * self.movement_x + v_right * self.movement_y;
+                                       wishdir = normalize(wishvel);
+
+                                       self.velocity_x = wishdir_x * curspeed; // allow "dodging" at a multijump
+                                       self.velocity_y = wishdir_y * curspeed;
+                                       // keep velocity_z unchanged!
+                               }
+                               if (autocvar_g_multijump > 0)
+                                       self.multijump_count += 1;
+                       }
+               }
+               self.multijump_ready = FALSE; // require releasing and pressing the jump button again for the next jump
+       }
+
+       return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(multijump_BuildMutatorsString)
+{
+       ret_string = strcat(ret_string, ":multijump");
+       return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(multijump_BuildMutatorsPrettyString)
+{
+       ret_string = strcat(ret_string, ", Multi jump");
+       return FALSE;
+}
+
+MUTATOR_DEFINITION(mutator_multijump)
+{
+       MUTATOR_HOOK(PlayerPhysics, multijump_PlayerPhysics, CBC_ORDER_ANY);
+       MUTATOR_HOOK(PlayerJump, multijump_PlayerJump, CBC_ORDER_ANY);
+       MUTATOR_HOOK(BuildMutatorsString, multijump_BuildMutatorsString, CBC_ORDER_ANY);
+       MUTATOR_HOOK(BuildMutatorsPrettyString, multijump_BuildMutatorsPrettyString, CBC_ORDER_ANY);
+
+       return FALSE;
+}
diff --git a/qcsrc/server/mutators/mutator_nades.qc b/qcsrc/server/mutators/mutator_nades.qc
new file mode 100644 (file)
index 0000000..a223f8b
--- /dev/null
@@ -0,0 +1,398 @@
+void nade_timer_think()
+{
+       self.skin = 8 - (self.owner.wait - time) / (autocvar_g_nades_nade_lifetime / 10);
+       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;
+               case NUM_TEAM_2: p = PROJECTILE_NADE_BLUE_BURN; break;
+               case NUM_TEAM_3: p = PROJECTILE_NADE_YELLOW_BURN; break;
+               case NUM_TEAM_4: p = PROJECTILE_NADE_PINK_BURN; break;
+               default:                 p = PROJECTILE_NADE_BURN; break;
+       }
+       
+       CSQCProjectile(_nade, TRUE, p, TRUE);
+}
+
+void nade_spawn(entity _nade)
+{
+       float p;
+       entity timer = spawn();
+       setmodel(timer, "models/ok_nade_counter/ok_nade_counter.md3");
+       setattachment(timer, _nade, "");
+       timer.classname = "nade_timer";
+       timer.colormap = _nade.colormap;
+       timer.glowmod = _nade.glowmod;
+       timer.think = nade_timer_think;
+       timer.nextthink = time;
+       timer.wait = _nade.wait;
+       timer.owner = _nade;    
+       timer.skin = 10;
+       
+       switch(_nade.realowner.team)
+       {
+               case NUM_TEAM_1: p = PROJECTILE_NADE_RED; break;
+               case NUM_TEAM_2: p = PROJECTILE_NADE_BLUE; break;
+               case NUM_TEAM_3: p = PROJECTILE_NADE_YELLOW; break;
+               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;
+               case NUM_TEAM_2: expef = "nade_blue_explode"; break;
+               case NUM_TEAM_3: expef = "nade_yellow_explode"; break;
+               case NUM_TEAM_4: expef = "nade_pink_explode"; break;
+               default:                 expef = "nade_explode"; break;
+       }
+       
+       sound(self, CH_SHOTS_SINGLE, "misc/null.wav", VOL_BASE, ATTN_NORM);
+       sound(self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTN_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;
+       RadiusDamage(self, self.realowner, autocvar_g_nades_nade_damage, autocvar_g_nades_nade_edgedamage,
+                                autocvar_g_nades_nade_radius, self, autocvar_g_nades_nade_force, self.projectiledeathtype, self.enemy);
+
+       remove(self);
+}
+
+void nade_touch()
+{
+       PROJECTILE_TOUCH;
+       //setsize(self, '-2 -2 -2', '2 2 2');
+       //UpdateCSQCProjectile(self);
+       if(self.health == self.max_health)
+       {
+               spamsound(self, CH_SHOTS, strcat("weapons/grenade_bounce", ftos(1 + rint(random() * 5)), ".wav"), VOL_BASE, ATTN_NORM);
+               return;
+       }
+
+       self.enemy = other;
+       nade_boom();
+}
+
+void nade_beep()
+{
+       sound(self, CH_SHOTS_SINGLE, "overkill/grenadebip.ogg", VOL_BASE, 0.5 *(ATTN_LARGE + ATTN_MAX));
+       self.think = nade_boom;
+       self.nextthink = max(self.wait, time);
+}
+
+void nade_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
+{
+       if(DEATH_ISWEAPON(deathtype, WEP_LASER))
+               return;
+
+       if(DEATH_ISWEAPON(deathtype, WEP_NEX) || DEATH_ISWEAPON(deathtype, WEP_MINSTANEX))
+       {
+               force *= 6;
+               damage = self.max_health * 0.55;
+       }
+
+       if(DEATH_ISWEAPON(deathtype, WEP_UZI))
+               damage = self.max_health * 0.1;
+
+       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)))
+               return;
+
+       if(self.health == self.max_health)
+       {
+               sound(self, CH_SHOTS_SINGLE, "misc/null.wav", VOL_BASE, 0.5 *(ATTN_LARGE + ATTN_MAX));
+               self.nextthink = max(time + autocvar_g_nades_nade_lifetime, time);
+               self.think = nade_beep;
+       }
+
+       self.health   -= damage;
+       self.realowner = attacker;
+
+       if(self.health <= 0)
+               W_PrepareExplosionByDamage(attacker, nade_boom);
+       else
+               nade_burn_spawn(self);
+}
+
+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");
+       setattachment(_nade, world, "");
+       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)
+               _nade.velocity = e.velocity + _velocity;
+       else if(autocvar_g_nades_nade_newton_style == 2)
+               _nade.velocity = _velocity;
+       else
+               _nade.velocity = W_CalculateProjectileVelocity(e.velocity, _velocity, TRUE);
+
+       //_nade.solid = SOLID_BBOX; // TODO: remember why this was needed
+       _nade.touch = nade_touch;
+       _nade.health = autocvar_g_nades_nade_health;
+       _nade.max_health = _nade.health;
+       _nade.takedamage = DAMAGE_AIM;
+       _nade.event_damage = nade_damage;
+       _nade.teleportable = TRUE;
+       _nade.pushable = TRUE;
+       _nade.gravity = 1;
+       _nade.missile_flags = MIF_SPLASH | MIF_ARC;
+       _nade.damagedbycontents = TRUE;
+       _nade.angles = vectoangles(_nade.velocity);
+       _nade.flags = FL_PROJECTILE;
+
+       nade_spawn(_nade);
+
+       if(_time)
+       {
+               _nade.think = nade_boom;
+               _nade.nextthink = _time;
+       }
+
+       e.nade_refire = time + autocvar_g_nades_nade_refire;
+}
+
+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");
+       self.nade.classname = "nade";
+       self.nade.realowner = self;
+       self.nade.colormap = self.colormap;
+       self.nade.glowmod = self.glowmod;
+       self.nade.wait = time + autocvar_g_nades_nade_lifetime;
+       self.nade.lifetime = time;
+       self.nade.think = nade_beep;
+       self.nade.nextthink = max(self.nade.wait - 3, time);
+       self.nade.projectiledeathtype = DEATH_NADE;
+
+       self.fake_nade = spawn();
+       setmodel(self.fake_nade, "models/weapons/h_ok_grenade.iqm");
+       setattachment(self.fake_nade, self.weaponentity, "");
+       self.fake_nade.classname = "fake_nade";
+       //self.fake_nade.viewmodelforclient = self;
+       self.fake_nade.realowner = self.fake_nade.owner = self;
+       self.fake_nade.colormap = self.colormap;
+       self.fake_nade.glowmod = self.glowmod;
+       self.fake_nade.think = SUB_Remove;
+       self.fake_nade.nextthink = self.nade.wait;
+}
+
+float CanThrowNade()
+{
+       if(self.vehicle)
+               return FALSE;
+               
+       if(gameover)
+               return FALSE;
+               
+       if(self.deadflag != DEAD_NO)
+               return FALSE;
+       
+       if not(autocvar_g_nades)
+               return FALSE; // allow turning them off mid match
+               
+       if(forbidWeaponUse())
+               return FALSE;
+               
+       if not(IS_PLAYER(self))
+               return FALSE;
+               
+       return TRUE;
+}
+
+void nades_CheckThrow()
+{
+       if(!CanThrowNade())
+               return;
+               
+       if(!self.nade)
+       {
+               if(self.nade_refire < time)
+               {
+                       Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_NADE_THROW);
+                       nade_prime();
+                       self.nade_refire = time + autocvar_g_nades_nade_refire;
+               }
+       }
+       else
+       {
+               if(time - self.nade.lifetime >= 1)
+               {
+                       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));
+                       toss_nade(self, (v_forward * 0.75 + v_up * 0.2 + v_right * 0.05) * _force, 0);
+               }
+       }
+}
+
+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) || WEPSET_CONTAINS_AW(weaponsInMap, WEP_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)
+       {
+               if(key_pressed)
+               {
+                       if(!self.nade)
+                               nade_prime();
+               }
+               else if(time - self.nade.lifetime >= 1)
+               {
+                       if(self.nade)
+                       {
+                               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));                         
+                               toss_nade(self, (v_forward * 0.7 + v_up * 0.2 + v_right * 0.1) * _force, 0);
+                       }
+               }
+       }
+
+       return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(nades_PlayerSpawn)
+{
+       if(autocvar_g_nades_spawn)
+               self.nade_refire = time + autocvar_g_spawnshieldtime;
+       else
+               self.nade_refire  = time + autocvar_g_nades_nade_refire;
+
+       return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(nades_PlayerDies)
+{
+       if(self.nade)
+               toss_nade(self, '0 0 100', max(self.nade.wait, time + 0.05));
+               
+       return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(nades_RemovePlayer)
+{
+       if(self.nade)
+               remove(self.nade);
+
+       if(self.fake_nade)
+               remove(self.fake_nade);
+               
+       return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(nades_BuildMutatorsString)
+{
+       ret_string = strcat(ret_string, ":Nades");
+       return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(nades_BuildMutatorsPrettyString)
+{
+       ret_string = strcat(ret_string, ", Nades");
+       return FALSE;
+}
+
+MUTATOR_DEFINITION(mutator_nades)
+{
+       MUTATOR_HOOK(VehicleEnter, nades_VehicleEnter, CBC_ORDER_ANY);
+       MUTATOR_HOOK(PlayerPreThink, nades_PlayerPreThink, CBC_ORDER_ANY);
+       MUTATOR_HOOK(PlayerSpawn, nades_PlayerSpawn, CBC_ORDER_ANY);
+       MUTATOR_HOOK(PlayerDies, nades_PlayerDies, CBC_ORDER_ANY);
+       MUTATOR_HOOK(MakePlayerObserver, nades_RemovePlayer, CBC_ORDER_ANY);
+       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");
+               precache_sound("weapons/grenade_bounce1.wav");
+               precache_sound("weapons/grenade_bounce2.wav");
+               precache_sound("weapons/grenade_bounce3.wav");
+               precache_sound("weapons/grenade_bounce4.wav");
+               precache_sound("weapons/grenade_bounce5.wav");
+               precache_sound("weapons/grenade_bounce6.wav");
+               precache_sound("overkill/grenadebip.ogg");
+       }
+
+       return FALSE;
+}
diff --git a/qcsrc/server/mutators/mutator_nades.qh b/qcsrc/server/mutators/mutator_nades.qh
new file mode 100644 (file)
index 0000000..1940f4e
--- /dev/null
@@ -0,0 +1,5 @@
+.entity nade;
+.entity fake_nade;
+.float nade_refire;
+
+void() nades_CheckThrow;
diff --git a/qcsrc/server/mutators/mutator_pinata.qc b/qcsrc/server/mutators/mutator_pinata.qc
new file mode 100644 (file)
index 0000000..e32c08a
--- /dev/null
@@ -0,0 +1,32 @@
+MUTATOR_HOOKFUNCTION(pinata_PlayerDies)
+{
+       float j;
+       for(j = WEP_FIRST; j <= WEP_LAST; ++j)
+       if(WEPSET_CONTAINS_EW(self, j))
+       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;
+}
+
+MUTATOR_HOOKFUNCTION(pinata_BuildMutatorsString)
+{
+       ret_string = strcat(ret_string, ":Pinata");
+       return FALSE;
+}
+
+MUTATOR_HOOKFUNCTION(pinata_BuildMutatorsPrettyString)
+{
+       ret_string = strcat(ret_string, ", PiƱata");
+       return FALSE;
+}
+
+MUTATOR_DEFINITION(mutator_pinata)
+{
+       MUTATOR_HOOK(PlayerDies, pinata_PlayerDies, CBC_ORDER_ANY);
+       MUTATOR_HOOK(BuildMutatorsString, pinata_BuildMutatorsString, CBC_ORDER_ANY);
+       MUTATOR_HOOK(BuildMutatorsPrettyString, pinata_BuildMutatorsPrettyString, CBC_ORDER_ANY);
+
+       return FALSE;
+}
diff --git a/qcsrc/server/mutators/mutator_random_gravity.qc b/qcsrc/server/mutators/mutator_random_gravity.qc
new file mode 100644 (file)
index 0000000..e2832ac
--- /dev/null
@@ -0,0 +1,51 @@
+// Random Gravity
+//
+// Mutator by Mario
+// Inspired by Player 2
+
+float gravity_delay;
+
+MUTATOR_HOOKFUNCTION(gravity_StartFrame)
+{
+       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) 
+        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;
+}
+
+MUTATOR_HOOKFUNCTION(gravity_BuildMutatorsString)
+{
+       ret_string = strcat(ret_string, ":RandomGravity");
+       return 0;
+}
+
+MUTATOR_HOOKFUNCTION(gravity_BuildMutatorsPrettyString)
+{
+       ret_string = strcat(ret_string, ", Random gravity");
+       return 0;
+}
+
+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
+       }
+
+       return FALSE;
+}
index 1aa293b39ea260efd53f3c7a80cf1325ea749d32..edfcba4398d2da3eff0d465ecb03ef341fe37f75 100644 (file)
@@ -1,19 +1,14 @@
 MUTATOR_HOOKFUNCTION(vampire_PlayerDamage)
 {
-       if(time < self.spawnshieldtime)
-               return 0;
-       if(g_minstagib)
+       if(time >= frag_target.spawnshieldtime)
+       if(frag_target != frag_attacker)
+       if(frag_target.deadflag == DEAD_NO)
        {
-               // minstagib: each hit means +1 ammo
-               if(frag_attacker != frag_target)
-                       frag_attacker.ammo_cells += 2; // note: 1 cell was deducted for the shot
+               frag_attacker.health += bound(0, damage_take, frag_target.health);
+               frag_attacker.health = bound(0, frag_attacker.health, autocvar_g_balance_health_limit);
        }
-       else
-       {
-               // otherwise: each hit gets damage back
-               frag_attacker.health = frag_attacker.health + bound(0, damage_take, self.health);
-       }
-       return 0;
+               
+       return FALSE;
 }
 
 MUTATOR_HOOKFUNCTION(vampire_BuildMutatorsString)
index 3f9f020affc086c1968fbe80a2bfc64bd9a3d5e3..e7a95de7ec5ba08df4a7140742035b6b4b7d1d6c 100644 (file)
@@ -21,5 +21,13 @@ MUTATOR_DECLARATION(mutator_vampire);
 MUTATOR_DECLARATION(mutator_superspec);
 MUTATOR_DECLARATION(mutator_minstagib);
 MUTATOR_DECLARATION(mutator_touchexplode);
+MUTATOR_DECLARATION(mutator_pinata);
+MUTATOR_DECLARATION(mutator_midair);
+MUTATOR_DECLARATION(mutator_bloodloss);
+MUTATOR_DECLARATION(mutator_random_gravity);
+MUTATOR_DECLARATION(mutator_multijump);
+MUTATOR_DECLARATION(mutator_melee_only);
+MUTATOR_DECLARATION(mutator_nades);
+MUTATOR_DECLARATION(mutator_campcheck);
 
 MUTATOR_DECLARATION(sandbox);
index 367e8609ded2741ab10a74503dbf7888a82bd1a6..e9e9a4b8c89e3fdfce2209e264df815a634b16d2 100644 (file)
@@ -46,6 +46,7 @@ mutators/gamemode_keepaway.qh
 mutators/gamemode_nexball.qh 
 mutators/gamemode_lms.qh
 mutators/mutator_dodging.qh
+mutators/mutator_nades.qh
 
 //// tZork Turrets ////
 tturrets/include/turrets_early.qh
@@ -249,6 +250,14 @@ mutators/sandbox.qc
 mutators/mutator_superspec.qc
 mutators/mutator_minstagib.qc
 mutators/mutator_touchexplode.qc
+mutators/mutator_pinata.qc
+mutators/mutator_midair.qc
+mutators/mutator_bloodloss.qc
+mutators/mutator_random_gravity.qc
+mutators/mutator_multijump.qc
+mutators/mutator_melee_only.qc
+mutators/mutator_nades.qc
+mutators/mutator_campcheck.qc
 
 ../warpzonelib/anglestransform.qc
 ../warpzonelib/mathlib.qc
index 538dcc62c624b173caa59b1ff53686a39dd50109..a9b2443b73f1715fdf1678a7a8b781517a32f624 100644 (file)
@@ -93,7 +93,7 @@ void CreatureFrame (void)
                {
                        // check for falling damage
                        float velocity_len = vlen(self.velocity);
-                       if(!self.hook.state && !g_ca && !(g_cts && !autocvar_g_cts_selfdamage))
+                       if(!self.hook.state && !(g_cts && !autocvar_g_cts_selfdamage))
                        {
                                dm = vlen(self.oldvelocity) - velocity_len; // dm is now the velocity DECREASE. Velocity INCREASE should never cause a sound or any damage.
                                if (self.deadflag)
index 9a290a2cc3ed83830e77ea67c8abca0740a88787..61e2a09bf8af6927a78273a74005ac1e26e67287 100644 (file)
@@ -277,10 +277,6 @@ float have_pickup_item(void)
                        return TRUE;
                if(autocvar_g_powerups == 0)
                        return FALSE;
-               if(g_ca)
-                       return FALSE;
-               if(g_arena)
-                       return FALSE;
        }
        else
        {
@@ -288,8 +284,6 @@ float have_pickup_item(void)
                        return TRUE;
                if(autocvar_g_pickup_items == 0)
                        return FALSE;
-               if(g_ca)
-                       return FALSE;
                if(g_weaponarena)
                        if(!WEPSET_EMPTY_E(self) || (self.items & IT_AMMO))
                                return FALSE;
index fba705c28afd229aa5676ebc329bbff1fdba7ea1..0efb77df276ae2154a8127458e5695b2ecb0b53d 100644 (file)
@@ -71,7 +71,7 @@ vector trigger_push_calculatevelocity(vector org, entity tgt, float ht)
         */
 
        // push him so high...
-       vz = sqrt(2 * grav * jumpheight); // NOTE: sqrt(positive)!
+       vz = sqrt(fabs(2 * grav * jumpheight)); // NOTE: sqrt(positive)!
 
        // we start with downwards velocity only if it's a downjump and the jump apex should be outside the jump!
        if(ht < 0)
index 0ba1e7c8481db848019a0f856fdf70ee236e0b32..b481f46b3aa6185423d2999558fa0a559d9c46a7 100644 (file)
@@ -286,14 +286,8 @@ string getwelcomemessage(void)
                modifications = strcat(modifications, ", Cloaked");
        if(g_grappling_hook)
                modifications = strcat(modifications, ", Hook");
-       if(g_midair)
-               modifications = strcat(modifications, ", Midair");
-       if(g_pinata)
-               modifications = strcat(modifications, ", PiƱata");
        if(g_weapon_stay && !g_cts)
                modifications = strcat(modifications, ", Weapons stay");
-       if(g_bloodloss > 0)
-               modifications = strcat(modifications, ", Blood loss");
        if(g_jetpack)
                modifications = strcat(modifications, ", Jet pack");
        if(autocvar_g_powerups == 0)
index 4cce61bbe021f37bbcb3269bbdb9e14ea6e218b0..320d84b3cc50ecbf85579b5c937e1bc119c3fc3e 100644 (file)
@@ -94,10 +94,9 @@ void W_Crylink_LinkExplode (entity e, entity e2)
 // stored in w_crylink_linkjoin_time.
 // could possibly network this origin and time, and display a special particle
 // effect when projectiles meet there :P
-// jspeed: MINIMUM jing speed
-// jtime: MAXIMUM jing time (0: none)
+// jspeed: joining speed (calculate this as join spread * initial speed)
 float w_crylink_linkjoin_time;
-vector W_Crylink_LinkJoin(entity e, float jspeed, float jtime)
+vector W_Crylink_LinkJoin(entity e, float jspeed)
 {
        vector avg_origin, avg_velocity;
        vector targ_origin;
@@ -134,7 +133,7 @@ vector W_Crylink_LinkJoin(entity e, float jspeed, float jtime)
        if(avg_dist == 0)
                return avg_origin; // no change needed
 
-       if(jspeed == 0 && jtime == 0)
+       if(jspeed == 0)
        {
                e.velocity = avg_velocity;
                UpdateCSQCProjectile(e);
@@ -147,14 +146,6 @@ vector W_Crylink_LinkJoin(entity e, float jspeed, float jtime)
        }
        else
        {
-               if(jtime)
-               {
-                       if(jspeed)
-                               w_crylink_linkjoin_time = min(jtime, avg_dist / jspeed);
-                       else
-                               w_crylink_linkjoin_time = jtime;
-               }
-               else
                        w_crylink_linkjoin_time = avg_dist / jspeed;
                targ_origin = avg_origin + w_crylink_linkjoin_time * avg_velocity;
 
@@ -453,7 +444,7 @@ void W_Crylink_Attack (void)
 
                other = proj; MUTATOR_CALLHOOK(EditProjectile);
        }
-       if(autocvar_g_balance_crylink_primary_joinspread != 0 || autocvar_g_balance_crylink_primary_jointime != 0)
+       if(autocvar_g_balance_crylink_primary_joinspread != 0)
        {
                self.crylink_lastgroup = proj;
                W_Crylink_CheckLinks(proj);
@@ -569,7 +560,7 @@ void W_Crylink_Attack2 (void)
 
                other = proj; MUTATOR_CALLHOOK(EditProjectile);
        }
-       if(autocvar_g_balance_crylink_secondary_joinspread != 0 || autocvar_g_balance_crylink_secondary_jointime != 0)
+       if(autocvar_g_balance_crylink_secondary_joinspread != 0)
        {
                self.crylink_lastgroup = proj;
                W_Crylink_CheckLinks(proj);
@@ -629,12 +620,12 @@ float w_crylink(float req)
 
                                        if(self.crylink_waitrelease == 1)
                                        {
-                                               pos = W_Crylink_LinkJoin(self.crylink_lastgroup, autocvar_g_balance_crylink_primary_joinspread * autocvar_g_balance_crylink_primary_speed, autocvar_g_balance_crylink_primary_jointime);
+                                               pos = W_Crylink_LinkJoin(self.crylink_lastgroup, autocvar_g_balance_crylink_primary_joinspread * autocvar_g_balance_crylink_primary_speed);
 
                                        }
                                        else
                                        {
-                                               pos = W_Crylink_LinkJoin(self.crylink_lastgroup, autocvar_g_balance_crylink_secondary_joinspread * autocvar_g_balance_crylink_secondary_speed, autocvar_g_balance_crylink_secondary_jointime);
+                                               pos = W_Crylink_LinkJoin(self.crylink_lastgroup, autocvar_g_balance_crylink_secondary_joinspread * autocvar_g_balance_crylink_secondary_speed);
                                        }
 
                                        linkjoineffect = spawn();
index 0b5d386fd85aebb6294977b673a512e1c87daa70..618a21ffe8e35c6bea70f3c4bc67de25632186df 100644 (file)
@@ -41,7 +41,7 @@ void W_HLAC_Attack (void)
 
        W_SetupShot (self, FALSE, 3, "weapons/lasergun_fire.wav", CH_WEAPON_A, autocvar_g_balance_hlac_primary_damage);
        pointparticles(particleeffectnum("laser_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
-       if (!g_norecoil)
+       if (!autocvar_g_norecoil)
        {
                self.punchangle_x = random () - 0.5;
                self.punchangle_y = random () - 0.5;
@@ -129,7 +129,7 @@ void W_HLAC_Attack2 (void)
     for(i=autocvar_g_balance_hlac_secondary_shots;i>0;--i)
         W_HLAC_Attack2f();
 
-       if (!g_norecoil)
+       if (!autocvar_g_norecoil)
        {
                self.punchangle_x = random () - 0.5;
                self.punchangle_y = random () - 0.5;
index 923ed9504c9f075f7c917981689d76d3cd4ecd9c..38793a96f2c22bef6d459982fd6613c4a8e1ca0b 100644 (file)
@@ -52,7 +52,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));
-       if (!g_norecoil)
+       if (!autocvar_g_norecoil)
        {
                self.punchangle_x = random () - 0.5;
                self.punchangle_y = random () - 0.5;
@@ -129,7 +129,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);
-       if (!g_norecoil)
+       if (!autocvar_g_norecoil)
        {
                self.punchangle_x = random () - 0.5;
                self.punchangle_y = random () - 0.5;
@@ -156,7 +156,7 @@ 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);
-       if (!g_norecoil)
+       if (!autocvar_g_norecoil)
        {
                self.punchangle_x = random () - 0.5;
                self.punchangle_y = random () - 0.5;
diff --git a/scripts/ok_nade_counter.shader b/scripts/ok_nade_counter.shader
new file mode 100644 (file)
index 0000000..130bee7
--- /dev/null
@@ -0,0 +1,90 @@
+models/ok_nade_counter/ok_nade_counter_01
+{
+       dpnoshadow
+       deformVertexes autosprite
+       dppolygonoffset -6000
+       {
+               map "models/ok_nade_counter/ok_nade_counter_01"
+               blendfunc add
+       }
+}
+models/ok_nade_counter/ok_nade_counter_02
+{
+       dpnoshadow
+       deformVertexes autosprite
+       dppolygonoffset -6000
+       {
+               map "models/ok_nade_counter/ok_nade_counter_02"
+               blendfunc add
+       }
+}
+models/ok_nade_counter/ok_nade_counter_03
+{
+       dpnoshadow
+       deformVertexes autosprite
+       dppolygonoffset -6000
+       {
+               map "models/ok_nade_counter/ok_nade_counter_03"
+               blendfunc add
+       }
+}
+models/ok_nade_counter/ok_nade_counter_04
+{
+       dpnoshadow
+       deformVertexes autosprite
+       dppolygonoffset -6000
+       {
+               map "models/ok_nade_counter/ok_nade_counter_04"
+               blendfunc add
+       }
+}
+models/ok_nade_counter/ok_nade_counter_05
+{
+       dpnoshadow
+       deformVertexes autosprite
+       dppolygonoffset -6000
+       {
+               map "models/ok_nade_counter/ok_nade_counter_05"
+               blendfunc add
+       }
+}
+models/ok_nade_counter/ok_nade_counter_06
+{
+       dpnoshadow
+       deformVertexes autosprite
+       dppolygonoffset -6000
+       {
+               map "models/ok_nade_counter/ok_nade_counter_06"
+               blendfunc add
+       }
+}
+models/ok_nade_counter/ok_nade_counter_07
+{
+       dpnoshadow
+       deformVertexes autosprite
+       dppolygonoffset -6000
+       {
+               map "models/ok_nade_counter/ok_nade_counter_07"
+               blendfunc add
+       }
+}
+models/ok_nade_counter/ok_nade_counter_08
+{
+       dpnoshadow
+       deformVertexes autosprite
+       dppolygonoffset -6000
+       {
+               map "models/ok_nade_counter/ok_nade_counter_08"
+               blendfunc add
+       }
+}
+models/ok_nade_counter/ok_nade_counter_09
+{
+       dpnoshadow
+       deformVertexes autosprite
+       dppolygonoffset -6000
+       {
+               map "models/ok_nade_counter/ok_nade_counter_09"
+               blendfunc add
+       }
+}
\ No newline at end of file
index a73e7e2064a38d6966bb223a7b425037d24b8901..366f24c6d0995654789874c83785eac06273ce11 100644 (file)
@@ -14,3 +14,4 @@ tree
 tuba
 turrets
 weapons
+ok_nade_counter
index 5c3e06aff1cc9f4db3b590407cecd65beec6db58..4a7862008348efb3190b60b0c0400cdb3946f9ac 100644 (file)
@@ -52,7 +52,7 @@ set g_vehicle_racer_rocket_cost        0
 set g_vehicle_racer_rocket_climbspeed  1600
 
 set g_vehicle_racer_rocket_locktarget           1
-set g_vehicle_racer_rocket_locking_time         0.35
+set g_vehicle_racer_rocket_locking_time         0.9
 set g_vehicle_racer_rocket_locking_releasetime  0.5
 set g_vehicle_racer_rocket_locked_time          4
 set g_vehicle_racer_rocket_locked_maxangle      1.8
index 1efc2f17534f291a1387c90af40bff49acb5fbfc..d91b79b6ceebdd6858051c24c837b21208378732 100644 (file)
@@ -29,12 +29,12 @@ set g_vehicle_raptor_bomblet_force      150
 set g_vehicle_raptor_bomblet_explode_delay 0.4
 set g_vehicle_raptor_bombs_refire       5
 
-set g_vehicle_raptor_cannon_turnspeed 60
+set g_vehicle_raptor_cannon_turnspeed 120
 set g_vehicle_raptor_cannon_turnlimit 20
 set g_vehicle_raptor_cannon_pitchlimit_up   12
 set g_vehicle_raptor_cannon_pitchlimit_down 32
 
-set g_vehicle_raptor_cannon_locktarget          1
+set g_vehicle_raptor_cannon_locktarget          0
 set g_vehicle_raptor_cannon_locking_time        0.2
 set g_vehicle_raptor_cannon_locking_releasetime 0.45
 set g_vehicle_raptor_cannon_locked_time         1
@@ -44,7 +44,7 @@ set g_vehicle_raptor_cannon_cost     1
 set g_vehicle_raptor_cannon_damage   10
 set g_vehicle_raptor_cannon_radius   60
 set g_vehicle_raptor_cannon_refire   0.03
-set g_vehicle_raptor_cannon_speed    12000
+set g_vehicle_raptor_cannon_speed    24000
 set g_vehicle_raptor_cannon_spread   0.01
 set g_vehicle_raptor_cannon_force    25
 
index 0223b09e897770b09ca9ae84b19fd561041758a9..88fba2714dbebda0df79d0d27a1150123b6023ff 100644 (file)
@@ -26,14 +26,14 @@ set g_vehicle_spiderbot_speed_strafe       400
 set g_vehicle_spiderbot_movement_inertia   0.15
 set g_vehicle_spiderbot_tiltlimit          90
 
-set g_vehicle_spiderbot_minigun_damage          12       // 400 (x2) DPS 
-set g_vehicle_spiderbot_minigun_refire          0.03
+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_ammo_cost       1
-set g_vehicle_spiderbot_minigun_ammo_max        200
+set g_vehicle_spiderbot_minigun_ammo_max        100
 set g_vehicle_spiderbot_minigun_ammo_regen      40
 set g_vehicle_spiderbot_minigun_ammo_regen_pause 1