diff --git a/source/src/entity.h b/source/src/entity.h index 52369899..f62a90f9 100644 --- a/source/src/entity.h +++ b/source/src/entity.h @@ -389,8 +389,10 @@ struct playerent : dynent, playerstate void damageroll(float damage) { + extern void clamproll(physent *pl); float damroll = 2.0f*damage; roll += roll>0 ? damroll : (roll<0 ? -damroll : (rnd(2) ? damroll : -damroll)); // give player a kick + clamproll(this); } void hitpush(int damage, const vec &dir, playerent *actor, int gun) diff --git a/source/src/physics.cpp b/source/src/physics.cpp index 59bada83..bfb02623 100644 --- a/source/src/physics.cpp +++ b/source/src/physics.cpp @@ -243,6 +243,12 @@ VAR(recoilbackfade, 0, 100, 1000); // moveres indicated the physics precision (which is lower for monsters and multiplayer prediction) // local is false for multiplayer prediction +void clamproll(physent *pl) +{ + if(pl->roll > maxroll) pl->roll = maxroll; + else if(pl->roll < -maxroll) pl->roll = -maxroll; +} + void moveplayer(physent *pl, int moveres, bool local, int curtime) { bool water = false; @@ -457,8 +463,7 @@ void moveplayer(physent *pl, int moveres, bool local, int curtime) else { pl->roll += pl->strafe*curtime/-30.0f; - if(pl->roll>maxroll) pl->roll = (float)maxroll; - if(pl->roll<-maxroll) pl->roll = (float)-maxroll; + clamproll(pl); } // smooth pitch