]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge branch 'martin-t/weapon_switch' into 'master'
authorMario <zacjardine@y7mail.com>
Sun, 21 Oct 2018 16:47:21 +0000 (16:47 +0000)
committerMario <zacjardine@y7mail.com>
Sun, 21 Oct 2018 16:47:21 +0000 (16:47 +0000)
Option to not reload by weapswitch and not fallback to other weaps from the impulse

See merge request xonotic/xonotic-data.pk3dir!616

.gitlab-ci.yml
qcsrc/common/mutators/mutator/nades/nades.qc
qcsrc/common/physics/movetypes/movetypes.qc
qcsrc/common/physics/movetypes/movetypes.qh
qcsrc/common/physics/movetypes/toss.qc
qcsrc/common/physics/movetypes/walk.qc
qcsrc/server/client.qc
qcsrc/server/weapons/weaponsystem.qc
xonotic-server.cfg

index 66b075642f6f069c3548aacf7ba8a8d646ad7a59..09f32ba196dbe54ea108e54c9665b92cb0030dda 100644 (file)
@@ -29,7 +29,7 @@ test_sv_game:
     - wget -O data/maps/stormkeep.waypoints https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/stormkeep.waypoints
     - wget -O data/maps/stormkeep.waypoints.cache https://gitlab.com/xonotic/xonotic-maps.pk3dir/raw/master/maps/stormkeep.waypoints.cache
     - make
