]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge remote branch 'origin/master' into tzork/balance-tzork
authorunknown <jm@.(none)>
Thu, 11 Nov 2010 00:05:50 +0000 (01:05 +0100)
committerunknown <jm@.(none)>
Thu, 11 Nov 2010 00:05:50 +0000 (01:05 +0100)
Conflicts:
balancetZork.cfg
qcsrc/server/w_crylink.qc

1  2 
balance25.cfg
balanceLeeStricklin.cfg
balanceNexSVN.cfg
balanceSamual.cfg
balanceTest.cfg
balanceXonotic.cfg
balancetZork.cfg
qcsrc/server/cl_client.qc
qcsrc/server/defs.qh
qcsrc/server/w_crylink.qc

diff --combined balance25.cfg
index 48c1aa37161f091a1b45bc148de2310412cb155c,116c9a1cea86e3256d84e974d3f5725e637f68d0..1427df5d7484d406d45df152145ecddf19a2538c
@@@ -263,17 -263,6 +263,17 @@@ set g_balance_shotgun_secondary_refire 
  set g_balance_shotgun_secondary_animtime 1
  // }}}
  // {{{ uzi
 +set g_balance_uzi_mode 0                              // Activates varible spread for sustained & burst mode secondary
 +set g_balance_uzi_spread_min 0.02
 +set g_balance_uzi_spread_max 0.6
 +set g_balance_uzi_spread_add 0.012
 +set g_balance_uzi_burst 0                             // # of bullets in a burst (if set to 2 or more)
 +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_force 50
 +set g_balance_uzi_burst_ammo 3
  set g_balance_uzi_first 1
  set g_balance_uzi_first_damage 30
  set g_balance_uzi_first_force 50
@@@ -305,8 -294,6 +305,6 @@@ set g_balance_grenadelauncher_primary_a
  set g_balance_grenadelauncher_primary_ammo 2
  set g_balance_grenadelauncher_primary_health 25
  set g_balance_grenadelauncher_primary_damageforcescale 4
- set g_balance_grenadelauncher_primary_bouncefactor 0.5
- set g_balance_grenadelauncher_primary_bouncestop 0.075
  set g_balance_grenadelauncher_primary_remote_minbouncecnt 0
  
  set g_balance_grenadelauncher_secondary_type 1
@@@ -325,9 -312,10 +323,10 @@@ set g_balance_grenadelauncher_secondary
  set g_balance_grenadelauncher_secondary_ammo 2
  set g_balance_grenadelauncher_secondary_health 10
  set g_balance_grenadelauncher_secondary_damageforcescale 4
- set g_balance_grenadelauncher_secondary_bouncefactor 0.5
- set g_balance_grenadelauncher_secondary_bouncestop 0.075
  set g_balance_grenadelauncher_secondary_remote_detonateprimary 0
+ set g_balance_grenadelauncher_bouncefactor 0.5
+ set g_balance_grenadelauncher_bouncestop 0.075
  // }}}
  // {{{ minelayer // TODO
  set g_balance_minelayer_damage 35
@@@ -385,8 -373,6 +384,8 @@@ set g_balance_electro_secondary_ammo 
  set g_balance_electro_secondary_health 5
  set g_balance_electro_secondary_damageforcescale 4
  set g_balance_electro_secondary_count 1
 +set g_balance_electro_secondary_bouncefactor 1
 +set g_balance_electro_secondary_bouncestop 0
  set g_balance_electro_combo_damage 80
  set g_balance_electro_combo_edgedamage 0
  set g_balance_electro_combo_force 200
@@@ -411,8 -397,6 +410,6 @@@ set g_balance_crylink_primary_joinspee
  
  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_star_lifetime 0.1 // range: 700 full, fades to 2450
- set g_balance_crylink_primary_star_fadetime 0.25
  set g_balance_crylink_primary_other_lifetime 0.1 // range: 700 full, fades to 2450
  set g_balance_crylink_primary_other_fadetime 0.25
  
@@@ -466,7 -450,6 +463,7 @@@ set g_balance_nex_charge_start 
  set g_balance_nex_charge_rate 0.1
  set g_balance_nex_charge_limit 0.5
  set g_balance_nex_charge_rot_rate 0
 +set g_balance_nex_charge_rot_pause 0 // Dont rot down untill this long after release of charge button
  set g_balance_nex_charge_shot_multiplier 0.5
  set g_balance_nex_charge_velocity_rate 0.2
  set g_balance_nex_charge_minspeed 400
@@@ -519,11 -502,6 +516,6 @@@ set g_balance_rocketlauncher_guiderated
  set g_balance_rocketlauncher_guidegoal 512 // goal distance for (non-laser) guiding (higher = less control, lower = erratic)
  set g_balance_rocketlauncher_guidedelay 0.15 // delay before guiding kicks in
  set g_balance_rocketlauncher_guidestop 0 // stop guiding when firing again
- set g_balance_rocketlauncher_laserguided_speed 1000 //650
- set g_balance_rocketlauncher_laserguided_speedaccel 0
- set g_balance_rocketlauncher_laserguided_speedstart 1000
- set g_balance_rocketlauncher_laserguided_turnrate 0.75 //0.5
- set g_balance_rocketlauncher_laserguided_allow_steal 1
  set g_balance_rocketlauncher_remote_damage 105
  set g_balance_rocketlauncher_remote_edgedamage 40
  set g_balance_rocketlauncher_remote_radius 150
diff --combined balanceLeeStricklin.cfg
index 51eb4c7f9e84b5e06b4b182e9d99a3a14d710489,807a8af180860a216b2953e32aa931c3d0a39ede..4317a9da6ece1effccb5dc0ca6fe7edcd7da264f
@@@ -274,17 -274,6 +274,17 @@@ set g_balance_shotgun_secondary_refire 
  set g_balance_shotgun_secondary_animtime 1
  // }}}
  // {{{ uzi
 +set g_balance_uzi_mode 0                              // Activates varible spread for sustained & burst mode secondary
 +set g_balance_uzi_spread_min 0.02
 +set g_balance_uzi_spread_max 0.6
 +set g_balance_uzi_spread_add 0.012
 +set g_balance_uzi_burst 0                             // # of bullets in a burst (if set to 2 or more)
 +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_force 50
 +set g_balance_uzi_burst_ammo 3
  set g_balance_uzi_first 1
  set g_balance_uzi_first_damage 26
  set g_balance_uzi_first_force -30
@@@ -316,8 -305,6 +316,6 @@@ set g_balance_grenadelauncher_primary_a
  set g_balance_grenadelauncher_primary_ammo 2
  set g_balance_grenadelauncher_primary_health 72
  set g_balance_grenadelauncher_primary_damageforcescale 0
- set g_balance_grenadelauncher_primary_bouncefactor 0.7
- set g_balance_grenadelauncher_primary_bouncestop 0.12
  set g_balance_grenadelauncher_primary_remote_minbouncecnt 0
  
  set g_balance_grenadelauncher_secondary_type 1
@@@ -336,9 -323,10 +334,10 @@@ set g_balance_grenadelauncher_secondary
  set g_balance_grenadelauncher_secondary_ammo 2
  set g_balance_grenadelauncher_secondary_health 40
  set g_balance_grenadelauncher_secondary_damageforcescale 0
- set g_balance_grenadelauncher_secondary_bouncefactor 0.7
- set g_balance_grenadelauncher_secondary_bouncestop 0.12
  set g_balance_grenadelauncher_secondary_remote_detonateprimary 0
+ set g_balance_grenadelauncher_bouncefactor 0.7
+ set g_balance_grenadelauncher_bouncestop 0.12
  // }}}
  // {{{ minelayer // TODO
  set g_balance_minelayer_damage 35
@@@ -396,8 -384,6 +395,8 @@@ set g_balance_electro_secondary_ammo 
  set g_balance_electro_secondary_health 10
  set g_balance_electro_secondary_damageforcescale 4
  set g_balance_electro_secondary_count 3
 +set g_balance_electro_secondary_bouncefactor 1
 +set g_balance_electro_secondary_bouncestop 0
  set g_balance_electro_combo_damage 70
  set g_balance_electro_combo_edgedamage 0
  set g_balance_electro_combo_force 200
@@@ -422,8 -408,6 +421,6 @@@ set g_balance_crylink_primary_joinspee
  
  set g_balance_crylink_primary_middle_lifetime 5 // range: 10000 full, fades to 20000
  set g_balance_crylink_primary_middle_fadetime 5
- set g_balance_crylink_primary_star_lifetime 2 // range: 800 full, fades to 1300
- set g_balance_crylink_primary_star_fadetime 0.25
  set g_balance_crylink_primary_other_lifetime 2 // range: 800 full, fades to 1300
  set g_balance_crylink_primary_other_fadetime 0.25
  
@@@ -477,7 -461,6 +474,7 @@@ set g_balance_nex_charge_start 
  set g_balance_nex_charge_rate 0.1
  set g_balance_nex_charge_limit 0.5
  set g_balance_nex_charge_rot_rate 0
 +set g_balance_nex_charge_rot_pause 0 // Dont rot down untill this long after release of charge button
  set g_balance_nex_charge_shot_multiplier 0.5
  set g_balance_nex_charge_velocity_rate 0.2
  set g_balance_nex_charge_minspeed 400
