aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/titanic/star_control/fmatrix.cpp6
-rw-r--r--engines/titanic/star_control/fmatrix.h2
-rw-r--r--engines/titanic/star_control/star_control_sub12.cpp59
-rw-r--r--engines/titanic/star_control/star_control_sub12.h23
-rw-r--r--engines/titanic/star_control/star_control_sub13.cpp63
-rw-r--r--engines/titanic/star_control/star_control_sub13.h13
-rw-r--r--engines/titanic/star_control/star_control_sub20.cpp4
-rw-r--r--engines/titanic/star_control/star_control_sub20.h4
-rw-r--r--engines/titanic/star_control/star_view.cpp5
9 files changed, 169 insertions, 10 deletions
diff --git a/engines/titanic/star_control/fmatrix.cpp b/engines/titanic/star_control/fmatrix.cpp
index 81604c84ec..af15477d04 100644
--- a/engines/titanic/star_control/fmatrix.cpp
+++ b/engines/titanic/star_control/fmatrix.cpp
@@ -78,17 +78,17 @@ void FMatrix::set(FVector *row1, FVector *row2, FVector *row3) {
_row3 = *row3;
}
-void FMatrix::fn1(FVector *v) {
+void FMatrix::fn1(const FVector *v) {
_row3._x = v->_x;
FVector tempVector;
- tempVector.fn1(v);
+ _row3.fn1(&tempVector);
_row2._x = tempVector._x;
_row2._y = tempVector._y;
_row2._z = tempVector._z;
- _row3.multiply(v, &_row2);
+ _row3.multiply(&tempVector, &_row2);
_row1._x = _row2._x;
_row1._y = _row2._y;
_row1._z = _row2._z;
diff --git a/engines/titanic/star_control/fmatrix.h b/engines/titanic/star_control/fmatrix.h
index 33673874b4..d7c4acfbdc 100644
--- a/engines/titanic/star_control/fmatrix.h
+++ b/engines/titanic/star_control/fmatrix.h
@@ -69,7 +69,7 @@ public:
*/
void set(FVector *row1, FVector *row2, FVector *row3);
- void fn1(FVector *v);
+ void fn1(const FVector *v);
void fn2(FMatrix *m);
void fn3(FMatrix *m);
diff --git a/engines/titanic/star_control/star_control_sub12.cpp b/engines/titanic/star_control/star_control_sub12.cpp
index aa90a3c7c3..f968559a2f 100644
--- a/engines/titanic/star_control/star_control_sub12.cpp
+++ b/engines/titanic/star_control/star_control_sub12.cpp
@@ -41,6 +41,65 @@ CStarControlSub12::~CStarControlSub12() {
deleteHandler();
}
+void CStarControlSub12::proc2(const void *src) {
+ _sub13.copyFrom(src);
+}
+
+void CStarControlSub12::proc3(const void *src) {
+ _handlerP->copyFrom1(src);
+}
+
+void CStarControlSub12::proc4(const void *src) {
+ if (!isLocked()) {
+ _sub13.fn10(src);
+ set108();
+ }
+}
+
+void CStarControlSub12::proc5(const FVector *src) {
+ if (!isLocked())
+ _sub13.fn11(src);
+}
+
+void CStarControlSub12::proc6(int v) {
+ if (!isLocked())
+ _sub13.setC(v);
+}
+
+void CStarControlSub12::proc7(int v) {
+ if (!isLocked())
+ _sub13.set10(v);
+}
+
+void CStarControlSub12::proc8(int v) {
+ if (!isLocked())
+ _sub13.set14(v);
+}
+
+void CStarControlSub12::proc9(int v) {
+ if (!isLocked())
+ _sub13.set18(v);
+}
+
+void CStarControlSub12::proc10(int v) {
+ if (!isLocked())
+ _sub13.set1C(v);
+}
+
+void CStarControlSub12::proc11() {
+ if (!isLocked())
+ _sub13.fn12();
+}
+
+void CStarControlSub12::proc12(double v1, double v2) {
+ if (!isLocked())
+ _sub13.fn13(v1, v2);
+}
+
+void CStarControlSub12::proc13(CStarControlSub13 *dest) {
+ *dest = _sub13;
+}
+
void CStarControlSub12::load(SimpleFile *file, int param) {
_sub13.load(file, param);
}
diff --git a/engines/titanic/star_control/star_control_sub12.h b/engines/titanic/star_control/star_control_sub12.h
index 0600aba446..1262aa8bf3 100644
--- a/engines/titanic/star_control/star_control_sub12.h
+++ b/engines/titanic/star_control/star_control_sub12.h
@@ -52,12 +52,28 @@ private:
* Deletes any previous handler
*/
void deleteHandler();
+
+ /**
+ * Return whether the handler is locked
+ */
+ bool isLocked() { return _handlerP->isLocked(); }
public:
CStarControlSub12(void *val1, void *val2);
CStarControlSub12(CStarControlSub13 *src);
virtual ~CStarControlSub12();
- virtual void proc3() {}
+ virtual void proc2(const void *src);
+ virtual void proc3(const void *src);
+ virtual void proc4(const void *src);
+ virtual void proc5(const FVector *src);
+ virtual void proc6(int v);
+ virtual void proc7(int v);
+ virtual void proc8(int v);
+ virtual void proc9(int v);
+ virtual void proc10(int v);
+ virtual void proc11();
+ virtual void proc12(double v1, double v2);
+ virtual void proc13(CStarControlSub13 *dest);
/**
* Load the data for the class from file
@@ -68,6 +84,11 @@ public:
* Save the data for the class to file
*/
virtual void save(SimpleFile *file, int indent);
+
+
+ bool is108() const { return _field108; }
+ void set108() { _field108 = true; }
+ void reset108() { _field108 = false; }
};
} // End of namespace Titanic
diff --git a/engines/titanic/star_control/star_control_sub13.cpp b/engines/titanic/star_control/star_control_sub13.cpp
index 2038af3127..a8599a7654 100644
--- a/engines/titanic/star_control/star_control_sub13.cpp
+++ b/engines/titanic/star_control/star_control_sub13.cpp
@@ -21,6 +21,7 @@
*/
#include "titanic/star_control/star_control_sub13.h"
+#include "titanic/titanic.h"
namespace Titanic {
@@ -73,6 +74,18 @@ void CStarControlSub13::setup(void *ptr) {
// TODO
}
+void CStarControlSub13::copyFrom(const void *src) {
+ if (!src)
+ return;
+/*
+ _field0 = src->_field0;
+ _field4 = src->_field4;
+ _field8 = src->_field8;
+ _fieldC = src->_field18;
+ _field10 = src->_field1C;
+ */
+}
+
void CStarControlSub13::load(SimpleFile *file, int param) {
_field0 = file->readFloat();
_field4 = file->readFloat();
@@ -112,5 +125,55 @@ void CStarControlSub13::save(SimpleFile *file, int indent) {
_matrix.save(file, indent);
}
+void CStarControlSub13::fn10(const void *src) {
+ error("TODO: CStarControlSub13::fn10");
+}
+
+void CStarControlSub13::fn11(const FVector *v) {
+ _matrix.fn1(v);
+ _fieldD4 = 0;
+}
+
+void CStarControlSub13::setC(int v) {
+ _fieldC = v;
+ _fieldD4 = 0;
+}
+
+void CStarControlSub13::set10(int v) {
+ _field10 = v;
+ _fieldD4 = 0;
+}
+
+void CStarControlSub13::set14(int v) {
+ _field10 = v;
+}
+
+void CStarControlSub13::set18(int v) {
+ _field18 = v;
+ _fieldD4 = 0;
+}
+
+void CStarControlSub13::set1C(int v) {
+ _field1C = v;
+ _fieldD4 = 0;
+}
+
+void CStarControlSub13::fn12() {
+ _matrix.clear();
+ error("TODO: CStarControlSub13::fn12");
+}
+
+void CStarControlSub13::fn13(double v1, double v2) {
+ if (v1 == 0.0) {
+ _valArray[0] = v2;
+ _valArray[1] = -v2;
+ } else {
+ _valArray[3] = v2;
+ _valArray[4] = -v2;
+ }
+
+ _valArray[2] = 0.0;
+ _field24 = v2 ? 2 : 0;
+}
} // End of namespace Titanic
diff --git a/engines/titanic/star_control/star_control_sub13.h b/engines/titanic/star_control/star_control_sub13.h
index 7eeab972aa..eb4a07cb32 100644
--- a/engines/titanic/star_control/star_control_sub13.h
+++ b/engines/titanic/star_control/star_control_sub13.h
@@ -58,6 +58,8 @@ public:
CStarControlSub13(void *ptr);
CStarControlSub13(CStarControlSub13 *src);
+ void copyFrom(const void *src);
+
/**
* Load the data for the class from file
*/
@@ -67,6 +69,17 @@ public:
* Save the data for the class to file
*/
void save(SimpleFile *file, int indent);
+
+ void fn10(const void *src);
+ void fn11(const FVector *v);
+ void fn12();
+ void fn13(double v1, double v2);
+
+ void setC(int v);
+ void set10(int v);
+ void set14(int v);
+ void set18(int v);
+ void set1C(int v);
};
} // End of namespace Titanic
diff --git a/engines/titanic/star_control/star_control_sub20.cpp b/engines/titanic/star_control/star_control_sub20.cpp
index 958ee3813e..82b6b0d7dd 100644
--- a/engines/titanic/star_control/star_control_sub20.cpp
+++ b/engines/titanic/star_control/star_control_sub20.cpp
@@ -47,11 +47,11 @@ CStarControlSub20::~CStarControlSub20() {
clear();
}
-void CStarControlSub20::copyFrom1(void *src) {
+void CStarControlSub20::copyFrom1(const void *src) {
error("TODO: CStarControlSub20::copyFrom1");
}
-void CStarControlSub20::copyFrom2(void *src) {
+void CStarControlSub20::copyFrom2(const void *src) {
error("TODO: CStarControlSub20::copyFrom2");
}
diff --git a/engines/titanic/star_control/star_control_sub20.h b/engines/titanic/star_control/star_control_sub20.h
index 376c09743a..9d90b80d26 100644
--- a/engines/titanic/star_control/star_control_sub20.h
+++ b/engines/titanic/star_control/star_control_sub20.h
@@ -44,8 +44,8 @@ public:
CStarControlSub20(void *src);
virtual ~CStarControlSub20();
- virtual void copyFrom1(void *src);
- virtual void copyFrom2(void *src);
+ virtual void copyFrom1(const void *src);
+ virtual void copyFrom2(const void *src);
virtual void proc4();
virtual void proc5();
virtual void proc6();
diff --git a/engines/titanic/star_control/star_view.cpp b/engines/titanic/star_control/star_view.cpp
index 2308227f6c..5140dc086f 100644
--- a/engines/titanic/star_control/star_view.cpp
+++ b/engines/titanic/star_control/star_view.cpp
@@ -32,7 +32,10 @@ CStarView::CStarView() : _sub12(nullptr, nullptr), _sub13((void *)nullptr),
_owner(nullptr), _starField(nullptr), _videoSurface(nullptr), _field118(0),
_videoSurface2(nullptr), _field210(0), _homePhotoMask(nullptr),
_field218(0), _field21C(0) {
- _sub12.proc3();
+ static const uint DATA[8] = { 0, 0, 0x47C35000, 0, 0x41A00000,
+ 0x3F800000, 0x3F800000, 0x3F800000 };
+
+ _sub12.proc3(&DATA[0]);
}
void CStarView::load(SimpleFile *file, int param) {