[nexuiz-commits] r8232 - in trunk/data: . qcsrc/common qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Sat Nov 7 16:54:52 EST 2009


Author: div0
Date: 2009-11-07 16:54:51 -0500 (Sat, 07 Nov 2009)
New Revision: 8232

Modified:
   trunk/data/balance.cfg
   trunk/data/balance25.cfg
   trunk/data/balanceHavoc.cfg
   trunk/data/balanceNexrun.cfg
   trunk/data/balanceSamual.cfg
   trunk/data/qcsrc/common/mathlib.qc
   trunk/data/qcsrc/common/util.qc
   trunk/data/qcsrc/common/util.qh
   trunk/data/qcsrc/server/cl_weaponsystem.qc
   trunk/data/qcsrc/server/constants.qh
   trunk/data/qcsrc/server/g_hook.qc
   trunk/data/qcsrc/server/nexball.qc
   trunk/data/qcsrc/server/w_common.qc
   trunk/data/qcsrc/server/w_crylink.qc
   trunk/data/qcsrc/server/w_electro.qc
   trunk/data/qcsrc/server/w_fireball.qc
   trunk/data/qcsrc/server/w_grenadelauncher.qc
   trunk/data/qcsrc/server/w_hagar.qc
   trunk/data/qcsrc/server/w_hlac.qc
   trunk/data/qcsrc/server/w_laser.qc
   trunk/data/qcsrc/server/w_porto.qc
   trunk/data/qcsrc/server/w_rocketlauncher.qc
Log:
different probability distributions for spread (quake-style, solid circle, gaussian)
Currently, all is quake-style.
quake-style: http://rm.endoftheinternet.org/img/uploaded/6ad7218846a2a279987cbf230f6bab9e.jpg
circle:      http://rm.endoftheinternet.org/img/uploaded/06ce7e1fa72bd651cd7a0fd0b23f689e.jpg
gaussian:    http://rm.endoftheinternet.org/img/uploaded/8203aa325bc0bbce07d6329e97f44a35.jpg
The cvar doesn't change the standard deviation!


Modified: trunk/data/balance.cfg
===================================================================
--- trunk/data/balance.cfg	2009-11-07 21:12:34 UTC (rev 8231)
+++ trunk/data/balance.cfg	2009-11-07 21:54:51 UTC (rev 8232)
@@ -3,7 +3,7 @@
 //
 // And... don't forget to edit the other balance*.cfg too.
 
-set cvar_check_balance 1904952fd0d915f79ab4e6f0622abdb6
+set cvar_check_balance 729b07b9caa8a86c08841a0f4275e97d
 
 // {{{ weapon replacement
 // NOTE: this only replaces weapons on the map
@@ -177,6 +177,13 @@
 //  4: just add the player velocity length to the absolute velocity (tZork's sniper rockets)
 set g_projectiles_newton_style_2_minfactor 0.7
 set g_projectiles_newton_style_2_maxfactor 5
+set g_projectiles_spread_style 0
+// possible values:
+//  0: forward + solid sphere (like Quake) - varies velocity
+//  1: forward + flattened solid sphere
+//  2: forward + solid circle
+//  3: forward + normal distribution 3D - varies velocity
+//  4: forward + normal distribution on a plane
 set g_balance_falldamage_deadminspeed 150
 set g_balance_falldamage_minspeed 1400
 set g_balance_falldamage_factor 0.15
@@ -220,6 +227,7 @@
 set g_balance_laser_primary_force 400
 set g_balance_laser_primary_radius 70
 set g_balance_laser_primary_speed 9000
+set g_balance_laser_primary_spread 0
 set g_balance_laser_primary_refire 0.7
 set g_balance_laser_primary_animtime 0.3
 set g_balance_laser_primary_lifetime 30
@@ -231,6 +239,7 @@
 set g_balance_laser_secondary_force 400
 set g_balance_laser_secondary_radius 70
 set g_balance_laser_secondary_speed 9000
+set g_balance_laser_secondary_spread 0
 set g_balance_laser_secondary_refire 0.7
 set g_balance_laser_secondary_animtime 0.3
 set g_balance_laser_secondary_lifetime 30
@@ -278,6 +287,7 @@
 set g_balance_grenadelauncher_primary_radius 140
 set g_balance_grenadelauncher_primary_speed 2000
 set g_balance_grenadelauncher_primary_speed_up 200
+set g_balance_grenadelauncher_primary_spread 0
 set g_balance_grenadelauncher_primary_lifetime 30
 set g_balance_grenadelauncher_primary_refire 0.8
 set g_balance_grenadelauncher_primary_animtime 0.5
@@ -288,6 +298,7 @@
 set g_balance_grenadelauncher_secondary_radius 140
 set g_balance_grenadelauncher_secondary_speed 1400
 set g_balance_grenadelauncher_secondary_speed_up 200
+set g_balance_grenadelauncher_secondary_spread 0
 set g_balance_grenadelauncher_secondary_lifetime 0.3
 set g_balance_grenadelauncher_secondary_refire 1
 set g_balance_grenadelauncher_secondary_animtime 0.5
@@ -302,6 +313,7 @@
 set g_balance_electro_primary_radius 90
 set g_balance_electro_primary_comboradius 300
 set g_balance_electro_primary_speed 2000
+set g_balance_electro_primary_spread 0
 set g_balance_electro_primary_lifetime 30
 set g_balance_electro_primary_refire 1
 set g_balance_electro_primary_animtime 0.3
@@ -313,6 +325,7 @@
 set g_balance_electro_secondary_radius 90
 set g_balance_electro_secondary_speed 900
 set g_balance_electro_secondary_speed_up 200
+set g_balance_electro_secondary_spread 0
 set g_balance_electro_secondary_lifetime 1
 set g_balance_electro_secondary_refire 0.3
 set g_balance_electro_secondary_refire2 0
@@ -543,6 +556,7 @@
 set g_balance_fireball_primary_refire 1.5
 set g_balance_fireball_primary_speed 700
 set g_balance_fireball_primary_speed_up 100