-    - EXPECT=538cd6a692f22150ac60d9902eddc75b
+    - EXPECT=bb534e81ce09934ceadfd952a8ecd016
     - HASH=$(${ENGINE} -noconfig -nohome +exec serverbench.cfg
       | tee /dev/stderr
       | grep '^:'
index b4a3066fb04a17621faa46e165db9160320e9308..43de3b8cdc6482a91d8f561aec1a9b52f0c81bae 100644 (file)
@@ -1103,7 +1103,8 @@ void spawn_held_nade(entity player, entity nowner, float ntime, int ntype, strin
        n.alpha = Nades_from(STAT(NADE_BONUS_TYPE, n)).m_alpha;
 
        setmodel(fn, MDL_NADE_VIEW);
-       setattachment(fn, player.(weaponentity), "");
+       //setattachment(fn, player.(weaponentity), "");
+       fn.viewmodelforclient = player;
        fn.realowner = fn.owner = player;
        fn.colormod = Nades_from(STAT(NADE_BONUS_TYPE, n)).m_color;
        fn.colormap = player.colormap;
index e31b4076beca1072f2e1870f61fa0b73ec6800da..ef9fbdf0f16b4e66388a9d6bf8312b106c065a70 100644 (file)
@@ -36,11 +36,15 @@ void _Movetype_WallFriction(entity this, vector stepnormal)  // SV_WallFriction
 vector planes[MAX_CLIP_PLANES];
 int _Movetype_FlyMove(entity this, float dt, bool applygravity, vector stepnormal, float stepheight) // SV_FlyMove
 {
+       if(dt <= 0)
+               return 0;
+
        int blocked = 0;
        int i, j, numplanes = 0;
        float time_left = dt, grav = 0;
        vector push;
-       vector primal_velocity, original_velocity, restore_velocity;
+       vector primal_velocity, original_velocity;
+       vector restore_velocity = this.velocity;
 
        for(i = 0; i < MAX_CLIP_PLANES; ++i)
                planes[i] = '0 0 0';
@@ -59,7 +63,7 @@ int _Movetype_FlyMove(entity this, float dt, bool applygravity, vector stepnorma
                }
        }
 
-       original_velocity = primal_velocity = restore_velocity = this.velocity;
+       original_velocity = primal_velocity = this.velocity;
 
        for(int bumpcount = 0;bumpcount < MAX_CLIP_PLANES;bumpcount++)
        {
@@ -67,8 +71,7 @@ int _Movetype_FlyMove(entity this, float dt, bool applygravity, vector stepnorma
                        break;
 
                push = this.velocity * time_left;
-               _Movetype_PushEntity(this, push, true);
-               if(trace_startsolid)
+               if(!_Movetype_PushEntity(this, push, true, false))
                {
                        // we got teleported by a touch function
                        // let's abort the move
@@ -113,22 +116,19 @@ int _Movetype_FlyMove(entity this, float dt, bool applygravity, vector stepnorma
                        vector org = this.origin;
                        vector steppush = '0 0 1' * stepheight;
 
-                       _Movetype_PushEntity(this, steppush, true);
-                       if(trace_startsolid)
+                       if(!_Movetype_PushEntity(this, steppush, true, false))
                        {
                                blocked |= 8;
                                break;
                        }
-                       _Movetype_PushEntity(this, push, true);
-                       if(trace_startsolid)
+                       if(!_Movetype_PushEntity(this, push, true, false))
                        {
                                blocked |= 8;
                                break;
                        }
                        float trace2_fraction = trace_fraction;
-                       steppush = '0 0 1' * (org.z - this.origin_z);
-                       _Movetype_PushEntity(this, steppush, true);
-                       if(trace_startsolid)
+                       steppush = vec3(0, 0, org.z - this.origin_z);
+                       if(!_Movetype_PushEntity(this, steppush, true, false))
                        {
                                blocked |= 8;
                                break;
@@ -501,20 +501,32 @@ void _Movetype_PushEntityTrace(entity this, vector push)
        tracebox(this.origin, this.mins, this.maxs, end, type, this);
 }
 
-float _Movetype_PushEntity(entity this, vector push, bool failonstartsolid)  // SV_PushEntity
+bool _Movetype_PushEntity(entity this, vector push, bool failonstartsolid, bool dolink)  // SV_PushEntity
 {
        _Movetype_PushEntityTrace(this, push);
 
        if(trace_startsolid && failonstartsolid)
-               return trace_fraction;
+       {
+               int oldtype = this.move_nomonsters;
+               this.move_nomonsters = MOVE_NOMONSTERS;
+               _Movetype_PushEntityTrace(this, push);
+               this.move_nomonsters = oldtype;
+               if(trace_startsolid)
+                       return true;
+       }
 
        this.origin = trace_endpos;
 
+       vector last_origin = this.origin;
+
+       if(dolink)
+               _Movetype_LinkEdict(this, true);
+
        if(trace_fraction < 1)
                if(this.solid >= SOLID_TRIGGER && (!IS_ONGROUND(this) || (this.groundentity != trace_ent)))
                        _Movetype_Impact(this, trace_ent);
 
-       return trace_fraction;
+       return (this.origin == last_origin); // false if teleported by touch
 }
 
 
index 62b7964d98db09a2906f7731658c99085d79d43b..1eb2d95e47b8ab98c8ae6d96e4c24b6135f16b7a 100644 (file)
@@ -95,7 +95,7 @@ void _Movetype_LinkEdict_TouchAreaGrid(entity this);
 void _Movetype_LinkEdict(entity this, float touch_triggers);
 vector _Movetype_ClipVelocity(vector vel, vector norm, float f);
 void _Movetype_PushEntityTrace(entity this, vector push);
-float _Movetype_PushEntity(entity this, vector push, float failonstartsolid);
+bool _Movetype_PushEntity(entity this, vector push, float failonstartsolid, bool dolink);
 
 void Movetype_Physics_NoMatchTicrate(entity this, float movedt, bool isclient);
 void Movetype_Physics_MatchTicrate(entity this, float tr, bool sloppy);
index 71e7fa9d08c9032e14abe5bb9bdcd10824b84121..fc3de0859bba0a22e91c87afec51e63384d8fd59 100644 (file)
@@ -44,14 +44,14 @@ void _Movetype_Physics_Toss(entity this, float dt)  // SV_Physics_Toss
        for (int bump = 0; bump < MAX_CLIP_PLANES && movetime > 0; ++bump)
        {
                vector move = this.velocity * movetime;
-               _Movetype_PushEntity(this, move, true);
+               _Movetype_PushEntity(this, move, true, false);
                if (wasfreed(this))
                        return;
 
                if (trace_startsolid)
                {
                        _Movetype_UnstickEntity(this);
-                       _Movetype_PushEntity(this, move, false);
+                       _Movetype_PushEntity(this, move, false, false);
                        if (wasfreed(this))
                                return;
                }
index c0f2fac9640be94fa6c550536f029c2197180e38..5c7ae9ee2a6e2797e7c2b4db9f09d8a42e1c3548 100644 (file)
@@ -100,10 +100,7 @@ void _Movetype_Physics_Walk(entity this, float dt)  // SV_WalkMove
 
                // move up
                vector upmove = '0 0 1' * PHYS_STEPHEIGHT(this);
-               _Movetype_PushEntity(this, upmove, true);
-               if(wasfreed(this))
-                       return;
-               if(trace_startsolid)
+               if(!_Movetype_PushEntity(this, upmove, true, true))
                {
                        // we got teleported when upstepping... must abort the move
                        return;
@@ -156,11 +153,7 @@ void _Movetype_Physics_Walk(entity this, float dt)  // SV_WalkMove
        // move down
        vector downmove = '0 0 0';
        downmove.z = -PHYS_STEPHEIGHT(this) + start_velocity.z * dt;
-       _Movetype_PushEntity(this, downmove, true);
-       if(wasfreed(this))
-               return;
-
-       if(trace_startsolid)
+       if(!_Movetype_PushEntity(this, downmove, true, true))
        {
                // we got teleported when downstepping... must abort the move
                return;
index af05fd79cf023e31ee8e73ce32f5e0eb4feae123..01c8222e62de1597fb561a31590f8bcb164e9b04 100644 (file)
@@ -1146,7 +1146,7 @@ void ClientConnect(entity this)
        if (IS_REAL_CLIENT(this))
                sv_notice_join(this);
 
-       this.move_qcphysics = false;
+       this.move_qcphysics = true;
 
        // update physics stats (players can spawn before physics runs)
        Physics_UpdateStats(this);
index 4a45b257a5db060c8b68a98facfaac9dd3ca4e5a..d791fc798e3056c1eb8dd6c5931561f4b282871e 100644 (file)
@@ -50,7 +50,7 @@ bool CL_Weaponentity_CustomizeEntityForClient(entity this, entity client)
 {
        this.viewmodelforclient = this.owner;
        if (IS_SPEC(client) && client.enemy == this.owner) this.viewmodelforclient = client;
-       return true;
+       return false;
 }
 
 vector CL_Weapon_GetShotOrg(int wpn)
index 956fb215548c55d20e9a62bd27cc2d0e31942901..e25ae7faca9b4d78250766ef4020dbdd4439e4ba 100644 (file)
@@ -381,6 +381,7 @@ set timelimit_max 60
 sv_gameplayfix_delayprojectiles 0
 sv_gameplayfix_q2airaccelerate 1
 sv_gameplayfix_stepmultipletimes 1
+sv_gameplayfix_stepdown 2
 
 // delay for "kill" to prevent abuse
 set g_balance_kill_delay 2