@@@ -530,11 -513,6 +527,6 @@@ set g_balance_rocketlauncher_guiderated
  set g_balance_rocketlauncher_guidegoal 512 // goal distance for (non-laser) guiding (higher = less control, lower = erratic)
  set g_balance_rocketlauncher_guidedelay 0.15 // delay before guiding kicks in
  set g_balance_rocketlauncher_guidestop 0 // stop guiding when firing again
- set g_balance_rocketlauncher_laserguided_speed 1000 //650
- set g_balance_rocketlauncher_laserguided_speedaccel 0
- set g_balance_rocketlauncher_laserguided_speedstart 1000
- set g_balance_rocketlauncher_laserguided_turnrate 0.60 //0.5
- set g_balance_rocketlauncher_laserguided_allow_steal 1
  set g_balance_rocketlauncher_remote_damage 120
  set g_balance_rocketlauncher_remote_edgedamage 46
  set g_balance_rocketlauncher_remote_radius 185
diff --combined balanceNexSVN.cfg
index e01405114a8f5eea812bc99f987f8d1a2a67f98e,145db5ddf1a1a6efb64d50154849a5124456d457..f3b1495726bd7a01f290bf3ad19b71ffd21670fd
@@@ -263,17 -263,6 +263,17 @@@ set g_balance_shotgun_secondary_refire 
  set g_balance_shotgun_secondary_animtime 1
  // }}}
  // {{{ uzi
 +set g_balance_uzi_mode 0                              // Activates varible spread for sustained & burst mode secondary
 +set g_balance_uzi_spread_min 0.02
 +set g_balance_uzi_spread_max 0.6
 +set g_balance_uzi_spread_add 0.012
 +set g_balance_uzi_burst 0                             // # of bullets in a burst (if set to 2 or more)
 +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_force 50
 +set g_balance_uzi_burst_ammo 3
  set g_balance_uzi_first 1
  set g_balance_uzi_first_damage 30
  set g_balance_uzi_first_force 50
@@@ -305,8 -294,6 +305,6 @@@ set g_balance_grenadelauncher_primary_a
  set g_balance_grenadelauncher_primary_ammo 2
  set g_balance_grenadelauncher_primary_health 25
  set g_balance_grenadelauncher_primary_damageforcescale 4
- set g_balance_grenadelauncher_primary_bouncefactor 0.5
- set g_balance_grenadelauncher_primary_bouncestop 0.075
  set g_balance_grenadelauncher_primary_remote_minbouncecnt 0
  set g_balance_grenadelauncher_secondary_type 1
  set g_balance_grenadelauncher_secondary_damage 70
@@@ -324,9 -311,10 +322,10 @@@ set g_balance_grenadelauncher_secondary
  set g_balance_grenadelauncher_secondary_ammo 2
  set g_balance_grenadelauncher_secondary_health 10
  set g_balance_grenadelauncher_secondary_damageforcescale 4
- set g_balance_grenadelauncher_secondary_bouncefactor 0.5
- set g_balance_grenadelauncher_secondary_bouncestop 0.075
  set g_balance_grenadelauncher_secondary_remote_detonateprimary 0
+ set g_balance_grenadelauncher_bouncefactor 0.5
+ set g_balance_grenadelauncher_bouncestop 0.075
  // }}}
  // {{{ minelayer // TODO
  set g_balance_minelayer_damage 35
@@@ -384,8 -372,6 +383,8 @@@ set g_balance_electro_secondary_ammo 
  set g_balance_electro_secondary_health 5
  set g_balance_electro_secondary_damageforcescale 4
  set g_balance_electro_secondary_count 1
 +set g_balance_electro_secondary_bouncefactor 1
 +set g_balance_electro_secondary_bouncestop 0
  set g_balance_electro_combo_damage 80
  set g_balance_electro_combo_edgedamage 0
  set g_balance_electro_combo_force 200
@@@ -410,8 -396,6 +409,6 @@@ set g_balance_crylink_primary_joinspee
  
  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_star_lifetime 0.1 // range: 700 full, fades to 2450
- set g_balance_crylink_primary_star_fadetime 0.25
  set g_balance_crylink_primary_other_lifetime 0.1 // range: 700 full, fades to 2450
  set g_balance_crylink_primary_other_fadetime 0.25
  
@@@ -465,7 -449,6 +462,7 @@@ set g_balance_nex_charge_start 
  set g_balance_nex_charge_rate 0.1
  set g_balance_nex_charge_limit 0.5
  set g_balance_nex_charge_rot_rate 0
 +set g_balance_nex_charge_rot_pause 0 // Dont rot down untill this long after release of charge button
  set g_balance_nex_charge_shot_multiplier 0.5
  set g_balance_nex_charge_velocity_rate 0.2
  set g_balance_nex_charge_minspeed 400
@@@ -518,11 -501,6 +515,6 @@@ set g_balance_rocketlauncher_guiderated
  set g_balance_rocketlauncher_guidegoal 512 // goal distance for (non-laser) guiding (higher = less control, lower = erratic)
  set g_balance_rocketlauncher_guidedelay 0.15 // delay before guiding kicks in
  set g_balance_rocketlauncher_guidestop 0 // stop guiding when firing again
- set g_balance_rocketlauncher_laserguided_speed 1000 //650
- set g_balance_rocketlauncher_laserguided_speedaccel 0
- set g_balance_rocketlauncher_laserguided_speedstart 1000
- set g_balance_rocketlauncher_laserguided_turnrate 0.75 //0.5
- set g_balance_rocketlauncher_laserguided_allow_steal 1
  set g_balance_rocketlauncher_remote_damage 105
  set g_balance_rocketlauncher_remote_edgedamage 40
  set g_balance_rocketlauncher_remote_radius 150
diff --combined balanceSamual.cfg
index 2071968d4f1b42cd490888c6c706a1b42d5c17ff,e33fb631ec64595d8890c3fed5918a440afb8584..6e105fb991efc3312f02e76e57148cc8abba9606
@@@ -263,17 -263,6 +263,17 @@@ set g_balance_shotgun_secondary_refire 
  set g_balance_shotgun_secondary_animtime 1
  // }}}
  // {{{ uzi
 +set g_balance_uzi_mode 0                              // Activates varible spread for sustained & burst mode secondary
 +set g_balance_uzi_spread_min 0.02
 +set g_balance_uzi_spread_max 0.6
 +set g_balance_uzi_spread_add 0.012
 +set g_balance_uzi_burst 0                             // # of bullets in a burst (if set to 2 or more)
 +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_force 50
 +set g_balance_uzi_burst_ammo 3
  set g_balance_uzi_first 1
  set g_balance_uzi_first_damage 12
  set g_balance_uzi_first_force 5
@@@ -305,8 -294,6 +305,6 @@@ set g_balance_grenadelauncher_primary_a
  set g_balance_grenadelauncher_primary_ammo 2
  set g_balance_grenadelauncher_primary_health 25
  set g_balance_grenadelauncher_primary_damageforcescale 4
- set g_balance_grenadelauncher_primary_bouncefactor 0.5
- set g_balance_grenadelauncher_primary_bouncestop 0.075
  set g_balance_grenadelauncher_primary_remote_minbouncecnt 0
  
  set g_balance_grenadelauncher_secondary_type 1
@@@ -325,9 -312,10 +323,10 @@@ set g_balance_grenadelauncher_secondary
  set g_balance_grenadelauncher_secondary_ammo 2
  set g_balance_grenadelauncher_secondary_health 70
  set g_balance_grenadelauncher_secondary_damageforcescale 4
- set g_balance_grenadelauncher_secondary_bouncefactor 0.5
- set g_balance_grenadelauncher_secondary_bouncestop 0.075
  set g_balance_grenadelauncher_secondary_remote_detonateprimary 1
+ set g_balance_grenadelauncher_bouncefactor 0.5
+ set g_balance_grenadelauncher_bouncestop 0.075
  // }}}
  // {{{ minelayer // TODO
  set g_balance_minelayer_damage 35
@@@ -385,8 -373,6 +384,8 @@@ set g_balance_electro_secondary_ammo 
  set g_balance_electro_secondary_health 5
  set g_balance_electro_secondary_damageforcescale 4
  set g_balance_electro_secondary_count 3
 +set g_balance_electro_secondary_bouncefactor 1
 +set g_balance_electro_secondary_bouncestop 0
  set g_balance_electro_combo_damage 50
  set g_balance_electro_combo_edgedamage 0
  set g_balance_electro_combo_force 200
@@@ -411,8 -397,6 +410,6 @@@ set g_balance_crylink_primary_joinspee
  
  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_star_lifetime 0.1 // range: 700 full, fades to 2450
- set g_balance_crylink_primary_star_fadetime 0.25
  set g_balance_crylink_primary_other_lifetime 0.1 // range: 700 full, fades to 2450
  set g_balance_crylink_primary_other_fadetime 0.25
  
@@@ -466,7 -450,6 +463,7 @@@ set g_balance_nex_charge_start 
  set g_balance_nex_charge_rate 0.1
  set g_balance_nex_charge_limit 0.5
  set g_balance_nex_charge_rot_rate 0
 +set g_balance_nex_charge_rot_pause 0 // Dont rot down untill this long after release of charge button
  set g_balance_nex_charge_shot_multiplier 0.5
  set g_balance_nex_charge_velocity_rate 0.2
  set g_balance_nex_charge_minspeed 400
