diff options
Diffstat (limited to 'engines/titanic/game/code_wheel.cpp')
-rw-r--r-- | engines/titanic/game/code_wheel.cpp | 70 |
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 |