diff options
Diffstat (limited to 'engines/mads/phantom/phantom_scenes1.cpp')
-rw-r--r-- | engines/mads/phantom/phantom_scenes1.cpp | 9426 |
1 files changed, 9350 insertions, 76 deletions
diff --git a/engines/mads/phantom/phantom_scenes1.cpp b/engines/mads/phantom/phantom_scenes1.cpp index 2d991fd3bc..f42b3e64b5 100644 --- a/engines/mads/phantom/phantom_scenes1.cpp +++ b/engines/mads/phantom/phantom_scenes1.cpp @@ -11,7 +11,7 @@ * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License @@ -22,6 +22,7 @@ #include "common/scummsys.h" #include "mads/mads.h" +#include "mads/conversations.h" #include "mads/scene.h" #include "mads/phantom/phantom_scenes.h" #include "mads/phantom/phantom_scenes1.h" @@ -31,72 +32,284 @@ namespace MADS { namespace Phantom { void Scene1xx::setAAName() { - // TODO - //int idx = 0; - //_game._aaName = Resources::formatAAName(idx); + _game._aaName = Resources::formatAAName(_globals[kTempInterface]); + _vm->_palette->setEntry(254, 43, 47, 51); } void Scene1xx::sceneEntrySound() { - // TODO + if (!_vm->_musicFlag) + return; + + if (_globals[kDoneBrieConv203] == 3) { + _vm->_sound->command(39); + } else { + switch (_scene->_nextSceneId) { + case 101: + if (!_game._visitedScenes._sceneRevisited) + _vm->_sound->command(38); + else + _vm->_sound->command(16); + break; + + case 102: + if (_scene->_priorSceneId == 104) + _vm->_sound->command(27); + else + _vm->_sound->command(16); + break; + + case 103: + if ((_globals[kJacquesStatus] == 2)) { + _vm->_sound->command(32); + _globals[kJacquesStatus] = 3; + } else + _vm->_sound->command(16); + break; + + case 104: + if ((_vm->_gameConv->_restoreRunning == 7) || (_scene->_priorSceneId == 301)) { + _vm->_sound->command(33); + } else if (!_globals[kRoom103104Transition] && !_globals[kObservedPhan104]) { + _vm->_sound->command(37); + _globals[kObservedPhan104] = true; + } else + _vm->_sound->command(16); + break; + + case 111: + if (_scene->_priorSceneId == 150) + _vm->_sound->command(38); + else if (_globals[kLeaveAngelMusicOn]) + _vm->_sound->command(34); + else + _vm->_sound->command(16); + break; + case 113: + if (_globals[kLeaveAngelMusicOn]) + _vm->_sound->command(34); + else if (_globals[kCurrentYear] == 1993) + _vm->_sound->command(36); + else + _vm->_sound->command(35); + break; + + default: + if ((_scene->_priorSceneId != 204) && (_scene->_nextSceneId != 150)) + _vm->_sound->command(16); + break; + } + } +} + +void Scene1xx::setPlayerSpritesPrefix() { + _vm->_sound->command(5); + + Common::String oldName = _game._player._spritesPrefix; + + if (!_game._player._forcePrefix) + _game._player._spritesPrefix = "RAL"; + + if (oldName != _game._player._spritesPrefix) + _game._player._spritesChanged = true; + + _game._player._scalingVelocity = true; } /*------------------------------------------------------------------------*/ Scene101::Scene101(MADSEngine *vm) : Scene1xx(vm) { - + _chanStatus = -1; + _wipeStatus = -1; + _callingStatus = -1; + _chandelierStatus = -1; + _callingFrame = -1; + _chandelierFrame = -1; + _convCounter = 0; + _talkCounter = -1; + _brieAnimId = 0; + _startWalkingFl = false; + _startWalking0Fl = false; + _anim0Running = false; + _anim1Running = false; + _startSittingFl = false; } void Scene101::synchronize(Common::Serializer &s) { Scene1xx::synchronize(s); - + s.syncAsSint16LE(_chanStatus); + s.syncAsSint16LE(_wipeStatus); + s.syncAsSint16LE(_callingStatus); + s.syncAsSint16LE(_chandelierStatus); + s.syncAsSint16LE(_callingFrame); + s.syncAsSint16LE(_chandelierFrame); + s.syncAsSint16LE(_convCounter); + s.syncAsSint16LE(_talkCounter); + s.syncAsSint16LE(_brieAnimId); + s.syncAsByte(_startWalkingFl); + s.syncAsByte(_startWalking0Fl); + s.syncAsByte(_anim0Running); + s.syncAsByte(_anim1Running); + s.syncAsByte(_startSittingFl); } void Scene101::setup() { - //setPlayerSpritesPrefix(); + setPlayerSpritesPrefix(); setAAName(); + _scene->addActiveVocab(NOUN_MONSIEUR_BRIE); } void Scene101::enter() { - // TODO + _vm->_disableFastwalk = true; + + if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) { + _chanStatus = _wipeStatus = -1; + _startWalkingFl = _startWalking0Fl = false; + _anim0Running = _anim1Running = false; + _startSittingFl = false; + } + + // Load Dialogs + _vm->_gameConv->get(0); + _vm->_gameConv->get(1); if (_globals[kCurrentYear] == 1993) { _globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('z', -1)); - // TODO - //_scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); } else { - // TODO + _scene->_hotspots.activate(NOUN_CHANDELIER, false); + } + + if (_globals[kBrieTalkStatus] == 0) { + _game._player.firstWalk(Common::Point(-20, 75), FACING_EAST, Common::Point(18, 79), FACING_EAST, true); + _callingStatus = 0; + _chandelierStatus = 3; + _game._player.setWalkTrigger(50); + + _globals._animationIndexes[1] = _scene->loadAnimation(formAnimName('b', 9), 1); + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('b', 8), 1); + + _anim0Running = true; + _anim1Running = true; + + _brieAnimId = _scene->_dynamicHotspots.add(NOUN_MONSIEUR_BRIE, VERB_WALKTO, SYNTAX_SINGULAR_MASC, EXT_NONE, Common::Rect(0, 0, 0, 0)); + _scene->_dynamicHotspots[_brieAnimId]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(_brieAnimId, Common::Point(490, 119), FACING_NONE); + _scene->setDynamicAnim(_brieAnimId, _globals._animationIndexes[0], 0); + _scene->setDynamicAnim(_brieAnimId, _globals._animationIndexes[0], 1); + _scene->setDynamicAnim(_brieAnimId, _globals._animationIndexes[0], 2); + _scene->setDynamicAnim(_brieAnimId, _globals._animationIndexes[0], 3); + _scene->setDynamicAnim(_brieAnimId, _globals._animationIndexes[0], 4); + + int tmpIdx = _scene->_dynamicHotspots.add(NOUN_MONSIEUR_BRIE, VERB_WALKTO, SYNTAX_SINGULAR_MASC, EXT_NONE, Common::Rect(0, 0, 0, 0)); + _scene->_dynamicHotspots[tmpIdx]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(tmpIdx, Common::Point(25, 80), FACING_NONE); + _scene->setDynamicAnim(tmpIdx, _globals._animationIndexes[1], 1); + _scene->setDynamicAnim(tmpIdx, _globals._animationIndexes[1], 2); + + _talkCounter = 0; + } else if (_globals[kBrieTalkStatus] == 1) { + _globals._animationIndexes[1] = _scene->loadAnimation(formAnimName('b', 9), 1); + _brieAnimId = _scene->_dynamicHotspots.add(NOUN_MONSIEUR_BRIE, VERB_WALKTO, SYNTAX_SINGULAR_MASC, EXT_NONE, Common::Rect(0, 0, 0, 0)); + _scene->_dynamicHotspots[_brieAnimId]._articleNumber = PREP_ON; + _scene->setDynamicAnim(_brieAnimId, _globals._animationIndexes[1], 1); + _scene->setDynamicAnim(_brieAnimId, _globals._animationIndexes[1], 2); + _anim1Running = true; + _talkCounter = 0; + _chandelierStatus = 3; + + if (_vm->_gameConv->_restoreRunning == 1) { + _vm->_gameConv->run(1); + _vm->_gameConv->exportPointer(&_globals[kPlayerScore]); + _chandelierStatus = 4; + _scene->setAnimFrame(_globals._animationIndexes[1], 25); + } + } else if (_scene->_priorSceneId == 202) { + if (_globals[kJacquesStatus] == 1) + _globals[kJacquesStatus] = 2; + _game._player.firstWalk(Common::Point(-20, 75), FACING_EAST, Common::Point(18, 79), FACING_EAST, true); + } else if ((_scene->_priorSceneId == 102) || (_scene->_priorSceneId != RETURNING_FROM_LOADING)) { + _game._player.firstWalk(Common::Point(655, 130), FACING_WEST, Common::Point(625, 127), FACING_WEST, true); + _scene->setCamera(Common::Point(320, 0)); } - // TODO + sceneEntrySound(); } void Scene101::step() { - // TODO + if (_anim0Running) + handleAnimation0(); + + if ((_globals[kWalkerConverse] == 2) || (_globals[kWalkerConverse] == 3)) { + ++_convCounter; + if (_convCounter > 200) + _globals[kWalkerConverse] = _vm->getRandomNumber(1, 4); + } + + if (_anim1Running) { + handleAnimation1(); + + if (_scene->getAnimFrame(_globals._animationIndexes[1]) == 80) { + _game._player._stepEnabled = true; + _game._player.setWalkTrigger(55); + } + } + + if (_scene->_posAdjust.x > 200 && !_startSittingFl && (_globals[kBrieTalkStatus] != 2)) { + _startSittingFl = true; + _game._player.walk(Common::Point(490, 119), FACING_NORTHEAST); + _game._player._stepEnabled = false; + _game._player.setWalkTrigger(55); + _chandelierStatus = 4; + } + + if (_game._trigger == 55) { + _game._player._stepEnabled = true; + _vm->_gameConv->run(1); + _vm->_gameConv->exportPointer(&_globals[kPlayerScore]); + _chandelierFrame = -1; + _talkCounter = 0; + } + + if (_game._trigger == 50) { + _vm->_gameConv->run(0); + _callingStatus = 1; + } } void Scene101::preActions() { if (_action.isAction(VERB_EXIT_TO, NOUN_ORCHESTRA_PIT)) { - // TODO: Handle Brie - _game._player._walkOffScreenSceneId = 102; + if ((_globals[kBrieTalkStatus] == 2) || _startWalkingFl) { + _game._player._walkOffScreenSceneId = 102; + _globals[kBrieTalkStatus] = 2; + } else { + _vm->_gameConv->run(0); + _game._player._needToWalk = false; + } } else if (_action.isAction(VERB_EXIT_TO, NOUN_GRAND_FOYER)) { - // TODO: Handle Brie - _game._player._walkOffScreenSceneId = 202; - } else if (_action.isAction(VERB_TAKE, NOUN_MONSIEUR_BRIE)) { - _vm->_dialogs->show(10121); - } else if (_action.isAction(VERB_TALK_TO, NOUN_MONSIEUR_BRIE)) { - if (_globals[kBrieTalkStatus] == 2) + if ((_globals[kBrieTalkStatus] == 2) || _startWalkingFl) + _game._player._walkOffScreenSceneId = 202; + else { + _vm->_gameConv->run(0); _game._player._needToWalk = false; - } - - // TODO + } + } else if (_action.isAction(VERB_TAKE, NOUN_MONSIEUR_BRIE)) + _vm->_dialogs->show(10121); + else if (_action.isAction(VERB_TALK_TO, NOUN_MONSIEUR_BRIE) && (_globals[kBrieTalkStatus] == 2)) + _game._player._needToWalk = false; } void Scene101::actions() { - // TODO: Brie conversation - - // TODO: Look around - - if (_action.isAction(VERB_LOOK) || _action.isAction(VERB_LOOK_AT)) { + if (_vm->_gameConv->_running == 0) + handleConversation0(); + else if (_vm->_gameConv->_running == 1) + handleConversation1(); + else if (_action._lookFlag) { + if (_globals[kCurrentYear] == 1993) + _vm->_dialogs->show(10110); + else + _vm->_dialogs->show(10111); + } else if (_action.isAction(VERB_LOOK) || _action.isAction(VERB_LOOK_AT)) { if (_action.isObject(NOUN_AISLE)) { _vm->_dialogs->show(10112); } else if (_action.isObject(NOUN_CHANDELIER)) { @@ -106,8 +319,10 @@ void Scene101::actions() { } else if (_action.isObject(NOUN_SIDE_WALL)) { _vm->_dialogs->show(10115); } else if (_action.isObject(NOUN_SEATS)) { - // TODO: Finish this - _vm->_dialogs->show(10116); + if ((_globals[kBrieTalkStatus] > 1) || _startWalkingFl) + _vm->_dialogs->show(10119); + else + _vm->_dialogs->show(10116); } else if (_action.isObject(NOUN_GRAND_FOYER)) { _vm->_dialogs->show(10117); } else if (_action.isObject(NOUN_ORCHESTRA_PIT)) { @@ -115,64 +330,358 @@ void Scene101::actions() { } else if (_action.isObject(NOUN_MONSIEUR_BRIE)) { _vm->_dialogs->show(10120); } - - _game._player._stepEnabled = true; } else if (_action.isAction(VERB_TALK_TO, NOUN_MONSIEUR_BRIE)) { if (_globals[kBrieTalkStatus] == 2) _vm->_dialogs->show(10122); - _game._player._stepEnabled = true; - } else if (_action.isAction(VERB_TAKE, NOUN_MONSIEUR_BRIE)) { - _game._player._stepEnabled = true; + } else if (!_action.isAction(VERB_TAKE, NOUN_MONSIEUR_BRIE)) + return; + + _action._inProgress = false; +} + +void Scene101::handleConversation0() { + _vm->_gameConv->setHeroTrigger(90); + + if (_game._trigger == 90) { + _globals[kBrieTalkStatus] = 1; + _startWalking0Fl = true; + } +} + +void Scene101::handleConversation1() { + if ((_action._activeAction._verbId >= 0) && (_action._activeAction._verbId <= 27)) { + bool interlocutorFl = false; + + if (_game._trigger == 60) { + switch (_action._activeAction._verbId) { + case 0: + _chandelierStatus = 6; + _wipeStatus = 2; + break; + + case 1: + _chandelierStatus = 2; + _chanStatus = 9; + break; + + case 4: + _chandelierStatus = 0; + _chanStatus = -1; + _wipeStatus = -1; + break; + + case 8: + case 10: + case 18: + case 22: + case 24: + _startWalkingFl = true; + _chanStatus = -1; + _wipeStatus = -1; + _globals[kWalkerConverse] = 0; + _vm->_gameConv->setInterlocutorTrigger(105); + interlocutorFl = true; + break; + + case 12: + _chandelierStatus = 5; + _chanStatus = -1; + _wipeStatus = -1; + break; + + default: + break; + } + } + + if (!interlocutorFl) + _vm->_gameConv->setInterlocutorTrigger(60); + + _vm->_gameConv->setHeroTrigger(70); + + _talkCounter = 0; + + if (_game._trigger == 60) { + if (!_startWalkingFl) + _globals[kWalkerConverse] = _vm->getRandomNumber(1, 4); + + _chandelierStatus = 2; + } else if ((_game._trigger == 70) && !_startWalkingFl) { + _chandelierStatus = 4; + _chanStatus = -1; + _wipeStatus = -1; + if (!_startWalkingFl) + _globals[kWalkerConverse] = _vm->getRandomNumber(2, 3); + + _convCounter = 0; + } + } +} + +void Scene101::handleAnimation0() { + int resetFrame; + + if (_scene->getAnimFrame(_globals._animationIndexes[0]) != _callingFrame) { + _callingFrame = _scene->getAnimFrame(_globals._animationIndexes[0]); + resetFrame = -1; + switch (_callingFrame) { + case 1: + case 9: + case 12: + if (_callingStatus == 1) { + if (_callingFrame == 9) { + if (_startWalking0Fl) { + resetFrame = 13; + _callingStatus = 3; + } else + _callingStatus = 2; + } else + resetFrame = 1; + } + + if (_callingStatus == 0) { + if (_startWalking0Fl) { + resetFrame = 60; + _callingStatus = 3; + } else + resetFrame = 0; + } + + if (_callingStatus == 2) { + if (_startWalking0Fl) { + resetFrame = 13; + _callingStatus = 3; + } else { + ++_talkCounter; + + if (_talkCounter < 18) { + if (_vm->getRandomNumber(1, 2) == 1) + resetFrame = 7; + else + resetFrame = 10; + } else { + resetFrame = 54; + _callingStatus = 0; + } + } + } + break; + + case 53: + _anim0Running = false; + _scene->freeAnimation(0); + break; + + case 59: + if (_startWalking0Fl) { + resetFrame = 60; + _callingStatus = 3; + } else { + resetFrame = 0; + _callingStatus = 0; + } + break; + + case 66: + resetFrame = 24; + break; + } + + if (resetFrame >= 0) { + _scene->setAnimFrame(_globals._animationIndexes[0], resetFrame); + _callingFrame = resetFrame; + } + } +} + +void Scene101::handleAnimation1() { + if (_scene->getAnimFrame(_globals._animationIndexes[1]) == _chandelierFrame) + return; + + _chandelierFrame = _scene->getAnimFrame(_globals._animationIndexes[1]); + int resetFrame = -1; + switch (_chandelierFrame) { + case 1: + if (_chandelierStatus == 3) + resetFrame = 0; + break; + + case 11: + case 14: + case 17: + case 19: + case 26: + case 44: + case 333: + if (_talkCounter == _chanStatus) { + _chandelierStatus = 0; + ++_talkCounter; + _chanStatus = -1; + } + + if (_talkCounter == _wipeStatus) { + _chandelierStatus = 6; + ++_talkCounter; + _wipeStatus = -1; + } + + if (_startWalkingFl) { + if (_vm->_gameConv->_running == 1) { + if (_talkCounter > 13) + _chandelierStatus = 1; + } else + _chandelierStatus = 1; + } + + switch (_chandelierStatus) { + case 0: + resetFrame = 27; + _chandelierStatus = 2; + break; + + case 1: + _globals[kBrieTalkStatus] = 2; + resetFrame = 45; + if (_vm->_gameConv->_running == 1) + _vm->_gameConv->stop(); + _scene->_dynamicHotspots.remove(_brieAnimId); + _game._player._stepEnabled = false; + break; + + case 2: + ++_talkCounter; + if (_talkCounter < 15) { + switch (_vm->getRandomNumber(1, 3)) { + case 1: + resetFrame = 12; + break; + + case 2: + resetFrame = 14; + break; + + case 3: + resetFrame = 17; + } + } else { + _chandelierStatus = 4; + resetFrame = 25; + } + break; + + case 4: + resetFrame = 25; + break; + + case 5: + resetFrame = 21; + _chandelierStatus = 2; + break; + + case 6: + resetFrame = 316; + _chandelierStatus = 2; + break; + + default: + break; + } + break; + + case 315: + _scene->freeAnimation(1); + break; + } + + if (resetFrame >= 0) { + _scene->setAnimFrame(_globals._animationIndexes[1], resetFrame); + _chandelierFrame = resetFrame; } } /*------------------------------------------------------------------------*/ Scene102::Scene102(MADSEngine *vm) : Scene1xx(vm) { - _animRunningFl = false; + _anim0Running = false; } void Scene102::synchronize(Common::Serializer &s) { Scene1xx::synchronize(s); - s.syncAsByte(_animRunningFl); + s.syncAsByte(_anim0Running); } void Scene102::setup() { - //setPlayerSpritesPrefix(); + setPlayerSpritesPrefix(); setAAName(); } void Scene102::enter() { - _animRunningFl = false; + _anim0Running = false; _globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('x', 0)); _globals._spriteIndexes[3] = _scene->_sprites.addSprites("*RAL86"); if (_globals[kCurrentYear] == 1993) { _globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('z', -1)); - // TODO - //_scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); + _scene->drawToBackground(_globals._spriteIndexes[0], 1, Common::Point(-32000, -32000), 0, 100); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); } else { - // TODO + _scene->_hotspots.activate(NOUN_CHANDELIER, false); } if (_scene->_priorSceneId == 101) { _game._player._playerPos = Common::Point(97, 79); _game._player._facing = FACING_SOUTHEAST; - // TODO + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 4); _game._player.walk(Common::Point(83, 87), FACING_SOUTHEAST); _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 14); } else if (_scene->_priorSceneId == 104) { // Player fell from pit -> death - // TODO - } else if (_scene->_priorSceneId == 103 || _scene->_priorSceneId != -1) { + Common::Point deathPos = Common::Point(0, 0); + int deathScale = 0; + int deathDepth = 0; + _game._player._stepEnabled = false; + _game._player._visible = false; + + switch (_globals[36]) { + case 0: + deathPos = Common::Point(221, 57); + deathScale = 50; + deathDepth = 14; + break; + + case 1: + deathPos = Common::Point(219, 85); + deathScale = 60; + deathDepth = 6; + break; + + case 2: + deathPos = Common::Point(257, 138); + deathScale = 76; + deathDepth = 1; + break; + + default: + break; + } + _scene->_userInterface.emptyConversationList(); + _scene->_userInterface.setup(kInputConversation); + _globals._sequenceIndexes[3] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[3], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[3], deathDepth); + _scene->_sequences.setPosition(_globals._sequenceIndexes[3], deathPos); + _scene->_sequences.setScale(_globals._sequenceIndexes[3], deathScale); + _scene->_sequences.addTimer(120, 65); + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 4); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 14); + } else if (_scene->_priorSceneId == 103 || _scene->_priorSceneId != RETURNING_FROM_LOADING) { _game._player._playerPos = Common::Point(282, 145); _game._player._facing = FACING_WEST; - _animRunningFl = true; - // TODO: Door closing animation + _anim0Running = true; + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('d', 1), 60); } else if (_scene->_priorSceneId == -1) { - // TODO + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 4); _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 14); } @@ -180,52 +689,56 @@ void Scene102::enter() { } void Scene102::step() { - if (_game._trigger == 60) { // Door closes - // TODO - _animRunningFl = false; - } else if (_game._trigger == 65) { // Death - // TODO - _scene->_currentSceneId = 104; + if (_game._trigger == 60) { + // Door closes + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 4); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 14); + _anim0Running = false; + } else if (_game._trigger == 65) { + // Death + if (_globals[kDeathLocation] == 0) + _vm->_dialogs->show(10232); + else + _vm->_dialogs->show(10229); + + _vm->_sound->command(16); + _scene->_nextSceneId = 104; } } void Scene102::preActions() { - if (_action.isAction(VERB_OPEN, NOUN_ORCHESTRA_DOOR) || _action.isAction(VERB_PUSH, NOUN_ORCHESTRA_DOOR)) { + if (_action.isAction(VERB_OPEN, NOUN_ORCHESTRA_DOOR) || _action.isAction(VERB_PUSH, NOUN_ORCHESTRA_DOOR)) _game._player.walk(Common::Point(282, 145), FACING_EAST); - } } void Scene102::actions() { if (_action.isAction(VERB_WALK_DOWN, NOUN_AISLE)) { _scene->_nextSceneId = 101; - _game._player._stepEnabled = true; - } - - if (_action.isAction(VERB_WALK_THROUGH, NOUN_ORCHESTRA_DOOR) || + } else if (_action.isAction(VERB_WALK_THROUGH, NOUN_ORCHESTRA_DOOR) || _action.isAction(VERB_PUSH, NOUN_ORCHESTRA_DOOR) || _action.isAction(VERB_OPEN, NOUN_ORCHESTRA_DOOR)) { - if (_animRunningFl) { - // TODO + if (_anim0Running) { + _scene->_sequences.addTimer(15, 70); + _game._player._stepEnabled = false; } else { - _scene->_nextSceneId = 103; // FIXME: temporary HACK - remove! - switch (_game._trigger) { case 70: // try again case 0: - // TODO + _scene->deleteSequence(_globals._sequenceIndexes[2]); + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('d', 0), 1); + _game._player._stepEnabled = false; + _game._player._visible = false; break; case 1: _scene->_nextSceneId = 103; break; + default: + break; } } - - _game._player._stepEnabled = true; - } - - // TODO: Look around - - if (_action.isAction(VERB_LOOK) || _action.isAction(VERB_LOOK_AT)) { + } else if (_action._lookFlag) + _vm->_dialogs->show(10210); + else if (_action.isAction(VERB_LOOK) || _action.isAction(VERB_LOOK_AT)) { if (_action.isObject(NOUN_PIT)) _vm->_dialogs->show(10211); else if (_action.isObject(NOUN_SEATS)) @@ -263,18 +776,8779 @@ void Scene102::actions() { _vm->_dialogs->show(10227); else if (_action.isObject(NOUN_CHANDELIER)) _vm->_dialogs->show(10231); + } else if (_action.isAction(VERB_CLOSE, NOUN_ORCHESTRA_DOOR)) + _vm->_dialogs->show(10228); + + _game._player._stepEnabled = false; +} + +/*------------------------------------------------------------------------*/ + +Scene103::Scene103(MADSEngine *vm) : Scene1xx(vm) { + _jacquesAction = -1; + _lastRandom = -1; + _standPosition = -1; + _hotspotPrompt1 = -1; + _hotspotPrompt2 = -1; + _hotspotPrompt3 = -1; + _hotspotPrompt4 = -1; + _hotspotPrompt5 = -1; + _hotspotRightFloor1 = -1; + _hotspotRightFloor2 = -1; + _hotspotLeftFloor1 = -1; + _hotspotLeftFloor2 = -1; + _hotspotGentleman = -1; + _convCount = -1; + _lastStairFrame = -1; + _lastJacquesFrame = -1; + _talkCount = -1; + + _anim0ActvFl = false; + _anim1ActvFl = false; + _anim2ActvFl = false; + _anim3ActvFl = false; + _anim4ActvFl = false; + _anim5ActvFl = false; + _anim6ActvFl = false; + _climbThroughTrapFl = false; + _guardFrameFl = false; + _sitFl = false; +} + +void Scene103::synchronize(Common::Serializer &s) { + Scene1xx::synchronize(s); + + s.syncAsSint16LE(_jacquesAction); + s.syncAsSint16LE(_lastRandom); + s.syncAsSint16LE(_standPosition); + s.syncAsSint16LE(_hotspotPrompt1); + s.syncAsSint16LE(_hotspotPrompt2); + s.syncAsSint16LE(_hotspotPrompt3); + s.syncAsSint16LE(_hotspotPrompt4); + s.syncAsSint16LE(_hotspotPrompt5); + s.syncAsSint16LE(_hotspotRightFloor1); + s.syncAsSint16LE(_hotspotRightFloor2); + s.syncAsSint16LE(_hotspotLeftFloor1); + s.syncAsSint16LE(_hotspotLeftFloor2); + s.syncAsSint16LE(_convCount); + s.syncAsSint16LE(_lastStairFrame); + + s.syncAsByte(_anim0ActvFl); + s.syncAsByte(_anim1ActvFl); + s.syncAsByte(_anim2ActvFl); + s.syncAsByte(_anim3ActvFl); + s.syncAsByte(_anim4ActvFl); + s.syncAsByte(_anim5ActvFl); + s.syncAsByte(_anim6ActvFl); + s.syncAsByte(_climbThroughTrapFl); + s.syncAsByte(_guardFrameFl); + s.syncAsByte(_sitFl); +} + +void Scene103::setup() { + setPlayerSpritesPrefix(); + setAAName(); + + _scene->_variant = 0; + + if ((_globals[kPrompterStandStatus] == 1) || (_globals[kCurrentYear] == 1881)) { + _scene->_variant = 1; + if ((_globals[kJacquesStatus] == 0) && (_globals[kCurrentYear] == 1881)) + _scene->_variant = 2; + else if ((_globals[kJacquesStatus] >= 1) && (_globals[kCurrentYear] == 1881)) + _scene->_variant = 3; + } + + _scene->addActiveVocab(NOUN_PROMPTERS_STAND); + _scene->addActiveVocab(NOUN_JACQUES); + _scene->addActiveVocab(NOUN_GENTLEMAN); + _scene->addActiveVocab(VERB_CLIMB); +} + +void Scene103::enter() { + if (_scene->_priorSceneId != RETURNING_FROM_LOADING) { + _anim0ActvFl = false; + _anim1ActvFl = false; + _anim2ActvFl = false; + _anim3ActvFl = false; + _anim4ActvFl = false; + _anim5ActvFl = false; + _anim6ActvFl = false; + _climbThroughTrapFl = false; + _guardFrameFl = false; + _sitFl = false; + _jacquesAction = 1; + _lastRandom = 0; + _standPosition = 0; + } + + if (_globals[kJacquesStatus] >= 1) { + if (_game._objects.isInRoom(OBJ_KEY)) { + _globals._spriteIndexes[5] = _scene->_sprites.addSprites(formAnimName('x', 2)); + _globals._spriteIndexes[8] = _scene->_sprites.addSprites("*RRD_9"); + } + _globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('f', 3)); + _globals._spriteIndexes[6] = _scene->_sprites.addSprites(formAnimName('c', 1)); + _globals._spriteIndexes[7] = _scene->_sprites.addSprites(formAnimName('f', 1)); + } else { + _globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('f', 0)); + _globals._spriteIndexes[10] = _scene->_sprites.addSprites(formAnimName('a', 3)); + } + + _globals._spriteIndexes[9] = _scene->_sprites.addSprites(formAnimName('x', 3)); + _globals._spriteIndexes[11] = _scene->_sprites.addSprites(formAnimName('a', 2)); + _globals._spriteIndexes[12] = _scene->_sprites.addSprites(formAnimName('f', 2)); + _globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('x', 0)); + _globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('x', 1)); + _globals._spriteIndexes[2] = _scene->_sprites.addSprites("*RDR_6"); + + adjustRails(_scene->_variant); + + _scene->_hotspots.activate(NOUN_JACQUES, false); + _scene->_hotspots.activate(NOUN_KEY, false); + + _vm->_gameConv->get(12); + + if (_globals[kTrapDoorStatus] == 0) { + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, 5); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); + + _globals._sequenceIndexes[9] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[9], false, 2); + _scene->_sequences.setDepth(_globals._sequenceIndexes[9], 3); + } else if (_globals[kTrapDoorStatus] == 1) { + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); + + _globals._sequenceIndexes[9] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[9], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[9], 3); + } + + Common::Point promptPos; + Facing promptFacing; + + if (_globals[kJacquesStatus] == 0) { + promptPos = Common::Point(115, 142); + promptFacing = FACING_NORTHEAST; + } else { + promptPos = Common::Point(171, 142); + promptFacing = FACING_NORTHWEST; + } + + if ((_globals[kPrompterStandStatus] == 1) || (_globals[kCurrentYear] == 1881)) { + if (_globals[kJacquesStatus] >= 1) { + _globals._sequenceIndexes[7] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[7], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[7], 1); + + _globals._sequenceIndexes[3] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[3], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[3], 4); + _scene->_sequences.setPosition(_globals._sequenceIndexes[3], Common::Point(154, 139)); + + } else { + _globals._sequenceIndexes[3] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[3], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[3], 4); + _scene->_sequences.setPosition(_globals._sequenceIndexes[3], Common::Point(154, 139)); + + _globals._sequenceIndexes[12] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[12], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[12], 1); + } + + _hotspotPrompt1 = _scene->_dynamicHotspots.add(NOUN_PROMPTERS_STAND, VERB_WALKTO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(121, 79, 121 + 40, 79 + 63)); + _scene->_dynamicHotspots[_hotspotPrompt1]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(_hotspotPrompt1, promptPos, promptFacing); + + _hotspotPrompt2 = _scene->_dynamicHotspots.add(NOUN_PROMPTERS_STAND, VERB_WALKTO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(161, 67, 161 + 16, 67 + 75)); + _scene->_dynamicHotspots[_hotspotPrompt2]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(_hotspotPrompt2, promptPos, promptFacing); + + _hotspotPrompt3 = _scene->_dynamicHotspots.add(NOUN_PROMPTERS_STAND, VERB_WALKTO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(177, 90, 177 + 18, 90 + 52)); + _scene->_dynamicHotspots[_hotspotPrompt3]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(_hotspotPrompt3, promptPos, promptFacing); + + _hotspotPrompt4 = _scene->_dynamicHotspots.add(NOUN_PROMPTERS_STAND, VERB_WALKTO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(114, 100, 114 + 7, 100 + 38)); + _scene->_dynamicHotspots[_hotspotPrompt4]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(_hotspotPrompt4, promptPos, promptFacing); + + _hotspotPrompt5 = _scene->_dynamicHotspots.add(NOUN_PROMPTERS_STAND, VERB_CLIMB, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(121, 49, 121 + 40, 49 + 30)); + _scene->_dynamicHotspots[_hotspotPrompt5]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(_hotspotPrompt5, Common::Point(196, 134), FACING_SOUTHWEST); + _scene->_dynamicHotspots.setCursor(_hotspotPrompt5, CURSOR_GO_UP); + + _hotspotRightFloor1 = _scene->_dynamicHotspots.add(NOUN_FLOOR, VERB_WALK_ACROSS, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(154, 6, 154 + 41, 6 + 6)); + _scene->_dynamicHotspots[_hotspotRightFloor1]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(_hotspotRightFloor1, Common::Point(171, 142), FACING_NONE); + + _hotspotRightFloor2 = _scene->_dynamicHotspots.add(NOUN_FLOOR, VERB_WALK_ACROSS, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(114, 136, 114 + 32, 136 + 6)); + _scene->_dynamicHotspots[_hotspotRightFloor2]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(_hotspotRightFloor2, Common::Point(127, 140), FACING_NONE); + + if ((_globals[kJacquesStatus] == 0) && (_globals[kCurrentYear] == 1881)) { + if (_globals[kJacquesNameIsKnown] >= 1) { + _hotspotGentleman = _scene->_dynamicHotspots.add(NOUN_JACQUES, VERB_WALKTO, SYNTAX_SINGULAR_MASC, EXT_NONE, Common::Rect(156, 116, 156 + 33, 116 + 31)); + _scene->_dynamicHotspots[_hotspotGentleman]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(_hotspotGentleman, Common::Point(206, 148), FACING_NORTHWEST); + } else { + _hotspotGentleman = _scene->_dynamicHotspots.add(NOUN_GENTLEMAN, VERB_WALKTO, SYNTAX_MASC_NOT_PROPER, -1, Common::Rect(156, 116, 156 + 33, 116 + 31)); + _scene->_dynamicHotspots[_hotspotGentleman]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(_hotspotGentleman, Common::Point(206, 148), FACING_NORTHWEST); + } + int tmpIdx = _scene->_dynamicHotspots.add(NOUN_FLOOR, VERB_WALK_ACROSS, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(149, 140, 149 + 13, 140 + 7)); + _scene->_dynamicHotspots[tmpIdx]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(tmpIdx, Common::Point(155, 144), FACING_NONE); + + tmpIdx = _scene->_dynamicHotspots.add(NOUN_FLOOR, VERB_WALK_ACROSS, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(187, 136, 187 + 8, 136 + 7)); + _scene->_dynamicHotspots[tmpIdx]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(tmpIdx, Common::Point(195, 139), FACING_NONE); + } else if ((_globals[kJacquesStatus] >= 1) && (_globals[kCurrentYear] == 1881)) { + _globals._sequenceIndexes[6] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[6], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[6], 3); + if (_game._objects.isInRoom(OBJ_KEY)) { + _globals._sequenceIndexes[5] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[5], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[5], 14); + _scene->_hotspots.activate(NOUN_KEY, true); + } + _scene->_hotspots.activate(NOUN_JACQUES, true); + _scene->_dynamicHotspots.remove(_hotspotRightFloor2); + + int tmpIdx = _scene->_dynamicHotspots.add(NOUN_JACQUES, VERB_WALKTO, SYNTAX_SINGULAR_MASC, EXT_NONE, Common::Rect(114, 132, 114 + 30, 132 + 10)); + _scene->_dynamicHotspots[tmpIdx]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(tmpIdx, Common::Point(95, 144), FACING_NORTHEAST); + + tmpIdx = _scene->_dynamicHotspots.add(NOUN_FLOOR, VERB_WALK_ACROSS, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(94, 129, 94 + 18, 129 + 4)); + _scene->_dynamicHotspots[tmpIdx]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(tmpIdx, Common::Point(95, 133), FACING_NONE); + + tmpIdx = _scene->_dynamicHotspots.add(NOUN_FLOOR, VERB_WALK_ACROSS, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(94, 132, 94 + 3, 132 + 9)); + _scene->_dynamicHotspots[tmpIdx]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(tmpIdx, Common::Point(93, 135), FACING_NONE); + + tmpIdx = _scene->_dynamicHotspots.add(NOUN_FLOOR, VERB_WALK_ACROSS, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(112, 150, 112 + 21, 150 + 3)); + _scene->_dynamicHotspots[tmpIdx]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(tmpIdx, Common::Point(118, 154), FACING_NONE); + + tmpIdx = _scene->_dynamicHotspots.add(NOUN_FLOOR, VERB_WALK_ACROSS, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(98, 146, 98 + 21, 146 + 4)); + _scene->_dynamicHotspots[tmpIdx]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(tmpIdx, Common::Point(104, 148), FACING_NONE); + } + } else if (_globals[kPrompterStandStatus] == 0) { + _globals._sequenceIndexes[3] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[3], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[3], 4); + _scene->_sequences.setPosition(_globals._sequenceIndexes[3], Common::Point(37, 139)); + + _hotspotPrompt1 = _scene->_dynamicHotspots.add(NOUN_PROMPTERS_STAND, VERB_WALKTO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(2, 79, 2 + 40, 79 + 63)); + _scene->_dynamicHotspots[_hotspotPrompt1]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(_hotspotPrompt1, Common::Point(59, 140), FACING_NORTHWEST); + + _hotspotPrompt2 = _scene->_dynamicHotspots.add(NOUN_PROMPTERS_STAND, VERB_WALKTO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(42, 67, 42 + 16, 67 + 75)); + _scene->_dynamicHotspots[_hotspotPrompt2]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(_hotspotPrompt2, Common::Point(59, 140), FACING_NORTHWEST); + + _hotspotPrompt3 = _scene->_dynamicHotspots.add(NOUN_PROMPTERS_STAND, VERB_WALKTO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(58, 90, 58 + 18, 90 + 52)); + _scene->_dynamicHotspots[_hotspotPrompt3]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(_hotspotPrompt3, Common::Point(59, 140), FACING_NORTHWEST); + + _hotspotPrompt5 = _scene->_dynamicHotspots.add(NOUN_PROMPTERS_STAND, VERB_CLIMB, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(2, 49, 2 + 40, 49 + 30)); + _scene->_dynamicHotspots[_hotspotPrompt5]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(_hotspotPrompt5, Common::Point(79, 132), FACING_SOUTHWEST); + _scene->_dynamicHotspots.setCursor(_hotspotPrompt5, CURSOR_GO_UP); + + _hotspotLeftFloor1 = _scene->_dynamicHotspots.add(NOUN_FLOOR, VERB_WALK_ACROSS, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(35, 137, 35 + 40, 137 + 5)); + _scene->_dynamicHotspots[_hotspotLeftFloor1]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(_hotspotLeftFloor1, Common::Point(59, 140), FACING_NONE); + _hotspotLeftFloor2 = _scene->_dynamicHotspots.add(NOUN_FLOOR, VERB_WALK_ACROSS, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(76, 129, 76 + 6, 129 + 6)); + _scene->_dynamicHotspots[_hotspotLeftFloor2]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(_hotspotLeftFloor2, Common::Point(80, 135), FACING_NONE); + } + + if ((_globals[kJacquesStatus] == 0) && (_globals[kCurrentYear] == 1881)) { + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('j', 1), 1); + _anim0ActvFl = true; + _scene->setAnimFrame(_globals._animationIndexes[0], 9); + } + + if (_scene->_priorSceneId == 104) { + _game._player._stepEnabled = false; + _game._player._visible = false; + if (_globals[kRoom103104Transition] == 0) { + _globals[kRoom103104Transition] = 1; + _globals._sequenceIndexes[10] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[10], false, -2); + _scene->_sequences.setDepth(_globals._sequenceIndexes[10], 4); + _standPosition = 1; + _game._player._playerPos = Common::Point(79, 132); + _scene->_sequences.addTimer(1, 100); + } else { + _standPosition = 2; + _globals._animationIndexes[3] = _scene->loadAnimation(formAnimName('w', 1), 0); + _anim3ActvFl = true; + _game._player._stepEnabled = true; + _game._player._playerPos = Common::Point(196, 134); + _scene->setAnimFrame(_globals._animationIndexes[3], 36); + + _scene->deleteSequence(_globals._sequenceIndexes[3]); + _globals._sequenceIndexes[3] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[3], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[3], 13); + _scene->_sequences.setPosition(_globals._sequenceIndexes[3], Common::Point(154, 139)); + } + + _globals._sequenceIndexes[1] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[1], false, -1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[1], 14); + } else if (_scene->_priorSceneId == 102) { + _game._player.firstWalk(Common::Point(-20, 140), FACING_EAST, Common::Point(15, 147), FACING_EAST, true); + _globals._sequenceIndexes[1] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[1], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[1], 14); + } else if ((_scene->_priorSceneId == 105) || (_scene->_priorSceneId != RETURNING_FROM_LOADING)) { + _game._player._playerPos = Common::Point(287, 135); + _game._player._facing = FACING_WEST; + _game._player._stepEnabled = false; + _game._player.walk(Common::Point(252, 134), FACING_WEST); + _game._player.setWalkTrigger(65); + _globals._sequenceIndexes[1] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[1], false, 6); + _scene->_sequences.setDepth(_globals._sequenceIndexes[1], 14); + } else if (_scene->_priorSceneId == -1) { + if (_standPosition == 1) { + _game._player._visible = false; + _globals._animationIndexes[5] = _scene->loadAnimation(formAnimName('w', 3), 0); + _anim5ActvFl = true; + _scene->setAnimFrame(_globals._animationIndexes[5], 33); + } else if (_standPosition == 2) { + _scene->deleteSequence(_globals._sequenceIndexes[3]); + _globals._sequenceIndexes[3] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[3], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[3], 13); + _scene->_sequences.setPosition(_globals._sequenceIndexes[3], Common::Point(154, 139)); + _game._player._visible = false; + _globals._animationIndexes[3] = _scene->loadAnimation(formAnimName('w', 1), 0); + _anim3ActvFl = true; + _game._player._stepEnabled = true; + _scene->setAnimFrame(_globals._animationIndexes[3], 36); + } else if (_vm->_gameConv->_restoreRunning == 12) { + _vm->_gameConv->run(12); + _vm->_gameConv->exportPointer(&_globals[kPlayerScore]); + _vm->_gameConv->exportValue(_globals[kMusicSelected]); + _globals[kWalkerConverse] = _vm->getRandomNumber(1, 4); + } + _globals._sequenceIndexes[1] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[1], false, -1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[1], 14); + } + + sceneEntrySound(); +} + +void Scene103::step() { + if (_anim0ActvFl) + handleJacquesAnim(); + + if (_anim3ActvFl) + climbRightStairs(); + + if (_anim5ActvFl) + climbLeftStairs(); + + if (_anim4ActvFl) + descendRightStairs(); + + if (_anim6ActvFl) + descendLeftStairs(); + + if ((_globals[kWalkerConverse] == 2) || (_globals[kWalkerConverse] == 3)) { + ++_convCount; + if (_convCount > 200) + _globals[kWalkerConverse] = _vm->getRandomNumber(1, 4); + } + + switch (_game._trigger) { + case 65: + _scene->deleteSequence(_globals._sequenceIndexes[1]); + _globals._sequenceIndexes[1] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[1], false, 8, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[1], 14); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[1], 1, 6); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 66); + _vm->_sound->command(66); + break; + + case 66: { + int syncIdx = _globals._sequenceIndexes[1]; + _vm->_sound->command(25); + _globals._sequenceIndexes[1] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[1], false, 1); + _game.syncTimers(SYNC_SEQ, _globals._sequenceIndexes[1], SYNC_SEQ, syncIdx); + _scene->_sequences.setDepth(_globals._sequenceIndexes[1], 14); + _game._player._stepEnabled = true; + } + break; + + case 80: + _scene->_nextSceneId = 104; + _scene->_reloadSceneFlag = true; + break; + + default: + break; + } + + switch (_game._trigger) { + case 100: + _scene->deleteSequence(_globals._sequenceIndexes[10]); + _globals._sequenceIndexes[10] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[10], false, 6, 1); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[10], SEQUENCE_TRIGGER_EXPIRE, 0, 101); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[10], -1, -2); + _scene->_sequences.setDepth(_globals._sequenceIndexes[10], 4); + break; + + case 101: + _globals._animationIndexes[5] = _scene->loadAnimation(formAnimName('w', 3), 0); + _anim5ActvFl = true; + _scene->setAnimFrame(_globals._animationIndexes[5], 33); + _game._player._stepEnabled = true; + _game.syncTimers(SYNC_ANIM, _globals._animationIndexes[5], SYNC_SEQ, _globals._sequenceIndexes[10]); + break; + + default: + break; + } + + switch (_game._trigger) { + case 0: + if (_anim1ActvFl) { + if ((_scene->getAnimFrame(_globals._animationIndexes[1]) == 10) && !_guardFrameFl) { + _vm->_sound->command(64); + _guardFrameFl = true; + _scene->deleteSequence(_globals._sequenceIndexes[0]); + _scene->deleteSequence(_globals._sequenceIndexes[9]); + _globals._sequenceIndexes[0] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[0], false, 6, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[0], -1, -2); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_EXPIRE, 0, 105); + } + } else if (_anim2ActvFl) { + if ((_scene->getAnimFrame(_globals._animationIndexes[2]) == 7) && !_guardFrameFl) { + _vm->_sound->command(64); + _guardFrameFl = true; + _scene->deleteSequence(_globals._sequenceIndexes[0]); + _scene->deleteSequence(_globals._sequenceIndexes[9]); + _globals._sequenceIndexes[0] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[0], false, 6, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[0], -1, -2); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_EXPIRE, 0, 110); + } + } + break; + + case 105: + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, -2); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); + _globals._sequenceIndexes[9] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[9], false, -2); + _scene->_sequences.setDepth(_globals._sequenceIndexes[9], 2); + _guardFrameFl = false; + break; + + case 110: + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, -1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); + _globals._sequenceIndexes[9] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[9], false, -1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[9], 2); + _guardFrameFl = false; + break; + + default: + break; + } + + if (_globals[kJacquesStatus] == 3) { + warning("TODO: add a check on the return value of _vm->_sound->command ???"); + _vm->_sound->command(38); + } +} + +void Scene103::preActions() { + if (_action.isAction(VERB_OPEN, NOUN_DOOR)) + _game._player._needToWalk = true; + + if (_action.isAction(VERB_OPEN, NOUN_DOOR_TO_PIT)) { + _game._player.walk(Common::Point(0, 150), FACING_WEST); + _game._player._walkOffScreenSceneId = 102; + } + + if ((_standPosition != 0) && !_action.isAction(VERB_CLIMB_THROUGH, NOUN_TRAP_DOOR) && + !_action.isAction(VERB_OPEN, NOUN_TRAP_DOOR) && + !_action.isAction(VERB_CLIMB, NOUN_PROMPTERS_STAND) && + !_action.isAction(VERB_PUSH, NOUN_TRAP_DOOR) && + !_action.isAction(VERB_LOOK_THROUGH, NOUN_PROMPTERS_BOX) && + !_action.isAction(VERB_PULL, NOUN_TRAP_DOOR)) { + + if (_action.isAction(VERB_PULL) || _action.isAction(VERB_PUSH)) { + if (!_action.isObject(NOUN_LEVER) && !_game._trigger) + _game._player._needToWalk = false; + } + + if ((_action.isAction(VERB_PUSH, NOUN_PROMPTERS_STAND)) || (_action.isAction(VERB_PULL, NOUN_PROMPTERS_STAND))) { + if (!_game._trigger) + _game._player._needToWalk = true; + } + + if (_game._player._needToWalk) { + if (_globals[kPrompterStandStatus] == 0) { + switch (_game._trigger) { + case 0: + _scene->freeAnimation(5); + _game._player._readyToWalk = false; + _game._player._visible = false; + _game._player._stepEnabled = false; + _anim5ActvFl = false; + _anim6ActvFl = true; + _globals._animationIndexes[6] = _scene->loadAnimation(formAnimName('w', 4), 1); + break; + + case 1: + _game._player._playerPos = Common::Point(79, 132); + _game._player._stepEnabled = true; + _game._player._visible = true; + _standPosition = 0; + _game._player._readyToWalk = true; + if (_action.isAction(VERB_PUSH, NOUN_PROMPTERS_STAND)) + _game._player._needToWalk = false; + _anim6ActvFl = false; + _game._player.resetFacing(FACING_NORTHEAST); + _game.syncTimers(SYNC_PLAYER, 0, SYNC_ANIM, _globals._animationIndexes[6]); + break; + + default: + break; + } + } else { + switch (_game._trigger) { + case 0: + _scene->freeAnimation(3); + _game._player._readyToWalk = false; + if (_action.isAction(VERB_PUSH, NOUN_PROMPTERS_STAND)) + _game._player._needToWalk = true; + _game._player._visible = false; + _game._player._stepEnabled = false; + _anim3ActvFl = false; + _anim4ActvFl = true; + _globals._animationIndexes[4] = _scene->loadAnimation(formAnimName('w', 2), 1); + break; + + case 1: + _game._player._playerPos = Common::Point(196, 134); + _game._player._stepEnabled = true; + _game._player._readyToWalk = true; + if (_action.isAction(VERB_PUSH, NOUN_PROMPTERS_STAND)) + _game._player._needToWalk = false; + _game._player._visible = true; + _standPosition = 0; + _anim4ActvFl = false; + _game._player.resetFacing(FACING_NORTHEAST); + _game.syncTimers(SYNC_PLAYER, 0, SYNC_ANIM, _globals._animationIndexes[4]); + break; + + default: + break; + } + } + } + } + + if (_standPosition == 0) { + if ((_action.isAction(VERB_PUSH, NOUN_PROMPTERS_STAND)) || (_action.isAction(VERB_PULL, NOUN_PROMPTERS_STAND))) { + if (_globals[kCurrentYear] == 1993) { + if (_globals[kPrompterStandStatus] == 0) + _game._player.walk(Common::Point(2, 138), FACING_WEST); + else + _game._player.walk(Common::Point(176, 142), FACING_WEST); + } + } + } + + if (_action.isAction(VERB_LOOK_THROUGH, NOUN_PROMPTERS_BOX) && (_standPosition == 0) && (_globals[kPrompterStandStatus] == 0) && (_globals[kCurrentYear] == 1993)) + _game._player.walk(Common::Point(79, 132), FACING_SOUTHWEST); + + if (_action.isAction(VERB_CLIMB_THROUGH, NOUN_TRAP_DOOR) && (_standPosition == 0) && (_globals[kPrompterStandStatus] == 1) && (_globals[kTrapDoorStatus] == 0)) + _game._player.walk(Common::Point(196, 134), FACING_SOUTHWEST); + + if (_action.isAction(VERB_WALK_THROUGH, NOUN_DOOR_TO_PIT)) + _game._player._walkOffScreenSceneId = 102; + + if ((_action.isAction(VERB_OPEN, NOUN_DOOR) || _action.isAction(VERB_UNLOCK, NOUN_DOOR) || _action.isAction(VERB_LOCK, NOUN_DOOR)) && (_standPosition == 0)) + _game._player.walk(Common::Point(252, 134), FACING_EAST); +} + +void Scene103::actions() { + if (_action.isAction(VERB_OPEN, NOUN_DOOR_TO_PIT)) { + _scene->_nextSceneId = 102; + _action._inProgress = false; + return; + } + + if (_vm->_gameConv->_running == 12) { + process_conv_jacques(); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_CLIMB_THROUGH, NOUN_TRAP_DOOR)) { + if (_globals[kTrapDoorStatus] == 1) { + _vm->_dialogs->show(10333); + _action._inProgress = false; + return; + } else if (_globals[kPrompterStandStatus] == 0) { + _vm->_dialogs->show(10341); + _action._inProgress = false; + return; + } + } + + if ((_action.isAction(VERB_LOOK_THROUGH, NOUN_PROMPTERS_BOX)) && (_globals[kPrompterStandStatus] == 1)) { + _vm->_dialogs->show(10342); + _action._inProgress = false; + return; + } + + if ((_action.isAction(VERB_CLIMB, NOUN_PROMPTERS_STAND) && _standPosition == 0) || + (_action.isAction(VERB_LOOK_THROUGH, NOUN_PROMPTERS_BOX) && (_standPosition == 0)) || + (_action.isAction(VERB_CLIMB_THROUGH, NOUN_TRAP_DOOR) && (_standPosition == 0))) { + if (_globals[kPrompterStandStatus] == 0) { + if (_game._trigger == 0) { + if (_action.isAction(VERB_LOOK_THROUGH, NOUN_PROMPTERS_BOX)) { + _sitFl = true; + _globals._animationIndexes[5] = _scene->loadAnimation(formAnimName('w', 3), 115); + } else + _globals._animationIndexes[5] = _scene->loadAnimation(formAnimName('w', 3), 0); + + _game._player._visible = false; + _game._player._stepEnabled = false; + _anim5ActvFl = true; + _game.syncTimers(SYNC_ANIM, _globals._animationIndexes[5], SYNC_PLAYER, 0); + _action._inProgress = false; + return; + } + } else if (_game._trigger == 0) { + if (_action.isAction(VERB_CLIMB_THROUGH, NOUN_TRAP_DOOR)) { + _climbThroughTrapFl = true; + _globals._animationIndexes[3] = _scene->loadAnimation(formAnimName('w', 1), 120); + } else + _globals._animationIndexes[3] = _scene->loadAnimation(formAnimName('w', 1), 0); + + _game._player._visible = false; + _game._player._stepEnabled = false; + _anim3ActvFl = true; + _game.syncTimers(SYNC_ANIM, _globals._animationIndexes[3], SYNC_PLAYER, 0); + _action._inProgress = false; + return; + } + } + + if (_action.isAction(VERB_CLIMB, NOUN_PROMPTERS_STAND) && (_standPosition != 0)) { + _action._inProgress = false; + return; + } + + if ((_action.isAction(VERB_PUSH, NOUN_PROMPTERS_STAND)) || (_action.isAction(VERB_PULL, NOUN_PROMPTERS_STAND))) { + if (_globals[kCurrentYear] == 1993) { + if (_globals[kPrompterStandStatus] == 0) { + switch (_game._trigger) { + case 0: + if (_globals[kPrompterStandStatus] == 0) { + _game._player._stepEnabled = false; + _game._player._visible = false; + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('s', 1), 75); + _game._player._priorTimer = _scene->_frameStartTime; + _game.syncTimers(SYNC_ANIM, _globals._animationIndexes[0], SYNC_PLAYER, 0); + _scene->deleteSequence(_globals._sequenceIndexes[3]); + } + break; + + case 75: + if (_globals[kPrompterStandStatus] == 0) { + _globals._sequenceIndexes[12] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[12], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[12], 1); + _globals._sequenceIndexes[3] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[3], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[3], 4); + _scene->_sequences.setPosition(_globals._sequenceIndexes[3], Common::Point(154, 139)); + _game.syncTimers(SYNC_SEQ, _globals._sequenceIndexes[3], SYNC_ANIM, _globals._animationIndexes[0]); + _globals[kPrompterStandStatus] = 1; + _game._player._stepEnabled = true; + _game._player._visible = true; + _game._player._playerPos = Common::Point(117, 139); + _game._player.resetFacing(FACING_EAST); + _game.syncTimers(SYNC_PLAYER, 0, SYNC_ANIM, _globals._animationIndexes[0]); + + _scene->_dynamicHotspots.remove(_hotspotPrompt1); + _scene->_dynamicHotspots.remove(_hotspotPrompt2); + _scene->_dynamicHotspots.remove(_hotspotPrompt3); + _scene->_dynamicHotspots.remove(_hotspotPrompt5); + _scene->_dynamicHotspots.remove(_hotspotLeftFloor1); + _scene->_dynamicHotspots.remove(_hotspotLeftFloor2); + + _hotspotPrompt1 = _scene->_dynamicHotspots.add(NOUN_PROMPTERS_STAND, VERB_WALKTO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(121, 79, 121 + 40, 79 + 63)); + _scene->_dynamicHotspots[_hotspotPrompt1]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(_hotspotPrompt1, Common::Point(171, 142), FACING_NORTHWEST); + + _hotspotPrompt2 = _scene->_dynamicHotspots.add(NOUN_PROMPTERS_STAND, VERB_WALKTO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(161, 67, 161 + 16, 67 + 75)); + _scene->_dynamicHotspots[_hotspotPrompt2]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(_hotspotPrompt2, Common::Point(171, 142), FACING_NORTHWEST); + + _hotspotPrompt3 = _scene->_dynamicHotspots.add(NOUN_PROMPTERS_STAND, VERB_WALKTO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(177, 90, 177 + 18, 90 + 52)); + _scene->_dynamicHotspots[_hotspotPrompt3]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(_hotspotPrompt3, Common::Point(171, 142), FACING_NORTHWEST); + + _hotspotPrompt4 = _scene->_dynamicHotspots.add(NOUN_PROMPTERS_STAND, VERB_WALKTO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(114, 100, 114 + 7, 100 + 38)); + _scene->_dynamicHotspots[_hotspotPrompt4]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(_hotspotPrompt4, Common::Point(171, 142), FACING_NORTHWEST); + + _hotspotPrompt5 = _scene->_dynamicHotspots.add(NOUN_PROMPTERS_STAND, VERB_CLIMB, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(121, 49, 121 + 40, 49 + 30)); + _scene->_dynamicHotspots[_hotspotPrompt5]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(_hotspotPrompt5, Common::Point(196, 134), FACING_SOUTHWEST); + _scene->_dynamicHotspots.setCursor(_hotspotPrompt5, CURSOR_GO_UP); + + _hotspotRightFloor1 = _scene->_dynamicHotspots.add(NOUN_FLOOR, VERB_WALK_ACROSS, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(154, 6, 154 + 41, 6 + 6)); + _scene->_dynamicHotspots[_hotspotRightFloor1]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(_hotspotRightFloor1, Common::Point(171, 142), FACING_NONE); + + _hotspotRightFloor2 = _scene->_dynamicHotspots.add(NOUN_FLOOR, VERB_WALK_ACROSS, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(114, 136, 114 + 32, 132 + 6)); + _scene->_dynamicHotspots[_hotspotRightFloor2]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(_hotspotRightFloor2, Common::Point(127, 140), FACING_NONE); + + _scene->changeVariant(1); + adjustRails(1); + } + break; + + default: + break; + } + } else { + switch (_game._trigger) { + case 0: + if (_globals[kPrompterStandStatus] == 1) { + _game._player._stepEnabled = false; + _game._player._visible = false; + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('s', 2), 75); + _game._player._priorTimer = _scene->_frameStartTime; + _game.syncTimers(SYNC_ANIM, _globals._animationIndexes[0], SYNC_PLAYER, 0); + _scene->deleteSequence(_globals._sequenceIndexes[12]); + _scene->deleteSequence(_globals._sequenceIndexes[3]); + } + break; + + case 75: + if (_globals[kPrompterStandStatus] == 1) { + _globals._sequenceIndexes[3] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[3], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[3], 4); + _scene->_sequences.setPosition(_globals._sequenceIndexes[3], Common::Point(37, 139)); + _game.syncTimers(SYNC_SEQ, _globals._sequenceIndexes[3], SYNC_ANIM, _globals._animationIndexes[0]); + _globals[kPrompterStandStatus] = 0; + _game._player._stepEnabled = true; + _game._player._visible = true; + _game._player._playerPos = Common::Point(62, 142); + _game._player.resetFacing(FACING_WEST); + _game.syncTimers(SYNC_PLAYER, 0, SYNC_ANIM, _globals._animationIndexes[0]); + _scene->_dynamicHotspots.remove(_hotspotPrompt1); + _scene->_dynamicHotspots.remove(_hotspotPrompt2); + _scene->_dynamicHotspots.remove(_hotspotPrompt3); + _scene->_dynamicHotspots.remove(_hotspotPrompt4); + _scene->_dynamicHotspots.remove(_hotspotPrompt5); + _scene->_dynamicHotspots.remove(_hotspotRightFloor1); + _scene->_dynamicHotspots.remove(_hotspotRightFloor2); + + _hotspotPrompt1 = _scene->_dynamicHotspots.add(NOUN_PROMPTERS_STAND, VERB_WALKTO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(2, 79, 2 + 40, 79 + 63)); + _scene->_dynamicHotspots[_hotspotPrompt1]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(_hotspotPrompt1, Common::Point(59, 140), FACING_NORTHWEST); + + _hotspotPrompt2 = _scene->_dynamicHotspots.add(NOUN_PROMPTERS_STAND, VERB_WALKTO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(42, 67, 42 + 16, 67 + 75)); + _scene->_dynamicHotspots[_hotspotPrompt2]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(_hotspotPrompt2, Common::Point(59, 140), FACING_NORTHWEST); + + _hotspotPrompt3 = _scene->_dynamicHotspots.add(NOUN_PROMPTERS_STAND, VERB_WALKTO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(58, 90, 58 + 18, 90 + 52)); + _scene->_dynamicHotspots[_hotspotPrompt3]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(_hotspotPrompt3, Common::Point(59, 140), FACING_NORTHWEST); + + _hotspotLeftFloor1 = _scene->_dynamicHotspots.add(NOUN_FLOOR, VERB_WALK_ACROSS, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(35, 137, 35 + 40, 137 + 5)); + _scene->_dynamicHotspots[_hotspotLeftFloor1]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(_hotspotLeftFloor1, Common::Point(59, 140), FACING_NONE); + + _hotspotLeftFloor2 = _scene->_dynamicHotspots.add(NOUN_FLOOR, VERB_WALK_ACROSS, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(76, 129, 76 + 6, 129 + 6)); + _scene->_dynamicHotspots[_hotspotLeftFloor2]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(_hotspotLeftFloor2, Common::Point(80, 135), FACING_NONE); + + _hotspotPrompt5 = _scene->_dynamicHotspots.add(NOUN_PROMPTERS_STAND, VERB_CLIMB, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(2, 49, 2 + 40, 49 + 30)); + _scene->_dynamicHotspots[_hotspotPrompt5]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(_hotspotPrompt5, Common::Point(79, 132), FACING_SOUTHWEST); + _scene->_dynamicHotspots.setCursor(_hotspotPrompt5, CURSOR_GO_UP); + + _scene->changeVariant(0); + adjustRails(0); + } + break; + + default: + break; + } + } + } else if (_globals[kJacquesNameIsKnown]) + _vm->_dialogs->show(10340); else + _vm->_dialogs->show(10350); + + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_WALK_THROUGH, NOUN_DOOR) || _action.isAction(VERB_OPEN, NOUN_DOOR) || _action.isAction(VERB_UNLOCK, NOUN_DOOR) || _action.isAction(VERB_LOCK, NOUN_DOOR)) { + if ((_globals[kCurrentYear] == 1881) && !_action.isAction(VERB_LOCK, NOUN_DOOR) && !_action.isAction(VERB_UNLOCK, NOUN_DOOR)) { + switch (_game._trigger) { + case (0): + _game._player._stepEnabled = false; + _game._player._visible = false; + _globals._sequenceIndexes[2] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[2], false, 5, 2); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], -1, -2); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[2], true); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_SPRITE, 3, 70); + break; + + case 2: + _game._player._visible = true; + _game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[2]); + _game._player.walk(Common::Point(295, 132), FACING_WEST); + _scene->_sequences.addTimer(180, 3); + break; + + case 3: + _scene->_nextSceneId = 105; + break; + + case 70: + _vm->_sound->command(24); + _scene->deleteSequence(_globals._sequenceIndexes[1]); + _globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 8, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[1], 14); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[1], -1, -2); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 71); + _vm->_sound->command(66); + break; + + case 71: { + int oldIdx = _globals._sequenceIndexes[1]; + _globals._sequenceIndexes[1] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[1], false, -2); + _game.syncTimers(SYNC_SEQ, _globals._sequenceIndexes[1], SYNC_SEQ, oldIdx); + _scene->_sequences.setDepth(_globals._sequenceIndexes[1], 14); + } + break; + + default: + break; + } + } else { + switch (_game._trigger) { + case (0): + _game._player._stepEnabled = false; + _game._player._visible = false; + _globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 5, 1); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 1, 4); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[2], true); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 1); + break; + + case 1: { + int oldIdx = _globals._sequenceIndexes[2]; + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 4); + _game.syncTimers(SYNC_SEQ, _globals._sequenceIndexes[2], SYNC_SEQ, oldIdx); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[2], false); + _scene->_sequences.addTimer(15, 2); + _vm->_sound->command(73); + } + break; + + case 2: + _scene->deleteSequence(_globals._sequenceIndexes[2]); + _globals._sequenceIndexes[2] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[2], false, 5, 1); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 1, 4); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[2], false); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 3); + break; + + case 3: + _game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[2]); + _game._player._visible = true; + if (_action.isAction(VERB_LOCK) || _action.isAction(VERB_UNLOCK)) + _vm->_dialogs->show(00032); + else + _vm->_dialogs->show(10335); + + _game._player._stepEnabled = true; + break; + + default: + break; + } + } + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_TAKE, NOUN_KEY) && (_game._objects.isInRoom(OBJ_KEY) || _game._trigger)) { + switch (_game._trigger) { + case (0): + _game._player._stepEnabled = false; + _game._player._visible = false; + _globals._sequenceIndexes[8] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[8], false, 5, 2); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[8], 1, 5); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[8], true); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_SPRITE, 5, 1); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_EXPIRE, 0, 2); + _action._inProgress = false; + return; + + case 1: + _scene->deleteSequence(_globals._sequenceIndexes[5]); + _scene->_hotspots.activate(NOUN_KEY, false); + _game._objects.addToInventory(OBJ_KEY); + _vm->_sound->command(26); + _action._inProgress = false; + return; + + case 2: + _game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[8]); + _game._player._visible = true; + _scene->_sequences.addTimer(20, 3); + _action._inProgress = false; + return; + + case 3: + _globals[kPlayerScore] += 5; + _vm->_dialogs->showItem(OBJ_KEY, 800, 0); + _game._player._stepEnabled = true; + _action._inProgress = false; + return; + + default: + break; + } + } + + if (_action.isAction(VERB_TALK_TO, NOUN_GENTLEMAN) || _action.isAction(VERB_TALK_TO, NOUN_JACQUES)) { + if (_globals[kJacquesStatus] == 0) { + _vm->_gameConv->run(12); + _vm->_gameConv->exportPointer(&_globals[kPlayerScore]); + _vm->_gameConv->exportValue(_globals[kMusicSelected]); + } else + _vm->_dialogs->show(10343); + + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_CLIMB_THROUGH, NOUN_TRAP_DOOR) || _climbThroughTrapFl) { + if ((_standPosition == 2) && (_globals[kTrapDoorStatus] == 0)) { + switch (_game._trigger) { + case 0: + case 120: + if (!(_globals[kPlayerScoreFlags] & 1)) { + _globals[kPlayerScoreFlags] |= 1; + _globals[kPlayerScore] += 3; + } + + _scene->freeAnimation(3); + _anim3ActvFl = false; + _climbThroughTrapFl = false; + _game._player._stepEnabled = false; + _globals._sequenceIndexes[11] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[11], false, 6, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[11], 5); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[11], -1, -2); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[11], SEQUENCE_TRIGGER_EXPIRE, 0, 1); + break; + + case 1: + _globals[kRoom103104Transition] = 1; + _scene->_nextSceneId = 104; + break; + + default: + break; + } + } + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_LOOK_THROUGH, NOUN_PROMPTERS_BOX) || _sitFl) { + if (_standPosition == 1) { + switch (_game._trigger) { + case 0: + case 115: + _scene->freeAnimation(5); + _anim5ActvFl = false; + _game._player._stepEnabled = false; + _globals._sequenceIndexes[10] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[10], false, 6, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[10], 4); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[10], -1, -2); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[10], SEQUENCE_TRIGGER_EXPIRE, 0, 1); + if (!_sitFl) + _game.syncTimers(SYNC_SEQ, _globals._sequenceIndexes[10], SYNC_ANIM, _globals._animationIndexes[5]); + _sitFl = false; + break; + + case 1: + _globals[kRoom103104Transition] = 0; + _scene->_nextSceneId = 104; + break; + + default: + break; + } + } + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_PUSH, NOUN_LEVER) || _action.isAction(VERB_PULL, NOUN_LEVER)) { + if (_globals[kTrapDoorStatus] == 1) { + switch (_game._trigger) { + case 0: + _globals._animationIndexes[1] = _scene->loadAnimation(formAnimName('l', 1), 1); + _anim1ActvFl = true; + _game._player._visible = false; + _game._player._stepEnabled = false; + _game.syncTimers(SYNC_ANIM, _globals._animationIndexes[1], SYNC_PLAYER, 0); + break; + + case 1: + _anim1ActvFl = false; + _game._player._visible = true; + _globals[kTrapDoorStatus] = 0; + _game._player._stepEnabled = true; + _game.syncTimers(SYNC_PLAYER, 0, SYNC_ANIM, _globals._animationIndexes[1]); + break; + + default: + break; + } + } else { + switch (_game._trigger) { + case 0: + _globals._animationIndexes[2] = _scene->loadAnimation(formAnimName('l', 2), 1); + _anim2ActvFl = true; + _game._player._visible = false; + _game._player._stepEnabled = false; + _game.syncTimers(SYNC_ANIM, _globals._animationIndexes[2], SYNC_PLAYER, 0); + break; + + case 1: + _anim2ActvFl = false; + _game._player._visible = true; + _globals[kTrapDoorStatus] = 1; + _game._player._stepEnabled = true; + _game.syncTimers(SYNC_PLAYER, 0, SYNC_ANIM, _globals._animationIndexes[2]); + break; + + default: + break; + } + } + _action._inProgress = false; + return; + } + + if (_action._lookFlag) { + if ((_globals[kCurrentYear] == 1881) && (_globals[kJacquesStatus] >= 1)) + _vm->_dialogs->show(10311); + else + _vm->_dialogs->show(10310); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_LOOK) || _action.isAction(VERB_LOOK_AT)) { + if (_action.isObject(NOUN_PROMPTERS_STAND)) { + if (_globals[kJacquesStatus] >= 1) + _vm->_dialogs->show(10349); + else if (_globals[kCurrentYear] == 1993) + _vm->_dialogs->show(10312); + else + _vm->_dialogs->show(10345); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_FLOOR)) { + _vm->_dialogs->show(10313); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_TRAP_CEILING)) { + _vm->_dialogs->show(10314); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_DOOR)) { + _vm->_dialogs->show(10315); + _action._inProgress = false; return; + } + + if (_action.isObject(NOUN_DOOR_TO_PIT)) { + _vm->_dialogs->show(10316); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_WALL)) { + _vm->_dialogs->show(10317); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_PROMPTERS_BOX)) { + _vm->_dialogs->show(10318); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_TRAP_DOOR)) { + _vm->_dialogs->show(10319); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_JUNK)) { + if (_globals[kCurrentYear] == 1993) + _vm->_dialogs->show(10320); + else + _vm->_dialogs->show(10346); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_CARTON)) { + if (_globals[kCurrentYear] == 1993) + _vm->_dialogs->show(10321); + else + _vm->_dialogs->show(10347); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_GARBAGE_CAN)) { + if (_globals[kCurrentYear] == 1993) + _vm->_dialogs->show(10322); + else + _vm->_dialogs->show(10348); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_CABLE)) { + _vm->_dialogs->show(10323); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_JACQUES) || _action.isObject(NOUN_GENTLEMAN)) { + if (_globals[kJacquesStatus] == 0) + _vm->_dialogs->show(10324); + else + _vm->_dialogs->show(10325); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_KEY) && _game._objects.isInRoom(OBJ_KEY)) { + _vm->_dialogs->show(10326); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_STAIR_UNIT)) { + _vm->_dialogs->show(10327); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_EXPOSED_BRICK)) { + _vm->_dialogs->show(10328); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_WATER_PIPE)) { + _vm->_dialogs->show(10329); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_PROMPTERS_SEAT)) { + _vm->_dialogs->show(10338); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_LEVER)) { + _vm->_dialogs->show(10339); + _action._inProgress = false; + return; + } + + } + + if (_action.isAction(VERB_CLOSE, NOUN_DOOR_TO_PIT)) { + _vm->_dialogs->show(10331); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_CLOSE, NOUN_DOOR)) { + _vm->_dialogs->show(10331); + _action._inProgress = false; + return; + } + + if ((_action.isAction(VERB_OPEN, NOUN_TRAP_DOOR)) || (_action.isAction(VERB_CLOSE, NOUN_TRAP_DOOR))) { + _vm->_dialogs->show(10344); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_TAKE, NOUN_JACQUES) || _action.isAction(VERB_TAKE, NOUN_GENTLEMAN)) { + if (_globals[kJacquesStatus] == 0) { + if (_globals[kJacquesNameIsKnown]) + _vm->_dialogs->show(10336); + else + _vm->_dialogs->show(10351); + } else + _vm->_dialogs->show(10337); + _action._inProgress = false; + return; + } +} + +void Scene103::adjustRails(int variant) { + switch (variant) { + case 0: + _scene->_rails.disableNode(3); + _scene->_rails.disableNode(4); + _scene->_rails.disableNode(5); + _scene->_rails.disableNode(6); + _scene->_rails.disableNode(12); + _scene->_rails.disableNode(13); + _scene->_rails.disableNode(14); + break; + + case 1: + _scene->_rails.disableNode(1); + _scene->_rails.disableNode(2); + _scene->_rails.disableNode(3); + _scene->_rails.disableNode(4); + _scene->_rails.disableNode(5); + _scene->_rails.disableNode(6); + _scene->_rails.disableNode(7); + _scene->_rails.disableNode(9); + _scene->_rails.disableNode(10); + _scene->_rails.disableNode(11); + break; + + case 2: + _scene->_rails.disableNode(1); + _scene->_rails.disableNode(2); + _scene->_rails.disableNode(5); + _scene->_rails.disableNode(6); + _scene->_rails.disableNode(7); + _scene->_rails.disableNode(9); + _scene->_rails.disableNode(10); + _scene->_rails.disableNode(11); + break; + + case 3: + _scene->_rails.disableNode(1); + _scene->_rails.disableNode(2); + _scene->_rails.disableNode(3); + _scene->_rails.disableNode(4); + _scene->_rails.disableNode(10); + _scene->_rails.disableNode(11); + break; + + default: + break; + } +} + +void Scene103::handleJacquesAnim() { + if (_scene->getAnimFrame(_globals._animationIndexes[0]) == _lastJacquesFrame) + return; + + _lastJacquesFrame = _scene->getAnimFrame(_globals._animationIndexes[0]); + int resetFrame = -1; + int random; + + switch (_lastJacquesFrame) { + case 1: + case 2: + case 3: + case 9: + case 17: + case 23: + case 33: + case 51: + switch (_jacquesAction) { + case 2: + random = 4; + _jacquesAction = 0; + break; + + case 3: + random = 5; + _jacquesAction = 0; + break; + + case 4: + random = 6; + break; + + case 0: + random = _vm->getRandomNumber(1, 3); + ++_talkCount; + if (_talkCount > 22) { + _jacquesAction = 1; + random = 9; + } + break; + + default: + random = _vm->getRandomNumber(6, 50); + while (_lastRandom == random) + random = _vm->getRandomNumber(6, 50); + + _lastRandom = random; + break; + } + + switch (random) { + case 1: + resetFrame = 0; + break; + + case 2: + resetFrame = 1; + break; + + case 3: + resetFrame = 2; + break; + + case 4: + resetFrame = 4; + break; + + case 5: + resetFrame = 10; + break; + + case 6: + resetFrame = 34; + break; + + case 7: + resetFrame = 24; + break; + + case 8: + resetFrame = 18; + break; + + default: + resetFrame = 8; + break; + } + break; + + case 36: + case 40: + case 48: + switch (_jacquesAction) { + case 0: + case 2: + case 3: + random = 2; + break; + + case 4: + random = 1; + _jacquesAction = 0; + break; + + default: + random = _vm->getRandomNumber(2, 50); + while (_lastRandom == random) + random = _vm->getRandomNumber(2, 50); + _lastRandom = random; + break; + } + + switch (random) { + case 1: + resetFrame = 37; + break; + + case 2: + resetFrame = 49; + break; + + case 3: + resetFrame = 41; + break; + + default: + resetFrame = 35; + break; + } + break; + + case 44: + random = _vm->getRandomNumber(1, 50); + while (_lastRandom == random) + random = _vm->getRandomNumber(1, 50); + + _lastRandom = random; + + switch (_jacquesAction) { + case 0: + case 2: + case 3: + case 4: + random = 1; + break; + + default: + random = _vm->getRandomNumber(1, 50); + while (_lastRandom == random) + random = _vm->getRandomNumber(1, 50); + _lastRandom = random; + break; + } + + switch (random) { + case 1: + resetFrame = 45; + break; + default: + resetFrame = 43; + break; + } + break; + } + + if (resetFrame >= 0) { + _scene->setAnimFrame(_globals._animationIndexes[0], resetFrame); + _lastJacquesFrame = resetFrame; + } +} + +void Scene103::climbRightStairs() { + if (_scene->getAnimFrame(_globals._animationIndexes[3]) == _lastStairFrame) + return; + + _lastStairFrame = _scene->getAnimFrame(_globals._animationIndexes[3]); + int stairsResetFrame = -1; + + if (_lastStairFrame == 37) { + stairsResetFrame = 36; + _standPosition = 2; _game._player._stepEnabled = true; } - if (_action.isAction(VERB_CLOSE, NOUN_ORCHESTRA_DOOR)) { - _vm->_dialogs->show(10228); + if (_lastStairFrame == 2) { + _scene->deleteSequence(3); + _globals._sequenceIndexes[3] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[3], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[3], 13); + _scene->_sequences.setPosition(_globals._sequenceIndexes[3], Common::Point(154, 139)); + } + + if (stairsResetFrame >= 0) { + _scene->setAnimFrame(_globals._animationIndexes[3], stairsResetFrame); + _lastStairFrame = stairsResetFrame; + } +} + +void Scene103::climbLeftStairs() { + if (_scene->getAnimFrame(_globals._animationIndexes[5]) == _lastStairFrame) + return; + + _lastStairFrame = _scene->getAnimFrame(_globals._animationIndexes[5]); + int stairsResetFrame = -1; + + if (_lastStairFrame == 34) { + stairsResetFrame = 33; + _standPosition = 1; _game._player._stepEnabled = true; } + + if (_lastStairFrame == 2) { + _scene->deleteSequence(3); + _globals._sequenceIndexes[3] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[3], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[3], 13); + _scene->_sequences.setPosition(_globals._sequenceIndexes[3], Common::Point(37, 139)); + } + + if (stairsResetFrame >= 0) { + _scene->setAnimFrame(_globals._animationIndexes[5], stairsResetFrame); + _lastStairFrame = stairsResetFrame; + } +} + +void Scene103::descendRightStairs() { + if (_scene->getAnimFrame(_globals._animationIndexes[4]) == _lastStairFrame) + return; + + _lastStairFrame = _scene->getAnimFrame(_globals._animationIndexes[4]); + + if (_lastStairFrame == 2) { + _scene->deleteSequence(3); + _globals._sequenceIndexes[3] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[3], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[3], 4); + _scene->_sequences.setPosition(_globals._sequenceIndexes[3], Common::Point(154, 139)); + } +} + +void Scene103::descendLeftStairs() { + if (_scene->getAnimFrame(_globals._animationIndexes[6]) == _lastStairFrame) + return; + + _lastStairFrame = _scene->getAnimFrame(_globals._animationIndexes[6]); + + if (_lastStairFrame == 2) { + _scene->deleteSequence(3); + _globals._sequenceIndexes[3] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[3], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[3], 4); + _scene->_sequences.setPosition(_globals._sequenceIndexes[3], Common::Point(37, 139)); + } +} + +void Scene103::process_conv_jacques() { + bool quitConversationFl = false; + + switch (_action._activeAction._verbId) { + case 1: + _vm->_gameConv->setInterlocutorTrigger(96); + if (_globals[kJacquesNameIsKnown] == 0) { + _globals[kJacquesNameIsKnown] = 1; + _scene->_dynamicHotspots.remove(_hotspotGentleman); + _hotspotGentleman = _scene->_dynamicHotspots.add(NOUN_JACQUES, VERB_WALKTO, SYNTAX_SINGULAR_MASC, EXT_NONE, Common::Rect(156, 116, 156 + 33, 116 + 31)); + _scene->_dynamicHotspots[_hotspotGentleman]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(_hotspotGentleman, Common::Point(206, 148), FACING_NORTHWEST); + } + break; + + case 4: + case 6: + case 7: + case 10: + case 19: + case 30: { + _globals[kWalkerConverse] = 0; + int *val = _vm->_gameConv->getVariable(26); + if (*val) + _globals[kJacquesNameIsKnown] = 2; + + quitConversationFl = true; + } + break; + + case 8: + _vm->_gameConv->setInterlocutorTrigger(94); + break; + + case 12: + _vm->_gameConv->setInterlocutorTrigger(96); + break; + + case 29: + _vm->_gameConv->setInterlocutorTrigger(98); + break; + + default: + break; + } + + if ((_action._activeAction._verbId != 1) && (_action._activeAction._verbId != 8) + && (_action._activeAction._verbId != 12) && (_action._activeAction._verbId != 29)) + _vm->_gameConv->setInterlocutorTrigger(90); + + _vm->_gameConv->setHeroTrigger(92); + + switch (_game._trigger) { + case 90: + if (!quitConversationFl) + _globals[kWalkerConverse] = _vm->getRandomNumber(1, 4); + _jacquesAction = 0; + break; + + case 92: + if (!quitConversationFl) + _globals[kWalkerConverse] = _vm->getRandomNumber(2, 3); + _convCount = 0; + _jacquesAction = 1; + break; + + case 94: + if (!quitConversationFl) + _globals[kWalkerConverse] = _vm->getRandomNumber(1, 4); + _jacquesAction = 2; + break; + + case 96: + if (!quitConversationFl) + _globals[kWalkerConverse] = _vm->getRandomNumber(1, 4); + _jacquesAction = 3; + break; + + case 98: + if (!quitConversationFl) + _globals[kWalkerConverse] = _vm->getRandomNumber(1, 4); + _jacquesAction = 4; + break; + + default: + break; + } + + _talkCount = 0; } +/*------------------------------------------------------------------------*/ + +Scene104::Scene104(MADSEngine *vm) : Scene1xx(vm) { + _anim0ActvFl = _anim1ActvFl = _anim2ActvFl = false; + _needToTalk = false; + _needToGetUp = false; + _sittingUp = false; + _beforeHeLeaves = false; + _beforeSheLeaves = false; + _needToStandUp = false; + + _walkStatus = -1; + _walkFrame = -1; + _coupleStatus = -1; + _richStatus = -1; + _richTalkCount = -1; + _manTalkCount = -1; + _womanTalkCount = -1; + _lookCount = -1; + _coupleFrame = -1; + _lastPlayerFrame = -1; + _richFrame = -1; +} + +void Scene104::synchronize(Common::Serializer &s) { + Scene1xx::synchronize(s); + + s.syncAsByte(_anim0ActvFl); + s.syncAsByte(_anim1ActvFl); + s.syncAsByte(_anim2ActvFl); + s.syncAsByte(_needToTalk); + s.syncAsByte(_needToGetUp); + s.syncAsByte(_sittingUp); + s.syncAsByte(_beforeHeLeaves); + s.syncAsByte(_beforeSheLeaves); + s.syncAsByte(_needToStandUp); + + s.syncAsSint16LE(_walkStatus); + s.syncAsSint16LE(_walkFrame); + s.syncAsSint16LE(_coupleStatus); + s.syncAsSint16LE(_richStatus); + s.syncAsSint16LE(_richTalkCount); + s.syncAsSint16LE(_manTalkCount); + s.syncAsSint16LE(_womanTalkCount); + s.syncAsSint16LE(_lookCount); + s.syncAsSint16LE(_coupleFrame); + s.syncAsSint16LE(_lastPlayerFrame); +} + +void Scene104::setup() { + setPlayerSpritesPrefix(); + setAAName(); + + if (_globals[kTrapDoorStatus] == 1) + _scene->_variant = 1; + + _scene->addActiveVocab(NOUN_MONSIEUR_RICHARD); +} + +void Scene104::enter() { + _vm->_disableFastwalk = true; + + if (_scene->_priorSceneId != RETURNING_FROM_LOADING) { + _anim0ActvFl = false; + _anim1ActvFl = false; + _anim2ActvFl = false; + _needToTalk = false; + _needToGetUp = false; + _sittingUp = false; + _beforeSheLeaves = false; + _needToStandUp = false; + } + + _globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('a', 0)); + _globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('a', 6)); + _globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('x', 0)); + + if (_globals[kCurrentYear] == 1993) + _globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('z', 0)); + + _vm->_gameConv->get(7); + + if (_globals[kTrapDoorStatus] == 1) { + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 15); + } else { + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, 2); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 15); + } + + if (_scene->_priorSceneId == RETURNING_FROM_LOADING) { + if (_vm->_gameConv->_restoreRunning == 7) { + _globals._animationIndexes[1] = _scene->loadAnimation(formAnimName('r', 1), 1); + _globals._animationIndexes[2] = _scene->loadAnimation(formAnimName('d', 1), 1); + _walkStatus = 0; + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('m', 1), 1); + if (_coupleStatus < 11) { + _coupleStatus = 1; + _richStatus = 0; + _scene->setAnimFrame(_globals._animationIndexes[1], 14); + } else { + _coupleStatus = 17; + _richStatus = 4; + _scene->setAnimFrame(_globals._animationIndexes[1], 105); + _scene->setAnimFrame(_globals._animationIndexes[0], 216); + } + + _vm->_gameConv->run(7); + _vm->_gameConv->exportPointer(&_globals[kPlayerScore]); + _game._player._visible = false; + } + + } else if (_scene->_priorSceneId == 301) { + _globals._animationIndexes[1] = _scene->loadAnimation(formAnimName('r', 1), 1); + _anim1ActvFl = true; + _coupleStatus = 11; + + _globals._animationIndexes[2] = _scene->loadAnimation(formAnimName('d', 1), 1); + _anim2ActvFl = true; + _walkStatus = 0; + + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('m', 1), 1); + _anim0ActvFl = true; + _richStatus = 0; + + cleanInventory(); + + _game._player._visible = false; + _game._visitedScenes.pop_back(); + _globals[kTrapDoorStatus] = 1; + _globals[kCurrentYear] = 1881; + _globals[kPrompterStandStatus] = 1; + _globals[kTicketPeoplePresent] = 1; + _globals[kMakeBrieLeave203] = false; + _game._player._playerPos.x = 161; + + _game._visitedScenes.add(301); + _game._visitedScenes.add(101); + + _scene->setCamera(Common::Point(60, 0)); + _scene->_sequences.addTimer(1, 91); + + } else if (_scene->_priorSceneId == 103) { + if (_globals[kRoom103104Transition] == 0) { + _scene->_userInterface.emptyConversationList(); + _scene->_userInterface.setup(kInputConversation); + + if (!_globals[kObservedPhan104]) { + _globals._animationIndexes[4] = _scene->loadAnimation(formAnimName('p', 1), 93); + _game._player._playerPos.x = 319; + _game._player._stepEnabled = false; + _game._player._visible = false; + _scene->setCamera(Common::Point(158, 0)); + } else { + _globals._animationIndexes[5] = _scene->loadAnimation(formAnimName('p', 2), 94); + _game._player._playerPos.x = 319; + _game._player._stepEnabled = false; + _game._player._visible = false; + _scene->setCamera(Common::Point(158, 0)); + } + } else { + _game._player._playerPos = Common::Point(319, 96); + _game._player._facing = FACING_SOUTH; + _scene->setCamera(Common::Point(158, 0)); + } + } else if (_scene->_priorSceneId == 102) { + switch (_globals[kDeathLocation]) { + case 0: + _game._player._playerPos = Common::Point(496, 79); + _scene->setCamera(Common::Point(320, 0)); + break; + + case 1: + _game._player._playerPos = Common::Point(346, 71); + _scene->setCamera(Common::Point(158, 0)); + break; + + case 2: + _game._player._playerPos = Common::Point(172, 73); + break; + + default: + break; + } + } else if (_scene->_priorSceneId == 108) { + if (_game._player._playerPos.x > 213) + _game._player._playerPos.y = 97; + else if (_game._player._playerPos.x > 110) + _game._player._playerPos.y = 128; + else + _game._player._playerPos.y = 148; + + _game._player.firstWalk(Common::Point(-20, _game._player._playerPos.y), FACING_EAST, Common::Point(12, _game._player._playerPos.y), FACING_EAST, true); + } else if ((_scene->_priorSceneId == 107) || (_scene->_priorSceneId != RETURNING_FROM_LOADING)) { + if (_game._player._playerPos.x > 191) + _game._player._playerPos.y = 142; + else if (_game._player._playerPos.x > 104) + _game._player._playerPos.y = 120; + else + _game._player._playerPos.y = 95; + + _game._player.firstWalk(Common::Point(655, _game._player._playerPos.y), FACING_WEST, Common::Point(627, _game._player._playerPos.y), FACING_WEST, true); + _scene->setCamera(Common::Point(320, 0)); + } + + if (_globals[kCurrentYear] == 1993) { + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 14); + } else + _scene->_hotspots.activate(NOUN_CHANDELIER, false); + + if (_globals[kTrapDoorStatus] == 1) { + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 15); + } else { + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, 2); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 15); + } + + sceneEntrySound(); +} + +void Scene104::step() { + if (_anim0ActvFl) + handleRichAnimations(); + + if (_anim1ActvFl) + handleCoupleAnimations(); + + if (_anim2ActvFl) + handleWalkAnimation(); + + if (_game._player._moving) + handlePlayerWalk(); + + if (_game._trigger == 91) { + _vm->_dialogs->show(10434); + _vm->_gameConv->run(7); + _vm->_gameConv->exportPointer(&_globals[kPlayerScore]); + } + + if (_game._trigger == 93) { + _scene->_nextSceneId = 103; + _game._player._playerPos.x = 400; + _globals[kRoom103104Transition] = 0; + } + + if (_game._trigger == 94) { + _scene->_nextSceneId = 103; + _globals[kRoom103104Transition] = 0; + } +} + +void Scene104::preActions() { + if (_action.isAction(VERB_EXIT, NOUN_STAGE_LEFT)) + _game._player._walkOffScreenSceneId = 108; + + if (_action.isAction(VERB_EXIT, NOUN_STAGE_RIGHT)) + _game._player._walkOffScreenSceneId = 107; + + if (_action.isAction(VERB_OPEN, NOUN_TRAP_DOOR) || _action.isAction(VERB_CLOSE, NOUN_TRAP_DOOR)) + _game._player.walk(Common::Point(320, 92), FACING_NORTH); +} + +void Scene104::actions() { + if (_vm->_gameConv->_running == 7) { + processConversations(); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_CLIMB_THROUGH, NOUN_TRAP_DOOR)) { + if (_globals[kTrapDoorStatus] == 0) { + switch (_game._trigger) { + case 0: + _game._player._visible = false; + _globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 8, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[1], 13); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[1], 1, 16); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 60); + break; + + case 60: + _scene->_nextSceneId = 103; + _globals[kRoom103104Transition] = 1; + _game._player._stepEnabled = true; + break; + + default: + break; + } + } else { + _vm->_dialogs->show(10429); + } + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_JUMP_INTO, NOUN_ORCHESTRA_PIT)) { + switch (_game._trigger) { + case 0: + if (_game._player._playerPos.x > 400) + _globals[kDeathLocation] = 0; + else if (_game._player._playerPos.x > 200) + _globals[kDeathLocation] = 1; + else + _globals[kDeathLocation] = 2; + + _scene->changeVariant(2); + + if (_globals[kTrapDoorStatus] == 1) + _scene->drawToBackground(_globals._spriteIndexes[0], 1, Common::Point(-32000, -32000), 0, 100); + else + _scene->drawToBackground(_globals._spriteIndexes[0], 2, Common::Point(-32000, -32000), 0, 100); + + _vm->_dialogs->show(10426); + _game._player._visible = false; + _game._player._stepEnabled = false; + _globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 7, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[3], 15); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], -1, 4); + _scene->_sequences.setPosition(_globals._sequenceIndexes[3], _game._player._playerPos); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[3], true); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 1); + break; + + case 1: + _globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 1, 10); + _scene->_sequences.addTimer(60, 2); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 4, 4); + _scene->_sequences.setDepth(_globals._sequenceIndexes[3], 15); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[3], true); + _scene->_sequences.setMotion(_globals._sequenceIndexes[3], 0, 0, 200); + break; + + case 2: + _vm->_sound->command(1); + _vm->_sound->command(67); + _scene->_nextSceneId = 102; + break; + + default: + break; + } + _action._inProgress = false; + return; + } + + if (_action._lookFlag) { + if (_globals[kCurrentYear] == 1993) + _vm->_dialogs->show(10410); + else + _vm->_dialogs->show(10411); + + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_LOOK) || _action.isAction(VERB_LOOK_AT)) { + if (_action.isObject(NOUN_STAGE)) { + _vm->_dialogs->show(10412); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_APRON)) { + _vm->_dialogs->show(10413); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_PROSCENIUM_ARCH)) { + _vm->_dialogs->show(10414); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_ACT_CURTAIN)) { + _vm->_dialogs->show(10415); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_ORCHESTRA_PIT)) { + _vm->_dialogs->show(10416); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_CONDUCTORS_STAND)) { + _vm->_dialogs->show(10417); + _action._inProgress = false; + return; + } + + if ((_action.isObject(NOUN_MUSIC_STAND)) || (_action.isObject(NOUN_MUSIC_STANDS))) { + _vm->_dialogs->show(10418); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_PROMPTERS_BOX)) { + _vm->_dialogs->show(10419); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_TRAP_DOOR)) { + _vm->_dialogs->show(10420); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_HOUSE)) { + if (_globals[kCurrentYear] == 1881) + _vm->_dialogs->show(10421); + else + _vm->_dialogs->show(10427); + + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_STAGE_LEFT)) { + _vm->_dialogs->show(10422); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_STAGE_RIGHT)) { + _vm->_dialogs->show(10423); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_CHANDELIER)) { + _vm->_dialogs->show(10428); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_MONSIEUR_RICHARD)) { + _vm->_dialogs->show(10433); + _action._inProgress = false; + return; + } + } + + if (_action.isAction(VERB_JUMP_INTO, NOUN_ORCHESTRA_PIT)) { + _vm->_dialogs->show(10426); + _scene->_nextSceneId = 102; + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_OPEN, NOUN_PROMPTERS_BOX) || _action.isAction(VERB_CLOSE, NOUN_PROMPTERS_BOX)) { + _vm->_dialogs->show(10430); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_OPEN, NOUN_TRAP_DOOR)) { + if (_globals[kTrapDoorStatus] == 0) + _vm->_dialogs->show(10424); + else + _vm->_dialogs->show(10432); + + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_CLOSE, NOUN_TRAP_DOOR)) { + if (_globals[kTrapDoorStatus] == 1) + _vm->_dialogs->show(10425); + else + _vm->_dialogs->show(10433); + + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_TAKE, NOUN_CHANDELIER)) { + _vm->_dialogs->show(10435); + _action._inProgress = false; + return; + } +} + +void Scene104::cleanInventory() { + if (_game._objects.isInInventory(OBJ_LARGE_NOTE)) + _game._objects.setRoom(OBJ_LARGE_NOTE, NOWHERE); + + if (_game._objects.isInInventory(OBJ_SANDBAG)) + _game._objects.setRoom(OBJ_SANDBAG, NOWHERE); + + if (_game._objects.isInInventory(OBJ_SMALL_NOTE)) + _game._objects.setRoom(OBJ_SMALL_NOTE, NOWHERE); + + if (_game._objects.isInInventory(OBJ_PARCHMENT)) + _game._objects.setRoom(OBJ_PARCHMENT, NOWHERE); + + if (_game._objects.isInInventory(OBJ_BOOK)) + _game._objects.setRoom(OBJ_BOOK, NOWHERE); + + if (_game._objects.isInInventory(OBJ_RED_FRAME)) + _game._objects.setRoom(OBJ_RED_FRAME, 105); + + if (_game._objects.isInInventory(OBJ_YELLOW_FRAME)) + _game._objects.setRoom(OBJ_YELLOW_FRAME, 107); + + if (_game._objects.isInInventory(OBJ_BLUE_FRAME)) + _game._objects.setRoom(OBJ_BLUE_FRAME, 302); + + if (_game._objects.isInInventory(OBJ_GREEN_FRAME)) + _game._objects.setRoom(OBJ_GREEN_FRAME, 307); +} + +void Scene104::processConversations() { + bool interlocutorTriggerFl = false; + bool heroTriggerFl = false; + + switch (_action._activeAction._verbId) { + case 2: + case 10: + case 12: + case 16: + case 20: + case 21: + case 24: + _vm->_gameConv->setInterlocutorTrigger(75); + interlocutorTriggerFl = true; + break; + + case 3: + if (!_needToGetUp) { + _vm->_gameConv->setInterlocutorTrigger(67); + interlocutorTriggerFl = true; + _needToGetUp = true; + } + break; + + case 8: + _vm->_gameConv->setInterlocutorTrigger(87); + interlocutorTriggerFl = true; + break; + + case 11: + _vm->_gameConv->setInterlocutorTrigger(77); + interlocutorTriggerFl = true; + break; + + case 14: + case 25: + if (!_game._trigger) { + _richStatus = 0; + _coupleStatus = 5; + _vm->_gameConv->hold(); + } + break; + + case 22: + _vm->_gameConv->setInterlocutorTrigger(75); + _vm->_gameConv->setHeroTrigger(79); + interlocutorTriggerFl = true; + heroTriggerFl = true; + break; + + case 23: + _vm->_gameConv->setInterlocutorTrigger(89); + interlocutorTriggerFl = true; + break; + + case 28: + _vm->_gameConv->setInterlocutorTrigger(81); + interlocutorTriggerFl = true; + break; + + case 30: + if (!_game._trigger) { + _vm->_gameConv->hold(); + _richStatus = 4; + } + break; + + case 32: + _coupleStatus = 14; + heroTriggerFl = true; + interlocutorTriggerFl = true; + _vm->_gameConv->hold(); + break; + + default: + break; + } + + switch (_game._trigger) { + case 67: + _vm->_gameConv->hold(); + _coupleStatus = 12; + break; + + case 69: + if (!_beforeSheLeaves && !_beforeHeLeaves && (_coupleStatus != 14) && !_needToStandUp) { + _richStatus = 0; + if (_sittingUp) + _coupleStatus = 4; + else + _coupleStatus = 12; + } + break; + + case 71: + if (!_beforeSheLeaves && !_beforeHeLeaves && (_coupleStatus != 14) && !_needToStandUp) { + _richStatus = 0; + if (_sittingUp && !_beforeSheLeaves) { + _coupleStatus = 3; + _richStatus = 0; + } + } + break; + + case 75: + _richStatus = 1; + + if (_sittingUp) { + if (_action._activeAction._verbId == 20) { + _lookCount = 0; + _coupleStatus = 9; + } else if ((_action._activeAction._verbId == 21) || (_action._activeAction._verbId == 22)) { + _lookCount = 0; + _coupleStatus = 10; + } else { + _coupleStatus = 1; + } + } else { + _coupleStatus = 11; + } + break; + + case 77: + _richStatus = 0; + _coupleStatus = 8; + break; + + case 79: + _richStatus = 0; + _coupleStatus = 7; + break; + + case 81: + _richStatus = 1; + _beforeHeLeaves = true; + _coupleStatus = 15; + break; + + case 83: + _vm->_gameConv->release(); + if (_coupleStatus != 17) + _game._player._stepEnabled = false; + break; + + case 87: + _richStatus = 3; + break; + + case 89: + _richStatus = 2; + break; + + default: + break; + } + + if (!heroTriggerFl && !_beforeSheLeaves) + _vm->_gameConv->setHeroTrigger(71); + + if (!interlocutorTriggerFl) + _vm->_gameConv->setInterlocutorTrigger(69); + + _richTalkCount = 0; + _manTalkCount = 0; + _womanTalkCount = 0; +} + +void Scene104::handleWalkAnimation() { + if (_scene->_animation[_globals._animationIndexes[2]]->getCurrentFrame() == _walkFrame) + return; + + _walkFrame = _scene->_animation[_globals._animationIndexes[2]]->getCurrentFrame(); + int daaeResetFrame = -1; + + switch (_walkFrame) { + case 1: + if (_walkStatus == 0) { + daaeResetFrame = 0; + } else { + _game.syncTimers(SYNC_ANIM, _globals._animationIndexes[2], SYNC_ANIM, _globals._animationIndexes[1]); + daaeResetFrame = 1; + } + break; + + case 138: + _walkStatus = 0; + daaeResetFrame = 0; + break; + + default: + break; + } + + if (daaeResetFrame >= 0) { + _scene->setAnimFrame(_globals._animationIndexes[2], daaeResetFrame); + _walkFrame = daaeResetFrame; + } +} + +void Scene104::handleRichAnimations() { + if (_scene->_animation[_globals._animationIndexes[0]]->getCurrentFrame() == _richFrame) + return; + + _richFrame = _scene->_animation[_globals._animationIndexes[0]]->getCurrentFrame(); + int random; + int resetFrame = -1; + + switch (_richFrame) { + case 1: + case 2: + case 3: + case 4: + case 8: + case 14: + case 22: + case 34: + case 40: + case 44: + case 48: + random = -1; + if (_richStatus == 1) { + random = _vm->getRandomNumber(1, 3); + ++_richTalkCount; + if (_richTalkCount > 15) { + _richStatus = 0; + random = 40; + } + } + + if (_richStatus == 0) + random = _vm->getRandomNumber(7, 80); + + if (_richStatus == 2) { + random = 4; + _richStatus = 1; + _richTalkCount = 8; + } + + if (_richStatus == 3) { + random = 5; + _richStatus = 1; + _richTalkCount = 8; + } + + if (_richStatus == 4) + random = 6; + + if (_richStatus == 5) + random = 7; + + switch (random) { + case 1: + resetFrame = 1; + break; + + case 2: + resetFrame = 2; + break; + + case 3: + resetFrame = 3; + break; + + case 4: + resetFrame = 23; + break; + + case 5: + resetFrame = 35; + break; + + case 6: + resetFrame = 49; + break; + + case 7: + resetFrame = 41; + break; + + case 8: + resetFrame = 45; + break; + + case 9: + resetFrame = 9; + break; + + case 10: + resetFrame = 5; + break; + + case 11: + resetFrame = 15; + break; + + default: + resetFrame = 0; + break; + } + break; + + case 117: + _coupleStatus = 13; + break; + + case 125: + resetFrame = 124; + break; + + default: + break; + } + + if (resetFrame >= 0) { + _scene->setAnimFrame(_globals._animationIndexes[0], resetFrame); + _richFrame = resetFrame; + } +} + +void Scene104::handleCoupleAnimations() { + if (_scene->_animation[_globals._animationIndexes[1]]->getCurrentFrame() == _coupleFrame) + return; + + _coupleFrame = _scene->_animation[_globals._animationIndexes[1]]->getCurrentFrame(); + int resetFrame = -1; + int random; + + switch (_coupleFrame) { + case 1: + case 103: + case 104: + case 105: + if (_coupleStatus == 11) + resetFrame = 0; + else { + resetFrame = _vm->getRandomNumber(102, 104); + ++_womanTalkCount; + if (_womanTalkCount > 15) { + if (_needToGetUp) { + _coupleStatus = 6; + resetFrame = 1; + } else { + _coupleStatus = 11; + resetFrame = 0; + } + } + } + break; + + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + case 15: + case 25: + case 33: + case 41: + switch (_coupleFrame) { + case 9: + _coupleStatus = 6; + break; + + case 33: + _vm->_gameConv->release(); + if (_action._activeAction._verbId == 13) + _coupleStatus = 4; + + break; + + case 41: + _vm->_gameConv->release(); + _sittingUp = true; + if (_needToTalk) + _coupleStatus = 3; + else + _coupleStatus = 1; + break; + + default: + break; + } + + random = -1; + + switch (_coupleStatus) { + case 1: + random = 12; + break; + + case 2: + case 7: + case 8: + random = 11; + break; + + case 3: + random = _vm->getRandomNumber(4, 6); + ++_manTalkCount; + if (_manTalkCount > 15) { + _coupleStatus = 1; + random = 12; + } + break; + + case 4: + if (_beforeSheLeaves) { + random = 10; + } else { + random = _vm->getRandomNumber(1, 3); + ++_womanTalkCount; + if (_womanTalkCount > 15) { + _coupleStatus = 1; + random = 12; + } + } + break; + + case 5: + _coupleStatus = 1; + random = 8; + break; + + case 6: + _coupleStatus = 1; + random = 7; + break; + + case 13: + random = 9; + break; + + case 15: + random = 10; + break; + + default: + break; + } + + switch (random) { + case 1: + resetFrame = 12; + break; + + case 2: + resetFrame = 13; + break; + + case 3: + resetFrame = 14; + break; + + case 4: + resetFrame = 9; + break; + + case 5: + resetFrame = 10; + break; + + case 6: + resetFrame = 11; + break; + + case 7: + resetFrame = 33; + break; + + case 8: + resetFrame = 25; + break; + + case 9: + resetFrame = 54; + break; + + case 10: + resetFrame = 41; + break; + + case 11: + resetFrame = 15; + break; + + case 12: + resetFrame = 14; + break; + + default: + break; + } + break; + + case 17: + case 18: + case 19: + case 20: + case 21: + case 22: + case 23: + random = -1; + switch (_coupleStatus) { + case 1: + case 3: + case 4: + case 5: + case 6: + case 15: + case 16: + random = 7; + break; + + case 2: + random = 8; + break; + + case 7: + random = _vm->getRandomNumber(4, 6); + ++_manTalkCount; + if (_manTalkCount > 15) { + _coupleStatus = 2; + random = 8; + } + break; + + case 8: + random = _vm->getRandomNumber(1, 3); + ++_womanTalkCount; + if (_womanTalkCount > 15) { + _coupleStatus = 1; + random = 7; + } + break; + + case 9: + random = 1; + ++_lookCount; + if (_lookCount > 6) { + _coupleStatus = 1; + random = 7; + } + break; + + case 10: + random = 1; + break; + + default: + break; + } + + switch (random) { + case 1: + resetFrame = 20; + break; + + case 2: + resetFrame = 21; + break; + + case 3: + resetFrame = 22; + break; + + case 4: + resetFrame = 17; + break; + + case 5: + resetFrame = 18; + break; + + case 6: + resetFrame = 19; + break; + + case 7: + resetFrame = 23; + break; + + case 8: + resetFrame = 20; + break; + + default: + break; + } + break; + + case 52: + _walkStatus = 1; + resetFrame = 54; + break; + + case 55: + if (_coupleStatus != 13) + resetFrame = 54; + + break; + + case 89: + _vm->_gameConv->release(); + break; + + case 90: + if (_coupleStatus != 14) { + resetFrame = 89; + } else { + resetFrame = 90; + _globals[kTempVar] = 200; + } + break; + + case 102: + _vm->_gameConv->release(); + _game._player._playerPos = Common::Point(166, 126); + _game._player.resetFacing(FACING_SOUTH); + resetFrame = 105; + _game._player._visible = true; + _game.syncTimers(SYNC_PLAYER, 0, SYNC_ANIM, _globals._animationIndexes[1]); + break; + + case 106: + _coupleStatus = 17; + resetFrame = 105; + break; + + default: + break; + } + + if (resetFrame >= 0) { + _scene->setAnimFrame(_globals._animationIndexes[1], resetFrame); + _coupleFrame = resetFrame; + } +} + +void Scene104::handlePlayerWalk() { + if (_game._player._frameNumber == _lastPlayerFrame) + return; + + _lastPlayerFrame = _game._player._frameNumber; + switch (_game._player._facing) { + case FACING_NORTH: + case FACING_SOUTH: + if ((_game._player._frameNumber == 5) || (_game._player._frameNumber == 11)) + _vm->_sound->command(68); + break; + + case FACING_NORTHEAST: + case FACING_NORTHWEST: + case FACING_SOUTHEAST: + case FACING_SOUTHWEST: + if ((_game._player._frameNumber == 7) || (_game._player._frameNumber == 14)) + _vm->_sound->command(68); + break; + + case FACING_EAST: + case FACING_WEST: + if ((_game._player._frameNumber == 8) || (_game._player._frameNumber == 16)) + _vm->_sound->command(68); + break; + + default: + break; + } +} + +/*------------------------------------------------------------------------*/ + +Scene105::Scene105(MADSEngine *vm) : Scene1xx(vm) { +} + +void Scene105::synchronize(Common::Serializer &s) { + Scene1xx::synchronize(s); + +} + +void Scene105::setup() { + if (_globals[kCurrentYear] == 1993) + _scene->_variant = 1; + + setPlayerSpritesPrefix(); + setAAName(); + + _scene->addActiveVocab(NOUN_LIGHT_FIXTURE); +} + +void Scene105::enter() { + _scene->loadSpeech(8); + + _globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('x', 2)); + _globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('x', 3)); + _globals._spriteIndexes[5] = _scene->_sprites.addSprites("*RRD_9"); + _globals._spriteIndexes[6] = _scene->_sprites.addSprites("*RDR_9"); + _globals._spriteIndexes[7] = _scene->_sprites.addSprites(formAnimName('a', 0)); + _globals._spriteIndexes[8] = _scene->_sprites.addSprites(formAnimName('a', 1)); + if (_globals[kCurrentYear] == 1993) + _globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('z', -1)); + + if ((_globals[kCurrentYear] == 1881) && (!_globals[kHintThatDaaeIsHome2])) { + if ((_globals[kJacquesNameIsKnown] == 2) && (_globals[kMadameNameIsKnown] == 2) && + _globals[kPanelIn206] && _globals[kDoneRichConv203] && _game._objects.isInInventory(OBJ_LANTERN) && + ((_game._objects.isInInventory(OBJ_CABLE_HOOK) && _game._objects.isInInventory(OBJ_ROPE)) || _game._objects.isInInventory(OBJ_ROPE_WITH_HOOK))) { + _globals[kHintThatDaaeIsHome2] = true; + _scene->_sequences.addTimer(300, 75); + } + } + + if ((_game._objects.isInRoom(OBJ_LANTERN)) && (_globals[kCurrentYear] == 1881)) { + _globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('x', 0)); + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); + } else { + _scene->_hotspots.activate(NOUN_LANTERN, false); + } + + if (_game._objects.isInRoom(OBJ_RED_FRAME)) { + _globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('x', 1)); + _globals._sequenceIndexes[1] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[1], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[1], 14); + } else { + _scene->_hotspots.activate(NOUN_RED_FRAME, false); + } + + if (_globals[kCurrentYear] == 1993) { + _scene->drawToBackground(_globals._spriteIndexes[3], 1, Common::Point(-32000, -32000), 0, 100); + _scene->_hotspots.activate(NOUN_PROPS, false); + _scene->_hotspots.activate(NOUN_BEAR_PROP, false); + _scene->_hotspots.activate(NOUN_STAIR_UNIT, false); + _scene->_hotspots.activate(NOUN_PROP, false); + _scene->_hotspots.activate(NOUN_ELEPHANT_PROP, false); + _scene->_hotspots.activate(NOUN_COLUMN_PROP, false); + + int tmpIdx = _scene->_dynamicHotspots.add(NOUN_COLUMN_PROP, VERB_WALKTO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(132, 24, 132 + 21, 24 + 105)); + _scene->_dynamicHotspots.setPosition(tmpIdx, Common::Point(159, 133), FACING_NORTHWEST); + + tmpIdx = _scene->_dynamicHotspots.add(NOUN_COLUMN_PROP, VERB_WALKTO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(56, 45, 56 + 11, 45 + 77)); + _scene->_dynamicHotspots.setPosition(tmpIdx, Common::Point(72, 126), FACING_NORTHWEST); + + _scene->_dynamicHotspots.add(NOUN_PROP, VERB_WALKTO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(0, 125, 29, 125 + 31)); + _scene->_dynamicHotspots.add(NOUN_PROP, VERB_WALKTO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(29, 136, 29 + 50, 136 + 20)); + _scene->_dynamicHotspots.add(NOUN_PROP, VERB_WALKTO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(79, 141, 79 + 53, 141 + 15)); + + _scene->_dynamicHotspots.add(NOUN_BEAR_PROP, VERB_WALKTO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(278, 132, 278 + 21, 132 + 24)); + _scene->_dynamicHotspots.add(NOUN_BEAR_PROP, VERB_WALKTO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(299, 146, 299 + 8, 146 + 10)); + _scene->_dynamicHotspots.add(NOUN_BEAR_PROP, VERB_WALKTO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(269, 142, 269 + 8, 142 + 8)); + + _scene->_dynamicHotspots.add(NOUN_LIGHT_FIXTURE, VERB_LOOK_AT, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(102, 14, 102 + 24, 102 + 10)); + } + + _globals._sequenceIndexes[4] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[4], false, 2); + _scene->_sequences.setDepth(_globals._sequenceIndexes[4], 14); + + if ((_scene->_priorSceneId == 106) || (_scene->_priorSceneId == 114)) { + _game._player._playerPos = Common::Point(198, 132); + _game._player._facing = FACING_WEST; + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 10); + } else if ((_scene->_priorSceneId == 103) || (_scene->_priorSceneId != RETURNING_FROM_LOADING)) { + _game._player._playerPos = Common::Point(3, 112); + _game._player._facing = FACING_SOUTHEAST; + _game._player.walk(Common::Point(45, 131), FACING_SOUTHEAST); + _game._player.setWalkTrigger(60); + _game._player._stepEnabled = false; + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 8); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 10); + } else if (_scene->_priorSceneId == RETURNING_FROM_LOADING) { + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, -1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 10); + } + + sceneEntrySound(); +} + +void Scene105::step() { + switch (_game._trigger) { + case 60: + _scene->deleteSequence(_globals._sequenceIndexes[2]); + _globals._sequenceIndexes[2] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[2], false, 8, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 10); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 1, 8); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 61); + _vm->_sound->command(66); + break; + + case 61: + _vm->_sound->command(25); + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 10); + _game._player._stepEnabled = true; + break; + + case 75: + _scene->playSpeech(8); + _scene->_sequences.addTimer(120, 76); + break; + + case 76: + _vm->_dialogs->show(10537); + break; + + default: + break; + } +} + +void Scene105::actions() { + if ((_action.isAction(VERB_PUSH, NOUN_THUNDER_MACHINE)) || (_action.isAction(VERB_PULL, NOUN_THUNDER_MACHINE))) { + switch (_game._trigger) { + case 0: + _game._player._stepEnabled = false; + _game._player._visible = false; + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('t', 1), 70); + _scene->deleteSequence(_globals._sequenceIndexes[4]); + _game.syncTimers(SYNC_SEQ, _globals._sequenceIndexes[4], SYNC_ANIM, _globals._animationIndexes[0]); + _scene->_sequences.setSeqPlayer(_globals._animationIndexes[0], false); + break; + + case 70: + _globals._sequenceIndexes[4] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[4], false, 2); + _scene->_sequences.setDepth(_globals._sequenceIndexes[4], 14); + _game.syncTimers(SYNC_SEQ, _globals._sequenceIndexes[4], SYNC_ANIM, _globals._animationIndexes[0]); + _game._player._stepEnabled = true; + _game._player._visible = true; + _game.syncTimers(SYNC_PLAYER, 0, SYNC_ANIM, _globals._animationIndexes[0]); + break; + + default: + break; + } + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_CLIMB_UP, NOUN_CIRCULAR_STAIRCASE)) { + switch (_game._trigger) { + case 0: + _game._player._stepEnabled = false; + _game._player._visible = false; + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('u', 1), 1); + _game.syncTimers(SYNC_ANIM, _globals._animationIndexes[0], SYNC_PLAYER, 0); + break; + + case 1: + _scene->_nextSceneId = 106; + break; + + default: + break; + } + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_CLIMB_DOWN, NOUN_CIRCULAR_STAIRCASE)) { + switch (_game._trigger) { + case 0: + _game._player._stepEnabled = false; + _game._player._visible = false; + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('d', 1), 1); + _game.syncTimers(SYNC_ANIM, _globals._animationIndexes[0], SYNC_PLAYER, 0); + break; + + case 1: + _scene->_nextSceneId = 114; + break; + + default: + break; + } + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_TAKE, NOUN_RED_FRAME) && (_game._objects.isInRoom(OBJ_RED_FRAME) || _game._trigger)) { + switch (_game._trigger) { + case (0): + if (_globals[kCurrentYear] == 1881) { + int count = 0; + + if (_game._objects.isInInventory(NOUN_YELLOW_FRAME)) + ++count; + + if (_game._objects.isInInventory(NOUN_GREEN_FRAME)) + ++count; + + if (_game._objects.isInInventory(NOUN_BLUE_FRAME)) + ++count; + + if (count < 3) + _globals[kPlayerScore] += 5; + } + + _game._player._stepEnabled = false; + _game._player._visible = false; + _globals._sequenceIndexes[5] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[5], true, 5, 2); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[5], 1, 5); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[5], true); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_SPRITE, 5, 1); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_EXPIRE, 0, 2); + break; + + case 1: + _scene->deleteSequence(_globals._sequenceIndexes[1]); + _scene->_hotspots.activate(NOUN_RED_FRAME, false); + _game._objects.addToInventory(OBJ_RED_FRAME); + _vm->_sound->command(26); + break; + + case 2: + _game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[5]); + _game._player._visible = true; + _scene->_sequences.addTimer(20, 3); + break; + + case 3: + if (_globals[kCurrentYear] == 1881) + _vm->_dialogs->showItem(OBJ_RED_FRAME, 842, 0); + else + _vm->_dialogs->showItem(OBJ_RED_FRAME, 802, 0); + + _game._player._stepEnabled = true; + break; + } + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_TAKE, NOUN_LANTERN) && (_game._objects.isInRoom(OBJ_LANTERN) || _game._trigger)) { + switch (_game._trigger) { + case (0): + _globals[kPlayerScore] += 5; + _game._player._stepEnabled = false; + _game._player._visible = false; + _globals._sequenceIndexes[6] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[6], true, 5, 2); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[6], 1, 4); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[6], true); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[6], SEQUENCE_TRIGGER_SPRITE, 4, 1); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[6], SEQUENCE_TRIGGER_EXPIRE, 0, 2); + break; + + case 1: + _scene->deleteSequence(_globals._sequenceIndexes[0]); + _scene->_hotspots.activate(NOUN_LANTERN, false); + _game._objects.addToInventory(OBJ_LANTERN); + _vm->_sound->command(26); + break; + + case 2: + _game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[6]); + _game._player._visible = true; + _scene->_sequences.addTimer(20, 3); + break; + + case 3: + _vm->_dialogs->showItem(OBJ_LANTERN, 801, 0); + _game._player._stepEnabled = true; + break; + + default: + break; + } + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_WALK_THROUGH, NOUN_DOOR) || _action.isAction(VERB_OPEN, NOUN_DOOR) || (_game._trigger) || + _action.isAction(VERB_UNLOCK, NOUN_DOOR) || _action.isAction(VERB_LOCK, NOUN_DOOR)) { + if ((_globals[kCurrentYear] == 1881) && !_action.isAction(VERB_UNLOCK) && !_action.isAction(VERB_LOCK)){ + switch (_game._trigger) { + case (0): + _game._player._stepEnabled = false; + _game._player._visible = false; + _globals._sequenceIndexes[6] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[6], true, 5, 2); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[6], 1, 4); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[6], true); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[6], SEQUENCE_TRIGGER_SPRITE, 4, 65); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[6], SEQUENCE_TRIGGER_EXPIRE, 0, 2); + break; + + case 2: + _game._player._visible = true; + _scene->_sequences.addTimer(180, 3); + break; + + case 3: + _scene->_nextSceneId = 103; + break; + + case 65: + _vm->_sound->command(24); + _scene->deleteSequence(_globals._sequenceIndexes[2]); + _globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 8, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 14); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 1, 8); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 66); + _vm->_sound->command(66); + break; + + case 66: { + int tmpIdx = _globals._sequenceIndexes[2]; + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 8); + _game.syncTimers(SYNC_SEQ, _globals._sequenceIndexes[2], SYNC_SEQ, tmpIdx); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 14); + _game._player.walk(Common::Point(0, 111), FACING_NORTHWEST); + } + break; + + default: + break; + } + } else { + switch (_game._trigger) { + case (0): + _game._player._stepEnabled = false; + _game._player._visible = false; + _globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], true, 5, 1); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[6], 1, 4); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[6], true); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[6], SEQUENCE_TRIGGER_EXPIRE, 0, 1); + break; + + case 1: { + int tmpIdx = _globals._sequenceIndexes[6]; + _globals._sequenceIndexes[6] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[6], true, 4); + _game.syncTimers(SYNC_SEQ, _globals._sequenceIndexes[6], SYNC_SEQ, tmpIdx); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[6], false); + _vm->_sound->command(73); + _scene->_sequences.addTimer(15, 2); + } + break; + + case 2: + _scene->deleteSequence(_globals._sequenceIndexes[6]); + _globals._sequenceIndexes[6] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[6], true, 5, 1); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[6], 1, 4); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[6], false); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[6], SEQUENCE_TRIGGER_EXPIRE, 0, 3); + break; + + case 3: + _game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[6]); + _game._player._visible = true; + if (_action.isAction(VERB_LOCK) || _action.isAction(VERB_UNLOCK)) + _vm->_dialogs->show(32); + else + _vm->_dialogs->show(10536); + + _game._player._stepEnabled = true; + break; + + default: + break; + } + } + _action._inProgress = false; + return; + } + + if (_action._lookFlag) { + if (_globals[kCurrentYear] == 1993) + _vm->_dialogs->show(10510); + else + _vm->_dialogs->show(10511); + + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_LOOK) || _action.isAction(VERB_LOOK_AT)) { + if (_action.isObject(NOUN_FLOOR)) { + _vm->_dialogs->show(10512); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_CIRCULAR_STAIRCASE)) { + _vm->_dialogs->show(10513); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_LANTERN) && _game._objects.isInRoom(OBJ_LANTERN)) { + _vm->_dialogs->show(10514); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_RED_FRAME) && _game._objects.isInRoom(OBJ_RED_FRAME)){ + if (_globals[kCurrentYear] == 1881) + _vm->_dialogs->show(10530); + else + _vm->_dialogs->show(10515); + + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_DOOR)) { + _vm->_dialogs->show(10516); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_WALL)) { + _vm->_dialogs->show(10517); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_PROP_TABLE)) { + _vm->_dialogs->show(10518); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_BEAR_PROP)) { + if (_globals[kCurrentYear] == 1993) + _vm->_dialogs->show(10519); + else + _vm->_dialogs->show(10538); + + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_ELEPHANT_PROP)) { + _vm->_dialogs->show(10520); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_COLUMN_PROP)) { + if (_globals[kCurrentYear] == 1993) + _vm->_dialogs->show(10521); + else + _vm->_dialogs->show(10539); + + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_THUNDER_MACHINE)) { + if (_globals[kCurrentYear] == 1993) + _vm->_dialogs->show(10522); + else + _vm->_dialogs->show(10540); + + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_STAIR_UNIT)) { + _vm->_dialogs->show(10523); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_PROP)) { + _vm->_dialogs->show(10524); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_PROPS)) { + _vm->_dialogs->show(10525); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_EXIT_SIGN)) { + _vm->_dialogs->show(10526); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_FLATS)) { + _vm->_dialogs->show(10527); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_HEMP)) { + _vm->_dialogs->show(10528); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_PIPE)) { + _vm->_dialogs->show(10529); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_GRAFFITI)) { + _vm->_dialogs->show(10531); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_LIGHT_FIXTURE)) { + _vm->_dialogs->show(10535); + _action._inProgress = false; + return; + } + } + + if (_action.isAction(VERB_TALK_TO, NOUN_BEAR_PROP)) { + _vm->_dialogs->show(10532); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_TAKE, NOUN_BEAR_PROP)) { + _vm->_dialogs->show(10533); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_CLOSE, NOUN_DOOR)) { + _vm->_dialogs->show(10534); + _action._inProgress = false; + return; + } +} + +void Scene105::preActions() { + if (_action.isAction(VERB_WALK_THROUGH, NOUN_DOOR_TO_PIT)) + _game._player._walkOffScreenSceneId = 102; + + if (_action.isAction(VERB_OPEN, NOUN_DOOR) || _action.isAction(VERB_UNLOCK, NOUN_DOOR) || _action.isAction(VERB_LOCK, NOUN_DOOR)) + _game._player.walk(Common::Point(33, 128), FACING_NORTHWEST); +} + +/*------------------------------------------------------------------------*/ + +Scene106::Scene106(MADSEngine *vm) : Scene1xx(vm) { + _sandbagHostpotId = -1; +} + +void Scene106::synchronize(Common::Serializer &s) { + Scene1xx::synchronize(s); + + s.syncAsSint16LE(_sandbagHostpotId); +} + +void Scene106::setup() { + if (_globals[kCurrentYear] == 1881) + _scene->_variant = 1; + + setPlayerSpritesPrefix(); + setAAName(); +} + +void Scene106::enter() { + _scene->loadSpeech(8); + + if (_globals[kCurrentYear] == 1993) { + if (!_game._objects.isInInventory(OBJ_SANDBAG)) { + _globals._spriteIndexes[5] = _scene->_sprites.addSprites("*RRD_9"); + _globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('x', 0)); + } + } else { + _globals._spriteIndexes[7] = _scene->_sprites.addSprites(formAnimName('z', -1)); + if (_game._objects.isInRoom(OBJ_CABLE_HOOK) && !_game._objects.isInInventory(OBJ_ROPE_WITH_HOOK)) { + _globals._spriteIndexes[5] = _scene->_sprites.addSprites("*RRD_9"); + _globals._spriteIndexes[8] = _scene->_sprites.addSprites(formAnimName('p', 0)); + } + } + + _globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('a', 0)); + _globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('x', 1)); + _globals._spriteIndexes[3] = _scene->_sprites.addSprites("*RDR_9"); + _globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('a', 1)); + _globals._spriteIndexes[6] = _scene->_sprites.addSprites(formAnimName('a', 2)); + + if ((_globals[kCurrentYear] == 1881) && (!_globals[kHintThatDaaeIsHome1])) { + if ((_globals[kJacquesNameIsKnown] == 2) && (_globals[kMadameNameIsKnown] == 2) + && (_globals[kPanelIn206]) && (_globals[kDoneRichConv203]) && (_game._objects.isInInventory(OBJ_LANTERN)) + && ((_game._objects.isInInventory(OBJ_CABLE_HOOK) && _game._objects.isInInventory(OBJ_ROPE)) + || _game._objects.isInInventory(OBJ_ROPE_WITH_HOOK))) { + _globals[kHintThatDaaeIsHome1] = true; + _scene->_sequences.addTimer(300, 85); + } + } + + if ((_globals[kSandbagStatus] == 1) && (_globals[kCurrentYear] == 1993) && _game._objects.isInRoom(OBJ_SANDBAG)) { + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, -2); + _sandbagHostpotId = _scene->_dynamicHotspots.add(NOUN_SANDBAG, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(227, 140, 227 + 18, 140 + 11)); + _scene->_dynamicHotspots.setPosition(_sandbagHostpotId, Common::Point(224, 152), FACING_NORTHEAST); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 2); + } + + if (_globals[kCurrentYear] == 1881) { + _scene->drawToBackground(_globals._spriteIndexes[7], 1, Common::Point(-32000, -32000), 0, 100); + _scene->_hotspots.activate(NOUN_BIG_PROP, false); + _scene->_hotspots.activate(NOUN_STATUE, false); + _scene->_hotspots.activate(NOUN_PLANT_PROP, false); + _scene->_hotspots.activate(NOUN_PEDESTAL, false); + _scene->_hotspots.activate(NOUN_SANDBAG, false); + _scene->_hotspots.activate(NOUN_CRATE, false); + + _scene->_dynamicHotspots.add(NOUN_SANDBAG, VERB_LOOK_AT, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(40, 47, 40 + 11, 47 + 17)); + _scene->_dynamicHotspots.add(NOUN_SANDBAG, VERB_LOOK_AT, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(98, 14, 98 + 5, 14 + 10)); + _scene->_dynamicHotspots.add(NOUN_SANDBAG, VERB_LOOK_AT, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(111, 23, 111 + 6, 23 + 9)); + _scene->_dynamicHotspots.add(NOUN_SANDBAG, VERB_LOOK_AT, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(119, 12, 119 + 5, 12 + 8)); + + int idx = _scene->_dynamicHotspots.add(NOUN_STAGE, VERB_WALK_ACROSS, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(80, 114, 80 + 24, 114 + 4)); + _scene->_dynamicHotspots.setPosition(idx, Common::Point(93, 121), FACING_NONE); + + idx = _scene->_dynamicHotspots.add(NOUN_STAGE, VERB_WALK_ACROSS, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(106, 102, 106 + 5, 102 + 10)); + _scene->_dynamicHotspots.setPosition(idx, Common::Point(108, 109), FACING_NONE); + } else { + _scene->_hotspots.activate(NOUN_BOXES, false); + _scene->_hotspots.activate(NOUN_CASE, false); + } + + if ((_game._objects.isInRoom(OBJ_CABLE_HOOK)) && (_globals[kCurrentYear] == 1881) && !_game._objects.isInInventory(OBJ_ROPE_WITH_HOOK)){ + _globals._sequenceIndexes[8] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[8], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[8], 3); + } else { + _scene->_hotspots.activate(NOUN_CABLE_HOOK, false); + } + + if (_scene->_priorSceneId == 109) { + _game._player._playerPos = Common::Point(180, 58); + _game._player._facing = FACING_SOUTH; + _game._player.walk(Common::Point(179, 63), FACING_SOUTH); + _game._player.setWalkTrigger(60); + _game._player._stepEnabled = false; + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 5); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 14); + } else if ((_scene->_priorSceneId == 105) || (_scene->_priorSceneId == 301)) { + _game._player._playerPos = Common::Point(235, 142); + _game._player._facing = FACING_WEST; + _game._player.walk(Common::Point(227, 143), FACING_WEST); + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 14); + } else if (_scene->_priorSceneId == 107) { + _game._player._playerPos = Common::Point(143, 68); + _game._player._facing = FACING_WEST; + _game._player.walk(Common::Point(163, 68), FACING_SOUTHEAST); + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 14); + } else if ((_scene->_priorSceneId == 108) || (_scene->_priorSceneId != RETURNING_FROM_LOADING)) { + _game._player.firstWalk(Common::Point(-20, 130), FACING_SOUTHEAST, Common::Point(19, 147), FACING_NORTHEAST, true); + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 14); + } else if (_scene->_priorSceneId == RETURNING_FROM_LOADING) { + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, -1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 14); + } + + sceneEntrySound(); +} + +void Scene106::step() { + switch (_game._trigger) { + case 85: + _scene->playSpeech(8); + _scene->_sequences.addTimer(120, 86); + break; + + case 86: + _vm->_dialogs->show(10637); + break; + + case 60: + _scene->deleteSequence(_globals._sequenceIndexes[2]); + _globals._sequenceIndexes[2] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[2], false, 8, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 14); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 1, 5); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 61); + break; + + case 61: + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 14); + _vm->_sound->command(25); + _game._player._stepEnabled = true; + break; + + default: + break; + } +} + +void Scene106::actions() { + if ((_action.isAction(VERB_TAKE, NOUN_SANDBAG)) && (_scene->_customDest.y < 61)) { + _vm->_dialogs->show(10635); + _action._inProgress = false; + return; + } else if (_action.isAction(VERB_TAKE, NOUN_SANDBAG)) { + if (_game._objects.isInRoom(OBJ_SANDBAG)) { + switch (_game._trigger) { + case (0): + _game._player._stepEnabled = false; + _game._player._visible = false; + _globals._sequenceIndexes[5] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[5], false, 5, 2); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[5], 1, 5); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[5], true); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_SPRITE, 5, 1); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_EXPIRE, 0, 2); + break; + + case 1: + _scene->deleteSequence(_globals._sequenceIndexes[0]); + _scene->_dynamicHotspots.remove(_sandbagHostpotId); + _vm->_sound->command(26); + break; + + case 2: + _game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[5]); + _game._player._visible = true; + _scene->_sequences.addTimer(20, 3); + break; + + case 3: + _game._objects.addToInventory(OBJ_SANDBAG); + _vm->_dialogs->showItem(OBJ_SANDBAG, 803, 0); + _game._player._stepEnabled = true; + break; + + default: + break; + } + _action._inProgress = false; + return; + } + } + + if (_action.isAction(VERB_TAKE, NOUN_CABLE_HOOK)) { + if (_game._objects.isInRoom(OBJ_CABLE_HOOK)) { + switch (_game._trigger) { + case (0): + _game._player._stepEnabled = false; + _game._player._visible = false; + _globals._sequenceIndexes[5] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[5], true, 5, 2); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[5], 1, 5); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[5], true); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_SPRITE, 5, 1); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_EXPIRE, 0, 2); + _globals[kPlayerScore] += 5; + break; + + case 1: + _scene->deleteSequence(_globals._sequenceIndexes[8]); + _scene->_hotspots.activate(NOUN_CABLE_HOOK, false); + _vm->_sound->command(26); + break; + + case 2: + _game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[5]); + _game._player._visible = true; + _scene->_sequences.addTimer(20, 3); + break; + + case 3: + _game._objects.addToInventory(OBJ_CABLE_HOOK); + _vm->_dialogs->showItem(OBJ_CABLE_HOOK, 822, 0); + _game._player._stepEnabled = true; + break; + + default: + break; + } + _action._inProgress = false; + return; + } + } + + switch (_game._trigger) { + case 75: + _game._player._stepEnabled = false; + _game._player._visible = false; + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('d', 1), 76); + _game.syncTimers(SYNC_ANIM, _globals._animationIndexes[0], SYNC_PLAYER, 0); + _action._inProgress = false; + return; + + case 76: + _scene->_nextSceneId = 105; + _action._inProgress = false; + return; + + case 80: + _game._player._stepEnabled = false; + _game._player._visible = false; + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('u', 1), 81); + _game.syncTimers(SYNC_ANIM, _globals._animationIndexes[0], SYNC_PLAYER, 0); + _action._inProgress = false; + return; + + case 81: + _scene->_sequences.addTimer(120, 82); + _action._inProgress = false; + return; + + case 82: + _scene->_nextSceneId = 301; + _action._inProgress = false; + return; + + default: + break; + } + + if (_action.isAction(VERB_EXIT_TO, NOUN_STAGE_RIGHT_WING)) { + _scene->_nextSceneId = 107; + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_CLIMB_DOWN) || _action.isAction(VERB_CLIMB_UP)) { + if (_globals[kSandbagStatus] == 1) { + switch (_game._trigger) { + case 0: + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('s',-1), 1); + _game._player._stepEnabled = false; + _game._player._visible = false; + break; + + case 1: + _game.syncTimers(SYNC_PLAYER, 0, SYNC_ANIM, _globals._animationIndexes[0]); + _game._player._visible = true; + _game._player._playerPos = Common::Point(225, 143); + _game._player.resetFacing(FACING_EAST); + _game._player.walk(Common::Point(236, 142), FACING_EAST); + + if (_action.isAction(VERB_CLIMB_DOWN)) + _game._player.setWalkTrigger(75); + else + _game._player.setWalkTrigger(80); + break; + + default: + break; + } + } else { + switch (_game._trigger) { + case 0: + _globals._sequenceIndexes[0] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[0], false, 4, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 2); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[0], 1, 9); + _scene->_sequences.addTimer(6, 2); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_EXPIRE, 0, 1); + break; + + case 1: + _vm->_sound->command(70); + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, -2); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 2); + _sandbagHostpotId = _scene->_dynamicHotspots.add(NOUN_SANDBAG, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(227, 140, 227 + 18, 140 + 11)); + _scene->_dynamicHotspots.setPosition(_sandbagHostpotId, Common::Point(224, 152), FACING_NORTHEAST); + break; + + case 2: + _game._player._stepEnabled = false; + _game._player._visible = false; + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('s', 1), 3); + _game.syncTimers(SYNC_ANIM, _globals._animationIndexes[0], SYNC_PLAYER, 0); + break; + + case 3: + _game.syncTimers(SYNC_PLAYER, 0, SYNC_ANIM, _globals._animationIndexes[0]); + _game._player._visible = true; + _game._player._stepEnabled = true; + _game._player._playerPos = Common::Point(228, 140); + _game._player.resetFacing(FACING_SOUTHEAST); + _globals[kSandbagStatus] = 1; + _vm->_dialogs->show(10632); + break; + + default: + break; + } + } + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_WALK_THROUGH, NOUN_DOOR) || _action.isAction(VERB_OPEN, NOUN_DOOR)) { + switch (_game._trigger) { + case (0): + _game._player._stepEnabled = false; + _game._player._visible = false; + _globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 5, 2); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 1, 4); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[3], true); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_SPRITE, 4, 65); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 67); + break; + + case 65: + _vm->_sound->command(24); + _scene->deleteSequence(_globals._sequenceIndexes[2]); + _globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 8, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 14); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 1, 5); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 66); + break; + + case 66: { + int idx = _globals._sequenceIndexes[2]; + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 5); + _game.syncTimers(SYNC_SEQ, _globals._sequenceIndexes[2], SYNC_SEQ, idx); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 14); + } + break; + + case 67: + _game._player._visible = true; + _game._player.walk(Common::Point(180, 60), FACING_NORTH); + _game._player.setWalkTrigger(68); + break; + + case 68: + _scene->deleteSequence(_globals._sequenceIndexes[2]); + _globals._sequenceIndexes[2] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[2], false, 8, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 1); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], -1, -2); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 69); + break; + + case 69: + _vm->_sound->command(25); + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, -1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 1); + _scene->_nextSceneId = 109; + break; + + default: + break; + } + _action._inProgress = false; + return; + } + + if (_action._lookFlag) { + _vm->_dialogs->show(10610); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_LOOK) || _action.isAction(VERB_LOOK_AT)) { + if (_action.isObject(NOUN_STAGE_RIGHT_WING)) { + _vm->_dialogs->show(10611); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_STAGE_LEFT_WING)) { + _vm->_dialogs->show(10612); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_IN_TWO)) { + _vm->_dialogs->show(10613); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_CYCLORAMA)) { + _vm->_dialogs->show(10614); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_STAGE)) { + _vm->_dialogs->show(10615); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_PEDESTAL)) { + _vm->_dialogs->show(10616); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_PLANT_PROP)) { + _vm->_dialogs->show(10617); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_SANDBAG)) { + if (_scene->_customDest.y < 60) { + _vm->_dialogs->show(10618); + _action._inProgress = false; + return; + } else if (_game._objects.isInRoom(OBJ_SANDBAG)) { + _vm->_dialogs->show(10633); + _action._inProgress = false; + return; + } + } + + if (_action.isObject(NOUN_STATUE)) { + _vm->_dialogs->show(10619); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_CIRCULAR_STAIRCASE)) { + _vm->_dialogs->show(10620); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_BATTEN)) { + _vm->_dialogs->show(10621); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_DOOR)) { + _vm->_dialogs->show(10622); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_BOXES) || _action.isObject(NOUN_BOX)) { + _vm->_dialogs->show(10623); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_BIG_PROP)) { + _vm->_dialogs->show(10624); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_CRATE)) { + _vm->_dialogs->show(10625); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_CASE)) { + if (_globals[kCurrentYear] == 1881) + _vm->_dialogs->show(10638); + else + _vm->_dialogs->show(10636); + + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_VENTILATION_DUCT)) { + _vm->_dialogs->show(10626); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_JUNK)) { + _vm->_dialogs->show(10627); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_FLATS)) { + _vm->_dialogs->show(10628); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_WALL)) { + _vm->_dialogs->show(10629); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_CABLE_HOOK) && _game._objects.isInRoom(OBJ_CABLE_HOOK)) { + _vm->_dialogs->show(10639); + _action._inProgress = false; + return; + } + } + + if (_action.isAction(VERB_TALK_TO, NOUN_STATUE)) { + _vm->_dialogs->show(10630); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_CLOSE, NOUN_DOOR)) { + _vm->_dialogs->show(10634); + _action._inProgress = false; + return; + } +} + +void Scene106::preActions() { + if (_action.isAction(VERB_EXIT_TO, NOUN_STAGE_LEFT_WING)) + _game._player._walkOffScreenSceneId = 108; + + if (_action.isAction(VERB_OPEN, NOUN_DOOR)) + _game._player.walk(Common::Point(179, 63), FACING_NORTHWEST); +} + +/*------------------------------------------------------------------------*/ + +Scene107::Scene107(MADSEngine *vm) : Scene1xx(vm) { +} + +void Scene107::synchronize(Common::Serializer &s) { + Scene1xx::synchronize(s); +} + +void Scene107::setup() { + setPlayerSpritesPrefix(); + setAAName(); +} + +void Scene107::enter() { + if (_globals[kCurrentYear] == 1993) + _globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('z', -1)); + + if (_game._objects.isInRoom(OBJ_YELLOW_FRAME)) { + _globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('f', 0)); + _globals._spriteIndexes[1] = _scene->_sprites.addSprites("*RRD_9"); + } + + if (_game._objects.isInRoom(OBJ_YELLOW_FRAME)) { + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 14); + } else { + _scene->_hotspots.activate(NOUN_YELLOW_FRAME, false); + } + + if (_globals[kCurrentYear] == 1993) { + _scene->drawToBackground(_globals._spriteIndexes[0], 1, Common::Point(-32000, -32000), 0, 100); + _scene->_hotspots.activate(NOUN_PROP_TABLE, false); + } else { + _scene->_hotspots.activate(NOUN_HEADSET, false); + } + + if (_scene->_priorSceneId == 106) { + _game._player._playerPos = Common::Point(276, 73); + _game._player._facing = FACING_SOUTHWEST; + _game._player.walk(Common::Point(248, 75), FACING_SOUTHWEST); + } else if ((_scene->_priorSceneId == 104) || (_scene->_priorSceneId != RETURNING_FROM_LOADING)) { + if (_game._player._playerPos.y > 128) { + _game._player._playerPos.x = 216; + _game._player._facing = FACING_NORTHWEST; + } else if (_game._player._playerPos.y > 99) { + _game._player._playerPos.x = 127; + _game._player._facing = FACING_NORTHWEST; + } else { + _game._player._playerPos.x = 44; + _game._player._facing = FACING_NORTHEAST; + } + _game._player._playerPos.y = 143; + } + + sceneEntrySound(); +} + +void Scene107::step() { +} + +void Scene107::actions() { + if (_action.isAction(VERB_WALK_ONTO, NOUN_STAGE)) { + _scene->_nextSceneId = 104; + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_WALK, NOUN_BACKSTAGE)) { + _scene->_nextSceneId = 106; + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_TAKE, NOUN_YELLOW_FRAME) && (_game._objects.isInRoom(OBJ_YELLOW_FRAME) || _game._trigger)) { + switch (_game._trigger) { + case (0): + if (_globals[kCurrentYear] == 1881) { + int count = 0; + if (_game._objects.isInInventory(OBJ_GREEN_FRAME)) + ++count; + if (_game._objects.isInInventory(OBJ_RED_FRAME)) + ++count; + if (_game._objects.isInInventory(OBJ_BLUE_FRAME)) + ++count; + + if (count < 3) + _globals[kPlayerScore] += 5; + } + + _game._player._stepEnabled = false; + _game._player._visible = false; + _globals._sequenceIndexes[1] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[1], false, 5, 2); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[1], 1, 5); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[1], true); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_SPRITE, 5, 1); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 2); + break; + + case 1: + _scene->deleteSequence(_globals._sequenceIndexes[2]); + _scene->_hotspots.activate(NOUN_YELLOW_FRAME, false); + _game._objects.addToInventory(OBJ_YELLOW_FRAME); + _vm->_sound->command(26); + break; + + case 2: + _game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[1]); + _game._player._visible = true; + _scene->_sequences.addTimer(20, 3); + break; + + case 3: + if (_globals[kCurrentYear] == 1881) + _vm->_dialogs->showItem(OBJ_YELLOW_FRAME, 843, 0); + else + _vm->_dialogs->showItem(OBJ_YELLOW_FRAME, 804, 0); + + _game._player._stepEnabled = true; + break; + + default: + break; + } + _action._inProgress = false; + return; + } + + if (_action._lookFlag) { + _vm->_dialogs->show(10710); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_LOOK) || _action.isAction(VERB_LOOK_AT)) { + if (_action.isObject(NOUN_STAGE)) { + _vm->_dialogs->show(10711); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_IN_TWO)) { + _vm->_dialogs->show(10712); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_IN_ONE)) { + _vm->_dialogs->show(10713); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_CYCLORAMA)) { + _vm->_dialogs->show(10714); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_COUNTERWEIGHT_SYSTEM)) { + _vm->_dialogs->show(10715); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_PURCHASE_LINES)) { + _vm->_dialogs->show(10716); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_LOCKRAIL)) { + _vm->_dialogs->show(10717); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_STAGE)) { + _vm->_dialogs->show(10718); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_PROP_TABLE)) { + _vm->_dialogs->show(10719); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_ACT_CURTAIN)) { + _vm->_dialogs->show(10720); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_LEG)) { + _vm->_dialogs->show(10721); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_APRON)) { + _vm->_dialogs->show(10722); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_PROSCENIUM_ARCH)) { + _vm->_dialogs->show(10723); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_STAGE)) { + _vm->_dialogs->show(10724); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_BACKSTAGE)) { + _vm->_dialogs->show(10725); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_YELLOW_FRAME) && _game._objects.isInRoom(OBJ_YELLOW_FRAME)) { + if (_globals[kCurrentYear] == 1881) + _vm->_dialogs->show(10727); + else + _vm->_dialogs->show(10726); + + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_HEADSET)) { + _vm->_dialogs->show(10728); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_WALL)) { + _vm->_dialogs->show(10730); + _action._inProgress = false; + return; + } + } + + if (_action.isAction(VERB_TAKE, NOUN_HEADSET)) { + _vm->_dialogs->show(10729); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_TALK_TO, NOUN_HEADSET)) { + _vm->_dialogs->show(10732); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_PULL, NOUN_PURCHASE_LINES)) { + _vm->_dialogs->show(10731); + _action._inProgress = false; + return; + } +} + +void Scene107::preActions() { +} + +/*------------------------------------------------------------------------*/ + +Scene108::Scene108(MADSEngine *vm) : Scene1xx(vm) { + _anim0ActvFl = false; + _handRaisedFl = false; + _shutUpCount = -1; + _maxTalkCount = -1; + _charAction = -1; + _charFrame = -1; + _charHotspotId = -1; + _charTalkCount = -1; + _conversationCount = -1; + _prevShutUpFrame = -1; +} + +void Scene108::synchronize(Common::Serializer &s) { + Scene1xx::synchronize(s); + + s.syncAsByte(_anim0ActvFl); + s.syncAsByte(_handRaisedFl); + s.syncAsSint16LE(_shutUpCount); + s.syncAsSint16LE(_maxTalkCount); + s.syncAsSint16LE(_charAction); + s.syncAsSint16LE(_charFrame); + s.syncAsSint16LE(_charHotspotId); + s.syncAsSint16LE(_charTalkCount); + s.syncAsSint16LE(_conversationCount); + s.syncAsSint16LE(_prevShutUpFrame); +} + +void Scene108::setup() { + setPlayerSpritesPrefix(); + setAAName(); + + if (_globals[kCurrentYear] == 1993) + _scene->_variant = 1; + + _scene->addActiveVocab(NOUN_GENTLEMAN); + _scene->addActiveVocab(NOUN_CHARLES); +} + +void Scene108::enter() { + if (_scene->_priorSceneId != RETURNING_FROM_LOADING) { + _anim0ActvFl = false; + _handRaisedFl = false; + _charTalkCount = 0; + _shutUpCount = 40; + _maxTalkCount = 15; + } + + _vm->_gameConv->get(2); + + if (_globals[kCurrentYear] == 1993) { + _globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('z', -1)); + _scene->_hotspots.activate(NOUN_STOOL, false); + int idx = _scene->_dynamicHotspots.add(NOUN_STOOL, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(250, 68, 250 + 8, 68 + 21)); + _scene->_dynamicHotspots[idx]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(idx, Common::Point(253, 75), FACING_SOUTHEAST); + _scene->drawToBackground(_globals._spriteIndexes[0], 1, Common::Point(-32000, -32000), 0, 100); + } else { + _scene->_hotspots.activate(NOUN_HEADSET, false); + int idx = _scene->_dynamicHotspots.add(NOUN_WALL, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(258, 58, 258 + 6, 58 + 10)); + _scene->_dynamicHotspots[idx]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(idx, Common::Point(236, 69), FACING_NORTHEAST); + } + + if ((_globals[kCurrentYear] == 1993) && (_globals[kDoneBrieConv203] == 0)) { + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('c', 1), 1); + _anim0ActvFl = true; + + if (_vm->_gameConv->_running == 2) { + _globals[kWalkerConverse] = _vm->getRandomNumber(1, 4); + _charAction = 0; + _vm->_gameConv->run(2); + _vm->_gameConv->exportPointer(&_globals[kPlayerScore]); + _vm->_gameConv->exportValue(_globals[kJulieNameIsKnown]); + _vm->_gameConv->exportValue(_globals[kObservedPhan104]); + _scene->setAnimFrame(_globals._animationIndexes[0], 55); + _shutUpCount = 40; + } else { + _charAction = 2; + } + + if (_globals[kCharlesNameIsKnown]) { + _charHotspotId = _scene->_dynamicHotspots.add(NOUN_CHARLES, VERB_WALK_TO, SYNTAX_SINGULAR_MASC, EXT_NONE, Common::Rect(253, 52, 253 + 15, 52 + 34)); + _scene->_dynamicHotspots[_charHotspotId]._articleNumber = PREP_ON; + } else { + _charHotspotId = _scene->_dynamicHotspots.add(NOUN_GENTLEMAN, VERB_WALK_TO, SYNTAX_MASC_NOT_PROPER, EXT_NONE, Common::Rect(253, 52, 253 + 15, 52 + 34)); + _scene->_dynamicHotspots[_charHotspotId]._articleNumber = PREP_ON; + } + _scene->_dynamicHotspots.setPosition(_charHotspotId, Common::Point(235, 102), FACING_NORTHEAST); + } + + if (_scene->_priorSceneId == 106) { + _game._player._playerPos = Common::Point(48, 81); + _game._player._facing = FACING_SOUTHEAST; + _game._player.walk(Common::Point(71, 76), FACING_SOUTHEAST); + } else if ((_scene->_priorSceneId == 104) || (_scene->_priorSceneId != RETURNING_FROM_LOADING)) { + if (_game._player._playerPos.y > 128) { + _game._player._playerPos.x = 124; + _game._player._facing = FACING_NORTHEAST; + } else if (_game._player._playerPos.y > 99) { + _game._player._playerPos.x = 185; + _game._player._facing = FACING_NORTHEAST; + } else { + _game._player._playerPos.x = 243; + _game._player._facing = FACING_NORTHWEST; + } + + _game._player._playerPos.y = 143; + } + + sceneEntrySound(); +} + +void Scene108::step() { + if (_anim0ActvFl) + handleCharAnimation(); + + if ((_globals[kWalkerConverse] == 2) || (_globals[kWalkerConverse] == 3)) { + ++_conversationCount; + if (_conversationCount > 200) + _globals[kWalkerConverse] = _vm->getRandomNumber(1, 4); + } +} + +void Scene108::actions() { + if (_vm->_gameConv->_running == 2) { + handleCharlesConversation(); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_TALK_TO, NOUN_GENTLEMAN) || _action.isAction(VERB_TALK_TO, NOUN_CHARLES)) { + _charAction = 6; + _game._player._stepEnabled = false; + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_WALK_ONTO, NOUN_STAGE)) { + _scene->_nextSceneId = 104; + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_WALK, NOUN_BACKSTAGE)) { + _scene->_nextSceneId = 106; + _action._inProgress = false; + return; + } + + if (_action._lookFlag) { + _vm->_dialogs->show(10810); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_LOOK) || _action.isAction(VERB_LOOK_AT)) { + if (_action.isObject(NOUN_WALL)) { + _vm->_dialogs->show(10730); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_STAGE)) { + _vm->_dialogs->show(10811); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_IN_TWO)) { + _vm->_dialogs->show(10812); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_IN_ONE)) { + _vm->_dialogs->show(10813); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_PROSCENIUM_ARCH)) { + _vm->_dialogs->show(10814); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_ACT_CURTAIN)) { + _vm->_dialogs->show(10815); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_LEG)) { + _vm->_dialogs->show(10816); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_CYCLORAMA)) { + _vm->_dialogs->show(10817); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_FLATS)) { + _vm->_dialogs->show(10818); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_STAGEMANAGERS_POST)) { + if (_globals[kCurrentYear] == 1993) + _vm->_dialogs->show(10819); + else + _vm->_dialogs->show(10820); + + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_STOOL)) { + _vm->_dialogs->show(10821); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_BACKSTAGE)) { + _vm->_dialogs->show(10822); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_STAGE)) { + _vm->_dialogs->show(10823); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_HEADSET)) { + _vm->_dialogs->show(10824); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_WALL)) { + _vm->_dialogs->show(10826); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_CHARLES) || _action.isObject(NOUN_GENTLEMAN)) { + _vm->_dialogs->show(10827); + _action._inProgress = false; + return; + } + } + + if (_action.isAction(VERB_TAKE, NOUN_CHARLES) || _action.isAction(VERB_TAKE, NOUN_GENTLEMAN)) { + _vm->_dialogs->show(10828); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_TAKE, NOUN_HEADSET)) { + _vm->_dialogs->show(10825); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_TAKE, NOUN_STOOL) && (_globals[kCurrentYear] == 1993)) { + _vm->_dialogs->show(10829); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_TALK_TO, NOUN_HEADSET)) { + _vm->_dialogs->show(10830); + _action._inProgress = false; + return; + } +} + +void Scene108::preActions() { +} + +void Scene108::handleCharAnimation() { + if (_scene->_animation[_globals._animationIndexes[0]]->getCurrentFrame() == _charFrame) + return; + + _charFrame = _scene->_animation[_globals._animationIndexes[0]]->getCurrentFrame(); + int resetFrame = -1; + int random = -1; + + switch (_charFrame) { + case 1: + case 2: + case 3: + case 4: + case 92: + if (_charAction == 2) + random = _vm->getRandomNumber(2, 15); + + if (_charAction == 6) { + _charTalkCount = 0; + _charAction = 1; + random = 1; + } + + switch (random) { + case 1: + resetFrame = 5; + break; + + case 2: + resetFrame = 0; + break; + + case 3: + resetFrame = 1; + break; + + case 4: + resetFrame = 2; + break; + + default: + resetFrame = 3; + break; + } + break; + + case 18: + case 19: + case 20: + case 21: + case 27: + case 33: + case 41: + case 51: + case 52: + case 53: + case 54: + case 55: + case 56: + case 57: + case 62: + case 73: + if (_charFrame == 18) { + _game._player._stepEnabled = true; + _vm->_gameConv->run(2); + _vm->_gameConv->exportPointer(&_globals[kPlayerScore]); + _vm->_gameConv->exportValue(_globals[kJulieNameIsKnown]); + _vm->_gameConv->exportValue(_globals[kObservedPhan104]); + } + + if (_charAction == 1) { + if (_handRaisedFl) { + random = _vm->getRandomNumber(1, 3); + } else { + random = _vm->getRandomNumber(1, 4); + if (random == 4) + random = _vm->getRandomNumber(1, 4); + } + + if (random == 4) + _handRaisedFl = true; + + ++_charTalkCount; + if (_charTalkCount > _maxTalkCount) { + _charAction = 0; + _shutUpCount = 0; + _prevShutUpFrame = 10; + random = 12; + } + } else if (_charAction == 0) { + int delay = _vm->getRandomNumber(10, 15); + ++_shutUpCount; + if (_shutUpCount > delay) { + random = _vm->getRandomNumber(10, 16); + _prevShutUpFrame = random; + if (random == 15) + _shutUpCount = 16; + else + _shutUpCount = 0; + } else { + random = _prevShutUpFrame; + } + } else if (_charAction == 7) { + _charAction = 1; + random = 5; + } else if (_charAction == 3) { + _charAction = 1; + random = 6; + } else if (_charAction == 5) { + _charAction = 1; + random = 7; + } else if (_charAction == 4) { + _charAction = 1; + random = 8; + } else if (_charAction == 2) { + random = 9; + } + + switch (random) { + case 1: + resetFrame = 18; + break; + + case 2: + resetFrame = 19; + break; + + case 3: + resetFrame = 20; + break; + + case 4: + resetFrame = 62; + _charTalkCount += 5; + break; + + case 5: + resetFrame = 21; + break; + + case 6: + resetFrame = 41; + break; + + case 7: + resetFrame = 33; + break; + + case 8: + resetFrame = 27; + break; + + case 9: + resetFrame = 74; + break; + + case 10: + resetFrame = 51; + break; + + case 11: + resetFrame = 53; + break; + + case 12: + resetFrame = 54; + break; + + case 13: + resetFrame = 55; + break; + + case 14: + resetFrame = 56; + break; + + case 15: + resetFrame = 57; + break; + + case 16: + resetFrame = 52; + break; + + default: + break; + } + break; + + default: + break; + } + + if (resetFrame >= 0) { + _scene->setAnimFrame(_globals._animationIndexes[0], resetFrame); + _charFrame = resetFrame; + } +} + +void Scene108::handleCharlesConversation() { + switch (_action._activeAction._verbId) { + case 1: + case 25: + case 26: + _globals[kWalkerConverse] = 0; + _vm->_gameConv->setHeroTrigger(64); + if (_action._activeAction._verbId == 26) + _globals[kCharlesNameIsKnown] = 2; + break; + + case 2: + if (!_globals[kCharlesNameIsKnown]) { + _scene->_dynamicHotspots.remove(_charHotspotId); + _charHotspotId = _scene->_dynamicHotspots.add(NOUN_CHARLES, VERB_WALK_TO, SYNTAX_SINGULAR_MASC, EXT_NONE, Common::Rect(253, 52, 253 + 15, 52 + 34)); + _scene->_dynamicHotspots[_charHotspotId]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(_charHotspotId, Common::Point(235, 102), FACING_NORTHEAST); + _globals[kCharlesNameIsKnown] = true; + } + break; + + case 5: + _vm->_gameConv->setInterlocutorTrigger(66); + _maxTalkCount = 35; + break; + + case 6: + case 8: + case 9: + case 10: + case 11: + case 12: + case 15: + _maxTalkCount = 35; + break; + + case 16: + _vm->_gameConv->setInterlocutorTrigger(68); + _maxTalkCount = 35; + break; + + case 19: + _vm->_gameConv->setInterlocutorTrigger(72); + break; + + case 22: + _vm->_gameConv->setInterlocutorTrigger(70); + break; + + default: + _maxTalkCount = 15; + break; + } + + switch (_game._trigger) { + case 60: + _charAction = 1; + _globals[kWalkerConverse] = _vm->getRandomNumber(1, 4); + break; + + case 62: + _globals[kWalkerConverse] = _vm->getRandomNumber(2, 3); + _conversationCount = 0; + _charAction = 0; + break; + + case 64: + _charAction = 2; + break; + + case 66: + _charAction = 5; + break; + + case 68: + _charAction = 4; + break; + + case 70: + _charAction = 7; + break; + + case 72: + _charAction = 3; + break; + + default: + break; + } + + if ((_action._activeAction._verbId != 1) && (_action._activeAction._verbId != 5) && + (_action._activeAction._verbId != 16) && (_action._activeAction._verbId != 19) && + (_action._activeAction._verbId != 22) && (_action._activeAction._verbId != 25) && + (_action._activeAction._verbId != 26) && (_charAction != 2)) { + _vm->_gameConv->setInterlocutorTrigger(60); + _vm->_gameConv->setHeroTrigger(62); + } + + _charTalkCount = 0; + _shutUpCount = 40; + _handRaisedFl = false; +} + +/*------------------------------------------------------------------------*/ + +Scene109::Scene109(MADSEngine *vm) : Scene1xx(vm) { + _anim0ActvFl = false; + _anim1ActvFl = false; + _anim2ActvFl = false; + _anim3ActvFl = false; +} + +void Scene109::synchronize(Common::Serializer &s) { + Scene1xx::synchronize(s); + + s.syncAsByte(_anim0ActvFl); + s.syncAsByte(_anim1ActvFl); + s.syncAsByte(_anim2ActvFl); + s.syncAsByte(_anim3ActvFl); +} + +void Scene109::setup() { + setPlayerSpritesPrefix(); + setAAName(); +} + +void Scene109::enter() { + _anim0ActvFl = false; + _anim1ActvFl = false; + _anim2ActvFl = false; + _anim3ActvFl = false; + + _globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('x', 0)); + _globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('x', 2)); + _globals._spriteIndexes[8] = _scene->_sprites.addSprites("*RDR_6"); + + if (_globals[kCurrentYear] == 1881) { + _globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('x', 1)); + _globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('x', 3)); + _globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('x', 4)); + + _scene->_hotspots.activate(NOUN_LIGHT_FIXTURE, false); + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 14); + _globals._sequenceIndexes[3] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[3], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[3], 14); + _globals._sequenceIndexes[4] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[4], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[4], 14); + _scene->_sequences.addTimer(1, 70); + } else { + _globals._spriteIndexes[5] = _scene->_sprites.addSprites(formAnimName('z', 0)); + _globals._spriteIndexes[6] = _scene->_sprites.addSprites(formAnimName('z', 1)); + _globals._spriteIndexes[7] = _scene->_sprites.addSprites(formAnimName('z', 2)); + + _scene->_hotspots.activate(NOUN_LAMP, false); + _globals._sequenceIndexes[5] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[5], false, 1); + _globals._sequenceIndexes[6] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[6], false, 1); + _globals._sequenceIndexes[7] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[7], false, 1); + } + + if (_scene->_priorSceneId == 106) { + _game._player._playerPos = Common::Point(31, 459); + _game._player._facing = FACING_NORTHEAST; + _scene->setCamera(Common::Point(0, 312)); + _scene->sceneScale(467, 95, 442, 78); + _currentFloor = 1; + } else if (_scene->_priorSceneId == 111) { + if (_globals[kLeaveAngelMusicOn]) { + _globals[kLeaveAngelMusicOn] = false; + sceneEntrySound(); + } + _game._player._playerPos = Common::Point(4, 136); + _game._player._facing = FACING_EAST; + _game._player.walk(Common::Point(32, 138), FACING_EAST); + _game._player.setWalkTrigger(60); + _game._player._stepEnabled = false; + _scene->setCamera(Common::Point(0, 0)); + _scene->sceneScale(155, 95, 130, 78); + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, 3); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); + _currentFloor = 3; + } else if ((_scene->_priorSceneId == 110) || (_scene->_priorSceneId != RETURNING_FROM_LOADING)) { + _game._player._playerPos = Common::Point(3, 292); + _game._player._facing = FACING_EAST; + _game._player.walk(Common::Point(31, 295), FACING_EAST); + _game._player.setWalkTrigger(65); + _game._player._stepEnabled = false; + _scene->setCamera(Common::Point(0, 156)); + _scene->sceneScale(311, 95, 286, 78); + _globals._sequenceIndexes[1] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[1], false, 3); + _scene->_sequences.setDepth(_globals._sequenceIndexes[1], 14); + _currentFloor = 2; + } else if (_scene->_priorSceneId == RETURNING_FROM_LOADING) { + if (_currentFloor == 2) { + _scene->setCamera(Common::Point(0, 156)); + _scene->sceneScale(311, 95, 286, 78); + } else if (_currentFloor == 3) { + _scene->setCamera(Common::Point(0, 0)); + _scene->sceneScale(155, 95, 130, 78); + } else { + _scene->setCamera(Common::Point(0, 312)); + _scene->sceneScale(467, 95, 442, 78); + } + } + + sceneEntrySound(); +} + +void Scene109::step() { + if (_anim0ActvFl) { + if (_scene->_animation[_globals._animationIndexes[0]]->getCurrentFrame() == 80) + _game.camPanTo(&_game._camY, 156); + } + + if (_anim1ActvFl) { + if (_scene->_animation[_globals._animationIndexes[1]]->getCurrentFrame() == 80) + _game.camPanTo(&_game._camY, 0); + } + + if (_anim2ActvFl) { + if (_scene->_animation[_globals._animationIndexes[2]]->getCurrentFrame() == 7) + _game.camPanTo(&_game._camY, 312); + } + + if (_anim3ActvFl) { + if (_scene->_animation[_globals._animationIndexes[3]]->getCurrentFrame() == 14) + _game.camPanTo(&_game._camY, 156); + } + + switch (_game._trigger) { + case 60: + _scene->deleteSequence(_globals._sequenceIndexes[0]); + _globals._sequenceIndexes[0] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[0], false, 8, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[0], 1, 3); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_EXPIRE, 0, 61); + break; + + case 61: + _vm->_sound->command(25); + _game._player._stepEnabled = true; + break; + + default: + break; + } + + switch (_game._trigger) { + case 65: + _scene->deleteSequence(_globals._sequenceIndexes[1]); + _globals._sequenceIndexes[1] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[1], false, 8, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[1], 14); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[1], 1, 3); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 66); + break; + + case 66: + _vm->_sound->command(25); + _game._player._stepEnabled = true; + break; + + default: + break; + } + + if (_game._trigger == 70) { + int rndFrame = _vm->getRandomNumber(1, 3); + int rndDelay = _vm->getRandomNumber(4, 7); + _scene->deleteSequence(_globals._sequenceIndexes[2]); + _scene->deleteSequence(_globals._sequenceIndexes[3]); + _scene->deleteSequence(_globals._sequenceIndexes[4]); + + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, rndFrame); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 14); + + _globals._sequenceIndexes[3] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[3], false, rndFrame); + _scene->_sequences.setDepth(_globals._sequenceIndexes[3], 14); + + _globals._sequenceIndexes[4] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[4], false, rndFrame); + _scene->_sequences.setDepth(_globals._sequenceIndexes[4], 14); + + _scene->_sequences.addTimer(rndDelay, 70); + } +} + +void Scene109::actions() { + if (_action.isAction(VERB_WALK, NOUN_BACKSTAGE)) { + _scene->_nextSceneId = 106; + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_CLIMB_UP, NOUN_STAIRCASE)) { + if (_currentFloor == 2) { + switch (_game._trigger) { + case 0: + _game._player.walk(Common::Point(58, 295), FACING_EAST); + _game._player.setWalkTrigger(1); + break; + + case 1: + _anim1ActvFl = true; + _game._player._stepEnabled = false; + _game._player._visible = false; + _globals._animationIndexes[1] = _scene->loadAnimation(formAnimName('w', 2), 2); + _game.syncTimers(SYNC_ANIM, _globals._animationIndexes[1], SYNC_PLAYER, 0); + break; + + case 2: + _game.syncTimers(SYNC_PLAYER, 0, SYNC_ANIM, _globals._animationIndexes[1]); + _scene->sceneScale(155, 95, 130, 78); + _anim1ActvFl = false; + _game._player._visible = true; + _game._player._playerPos = Common::Point(261, 137); + _game._player.walk(Common::Point(281, 143), FACING_SOUTHWEST); + _game._player.setWalkTrigger(3); + break; + + case 3: + _game._player._stepEnabled = true; + _currentFloor = 3; + break; + + default: + break; + } + } else if (_currentFloor == 1) { + switch (_game._trigger) { + case 0: + _game._player.walk(Common::Point(58, 452), FACING_EAST); + _game._player.setWalkTrigger(1); + break; + + case 1: + _anim0ActvFl = true; + _game._player._stepEnabled = false; + _game._player._visible = false; + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('w', 1), 2); + _game.syncTimers(SYNC_ANIM, _globals._animationIndexes[0], SYNC_PLAYER, 0); + break; + + case 2: + _game.syncTimers(SYNC_PLAYER, 0, SYNC_ANIM, _globals._animationIndexes[0]); + _scene->sceneScale(311, 95, 286, 78); + _anim0ActvFl = false; + _game._player._visible = true; + _game._player._playerPos = Common::Point(264, 295); + _game._player.walk(Common::Point(289, 299), FACING_SOUTHWEST); + _game._player.setWalkTrigger(3); + break; + + case 3: + _game._player._stepEnabled = true; + _currentFloor = 2; + break; + + default: + break; + } + } + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_CLIMB_DOWN, NOUN_STAIRCASE)) { + if (_currentFloor == 2) { + switch (_game._trigger) { + case 0: + _game._player.walk(Common::Point(287, 291), FACING_WEST); + _game._player.setWalkTrigger(1); + break; + + case 1: + _game._player.walk(Common::Point(269, 292), FACING_WEST); + _game._player.setWalkTrigger(2); + break; + + case 2: + _anim2ActvFl = true; + _game._player._stepEnabled = false; + _game._player._visible = false; + _globals._animationIndexes[2] = _scene->loadAnimation(formAnimName('w', 3), 3); + _game.syncTimers(SYNC_ANIM, _globals._animationIndexes[2], SYNC_PLAYER, 0); + break; + + case 3: + _game.syncTimers(SYNC_PLAYER, 0, SYNC_ANIM, _globals._animationIndexes[2]); + _scene->sceneScale(467, 95, 442, 78); + _anim2ActvFl = false; + _game._player._visible = true; + _game._player._playerPos = Common::Point(61, 450); + _game._player.walk(Common::Point(36, 450), FACING_SOUTHEAST); + _game._player.setWalkTrigger(4); + break; + + case 4: + _game._player._stepEnabled = true; + _currentFloor = 1; + break; + + default: + break; + } + } else if (_currentFloor == 3) { + switch (_game._trigger) { + case 0: + _game._player.walk(Common::Point(287, 137), FACING_WEST); + _game._player.setWalkTrigger(1); + break; + + case 1: + _game._player.walk(Common::Point(269, 138), FACING_WEST); + _game._player.setWalkTrigger(2); + break; + + case 2: + _anim3ActvFl = true; + _game._player._stepEnabled = false; + _game._player._visible = false; + _globals._animationIndexes[3] = _scene->loadAnimation(formAnimName('w', 4), 3); + _game.syncTimers(SYNC_ANIM, _globals._animationIndexes[3], SYNC_PLAYER, 0); + break; + + case 3: + _game.syncTimers(SYNC_PLAYER, 0, SYNC_ANIM, _globals._animationIndexes[3]); + _scene->sceneScale(311, 95, 286, 78); + _anim3ActvFl = false; + _game._player._visible = true; + _game._player._playerPos = Common::Point(59, 296); + _game._player.walk(Common::Point(40, 294), FACING_SOUTHEAST); + _game._player.setWalkTrigger(4); + break; + + case 4: + _game._player._stepEnabled = true; + _currentFloor = 2; + break; + + default: + break; + } + } + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_WALK_THROUGH, NOUN_DOOR) || _action.isAction(VERB_OPEN, NOUN_DOOR) || _game._trigger) { + switch (_game._trigger) { + case (0): + _game._player._stepEnabled = false; + _game._player._visible = false; + _globals._sequenceIndexes[8] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[8], true, 5, 2); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[8], -1, -2); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[8], true); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_EXPIRE, 0, 2); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_SPRITE, 4, 75); + break; + + case 2: + _game._player._visible = true; + _game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[8]); + if (_currentFloor == 3) + _game._player.walk(Common::Point(2, 131), FACING_WEST); + else if (_currentFloor == 2) + _game._player.walk(Common::Point(2, 281), FACING_WEST); + + _scene->_sequences.addTimer(180, 3); + break; + + case 3: + if (_currentFloor == 3) + _scene->_nextSceneId = 111; + else if (_currentFloor == 2) + _scene->_nextSceneId = 110; + break; + + case 75: + _vm->_sound->command(24); + if (_currentFloor == 3) { + _globals._sequenceIndexes[0] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[0], false, 8, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[0], 1, 3); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_EXPIRE, 0, 76); + } else if (_currentFloor == 2) { + _globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 8, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[1], 14); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[1], 1, 3); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 76); + } + break; + + case 76: + if (_currentFloor == 3) { + int idx = _globals._sequenceIndexes[0]; + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, 3); + _game.syncTimers(SYNC_SEQ, _globals._sequenceIndexes[0], SYNC_SEQ, idx); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); + } else if (_currentFloor == 2) { + int idx = _globals._sequenceIndexes[1]; + _globals._sequenceIndexes[1] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[1], false, 3); + _game.syncTimers(SYNC_SEQ, _globals._sequenceIndexes[1], SYNC_SEQ, idx); + _scene->_sequences.setDepth(_globals._sequenceIndexes[1], 14); + } + break; + + default: + break; + } + _action._inProgress = false; + return; + } + + if (_action._lookFlag) { + _vm->_dialogs->show(10910); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_LOOK) || _action.isAction(VERB_LOOK_AT)) { + if (_action.isObject(NOUN_STAIRCASE)) { + if (_currentFloor == 1) + _vm->_dialogs->show(10911); + else if (_currentFloor == 2) + _vm->_dialogs->show(10921); + else if (_currentFloor == 3) + _vm->_dialogs->show(10922); + + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_FLOOR)) { + _vm->_dialogs->show(10912); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_BACKSTAGE)) { + _vm->_dialogs->show(10913); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_DOOR)) { + _vm->_dialogs->show(10914); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_RAILING)) { + _vm->_dialogs->show(10915); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_WALL)) { + _vm->_dialogs->show(10916); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_LIGHT_FIXTURE)) { + _vm->_dialogs->show(10917); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_LAMP)) { + _vm->_dialogs->show(10918); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_HOLE)) { + _vm->_dialogs->show(10919); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_CEILING)) { + _vm->_dialogs->show(10920); + _action._inProgress = false; + return; + } + } + + if (_action.isAction(VERB_TAKE, NOUN_LAMP)) { + _vm->_dialogs->show(10924); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_CLOSE, NOUN_DOOR)) { + _vm->_dialogs->show(10923); + _action._inProgress = false; + return; + } +} + +void Scene109::preActions() { + if (_action.isAction(VERB_OPEN, NOUN_DOOR)) { + if (_currentFloor == 3) + _game._player.walk(Common::Point(32, 138), FACING_WEST); + else if (_currentFloor == 2) + _game._player.walk(Common::Point(31, 295), FACING_WEST); + } +} + +/*------------------------------------------------------------------------*/ + +Scene110::Scene110(MADSEngine *vm) : Scene1xx(vm) { +} + +void Scene110::synchronize(Common::Serializer &s) { + Scene1xx::synchronize(s); +} + +void Scene110::setup() { + if (_globals[kCurrentYear] == 1993) + _scene->_variant = 1; + + setPlayerSpritesPrefix(); + setAAName(); +} + +void Scene110::enter() { + _globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('x', 0)); + _globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('x', 1)); + _globals._spriteIndexes[1] = _scene->_sprites.addSprites("*RDR_9"); + + if (_globals[kCurrentYear] == 1993) { + _globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('z', -1)); + _scene->drawToBackground(_globals._spriteIndexes[0], 1, Common::Point(-32000, -32000), 0, 100); + _scene->_hotspots.activate(NOUN_POSTER, false); + _scene->_hotspots.activate(NOUN_WASTE_BASKET, false); + + if (_globals[kDoneBrieConv203] == 0) { + if (_globals[kJuliesDoor] == 0) { + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 3); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 8); + } + } else { + _globals._sequenceIndexes[3] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[3], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[3], 8); + } + } else { + _scene->_hotspots.activate(NOUN_BULLETIN_BOARD, false); + _scene->_hotspots.activate(NOUN_PAPER, false); + _scene->_hotspots.activate(NOUN_TRASH_BUCKET, false); + } + + if (_scene->_priorSceneId == 112) { + _game._player._playerPos = Common::Point(261, 121); + _game._player._facing = FACING_SOUTH; + _game._player.walk(Common::Point(221, 131), FACING_SOUTH); + } else if ((_scene->_priorSceneId == 109) || (_scene->_priorSceneId != RETURNING_FROM_LOADING)) { + _game._player.firstWalk(Common::Point(335, 150), FACING_WEST, Common::Point(310, 150), FACING_WEST, true); + } + + sceneEntrySound(); +} + +void Scene110::step() { +} + +void Scene110::actions() { + if ((_action.isAction(VERB_WALK_THROUGH, NOUN_RIGHT_DOOR) || _action.isAction(VERB_UNLOCK, NOUN_RIGHT_DOOR) || _action.isAction(VERB_LOCK, NOUN_RIGHT_DOOR)) + && (_globals[kDoneBrieConv203] == 0) && (_globals[kCurrentYear] == 1993) && (_globals[kJuliesDoor] == 0)) { + _scene->_nextSceneId = 112; + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_WALK_THROUGH, NOUN_LEFT_DOOR) || _action.isAction(VERB_OPEN, NOUN_LEFT_DOOR) + || _action.isAction(VERB_UNLOCK, NOUN_LEFT_DOOR) || _action.isAction(VERB_LOCK, NOUN_LEFT_DOOR)) { + switch (_game._trigger) { + case (0): + _game._player._stepEnabled = false; + _game._player._visible = false; + _globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 5, 1); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[1], 1, 4); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[1], true); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1); + break; + + case 1: { + int idx = _globals._sequenceIndexes[1]; + _globals._sequenceIndexes[1] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[1], false, 4); + _game.syncTimers(SYNC_SEQ, _globals._sequenceIndexes[1], SYNC_SEQ, idx); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[1], false); + _scene->_sequences.addTimer(30, 2); + _vm->_sound->command(73); + } + break; + + case 2: + _scene->deleteSequence(_globals._sequenceIndexes[1]); + _globals._sequenceIndexes[1] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[1], false, 5, 1); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[1], 1, 4); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[1], false); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 3); + break; + + case 3: + _game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[1]); + _game._player._visible = true; + _game._player._stepEnabled = true; + if (_action.isAction(VERB_LOCK) || _action.isAction(VERB_UNLOCK)) + _vm->_dialogs->show(32); + else + _vm->_dialogs->show(11022); + + break; + + default: + break; + } + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_WALK_THROUGH, NOUN_RIGHT_DOOR) || _action.isAction(VERB_OPEN, NOUN_RIGHT_DOOR) + || _action.isAction(VERB_UNLOCK, NOUN_RIGHT_DOOR) || _action.isAction(VERB_LOCK, NOUN_RIGHT_DOOR)) { + if ((_globals[kCurrentYear] == 1881) || (_globals[kDoneBrieConv203] >= 1) + && !_action.isAction(VERB_UNLOCK, NOUN_RIGHT_DOOR) && !_action.isAction(VERB_LOCK, NOUN_RIGHT_DOOR)) { + switch (_game._trigger) { + case (0): + _game._player._stepEnabled = false; + _game._player._visible = false; + _globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 5, 1); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[1], 1, 4); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[1], true); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1); + break; + + case 1: { + int idx = _globals._sequenceIndexes[1]; + _globals._sequenceIndexes[1] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[1], false, 4); + _game.syncTimers(SYNC_SEQ, _globals._sequenceIndexes[1], SYNC_SEQ, idx); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[1], false); + _scene->_sequences.addTimer(30, 2); + _vm->_sound->command(73); + } + break; + + case 2: + _scene->deleteSequence(_globals._sequenceIndexes[1]); + _globals._sequenceIndexes[1] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[1], false, 5, 1); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[1], 1, 4); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[1], false); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 3); + break; + + case 3: + _game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[1]); + _game._player._visible = true; + _game._player._stepEnabled = true; + if (_action.isAction(VERB_LOCK) || _action.isAction(VERB_UNLOCK)) + _vm->_dialogs->show(32); + else + _vm->_dialogs->show(11023); + break; + + default: + break; + } + _action._inProgress = false; + return; + } else if (_globals[kJuliesDoor] == 1) { + switch (_game._trigger) { + case (0): + _game._player._stepEnabled = false; + _game._player._visible = false; + _globals._sequenceIndexes[1] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[1], false, 7, 2); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[1], 1, 4); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[1], true); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_SPRITE, 4, 1); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 3); + break; + + case 1: + _vm->_sound->command(24); + _globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 10, 1); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], -1, -2); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 10); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2); + break; + + case 2: + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 3); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 10); + break; + + case 3: + _game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[1]); + _game._player._visible = true; + _game._player.walk(Common::Point(261, 121), FACING_NORTHEAST); + _game._player.setWalkTrigger(4); + break; + + case 4: + _scene->_nextSceneId = 112; + _globals[kJuliesDoor] = 0; + break; + + default: + break; + } + _action._inProgress = false; + return; + } + } + + if (_action._lookFlag) { + _vm->_dialogs->show(11010); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_LOOK) || _action.isAction(VERB_LOOK_AT)) { + if (_action.isObject(NOUN_FLOOR)) { + _vm->_dialogs->show(11011); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_WALL)) { + _vm->_dialogs->show(11012); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_CEILING)) { + _vm->_dialogs->show(11013); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_STAIRWELL)) { + _vm->_dialogs->show(11014); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_RIGHT_DOOR)) { + if (_globals[kDoneBrieConv203] >= 1) + _vm->_dialogs->show(11016); + else if (_globals[kChrisFStatus] == 1) + _vm->_dialogs->show(11015); + else + _vm->_dialogs->show(11016); + + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_LEFT_DOOR)) { + _vm->_dialogs->show(11016); + _action._inProgress = false; + return; + } + + if ((_action.isObject(NOUN_WASTE_BASKET)) || (_action.isObject(NOUN_TRASH_BUCKET))) { + _vm->_dialogs->show(11017); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_POSTER)) { + _vm->_dialogs->show(11018); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_BULLETIN_BOARD)) { + _vm->_dialogs->show(11019); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_PAPER)) { + _vm->_dialogs->show(11029); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_TAKE, NOUN_WASTE_BASKET) || _action.isAction(VERB_TAKE, NOUN_TRASH_BUCKET)) { + _vm->_dialogs->show(11020); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_LIGHT_FIXTURE)) { + if (_globals[kCurrentYear] == 1993) + _vm->_dialogs->show(11021); + else + _vm->_dialogs->show(11028); + + _action._inProgress = false; + return; + } + } + + if (_action.isAction(VERB_TAKE, NOUN_PAPER)) { + _vm->_dialogs->show(11030); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_CLOSE, NOUN_RIGHT_DOOR)) { + if (_globals[kDoneBrieConv203] >= 1) + _vm->_dialogs->show(11026); + else if (_globals[kChrisFStatus] == 1) + _vm->_dialogs->show(11024); + else + _vm->_dialogs->show(11026); + + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_CLOSE, NOUN_LEFT_DOOR)) { + _vm->_dialogs->show(11025); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_OPEN, NOUN_RIGHT_DOOR)) { + if ((_globals[kChrisFStatus] == 1) && (_globals[kDoneBrieConv203] == 0)) + _vm->_dialogs->show(11027); + + _action._inProgress = false; + return; + } +} + +void Scene110::preActions() { + if (_action.isAction(VERB_EXIT_TO, NOUN_STAIRWELL)) + _game._player._walkOffScreenSceneId = 109; + + if (_action.isAction(VERB_OPEN, NOUN_LEFT_DOOR) || _action.isAction(VERB_UNLOCK, NOUN_LEFT_DOOR) || _action.isAction(VERB_LOCK, NOUN_LEFT_DOOR)) + _game._player.walk(Common::Point(111, 126), FACING_NORTHEAST); + + if (_action.isAction(VERB_OPEN, NOUN_RIGHT_DOOR) || _action.isAction(VERB_WALK_THROUGH, NOUN_RIGHT_DOOR) + || _action.isAction(VERB_UNLOCK, NOUN_RIGHT_DOOR) || _action.isAction(VERB_LOCK, NOUN_RIGHT_DOOR)) { + if ((_globals[kCurrentYear] == 1881) || (_globals[kDoneBrieConv203] >= 1)) + _game._player.walk(Common::Point(221, 131), FACING_NORTHEAST); + else if ((_globals[kJuliesDoor] == 1) || _action.isAction(VERB_OPEN)) + _game._player.walk(Common::Point(223, 128), FACING_NORTHEAST); + else if (_globals[kJuliesDoor] == 0) + _game._player.walk(Common::Point(261, 120), FACING_NORTHEAST); + } + + if (_action.isAction(VERB_LOOK, NOUN_PAPER)) + _game._player._needToWalk = true; +} + +/*------------------------------------------------------------------------*/ + +Scene111::Scene111(MADSEngine *vm) : Scene1xx(vm) { + _removeAxe = false; + _anim0ActvFl = false; + _anim1ActvFl = false; + _closedFl = false; + _listenFrame = -1; + _listenStatus = -1; + +} + +void Scene111::synchronize(Common::Serializer &s) { + Scene1xx::synchronize(s); + + s.syncAsByte(_removeAxe); + s.syncAsByte(_anim0ActvFl); + s.syncAsByte(_anim1ActvFl); + s.syncAsByte(_closedFl); + s.syncAsSint16LE(_listenFrame); + s.syncAsSint16LE(_listenStatus); +} + +void Scene111::setup() { + if (_globals[kCurrentYear] == 1993) + _scene->_variant = 1; + + setPlayerSpritesPrefix(); + setAAName(); +} + +void Scene111::enter() { + _scene->_hotspots.activate(NOUN_HOOK, false); + + _removeAxe = false; + _anim0ActvFl = false; + _anim1ActvFl = false; + _closedFl = true; + + if (_globals[kCurrentYear] == 1881) { + if ((_globals[kJacquesNameIsKnown] == 2) && (_globals[kMadameNameIsKnown] == 2) && (_globals[kPanelIn206]) && + (_globals[kDoneRichConv203]) && (_game._objects.isInInventory(OBJ_LANTERN)) && + ((_game._objects.isInInventory(OBJ_CABLE_HOOK) && _game._objects.isInInventory(OBJ_ROPE)) || _game._objects.isInInventory(OBJ_ROPE_WITH_HOOK))) { + _closedFl = false; + } else + _closedFl = true; + } else + _closedFl = false; + + if (_globals[kJacquesStatus]) { + _scene->_hotspots.activate(NOUN_HOOK, true); + _scene->_hotspots.activate(NOUN_FIRE_AXE, false); + } + + _vm->_gameConv->get(14); + + _globals._spriteIndexes[0] = _scene->_sprites.addSprites("*RDR_9"); + _globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('a', 1)); + _globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('a', 3)); + _globals._spriteIndexes[5] = _scene->_sprites.addSprites(formAnimName('x', 0)); + + if (_globals[kCurrentYear] == 1881) + _globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('a', 2)); + + if (_globals[kCurrentYear] == 1993) { + _globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('z', -1)); + _scene->drawToBackground(_globals._spriteIndexes[1], 1, Common::Point(-32000, -32000), 0, 100); + _scene->_hotspots.activate(NOUN_LAMP, false); + int idx = _scene->_dynamicHotspots.add(NOUN_WALL, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(35, 82, 35 + 13, 82 + 11)); + _scene->_dynamicHotspots.setPosition(idx, Common::Point(78, 122), FACING_NORTHEAST); + } else { + _scene->_hotspots.activate(NOUN_LIGHT, false); + if (_globals[kChristineDoorStatus] == 2) { + _globals._sequenceIndexes[3] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[3], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[3], 10); + _scene->drawToBackground(_globals._spriteIndexes[4], 1, Common::Point(-32000, -32000), 0, 100); + _scene->_hotspots.activate(NOUN_FIRE_AXE, false); + _scene->_hotspots.activate(NOUN_DOOR_CHUNKS, true); + _scene->_hotspots.activate(NOUN_HANDLE, true); + _scene->_hotspots.activate(NOUN_AXE, true); + } + } + + if ((_globals[kChristineDoorStatus] == 0) && (_scene->_priorSceneId != 113) && !_closedFl) { + _globals._sequenceIndexes[5] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[5], false, 3); + _scene->_sequences.setDepth(_globals._sequenceIndexes[5], 14); + } + + if ((_globals[kCurrentYear] == 1993) || (_globals[kChristineDoorStatus] <= 1)) { + if (!_globals[kJacquesStatus]) { + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 5); + _scene->_hotspots.activate(NOUN_AXE, false); + } + _scene->_hotspots.activate(NOUN_DOOR_CHUNKS, false); + _scene->_hotspots.activate(NOUN_HANDLE, false); + } + + if (_scene->_priorSceneId == 113) { + _game._player._playerPos = Common::Point(146, 108); + _game._player.walk(Common::Point(112, 126), FACING_SOUTH); + + if (!_globals[kLeaveAngelMusicOn]) + sceneEntrySound(); + + if (_globals[kChristineDoorStatus] != 2) { + _globals._sequenceIndexes[5] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[5], false, 3); + _scene->_sequences.setDepth(_globals._sequenceIndexes[5], 14); + + if ((_globals[kCurrentYear] == 1881) && (_globals[kLeaveAngelMusicOn])) { + _game._player.setWalkTrigger(60); + _game._player._stepEnabled = false; + _globals[kChristineDoorStatus] = 1; + _globals[kChrisKickedRaoulOut] = true; + _globals[kHintThatDaaeIsHome1] = true; + _globals[kHintThatDaaeIsHome2] = true; + } + } + } else if ((_scene->_priorSceneId == 109) || (_scene->_priorSceneId != RETURNING_FROM_LOADING)) + _game._player.firstWalk(Common::Point(335, 150), FACING_WEST, Common::Point(311, 150), FACING_WEST, true); + + sceneEntrySound(); +} + +void Scene111::step() { + if (_anim0ActvFl) + handleListenAnimation(); + + if (!_removeAxe && _anim1ActvFl && (_scene->_animation[_globals._animationIndexes[1]]->getCurrentFrame() == 5)) { + _scene->deleteSequence(_globals._sequenceIndexes[2]); + _game._objects.addToInventory(OBJ_FIRE_AXE); + _removeAxe = true; + } + + if (_game._objects.isInInventory(OBJ_FIRE_AXE) && _anim1ActvFl && (_scene->_animation[_globals._animationIndexes[1]]->getCurrentFrame() == 36)) + _game._objects.setRoom(OBJ_FIRE_AXE, NOWHERE); + + if (_game._player._playerPos == Common::Point(145, 108)) + _scene->_nextSceneId = 113; + + switch (_game._trigger) { + case 60: + _scene->deleteSequence(_globals._sequenceIndexes[5]); + _globals._sequenceIndexes[5] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[5], false, 7, 1); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_EXPIRE, 0, 62); + _scene->_sequences.setDepth(_globals._sequenceIndexes[5], 14); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[5], -1, -2); + break; + + case 62: + _vm->_sound->command(25); + _game._player._stepEnabled = true; + _vm->_gameConv->run(14); + if (_game._difficulty == DIFFICULTY_EASY) + _vm->_gameConv->exportValue(1); + else + _vm->_gameConv->exportValue(0); + + _game._player.walk(Common::Point(119, 124), FACING_EAST); + _game._player.setWalkTrigger(64); + break; + + case 64: + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('l', 1), 70); + _game.syncTimers(SYNC_ANIM, _globals._animationIndexes[0], SYNC_PLAYER, 0); + _anim0ActvFl = true; + _listenStatus = 0; + _game._player._visible = false; + break; + + case 70: + _game._player._visible = true; + _anim0ActvFl = false; + _game.syncTimers(SYNC_PLAYER, 0, SYNC_ANIM, _globals._animationIndexes[0]); + _scene->_sequences.addTimer(30, 71); + break; + + case 71: + _vm->_gameConv->release(); + break; + + default: + break; + } +} + +void Scene111::actions() { + if (_vm->_gameConv->_running == 14) { + handleListenConversation(); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_WALK_THROUGH, NOUN_RIGHT_DOOR) || _action.isAction(VERB_OPEN, NOUN_RIGHT_DOOR) || _action.isAction(VERB_UNLOCK) || _action.isAction(VERB_LOCK)) { + switch (_game._trigger) { + case (0): + _game._player._stepEnabled = false; + _game._player._visible = false; + _globals._sequenceIndexes[0] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[0], false, 5, 1); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[0], 1, 4); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[0], true); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_EXPIRE, 0, 1); + _action._inProgress = false; + return; + + case 1: { + int idx = _globals._sequenceIndexes[0]; + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, 4); + _game.syncTimers(SYNC_SEQ, _globals._sequenceIndexes[0], SYNC_SEQ, idx); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[0], false); + _scene->_sequences.addTimer(30, 2); + _vm->_sound->command(73); + _action._inProgress = false; + return; + } + + case 2: + _scene->deleteSequence(_globals._sequenceIndexes[0]); + _globals._sequenceIndexes[0] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[0], false, 5, 1); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[0], 1, 4); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[0], false); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_EXPIRE, 0, 3); + _action._inProgress = false; + return; + + case 3: + _game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[0]); + _game._player._visible = true; + if (_action.isAction(VERB_LOCK) || _action.isAction(VERB_UNLOCK)) + _vm->_dialogs->show(32); + else + _vm->_dialogs->show(11123); + + _game._player._stepEnabled = true; + _action._inProgress = false; + return; + + default: + break; + } + } + + if (_action.isAction(VERB_WALK_THROUGH, NOUN_LEFT_DOOR) || _action.isAction(VERB_OPEN, NOUN_LEFT_DOOR) || _action.isAction(VERB_UNLOCK, NOUN_LEFT_DOOR) || _action.isAction(VERB_LOCK, NOUN_LEFT_DOOR)) { + if ((_globals[kChristineDoorStatus] == 1) || _closedFl || _action.isAction(VERB_UNLOCK, NOUN_LEFT_DOOR) || _action.isAction(VERB_LOCK, NOUN_LEFT_DOOR)) { + switch (_game._trigger) { + case (0): + _game._player._stepEnabled = false; + _game._player._visible = false; + _globals._sequenceIndexes[0] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[0], false, 5, 1); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[0], 1, 4); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[0], true); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_EXPIRE, 0, 1); + _action._inProgress = false; + return; + + case 1: { + int idx = _globals._sequenceIndexes[0]; + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, 4); + _game.syncTimers(SYNC_SEQ, _globals._sequenceIndexes[0], SYNC_SEQ, idx); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[0], false); + _scene->_sequences.addTimer(30, 2); + _vm->_sound->command(73); + _action._inProgress = false; + return; + } + + case 2: + _scene->deleteSequence(_globals._sequenceIndexes[0]); + _globals._sequenceIndexes[0] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[0], false, 5, 1); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[0], 1, 4); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[0], false); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_EXPIRE, 0, 3); + _action._inProgress = false; + return; + + case 3: + _game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[0]); + _game._player._visible = true; + + if (_action.isAction(VERB_LOCK) || _action.isAction(VERB_UNLOCK)) + _vm->_dialogs->show(32); + else if ((_globals[kChrisKickedRaoulOut]) && (_globals[kTicketPeoplePresent] == 1) && (_globals[kJacquesStatus] == 0)) + _vm->_dialogs->show(11135); + else + _vm->_dialogs->show(11124); + + _game._player._stepEnabled = true; + _action._inProgress = false; + return; + + default: + break; + } + } else if (_globals[kChristineDoorStatus] == 2) { + _vm->_dialogs->show(11137); + _action._inProgress = false; + return; + } else { + _vm->_dialogs->show(11126); + _action._inProgress = false; + return; + } + } + + if (_action.isAction(VERB_TAKE, NOUN_FIRE_AXE)) { + if ((_globals[kCurrentYear] == 1881) && (_globals[kJacquesStatus] == 0) && (_globals[kChristineDoorStatus] == 1) && (_globals[kChrisKickedRaoulOut])) { + switch (_game._trigger) { + case 0: + _globals._animationIndexes[1] = _scene->loadAnimation(formAnimName('q', -1), 1); + _scene->_hotspots.activate(NOUN_FIRE_AXE, false); + _scene->_hotspots.activate(NOUN_DOOR_CHUNKS, true); + _scene->_hotspots.activate(NOUN_HANDLE, true); + _scene->_hotspots.activate(NOUN_AXE, true); + _anim1ActvFl = true; + _game._player._stepEnabled = false; + _game._player._visible = false; + break; + + case 1: + _globals[kChristineDoorStatus] = 2; + _globals._sequenceIndexes[3] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[3], false, 1); + _game.syncTimers(SYNC_SEQ, _globals._sequenceIndexes[3], SYNC_ANIM, _globals._animationIndexes[1]); + _scene->_sequences.setDepth(_globals._sequenceIndexes[3], 10); + _scene->drawToBackground(_globals._spriteIndexes[4], 1, Common::Point(-32000, -32000), 0, 100); + _game.syncTimers(SYNC_PLAYER, 0, SYNC_ANIM, _globals._animationIndexes[1]); + _game._player._visible = true; + _game._player._playerPos = Common::Point(126, 126); + _anim1ActvFl = false; + _game._player.walk(Common::Point(145, 108), FACING_NORTHEAST); + _game._player.resetFacing(FACING_NORTHWEST); + break; + + default: + break; + } + } else if (_globals[kCurrentYear] == 1993 && _globals[kMakeBrieLeave203]) + _vm->_dialogs->show(11142); + else + _vm->_dialogs->show(11134); + _action._inProgress = false; + return; + } + + if (_action._lookFlag) { + if (_globals[kCurrentYear] == 1993) + _vm->_dialogs->show(11110); + else + _vm->_dialogs->show(11111); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_LOOK) || _action.isAction(VERB_LOOK_AT)) { + if (_action.isObject(NOUN_FLOOR)) { + _vm->_dialogs->show(11112); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_WALL)) { + _vm->_dialogs->show(11113); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_CEILING)) { + _vm->_dialogs->show(11114); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_STAIRWELL)) { + _vm->_dialogs->show(11115); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_TABLE)) { + _vm->_dialogs->show(11118); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_PLANT)) { + _vm->_dialogs->show(11119); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_FIRE_AXE)) { + _vm->_dialogs->show(11120); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_HANDLE)) { + _vm->_dialogs->show(11121); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_AXE)) { + _vm->_dialogs->show(11122); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_DOOR_CHUNKS)) { + _vm->_dialogs->show(11129); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_LIGHT)) { + _vm->_dialogs->show(11131); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_LAMP)) { + _vm->_dialogs->show(11132); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_HOOK)) { + _vm->_dialogs->show(11141); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_LEFT_DOOR)) { + if (_globals[kJacquesStatus]) + _vm->_dialogs->show(11140); + else if (_globals[kChristineDoorStatus] == 2) + _vm->_dialogs->show(11130); + else if ((_globals[kChrisKickedRaoulOut]) && (_globals[kTicketPeoplePresent] == 1)) + _vm->_dialogs->show(11136); + else if ((_globals[kChristineDoorStatus] == 1) || _closedFl) + _vm->_dialogs->show(11117); + else if (_globals[kChristineDoorStatus] == 0) + _vm->_dialogs->show(11116); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_RIGHT_DOOR)) { + _vm->_dialogs->show(11117); + _action._inProgress = false; + return; + } + } + + if (_action.isAction(VERB_CLOSE, NOUN_RIGHT_DOOR)) { + _vm->_dialogs->show(11128); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_CLOSE, NOUN_LEFT_DOOR)) { + if (_closedFl) + _vm->_dialogs->show(11128); + else if ((_globals[kChristineDoorStatus] == 2) && (!_globals[kTicketPeoplePresent])) + _vm->_dialogs->show(11138); + else if (_globals[kChristineDoorStatus] == 1) + _vm->_dialogs->show(11127); + else if (_globals[kChristineDoorStatus] == 0) + _vm->_dialogs->show(11125); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_OPEN, NOUN_LEFT_DOOR)) { + if (_globals[kChristineDoorStatus] == 0) + _vm->_dialogs->show(11126); + _action._inProgress = false; + return; + } +} + +void Scene111::preActions() { + if (_action.isAction(VERB_EXIT_TO, NOUN_STAIRWELL)) { + if (_globals[kLeaveAngelMusicOn]) { + _vm->_dialogs->show(11139); + _game._player._needToWalk = false; + _game._player.cancelCommand(); + } else + _game._player._walkOffScreenSceneId = 109; + } + + if (_action.isAction(VERB_TAKE, NOUN_FIRE_AXE) && _game._objects.isInRoom(OBJ_FIRE_AXE) && (_globals[kCurrentYear] == 1881) + && (_globals[kChristineDoorStatus] == 1) && (_globals[kChrisKickedRaoulOut]) && (_globals[kJacquesStatus] == 0)) + _game._player.walk(Common::Point(119, 124), FACING_EAST); + + if (_action.isAction(VERB_OPEN, NOUN_RIGHT_DOOR) || _action.isAction(VERB_UNLOCK, NOUN_RIGHT_DOOR) || _action.isAction(VERB_LOCK, NOUN_RIGHT_DOOR)) + _game._player.walk(Common::Point(219, 131), FACING_NORTHEAST); + + if (_action.isAction(VERB_OPEN, NOUN_LEFT_DOOR) || _action.isAction(VERB_UNLOCK, NOUN_LEFT_DOOR) || _action.isAction(VERB_LOCK, NOUN_LEFT_DOOR)) + _game._player.walk(Common::Point(109, 124), FACING_NORTHEAST); + + if ((_action.isAction(VERB_WALK_THROUGH, NOUN_LEFT_DOOR) || _action.isAction(VERB_UNLOCK, NOUN_LEFT_DOOR) || _action.isAction(VERB_LOCK, NOUN_LEFT_DOOR)) + && !_closedFl && ((_globals[kChristineDoorStatus] == 2) || (_globals[kChristineDoorStatus] == 0))) + _game._player.walk(Common::Point(145, 108), FACING_NORTHEAST); +} + +void Scene111::handleListenAnimation() { + if (_scene->_animation[_globals._animationIndexes[0]]->getCurrentFrame() == _listenFrame) + return; + + int nextFrame = -1; + _listenFrame = _scene->_animation[_globals._animationIndexes[0]]->getCurrentFrame(); + + if (_listenFrame == 6) { + if (_listenStatus == 0) + nextFrame = 5; + else if (_listenStatus == 1) + nextFrame = 7; + } + + if (nextFrame >= 0) { + _scene->setAnimFrame(_globals._animationIndexes[0], nextFrame); + _listenFrame = nextFrame; + } +} + +void Scene111::handleListenConversation() { + if (_action._activeAction._verbId == 1) + _vm->_gameConv->setInterlocutorTrigger(66); + + if (_action._activeAction._verbId == 7) + _vm->_gameConv->setInterlocutorTrigger(68); + + if (_game._trigger == 66) + _listenStatus = 0; + + if (_game._trigger == 68) { + _listenStatus = 1; + _vm->_gameConv->hold(); + } + + if ((_action._activeAction._verbId != 1) && (_action._activeAction._verbId != 7)) + _vm->_gameConv->setInterlocutorTrigger(72); +} + +/*------------------------------------------------------------------------*/ + +Scene112::Scene112(MADSEngine *vm) : Scene1xx(vm) { + _anim0ActvFl = false; + _anim1ActvFl = false; + _raoulAction = -1; + _raoulFrame = -1; + _didOptionFl = -1; + _julieFrame = -1; + _julieAction = -1; + _julieHotspotId = -1; + _julieCounter = -1; +} + +void Scene112::synchronize(Common::Serializer &s) { + Scene1xx::synchronize(s); + + s.syncAsByte(_anim0ActvFl); + s.syncAsByte(_anim1ActvFl); + s.syncAsSint16LE(_raoulAction); + s.syncAsSint16LE(_raoulFrame); + s.syncAsSint16LE(_didOptionFl); + s.syncAsSint16LE(_julieFrame); + s.syncAsSint16LE(_julieAction); + s.syncAsSint16LE(_julieCounter); +} + +void Scene112::setup() { + setPlayerSpritesPrefix(); + setAAName(); + + _scene->addActiveVocab(NOUN_WOMAN); + _scene->addActiveVocab(NOUN_JULIE); +} + +void Scene112::enter() { + if (_scene->_priorSceneId != RETURNING_FROM_LOADING) { + _raoulAction = 2; + _didOptionFl = 0; + } + + _vm->_gameConv->get(3); + + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('j', 1), 1); + _anim0ActvFl = true; + _julieAction = 2; + _scene->setAnimFrame(_globals._animationIndexes[0], 3); + if (_globals[kJulieNameIsKnown] == 2) { + _julieHotspotId = _scene->_dynamicHotspots.add(NOUN_JULIE, VERB_WALK_TO, SYNTAX_SINGULAR_FEM, EXT_NONE, Common::Rect(255, 82, 255 + 30, 82 + 44)); + _scene->_dynamicHotspots[_julieHotspotId]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(_julieHotspotId, Common::Point(216, 137), FACING_NORTHEAST); + _scene->_hotspots.activate(NOUN_WOMAN, false); + } + _globals._animationIndexes[1] = _scene->loadAnimation(formAnimName('r', 1), 1); + _anim1ActvFl = true; + _scene->setAnimFrame(_globals._animationIndexes[1], 82); + _raoulAction = 2; + + if (_vm->_gameConv->_restoreRunning == 3) { + _vm->_gameConv->run(3); + _vm->_gameConv->exportPointer(&_globals[kPlayerScore]); + _scene->setAnimFrame(_globals._animationIndexes[1], 17); + _raoulAction = 1; + _game._player._playerPos = Common::Point(53, 128); + _game._player._facing = FACING_EAST; + _game._player._visible = false; + } else if ((_scene->_priorSceneId == 110) || (_scene->_priorSceneId != RETURNING_FROM_LOADING)) { + _game._player._playerPos = Common::Point(128, 145); + _game._player._facing = FACING_NORTH; + } + + sceneEntrySound(); +} + +void Scene112::step() { + if (_anim0ActvFl) + handleJulieAnimation(); + + if (_anim1ActvFl) + handleRaoulChair(); +} + +void Scene112::actions() { + if (_vm->_gameConv->_running == 3) { + handleConversation(); + _action._inProgress = false; + return; + } + + if ((_action.isAction(VERB_TALK_TO, NOUN_JULIE)) || (_action.isAction(VERB_TALK_TO, NOUN_WOMAN))) { + if (_globals[kJulieNameIsKnown] > 0) { + _game._player._visible = false; + _game.syncTimers(SYNC_ANIM, _globals._animationIndexes[1], SYNC_PLAYER, 0); + _scene->setAnimFrame(_globals._animationIndexes[1], 1); + _raoulAction = 1; + } + _vm->_gameConv->run(3); + _vm->_gameConv->exportPointer(&_globals[kPlayerScore]); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_EXIT_TO, NOUN_CORRIDOR)) { + _scene->_nextSceneId = 110; + _action._inProgress = false; + return; + } + + if (_action._lookFlag) { + _vm->_dialogs->show(11210); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_LOOK) || _action.isAction(VERB_LOOK_AT)) { + if (_action.isObject(NOUN_WALL)) { + _vm->_dialogs->show(11211); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_FLOOR)) { + _vm->_dialogs->show(11212); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_MIRROR)) { + _vm->_dialogs->show(11213); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_BALLET_BAR)) { + _vm->_dialogs->show(11214); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_CORRIDOR)) { + _vm->_dialogs->show(11215); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_THROW_RUGS)) { + _vm->_dialogs->show(11216); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_DRESSING_SCREEN)) { + _vm->_dialogs->show(11217); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_DRESSING_TABLE)) { + _vm->_dialogs->show(11218); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_CHAIR)) { + _vm->_dialogs->show(11219); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_PLANT)) { + _vm->_dialogs->show(11220); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_COAT_RACK)) { + _vm->_dialogs->show(11221); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_UMBRELLA)) { + _vm->_dialogs->show(11222); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_PAINTINGS)) { + _vm->_dialogs->show(11223); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_TRASH_BUCKET)) { + _vm->_dialogs->show(11224); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_SHELF)) { + _vm->_dialogs->show(11225); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_CONTAINER)) { + _vm->_dialogs->show(11226); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_TORN_POSTER)) { + _vm->_dialogs->show(11227); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_POSTER)) { + _vm->_dialogs->show(11228); + _action._inProgress = false; + return; + } + + if ((_action.isObject(NOUN_REVIEW)) || (_action.isObject(NOUN_REVIEWS))) { + _vm->_dialogs->show(11229); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_JULIE)) { + _vm->_dialogs->show(11231); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_COSTUME_RACK)) { + _vm->_dialogs->show(11232); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_LIGHT_FIXTURE)) { + _vm->_dialogs->show(11233); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_WARDROBE)) { + _vm->_dialogs->show(11234); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_WOMAN)) { + _vm->_dialogs->show(11237); + _action._inProgress = false; + return; + } + } + + if (_action.isAction(VERB_TAKE)) { + if (_action.isObject(NOUN_WOMAN) || _action.isObject(NOUN_JULIE)) { + _vm->_dialogs->show(11238); + _action._inProgress = false; + return; + } + } + + if (_action.isAction(VERB_OPEN, NOUN_WARDROBE)) { + _vm->_dialogs->show(11235); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_OPEN, NOUN_CONTAINER)) { + _vm->_dialogs->show(11236); + _action._inProgress = false; + return; + } +} + +void Scene112::preActions() { + if ((_action.isAction(VERB_TALK_TO, NOUN_JULIE) || _action.isAction(VERB_TALK_TO, NOUN_WOMAN)) && (_globals[kJulieNameIsKnown] > 0)) + _game._player.walk(Common::Point(53, 128), FACING_EAST); +} + +void Scene112::handleConversation() { + switch (_action._activeAction._verbId) { + case 1: + if (!_game._trigger && (_raoulAction == 2)) + _vm->_gameConv->setInterlocutorTrigger(68); + break; + + case 3: + case 4: + if (_globals[kJulieNameIsKnown] < 2) { + _globals[kJulieNameIsKnown] = 2; + _scene->_hotspots.activate(NOUN_WOMAN, false); + _julieHotspotId = _scene->_dynamicHotspots.add(NOUN_JULIE, VERB_WALK_TO, SYNTAX_SINGULAR_FEM, EXT_NONE, Common::Rect(255, 82, 255 + 30, 82 + 44)); + _scene->_dynamicHotspots[_julieHotspotId]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(_julieHotspotId, Common::Point(216, 137), FACING_NORTHEAST); + } + break; + + case 5: + _vm->_gameConv->setInterlocutorTrigger(74); + _globals[kJulieNameIsKnown] = 1; + break; + + case 6: + case 7: + case 10: + case 23: + case 27: + _vm->_gameConv->setInterlocutorTrigger(74); + _globals[kJulieNameIsKnown] = 2; + break; + + case 13: + _julieAction = 1; + _raoulAction = 1; + break; + + case 14: + case 15: + case 16: + _julieAction = 0; + _raoulAction = 1; + break; + + default: + break; + } + + switch (_game._trigger) { + case 60: + _julieAction = 0; + _raoulAction = 1; + break; + + case 62: + _julieAction = 2; + if (_raoulAction != 2) + _raoulAction = 0; + break; + + case 68: + _scene->_sequences.addTimer(120, 70); + _vm->_gameConv->hold(); + break; + + case 70: + _game._player.walk(Common::Point(53, 128), FACING_EAST); + _game._player.setWalkTrigger(72); + break; + + case 72: + _vm->_gameConv->release(); + _game._player._visible = false; + _game.syncTimers(SYNC_ANIM, _globals._animationIndexes[1], SYNC_PLAYER, 0); + _scene->setAnimFrame(_globals._animationIndexes[1], 1); + _raoulAction = 1; + break; + + case 74: + _raoulAction = 3; + _vm->_gameConv->hold(); + break; + + default: + break; + } + + if ((_action._activeAction._verbId != 0) && (_action._activeAction._verbId != 1) && + (_action._activeAction._verbId != 2) && (_action._activeAction._verbId != 5) && + (_action._activeAction._verbId != 6) && (_action._activeAction._verbId != 7) && + (_action._activeAction._verbId != 10) && (_action._activeAction._verbId != 23) && + (_action._activeAction._verbId != 27)) { + _vm->_gameConv->setInterlocutorTrigger(60); + _vm->_gameConv->setHeroTrigger(62); + } + + if (_action._activeAction._verbId == 18) + _globals[kCanFindBookInLibrary] = true; + + _julieCounter = 0; +} + +void Scene112::handleJulieAnimation() { + if (_scene->_animation[_globals._animationIndexes[0]]->getCurrentFrame() == _julieFrame) + return; + + _julieFrame = _scene->_animation[_globals._animationIndexes[0]]->getCurrentFrame(); + int random = -1; + int resetFrame = -1; + + switch (_julieFrame) { + case 1: + case 2: + case 3: + case 22: + case 39: + case 71: + case 107: + switch (_julieAction) { + case 0: + random = _vm->getRandomNumber(4, 6); + ++_julieCounter; + if (_julieCounter > 25) + _julieAction = 2; + break; + + case 1: + random = 3; + break; + + case 2: + random = _vm->getRandomNumber(1, 3); + while (_didOptionFl == random) + random = _vm->getRandomNumber(1, 3); + _didOptionFl = random; + break; + + default: + break; + } + + switch (random) { + case 1: + resetFrame = 22; + break; + + case 2: + resetFrame = 39; + break; + + case 3: + resetFrame = 83; + break; + + case 4: + resetFrame = 0; + break; + + case 5: + resetFrame = 1; + break; + + case 6: + resetFrame = 2; + break; + + default: + break; + } + break; + case 56: + case 77: + case 83: + random = _vm->getRandomNumber(1, 3); + while (_didOptionFl == random) + random = _vm->getRandomNumber(1, 3); + _didOptionFl = random; + + if ((_julieAction == 0) || (_julieAction == 1)) + random = 3; + + switch (random) { + case 1: + resetFrame = 71; + break; + + case 2: + resetFrame = 77; + break; + + case 3: + resetFrame = 56; + break; + + default: + break; + } + + break; + + case 95: + if (_julieAction == 1) + random = 2; + else + random = 1; + + switch (random) { + case 1: + resetFrame = 95; + break; + + case 2: + resetFrame = 107; + break; + + default: + break; + } + break; + + case 130: + resetFrame = 95; + _julieAction = 2; + break; + + default: + break; + } + + if (resetFrame >= 0) { + _scene->setAnimFrame(_globals._animationIndexes[0], resetFrame); + _julieFrame = resetFrame; + } +} + +void Scene112::handleRaoulChair() { + if (_scene->_animation[_globals._animationIndexes[1]]->getCurrentFrame() == _raoulFrame) + return; + + _raoulFrame = _scene->_animation[_globals._animationIndexes[1]]->getCurrentFrame(); + int resetFrame = -1; + int random = -1; + + switch (_raoulFrame) { + case 18: + case 30: + case 41: + case 49: + case 56: + case 65: + switch (_raoulAction) { + case 0: + random = _vm->getRandomNumber(1, 4); + _raoulAction = 1; + break; + + case 2: + random = 6; + break; + + case 3: + random = 5; + _raoulAction = 2; + break; + + default: + random = _vm->getRandomNumber(7, 50); + while (_didOptionFl == random) + random = _vm->getRandomNumber(7, 50); + _didOptionFl = random; + break; + } + + switch (random) { + case 1: + resetFrame = 49; + break; + + case 2: + resetFrame = 41; + break; + + case 3: + resetFrame = 18; + break; + + case 4: + resetFrame = 30; + break; + + case 5: + resetFrame = 65; + break; + + case 6: + resetFrame = 82; + break; + + case 7: + resetFrame = 56; + break; + + default: + resetFrame = 17; + break; + } + break; + + case 61: + if (_raoulAction == 1) + random = 1; + else + random = 2; + + switch (random) { + case 1: + resetFrame = 60; + break; + + case 2: + resetFrame = 61; + break; + + default: + break; + } + break; + + case 82: + _raoulAction = 2; + _game._player._visible = true; + _vm->_gameConv->release(); + _game.syncTimers(SYNC_PLAYER, 0, SYNC_ANIM, _globals._animationIndexes[1]); + break; + + case 83: + if (_raoulAction == 2) + random = 1; + else + random = 2; + + switch (random) { + case 1: + resetFrame = 82; + break; + + case 2: + resetFrame = 0; + break; + + default: + break; + } + break; + + default: + break; + } + + if (resetFrame >= 0) { + _scene->setAnimFrame(_globals._animationIndexes[1], resetFrame); + _raoulFrame = resetFrame; + } +} + +/*------------------------------------------------------------------------*/ + +Scene113::Scene113(MADSEngine *vm) : Scene1xx(vm) { + _standingAndTalking = false; + _dayWantsToTalk = false; + _musicPlaying = false; + _afterKissFl = false; + _anim0ActvFl = false; + _anim1ActvFl = false; + _anim2ActvFl = false; + _anim3ActvFl = false; + _anim4ActvFl = false; + _prevent1 = false; + _prevent2 = false; + _raoulStandingFl = false; + _armsOutFl = false; + + _dayStatus = -1; + _raoulAction = -1; + _christineHotspotId2 = -1; + _raoulCount = -1; + _dayCount = -1; + _standCount = -1; + _julieStatus = -1; + _florentStatus = -1; + _florentFrame = -1; + _florentCount = -1; + _dayFrame = -1; + _lastDayResetFrame = -1; + _raoulFrame = -1; + _julieFrame = -1; + _julieCount = -1; +} + +void Scene113::synchronize(Common::Serializer &s) { + Scene1xx::synchronize(s); + + s.syncAsByte(_standingAndTalking); + s.syncAsByte(_dayWantsToTalk); + s.syncAsByte(_musicPlaying); + s.syncAsByte(_afterKissFl); + s.syncAsByte(_anim0ActvFl); + s.syncAsByte(_anim1ActvFl); + s.syncAsByte(_anim2ActvFl); + s.syncAsByte(_anim3ActvFl); + s.syncAsByte(_anim4ActvFl); + s.syncAsByte(_prevent1); + s.syncAsByte(_prevent2); + s.syncAsByte(_raoulStandingFl); + s.syncAsByte(_armsOutFl); + + s.syncAsSint16LE(_dayStatus); + s.syncAsSint16LE(_raoulAction); + s.syncAsSint16LE(_christineHotspotId2); + s.syncAsSint16LE(_raoulCount); + s.syncAsSint16LE(_dayCount); + s.syncAsSint16LE(_standCount); + s.syncAsSint16LE(_julieStatus); + s.syncAsSint16LE(_florentStatus); + s.syncAsSint16LE(_florentFrame); + s.syncAsSint16LE(_florentCount); + s.syncAsSint16LE(_dayFrame); + s.syncAsSint16LE(_lastDayResetFrame); + s.syncAsSint16LE(_raoulFrame); + s.syncAsSint16LE(_julieFrame); + s.syncAsSint16LE(_julieCount); +} + +void Scene113::setup() { + setPlayerSpritesPrefix(); + setAAName(); + + _scene->addActiveVocab(NOUN_CHRISTINE); + _scene->addActiveVocab(NOUN_WOMAN); + _scene->addActiveVocab(NOUN_JULIE); +} + +void Scene113::enter() { + if (_scene->_priorSceneId != RETURNING_FROM_LOADING) { + _standingAndTalking = false; + _dayWantsToTalk = false; + _musicPlaying = false; + _afterKissFl = false; + _anim0ActvFl = false; + _anim1ActvFl = false; + _anim2ActvFl = false; + _anim3ActvFl = false; + _anim4ActvFl = false; + _prevent1 = false; + _prevent2 = false; + _raoulStandingFl = false; + _armsOutFl = false; + } + + _scene->_hotspots.activate(NOUN_SMALL_NOTE, false); + _scene->_hotspots.activate(NOUN_DRESSING_GOWN, false); + _scene->_hotspots.activate(NOUN_CHRISTINE, false); + _scene->_hotspots.activate(NOUN_JULIE, false); + _scene->_hotspots.activate(NOUN_LIGHT_FIXTURE, false); + + if (_globals[kCurrentYear] == 1993) { + _globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('z', -1)); + _globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('f', 0)); + + if (_game._objects.isInRoom(OBJ_SMALL_NOTE)) + _globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('f', 1)); + + if ((_globals[kDoneBrieConv203] == 1) || (_globals[kDoneBrieConv203] == 3)) + _globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('c', 3)); + } + + if (_globals[kCurrentYear] == 1993) { + _vm->_gameConv->get(4); + if ((_globals[kDoneBrieConv203] == 1) || (_globals[kDoneBrieConv203] == 3)) + _vm->_gameConv->get(6); + } else { + _globals._spriteIndexes[4] = _scene->_sprites.addSprites("*faceral", false); + _globals._spriteIndexes[5] = _scene->_sprites.addSprites("*facecrsd", false); + _vm->_gameConv->get(13); + } + + if (_globals[kCurrentYear] == 1993) { + _scene->drawToBackground(_globals._spriteIndexes[3], 1, Common::Point(-32000, -32000), 0, 100); + _scene->_hotspots.activate(NOUN_VASE, false); + _scene->_hotspots.activate(NOUN_FAN, false); + _scene->_hotspots.activateAtPos(NOUN_LIGHT_FIXTURE, true, Common::Point(155, 17)); + } else { + _scene->_hotspots.activateAtPos(NOUN_LIGHT_FIXTURE, true, Common::Point(150, 46)); + _scene->_hotspots.activate(NOUN_NOTICE, false); + } + + if (_scene->_priorSceneId == RETURNING_FROM_LOADING) { + if (_globals[kCurrentYear] == 1881) { + if (_dayStatus <= 3) { + _globals._animationIndexes[1] = _scene->loadAnimation(formAnimName('r', 1), 1); + _anim1ActvFl = true; + } + + if (_raoulAction == 3) + _scene->setAnimFrame(_globals._animationIndexes[1], 33); + else { + _raoulAction = 1; + _game._player._visible = false; + _scene->setAnimFrame(_globals._animationIndexes[1], 8); + } + + if (_musicPlaying) { + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('d', 2), 0); + _anim0ActvFl = true; + _christineHotspotId1 = _scene->_dynamicHotspots.add(NOUN_CHRISTINE, VERB_WALK_TO, SYNTAX_SINGULAR_FEM, EXT_NONE, Common::Rect(0, 0, 0, 0)); + _scene->_dynamicHotspots[_christineHotspotId1]._articleNumber = PREP_ON; + _scene->setDynamicAnim(_christineHotspotId1, _globals._animationIndexes[0], 13); + _scene->setDynamicAnim(_christineHotspotId1, _globals._animationIndexes[0], 14); + _scene->setDynamicAnim(_christineHotspotId1, _globals._animationIndexes[0], 16); + _scene->setAnimFrame(_globals._animationIndexes[0], 212); + _game._player._visible = true; + _anim1ActvFl = false; + } else { + switch (_dayStatus) { + case 0: + case 1: + case 2: + case 3: + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('d', 1), 0); + _anim0ActvFl = true; + _dayStatus = 2; + _scene->setAnimFrame(_globals._animationIndexes[0], 208); + _scene->_hotspots.activate(NOUN_CHRISTINE, true); + _scene->_hotspots.activateAtPos(NOUN_CHRISTINE, false, Common::Point(220, 130)); + break; + + default: + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('d', 2), 0); + _anim0ActvFl = true; + _dayStatus = 7; + _game._player._visible = false; + _scene->setAnimFrame(_globals._animationIndexes[0], 165); + break; + } + _christineHotspotId1 = _scene->_dynamicHotspots.add(NOUN_CHRISTINE, VERB_WALK_TO, SYNTAX_SINGULAR_FEM, EXT_NONE, Common::Rect(0, 0, 0, 0)); + _scene->_dynamicHotspots[_christineHotspotId1]._articleNumber = PREP_ON; + _scene->setDynamicAnim(_christineHotspotId1, _globals._animationIndexes[0], 13); + _scene->setDynamicAnim(_christineHotspotId1, _globals._animationIndexes[0], 14); + _scene->setDynamicAnim(_christineHotspotId1, _globals._animationIndexes[0], 16); + } + + if (_dayStatus == 2) { + _scene->_hotspots.activate(NOUN_CHRISTINE, true); + _scene->_hotspots.activateAtPos(NOUN_CHRISTINE, false, Common::Point(220, 130)); + } else { + _game._player._playerPos = Common::Point(175, 148); + _game._player._facing = FACING_NORTHEAST; + } + + } else if ((_globals[kDoneBrieConv203] == 1) || (_globals[kDoneBrieConv203] == 3)) { + _globals._animationIndexes[4] = _scene->loadAnimation(formAnimName('x', 1), 1); + _julieStatus = 0; + _anim4ActvFl = true; + _globals[kMakeBrieLeave203] = true; + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, 1); + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 14); + _scene->_hotspots.activate(NOUN_DRESSING_GOWN, true); + _scene->_hotspots.activate(NOUN_JULIE, true); + _scene->_hotspots.activateAtPos(NOUN_CHRISTINE, true, Common::Point(220, 130)); + } else if (_globals[kCurrentYear] == 1993) { + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); + _globals._animationIndexes[2] = _scene->loadAnimation(formAnimName('f', 1), 1); + _anim2ActvFl = true; + + if (_florentStatus != 3) + _florentStatus = 1; + + _globals._animationIndexes[3] = _scene->loadAnimation(formAnimName('r', 1), 1); + _anim3ActvFl = true; + + if (_raoulAction == 3) + _scene->setAnimFrame(_globals._animationIndexes[3], 33); + else { + _scene->setAnimFrame(_globals._animationIndexes[3], 8); + _raoulAction = 1; + _game._player._playerPos = Common::Point(201, 120); + _game._player._facing = FACING_SOUTH; + _game._player._visible = false; + } + + if (_florentStatus == 3) + _scene->setAnimFrame(_globals._animationIndexes[2], 41); + + if (_globals[kFlorentNameIsKnown] >= 1) { + _christineHotspotId2 = _scene->_dynamicHotspots.add(NOUN_CHRISTINE, VERB_WALK_TO, SYNTAX_SINGULAR_FEM, EXT_NONE, Common::Rect(43, 118, 43 + 15, 118 + 29)); + _scene->_dynamicHotspots[_christineHotspotId2]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(_christineHotspotId2, Common::Point(106, 127), FACING_SOUTHWEST); + } else { + _christineHotspotId2 = _scene->_dynamicHotspots.add(NOUN_WOMAN, VERB_WALK_TO, SYNTAX_FEM_NOT_PROPER, EXT_NONE, Common::Rect(43, 118, 43 + 15, 118 + 29)); + _scene->_dynamicHotspots[_christineHotspotId2]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(_christineHotspotId2, Common::Point(106, 127), FACING_SOUTHWEST); + } + + _scene->_hotspots.activate(NOUN_DRESSING_GOWN, true); + + if (_game._objects.isInRoom(OBJ_SMALL_NOTE)) { + _scene->_hotspots.activate(NOUN_SMALL_NOTE, true); + _globals._sequenceIndexes[1] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[1], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[1], 13); + } + } + } else if (_globals[kCurrentYear] == 1993) { + if ((_globals[kDoneBrieConv203] == 1) || (_globals[kDoneBrieConv203] == 3)) { + if (!(_globals[kPlayerScoreFlags] & 4)) { + _globals[kPlayerScoreFlags] = _globals[kPlayerScoreFlags] | 4; + _globals[kPlayerScore] += 5; + } + + _globals._animationIndexes[4] = _scene->loadAnimation(formAnimName('x', 1), 1); + _julieStatus = 0; + _anim4ActvFl = true; + _globals[kMakeBrieLeave203] = true; + _game._player._playerPos = Common::Point(190, 148); + _game._player._facing = FACING_NORTH; + _game._player._stepEnabled = false; + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, 1); + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 14); + _scene->_hotspots.activate(NOUN_DRESSING_GOWN, true); + _scene->_hotspots.activate(NOUN_JULIE, true); + _scene->_hotspots.activateAtPos(NOUN_CHRISTINE, true, Common::Point(220, 130)); + _game._player.walk(Common::Point(175, 128), FACING_NORTHEAST); + _game._player.setWalkTrigger(102); + } else { + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); + + _globals._animationIndexes[2] = _scene->loadAnimation(formAnimName('f', 1), 1); + _florentStatus = 1; + _anim2ActvFl = true; + + _globals._animationIndexes[3] = _scene->loadAnimation(formAnimName('r', 1), 1); + _raoulAction = 3; + _anim3ActvFl = true; + _scene->setAnimFrame(_globals._animationIndexes[3], 33); + + if (_globals[kFlorentNameIsKnown] >= 1) { + _christineHotspotId2 = _scene->_dynamicHotspots.add(NOUN_CHRISTINE, VERB_WALK_TO, SYNTAX_SINGULAR_FEM, EXT_NONE, Common::Rect(43, 118, 43 + 15, 118 + 29)); + _scene->_dynamicHotspots[_christineHotspotId2]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(_christineHotspotId2, Common::Point(106, 127), FACING_SOUTHWEST); + } else { + _christineHotspotId2 = _scene->_dynamicHotspots.add(NOUN_WOMAN, VERB_WALK_TO, SYNTAX_FEM_NOT_PROPER, EXT_NONE, Common::Rect(43, 118, 43 + 15, 118 + 29)); + _scene->_dynamicHotspots[_christineHotspotId2]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(_christineHotspotId2, Common::Point(106, 127), FACING_SOUTHWEST); + } + + _game._player._playerPos = Common::Point(190, 148); + _game._player._facing = FACING_NORTH; + + _scene->_hotspots.activate(NOUN_DRESSING_GOWN, true); + if (_game._objects.isInRoom(OBJ_SMALL_NOTE)) { + _scene->_hotspots.activate(NOUN_SMALL_NOTE, true); + _globals._sequenceIndexes[1] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[1], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[1], 13); + } + } + } else if ((_globals[kCurrentYear] == 1881) && (! _globals[kChrisKickedRaoulOut])) { + _globals._animationIndexes[1] = _scene->loadAnimation(formAnimName('r', 1), 1); + _raoulAction = 3; + _anim1ActvFl = true; + _scene->setAnimFrame(_globals._animationIndexes[1], 33); + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('d', 1), 1); + _dayStatus = 2; + _anim0ActvFl = true; + + _scene->_hotspots.activate(NOUN_CHRISTINE, true); + _scene->_hotspots.activateAtPos(NOUN_CHRISTINE, false, Common::Point(220, 130)); + _scene->_sequences.addTimer(60, 60); + _game._player._playerPos = Common::Point(190, 148); + _game._player._facing = FACING_NORTH; + } else if ((_globals[kCurrentYear] == 1881) && _globals[kChrisKickedRaoulOut]) { + _globals[kChrisKickedRaoulOut] = 2; + _game._player._playerPos = Common::Point(190, 148); + _game._player._facing = FACING_NORTH; + _globals[kCameFromFade] = true; + _game._player._stepEnabled = false; + _globals[kPlayerScore] += 8; + _scene->_sequences.addTimer(60, 110); + } else if (_scene->_priorSceneId == 111) { + _game._player._playerPos = Common::Point(190, 148); + _game._player._facing = FACING_NORTH; + } + + switch (_vm->_gameConv->_restoreRunning) { + case 4: + _vm->_gameConv->run(4); + _vm->_gameConv->exportPointer(&_globals[kPlayerScore]); + break; + + case 6: + _vm->_gameConv->run(6); + break; + + case 13: + _vm->_gameConv->run(13); + _vm->_gameConv->exportPointer(&_globals[kPlayerScore]); + break; + + default: + break; + } + + sceneEntrySound(); +} + +void Scene113::step() { + if (_anim1ActvFl) + handleRaoulAnimation2(); + + if (_anim4ActvFl) + handleJulieAnimation(); + + if (_anim2ActvFl) + handleFlorentAnimation(); + + if (_anim3ActvFl) { + handleRaoulAnimation(); + + if ((!_game._objects.isInInventory(OBJ_SMALL_NOTE)) && (_scene->_animation[_globals._animationIndexes[3]]->getCurrentFrame() == 26)) { + _scene->_hotspots.activate(NOUN_SMALL_NOTE, false); + _game._objects.addToInventory(OBJ_SMALL_NOTE); + _scene->deleteSequence(_globals._sequenceIndexes[1]); + _vm->_sound->command(26); + _vm->_dialogs->showItem(OBJ_SMALL_NOTE, 806, 2); + } + } + + if ((_scene->_animation[_globals._animationIndexes[0]]->getCurrentFrame() == 86) && (!_prevent2)) { + _scene->freeAnimation(_globals._animationIndexes[0]); + _prevent2 = true; + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('d', 2), 0); + _scene->setAnimFrame (_globals._animationIndexes[0], 86); + _game.syncTimers(SYNC_ANIM, _globals._animationIndexes[0], SYNC_CLOCK, 0); + _scene->animations_tick(); + } + + if (_anim0ActvFl) { + handleDayAnimation(); + + if ((_scene->_animation[_globals._animationIndexes[0]]->getCurrentFrame() == 95) && (!_armsOutFl)) { + _standingAndTalking = true; + _dayStatus = 7; + _raoulAction = 3; + _armsOutFl = true; + _game.syncTimers(SYNC_ANIM, _globals._animationIndexes[0], SYNC_ANIM, _globals._animationIndexes[1]); + } + + if ((_scene->_animation[_globals._animationIndexes[0]]->getCurrentFrame() == 165) && !_afterKissFl) + _afterKissFl = true; + } + + switch (_game._trigger) { + case 60: + if (!_game._visitedScenes._sceneRevisited) + _vm->_dialogs->show(11342); + break; + + case 102: + _game._player._stepEnabled = true; + _vm->_gameConv->run(6); + break; + + case 108: + _vm->_dialogs->show(11332); + _vm->_dialogs->show(11333); + _scene->_nextSceneId = 150; + _globals[kLeaveAngelMusicOn] = false; + break; + + case 110: + _vm->_dialogs->show(11331); + _game._player.walk(Common::Point(272, 138), FACING_EAST); + _game._player.setWalkTrigger(108); + break; + + default: + break; + } +} + +void Scene113::actions() { + if (_vm->_gameConv->_running == 13) { + handleLoveConversation(); + _action._inProgress = false; + return; + } + + if (_vm->_gameConv->_running == 4) { + handleFlorentConversation(); + _action._inProgress = false; + return; + } + + if (_vm->_gameConv->_running == 6) { + handleDeadConversation(); + _action._inProgress = false; + return; + } + + if ((_action.isAction(VERB_TALK_TO, NOUN_WOMAN)) || (_action.isAction(VERB_TALK_TO, NOUN_CHRISTINE))) { + if (_globals[kCurrentYear] == 1881) { + _game._player._stepEnabled = true; + _vm->_gameConv->run(13); + _vm->_gameConv->exportPointer(&_globals[kPlayerScore]); + } else if (_globals[kDoneBrieConv203]) { + _vm->_dialogs->show(11348); + } else { + _game._player._stepEnabled = true; + _vm->_gameConv->run(4); + _vm->_gameConv->exportPointer(&_globals[kPlayerScore]); + } + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_EXIT_TO, NOUN_CORRIDOR)) { + if (_globals[kDoneBrieConv203] == 1) + _globals[kDoneBrieConv203] = 3; + + _scene->_nextSceneId = 111; + _action._inProgress = false; + return; + } + + if (_action._lookFlag) { + if (_globals[kCurrentYear] == 1993) { + if (_globals[kDoneBrieConv203]) + _vm->_dialogs->show(11340); + else + _vm->_dialogs->show(11310); + } else { + _vm->_dialogs->show(11311); + } + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_LOOK) || _action.isAction(VERB_LOOK_AT)) { + if (_action.isObject(NOUN_FLOOR)) { + _vm->_dialogs->show(11312); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_RUG)) { + _vm->_dialogs->show(11313); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_WALL)) { + _vm->_dialogs->show(11314); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_COUCH)) { + _vm->_dialogs->show(11315); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_MURAL)) { + _vm->_dialogs->show(11316); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_PAINTING)) { + if (_globals[kCurrentYear] == 1881) + _vm->_dialogs->show(11317); + else + _vm->_dialogs->show(11343); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_PAINTING)) { + _vm->_dialogs->show(11317); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_DRESSING_TABLE)) { + _vm->_dialogs->show(11318); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_CHAIR)) { + _vm->_dialogs->show(11319); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_MIRROR)) { + if (_globals[kCurrentYear] == 1993) { + _vm->_dialogs->show(11344); + } else { + _vm->_dialogs->show(11320); + } + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_FAN)) { + _vm->_dialogs->show(11321); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_VASE)) { + _vm->_dialogs->show(11322); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_HAT_RACK)) { + _vm->_dialogs->show(11323); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_LIGHT_FIXTURE)) { + _vm->_dialogs->show(11324); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_CEILING)) { + _vm->_dialogs->show(11325); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_WARDROBE)) { + _vm->_dialogs->show(11326); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_DRESSING_SCREEN)) { + _vm->_dialogs->show(11327); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_CORRIDOR)) { + _vm->_dialogs->show(11328); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_DRESSING_GOWN)) { + _vm->_dialogs->show(11330); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_SMALL_NOTE) && _game._objects.isInRoom(OBJ_SMALL_NOTE)) { + _vm->_dialogs->show(11349); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_CHRISTINE) && _globals[kDoneBrieConv203]) { + _vm->_dialogs->show(11338); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_JULIE)) { + _vm->_dialogs->show(11339); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_NOTICE)) { + _vm->_dialogs->show(11347); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_CLOTHES_DUMMY)) { + if (_globals[kCurrentYear] == 1993) + _vm->_dialogs->show(11345); + else + _vm->_dialogs->show(11346); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_WOMAN) || _action.isObject(NOUN_CHRISTINE)) { + if (_globals[kCurrentYear] == 1993) + _vm->_dialogs->show(11341); + else { + if (_musicPlaying) + _vm->_dialogs->show(11336); + else + _vm->_dialogs->show(11342); + } + _action._inProgress = false; + return; + } + } + + if (_action.isAction(VERB_OPEN, NOUN_WARDROBE)) { + _vm->_dialogs->show(11329); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_TAKE, NOUN_SMALL_NOTE) && _game._objects.isInRoom(OBJ_SMALL_NOTE)) { + _vm->_dialogs->show(11334); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_TAKE, NOUN_DRESSING_GOWN)) { + _vm->_dialogs->show(11335); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_TAKE, NOUN_CHRISTINE) || _action.isAction(VERB_TAKE, NOUN_WOMAN)) { + _vm->_dialogs->show(11337); + _action._inProgress = false; + return; + } +} + +void Scene113::preActions() { + if (_action.isAction(VERB_WALK_UP, NOUN_AISLE)) + _game._player._walkOffScreenSceneId = 101; + + if (_action.isAction(VERB_LOOK, NOUN_MIRROR)) + _game._player.walk(Common::Point(272, 138), FACING_EAST); + + if (! _action.isAction(VERB_EXIT_TO, NOUN_CORRIDOR) && !_globals[kChrisKickedRaoulOut] + && !_action.isAction(VERB_LOOK, NOUN_CHRISTINE) && !_action.isAction(VERB_TAKE, NOUN_CHRISTINE) && _musicPlaying) { + _vm->_gameConv->run(13); + _vm->_gameConv->exportPointer(&_globals[kPlayerScore]); + _game._player.cancelCommand(); + } else if (_action.isAction(VERB_TALK_TO, NOUN_WOMAN) || _action.isAction(VERB_TALK_TO, NOUN_CHRISTINE)) { + _game._player.walk(Common::Point(106, 127), FACING_SOUTHWEST); + } + + if (!_action.isAction(VERB_EXIT_TO, NOUN_CORRIDOR) && !_action.isAction(VERB_LOOK, NOUN_JULIE) + && !_action.isAction(VERB_LOOK, NOUN_CHRISTINE) && !_action._lookFlag && (_globals[kDoneBrieConv203] != 0) + && (_globals[kCurrentYear] == 1993)) { + if (_action.isAction(VERB_TALK_TO, NOUN_CHRISTINE)) { + _game._player._needToWalk = false; + + } else if (_action.isAction(VERB_LOOK)) { + _game._player._needToWalk = false; + + } else if (_action.isAction(VERB_TALK_TO, NOUN_JULIE)) { + _game._player._needToWalk = false; + _vm->_gameConv->run(6); + _game._player.cancelCommand(); + + } else { + _vm->_dialogs->show(11350); + _game._player._needToWalk = false; + _game._player.cancelCommand(); + } + } +} + +void Scene113::handleFlorentAnimation() { + if (_scene->_animation[_globals._animationIndexes[2]]->getCurrentFrame() == _florentFrame) + return; + + int random; + _florentFrame = _scene->_animation[_globals._animationIndexes[2]]->getCurrentFrame(); + int resetFrame = -1; + + switch (_florentFrame) { + case 1: + case 11: + case 23: + case 38: + case 45: + random = _vm->getRandomNumber(4, 30); + + if (_florentStatus == 2) { + random = 1; + } + + if (_florentStatus == 0) { + random = 2; + } + + if (_florentStatus == 3) { + random = 3; + } + + switch (random) { + case 1: + resetFrame = 2; + _florentStatus = 1; + break; + + case 2: + resetFrame = 28; + break; + + case 3: + resetFrame = 39; + break; + + case 4: + resetFrame = 12; + break; + + default: + resetFrame = 0; + break; + } + break; + + case 24: + case 25: + case 26: + case 27: + case 33: + random = _vm->getRandomNumber(5, 20); + + if (_florentStatus == 0) { + random = _vm->getRandomNumber(1, 4); + ++_florentCount; + if (_florentCount > 5) { + _florentStatus = 1; + random = 5; + } + } + + if ((_florentStatus == 2) || + (_florentStatus == 3)) { + random = 5; + } + + switch (random) { + case 1: + resetFrame = 23; + break; + + case 2: + resetFrame = 24; + break; + + case 3: + resetFrame = 25; + break; + + case 4: + resetFrame = 26; + break; + + case 5: + resetFrame = 34; + break; + + default: + resetFrame = 32; + break; + } + break; + + case 42: + if (_florentStatus == 3) + resetFrame = 41; + + break; + } + + if (resetFrame >= 0) { + _scene->setAnimFrame(_globals._animationIndexes[2], resetFrame); + _florentFrame = resetFrame; + } +} + +void Scene113::handleDayAnimation() { + if (_scene->_animation[_globals._animationIndexes[0]]->getCurrentFrame() == _dayFrame) + return; + + _dayFrame = _scene->_animation[_globals._animationIndexes[0]]->getCurrentFrame(); + int random; + int resetFrame = -1; + switch (_dayFrame) { + case 1: + case 4: + case 14: + case 17: + case 20: + case 26: + case 166: + case 206: + case 207: + case 208: + case 209: + case 210: + case 211: + case 219: + case 231: + case 253: + switch (_dayStatus) { + case 0: + random = _vm->getRandomNumber(1, 3); + ++_dayCount; + if (_dayCount < 6) { + if (random == 1) { + resetFrame = 1; + } else if (random == 2) { + resetFrame = 15; + } else { + resetFrame = 18; + } + } else { + _dayStatus = 1; + resetFrame = 25; + _dayWantsToTalk = false; + } + break; + + case 1: + if (_dayWantsToTalk) { + _dayStatus = 0; + _dayWantsToTalk = false; + resetFrame = 1; + } else { + resetFrame = 25; + } + break; + + case 2: + random = _vm->getRandomNumber(1, 50); + switch (random) { + case 1: + resetFrame = 212; + break; + + case 2: + resetFrame = 219; + break; + + case 3: + resetFrame = 231; + break; + + default: + resetFrame = 0; + break; + } + break; + + case 3: + resetFrame = 5; + _dayStatus = 0; + break; + + case 4: + resetFrame = 31; + break; + + case 5: + resetFrame = _vm->getRandomNumber(205, 207); + ++_standCount; + if (_standCount > 18) { + _dayStatus = 7; + resetFrame = 165; + } + if (_musicPlaying) + resetFrame = 167; + break; + + case 6: + resetFrame = _vm->getRandomNumber(208, 210); + while (_lastDayResetFrame == resetFrame) + resetFrame = _vm->getRandomNumber(208, 210); + + _lastDayResetFrame = resetFrame; + + ++_standCount; + if (_standCount > 18) { + _dayStatus = 7; + resetFrame = 165; + } + + if (_musicPlaying) + resetFrame = 167; + break; + + case 7: + resetFrame = 165; + if (_musicPlaying) + resetFrame = 167; + break; + + default: + break; + } + break; + + case 182: + _game._player._visible = true; + _vm->_gameConv->release(); + _game.syncTimers(SYNC_PLAYER, 0, SYNC_ANIM, _globals._animationIndexes[1]); + _game._player._playerPos = Common::Point(175, 148); + _game._player._turnToFacing = FACING_NORTHEAST; + _game._player.resetFacing(FACING_SOUTHEAST); + _game._player._turnToFacing = FACING_NORTHEAST; + break; + + case 205: + case 212: + resetFrame = 211; + break; + + default: + break; + } + + if (resetFrame >= 0) { + _scene->setAnimFrame(_globals._animationIndexes[0], resetFrame); + _dayFrame = resetFrame; + } +} + +void Scene113::handleRaoulAnimation() { + if (_globals[kFlorentNameIsKnown] == 2) + _raoulAction = 3; + + if (_scene->_animation[_globals._animationIndexes[3]]->getCurrentFrame() == _raoulFrame) + return; + + _raoulFrame = _scene->_animation[_globals._animationIndexes[3]]->getCurrentFrame(); + int resetFrame = -1; + + switch (_raoulFrame) { + case 9: + case 10: + case 11: + case 34: + case 33: + if (_raoulFrame == 33) + _vm->_gameConv->release(); + + switch (_raoulAction) { + case 0: + resetFrame = _vm->getRandomNumber(7, 9); + ++_raoulCount; + + if (_raoulCount > 17) { + _raoulAction = 1; + resetFrame = 8; + } + break; + + case 1: + resetFrame = 8; + break; + + case 2: + resetFrame = 11; + break; + + case 3: + resetFrame = 33; + break; + + case 4: + resetFrame = 38; + _raoulStandingFl = true; + _vm->_gameConv->hold(); + break; + + case 5: + resetFrame = 20; + _raoulAction = 1; + break; + + default: + break; + } + break; + + case 19: + if ((_raoulAction == 5) && (!_game._objects.isInInventory(OBJ_SMALL_NOTE))) { + resetFrame = 20; + _raoulAction = 1; + } else if (_raoulAction == 4) { + resetFrame = 38; + _raoulStandingFl = true; + } else if (_raoulAction == 0) { + resetFrame = 9; + } else { + resetFrame = 8; + _raoulAction = 1; + } + break; + + case 42: + if (_raoulAction == 4) { + if (!_prevent2) { + _vm->_gameConv->release(); + } + resetFrame = 33; + _raoulAction = 3; + _game._player._visible = true; + _game.syncTimers(SYNC_PLAYER, 0, SYNC_ANIM, _globals._animationIndexes[3]); + } + break; + + default: + break; + } + + if (resetFrame >= 0) { + _scene->setAnimFrame(_globals._animationIndexes[3], resetFrame); + _raoulFrame = resetFrame; + } +} + +void Scene113::handleRaoulAnimation2() { + if (_scene->_animation[_globals._animationIndexes[1]]->getCurrentFrame() == _raoulFrame) + return; + + _raoulFrame = _scene->_animation[_globals._animationIndexes[1]]->getCurrentFrame(); + int resetFrame = -1; + switch (_raoulFrame) { + case 9: + case 10: + case 11: + case 34: + switch (_raoulAction) { + case 0: + resetFrame = _vm->getRandomNumber(7, 9); + ++_raoulCount; + + if (_raoulCount > 17) { + _raoulAction = 1; + resetFrame = 8; + } + break; + + case 1: + resetFrame = 8; + break; + + case 2: + resetFrame = 11; + break; + + case 3: + resetFrame = 33; + break; + + default: + break; + } + break; + + case 19: + if (_raoulAction == 0) + resetFrame = 9; + else { + resetFrame = 8; + _raoulAction = 1; + } + break; + + default: + break; + } + + if (resetFrame >= 0) { + _scene->setAnimFrame(_globals._animationIndexes[1], resetFrame); + _raoulFrame = resetFrame; + } +} + +void Scene113::handleJulieAnimation() { + if (_scene->_animation[_globals._animationIndexes[4]]->getCurrentFrame() == _julieFrame) + return; + + _julieFrame = _scene->_animation[_globals._animationIndexes[4]]->getCurrentFrame(); + int resetFrame = -1; + int random; + + switch (_julieFrame) { + case 1: + case 2: + case 3: + case 11: + case 16: + case 17: + switch (_julieStatus) { + case 0: + random = _vm->getRandomNumber(4, 20); + break; + + case 1: + random = _vm->getRandomNumber(1, 3); + ++_julieCount; + if (_julieCount > 20) { + _julieStatus = 0; + random = 6; + } + break; + + default: + random = -1; + break; + } + + switch (random) { + case 1: + resetFrame = 0; + break; + + case 2: + resetFrame = 1; + break; + + case 3: + resetFrame = 2; + break; + + case 4: + resetFrame = 12; + break; + + case 5: + resetFrame = 4; + break; + + default: + resetFrame = 16; + break; + } + break; + } + + if (resetFrame >= 0) { + _scene->setAnimFrame(_globals._animationIndexes[4], resetFrame); + _julieFrame = resetFrame; + } +} + +void Scene113::handleDeadConversation() { + switch (_game._trigger) { + case 106: + _julieStatus = 1; + break; + + case 104: + _julieStatus = 0; + break; + + default: + break; + } + + _vm->_gameConv->setInterlocutorTrigger(106); + _vm->_gameConv->setHeroTrigger(104); + + _julieCount = 0; +} + +void Scene113::handleFlorentConversation() { + int random; + + switch (_action._activeAction._verbId) { + case 3: + case 4: + if (!_prevent1) { + _globals[kFlorentNameIsKnown] = 1; + _vm->_gameConv->setInterlocutorTrigger(82); + _scene->_dynamicHotspots.remove(_christineHotspotId2); + _christineHotspotId2 = _scene->_dynamicHotspots.add(NOUN_CHRISTINE, VERB_WALK_TO, SYNTAX_SINGULAR_FEM, EXT_NONE, Common::Rect(43, 118, 43 + 15, 118 + 29)); + _scene->_dynamicHotspots[_christineHotspotId2]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(_christineHotspotId2, Common::Point(106, 127), FACING_SOUTHWEST); + _prevent1 = true; + } + break; + + case 19: + _florentStatus = 2; + _vm->_gameConv->setInterlocutorTrigger(86); + break; + + case 25: + if (_raoulAction != 3) + _raoulAction = 4; + break; + + case 26: + if (!_prevent2) { + _scene->_sequences.addTimer(120, 92); + _vm->_gameConv->setInterlocutorTrigger(96); + _florentStatus = 0; + _prevent2 = true; + } + break; + + case 27: + case 30: + _vm->_gameConv->setInterlocutorTrigger(98); + break; + + case 28: + case 29: + _vm->_gameConv->setInterlocutorTrigger(100); + break; + + default: + break; + } + + switch (_game._trigger) { + case 62: + if ((_action._activeAction._verbId != 3) && (_action._activeAction._verbId != 4) && (_action._activeAction._verbId != 19) && + (_action._activeAction._verbId != 27) && (_action._activeAction._verbId != 28) && (_action._activeAction._verbId != 29)) { + if ((_raoulAction != 5) && (_raoulAction != 4) && !_raoulStandingFl) + _raoulAction = 0; + + if ((_florentStatus != 3) && (_florentStatus != 2)) + _florentStatus = 1; + } + break; + + case 66: + if ((_florentStatus != 3) && + (_florentStatus != 2)) { + random = _vm->getRandomNumber(1,5); + if (random == 1) + _florentStatus = 0; + } + + if ((_raoulAction != 3) && (_raoulAction != 5) && (_raoulAction != 4) && (!_raoulStandingFl)) { + _raoulAction = 1; + random = _vm->getRandomNumber(1, 2); + if (random == 1) + _raoulAction = 2; + } + break; + + case 80: + _vm->_gameConv->release(); + _game._player._visible = false; + _raoulAction = 1; + _game.syncTimers(SYNC_ANIM, _globals._animationIndexes[3], SYNC_PLAYER, 0); + _scene->setAnimFrame(_globals._animationIndexes[3], 1); + break; + + case 82: + _florentStatus = 0; + _scene->_sequences.addTimer(120, 84); + _vm->_gameConv->hold(); + break; + + case 84: + _game._player.walk(Common::Point(201, 120), FACING_SOUTH); + _game._player.setWalkTrigger(80); + break; + + case 86: + _raoulAction = 5; + _vm->_gameConv->hold(); + break; + + case 92: + _game._player.walk(Common::Point(68, 142), FACING_SOUTHWEST); + _game._player.setWalkTrigger(94); + break; + + case 94: + _globals[kStopWalkerDisabled] = true; + _globals[kFlorentNameIsKnown] = 2; + _vm->_gameConv->release(); + break; + + case 96: + _vm->_gameConv->hold(); + break; + + case 98: + _florentStatus = 3; + break; + + case 100: + _florentStatus = 1; + _globals[kStopWalkerDisabled] = false; + break; + + default: + break; + } + + if ((_action._activeAction._verbId != 3) && (_action._activeAction._verbId != 4) && (_action._activeAction._verbId != 19) && + (_action._activeAction._verbId != 28) && (_action._activeAction._verbId != 29) && (_action._activeAction._verbId != 27) && + (_action._activeAction._verbId != 30) && (_action._activeAction._verbId != 26)) + _vm->_gameConv->setInterlocutorTrigger(66); + + _vm->_gameConv->setHeroTrigger(62); + _raoulCount = 0; + _florentCount = 0; +} + +void Scene113::handleLoveConversation() { + int random; + + switch (_action._activeAction._verbId) { + case 1: + case 2: + if (!_prevent1) { + _vm->_gameConv->setInterlocutorTrigger(82); + _prevent1 = true; + } + break; + + case 21: + if (!_armsOutFl) { + _dayStatus = 4; + _scene->_sequences.addTimer(1, 70); + _scene->_userInterface.emptyConversationList(); + _scene->_userInterface.setup(kInputConversation); + _scene->_hotspots.activate(NOUN_CHRISTINE, false); + _vm->_gameConv->hold(); + } + break; + + case 27: + _vm->_sound->command(34); + _globals[kLeaveAngelMusicOn] = true; + break; + + case 31: + if (!_musicPlaying) { + _vm->_gameConv->hold(); + _dayStatus = 7; + _musicPlaying = true; + _christineHotspotId1 = _scene->_dynamicHotspots.add(NOUN_CHRISTINE, VERB_WALK_TO, SYNTAX_SINGULAR_FEM, EXT_NONE, Common::Rect(0, 0, 0, 0)); + _scene->_dynamicHotspots[_christineHotspotId1]._articleNumber = PREP_ON; + _scene->setDynamicAnim(_christineHotspotId1, _globals._animationIndexes[0], 14); + _scene->setDynamicAnim(_christineHotspotId1, _globals._animationIndexes[0], 16); + } + break; + } + + switch (_game._trigger) { + case 62: + if (_action._activeAction._verbId != 0) { + if (_standingAndTalking) { + _dayStatus = 6; + } else if (_dayStatus != 4) { + _dayStatus = 1; + _raoulAction = 0; + _dayWantsToTalk = false; + } + } + break; + + case 66: + if (_standingAndTalking) { + _dayStatus = 5; + + } else { + if (_action._activeAction._verbId == 19) { + _dayStatus = 3; + } else { + _dayStatus = 1; + _dayWantsToTalk = true; + } + + if (_raoulAction != 3) { + _raoulAction = 1; + random = _vm->getRandomNumber(1, 2); + if (random == 1) { + _raoulAction = 2; + } + } + } + break; + + case 70: + if (_armsOutFl) { + _vm->_gameConv->release(); + _vm->_gameConv->setInterlocutorTrigger(76); + } + break; + + case 72: + if (_afterKissFl) + _vm->_gameConv->release(); + else + _scene->_sequences.addTimer(1, 72); + break; + + case 76: + _vm->_gameConv->hold(); + _scene->_sequences.addTimer(1, 72); + break; + + case 78: + if (_armsOutFl) { + _vm->_gameConv->release(); + _vm->_gameConv->setInterlocutorTrigger(76); + } + break; + + case 80: + _vm->_gameConv->release(); + _game._player._visible = false; + _raoulAction = 1; + _game.syncTimers(SYNC_ANIM, _globals._animationIndexes[1], SYNC_PLAYER, 0); + _scene->setAnimFrame(_globals._animationIndexes[1], 1); + break; + + case 82: + _scene->_sequences.addTimer(120, 84); + _vm->_gameConv->hold(); + _dayStatus = 1; + _dayWantsToTalk = true; + break; + + case 84: + _game._player.walk(Common::Point(201, 120), FACING_SOUTH); + _game._player.setWalkTrigger(80); + break; + + default: + break; + } + + if ((_action._activeAction._verbId != 21) && (_action._activeAction._verbId != 1) && (_action._activeAction._verbId != 2)) + _vm->_gameConv->setInterlocutorTrigger(66); + + _vm->_gameConv->setHeroTrigger(62); + + _raoulCount = 0; + _dayCount = 0; + _standCount = 0; +} + +/*------------------------------------------------------------------------*/ + +Scene114::Scene114(MADSEngine *vm) : Scene1xx(vm) { +} + +void Scene114::synchronize(Common::Serializer &s) { + Scene1xx::synchronize(s); +} + +void Scene114::setup() { + if (_globals[kCurrentYear] == 1993) + _scene->_variant = 1; + + setPlayerSpritesPrefix(); + setAAName(); +} + +void Scene114::enter() { + if (_globals[kCurrentYear] == 1993) { + _globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('z', -1)); + } else if (_game._objects.isInRoom(OBJ_ROPE) && !_game._objects.isInInventory(OBJ_ROPE_WITH_HOOK)) { + _globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('f', 0)); + _globals._spriteIndexes[1] = _scene->_sprites.addSprites("*RDR_9"); + } + + _globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('a', 0)); + + if ((_game._objects.isInRoom(OBJ_ROPE)) && (_globals[kCurrentYear] == 1881) && !_game._objects.isInInventory(OBJ_ROPE_WITH_HOOK)) { + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 2); + } else + _scene->_hotspots.activate(NOUN_ROPE, false); + + if (_globals[kCurrentYear] == 1993) { + _scene->_hotspots.activate(NOUN_CYLINDER, false); + _scene->_hotspots.activate(NOUN_MANNEQUINS, false); + _scene->_hotspots.activate(NOUN_PROP, false); + _scene->_hotspots.activate(NOUN_BUST, false); + _scene->_hotspots.activate(NOUN_SCAFFOLDING, false); + _scene->drawToBackground(_globals._spriteIndexes[0], 1, Common::Point(-32000, -32000), 0, 100); + } else { + _scene->_hotspots.activate(NOUN_BOXES, false); + _scene->_hotspots.activate(NOUN_DINETTE_SET, false); + _scene->_hotspots.activate(NOUN_CRATE, false); + _scene->_hotspots.activate(NOUN_CASES, false); + } + + if ((_scene->_priorSceneId == 105) || (_scene->_priorSceneId != RETURNING_FROM_LOADING)) { + _game._player._playerPos = Common::Point(218, 123); + _game._player._facing = FACING_WEST; + } + + sceneEntrySound(); +} + +void Scene114::step() { +} + +void Scene114::actions() { + if (_action.isAction(VERB_CLIMB_UP, NOUN_CIRCULAR_STAIRCASE)) { + switch (_game._trigger) { + case 0: + _game._player._stepEnabled = false; + _game._player._visible = false; + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('u', 1), 1); + _game.syncTimers(SYNC_ANIM, _globals._animationIndexes[0], SYNC_PLAYER, 0); + break; + + case 1: + _scene->_nextSceneId = 105; + break; + + default: + break; + } + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_CLIMB_UP, NOUN_CIRCULAR_STAIRCASE)) { + _scene->_nextSceneId = 105; + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_TAKE, NOUN_ROPE) && (_game._objects.isInRoom(OBJ_ROPE) || _game._trigger)) { + switch (_game._trigger) { + case (0): + _globals[kPlayerScore] += 5; + _game._player._stepEnabled = false; + _game._player._visible = false; + _globals._sequenceIndexes[1] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[1], false, 6, 2); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[1], 1, 3); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[1], true); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_SPRITE, 3, 1); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 2); + break; + + case 1: + _scene->deleteSequence(_globals._sequenceIndexes[2]); + _scene->_hotspots.activate(NOUN_ROPE, false); + _game._objects.addToInventory(OBJ_ROPE); + _vm->_sound->command(26); + break; + + case 2: + _game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[1]); + _game._player._visible = true; + _scene->_sequences.addTimer(20, 3); + break; + + case 3: + _vm->_dialogs->showItem(OBJ_ROPE, 807, 0); + _game._player._stepEnabled = true; + break; + + default: + break; + } + _action._inProgress = false; + return; + } + + if (_action._lookFlag) { + _vm->_dialogs->show(11410); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_LOOK) || _action.isAction(VERB_LOOK_AT)) { + if (_action.isObject(NOUN_FLOOR)) { + _vm->_dialogs->show(11411); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_CIRCULAR_STAIRCASE)) { + _vm->_dialogs->show(11412); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_ROPE) && _game._objects.isInRoom(OBJ_ROPE)) { + _vm->_dialogs->show(11413); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_WALL)) { + _vm->_dialogs->show(11414); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_MANNEQUINS)) { + _vm->_dialogs->show(11415); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_FLAT)) { + _vm->_dialogs->show(11416); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_SCAFFOLDING)) { + _vm->_dialogs->show(11417); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_MUMMY_PROP)) { + if (_globals[kCurrentYear] == 1993) + _vm->_dialogs->show(11418); + else + _vm->_dialogs->show(11433); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_CRATES)) { + if (_globals[kCurrentYear] == 1993) + _vm->_dialogs->show(11419); + else + _vm->_dialogs->show(11434); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_CRATE)) { + if (_globals[kCurrentYear] == 1993) + _vm->_dialogs->show(11420); + else + _vm->_dialogs->show(11435); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_CARTONS)) { + if (_globals[kCurrentYear] == 1993) + _vm->_dialogs->show(11421); + else + _vm->_dialogs->show(11436); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_CARTON)) { + if (_globals[kCurrentYear] == 1993) + _vm->_dialogs->show(11422); + else + _vm->_dialogs->show(11437); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_PROP)) { + _vm->_dialogs->show(11423); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_BUST)) { + _vm->_dialogs->show(11424); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_MUG)) { + _vm->_dialogs->show(11425); + _action._inProgress = false; + return; + } + + if ((_action.isObject(NOUN_CASES)) || (_action.isObject(NOUN_CASE))) { + _vm->_dialogs->show(11426); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_BOXES) || _action.isObject(NOUN_BOX)) { + if (_globals[kCurrentYear] == 1993) + _vm->_dialogs->show(11427); + else + _vm->_dialogs->show(11439); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_BOX)) { + if (_globals[kCurrentYear] == 1881) { + _vm->_dialogs->show(11439); + _action._inProgress = false; + return; + } + } + + if (_action.isObject(NOUN_DINETTE_SET)) { + _vm->_dialogs->show(11428); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_CYLINDER)) { + _vm->_dialogs->show(11429); + _action._inProgress = false; + return; + } + } + + if (_action.isAction(VERB_OPEN, NOUN_CARTONS)) { + if (_globals[kCurrentYear] == 1993) + _vm->_dialogs->show(11421); + else + _vm->_dialogs->show(11436); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_OPEN, NOUN_CARTON)) { + if (_globals[kCurrentYear] == 1993) + _vm->_dialogs->show(11422); + else + _vm->_dialogs->show(11437); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_OPEN, NOUN_CRATES)) { + if (_globals[kCurrentYear] == 1993) + _vm->_dialogs->show(11419); + else + _vm->_dialogs->show(11434); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_OPEN, NOUN_CRATE)) { + if (_globals[kCurrentYear] == 1993) + _vm->_dialogs->show(11419); + else + _vm->_dialogs->show(11435); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_OPEN, NOUN_CASES)) { + _vm->_dialogs->show(11426); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_OPEN, NOUN_BOXES) || _action.isAction(VERB_OPEN, NOUN_BOX)) { + if (_globals[kCurrentYear] == 1993) + _vm->_dialogs->show(11427); + else + _vm->_dialogs->show(11439); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_TAKE, NOUN_MUG)) { + _vm->_dialogs->show(11430); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_OPEN, NOUN_MUMMY_PROP)) { + _vm->_dialogs->show(11431); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_TALK_TO, NOUN_MUMMY_PROP)) { + _vm->_dialogs->show(11432); + _action._inProgress = false; + return; + } +} + +void Scene114::preActions() { +} + +/*------------------------------------------------------------------------*/ + +Scene150::Scene150(MADSEngine *vm) : Scene1xx(vm) { +} + +void Scene150::synchronize(Common::Serializer &s) { + Scene1xx::synchronize(s); +} + +void Scene150::setup() { + setPlayerSpritesPrefix(); + setAAName(); +} + +void Scene150::enter() { + warning("TODO: Switch to letter box view. See definition of MADS_MENU_Y"); + + _game._player._stepEnabled = false; + _game._player._visible = false; + + if (_scene->_priorSceneId == 113) + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('l', 1), 1); + else if (_scene->_priorSceneId == 203) { + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('f', 1), 2); + sceneEntrySound(); + } else if (_scene->_priorSceneId == 306) + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('e', 1), 4); + else if (_scene->_priorSceneId == 208) + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('h', 1), 3); + else + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('q', 1), 5); +} + +void Scene150::step() { + if (_game._trigger == 1) + _scene->_nextSceneId = 203; + + if (_game._trigger == 2) + _scene->_nextSceneId = 111; + + if (_game._trigger == 4) + _scene->_nextSceneId = 204; + + if (_game._trigger == 3) { + _globals[kJacquesStatus] = 1; + _scene->_nextSceneId = 205; + } + + if (_game._trigger == 5) + _game._winStatus = 1; + + if (_scene->_nextSceneId != _scene->_currentSceneId) { + byte pal[768]; + _vm->_palette->getFullPalette(pal); + Common::fill(&pal[12], &pal[756], 0); + _vm->_palette->setFullPalette(pal); + } +} + +void Scene150::actions() { +} + +void Scene150::preActions() { +} /*------------------------------------------------------------------------*/ |