[Scummvm-git-logs] scummvm master -> 7887189b5aa806a38c06253f535b7eb78e250f53
dreammaster
dreammaster at scummvm.org
Sun Mar 12 14:51:32 CET 2017
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
7887189b5a TITANIC: Finished CStarControlSub23 class
Commit: 7887189b5aa806a38c06253f535b7eb78e250f53
https://github.com/scummvm/scummvm/commit/7887189b5aa806a38c06253f535b7eb78e250f53
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2017-03-12T09:51:23-04:00
Commit Message:
TITANIC: Finished CStarControlSub23 class
Changed paths:
engines/titanic/star_control/fvector.cpp
engines/titanic/star_control/fvector.h
engines/titanic/star_control/star_control_sub20.h
engines/titanic/star_control/star_control_sub22.cpp
engines/titanic/star_control/star_control_sub22.h
engines/titanic/star_control/star_control_sub23.cpp
engines/titanic/star_control/star_control_sub23.h
engines/titanic/star_control/star_control_sub24.h
engines/titanic/star_control/star_control_sub27.h
diff --git a/engines/titanic/star_control/fvector.cpp b/engines/titanic/star_control/fvector.cpp
index aa99e8b..de33bcf 100644
--- a/engines/titanic/star_control/fvector.cpp
+++ b/engines/titanic/star_control/fvector.cpp
@@ -40,13 +40,14 @@ void FVector::multiply(FVector *dest, const FVector *src) {
dest->_z = (src->_y * _x) - (_y * src->_x);
}
-void FVector::fn3() {
+double FVector::fn3() {
double hyp = sqrt(_x * _x + _y * _y + _z * _z);
assert(hyp);
_x *= 1.0 / hyp;
_y *= 1.0 / hyp;
_z *= 1.0 / hyp;
+ return hyp;
}
double FVector::getDistance(const FVector *src) const {
diff --git a/engines/titanic/star_control/fvector.h b/engines/titanic/star_control/fvector.h
index e19419b..71336eb 100644
--- a/engines/titanic/star_control/fvector.h
+++ b/engines/titanic/star_control/fvector.h
@@ -49,7 +49,7 @@ public:
void fn1(FVector *v);
void multiply(FVector *dest, const FVector *src);
- void fn3();
+ double fn3();
/**
* Returns the distance between a specified point and this one
diff --git a/engines/titanic/star_control/star_control_sub20.h b/engines/titanic/star_control/star_control_sub20.h
index 50806d9..49b63d5 100644
--- a/engines/titanic/star_control/star_control_sub20.h
+++ b/engines/titanic/star_control/star_control_sub20.h
@@ -54,7 +54,7 @@ public:
virtual void proc5();
virtual void proc6();
virtual void proc7();
- virtual void proc8() {}
+ virtual void proc8(FVector &v1, FVector &v2, FMatrix &m1, FMatrix &m2) {}
virtual void proc9(FVector &v1, FVector &v2, FMatrix &matrix) {}
virtual void proc10(const FVector &v1, const FVector &v2, const FVector &v3, const FMatrix &m) {}
virtual void proc11(CErrorCode &errorCode, FVector &v, const FMatrix &m);
diff --git a/engines/titanic/star_control/star_control_sub22.cpp b/engines/titanic/star_control/star_control_sub22.cpp
index 05a1cec..b76d96e 100644
--- a/engines/titanic/star_control/star_control_sub22.cpp
+++ b/engines/titanic/star_control/star_control_sub22.cpp
@@ -27,9 +27,18 @@ namespace Titanic {
CStarControlSub22::CStarControlSub22(const CStar20Data *src) :
CStarControlSub20(src) {
-#if 0
- _sub27()
-#endif
+}
+
+void CStarControlSub22::proc8(FVector &v1, FVector &v2, FMatrix &m1, FMatrix &m2) {
+ if (isLocked())
+ decLockCount();
+
+ _sub27.proc2(v1, v2, m1, m2);
+ incLockCount();
+}
+
+void CStarControlSub22::proc11(CErrorCode &errorCode, FVector &v, const FMatrix &m) {
+ // TODO
}
} // End of namespace Titanic
diff --git a/engines/titanic/star_control/star_control_sub22.h b/engines/titanic/star_control/star_control_sub22.h
index 4d353aa..61f60b1 100644
--- a/engines/titanic/star_control/star_control_sub22.h
+++ b/engines/titanic/star_control/star_control_sub22.h
@@ -30,11 +30,13 @@ namespace Titanic {
class CStarControlSub22 : public CStarControlSub20 {
private:
-#if 0
CStarControlSub27 _sub27;
-#endif
public:
CStarControlSub22(const CStar20Data *src);
+ virtual ~CStarControlSub22() {}
+
+ virtual void proc8(FVector &v1, FVector &v2, FMatrix &m1, FMatrix &m2);
+ virtual void proc11(CErrorCode &errorCode, FVector &v, const FMatrix &m);
};
} // End of namespace Titanic
diff --git a/engines/titanic/star_control/star_control_sub23.cpp b/engines/titanic/star_control/star_control_sub23.cpp
index 8edd451..40dbb8d 100644
--- a/engines/titanic/star_control/star_control_sub23.cpp
+++ b/engines/titanic/star_control/star_control_sub23.cpp
@@ -25,17 +25,89 @@
namespace Titanic {
+CStarControlSub23::CStarControlSub23() : _row1(0.0, 1000000.0, 0.0) {
+ _field4 = 0;
+ _field8 = 0;
+ _field24 = 0;
+ _field34 = 0;
+ _field38 = 0;
+ _field3C = 0;
+ _field40 = 0;
+ _field44 = 0;
+ _field48 = 0;
+ _field4C = 0;
+ _field54 = 0;
+ _field58 = 0;
+ _field5C = 0;
+ _field60 = 0;
+ _field64 = 0;
+}
+
+void CStarControlSub23::proc2(FVector &v1, FVector &v2, FMatrix &m1, FMatrix &m2) {
+ _row1 = v1;
+ _row2 = v2;
+ _row3 = _row2 - _row1;
+ _field24 = _row3.fn3();
+
+ _field58 = 0;
+ _field8 = 0;
+ _field34 = 0;
+ _field5C = 1.875;
+ _field40 = -1;
+ _field44 = -1;
+ _field48 = -1;
+ _field4C = 0;
+}
+
void CStarControlSub23::proc3(const FMatrix &m1, const FMatrix &m2) {
- // TODO
+ _row1.clear();
+ _row2.clear();
+ _field58 = 0;
+ _field24 = 0;
+ _field8 = 0;
+ _field34 = 0;
+ _field5C = 1.875;
}
void CStarControlSub23::proc4(FVector &v1, FVector &v2, FMatrix &m) {
- // TODO
+ _row1 = v1;
+ _row2 = v2;
+ FVector vector = _row2 - _row1;
+ _row3 = vector;
+ _field24 = _row3.fn3();
+
+ _field8 = 0;
+ _field34 = 0;
+ _field40 = -1;
+ _field44 = -1;
+ _field48 = -1;
+ _field4C = -1;
+ _field58 = 0;
+ _field5C = 1.875;
}
-int CStarControlSub23::proc5(CErrorCode &errorCode, FVector &v, const FMatrix &m) {
- // TODO
- return 0;
+void CStarControlSub23::proc6(int val1, int val2, float val) {
+ _field44 = val1;
+ _field4C = val1 + 62;
+ _field38 = val / (double)(val1 + val2 * 2);
+ _field40 = 31;
+ _field48 = 31;
+ _field3C = (double)val2 * _field38;
+
+ if (_powers.empty())
+ _powers.resize(32);
+
+ // Calculate the powers table
+ double exponent = 0.0, total = 0.0;
+ for (int idx = 31; idx >= 0; --idx) {
+ _powers[idx] = pow(4.0, exponent);
+ total += _powers[idx];
+ exponent += 0.03125;
+ }
+
+ for (int idx = 0; idx < 32; ++idx) {
+ _powers[idx] = _powers[idx] * _field3C / total;
+ }
}
} // End of namespace Titanic
diff --git a/engines/titanic/star_control/star_control_sub23.h b/engines/titanic/star_control/star_control_sub23.h
index b0ca739..8d18a8f 100644
--- a/engines/titanic/star_control/star_control_sub23.h
+++ b/engines/titanic/star_control/star_control_sub23.h
@@ -38,13 +38,13 @@ private:
int _field24;
FVector _row3;
int _field34;
- int _field38;
+ double _field38;
int _field3C;
int _field40;
int _field44;
int _field48;
int _field4C;
- int _field50;
+ Common::Array<double> _powers;
int _field54;
int _field58;
double _field5C;
@@ -52,10 +52,14 @@ private:
double _field64;
CStarControlSub25 _sub25;
public:
+ CStarControlSub23();
+ virtual ~CStarControlSub23() {}
+
+ virtual void proc2(FVector &v1, FVector &v2, FMatrix &m1, FMatrix &m2);
virtual void proc3(const FMatrix &m1, const FMatrix &m2);
virtual void proc4(FVector &v1, FVector &v2, FMatrix &m);
- virtual int proc5(CErrorCode &errorCode, FVector &v, const FMatrix &m);
- virtual ~CStarControlSub23() {}
+ virtual int proc5(CErrorCode &errorCode, FVector &v, const FMatrix &m) { return 2; }
+ virtual void proc6(int val1, int val2, float val);
int get8() const { return _field8; }
};
diff --git a/engines/titanic/star_control/star_control_sub24.h b/engines/titanic/star_control/star_control_sub24.h
index 7cdb220..9c29efb 100644
--- a/engines/titanic/star_control/star_control_sub24.h
+++ b/engines/titanic/star_control/star_control_sub24.h
@@ -30,7 +30,6 @@ namespace Titanic {
class CStarControlSub24 : public CStarControlSub23 {
public:
virtual ~CStarControlSub24() {}
-
};
} // End of namespace Titanic
diff --git a/engines/titanic/star_control/star_control_sub27.h b/engines/titanic/star_control/star_control_sub27.h
index ebac668..9770c97 100644
--- a/engines/titanic/star_control/star_control_sub27.h
+++ b/engines/titanic/star_control/star_control_sub27.h
@@ -28,6 +28,7 @@
namespace Titanic {
class CStarControlSub27 : public CStarControlSub23 {
+public:
virtual ~CStarControlSub27() {}
};
More information about the Scummvm-git-logs
mailing list