@@@ -519,11 -502,6 +516,6 @@@ set g_balance_rocketlauncher_guiderated
  set g_balance_rocketlauncher_guidegoal 512 // goal distance for (non-laser) guiding (higher = less control, lower = erratic)
  set g_balance_rocketlauncher_guidedelay 0.15 // delay before guiding kicks in
  set g_balance_rocketlauncher_guidestop 0 // stop guiding when firing again
- set g_balance_rocketlauncher_laserguided_speed 1000 //650
- set g_balance_rocketlauncher_laserguided_speedaccel 0
- set g_balance_rocketlauncher_laserguided_speedstart 1000
- set g_balance_rocketlauncher_laserguided_turnrate 0.75 //0.5
- set g_balance_rocketlauncher_laserguided_allow_steal 1
  set g_balance_rocketlauncher_remote_damage 80
  set g_balance_rocketlauncher_remote_edgedamage 40
  set g_balance_rocketlauncher_remote_radius 100
diff --combined balanceTest.cfg
index 65f0e5bdedf3039be6135e33b3d6fd321e3fd25d,ba4630bbd515a72375a3af956da89ba06f05d7b1..dfae960420e96949bfd4aaf12bc9a30bf6955309
@@@ -263,17 -263,6 +263,17 @@@ set g_balance_shotgun_secondary_refire 
  set g_balance_shotgun_secondary_animtime 1
  // }}}
  // {{{ uzi
 +set g_balance_uzi_mode 0                              // Activates varible spread for sustained & burst mode secondary
 +set g_balance_uzi_spread_min 0.02
 +set g_balance_uzi_spread_max 0.6
 +set g_balance_uzi_spread_add 0.012
 +set g_balance_uzi_burst 0                             // # of bullets in a burst (if set to 2 or more)
 +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_force 50
 +set g_balance_uzi_burst_ammo 3
  set g_balance_uzi_first 1
  set g_balance_uzi_first_damage 30
  set g_balance_uzi_first_force 50
@@@ -305,8 -294,6 +305,6 @@@ set g_balance_grenadelauncher_primary_a
  set g_balance_grenadelauncher_primary_ammo 2
  set g_balance_grenadelauncher_primary_health 25
  set g_balance_grenadelauncher_primary_damageforcescale 4
- set g_balance_grenadelauncher_primary_bouncefactor 0.5
- set g_balance_grenadelauncher_primary_bouncestop 0.075
  set g_balance_grenadelauncher_primary_remote_minbouncecnt 0
  
  set g_balance_grenadelauncher_secondary_type 1
@@@ -325,9 -312,10 +323,10 @@@ set g_balance_grenadelauncher_secondary
  set g_balance_grenadelauncher_secondary_ammo 2
  set g_balance_grenadelauncher_secondary_health 10
  set g_balance_grenadelauncher_secondary_damageforcescale 4
- set g_balance_grenadelauncher_secondary_bouncefactor 0.5
- set g_balance_grenadelauncher_secondary_bouncestop 0.075
  set g_balance_grenadelauncher_secondary_remote_detonateprimary 0
+ set g_balance_grenadelauncher_bouncefactor 0.5
+ set g_balance_grenadelauncher_bouncestop 0.075
  // }}}
  // {{{ minelayer // TODO
  set g_balance_minelayer_damage 35
@@@ -385,8 -373,6 +384,8 @@@ set g_balance_electro_secondary_ammo 
  set g_balance_electro_secondary_health 10
  set g_balance_electro_secondary_damageforcescale 4
  set g_balance_electro_secondary_count 3
 +set g_balance_electro_secondary_bouncefactor 1
 +set g_balance_electro_secondary_bouncestop 0
  set g_balance_electro_combo_damage 60
  set g_balance_electro_combo_edgedamage 0
  set g_balance_electro_combo_force 80
@@@ -407,12 -393,10 +406,10 @@@ set g_balance_crylink_primary_refire 
  set g_balance_crylink_primary_animtime 0.4
  set g_balance_crylink_primary_ammo 2
  set g_balance_crylink_primary_bouncedamagefactor 0.2
- set g_balance_crylink_primary_joinspeed 1000
+ set g_balance_crylink_primary_joinspeed 150
  
  set g_balance_crylink_primary_middle_lifetime 5 // range: 10000 full, fades to 20000
  set g_balance_crylink_primary_middle_fadetime 5
- set g_balance_crylink_primary_star_lifetime 2 // range: 800 full, fades to 1300
- set g_balance_crylink_primary_star_fadetime 0.25
  set g_balance_crylink_primary_other_lifetime 2 // range: 800 full, fades to 1300
  set g_balance_crylink_primary_other_fadetime 0.25
  
@@@ -429,7 -413,7 +426,7 @@@ set g_balance_crylink_secondary_refire 
  set g_balance_crylink_secondary_animtime 0.15
  set g_balance_crylink_secondary_ammo 1
  set g_balance_crylink_secondary_bouncedamagefactor 0.5
- set g_balance_crylink_secondary_joinspeed 1000
+ set g_balance_crylink_secondary_joinspeed 150
  
  set g_balance_crylink_secondary_middle_lifetime 5 // range: 10000 full, fades to 10000
  set g_balance_crylink_secondary_middle_fadetime 5
@@@ -466,7 -450,6 +463,7 @@@ set g_balance_nex_charge_start 
  set g_balance_nex_charge_rate 0.35
  set g_balance_nex_charge_limit 0.5
  set g_balance_nex_charge_rot_rate 0
 +set g_balance_nex_charge_rot_pause 0 // Dont rot down untill this long after release of charge button
  set g_balance_nex_charge_shot_multiplier 0
  set g_balance_nex_charge_velocity_rate 0
  set g_balance_nex_charge_minspeed 400
@@@ -519,11 -502,6 +516,6 @@@ set g_balance_rocketlauncher_guiderated
  set g_balance_rocketlauncher_guidegoal 512 // goal distance for (non-laser) guiding (higher = less control, lower = erratic)
  set g_balance_rocketlauncher_guidedelay 0.15 // delay before guiding kicks in
  set g_balance_rocketlauncher_guidestop 0 // stop guiding when firing again
- set g_balance_rocketlauncher_laserguided_speed 1000 //650
- set g_balance_rocketlauncher_laserguided_speedaccel 0
- set g_balance_rocketlauncher_laserguided_speedstart 1000
- set g_balance_rocketlauncher_laserguided_turnrate 0.75 //0.5
- set g_balance_rocketlauncher_laserguided_allow_steal 1
  set g_balance_rocketlauncher_remote_damage 90
  set g_balance_rocketlauncher_remote_edgedamage 20
  set g_balance_rocketlauncher_remote_radius 125
diff --combined balanceXonotic.cfg
index d550c717ddd78619bda588bed7d782cb7a800fb5,189ac077f9e01f16bce012e047fdf1f31d010fb1..8c4ad5529e3e8f9a33a137f576be428571843e4a
@@@ -263,17 -263,6 +263,17 @@@ set g_balance_shotgun_secondary_refire 
  set g_balance_shotgun_secondary_animtime 1
  // }}}
  // {{{ uzi
 +set g_balance_uzi_mode 0                              // Activates varible spread for sustained & burst mode secondary
 +set g_balance_uzi_spread_min 0.02
 +set g_balance_uzi_spread_max 0.6
 +set g_balance_uzi_spread_add 0.012
 +set g_balance_uzi_burst 0                             // # of bullets in a burst (if set to 2 or more)
 +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_force 50
 +set g_balance_uzi_burst_ammo 3
  set g_balance_uzi_first 1
  set g_balance_uzi_first_damage 18
  set g_balance_uzi_first_force 35
@@@ -305,8 -294,6 +305,6 @@@ set g_balance_grenadelauncher_primary_a
  set g_balance_grenadelauncher_primary_ammo 2
  set g_balance_grenadelauncher_primary_health 80
  set g_balance_grenadelauncher_primary_damageforcescale 0
- set g_balance_grenadelauncher_primary_bouncefactor 0.5
- set g_balance_grenadelauncher_primary_bouncestop 0.12
  set g_balance_grenadelauncher_primary_remote_minbouncecnt 0
  
  set g_balance_grenadelauncher_secondary_type 1
@@@ -325,9 -312,10 +323,10 @@@ set g_balance_grenadelauncher_secondary
  set g_balance_grenadelauncher_secondary_ammo 2
  set g_balance_grenadelauncher_secondary_health 40
  set g_balance_grenadelauncher_secondary_damageforcescale 0
- set g_balance_grenadelauncher_secondary_bouncefactor 0.5
- set g_balance_grenadelauncher_secondary_bouncestop 0.12
  set g_balance_grenadelauncher_secondary_remote_detonateprimary 0
+ set g_balance_grenadelauncher_bouncefactor 0.5
+ set g_balance_grenadelauncher_bouncestop 0.12
  // }}}
  // {{{ minelayer // TODO
  set g_balance_minelayer_damage 35
@@@ -385,8 -373,6 +384,8 @@@ set g_balance_electro_secondary_ammo 
  set g_balance_electro_secondary_health 10
  set g_balance_electro_secondary_damageforcescale 4
  set g_balance_electro_secondary_count 3
 +set g_balance_electro_secondary_bouncefactor 1
 +set g_balance_electro_secondary_bouncestop 0
  set g_balance_electro_combo_damage 40
  set g_balance_electro_combo_edgedamage 0
  set g_balance_electro_combo_force 80
