diff --git a/src/common/utility/vectors.h b/src/common/utility/vectors.h index 77e41d2a9..47eb59793 100644 --- a/src/common/utility/vectors.h +++ b/src/common/utility/vectors.h @@ -1019,6 +1019,45 @@ struct TVector4 } }; +inline void ZeroSubnormalsF(double& num) +{ + if (fabs(num) < FLT_MIN) num = 0; +} + +inline void ZeroSubnormals(double& num) +{ + if (fabs(num) < DBL_MIN) num = 0; +} + +inline void ZeroSubnormals(float& num) +{ + if (fabsf(num) < FLT_MIN) num = 0; +} + +template +inline void ZeroSubnormals(TVector2& vec) +{ + ZeroSubnormals(vec.X); + ZeroSubnormals(vec.Y); +} + +template +inline void ZeroSubnormals(TVector3& vec) +{ + ZeroSubnormals(vec.X); + ZeroSubnormals(vec.Y); + ZeroSubnormals(vec.Z); +} + +template +inline void ZeroSubnormals(TVector4& vec) +{ + ZeroSubnormals(vec.X); + ZeroSubnormals(vec.Y); + ZeroSubnormals(vec.Z); + ZeroSubnormals(vec.W); +} + template struct TMatrix3x3 { diff --git a/src/g_statusbar/sbarinfo_commands.cpp b/src/g_statusbar/sbarinfo_commands.cpp index bbb3bc90f..73462f384 100644 --- a/src/g_statusbar/sbarinfo_commands.cpp +++ b/src/g_statusbar/sbarinfo_commands.cpp @@ -924,6 +924,7 @@ class CommandDrawString : public SBarInfoCommand break; default: str = GStrings.localize(label.GetChars()); + RealignString(); break; } } diff --git a/src/playsim/actor.h b/src/playsim/actor.h index d2f7fc3a6..b51cee366 100644 --- a/src/playsim/actor.h +++ b/src/playsim/actor.h @@ -774,6 +774,9 @@ public: void Set(DVector3 &off, int f = -1) { + ZeroSubnormalsF(off.X); + ZeroSubnormalsF(off.Y); + ZeroSubnormalsF(off.Z); Offset = off; if (f > -1)