+set g_balance_fireball_primary_spread 0
 set g_balance_fireball_secondary_ammo 15
 set g_balance_fireball_secondary_animtime 0.15
 set g_balance_fireball_secondary_bfgdamage 100
@@ -562,4 +576,5 @@
 set g_balance_fireball_secondary_refire 3
 set g_balance_fireball_secondary_refire2 6
 set g_balance_fireball_secondary_speed 650
+set g_balance_fireball_secondary_spread 0
 //   }}}

Modified: trunk/data/balance25.cfg
===================================================================
--- trunk/data/balance25.cfg	2009-11-07 21:12:34 UTC (rev 8231)
+++ trunk/data/balance25.cfg	2009-11-07 21:54:51 UTC (rev 8232)
@@ -3,7 +3,7 @@
 //
 // And... don't forget to edit the other balance*.cfg too.
 
-set cvar_check_balance 1904952fd0d915f79ab4e6f0622abdb6
+set cvar_check_balance 729b07b9caa8a86c08841a0f4275e97d
 
 // {{{ weapon replacement
 // NOTE: this only replaces weapons on the map
@@ -177,6 +177,13 @@
 //  4: just add the player velocity length to the absolute velocity (tZork's sniper rockets)
 set g_projectiles_newton_style_2_minfactor 0.7
 set g_projectiles_newton_style_2_maxfactor 5
+set g_projectiles_spread_style 0
+// possible values:
+//  0: forward + solid sphere (like Quake) - varies velocity
+//  1: forward + flattened solid sphere
+//  2: forward + solid circle
+//  3: forward + normal distribution 3D - varies velocity
+//  4: forward + normal distribution on a plane
 set g_balance_falldamage_deadminspeed 150
 set g_balance_falldamage_minspeed 1400
 set g_balance_falldamage_factor 0.15
@@ -220,6 +227,7 @@
 set g_balance_laser_primary_force 400
 set g_balance_laser_primary_radius 70
 set g_balance_laser_primary_speed 9000
+set g_balance_laser_primary_spread 0
 set g_balance_laser_primary_refire 0.7
 set g_balance_laser_primary_animtime 0.3
 set g_balance_laser_primary_lifetime 30
@@ -231,6 +239,7 @@
 set g_balance_laser_secondary_force 400
 set g_balance_laser_secondary_radius 70
 set g_balance_laser_secondary_speed 9000
+set g_balance_laser_secondary_spread 0
 set g_balance_laser_secondary_refire 0.7
 set g_balance_laser_secondary_animtime 0.3
 set g_balance_laser_secondary_lifetime 30
@@ -278,6 +287,7 @@
 set g_balance_grenadelauncher_primary_radius 140
 set g_balance_grenadelauncher_primary_speed 2000
 set g_balance_grenadelauncher_primary_speed_up 200
+set g_balance_grenadelauncher_primary_spread 0
 set g_balance_grenadelauncher_primary_lifetime 30
 set g_balance_grenadelauncher_primary_refire 0.8
 set g_balance_grenadelauncher_primary_animtime 0.3
@@ -288,6 +298,7 @@
 set g_balance_grenadelauncher_secondary_radius 140
 set g_balance_grenadelauncher_secondary_speed 1400
 set g_balance_grenadelauncher_secondary_speed_up 200
+set g_balance_grenadelauncher_secondary_spread 0
 set g_balance_grenadelauncher_secondary_lifetime 2.5
 set g_balance_grenadelauncher_secondary_refire 0.7
 set g_balance_grenadelauncher_secondary_animtime 0.3
@@ -302,6 +313,7 @@
 set g_balance_electro_primary_radius 150
 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 30
 set g_balance_electro_primary_refire 0.6
 set g_balance_electro_primary_animtime 0.3
@@ -313,6 +325,7 @@
 set g_balance_electro_secondary_radius 150
 set g_balance_electro_secondary_speed 900
 set g_balance_electro_secondary_speed_up 200
+set g_balance_electro_secondary_spread 0
 set g_balance_electro_secondary_lifetime 5
 set g_balance_electro_secondary_refire 0.3
 set g_balance_electro_secondary_refire2 0
@@ -543,6 +556,7 @@
 set g_balance_fireball_primary_refire 1.5
 set g_balance_fireball_primary_speed 700
 set g_balance_fireball_primary_speed_up 100
+set g_balance_fireball_primary_spread 0
 set g_balance_fireball_secondary_ammo 15
 set g_balance_fireball_secondary_animtime 0.15
 set g_balance_fireball_secondary_bfgdamage 200
@@ -562,4 +576,5 @@
 set g_balance_fireball_secondary_refire 2
 set g_balance_fireball_secondary_refire2 0
 set g_balance_fireball_secondary_speed 650
+set g_balance_fireball_secondary_spread 0
 //   }}}

Modified: trunk/data/balanceHavoc.cfg
===================================================================
--- trunk/data/balanceHavoc.cfg	2009-11-07 21:12:34 UTC (rev 8231)
+++ trunk/data/balanceHavoc.cfg	2009-11-07 21:54:51 UTC (rev 8232)
@@ -3,7 +3,7 @@
 //
 // And... don't forget to edit the other balance*.cfg too.
 
-set cvar_check_balance 1904952fd0d915f79ab4e6f0622abdb6
+set cvar_check_balance 729b07b9caa8a86c08841a0f4275e97d
 
 // {{{ weapon replacement
 // NOTE: this only replaces weapons on the map
@@ -177,6 +177,13 @@
 //  4: just add the player velocity length to the absolute velocity (tZork's sniper rockets)
 set g_projectiles_newton_style_2_minfactor 0.7
 set g_projectiles_newton_style_2_maxfactor 5
+set g_projectiles_spread_style 0
+// possible values:
+//  0: forward + solid sphere (like Quake) - varies velocity
+//  1: forward + flattened solid sphere
+//  2: forward + solid circle
+//  3: forward + normal distribution 3D - varies velocity
+//  4: forward + normal distribution on a plane
 set g_balance_falldamage_deadminspeed 150
 set g_balance_falldamage_minspeed 1400
 set g_balance_falldamage_factor 0.15
