yet another style: linear falloff
authordiv0 <div0@f962a42d-fe04-0410-a3ab-8c8b0445ebaa>
Sat, 7 Nov 2009 22:21:45 +0000 (22:21 +0000)
committerdiv0 <div0@f962a42d-fe04-0410-a3ab-8c8b0445ebaa>
Sat, 7 Nov 2009 22:21:45 +0000 (22:21 +0000)
git-svn-id: svn://svn.icculus.org/nexuiz/trunk@8233 f962a42d-fe04-0410-a3ab-8c8b0445ebaa

data/balance.cfg
data/balance25.cfg
data/balanceHavoc.cfg
data/balanceNexrun.cfg
data/balanceSamual.cfg
data/qcsrc/server/cl_weaponsystem.qc

index a3600eb..951691c 100644 (file)
@@ -184,6 +184,7 @@ set g_projectiles_spread_style 0
 //  2: forward + solid circle
 //  3: forward + normal distribution 3D - varies velocity
 //  4: forward + normal distribution on a plane
+//  5: forward + circle with linear falloff
 set g_balance_falldamage_deadminspeed 150
 set g_balance_falldamage_minspeed 1400
 set g_balance_falldamage_factor 0.15
index 4a24921..0d7e292 100644 (file)
@@ -184,6 +184,7 @@ set g_projectiles_spread_style 0
 //  2: forward + solid circle
 //  3: forward + normal distribution 3D - varies velocity
 //  4: forward + normal distribution on a plane
+//  5: forward + circle with linear falloff
 set g_balance_falldamage_deadminspeed 150
 set g_balance_falldamage_minspeed 1400
 set g_balance_falldamage_factor 0.15
index 95b1ccc..5711b61 100644 (file)
@@ -184,6 +184,7 @@ set g_projectiles_spread_style 0
 //  2: forward + solid circle
 //  3: forward + normal distribution 3D - varies velocity
 //  4: forward + normal distribution on a plane
+//  5: forward + circle with linear falloff
 set g_balance_falldamage_deadminspeed 150
 set g_balance_falldamage_minspeed 1400
 set g_balance_falldamage_factor 0.15
index ecbf59e..7b54911 100644 (file)
@@ -185,6 +185,7 @@ set g_projectiles_spread_style 0
 //  2: forward + solid circle
 //  3: forward + normal distribution 3D - varies velocity
 //  4: forward + normal distribution on a plane
+//  5: forward + circle with linear falloff
 set g_balance_falldamage_deadminspeed 150
 set g_balance_falldamage_minspeed 675
 set g_balance_falldamage_factor 0.25
index e3c8cec..e087f72 100644 (file)
@@ -185,6 +185,7 @@ set g_projectiles_spread_style 0
 //  2: forward + solid circle
 //  3: forward + normal distribution 3D - varies velocity
 //  4: forward + normal distribution on a plane
+//  5: forward + circle with linear falloff
 set g_balance_falldamage_deadminspeed 150
 set g_balance_falldamage_minspeed 1400
 set g_balance_falldamage_factor 0.15
index d9f484e..802cf43 100644 (file)
@@ -1279,7 +1279,7 @@ vector W_CalculateProjectileSpread(vector forward, float spread)
 {
        float sigma;
        vector v1, v2;
-       float dx, dy;
+       float dx, dy, r, t;
        float sstyle;
        if(spread <= 0)
                return forward;
@@ -1326,8 +1326,30 @@ vector W_CalculateProjectileSpread(vector forward, float spread)
                v1_z = gsl_ran_gaussian(sigma);
                return normalize(forward + cliptoplane(v1, forward));
        }
+       else if(sstyle == 5)
+       {
+               sigma = spread * 1.154700538379252; // 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);
+               // now we want a LINEAR falloff, though...
+               // i.e. radius X has a multiplied-in probability multiplier of 1-X
+               r = sqrt(dx * dx + dy * dy);
+               if(r > 0)
+               {
+                       t = 1 - sqrt(1 - r);
+                       dx *= t/r;
+                       dy *= t/r;
+               }
+               return normalize(forward + (v1 * dx + v2 * dy) * sigma);
+       }
        else
-               error("g_projectiles_spread_style must be 0 (sphere), 1 (flattened sphere), 2 (circle), 3 (gauss 3D), 4 (gauss plane)!");
+               error("g_projectiles_spread_style must be 0 (sphere), 1 (flattened sphere), 2 (circle), 3 (gauss 3D), 4 (gauss plane), 5 (linear falloff)!");
        return '0 0 0';
 }