add back the falloff curve that was MEANT to be linear before :P
authordiv0 <div0@f962a42d-fe04-0410-a3ab-8c8b0445ebaa>
Sun, 8 Nov 2009 09:14:31 +0000 (09:14 +0000)
committerdiv0 <div0@f962a42d-fe04-0410-a3ab-8c8b0445ebaa>
Sun, 8 Nov 2009 09:14:31 +0000 (09:14 +0000)
git-svn-id: svn://svn.icculus.org/nexuiz/trunk@8239 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 93857ab..7b18e9a 100644 (file)
@@ -186,6 +186,7 @@ set g_projectiles_spread_style 0
 //  4: forward + normal distribution on a plane
 //  5: forward + circle with 1-r falloff
 //  6: forward + circle with 1-r^2 falloff
+//  7: forward + circle with (1-r)(2-r) falloff
 set g_balance_falldamage_deadminspeed 150
 set g_balance_falldamage_minspeed 1400
 set g_balance_falldamage_factor 0.15
index 51edf6f..cc35031 100644 (file)
@@ -186,6 +186,7 @@ set g_projectiles_spread_style 0
 //  4: forward + normal distribution on a plane
 //  5: forward + circle with 1-r falloff
 //  6: forward + circle with 1-r^2 falloff
+//  7: forward + circle with (1-r)(2-r) falloff
 set g_balance_falldamage_deadminspeed 150
 set g_balance_falldamage_minspeed 1400
 set g_balance_falldamage_factor 0.15
index b4cd15d..0014074 100644 (file)
@@ -186,6 +186,7 @@ set g_projectiles_spread_style 0
 //  4: forward + normal distribution on a plane
 //  5: forward + circle with 1-r falloff
 //  6: forward + circle with 1-r^2 falloff
+//  7: forward + circle with (1-r)(2-r) falloff
 set g_balance_falldamage_deadminspeed 150
 set g_balance_falldamage_minspeed 1400
 set g_balance_falldamage_factor 0.15
index 16c3d2a..45d4da7 100644 (file)
@@ -187,6 +187,7 @@ set g_projectiles_spread_style 4
 //  4: forward + normal distribution on a plane
 //  5: forward + circle with 1-r falloff
 //  6: forward + circle with 1-r^2 falloff
+//  7: forward + circle with (1-r)(2-r) falloff
 set g_balance_falldamage_deadminspeed 150
 set g_balance_falldamage_minspeed 675
 set g_balance_falldamage_factor 0.25
index 8827f55..2fd0bcd 100644 (file)
@@ -187,6 +187,7 @@ set g_projectiles_spread_style 0
 //  4: forward + normal distribution on a plane
 //  5: forward + circle with 1-r falloff
 //  6: forward + circle with 1-r^2 falloff
+//  7: forward + circle with (1-r)(2-r) falloff
 set g_balance_falldamage_deadminspeed 150
 set g_balance_falldamage_minspeed 1400
 set g_balance_falldamage_factor 0.15
index 67a9823..761d78b 100644 (file)
@@ -1416,9 +1416,36 @@ vector W_CalculateProjectileSpread(vector forward, float spread)
                r = sqrt(1 - r);
                return normalize(forward + (v1 * dx + v2 * dy) * r * sigma);
        }
+       else if(sstyle == 7) // (1-r) (2-r)
+       {
+               sigma = spread * 1.224744871391589; // match baseline stddev
+               v1 = findperpendicular(forward);
+               v2 = cross(forward, v1);
+               // random point on unit circle
+               dx = random() * 2 * M_PI;
+               dy = sin(dx);
+               dx = cos(dx);
+               // radius in our dist function
+               r = random();
+               r = 1 - sqrt(r);
+               r = 1 - sqrt(r);
+               return normalize(forward + (v1 * dx + v2 * dy) * r * sigma);
+       }
        else
-               error("g_projectiles_spread_style must be 0 (sphere), 1 (flattened sphere), 2 (circle), 3 (gauss 3D), 4 (gauss plane), 5 (linear falloff), 6 (quadratic falloff)!");
+               error("g_projectiles_spread_style must be 0 (sphere), 1 (flattened sphere), 2 (circle), 3 (gauss 3D), 4 (gauss plane), 5 (linear falloff), 6 (quadratic falloff), 7 (stronger falloff)!");
        return '0 0 0';
+       /*
+        * how to derive falloff functions:
+        * rho(r) := (2-r) * (1-r);
+        * a : 0;
+        * b : 1;
+        * rhor(r) := r * rho(r);
+        * cr(t) := integrate(rhor(r), r, a, t);
+        * scr(t) := integrate(rhor(r) * r^2, r, a, t);
+        * variance : scr(b) / cr(b);
+        * solve(cr(r) = rand * cr(b), r), programmmode:false;
+        * sqrt(0.4 / variance), numer;
+        */
 }
 
 void W_SetupProjectileVelocityEx(entity missile, vector dir, vector upDir, float pSpeed, float pUpSpeed, float spread)