@@ -220,6 +227,7 @@
 set g_balance_laser_primary_force 400
 set g_balance_laser_primary_radius 70
 set g_balance_laser_primary_speed 9000
+set g_balance_laser_primary_spread 0
 set g_balance_laser_primary_refire 0.7
 set g_balance_laser_primary_animtime 0.3
 set g_balance_laser_primary_lifetime 30
@@ -231,6 +239,7 @@
 set g_balance_laser_secondary_force 400
 set g_balance_laser_secondary_radius 70
 set g_balance_laser_secondary_speed 9000
+set g_balance_laser_secondary_spread 0
 set g_balance_laser_secondary_refire 0.7
 set g_balance_laser_secondary_animtime 0.3
 set g_balance_laser_secondary_lifetime 30
@@ -278,6 +287,7 @@
 set g_balance_grenadelauncher_primary_radius 140
 set g_balance_grenadelauncher_primary_speed 2000
 set g_balance_grenadelauncher_primary_speed_up 200
+set g_balance_grenadelauncher_primary_spread 0
 set g_balance_grenadelauncher_primary_lifetime 30
 set g_balance_grenadelauncher_primary_refire 0.8
 set g_balance_grenadelauncher_primary_animtime 0.5
@@ -288,6 +298,7 @@
 set g_balance_grenadelauncher_secondary_radius 140
 set g_balance_grenadelauncher_secondary_speed 1400
 set g_balance_grenadelauncher_secondary_speed_up 200
+set g_balance_grenadelauncher_secondary_spread 0
 set g_balance_grenadelauncher_secondary_lifetime 0.3
 set g_balance_grenadelauncher_secondary_refire 1
 set g_balance_grenadelauncher_secondary_animtime 0.5
@@ -302,6 +313,7 @@
 set g_balance_electro_primary_radius 90
 set g_balance_electro_primary_comboradius 300
 set g_balance_electro_primary_speed 2000
+set g_balance_electro_primary_spread 0
 set g_balance_electro_primary_lifetime 30
 set g_balance_electro_primary_refire 1
 set g_balance_electro_primary_animtime 0.3
@@ -313,6 +325,7 @@
 set g_balance_electro_secondary_radius 90
 set g_balance_electro_secondary_speed 900
 set g_balance_electro_secondary_speed_up 200
+set g_balance_electro_secondary_spread 0
 set g_balance_electro_secondary_lifetime 1
 set g_balance_electro_secondary_refire 0.3
 set g_balance_electro_secondary_refire2 0
@@ -543,6 +556,7 @@
 set g_balance_fireball_primary_refire 1.5
 set g_balance_fireball_primary_speed 700
 set g_balance_fireball_primary_speed_up 100
+set g_balance_fireball_primary_spread 0
 set g_balance_fireball_secondary_ammo 15
 set g_balance_fireball_secondary_animtime 0.15
 set g_balance_fireball_secondary_bfgdamage 100
@@ -562,4 +576,5 @@
 set g_balance_fireball_secondary_refire 3
 set g_balance_fireball_secondary_refire2 6
 set g_balance_fireball_secondary_speed 650
+set g_balance_fireball_secondary_spread 0
 //   }}}

Modified: trunk/data/balanceNexrun.cfg
===================================================================
--- trunk/data/balanceNexrun.cfg	2009-11-07 21:12:34 UTC (rev 8231)
+++ trunk/data/balanceNexrun.cfg	2009-11-07 21:54:51 UTC (rev 8232)
@@ -3,7 +3,7 @@
 //
 // And... don't forget to edit the other balance*.cfg too.
 
-set cvar_check_balance 1904952fd0d915f79ab4e6f0622abdb6
+set cvar_check_balance 729b07b9caa8a86c08841a0f4275e97d
 
 // {{{ weapon replacement
 // NOTE: this only replaces weapons on the map
@@ -178,6 +178,13 @@
 //  4: just add the player velocity length to the absolute velocity (tZork's sniper rockets)
 set g_projectiles_newton_style_2_minfactor 0.7
 set g_projectiles_newton_style_2_maxfactor 5
+set g_projectiles_spread_style 0
+// possible values:
+//  0: forward + solid sphere (like Quake) - varies velocity
+//  1: forward + flattened solid sphere
+//  2: forward + solid circle
+//  3: forward + normal distribution 3D - varies velocity
+//  4: forward + normal distribution on a plane
 set g_balance_falldamage_deadminspeed 150
 set g_balance_falldamage_minspeed 675
 set g_balance_falldamage_factor 0.25
@@ -221,6 +228,7 @@
 set g_balance_laser_primary_force 75
 set g_balance_laser_primary_radius 3
 set g_balance_laser_primary_speed 1500
+set g_balance_laser_primary_spread 0
 set g_balance_laser_primary_refire 0
 set g_balance_laser_primary_animtime 0.1
 set g_balance_laser_primary_lifetime 0.066
@@ -232,6 +240,7 @@
 set g_balance_laser_secondary_force 100
 set g_balance_laser_secondary_radius 3
 set g_balance_laser_secondary_speed 1500
+set g_balance_laser_secondary_spread 0
 set g_balance_laser_secondary_refire 0
 set g_balance_laser_secondary_animtime 0.15
 set g_balance_laser_secondary_lifetime 0.066
@@ -279,6 +288,7 @@
 set g_balance_grenadelauncher_primary_radius 120
 set g_balance_grenadelauncher_primary_speed 2000
 set g_balance_grenadelauncher_primary_speed_up 200
+set g_balance_grenadelauncher_primary_spread 0
 set g_balance_grenadelauncher_primary_lifetime 3
 set g_balance_grenadelauncher_primary_refire 0.7
 set g_balance_grenadelauncher_primary_animtime 0.6
@@ -289,6 +299,7 @@
 set g_balance_grenadelauncher_secondary_radius 150
 set g_balance_grenadelauncher_secondary_speed 1000
 set g_balance_grenadelauncher_secondary_speed_up 0
