From c06055e1a4433792ed517d8ae3034e113424b85a Mon Sep 17 00:00:00 2001 From: David Fioramonti Date: Mon, 21 Aug 2017 16:55:21 -0700 Subject: TITANIC: Made variable for magic number used in auto camera mover This variable controls the number of transitions the game goes through when the mover is changing position. This reduces several 31/32s from the code. --- engines/titanic/star_control/camera_auto_mover.cpp | 18 ++++++++++-------- engines/titanic/star_control/camera_auto_mover.h | 3 ++- engines/titanic/star_control/marked_auto_mover.cpp | 2 +- engines/titanic/star_control/unmarked_auto_mover.cpp | 2 +- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/engines/titanic/star_control/camera_auto_mover.cpp b/engines/titanic/star_control/camera_auto_mover.cpp index b94c4d601c..aa29fa0e8e 100644 --- a/engines/titanic/star_control/camera_auto_mover.cpp +++ b/engines/titanic/star_control/camera_auto_mover.cpp @@ -90,22 +90,24 @@ void CCameraAutoMover::setPath(const FVector &srcV, const FVector &destV, const } void CCameraAutoMover::calcSpeeds(int val1, int val2, float distance) { + // Usually val1 and val2 are small where as distance can be large _field44 = val1; - _field4C = val1 + 62; + _field4C = val1 + 2 * nMoverTransitions; // For _nMoverTransitions = 32 this second value was 64, + // should it always be x2 _nMoverTransitions? _field38 = distance / (double)(val1 + val2 * 2); - _field40 = 31; - _field48 = 31; + _field40 = nMoverTransitions-1; + _field48 = nMoverTransitions-1; _field3C = (double)val2 * _field38; // Calculate the speeds for a graduated movement between stars - double base = 0.0, total = 0.0; - for (int idx = 31; idx >= 0; --idx) { - _speeds[idx] = pow(base, 4.0); + double base = 0.0, total = 0.0, power = 4.0, baseInc = 0.03125; + for (int idx = nMoverTransitions - 1; idx >= 0; --idx) { + _speeds[idx] = pow(base, power); total += _speeds[idx]; - base += 0.03125; + base += baseInc; } - for (int idx = 0; idx < 32; ++idx) { + for (int idx = 0; idx < nMoverTransitions; ++idx) { _speeds[idx] = _speeds[idx] * _field3C / total; } } diff --git a/engines/titanic/star_control/camera_auto_mover.h b/engines/titanic/star_control/camera_auto_mover.h index 7b2e44fe13..210bd74091 100644 --- a/engines/titanic/star_control/camera_auto_mover.h +++ b/engines/titanic/star_control/camera_auto_mover.h @@ -31,6 +31,7 @@ namespace Titanic { class CErrorCode; class FMatrix; +const int nMoverTransitions = 32; // The number of vector transitions when doing a mover change is fixed /** * Base class for automatic movement of the starview camera @@ -49,7 +50,7 @@ protected: int _field44; int _field48; int _field4C; - double _speeds[32]; + double _speeds[nMoverTransitions]; int _field54; double _transitionPercent; double _transitionPercentInc; diff --git a/engines/titanic/star_control/marked_auto_mover.cpp b/engines/titanic/star_control/marked_auto_mover.cpp index 22eb695427..0a1a7e4d49 100644 --- a/engines/titanic/star_control/marked_auto_mover.cpp +++ b/engines/titanic/star_control/marked_auto_mover.cpp @@ -74,7 +74,7 @@ int CMarkedAutoMover::proc5(CErrorCode &errorCode, FVector &pos, FMatrix &orient errorCode.set(); return 1; } else if (_field48 >= 0) { - double speedVal = _speeds[31 - _field48]; + double speedVal = _speeds[nMoverTransitions - 1 - _field48]; pos += _posDelta * speedVal; getVectorOnPath(pos); diff --git a/engines/titanic/star_control/unmarked_auto_mover.cpp b/engines/titanic/star_control/unmarked_auto_mover.cpp index 1461132c13..424e143b58 100644 --- a/engines/titanic/star_control/unmarked_auto_mover.cpp +++ b/engines/titanic/star_control/unmarked_auto_mover.cpp @@ -148,7 +148,7 @@ int CUnmarkedAutoMover::proc5(CErrorCode &errorCode, FVector &pos, FMatrix &orie } if (_field48 >= 0) { - double speedVal = _speeds[31 - _field48]; + double speedVal = _speeds[nMoverTransitions - 1 - _field48]; v1._y = v2._y * speedVal; v1._z = v2._z * speedVal; v1._x = v2._x * speedVal; -- cgit v1.2.3