@@@ -407,12 -393,10 +406,10 @@@ set g_balance_crylink_primary_refire 0.
  set g_balance_crylink_primary_animtime 0.4
  set g_balance_crylink_primary_ammo 2
  set g_balance_crylink_primary_bouncedamagefactor 0.2
- set g_balance_crylink_primary_joinspeed 0
+ set g_balance_crylink_primary_joinspeed 150
  
  set g_balance_crylink_primary_middle_lifetime 5 // range: 10000 full, fades to 20000
  set g_balance_crylink_primary_middle_fadetime 5
- set g_balance_crylink_primary_star_lifetime 2 // range: 800 full, fades to 1300
- set g_balance_crylink_primary_star_fadetime 0.25
  set g_balance_crylink_primary_other_lifetime 2 // range: 800 full, fades to 1300
  set g_balance_crylink_primary_other_fadetime 0.25
  
@@@ -466,7 -450,6 +463,7 @@@ set g_balance_nex_charge_start 0.
  set g_balance_nex_charge_rate 0.05
  set g_balance_nex_charge_limit 0.5
  set g_balance_nex_charge_rot_rate 0.01
 +set g_balance_nex_charge_rot_pause 0 // Dont rot down untill this long after release of charge button
  set g_balance_nex_charge_shot_multiplier 0.675
  set g_balance_nex_charge_velocity_rate 0.15
  set g_balance_nex_charge_minspeed 400
@@@ -519,11 -502,6 +516,6 @@@ set g_balance_rocketlauncher_guiderated
  set g_balance_rocketlauncher_guidegoal 512 // goal distance for (non-laser) guiding (higher = less control, lower = erratic)
  set g_balance_rocketlauncher_guidedelay 0.15 // delay before guiding kicks in
  set g_balance_rocketlauncher_guidestop 0 // stop guiding when firing again
- set g_balance_rocketlauncher_laserguided_speed 1000 //650
- set g_balance_rocketlauncher_laserguided_speedaccel 0
- set g_balance_rocketlauncher_laserguided_speedstart 1000
- set g_balance_rocketlauncher_laserguided_turnrate 0.75 //0.5
- set g_balance_rocketlauncher_laserguided_allow_steal 1
  set g_balance_rocketlauncher_remote_damage 50
  set g_balance_rocketlauncher_remote_edgedamage 16.5
  set g_balance_rocketlauncher_remote_radius 120
@@@ -597,7 -575,7 +589,7 @@@ set g_balance_campingrifle_auto_reload_
  set g_balance_campingrifle_bursttime 0
  set g_balance_campingrifle_primary_tracer 1
  set g_balance_campingrifle_primary_damage 75
- set g_balance_campingrifle_primary_headshotaddeddamage 75
+ set g_balance_campingrifle_primary_headshotaddeddamage 125
  set g_balance_campingrifle_primary_spread 0
  set g_balance_campingrifle_primary_force 2
  set g_balance_campingrifle_primary_speed 40000
@@@ -611,7 -589,7 +603,7 @@@ set g_balance_campingrifle_primary_bull
  set g_balance_campingrifle_secondary 1
  set g_balance_campingrifle_secondary_tracer 0
  set g_balance_campingrifle_secondary_damage 50
- set g_balance_campingrifle_secondary_headshotaddeddamage 50 // 50 damage only on head
+ set g_balance_campingrifle_secondary_headshotaddeddamage 75
  set g_balance_campingrifle_secondary_spread 0
  set g_balance_campingrifle_secondary_force 2
  set g_balance_campingrifle_secondary_speed 20000
diff --combined balancetZork.cfg
index 11733c3fa429a2479e47140c685cef624c8497ad,ab53f475339e2d06d2b511c3d6f01d9ea8fefde2..22371f25e67f91e8cf5f735edd9ae6b4bf636911
@@@ -55,67 -55,52 +55,67 @@@ set g_balance_nix_ammoincr_fuel 
  // {{{ pickup items
  set g_pickup_ammo_anyway 1
  set g_pickup_weapons_anyway 1
 +
  set g_pickup_shells 20
  set g_pickup_shells_weapon 10
 -set g_pickup_shells_max 45
 -set g_pickup_nails 120
 +set g_pickup_shells_max 50
 +
 +set g_pickup_nails 60
  set g_pickup_nails_weapon 60
  set g_pickup_nails_max 300
 +
  set g_pickup_rockets 25
  set g_pickup_rockets_weapon 15
  set g_pickup_rockets_max 150
 +
  set g_pickup_cells 30
  set g_pickup_cells_weapon 20
 -set g_pickup_cells_max 200
 +set g_pickup_cells_max 300
 +
  set g_pickup_fuel 25
  set g_pickup_fuel_weapon 15
  set g_pickup_fuel_jetpack 50
  set g_pickup_fuel_max 999
 +
  set g_pickup_armorsmall 5
  set g_pickup_armorsmall_max 999
  set g_pickup_armorsmall_anyway 0
 +
  set g_pickup_armormedium 25
 -set g_pickup_armormedium_max 999
 +set g_pickup_armormedium_max 100
  set g_pickup_armormedium_anyway 0
 +
  set g_pickup_armorbig 50
 -set g_pickup_armorbig_max 999
 +set g_pickup_armorbig_max 150
  set g_pickup_armorbig_anyway 0
 +
  set g_pickup_armorlarge 100
  set g_pickup_armorlarge_max 999
  set g_pickup_armorlarge_anyway 0
 +
  set g_pickup_healthsmall 5
  set g_pickup_healthsmall_max 999
  set g_pickup_healthsmall_anyway 0
 +
  set g_pickup_healthmedium 25
 -set g_pickup_healthmedium_max 999
 +set g_pickup_healthmedium_max 100
  set g_pickup_healthmedium_anyway 0
 +
  set g_pickup_healthlarge 50
 -set g_pickup_healthlarge_max 999
 +set g_pickup_healthlarge_max 150
  set g_pickup_healthlarge_anyway 0
 +
  set g_pickup_healthmega 100
  set g_pickup_healthmega_max 999
  set g_pickup_healthmega_anyway 0
 +
  set g_pickup_respawntime_short 15
  set g_pickup_respawntime_medium 20
  set g_pickup_respawntime_long 30
  set g_pickup_respawntime_powerup 120
 -set g_pickup_respawntime_weapon 5
 -set g_pickup_respawntime_ammo 25
 +set g_pickup_respawntime_weapon 20
 +set g_pickup_respawntime_ammo 15
 +
  set g_pickup_respawntimejitter_short 0
  set g_pickup_respawntimejitter_medium 0
  set g_pickup_respawntimejitter_long 0
@@@ -130,18 -115,18 +130,18 @@@ set g_balance_health_regenlinear 
  set g_balance_pause_health_regen 5
  set g_balance_pause_health_regen_spawn 0
  set g_balance_health_rot 0.1
 -set g_balance_health_rotlinear 0
 -set g_balance_pause_health_rot 5
 -set g_balance_pause_health_rot_spawn 10
 +set g_balance_health_rotlinear 2.5
 +set g_balance_pause_health_rot 4
 +set g_balance_pause_health_rot_spawn 8
  set g_balance_health_regenstable 100
  set g_balance_health_rotstable 100
  set g_balance_health_limit 999
  set g_balance_armor_regen 0
  set g_balance_armor_regenlinear 0
  set g_balance_armor_rot 0.1
 -set g_balance_armor_rotlinear 0
 -set g_balance_pause_armor_rot 5
 -set g_balance_pause_armor_rot_spawn 10
 +set g_balance_armor_rotlinear 2.5
 +set g_balance_pause_armor_rot 4
 +set g_balance_pause_armor_rot_spawn 8
  set g_balance_armor_regenstable 100
  set g_balance_armor_rotstable 100
  set g_balance_armor_limit 999
@@@ -151,15 -136,15 +151,15 @@@ set g_balance_fuel_regenlinear 
  set g_balance_pause_fuel_regen 2 // other than this, fuel uses the health regen counter
  set g_balance_fuel_rot 0.05
  set g_balance_fuel_rotlinear 0
 -set g_balance_pause_fuel_rot 5
 -set g_balance_pause_fuel_rot_spawn 10
 +set g_balance_pause_fuel_rot 4
 +set g_balance_pause_fuel_rot_spawn 8
  set g_balance_fuel_regenstable 50
  set g_balance_fuel_rotstable 100
  set g_balance_fuel_limit 999
  // }}}
  
  // {{{ misc
 -set g_balance_selfdamagepercent 0.65
 +set g_balance_selfdamagepercent 0.6
  set g_balance_weaponswitchdelay 0.15
  set g_weaponspeedfactor 1 "weapon projectile speed multiplier"
  set g_weaponratefactor 1 "weapon fire rate multiplier"
@@@ -191,15 -176,15 +191,15 @@@ set g_projectiles_spread_style 
  // 7: forward + circle with (1-r)(2-r) falloff
  set g_balance_falldamage_deadminspeed 150
  set g_balance_falldamage_minspeed 800
 -set g_balance_falldamage_factor 0.20
 -set g_balance_falldamage_maxdamage 15
 +set g_balance_falldamage_factor 0.02 // maxspeed = minspeed + maxdamage / factor = 4550
 +set g_balance_falldamage_maxdamage 75
  // }}}
  
  // {{{ powerups
  set g_balance_powerup_invincible_takedamage 0.3
  set g_balance_powerup_invincible_time 30
  set g_balance_powerup_strength_damage 3
 -set g_balance_powerup_strength_force 4
 +set g_balance_powerup_strength_force 3
  set g_balance_powerup_strength_time 30
  set g_balance_powerup_strength_selfdamage 1.5
  set g_balance_powerup_strength_selfforce 1.5