+set g_balance_grenadelauncher_secondary_spread 0
 set g_balance_grenadelauncher_secondary_lifetime 2
 set g_balance_grenadelauncher_secondary_refire 0.7
 set g_balance_grenadelauncher_secondary_animtime 0.6
@@ -303,6 +314,7 @@
 set g_balance_electro_primary_radius 80
 set g_balance_electro_primary_comboradius 150
 set g_balance_electro_primary_speed 2000
+set g_balance_electro_primary_spread 0
 set g_balance_electro_primary_lifetime 3
 set g_balance_electro_primary_refire 0.7
 set g_balance_electro_primary_animtime 0.7
@@ -314,6 +326,7 @@
 set g_balance_electro_secondary_radius 150
 set g_balance_electro_secondary_speed 900
 set g_balance_electro_secondary_speed_up 200
+set g_balance_electro_secondary_spread 0
 set g_balance_electro_secondary_lifetime 2.5
 set g_balance_electro_secondary_refire 0.1
 set g_balance_electro_secondary_refire2 2
@@ -543,6 +556,7 @@
 set g_balance_fireball_primary_lifetime 7
 set g_balance_fireball_primary_refire 2
 set g_balance_fireball_primary_speed 900
+set g_balance_fireball_primary_spread 0
 set g_balance_fireball_primary_speed_up 100
 set g_balance_fireball_secondary_ammo 25
 set g_balance_fireball_secondary_animtime 0.15
@@ -563,4 +577,5 @@
 set g_balance_fireball_secondary_refire 0
 set g_balance_fireball_secondary_refire2 4
 set g_balance_fireball_secondary_speed 650
+set g_balance_fireball_secondary_spread 0
 //   }}}

Modified: trunk/data/balanceSamual.cfg
===================================================================
--- trunk/data/balanceSamual.cfg	2009-11-07 21:12:34 UTC (rev 8231)
+++ trunk/data/balanceSamual.cfg	2009-11-07 21:54:51 UTC (rev 8232)
@@ -3,7 +3,7 @@
 //
 // And... don't forget to edit the other balance*.cfg too.
 
-set cvar_check_balance 1904952fd0d915f79ab4e6f0622abdb6
+set cvar_check_balance 729b07b9caa8a86c08841a0f4275e97d
 
 // {{{ weapon replacement
 // NOTE: this only replaces weapons on the map
@@ -178,6 +178,13 @@
 //  4: just add the player velocity length to the absolute velocity (tZork's sniper rockets)
 set g_projectiles_newton_style_2_minfactor 0.8
 set g_projectiles_newton_style_2_maxfactor 1.5
+set g_projectiles_spread_style 0
+// possible values:
+//  0: forward + solid sphere (like Quake) - varies velocity
+//  1: forward + flattened solid sphere
+//  2: forward + solid circle
+//  3: forward + normal distribution 3D - varies velocity
+//  4: forward + normal distribution on a plane
 set g_balance_falldamage_deadminspeed 150
 set g_balance_falldamage_minspeed 1400
 set g_balance_falldamage_factor 0.15
@@ -221,6 +228,7 @@
 set g_balance_laser_primary_force 400
 set g_balance_laser_primary_radius 70
 set g_balance_laser_primary_speed 12000
+set g_balance_laser_primary_spread 0
 set g_balance_laser_primary_refire 0.7
 set g_balance_laser_primary_animtime 0.3
 set g_balance_laser_primary_lifetime 30
@@ -232,6 +240,7 @@
 set g_balance_laser_secondary_force 400
 set g_balance_laser_secondary_radius 70
 set g_balance_laser_secondary_speed 12000
+set g_balance_laser_secondary_spread 0
 set g_balance_laser_secondary_refire 0.7
 set g_balance_laser_secondary_animtime 0.3
 set g_balance_laser_secondary_lifetime 30
@@ -279,6 +288,7 @@
 set g_balance_grenadelauncher_primary_radius 140
 set g_balance_grenadelauncher_primary_speed 2200
 set g_balance_grenadelauncher_primary_speed_up 220
+set g_balance_grenadelauncher_primary_spread 0
 set g_balance_grenadelauncher_primary_lifetime 30
 set g_balance_grenadelauncher_primary_refire 0.8
 set g_balance_grenadelauncher_primary_animtime 0.3
@@ -289,6 +299,7 @@
 set g_balance_grenadelauncher_secondary_radius 140
 set g_balance_grenadelauncher_secondary_speed 1400
 set g_balance_grenadelauncher_secondary_speed_up 150
+set g_balance_grenadelauncher_secondary_spread 0
 set g_balance_grenadelauncher_secondary_lifetime 1
 set g_balance_grenadelauncher_secondary_refire 0.7
 set g_balance_grenadelauncher_secondary_animtime 0.3
@@ -303,6 +314,7 @@
 set g_balance_electro_primary_radius 150
 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 30
 set g_balance_electro_primary_refire 0.6
 set g_balance_electro_primary_animtime 0.3
@@ -314,6 +326,7 @@
 set g_balance_electro_secondary_radius 150
 set g_balance_electro_secondary_speed 900
 set g_balance_electro_secondary_speed_up 200
+set g_balance_electro_secondary_spread 0
 set g_balance_electro_secondary_lifetime 2.5
 set g_balance_electro_secondary_refire 0.2
 set g_balance_electro_secondary_refire2 1
@@ -544,6 +557,7 @@
 set g_balance_fireball_primary_refire 2
 set g_balance_fireball_primary_speed 900
 set g_balance_fireball_primary_speed_up 100
+set g_balance_fireball_primary_spread 0
 set g_balance_fireball_secondary_ammo 25
 set g_balance_fireball_secondary_animtime 0.15
 set g_balance_fireball_secondary_bfgdamage 100
@@ -563,4 +577,5 @@
 set g_balance_fireball_secondary_refire 0
 set g_balance_fireball_secondary_refire2 4
 set g_balance_fireball_secondary_speed 650
+set g_balance_fireball_secondary_spread 0
 //   }}}

