]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge branch 'master' into terencehill/ons_spawn_patch
authorMario <mario@smbclan.net>
Sat, 24 Oct 2015 10:14:09 +0000 (20:14 +1000)
committerMario <mario@smbclan.net>
Sat, 24 Oct 2015 10:14:09 +0000 (20:14 +1000)
qcsrc/server/mutators/mutator/gamemode_onslaught.qc

index 4cda650826f3ced566d46ebf984425c6430abca9..51ddcadf91cafad9e790a6cb98bcd151625ac5f8 100644 (file)
@@ -1777,15 +1777,19 @@ bool ons_Teleport(entity player, entity tele_target, float range, bool tele_effe
        int i;
        vector loc;
        float theta;
+       // narrow the range for each iteration to increase chances that a spawnpoint
+       // can be found even if there's little room around the control point
+       float iteration_scale = 1;
        for(i = 0; i < 16; ++i)
        {
+               iteration_scale -= i / 16;
                theta = random() * 2 * M_PI;
                loc_y = sin(theta);
                loc_x = cos(theta);
                loc_z = 0;
-               loc *= random() * range;
+               loc *= random() * range * iteration_scale;
 
-               loc += tele_target.origin + '0 0 128';
+               loc += tele_target.origin + '0 0 128' * iteration_scale;
 
                tracebox(loc, PL_MIN, PL_MAX, loc, MOVE_NORMAL, player);
                if(trace_fraction == 1.0 && !trace_startsolid)
@@ -1897,10 +1901,12 @@ MUTATOR_HOOKFUNCTION(ons, PlayerSpawn)
                {
                        float i;
                        vector loc;
+                       float iteration_scale = 1;
                        for(i = 0; i < 10; ++i)
                        {
-                               loc = closest_target.origin + '0 0 96';
-                               loc += ('0 1 0' * random()) * 128;
+                               iteration_scale -= i / 10;
+                               loc = closest_target.origin + '0 0 96' * iteration_scale;
+                               loc += ('0 1 0' * random()) * 128 * iteration_scale;
                                tracebox(loc, PL_MIN, PL_MAX, loc, MOVE_NORMAL, self);
                                if(trace_fraction == 1.0 && !trace_startsolid)
                                {
@@ -1946,10 +1952,12 @@ MUTATOR_HOOKFUNCTION(ons, PlayerSpawn)
                {
                        float i;
                        vector loc;
+                       float iteration_scale = 1;
                        for(i = 0; i < 10; ++i)
                        {
-                               loc = closest_target.origin + '0 0 128';
-                               loc += ('0 1 0' * random()) * 256;
+                               iteration_scale -= i / 10;
+                               loc = closest_target.origin + '0 0 128' * iteration_scale;
+                               loc += ('0 1 0' * random()) * 256 * iteration_scale;
                                tracebox(loc, PL_MIN, PL_MAX, loc, MOVE_NORMAL, self);
                                if(trace_fraction == 1.0 && !trace_startsolid)
                                {