@@@ -227,11 -212,11 +227,11 @@@ set g_balance_grapplehook_health 13
  
  // {{{ weapon properties
  // {{{ laser
 -set g_balance_laser_primary_damage 20 // dps 33, hope that's not too high
 -set g_balance_laser_primary_edgedamage 20
 -set g_balance_laser_primary_force 270
 +set g_balance_laser_primary_damage 20 
 +set g_balance_laser_primary_edgedamage 10
 +set g_balance_laser_primary_force 230
  set g_balance_laser_primary_radius 60
 -set g_balance_laser_primary_speed 4000
 +set g_balance_laser_primary_speed 9000
  set g_balance_laser_primary_spread 0
  set g_balance_laser_primary_refire 0.6
  set g_balance_laser_primary_animtime 0.6
@@@ -239,7 -224,7 +239,7 @@@ set g_balance_laser_primary_lifetime 
  set g_balance_laser_primary_shotangle 0
  set g_balance_laser_primary_delay 0
  set g_balance_laser_primary_gauntlet 0
 -set g_balance_laser_primary_force_zscale 1
 +set g_balance_laser_primary_force_zscale 1.2
  set g_balance_laser_primary_force_velocitybias 0
  set g_balance_laser_secondary 0 // when 1, a secondary laser mode exists
  set g_balance_laser_secondary_damage 35
@@@ -260,7 -245,7 +260,7 @@@ set g_balance_laser_secondary_force_vel
  // {{{ shotgun
  set g_balance_shotgun_primary_bullets 10
  set g_balance_shotgun_primary_damage 5
 -set g_balance_shotgun_primary_force 60
 +set g_balance_shotgun_primary_force 5
  set g_balance_shotgun_primary_spread 0.07
  set g_balance_shotgun_primary_refire 0.8
  set g_balance_shotgun_primary_animtime 0.2
@@@ -277,42 -262,26 +277,42 @@@ set g_balance_shotgun_secondary_force 1
  set g_balance_shotgun_secondary_refire 1.1
  set g_balance_shotgun_secondary_animtime 1
  // }}}
 +
  // {{{ uzi
 +set g_balance_uzi_mode 1                              // Activates varible spread for sustained & burst mode secondary
 +set g_balance_uzi_spread_min 0.02
 +set g_balance_uzi_spread_max 0.6
 +set g_balance_uzi_spread_add 0.008
 +
 +set g_balance_uzi_burst 3                             // # of bullets in a burst (if set to 2 or more)
 +set g_balance_uzi_burst_refire 0.05           // refire between burst bullets
 +set g_balance_uzi_burst_refire2 0.4   // refire after burst
 +set g_balance_uzi_burst_spread 0.03
 +set g_balance_uzi_burst_damage 18             // 90 dps (but 90 dmg deliverd in .25s)
 +set g_balance_uzi_burst_force 50
 +set g_balance_uzi_burst_ammo 3
 +
  set g_balance_uzi_first 1
  set g_balance_uzi_first_damage 30
  set g_balance_uzi_first_force 50
  set g_balance_uzi_first_spread 0.015
 -set g_balance_uzi_first_refire 0.3
 +set g_balance_uzi_first_refire 0.2
  set g_balance_uzi_first_ammo 1
 -set g_balance_uzi_sustained_damage 15
 -set g_balance_uzi_sustained_force 10
 -set g_balance_uzi_sustained_spread 0.08
 +
 +set g_balance_uzi_sustained_damage 14 // 120 dps
 +set g_balance_uzi_sustained_force 12
 +set g_balance_uzi_sustained_spread 0.02
  set g_balance_uzi_sustained_refire 0.1
  set g_balance_uzi_sustained_ammo 1
 +
  set g_balance_uzi_speed 18000
  set g_balance_uzi_bulletconstant 115 // 13.1qu
  // }}}
  // {{{ mortar
  set g_balance_grenadelauncher_primary_type 0
 -set g_balance_grenadelauncher_primary_damage 60
 -set g_balance_grenadelauncher_primary_edgedamage 38
 -set g_balance_grenadelauncher_primary_force 400
 +set g_balance_grenadelauncher_primary_damage 50
 +set g_balance_grenadelauncher_primary_edgedamage 30
 +set g_balance_grenadelauncher_primary_force 250
  set g_balance_grenadelauncher_primary_radius 140
  set g_balance_grenadelauncher_primary_speed 2000
  set g_balance_grenadelauncher_primary_speed_up 200
@@@ -325,14 -294,12 +325,12 @@@ set g_balance_grenadelauncher_primary_a
  set g_balance_grenadelauncher_primary_ammo 2
  set g_balance_grenadelauncher_primary_health 25
  set g_balance_grenadelauncher_primary_damageforcescale 4
- set g_balance_grenadelauncher_primary_bouncefactor 0.5
- set g_balance_grenadelauncher_primary_bouncestop 0.075
  set g_balance_grenadelauncher_primary_remote_minbouncecnt 0
  
  set g_balance_grenadelauncher_secondary_type 1
 -set g_balance_grenadelauncher_secondary_damage 70
 -set g_balance_grenadelauncher_secondary_edgedamage 38
 -set g_balance_grenadelauncher_secondary_force 400
 +set g_balance_grenadelauncher_secondary_damage 60
 +set g_balance_grenadelauncher_secondary_edgedamage 35
 +set g_balance_grenadelauncher_secondary_force 300
  set g_balance_grenadelauncher_secondary_radius 140
  set g_balance_grenadelauncher_secondary_speed 1400
  set g_balance_grenadelauncher_secondary_speed_up 200
@@@ -345,9 -312,10 +343,10 @@@ set g_balance_grenadelauncher_secondary
  set g_balance_grenadelauncher_secondary_ammo 2
  set g_balance_grenadelauncher_secondary_health 10
  set g_balance_grenadelauncher_secondary_damageforcescale 4
- set g_balance_grenadelauncher_secondary_bouncefactor 0.5
- set g_balance_grenadelauncher_secondary_bouncestop 0.075
  set g_balance_grenadelauncher_secondary_remote_detonateprimary 0
+ set g_balance_grenadelauncher_bouncefactor 0.5
+ set g_balance_grenadelauncher_bouncestop 0.075
  // }}}
  // {{{ minelayer // TODO
  set g_balance_minelayer_damage 35
@@@ -372,72 -340,66 +371,77 @@@ set g_balance_minelayer_remote_radius 2
  set g_balance_minelayer_remote_force 300
  // }}}
  // {{{ electro
 -set g_balance_electro_lightning 1
 -set g_balance_electro_primary_damage 110
 +set g_balance_electro_lightning 0
 +set g_balance_electro_primary_damage 35
  set g_balance_electro_primary_edgedamage 0
 -set g_balance_electro_primary_force 425
 -set g_balance_electro_primary_force_up 125
 -set g_balance_electro_primary_radius 850
 -set g_balance_electro_primary_comboradius 150
 -set g_balance_electro_primary_speed 0
 +set g_balance_electro_primary_force 150
 +set g_balance_electro_primary_force_up 0
 +set g_balance_electro_primary_radius 155
 +set g_balance_electro_primary_comboradius 0
 +set g_balance_electro_primary_speed 2000
  set g_balance_electro_primary_spread 0
 -set g_balance_electro_primary_lifetime 0
 -set g_balance_electro_primary_refire 0.4
 -set g_balance_electro_primary_animtime 0.03333333
 -set g_balance_electro_primary_ammo 7
 -set g_balance_electro_primary_range 800
 +set g_balance_electro_primary_lifetime 30
 +set g_balance_electro_primary_refire 0.65
 +set g_balance_electro_primary_animtime 0.3
 +set g_balance_electro_primary_ammo 2
 +set g_balance_electro_primary_range 0
  set g_balance_electro_primary_falloff_mindist 255 // 0.3 * radius
  set g_balance_electro_primary_falloff_maxdist 850
  set g_balance_electro_primary_falloff_halflifedist 425
  
  set g_balance_electro_secondary_damage 25
  set g_balance_electro_secondary_edgedamage 0
 -set g_balance_electro_secondary_force 100
 -set g_balance_electro_secondary_radius 100
 -set g_balance_electro_secondary_speed 500
 +set g_balance_electro_secondary_force 50
 +set g_balance_electro_secondary_radius 25
 +set g_balance_electro_secondary_speed 750
  set g_balance_electro_secondary_speed_up 150
  set g_balance_electro_secondary_speed_z 0
 -set g_balance_electro_secondary_spread 0.08
 -set g_balance_electro_secondary_lifetime 3.5
 +set g_balance_electro_secondary_spread 0.025
 +set g_balance_electro_secondary_lifetime 5
  set g_balance_electro_secondary_refire 0.1
  set g_balance_electro_secondary_refire2 2
 -set g_balance_electro_secondary_animtime 0.2
 +set g_balance_electro_secondary_animtime 0.15
  set g_balance_electro_secondary_ammo 2
  set g_balance_electro_secondary_health 10
 -set g_balance_electro_secondary_damageforcescale 4
 +set g_balance_electro_secondary_damageforcescale 2
  set g_balance_electro_secondary_count 3
 -set g_balance_electro_combo_damage 60
 -set g_balance_electro_combo_edgedamage 0
 -set g_balance_electro_combo_force 80
 +set g_balance_electro_secondary_bouncefactor 0.5
 +set g_balance_electro_secondary_bouncestop 0.01
 +
 +set g_balance_electro_combo_damage 80
 +set g_balance_electro_combo_edgedamage 10
 +set g_balance_electro_combo_force 150
  set g_balance_electro_combo_radius 250
  set g_balance_electro_combo_comboradius 0
 -set g_balance_electro_combo_speed 400
 +set g_balance_electro_combo_speed 1000
  // }}}
  // {{{ crylink
 -set g_balance_crylink_primary_damage 5
 -set g_balance_crylink_primary_edgedamage 2.5
 -set g_balance_crylink_primary_force 25
 +set g_balance_crylink_primary_damage 20
 +set g_balance_crylink_primary_edgedamage 5
 +set g_balance_crylink_primary_force 50
  set g_balance_crylink_primary_radius 50
 -set g_balance_crylink_primary_speed 2500
 -set g_balance_crylink_primary_spread 0.04
 -set g_balance_crylink_primary_shots 12
 +set g_balance_crylink_primary_speed 2000
 +set g_balance_crylink_primary_spread 0.075
 +set g_balance_crylink_primary_shots 4
  set g_balance_crylink_primary_bounces 1
  set g_balance_crylink_primary_refire 1
  set g_balance_crylink_primary_animtime 0.4
  set g_balance_crylink_primary_ammo 2
  set g_balance_crylink_primary_bouncedamagefactor 0.2
 -set g_balance_crylink_primary_joinspeed 0
 +set g_balance_crylink_primary_joinspeed 2000
 +set g_balance_crylink_primary_joinboost 2
  
 -set g_balance_crylink_primary_middle_lifetime 5 // range: 10000 full, fades to 20000
 +set g_balance_crylink_primary_middle_lifetime 5 
  set g_balance_crylink_primary_middle_fadetime 5