Modified: trunk/data/qcsrc/common/mathlib.qc
===================================================================
--- trunk/data/qcsrc/common/mathlib.qc	2009-11-07 21:12:34 UTC (rev 8231)
+++ trunk/data/qcsrc/common/mathlib.qc	2009-11-07 21:54:51 UTC (rev 8232)
@@ -120,7 +120,7 @@
 		return 2 * log(sqrt(x)); // faster
 	r = 1;
 	r0 = 0;
-	for(i = 1; fabs(r - r0) >= 0.0000001; ++i)
+	for(i = 1; fabs(r - r0) >= 0.00001; ++i)
 	{
 		// Newton iteration on exp(r) = x:
 		//   r <- r - (exp(r) - x) / (exp(r))
@@ -128,7 +128,6 @@
 		r0 = r;
 		r = r0 - 1 + x / exp(r0);
 	}
-	print(ftos(i), "\n");
 	return r;
 }
 float log10(float x)

Modified: trunk/data/qcsrc/common/util.qc
===================================================================
--- trunk/data/qcsrc/common/util.qc	2009-11-07 21:12:34 UTC (rev 8231)
+++ trunk/data/qcsrc/common/util.qc	2009-11-07 21:54:51 UTC (rev 8232)
@@ -1662,3 +1662,30 @@
 	// continuous function mapping all reals into 0..1
 	return 0.5 + 0.5 * float2range11(f);
 }
+
+// from the GNU Scientific Library
+float gsl_ran_gaussian_lastvalue;
+float gsl_ran_gaussian_lastvalue_set;
+float gsl_ran_gaussian(float sigma)
+{
+	float x, y, r2;
+	if(gsl_ran_gaussian_lastvalue_set)
+	{
+		gsl_ran_gaussian_lastvalue_set = 0;
+		return sigma * gsl_ran_gaussian_lastvalue;
+	}
+	else
+	{
+		do
+		{
+			x = -1 + 2 * random();
+			y = -1 + 2 * random();
+			r2 = x * x + y * y;
+		}
+		while(r2 > 1 || r2 == 0);
+		r2 = sqrt(-2 * log(r2) / r2);
+		gsl_ran_gaussian_lastvalue = x * r2;
+		gsl_ran_gaussian_lastvalue_set = 1;
+		return sigma * y * r2;
+	}
+}

Modified: trunk/data/qcsrc/common/util.qh
===================================================================
--- trunk/data/qcsrc/common/util.qh	2009-11-07 21:12:34 UTC (rev 8231)
+++ trunk/data/qcsrc/common/util.qh	2009-11-07 21:54:51 UTC (rev 8232)
@@ -200,3 +200,5 @@
 const var string string_null;
 float float2range11(float f);
 float float2range01(float f);
+
+float gsl_ran_gaussian(float sigma);

Modified: trunk/data/qcsrc/server/cl_weaponsystem.qc
===================================================================
--- trunk/data/qcsrc/server/cl_weaponsystem.qc	2009-11-07 21:12:34 UTC (rev 8231)
+++ trunk/data/qcsrc/server/cl_weaponsystem.qc	2009-11-07 21:54:51 UTC (rev 8232)
@@ -1228,14 +1228,6 @@
 	return outvelocity;
 }
 
-void W_SetupProjectileVelocity(entity missile)
-{
-	if(missile.owner == world)
-		error("Unowned missile");
-
-	missile.velocity = W_CalculateProjectileVelocity(missile.owner.velocity, missile.velocity);
-}
-
 void W_AttachToShotorg(entity flash, vector offset)
 {
 	entity xflash;
@@ -1268,3 +1260,92 @@
 		}
 	}
 }
+
+vector cliptoplane(vector v, vector p)
+{
+	return v - (v * p) * p;
+}
+
+vector findperpendicular(vector v)
+{
+	vector p;
+	p_x = v_z;
+	p_y = -v_x;
+	p_z = v_y;
+	return normalize(cliptoplane(p, v));
+}
+
+vector W_CalculateProjectileSpread(vector forward, float spread)
+{
+	float sigma;
+	vector v1, v2;
+	float dx, dy;
+	float sstyle;
+	if(spread <= 0)
+		return forward;
+	sstyle = cvar("g_projectiles_spread_style");
+	if(sstyle == 0)
+	{
+		// this is the baseline for the spread value!
+		// standard deviation: sqrt(2/5)
+		return forward + randomvec() * spread;
+	}
+	else if(sstyle == 1)
+	{
+		// same thing, basically
+		return normalize(forward + cliptoplane(randomvec() * spread, forward));
+	}
+	else if(sstyle == 2)
+	{
+		// circle spread... has at sigma=1 a standard deviation of sqrt(1/2)
+		sigma = spread * 0.89442719099991587855; // match baseline stddev
+		v1 = findperpendicular(forward);
+		v2 = cross(forward, v1);
+		do
+		{
+			dx = -1 + 2 * random();
+			dy = -1 + 2 * random();
+		}
+		while(dx * dx + dy * dy >= 1);
+		return normalize(forward + (v1 * dx + v2 * dy) * sigma);
+	}
+	else if(sstyle == 3)
+	{
+		sigma = spread * 0.63245553203368; // match baseline stddev
+		v1 = forward;
+		v1_x += gsl_ran_gaussian(sigma);
+		v1_y += gsl_ran_gaussian(sigma);
+		v1_z += gsl_ran_gaussian(sigma);
+		return v1;
+	}
+	else if(sstyle == 4)
+	{
+		sigma = spread * 0.51639777949433; // match baseline stddev
+		v1_x = gsl_ran_gaussian(sigma);
+		v1_y = gsl_ran_gaussian(sigma);
+		v1_z = gsl_ran_gaussian(sigma);
+		return normalize(forward + cliptoplane(v1, forward));
+	}
+	else
+		error("g_projectiles_spread_style must be 0 (sphere), 1 (flattened sphere), 2 (circle), 3 (gauss 3D), 4 (gauss plane)!");
+	return '0 0 0';
+}
+
+void W_SetupProjectileVelocityEx(entity missile, vector dir, vector upDir, float pSpeed, float pUpSpeed, float spread)
+{
+	if(missile.owner == world)
+		error("Unowned missile");
+
+	dir = dir + upDir * (pUpSpeed / pSpeed);
+	pSpeed *= vlen(dir);
+	dir = normalize(dir);
+	missile.velocity = W_CalculateProjectileVelocity(missile.owner.velocity, pSpeed * W_CalculateProjectileSpread(dir, spread));
+}
+
+void W_SetupProjectileVelocity(entity missile, float pSpeed, float spread)
+{
+	W_SetupProjectileVelocityEx(missile, w_shotdir, v_up, pSpeed, 0, spread);
+}
+
+#define W_SETUPPROJECTILEVELOCITY_UP(m,s) W_SetupProjectileVelocityEx(m, w_shotdir, v_up, cvar(#s "_speed"), cvar(#s "_speed_up"), cvar(#s "_spread"))
+#define W_SETUPPROJECTILEVELOCITY(m,s) W_SetupProjectileVelocityEx(m, w_shotdir, v_up, cvar(#s "_speed"), 0, cvar(#s "_spread"))

