aboutsummaryrefslogtreecommitdiff
path: root/engines/titanic/game/code_wheel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/titanic/game/code_wheel.cpp')
-rw-r--r--engines/titanic/game/code_wheel.cpp70
1 files changed, 38 insertions, 32 deletions
diff --git a/engines/titanic/game/code_wheel.cpp b/engines/titanic/game/code_wheel.cpp
index 441fddec02..1df99ae749 100644
--- a/engines/titanic/game/code_wheel.cpp
+++ b/engines/titanic/game/code_wheel.cpp
@@ -30,17 +30,25 @@ BEGIN_MESSAGE_MAP(CodeWheel, CBomb)
ON_MESSAGE(EnterViewMsg)
ON_MESSAGE(MouseButtonUpMsg)
ON_MESSAGE(MovieEndMsg)
+ ON_MESSAGE(CheckCodeWheelsMsg)
END_MESSAGE_MAP()
-CodeWheel::CodeWheel() : CBomb(), _field108(0), _state(4),
- _field110(0), _field114(0), _field118(0) {
+static const int START_FRAMES[15] = {
+ 0, 5, 10, 15, 19, 24, 28, 33, 38, 42, 47, 52, 57, 61, 66
+};
+static const int END_FRAMES[15] = {
+ 5, 10, 15, 19, 24, 28, 33, 38, 42, 47, 52, 57, 61, 66, 70
+};
+
+CodeWheel::CodeWheel() : CBomb(), _correctValue(0), _value(4),
+ _matched(false), _field114(0), _field118(0) {
}
void CodeWheel::save(SimpleFile *file, int indent) {
file->writeNumberLine(1, indent);
- file->writeNumberLine(_field108, indent);
- file->writeNumberLine(_state, indent);
- file->writeNumberLine(_field110, indent);
+ file->writeNumberLine(_correctValue, indent);
+ file->writeNumberLine(_value, indent);
+ file->writeNumberLine(_matched, indent);
if (g_vm->isGerman()) {
file->writeNumberLine(_field114, indent);
file->writeNumberLine(_field118, indent);
@@ -51,9 +59,9 @@ void CodeWheel::save(SimpleFile *file, int indent) {
void CodeWheel::load(SimpleFile *file) {
file->readNumber();
- _field108 = file->readNumber();
- _state = file->readNumber();
- _field110 = file->readNumber();
+ _correctValue = file->readNumber();
+ _value = file->readNumber();
+ _matched = file->readNumber();
if (g_vm->isGerman()) {
_field114 = file->readNumber();
_field118 = file->readNumber();
@@ -63,29 +71,24 @@ void CodeWheel::load(SimpleFile *file) {
}
bool CodeWheel::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
- static const int START_FRAMES[15] = {
- 0, 5, 10, 15, 19, 24, 28, 33, 38, 42, 47, 52, 57, 61, 66
- };
- static const int END_FRAMES[15] = {
- 5, 10, 15, 19, 24, 28, 33, 38, 42, 47, 52, 57, 61, 66, 70
- };
-
int yp = _bounds.top + _bounds.height() / 2;
+ _matched = false;
+
if (msg->_mousePos.y > yp) {
- if (_state == _field108)
- _field110 = true;
+ if (_value == _correctValue)
+ _matched = true;
- _state = (_state + 1) % 15;
- playMovie(START_FRAMES[_state], END_FRAMES[_state],
- MOVIE_GAMESTATE | MOVIE_NOTIFY_OBJECT);
+ _value = (_value + 1) % 15;
+ playMovie(START_FRAMES[_value], END_FRAMES[_value],
+ MOVIE_WAIT_FOR_FINISH | MOVIE_NOTIFY_OBJECT);
} else {
- if (_state == _field108)
- _field110 = true;
+ if (_value == _correctValue)
+ _matched = true;
- playMovie(START_FRAMES[14 - _state] + 68, END_FRAMES[14 - _state] + 68,
- MOVIE_GAMESTATE | MOVIE_NOTIFY_OBJECT);
+ playMovie(START_FRAMES[14 - _value] + 68, END_FRAMES[14 - _value] + 68,
+ MOVIE_WAIT_FOR_FINISH | MOVIE_NOTIFY_OBJECT);
- _state = (_state <= 0) ? 14 : _state - 1;
+ _value = (_value <= 0) ? 14 : _value - 1;
}
playSound("z#59.wav");
@@ -93,8 +96,8 @@ bool CodeWheel::MouseButtonDownMsg(CMouseButtonDownMsg *msg) {
}
bool CodeWheel::EnterViewMsg(CEnterViewMsg *msg) {
- loadFrame(24);
- _state = 4;
+ // WORKAROUND: Don't keep resetting code wheels back to default
+ loadFrame(END_FRAMES[_value]);
return true;
}
@@ -104,15 +107,18 @@ bool CodeWheel::MouseButtonUpMsg(CMouseButtonUpMsg *msg) {
bool CodeWheel::MovieEndMsg(CMovieEndMsg *msg) {
sleep(200);
+
+ // Signal that a code wheel has changed
CStatusChangeMsg changeMsg;
- changeMsg._newStatus = 0;
- if (_field110)
- changeMsg._newStatus = -1;
- if (_field108 == _state)
- changeMsg._newStatus = 1;
changeMsg.execute("Bomb");
return true;
}
+bool CodeWheel::CheckCodeWheelsMsg(CCheckCodeWheelsMsg *msg) {
+ if (_value != _correctValue)
+ msg->_isCorrect = false;
+ return true;
+}
+
} // End of namespace Titanic