++<<<<<<< HEAD
 +set g_balance_crylink_primary_star_lifetime   5 
 +set g_balance_crylink_primary_star_fadetime   5
 +set g_balance_crylink_primary_other_lifetime  5 
 +set g_balance_crylink_primary_other_fadetime  5
++=======
+ set g_balance_crylink_primary_other_lifetime 2 // range: 800 full, fades to 1300
+ set g_balance_crylink_primary_other_fadetime 0.25
++>>>>>>> origin/master
  
  set g_balance_crylink_secondary 1
  set g_balance_crylink_secondary_damage 2
@@@ -452,7 -414,7 +456,7 @@@ set g_balance_crylink_secondary_refire 
  set g_balance_crylink_secondary_animtime 0.15
  set g_balance_crylink_secondary_ammo 1
  set g_balance_crylink_secondary_bouncedamagefactor 0.5
 -set g_balance_crylink_secondary_joinspeed 0
 +set g_balance_crylink_secondary_joinspeed 1000
  
  set g_balance_crylink_secondary_middle_lifetime 5 // range: 10000 full, fades to 10000
  set g_balance_crylink_secondary_middle_fadetime 5
@@@ -460,7 -422,7 +464,7 @@@ set g_balance_crylink_secondary_line_li
  set g_balance_crylink_secondary_line_fadetime 2
  // }}}
  // {{{ nex
 -set g_balance_nex_primary_damage 100
 +set g_balance_nex_primary_damage 110
  set g_balance_nex_primary_force 600
  set g_balance_nex_primary_refire 0.75
  set g_balance_nex_primary_animtime 0.3
@@@ -472,7 -434,7 +476,7 @@@ set g_balance_nex_primary_damagefalloff
  
  set g_balance_nex_secondary 1
  set g_balance_nex_secondary_charge 1
 -set g_balance_nex_secondary_charge_rate 0.7
 +set g_balance_nex_secondary_charge_rate 0.6
  set g_balance_nex_secondary_damage 100
  set g_balance_nex_secondary_force 600
  set g_balance_nex_secondary_refire 1.5
@@@ -488,8 -450,7 +492,8 @@@ set g_balance_nex_charge_mindmg 1
  set g_balance_nex_charge_start 0
  set g_balance_nex_charge_rate 0.35
  set g_balance_nex_charge_limit 0.5
 -set g_balance_nex_charge_rot_rate 0
 +set g_balance_nex_charge_rot_rate 0.1
 +set g_balance_nex_charge_rot_pause 1 // Dont rot down untill this long after release of charge button
  set g_balance_nex_charge_shot_multiplier 0
  set g_balance_nex_charge_velocity_rate 0
  set g_balance_nex_charge_minspeed 400
@@@ -501,14 -462,14 +505,14 @@@ set g_balance_minstanex_animtime 0.
  set g_balance_minstanex_ammo 10
  // }}}
  // {{{ hagar
 -set g_balance_hagar_primary_damage 30
 -set g_balance_hagar_primary_edgedamage 15
 -set g_balance_hagar_primary_force 50
 -set g_balance_hagar_primary_radius 65
 +set g_balance_hagar_primary_damage 25
 +set g_balance_hagar_primary_edgedamage 5
 +set g_balance_hagar_primary_force 70
 +set g_balance_hagar_primary_radius 60
  set g_balance_hagar_primary_spread 0.010
 -set g_balance_hagar_primary_speed 3000
 +set g_balance_hagar_primary_speed 2500
  set g_balance_hagar_primary_lifetime 30
 -set g_balance_hagar_primary_refire 0.15
 +set g_balance_hagar_primary_refire 0.2
  set g_balance_hagar_primary_ammo 1
  set g_balance_hagar_secondary 1
  set g_balance_hagar_secondary_damage 30
@@@ -523,33 -484,28 +527,39 @@@ set g_balance_hagar_secondary_refire 0.
  set g_balance_hagar_secondary_ammo 1
  // }}}
  // {{{ rocketlauncher // TODO
 -set g_balance_rocketlauncher_damage 110
 +set g_balance_rocketlauncher_damage 120
  set g_balance_rocketlauncher_edgedamage 25
  set g_balance_rocketlauncher_force 350
 -set g_balance_rocketlauncher_radius 125
 -set g_balance_rocketlauncher_speed 1000
 +set g_balance_rocketlauncher_radius 130
 +set g_balance_rocketlauncher_speed 900
  set g_balance_rocketlauncher_speedaccel 0
 -set g_balance_rocketlauncher_speedstart 1000
 -set g_balance_rocketlauncher_lifetime 5
 -set g_balance_rocketlauncher_refire 1
 +set g_balance_rocketlauncher_speedstart 900
 +set g_balance_rocketlauncher_lifetime 9
 +set g_balance_rocketlauncher_refire 1.2
  set g_balance_rocketlauncher_animtime 0.4
  set g_balance_rocketlauncher_ammo 3
  set g_balance_rocketlauncher_health 10
  set g_balance_rocketlauncher_damageforcescale 0
  set g_balance_rocketlauncher_detonatedelay -1 // positive: timer till detonation is allowed, negative: "security device" that prevents ANY remote detonation if it could hurt its owner, zero: detonatable at any time
 -set g_balance_rocketlauncher_guiderate 45 // max degrees per second
 +set g_balance_rocketlauncher_guiderate 25 // max degrees per second
  set g_balance_rocketlauncher_guideratedelay 0.01 // immediate
  set g_balance_rocketlauncher_guidegoal 512 // goal distance for (non-laser) guiding (higher = less control, lower = erratic)
  set g_balance_rocketlauncher_guidedelay 0.15 // delay before guiding kicks in
  set g_balance_rocketlauncher_guidestop 0 // stop guiding when firing again
++<<<<<<< HEAD
 +set g_balance_rocketlauncher_laserguided_speed 1000 //650
 +set g_balance_rocketlauncher_laserguided_speedaccel 0
 +set g_balance_rocketlauncher_laserguided_speedstart 1000
 +set g_balance_rocketlauncher_laserguided_turnrate 0.75 //0.5
 +set g_balance_rocketlauncher_laserguided_allow_steal 1
 +set g_balance_rocketlauncher_remote_damage 120
 +set g_balance_rocketlauncher_remote_edgedamage 25
 +set g_balance_rocketlauncher_remote_radius 130
++=======
+ set g_balance_rocketlauncher_remote_damage 90
+ set g_balance_rocketlauncher_remote_edgedamage 20
+ set g_balance_rocketlauncher_remote_radius 125
++>>>>>>> origin/master
  set g_balance_rocketlauncher_remote_force 350
  // }}}
  // {{{ porto