Modified: trunk/data/qcsrc/server/constants.qh
===================================================================
--- trunk/data/qcsrc/server/constants.qh	2009-11-07 21:12:34 UTC (rev 8231)
+++ trunk/data/qcsrc/server/constants.qh	2009-11-07 21:54:51 UTC (rev 8232)
@@ -1,5 +1,5 @@
 string CVAR_CHECK_DEFAULT = "9ede7a7edae0b7ae4c8b7e6517293a6a";
-string CVAR_CHECK_BALANCE = "1904952fd0d915f79ab4e6f0622abdb6";
+string CVAR_CHECK_BALANCE = "729b07b9caa8a86c08841a0f4275e97d";
 
 float	FALSE					= 0;
 float	TRUE					= 1;

Modified: trunk/data/qcsrc/server/g_hook.qc
===================================================================
--- trunk/data/qcsrc/server/g_hook.qc	2009-11-07 21:12:34 UTC (rev 8231)
+++ trunk/data/qcsrc/server/g_hook.qc	2009-11-07 21:54:51 UTC (rev 8232)
@@ -340,8 +340,7 @@
 
 	missile.state = 0; // not latched onto anything
 
-	missile.velocity = v_forward * cvar("g_balance_grapplehook_speed_fly");
-	W_SetupProjectileVelocity(missile);
+	W_SetupProjectileVelocityEx(missile, v_forward, v_up, cvar("g_balance_grapplehook_speed_fly"), 0, 0);
 
 	missile.angles = vectoangles (missile.velocity);
 	//missile.glow_color = 250; // 244, 250

Modified: trunk/data/qcsrc/server/nexball.qc
===================================================================
--- trunk/data/qcsrc/server/nexball.qc	2009-11-07 21:12:34 UTC (rev 8231)
+++ trunk/data/qcsrc/server/nexball.qc	2009-11-07 21:54:51 UTC (rev 8232)
@@ -675,8 +675,7 @@
 	setsize (missile, '0 0 0', '0 0 0');
 	setorigin (missile, w_shotorg);
 
-	missile.velocity = w_shotdir * cvar("g_balance_nexball_secondary_speed");
-	W_SetupProjectileVelocity(missile);
+	W_SetupProjectileVelocity(missile, cvar("g_balance_nexball_secondary_speed"), 0);
 	missile.angles = vectoangles (missile.velocity);
 	missile.touch = W_Nexball_Touch;
 	missile.think = SUB_Remove;

Modified: trunk/data/qcsrc/server/w_common.qc
===================================================================
--- trunk/data/qcsrc/server/w_common.qc	2009-11-07 21:12:34 UTC (rev 8231)
+++ trunk/data/qcsrc/server/w_common.qc	2009-11-07 21:54:51 UTC (rev 8232)
@@ -361,8 +361,7 @@
 		proj.movetype = MOVETYPE_FLY;
 	proj.think = SUB_Remove;
 	proj.nextthink = time + lifetime; // min(pLifetime, vlen(world.maxs - world.mins) / pSpeed);
-	proj.velocity = (dir + randomvec() * spread) * pSpeed;
-	W_SetupProjectileVelocity(proj);
+	W_SetupProjectileVelocityEx(proj, dir, v_up, pSpeed, 0, spread);
 	proj.angles = vectoangles(proj.velocity);
 	proj.dmg_radius = cvar("g_ballistics_materialconstant") / bulletconstant;
 	// so: bulletconstant = bullet mass / area of bullet circle

Modified: trunk/data/qcsrc/server/w_crylink.qc
===================================================================
--- trunk/data/qcsrc/server/w_crylink.qc	2009-11-07 21:12:34 UTC (rev 8231)
+++ trunk/data/qcsrc/server/w_crylink.qc	2009-11-07 21:54:51 UTC (rev 8232)
@@ -101,9 +101,7 @@
 			s_z = v_forward_y;
 		}
 		s = s * cvar("g_balance_crylink_primary_spread");
-		proj.velocity = (w_shotdir + right * s_y + up * s_z) * cvar("g_balance_crylink_primary_speed");
-//		proj.velocity = (w_shotdir + randomvec() * cvar("g_balance_crylink_primary_spread")) * cvar("g_balance_crylink_primary_speed");
-		W_SetupProjectileVelocity(proj);
+		W_SetupProjectileVelocityEx(proj, w_shotdir + right * s_y + up * s_z, v_up, cvar("g_balance_crylink_primary_speed"), 0, 0);
 		proj.touch = W_Crylink_Touch;
 		if(counter == 0)
 			SUB_SetFade(proj, time + cvar("g_balance_crylink_primary_middle_lifetime"), cvar("g_balance_crylink_primary_middle_fadetime"));
@@ -154,8 +152,7 @@
 		setorigin (proj, w_shotorg);
 		setsize(proj, '0 0 0', '0 0 0');
 
