/* ScummVM - Graphic Adventure Engine * * ScummVM is the legal property of its developers, whose names * are too numerous to list here. Please refer to the COPYRIGHT * file distributed with this source distribution. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * 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 * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ #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" namespace MADS { namespace Phantom { void Scene1xx::setAAName() { _game._aaName = Resources::formatAAName(_globals[kTempInterface]); _vm->_palette->setEntry(254, 43, 47, 51); } void Scene1xx::sceneEntrySound() { 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(); setAAName(); _scene->addActiveVocab(NOUN_MONSIEUR_BRIE); } void Scene101::enter() { _vm->_disableFastwalk = true; if (_scene->_priorSceneId != RETURNING_FROM_DIALOG) { _chanStatus = _wipeStatus = -1; _startWalkingFl = _startWalking0Fl = false; _anim0Running = _anim1Running = false; _startSittingFl = false; } // Load conversations _vm->_gameConv->load(0); _vm->_gameConv->load(1); if (_globals[kCurrentYear] == 1993) { _globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('z', -1)); _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, 1); _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); } else { _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)); } sceneEntrySound(); } void Scene101::step() { 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)) { 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)) { if ((_globals[kBrieTalkStatus] == 2) || _startWalkingFl) _game._player._walkOffScreenSceneId = 202; else { _vm->_gameConv->run(0); _game._player._needToWalk = false; } } 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() { if (_vm->_gameConv->activeConvId() == 0) handleConversation0(); else if (_vm->_gameConv->activeConvId() == 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)) { _vm->_dialogs->show(10113); } else if (_action.isObject(NOUN_BACK_WALL)) { _vm->_dialogs->show(10114); } else if (_action.isObject(NOUN_SIDE_WALL)) { _vm->_dialogs->show(10115); } else if (_action.isObject(NOUN_SEATS)) { 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)) { _vm->_dialogs->show(10118); } else if (_action.isObject(NOUN_MONSIEUR_BRIE)) { _vm->_dialogs->show(10120); } } else if (_action.isAction(VERB_TALK_TO, NOUN_MONSIEUR_BRIE)) { if (_globals[kBrieTalkStatus] == 2) _vm->_dialogs->show(10122); } 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() { if (_scene->getAnimFrame(_globals._animationIndexes[0]) == _callingFrame) return; _callingFrame = _scene->getAnimFrame(_globals._animationIndexes[0]); int 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->activeConvId() == 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->activeConvId() == 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) { _anim0Running = false; } void Scene102::synchronize(Common::Serializer &s) { Scene1xx::synchronize(s); s.syncAsByte(_anim0Running); } void Scene102::setup() { setPlayerSpritesPrefix(); setAAName(); } void Scene102::enter() { _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)); _scene->drawToBackground(_globals._spriteIndexes[0], 1, Common::Point(-32000, -32000), 0, 100); _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); } else { _scene->_hotspots.activate(NOUN_CHANDELIER, false); } if (_scene->_priorSceneId == 101) { _game._player._playerPos = Common::Point(97, 79); _game._player._facing = FACING_SOUTHEAST; _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 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; _anim0Running = true; _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('d', 1), 60); } else if (_scene->_priorSceneId == -1) { _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 4); _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 14); } sceneEntrySound(); } void Scene102::step() { 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)) _game._player.walk(Common::Point(282, 145), FACING_EAST); } void Scene102::actions() { if (_action.isAction(VERB_WALK_DOWN, NOUN_AISLE)) { _scene->_nextSceneId = 101; } 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 (_anim0Running) { _scene->_sequences.addTimer(15, 70); _game._player._stepEnabled = false; } else { switch (_game._trigger) { case 70: // try again case 0: _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; } } } 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)) if (_globals[kCurrentYear] == 1881) _vm->_dialogs->show(10212); else _vm->_dialogs->show(10230); else if (_action.isObject(NOUN_ORCHESTRA_DOOR)) _vm->_dialogs->show(10213); else if (_action.isObject(NOUN_CONDUCTORS_STAND)) _vm->_dialogs->show(10214); else if (_action.isObject(NOUN_MUSIC_STAND) || _action.isObject(NOUN_MUSIC_STANDS)) _vm->_dialogs->show(10215); else if (_action.isObject(NOUN_PROMPTERS_BOX)) _vm->_dialogs->show(10217); else if (_action.isObject(NOUN_STAGE)) _vm->_dialogs->show(10218); else if (_action.isObject(NOUN_APRON)) _vm->_dialogs->show(10219); else if (_action.isObject(NOUN_SIDE_WALL)) _vm->_dialogs->show(10220); else if (_action.isObject(NOUN_FOLDING_CHAIRS)) _vm->_dialogs->show(10221); else if (_action.isObject(NOUN_AISLE)) _vm->_dialogs->show(10222); else if (_action.isObject(NOUN_PROSCENIUM_ARCH)) _vm->_dialogs->show(10223); else if (_action.isObject(NOUN_ACT_CURTAIN)) _vm->_dialogs->show(10224); else if (_action.isObject(NOUN_IN_ONE)) _vm->_dialogs->show(10225); else if (_action.isObject(NOUN_IN_TWO)) _vm->_dialogs->show(10226); else if (_action.isObject(NOUN_LEG)) _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->load(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->activeConvId() == 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 (_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->load(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->activeConvId() == 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->load(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->activeConvId() == 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->activeConvId() == 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; _currentFloor = -1; } void Scene109::synchronize(Common::Serializer &s) { Scene1xx::synchronize(s); s.syncAsByte(_anim0ActvFl); s.syncAsByte(_anim1ActvFl); s.syncAsByte(_anim2ActvFl); s.syncAsByte(_anim3ActvFl); s.syncAsSint16LE(_currentFloor); } 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._camY.camPanTo(156); } if (_anim1ActvFl) { if (_scene->_animation[_globals._animationIndexes[1]]->getCurrentFrame() == 80) _game._camY.camPanTo(0); } if (_anim2ActvFl) { if (_scene->_animation[_globals._animationIndexes[2]]->getCurrentFrame() == 7) _game._camY.camPanTo(312); } if (_anim3ActvFl) { if (_scene->_animation[_globals._animationIndexes[3]]->getCurrentFrame() == 14) _game._camY.camPanTo(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->load(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->activeConvId() == 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->load(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->activeConvId() == 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; _christineHotspotId1 = -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(_christineHotspotId1); 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->load(4); if ((_globals[kDoneBrieConv203] == 1) || (_globals[kDoneBrieConv203] == 3)) _vm->_gameConv->load(6); } else { _globals._spriteIndexes[4] = _scene->_sprites.addSprites("*faceral", false); _globals._spriteIndexes[5] = _scene->_sprites.addSprites("*facecrsd", false); _vm->_gameConv->load(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->activeConvId() == 13) { handleLoveConversation(); _action._inProgress = false; return; } if (_vm->_gameConv->activeConvId() == 4) { handleFlorentConversation(); _action._inProgress = false; return; } if (_vm->_gameConv->activeConvId() == 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() { 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)) { if (_vm->getRandomNumber(1, 5) == 1) _florentStatus = 0; } if ((_raoulAction != 3) && (_raoulAction != 5) && (_raoulAction != 4) && (!_raoulStandingFl)) { _raoulAction = 1; if (_vm->getRandomNumber(1, 2) == 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() { 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; if (_vm->getRandomNumber(1, 2) == 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() { } /*------------------------------------------------------------------------*/ } // End of namespace Phantom } // End of namespace MADS