@@@ -618,13 -574,13 +628,13 @@@ set g_balance_campingrifle_reloadtime 
  set g_balance_campingrifle_auto_reload_after_changing_weapons 0
  set g_balance_campingrifle_bursttime 0
  set g_balance_campingrifle_primary_tracer 1
 -set g_balance_campingrifle_primary_damage 75
 -set g_balance_campingrifle_primary_headshotaddeddamage 75
 +set g_balance_campingrifle_primary_damage 50
 +set g_balance_campingrifle_primary_headshotaddeddamage 90
  set g_balance_campingrifle_primary_spread 0
  set g_balance_campingrifle_primary_force 2
  set g_balance_campingrifle_primary_speed 40000
  set g_balance_campingrifle_primary_lifetime 5
 -set g_balance_campingrifle_primary_refire 1.5
 +set g_balance_campingrifle_primary_refire 0.5
  set g_balance_campingrifle_primary_animtime 0.6
  set g_balance_campingrifle_primary_ammo 10
  set g_balance_campingrifle_primary_bulletconstant 110 // 62.2qu
@@@ -659,7 -615,7 +669,7 @@@ set g_balance_tuba_force 4
  // {{{ fireball
  set g_balance_fireball_primary_ammo 40
  set g_balance_fireball_primary_animtime 0.15
 -set g_balance_fireball_primary_bfgdamage 100
 +set g_balance_fireball_primary_bfgdamage 150
  set g_balance_fireball_primary_bfgforce 0
  set g_balance_fireball_primary_bfgradius 1000
  set g_balance_fireball_primary_damage 200
@@@ -713,8 -669,8 +723,8 @@@ set g_balance_seeker_missile_accel 1.0
  set g_balance_seeker_missile_ammo 2
  set g_balance_seeker_missile_animtime 0.3
  set g_balance_seeker_missile_count 4
 -set g_balance_seeker_missile_damage 40
 -set g_balance_seeker_missile_damageforcescale 4
 +set g_balance_seeker_missile_damage 50
 +set g_balance_seeker_missile_damageforcescale 2
  set g_balance_seeker_missile_decel 0.9
  set g_balance_seeker_missile_delay 0.25
  set g_balance_seeker_missile_edgedamage 10
@@@ -743,7 -699,7 +753,7 @@@ set g_balance_seeker_tag_animtime 0.
  set g_balance_seeker_tag_damageforcescale 4
  set g_balance_seeker_tag_health 5
  set g_balance_seeker_tag_lifetime 15
 -set g_balance_seeker_tag_refire 0.7
 +set g_balance_seeker_tag_refire 1
  set g_balance_seeker_tag_speed 9000
  set g_balance_seeker_tag_spread 0
  // End new seeker
index 4399beb29803ac80f2ae9bcae9872640120c3dff,abdd41ebe93649243ea01781dd48505d16b1099f..5ce52680727511ac333b21d9d1e3eb3fb249e8e2
@@@ -1091,10 -1091,11 +1091,11 @@@ float ClientInit_SendEntity(entity to, 
                WriteString(MSG_ENTITY, "");
        WriteByte(MSG_ENTITY, self.count * 255.0); // g_balance_armor_blockpercent
        WriteByte(MSG_ENTITY, self.cnt * 255.0); // g_balance_weaponswitchdelay
-       WriteCoord(MSG_ENTITY, self.bouncefactor); // g_balance_grenadelauncher_secondary_bouncefactor
-       WriteCoord(MSG_ENTITY, self.bouncestop); // g_balance_grenadelauncher_secondary_bouncestop
+       WriteCoord(MSG_ENTITY, self.bouncefactor); // g_balance_grenadelauncher_bouncefactor
+       WriteCoord(MSG_ENTITY, self.bouncestop); // g_balance_grenadelauncher_bouncestop
        WriteByte(MSG_ENTITY, cvar("g_balance_nex_secondary")); // client has to know if it should zoom or not
        WriteByte(MSG_ENTITY, cvar("g_balance_campingrifle_secondary")); // client has to know if it should zoom or not
+       WriteByte(MSG_ENTITY, serverflags); // client has to know if it should zoom or not
        return TRUE;
  }
  
@@@ -1111,14 -1112,14 +1112,14 @@@ void ClientInit_CheckUpdate(
                self.cnt = cvar("g_balance_weaponswitchdelay");
                self.SendFlags |= 1;
        }
-       if(self.bouncefactor != cvar("g_balance_grenadelauncher_secondary_bouncefactor"))
+       if(self.bouncefactor != cvar("g_balance_grenadelauncher_bouncefactor"))
        {
-               self.bouncefactor = cvar("g_balance_grenadelauncher_secondary_bouncefactor");
+               self.bouncefactor = cvar("g_balance_grenadelauncher_bouncefactor");
                self.SendFlags |= 1;
        }
-       if(self.bouncestop != cvar("g_balance_grenadelauncher_secondary_bouncestop"))
+       if(self.bouncestop != cvar("g_balance_grenadelauncher_bouncestop"))
        {
-               self.bouncestop = cvar("g_balance_grenadelauncher_secondary_bouncestop");
+               self.bouncestop = cvar("g_balance_grenadelauncher_bouncestop");
                self.SendFlags |= 1;
        }
  }