-		proj.velocity = (w_shotdir + (((counter + 0.5) / shots) * 2 - 1) * v_right * cvar("g_balance_crylink_secondary_spread")) * cvar("g_balance_crylink_secondary_speed");
-		W_SetupProjectileVelocity(proj);
+		W_SetupProjectileVelocityEx(proj, (w_shotdir + (((counter + 0.5) / shots) * 2 - 1) * v_right * cvar("g_balance_crylink_secondary_spread")), v_up, cvar("g_balance_crylink_secondary_speed"), 0, 0);
 		proj.touch = W_Crylink_Touch2;
 		if(counter == (shots - 1) / 2)
 			SUB_SetFade(proj, time + cvar("g_balance_crylink_secondary_middle_lifetime"), cvar("g_balance_crylink_secondary_middle_fadetime"));

Modified: trunk/data/qcsrc/server/w_electro.qc
===================================================================
--- trunk/data/qcsrc/server/w_electro.qc	2009-11-07 21:12:34 UTC (rev 8231)
+++ trunk/data/qcsrc/server/w_electro.qc	2009-11-07 21:54:51 UTC (rev 8232)
@@ -127,8 +127,7 @@
 	if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
 		self.ammo_cells = self.ammo_cells - cvar("g_balance_electro_primary_ammo");
 	proj.movetype = MOVETYPE_FLY;
-	proj.velocity = w_shotdir * cvar("g_balance_electro_primary_speed");
-	W_SetupProjectileVelocity(proj);
+	W_SETUPPROJECTILEVELOCITY(proj, g_balance_electro_primary);
 	proj.angles = vectoangles(proj.velocity);
 	proj.touch = W_Plasma_TouchExplode;
 	setsize(proj, '0 0 -3', '0 0 -3');
@@ -166,8 +165,7 @@
 	//proj.glow_size = 50;
 	//proj.glow_color = 45;
 	proj.movetype = MOVETYPE_BOUNCE;
-	proj.velocity = (w_shotdir + randomvec() * cvar("g_balance_electro_secondary_spread")) * cvar("g_balance_electro_secondary_speed") + v_up * cvar("g_balance_electro_secondary_speed_up");
-	W_SetupProjectileVelocity(proj);
+	W_SETUPPROJECTILEVELOCITY_UP(proj, g_balance_electro_secondary);
 	proj.touch = W_Plasma_Touch;
 	setsize(proj, '0 0 -3', '0 0 -3');
 	proj.takedamage = DAMAGE_YES;

Modified: trunk/data/qcsrc/server/w_fireball.qc
===================================================================
--- trunk/data/qcsrc/server/w_fireball.qc	2009-11-07 21:12:34 UTC (rev 8231)
+++ trunk/data/qcsrc/server/w_fireball.qc	2009-11-07 21:54:51 UTC (rev 8232)
@@ -145,8 +145,7 @@
 	setorigin(proj, w_shotorg);
 
 	proj.movetype = MOVETYPE_FLY;
-	proj.velocity = w_shotdir * cvar("g_balance_fireball_secondary_speed");
-	W_SetupProjectileVelocity(proj);
+	W_SETUPPROJECTILEVELOCITY(proj, g_balance_fireball_secondary);
 	proj.angles = vectoangles(proj.velocity);
 	proj.touch = W_Fireball_TouchExplode;
 	setsize(proj, '-16 -16 -16', '16 16 16');
@@ -280,9 +279,8 @@
 	proj.think = W_Firemine_Think;
 	proj.nextthink = time;
 	proj.damageforcescale = cvar("g_balance_fireball_primary_damageforcescale");
-	proj.velocity = w_shotdir * cvar("g_balance_fireball_primary_speed") + v_up * cvar("g_balance_fireball_primary_speed_up");
 	proj.pushltime = time + cvar("g_balance_fireball_primary_lifetime");
-	W_SetupProjectileVelocity(proj);
+	W_SETUPPROJECTILEVELOCITY_UP(proj, g_balance_fireball_primary);
 
 	proj.angles = vectoangles(proj.velocity);
 	proj.flags = FL_PROJECTILE;

Modified: trunk/data/qcsrc/server/w_grenadelauncher.qc
===================================================================
--- trunk/data/qcsrc/server/w_grenadelauncher.qc	2009-11-07 21:12:34 UTC (rev 8231)
+++ trunk/data/qcsrc/server/w_grenadelauncher.qc	2009-11-07 21:54:51 UTC (rev 8232)
@@ -99,8 +99,7 @@
 	gren.think = adaptor_think2use;
 	gren.use = W_Grenade_Explode;
 	gren.touch = W_Grenade_Touch1;
-	gren.velocity = w_shotdir * cvar("g_balance_grenadelauncher_primary_speed") + v_up * cvar("g_balance_grenadelauncher_primary_speed_up");
-	W_SetupProjectileVelocity(gren);
+	W_SETUPPROJECTILEVELOCITY_UP(gren, g_balance_grenadelauncher_primary);
 
 	gren.angles = vectoangles (gren.velocity);
 	gren.flags = FL_PROJECTILE;
@@ -138,8 +137,7 @@
 	gren.health = cvar("g_balance_grenadelauncher_secondary_health");
 	gren.damageforcescale = cvar("g_balance_grenadelauncher_secondary_damageforcescale");
 	gren.event_damage = W_Grenade_Damage;
-	gren.velocity = w_shotdir * cvar("g_balance_grenadelauncher_secondary_speed") + v_up * cvar("g_balance_grenadelauncher_secondary_speed_up");
-	W_SetupProjectileVelocity(gren);
+	W_SETUPPROJECTILEVELOCITY_UP(gren, g_balance_grenadelauncher_secondary);
 
 	gren.angles = vectoangles (gren.velocity);
 	gren.flags = FL_PROJECTILE;

Modified: trunk/data/qcsrc/server/w_hagar.qc
===================================================================
--- trunk/data/qcsrc/server/w_hagar.qc	2009-11-07 21:12:34 UTC (rev 8231)
+++ trunk/data/qcsrc/server/w_hagar.qc	2009-11-07 21:54:51 UTC (rev 8232)
@@ -61,8 +61,7 @@
 	setsize(missile, '0 0 0', '0 0 0');
 
 	missile.movetype = MOVETYPE_FLY;
-	missile.velocity = (w_shotdir + randomvec() * cvar("g_balance_hagar_primary_spread")) * cvar("g_balance_hagar_primary_speed");
-	W_SetupProjectileVelocity(missile);
+	W_SETUPPROJECTILEVELOCITY(missile, g_balance_hagar_primary);
 
 	missile.angles = vectoangles (missile.velocity);
 	missile.flags = FL_PROJECTILE;
@@ -97,9 +96,7 @@
 	setsize(missile, '0 0 0', '0 0 0');
 
 	missile.movetype = MOVETYPE_BOUNCEMISSILE;
-	missile.velocity = (w_shotdir + randomvec() * cvar("g_balance_hagar_secondary_spread")) * cvar("g_balance_hagar_secondary_speed");
-	W_SetupProjectileVelocity(missile);
-	missile.avelocity = '100 10 10';
+	W_SETUPPROJECTILEVELOCITY(missile, g_balance_hagar_secondary);
 
 	missile.angles = vectoangles (missile.velocity);
 	missile.flags = FL_PROJECTILE;

Modified: trunk/data/qcsrc/server/w_hlac.qc
===================================================================
--- trunk/data/qcsrc/server/w_hlac.qc	2009-11-07 21:12:34 UTC (rev 8231)
+++ trunk/data/qcsrc/server/w_hlac.qc	2009-11-07 21:54:51 UTC (rev 8232)
@@ -58,9 +58,7 @@
 	setorigin (missile, w_shotorg);
 	setsize(missile, '0 0 0', '0 0 0');
 
-    missile.velocity = (w_shotdir + randomvec() * spread) * cvar("g_balance_hlac_primary_speed");
-
-	W_SetupProjectileVelocity(missile);
+	W_SetupProjectileVelocity(missile, cvar("g_balance_hlac_primary_speed"), spread);
 	missile.angles = vectoangles (missile.velocity);
 
 	missile.touch = W_HLAC_Touch;
@@ -102,9 +100,7 @@
 	setorigin (missile, w_shotorg);
 	setsize(missile, '0 0 0', '0 0 0');
 
-    missile.velocity = (w_shotdir + randomvec() * spread) * cvar("g_balance_hlac_secondary_speed");
-
-	W_SetupProjectileVelocity(missile);
+	W_SetupProjectileVelocity(missile, cvar("g_balance_hlac_secondary_speed"), spread);
 	missile.angles = vectoangles (missile.velocity);
 
 	missile.touch = W_HLAC_Touch2;

Modified: trunk/data/qcsrc/server/w_laser.qc
===================================================================
--- trunk/data/qcsrc/server/w_laser.qc	2009-11-07 21:12:34 UTC (rev 8231)
+++ trunk/data/qcsrc/server/w_laser.qc	2009-11-07 21:54:51 UTC (rev 8232)
@@ -72,10 +72,9 @@
 	setsize(missile, '0 0 0', '0 0 0');
 
 	if (issecondary == 1)
-		missile.velocity = w_shotdir * cvar("g_balance_laser_secondary_speed");
+		W_SETUPPROJECTILEVELOCITY(missile, g_balance_laser_secondary);
 	else
-		missile.velocity = w_shotdir * cvar("g_balance_laser_primary_speed");
-	W_SetupProjectileVelocity(missile);
+		W_SETUPPROJECTILEVELOCITY(missile, g_balance_laser_primary);
 	missile.angles = vectoangles (missile.velocity);
 	//missile.glow_color = 250; // 244, 250
 	//missile.glow_size = 120;

Modified: trunk/data/qcsrc/server/w_porto.qc
===================================================================
--- trunk/data/qcsrc/server/w_porto.qc	2009-11-07 21:12:34 UTC (rev 8231)
+++ trunk/data/qcsrc/server/w_porto.qc	2009-11-07 21:54:51 UTC (rev 8232)
@@ -179,10 +179,10 @@
 	gren.nextthink = time + cvar("g_balance_porto_primary_lifetime");
 	gren.think = W_Porto_Think;
 	gren.touch = W_Porto_Touch;
-	gren.velocity = w_shotdir * cvar("g_balance_porto_primary_speed");
 	if(self.items & IT_STRENGTH)
-		gren.velocity = gren.velocity * cvar("g_balance_powerup_strength_force");
-	W_SetupProjectileVelocity(gren);
+		W_SetupProjectileVelocity(gren, cvar("g_balance_porto_primary_speed") * cvar("g_balance_powerup_strength_force"), 0);
+	else
+		W_SetupProjectileVelocity(gren, cvar("g_balance_porto_primary_speed"), 0);
 
 	gren.angles = vectoangles (gren.velocity);
 	gren.flags = FL_PROJECTILE;

Modified: trunk/data/qcsrc/server/w_rocketlauncher.qc
===================================================================
--- trunk/data/qcsrc/server/w_rocketlauncher.qc	2009-11-07 21:12:34 UTC (rev 8231)
+++ trunk/data/qcsrc/server/w_rocketlauncher.qc	2009-11-07 21:54:51 UTC (rev 8232)
@@ -319,10 +319,9 @@
 
 	setorigin (missile, w_shotorg - v_forward * 3); // move it back so it hits the wall at the right point
 	if(g_laserguided_missile && self.laser_on)
-		missile.velocity = w_shotdir * cvar("g_balance_rocketlauncher_laserguided_speedstart") * g_weaponspeedfactor;
+		W_SetupProjectileVelocity(missile, cvar("g_balance_rocketlauncher_laserguided_speedstart"), 0);
 	else
-		missile.velocity = w_shotdir * cvar("g_balance_rocketlauncher_speedstart") * g_weaponspeedfactor;
-	W_SetupProjectileVelocity(missile);
+		W_SetupProjectileVelocity(missile, cvar("g_balance_rocketlauncher_speedstart"), 0);
 	missile.angles = vectoangles (missile.velocity);
 
 	missile.touch = W_Rocket_Touch;



More information about the nexuiz-commits mailing list