@@@ -1694,11 -1695,6 +1695,6 @@@ void ClientDisconnect (void
  
        bot_relinkplayerlist();
  
-       // remove laserdot
-       if(self.weaponentity)
-               if(self.weaponentity.lasertarget)
-                       remove(self.weaponentity.lasertarget);
        if(g_arena)
        {
                Spawnqueue_Unmark(self);
@@@ -2810,7 -2806,7 +2806,7 @@@ void PlayerPreThink (void
                player_regen();
  
                // rot nex charge to the charge limit
 -              if(cvar("g_balance_nex_charge_rot_rate") && self.nex_charge > cvar("g_balance_nex_charge_limit"))
 +              if(cvar("g_balance_nex_charge_rot_rate") && self.nex_charge > cvar("g_balance_nex_charge_limit") && self.nex_charge_rottime < time)
                        self.nex_charge = bound(cvar("g_balance_nex_charge_limit"), self.nex_charge - cvar("g_balance_nex_charge_rot_rate") * frametime / W_TICSPERFRAME, 1);
  
                if(frametime)
diff --combined qcsrc/server/defs.qh
index fc01718ca10102692114dee3b0235097aa975296,95fce0ade3b7a284ad646a88e56001f55ab4a6b4..5302aef503b1b851ff1a17437aa7135bec98d2d8
@@@ -18,7 -18,7 +18,7 @@@ float require_spawnfunc_prefix; // if t
  float ctf_score_value(string parameter);
  
  float g_dm, g_domination, g_ctf, g_tdm, g_keyhunt, g_onslaught, g_assault, g_arena, g_ca, g_lms, g_runematch, g_race, g_nexball, g_cts;
- float g_cloaked, g_footsteps, g_jump_grunt, g_grappling_hook, g_laserguided_missile, g_midair, g_minstagib, g_pinata, g_norecoil, g_vampire, g_minstagib_invis_alpha, g_bloodloss;
+ float g_cloaked, g_footsteps, g_jump_grunt, g_grappling_hook, g_midair, g_minstagib, g_pinata, g_norecoil, g_minstagib_invis_alpha, g_bloodloss;
  float g_warmup_limit;
  float g_warmup_allguns;
  float g_warmup_allow_timeout;
@@@ -243,10 -243,6 +243,6 @@@ float alreadychangedlevel
  .float welcomemessage_time;
  .float version;
  
- // Laser target for laser-guided weapons
- .entity lasertarget;
- .float laser_on;
  // minstagib vars
  .float jump_interval;    // laser refire
  
@@@ -658,6 -654,7 +654,8 @@@ string deathmessage
  .entity realowner;
  
  .float nex_charge;
 +.float nex_charge_rottime;
  
  float allowed_to_spawn; // boolean variable used by the clan arena code to determine if a player can spawn (after the round has ended)
+ float serverflags;
index bf65d03b8f071ebfe3cd4ada1cdb8c6a52aed827,566563487b768b7e82fe761df97b9b3f3cbf3b68..f3d9a6cbf97881aeccc07f77e8a97107047b40ae
@@@ -52,6 -52,8 +52,8 @@@ vector W_Crylink_LinkJoin(entity e, flo
        float avg_dist, n;
        entity p;
  
+       w_crylink_linkjoin_time = 0;
        avg_origin = e.origin;
        avg_velocity = e.velocity;
        n = 1;
        avg_origin *= (1.0 / n);
        avg_velocity *= (1.0 / n);
  
+       if(n < 2)
+               return avg_origin; // nothing to do
        // yes, mathematically we can do this in ONE step, but beware of 32bit floats...
        avg_dist = pow(vlen(e.origin - avg_origin), 2);
        for(p = e; (p = p.queuenext) != e; )
                avg_dist += pow(vlen(e.origin - avg_origin), 2);
        avg_dist *= (1.0 / n);
+       avg_dist = sqrt(avg_dist);
  
-       w_crylink_linkjoin_time = 0;
        if(avg_dist == 0)
                return avg_origin; // no change needed
  
        return targ_origin;
  }
  
+ void W_Crylink_LinkJoinEffect_Think()
+ {
+       // is there at least 2 projectiles very close?
+       entity e, p;
+       float n;
+       e = self.owner.crylink_lastgroup;
+       n = 0;
+       if(e)
+       {
+               if(vlen(e.origin - self.origin) < vlen(e.velocity) * frametime)
+                       ++n;
+               for(p = e; (p = p.queuenext) != e; )
+               {
+                       if(vlen(p.origin - self.origin) < vlen(p.velocity) * frametime)
+                               ++n;
+               }
+               if(n >= 2)
+               {
+                       // they seem to touch...
+                       // TODO make a specific particle effect for this
+                       pointparticles(particleeffectnum("crylink_linkjoin"), self.origin, '0 0 0', 1);
+               }
+       }
+       remove(self);
+ }
  // NO bounce protection, as bounces are limited!
  void W_Crylink_Touch (void)
  {
                f = cvar("g_balance_crylink_primary_bouncedamagefactor");
        if(a)
                f *= a;
-       if (RadiusDamage (self, self.realowner, cvar("g_balance_crylink_primary_damage") * f, cvar("g_balance_crylink_primary_edgedamage") * f, cvar("g_balance_crylink_primary_radius"), world, cvar("g_balance_crylink_primary_force") * f, self.projectiledeathtype, other) || finalhit)
+       if (RadiusDamage (self, self.realowner, cvar("g_balance_crylink_primary_damage") * f, cvar("g_balance_crylink_primary_edgedamage") * f, cvar("g_balance_crylink_primary_radius"), world, cvar("g_balance_crylink_primary_force") * f, self.projectiledeathtype, other))
        {
                W_Crylink_LinkExplode(self.queuenext, self);
                remove (self);
                return;
        }
+       else if(finalhit)
+       {
+               // just unlink
+               W_Crylink_Dequeue(self);
+               remove(self);
+               return;
+       }
        self.cnt = self.cnt - 1;
-       // self.angles = vectoangles(self.velocity); // csqc
+       self.angles = vectoangles(self.velocity);
        self.owner = world;
        self.projectiledeathtype |= HITTYPE_BOUNCE;
        // commented out as it causes a little hitch...
@@@ -197,7 -235,7 +235,7 @@@ void W_Crylink_Touch2 (void
                return;
        }
        self.cnt = self.cnt - 1;
-       // self.angles = vectoangles(self.velocity); // csqc
+       self.angles = vectoangles(self.velocity);
        self.owner = world;
        self.projectiledeathtype |= HITTYPE_BOUNCE;
        // commented out as it causes a little hitch...
@@@ -213,9 -251,10 +251,10 @@@ void W_Crylink_Fadethink (void
  
  void W_Crylink_Attack (void)
  {
-       float counter, shots;
-       entity proj, prevproj, firstproj;
-       vector forward, right, up, s;
+       local float counter, shots;
+       local entity proj, prevproj, firstproj;
+       local vector s;
+       vector forward, right, up;
  
        if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
                self.ammo_cells = self.ammo_cells - cvar("g_balance_crylink_primary_ammo");
        while (counter < shots)
        {
                proj = spawn ();
-               proj.crylink_waitrelease = time;        // keep track of when each projectile was spawned
                proj.realowner = proj.owner = self;
                proj.classname = "spike";
                proj.bot_dodge = TRUE;
                        self.fade_rate = 1 / cvar("g_balance_crylink_primary_middle_fadetime");
                        proj.nextthink = time + cvar("g_balance_crylink_primary_middle_lifetime") + cvar("g_balance_crylink_primary_middle_fadetime");
                }
-               else if(counter <= 3)
-               {
-                       proj.fade_time = time + cvar("g_balance_crylink_primary_star_lifetime");
-                       self.fade_rate = 1 / cvar("g_balance_crylink_primary_star_fadetime");
-                       proj.nextthink = time + cvar("g_balance_crylink_primary_star_lifetime") + cvar("g_balance_crylink_primary_star_fadetime");
-               }
                else
                {
                        proj.fade_time = time + cvar("g_balance_crylink_primary_other_lifetime");
                        proj.nextthink = time + cvar("g_balance_crylink_primary_other_lifetime") + cvar("g_balance_crylink_primary_other_fadetime");
                }
                proj.cnt = cvar("g_balance_crylink_primary_bounces");
-               
                //proj.scale = 1 + 1 * proj.cnt;
-               //proj.angles = vectoangles (proj.velocity); // csqc
+               proj.angles = vectoangles (proj.velocity);
                //proj.glow_size = 20;
  
                proj.flags = FL_PROJECTILE;
@@@ -326,7 -359,6 +359,6 @@@ void W_Crylink_Attack2 (void
        while (counter < shots)
        {
                proj = spawn ();
-               proj.crylink_waitrelease = time;        // keep track of when each projectile was spawned
                proj.realowner = proj.owner = self;
                proj.classname = "spike";
                proj.bot_dodge = TRUE;
                proj.cnt = cvar("g_balance_crylink_secondary_bounces");
                //proj.scale = 1 + 1 * proj.cnt;
  
-               // proj.angles = vectoangles (proj.velocity); // csqc
+               proj.angles = vectoangles (proj.velocity);
  
                //proj.glow_size = 20;
  
@@@ -406,22 -438,18 +438,18 @@@ float w_crylink(float req
        {
                if (self.BUTTON_ATCK)
                {
-                       if(self.crylink_lastgroup == world)
-                               self.crylink_waitrelease = 0;
-                               
                        if (!self.crylink_waitrelease)
                        if (weapon_prepareattack(0, cvar("g_balance_crylink_primary_refire")))
                        {
                                W_Crylink_Attack();
                                weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_crylink_primary_animtime"), w_ready);
                                if(cvar("g_balance_crylink_primary_joinspeed") != 0)
-                                       self.crylink_waitrelease = 1; // time + 0.01;
+                                       self.crylink_waitrelease = 1;
                        }
-                       
                }
                else if(self.BUTTON_ATCK2 && cvar("g_balance_crylink_secondary"))
                {
+                       if (!self.crylink_waitrelease)
                        if (weapon_prepareattack(1, cvar("g_balance_crylink_secondary_refire")))
                        {
                                W_Crylink_Attack2();
                        }
                }
                else
-               {                       
-                       if (self.crylink_waitrelease) 
+               {
+                       if (self.crylink_waitrelease)
                        {
                                // fired and released now!
                                if(self.crylink_lastgroup)
-                               {                                       
-                                       // Click and hold fire
-                                       if (time - self.crylink_lastgroup.crylink_waitrelease > 0.1)
+                               {
+                                       vector pos;
+                                       if(self.crylink_waitrelease == 1)
                                        {
-                                               //dprint("HoldFire:", ftos(time - self.crylink_lastgroup.crylink_waitrelease), "\nTimer is ", ftos(self.crylink_lastgroup.crylink_waitrelease),"\n");
-                                               W_Crylink_LinkJoin(self.crylink_lastgroup, cvar("g_balance_crylink_primary_joinspeed"));                                                                                                        
-                                               // 'splode @ join, if timing is just right, you get the target with the join-explode splash first, then the individual projectile's damage.
-                                               
-                                               if(w_crylink_linkjoin_time > 0)
-                                               {
-                                                       self.crylink_lastgroup.think            = W_Crylink_Touch;
-                                                       self.crylink_lastgroup.nextthink        = w_crylink_linkjoin_time + time;                                                                                                                                                               
-                                               }
+                                               pos = W_Crylink_LinkJoin(self.crylink_lastgroup, cvar("g_balance_crylink_primary_joinspeed"));
                                        }
-                                       else // tap fire
+                                       else
                                        {
-                                               dprint("TapFire:", ftos(time - self.crylink_lastgroup.crylink_waitrelease), "\nTimer is ", ftos(self.crylink_lastgroup.crylink_waitrelease),"\n");
+                                               pos = W_Crylink_LinkJoin(self.crylink_lastgroup, cvar("g_balance_crylink_secondary_joinspeed"));
                                        }
+                                       entity linkjoineffect;
+                                       linkjoineffect = spawn();
+                                       linkjoineffect.classname = "linkjoineffect";
+                                       linkjoineffect.think = W_Crylink_LinkJoinEffect_Think;
+                                       linkjoineffect.nextthink = time + w_crylink_linkjoin_time;
+                                       linkjoineffect.owner = self;
+                                       setorigin(linkjoineffect, pos);
                                }
-                               
                                self.crylink_waitrelease = 0;
-                       }                                                       
+                               if(!w_crylink(WR_CHECKAMMO1) && !w_crylink(WR_CHECKAMMO2))
+                               {
+                                       // ran out of ammo!
+                                       self.cnt = WEP_CRYLINK;
+                                       self.switchweapon = w_getbestweapon(self);
+                               }
+                       }
                }
        }
        else if (req == WR_PRECACHE)
                precache_model ("models/weapons/h_crylink.iqm");
                precache_sound ("weapons/crylink_fire.wav");
                precache_sound ("weapons/crylink_fire2.wav");
+               precache_sound ("weapons/crylink_linkjoin.wav");
        }
        else if (req == WR_SETUP)
                weapon_setup(WEP_CRYLINK);
        else if (req == WR_CHECKAMMO1)
+       {
+               // don't "run out of ammo" and switch weapons while waiting for release
+               if(self.crylink_lastgroup && self.crylink_waitrelease)
+                       return TRUE;
                return self.ammo_cells >= cvar("g_balance_crylink_primary_ammo");
+       }
        else if (req == WR_CHECKAMMO2)
+       {
+               // don't "run out of ammo" and switch weapons while waiting for release
+               if(self.crylink_lastgroup && self.crylink_waitrelease)
+                       return TRUE;
                return self.ammo_cells >= cvar("g_balance_crylink_secondary_ammo");
+       }
        return TRUE;
  };
  #endif
@@@ -518,4 -562,4 +562,4 @@@ float w_crylink(float req
        return TRUE;
  }
  #endif
--#endif
++#endif