diff options
Diffstat (limited to 'engines/mads/phantom/phantom_scenes2.cpp')
-rw-r--r-- | engines/mads/phantom/phantom_scenes2.cpp | 7001 |
1 files changed, 7001 insertions, 0 deletions
diff --git a/engines/mads/phantom/phantom_scenes2.cpp b/engines/mads/phantom/phantom_scenes2.cpp new file mode 100644 index 0000000000..8789553962 --- /dev/null +++ b/engines/mads/phantom/phantom_scenes2.cpp @@ -0,0 +1,7001 @@ +/* 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_scenes2.h" + +namespace MADS { + +namespace Phantom { + +void Scene2xx::setAAName() { + _game._aaName = Resources::formatAAName(_globals[kTempInterface]); + _vm->_palette->setEntry(254, 43, 47, 51); +} + +void Scene2xx::sceneEntrySound() { + if (!_vm->_musicFlag) + return; + + switch (_scene->_nextSceneId) { + case 206: + if (!_globals[kKnockedOverHead]) + _vm->_sound->command(16); + break; + + case 208: + _vm->_sound->command(34); + break; + + default: + if (_scene->_nextSceneId != 250) + _vm->_sound->command(16); + break; + } +} + +void Scene2xx::setPlayerSpritesPrefix() { + _vm->_sound->command(5); + + if (_scene->_nextSceneId == 208) + _game._player._spritesPrefix = ""; + else { + 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; +} + +/*------------------------------------------------------------------------*/ + +Scene201::Scene201(MADSEngine *vm) : Scene2xx(vm) { + _anim0ActvFl = false; + _anim1ActvFl = false; + _needHoldFl = false; + _sellerCount = -1; + _sellerStatus = -1; + _sellerFrame = -1; + _raoulFrame = -1; + _raoulStatus = -1; +} + +void Scene201::synchronize(Common::Serializer &s) { + Scene2xx::synchronize(s); + + s.syncAsByte(_anim0ActvFl); + s.syncAsByte(_anim1ActvFl); + s.syncAsByte(_needHoldFl); + s.syncAsSint16LE(_sellerCount); + s.syncAsSint16LE(_sellerStatus); + s.syncAsSint16LE(_sellerFrame); + s.syncAsSint16LE(_raoulFrame); + s.syncAsSint16LE(_raoulStatus); +} + +void Scene201::setup() { + setPlayerSpritesPrefix(); + setAAName(); +} + +void Scene201::enter() { + if (_scene->_priorSceneId != RETURNING_FROM_LOADING) { + _anim0ActvFl = false; + _anim1ActvFl = false; + } + + _sellerCount = 0; + _needHoldFl = false; + + _vm->_gameConv->load(16); + _globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('x', 0)); + _globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('f', 0)); + + if (_globals[kTicketPeoplePresent]) { + _globals._animationIndexes[1] = _scene->loadAnimation(formAnimName('s', 1), 0); + _anim1ActvFl = true; + _sellerStatus = 2; + _scene->setAnimFrame(_globals._animationIndexes[1], 5); + } else { + _scene->_hotspots.activate(NOUN_TICKET_SELLER, false); + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); + } + + if (_vm->_gameConv->restoreRunning() == 16) { + _game._player._playerPos = Common::Point(72, 101); + _game._player._facing = FACING_NORTHWEST; + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('r', 1), 0); + _anim0ActvFl = true; + _raoulStatus = 1; + _game._player._visible = false; + + _vm->_gameConv->run(16); + _vm->_gameConv->exportPointer(&_globals[kPlayerScore]); + _vm->_gameConv->exportPointer(&_globals[kChristineToldEnvelope]); + } + + if ((_scene->_priorSceneId == 202) || (_scene->_priorSceneId != RETURNING_FROM_LOADING)) { + _game._player._playerPos = Common::Point(314, 86); + _game._player.walk(Common::Point(266, 98), FACING_SOUTHWEST); + } + + sceneEntrySound(); +} + +void Scene201::step() { + if (_anim0ActvFl) + handleRaoulAnimation(); + + if (_anim1ActvFl) + handleSellerAnimation(); + + if ((_needHoldFl) && (_vm->_gameConv->activeConvId() != 16)) { + _game._player._stepEnabled = false; + _needHoldFl = false; + } +} + +void Scene201::actions() { + if (_vm->_gameConv->activeConvId() == 16) { + handleConversation(); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_WALK_THROUGH, NOUN_ARCHWAY)) { + _scene->_nextSceneId = 202; + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_TALK_TO, NOUN_TICKET_SELLER)) { + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('r', 1), 0); + _anim0ActvFl = true; + _raoulStatus = 1; + _vm->_gameConv->run(16); + _vm->_gameConv->exportPointer(&_globals[kPlayerScore]); + _vm->_gameConv->exportPointer(&_globals[kChristineToldEnvelope]); + _game._player._visible = false; + _action._inProgress = false; + return; + } + + if (_action._lookFlag) { + if (_globals[kCurrentYear] == 1993) + _vm->_dialogs->show(20110); + else + _vm->_dialogs->show(20111); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_LOOK) || _action.isAction(VERB_LOOK_AT)) { + if (_action.isObject(NOUN_FLOOR)) { + _vm->_dialogs->show(20112); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_WALL)) { + _vm->_dialogs->show(20113); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_BUST)) { + _vm->_dialogs->show(20114); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_PEDESTAL)) { + _vm->_dialogs->show(20115); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_BARRIER)) { + _vm->_dialogs->show(20116); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_PLACARD)) { + if (_globals[kCurrentYear] == 1993) + _vm->_dialogs->show(20117); + else + _vm->_dialogs->show(20118); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_TICKET_WINDOW)) { + if (_globals[kCurrentYear] == 1993) + _vm->_dialogs->show(20119); + else + _vm->_dialogs->show(20120); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_ARCHWAY)) { + _vm->_dialogs->show(20121); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_TICKET_SELLER)) { + _vm->_dialogs->show(20123); + _action._inProgress = false; + return; + } + } + + if (_action.isAction(VERB_TAKE, NOUN_TICKET_SELLER)) { + _vm->_dialogs->show(20124); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_TALK_TO, NOUN_BUST)) { + _vm->_dialogs->show(20122); + _action._inProgress = false; + return; + } +} + +void Scene201::preActions() { + if ((_action.isAction(VERB_LOOK) || _action.isAction(VERB_LOOK_AT)) && _action.isObject(NOUN_PLACARD)) + _game._player.walk(Common::Point(147, 104), FACING_NORTHWEST); +} + +void Scene201::handleRaoulAnimation() { + if (_scene->_animation[_globals._animationIndexes[0]]->getCurrentFrame() == _raoulFrame) + return; + + _raoulFrame = _scene->_animation[_globals._animationIndexes[0]]->getCurrentFrame(); + int random = -1; + int resetFrame = -1; + + switch (_raoulFrame) { + case 1: + case 19: + case 49: + random = _vm->getRandomNumber(4, 50); + + switch (_raoulStatus) { + case 0: + random = 1; + break; + + case 2: + random = 2; + _game._player._stepEnabled = false; + break; + + case 3: + random = 3; + break; + } + + switch (random) { + case 1: + resetFrame = 9; + _raoulStatus = 1; + break; + + case 2: + resetFrame = 1; + break; + + case 3: + _game._player._visible = true; + _sellerStatus = 2; + _anim0ActvFl = false; + resetFrame = 49; + _game._player._stepEnabled = true; + _needHoldFl = false; + break; + + case 4: + resetFrame = 19; + break; + + default: + resetFrame = 0; + break; + + } + break; + + case 5: + _scene->deleteSequence(_globals._sequenceIndexes[1]); + _game._objects.addToInventory(OBJ_ENVELOPE); + _vm->_sound->command(26); + _vm->_dialogs->showItem(OBJ_ENVELOPE, 834, 0); + break; + + case 9: + _game._player._visible = true; + _anim0ActvFl = false; + _game._player._stepEnabled = true; + resetFrame = 49; + break; + + case 23: + case 35: + case 45: + random = _vm->getRandomNumber(3, 70); + + switch (_raoulStatus) { + case 0: + random = 2; + break; + + case 2: + case 3: + random = 1; + break; + + default: + break; + } + + switch (random) { + case 1: + resetFrame = 45; + break; + + case 2: + resetFrame = 23; + _raoulStatus = 1; + break; + + case 3: + resetFrame = 35; + break; + + default: + resetFrame = 22; + break; + } + break; + + default: + break; + } + + if (resetFrame >= 0) { + _scene->setAnimFrame(_globals._animationIndexes[0], resetFrame); + _raoulFrame = resetFrame; + } +} + +void Scene201::handleSellerAnimation() { + if (_scene->_animation[_globals._animationIndexes[1]]->getCurrentFrame() == _sellerFrame ) + return; + + int random = -1; + int resetFrame = -1; + _sellerFrame = _scene->_animation[_globals._animationIndexes[1]]->getCurrentFrame(); + + switch (_sellerFrame ) { + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 10: + if (_sellerFrame == 10) + _raoulStatus = 2; + + switch (_sellerStatus) { + case 0: + random = 1; + break; + + case 1: + random = _vm->getRandomNumber(1, 5); + ++_sellerCount; + if (_sellerCount > 30) { + _sellerStatus = 0; + random = 6; + } + break; + + case 2: + if (_sellerFrame == 6) + random = 6; + else if (_sellerFrame == 7) + random = 7; + else + random = _vm->getRandomNumber(6, 7); + + ++_sellerCount; + if (_sellerCount > 30) { + _sellerCount = 0; + random = _vm->getRandomNumber(6, 7); + } + break; + + case 3: + random = 8; + break; + + default: + break; + } + + switch (random) { + case 1: + resetFrame = 0; + break; + + case 2: + resetFrame = 1; + break; + + case 3: + resetFrame = 2; + break; + + case 4: + resetFrame = 3; + break; + + case 5: + resetFrame = 4; + break; + + case 6: + resetFrame = 5; + break; + + case 7: + resetFrame = 6; + break; + + case 8: + resetFrame = 7; + break; + + default: + break; + } + break; + + case 9: + _globals._sequenceIndexes[1] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[1], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[1], 1); + _sellerStatus = 2; + break; + + default: + break; + } + + if (resetFrame >= 0) { + _scene->setAnimFrame(_globals._animationIndexes[1], resetFrame); + _sellerFrame = resetFrame; + } +} + +void Scene201::handleConversation() { + bool interlocutorFl = false; + bool heroFl = false; + + switch (_action._activeAction._verbId) { + case 4: + case 12: + case 13: + case 14: + _vm->_gameConv->setInterlocutorTrigger(90); + _needHoldFl = true; + interlocutorFl = true; + break; + + case 6: + _sellerStatus = 3; + _needHoldFl = true; + interlocutorFl = true; + heroFl = true; + break; + + default: + break; + } + + switch (_game._trigger) { + case 65: + if (_sellerStatus != 3) + _sellerStatus = 1; + break; + + case 70: + if (_sellerStatus != 3) { + _sellerStatus = 0; + _raoulStatus = 0; + } + break; + + case 90: + _vm->_gameConv->setHeroTrigger(91); + heroFl = true; + break; + + case 91: + _raoulStatus = 3; + heroFl = true; + interlocutorFl = true; + break; + + default: + break; + } + + if (!heroFl) + _vm->_gameConv->setHeroTrigger(70); + + if (!interlocutorFl) + _vm->_gameConv->setInterlocutorTrigger(65); + + _sellerCount = 0; +} + +/*------------------------------------------------------------------------*/ + +Scene202::Scene202(MADSEngine *vm) : Scene2xx(vm) { + _ticketGivenFl = false; + _anim0ActvFl = false; + _anim1ActvFl = false; + _skipWalkFl = false; + + for (int i = 0; i < 5; i++) { + _chandeliersPosX[i] = -1; + _chandeliersHotspotId[i] = -1; + } + + _conversationCount = -1; + _usherStatus = -1; + _usherFrame = -1; + _usherCount = -1; + _degasStatus = -1; + _degasFrame = -1; +} + +void Scene202::synchronize(Common::Serializer &s) { + Scene2xx::synchronize(s); + + s.syncAsByte(_ticketGivenFl); + s.syncAsByte(_anim0ActvFl); + s.syncAsByte(_anim1ActvFl); + s.syncAsByte(_skipWalkFl); + + for (int i = 0; i < 5; i++) { + s.syncAsSint16LE(_chandeliersPosX[i]); + s.syncAsSint16LE(_chandeliersHotspotId[i]); + } + + s.syncAsSint16LE(_conversationCount); + s.syncAsSint16LE(_usherStatus); + s.syncAsSint16LE(_usherFrame); + s.syncAsSint16LE(_usherCount); + s.syncAsSint16LE(_degasStatus); + s.syncAsSint16LE(_degasFrame); +} + +void Scene202::setup() { + setPlayerSpritesPrefix(); + setAAName(); + + if (_globals[kTicketPeoplePresent] == 2) + _scene->_variant = 1; + + _scene->addActiveVocab(NOUN_CHANDELIER); + _scene->addActiveVocab(NOUN_EDGAR_DEGAS); +} + +void Scene202::enter() { + _vm->_disableFastwalk = true; + _ticketGivenFl = false; + _chandeliersPosX[0] = 77; + _chandeliersPosX[1] = 192; + _chandeliersPosX[2] = 319; + _chandeliersPosX[3] = 445; + _chandeliersPosX[4] = 560; + + if (_globals[kTicketPeoplePresent] == 2) + _globals[kMakeRichLeave203] = true; + + if ((_globals[kDegasNameIsKnown]) || (_globals[kCurrentYear] == 1993)) + _scene->_hotspots.activate(NOUN_GENTLEMAN, false); + + for (int i = 0; i < 5; i++) { + _globals._sequenceIndexes[2 + i] = -1; + _chandeliersHotspotId[i] = -1; + } + + if (_scene->_priorSceneId != RETURNING_FROM_LOADING) { + _anim0ActvFl = false; + _anim1ActvFl = false; + _skipWalkFl = false; + } + + _conversationCount = 0; + _vm->_gameConv->load(17); + _vm->_gameConv->load(9); + + _globals._spriteIndexes[1] = _scene->_sprites.addSprites("*RDR_9"); + _globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('x', 0)); + _globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('f', 0)); + + if (_globals[kTicketPeoplePresent] == 2) { + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('b', 0), 0); + _anim0ActvFl = true; + _usherStatus = 2; + } else + _scene->_hotspots.activate(NOUN_USHER, false); + + if (_globals[kDegasNameIsKnown]) + _anim1ActvFl = false; + + if ((_globals[kCurrentYear] == 1881) && (!_globals[kDegasNameIsKnown])) { + _globals._animationIndexes[1] = _scene->loadAnimation(formAnimName('d', 1), 100); + _anim1ActvFl = true; + _degasStatus = 4; + } + + if (_vm->_gameConv->restoreRunning() == 17) { + _vm->_gameConv->run(17); + _vm->_gameConv->exportValue(_game._objects.isInInventory(OBJ_TICKET)); + _vm->_gameConv->exportValue(0); + _game._player._playerPos = Common::Point(569, 147); + _game._player._facing = FACING_NORTHEAST; + _globals[kWalkerConverse] = _vm->getRandomNumber(1, 4); + } + + if (_vm->_gameConv->restoreRunning() == 9) { + _vm->_gameConv->run(9); + _vm->_gameConv->exportPointer(&_globals[kPlayerScore]); + _game._player._playerPos = Common::Point(400, 141); + _game._player._facing = FACING_NORTHWEST; + _globals[kWalkerConverse] = _vm->getRandomNumber(1, 4); + } + + if (_scene->_priorSceneId == 201) { + _game._player._playerPos = Common::Point(3, 141); + _game._player.walk(Common::Point(40, 141), FACING_EAST); + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); + } else if (_scene->_priorSceneId == 203) { + _game._player._playerPos = Common::Point(134, 112); + _game._player._facing = FACING_SOUTH; + _game._player._stepEnabled = false; + _game._player.walk(Common::Point(126, 123), FACING_SOUTH); + _game._player.setWalkTrigger(60); + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, 5); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); + } else if (_scene->_priorSceneId == 204) { + _game._player._playerPos = Common::Point(253, 117); + _game._player.walk(Common::Point(255, 133), FACING_SOUTH); + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); + _scene->setCamera(Common::Point(70, 0)); + } else if (_scene->_priorSceneId == 205) { + _game._player._playerPos = Common::Point(510, 117); + _game._player.walk(Common::Point(512, 133), FACING_SOUTH); + _scene->setCamera(Common::Point(320, 0)); + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); + } else if ((_scene->_priorSceneId == 101) || (_scene->_priorSceneId != RETURNING_FROM_LOADING)) { + _game._player._playerPos = Common::Point(636, 143); + _game._player.walk(Common::Point(598, 143), FACING_WEST); + _scene->setCamera(Common::Point(320, 0)); + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); + } else if (_scene->_priorSceneId == RETURNING_FROM_LOADING) { + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, -1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); + } + + handleChandeliersPositions(); + sceneEntrySound(); +} + +void Scene202::step() { + if (_game._camX._currentFrameFl) + handleChandeliersPositions(); + + if (_anim0ActvFl) + handleUsherAnimation(); + + if (_game._trigger == 100) + _anim1ActvFl = false; + + if (_anim1ActvFl) + handleDegasAnimation(); + + if ((_globals[kCurrentYear] == 1881) && !_globals[kDegasNameIsKnown] && (_game._player._playerPos.x < 405) && !_skipWalkFl) { + _game._player.walk(Common::Point(400, 141), FACING_NORTHWEST); + _game._player.setWalkTrigger(90); + _game._player._stepEnabled = false; + _skipWalkFl = true; + } + + if (_game._trigger == 90) { + _game._player._stepEnabled = true; + _vm->_gameConv->run(9); + _vm->_gameConv->exportPointer(&_globals[kPlayerScore]); + _globals[kWalkerConverse] = _vm->getRandomNumber(1, 4); + } + + 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, 5); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_EXPIRE, 0, 61); + break; + + case 61: + _vm->_sound->command(25); + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); + _game._player._stepEnabled = true; + break; + + default: + break; + } + + if ((_globals[kWalkerConverse] == 2) || (_globals[kWalkerConverse] == 3)) { + ++_conversationCount; + if (_conversationCount > 200) + _globals[kWalkerConverse] = _vm->getRandomNumber(1, 4); + } +} + +void Scene202::actions() { + if (_vm->_gameConv->activeConvId() == 17) { + handleConversation1(); + _action._inProgress = false; + return; + } + + if (_vm->_gameConv->activeConvId() == 9) { + handleConversation2(); + _action._inProgress = false; + return; + } + + if ((_globals[kTicketPeoplePresent] == 2) && (_action.isAction(VERB_WALK_THROUGH, NOUN_RIGHT_ARCHWAY) || _action.isAction(VERB_TALK_TO, NOUN_USHER))) { + _vm->_gameConv->run(17); + _vm->_gameConv->exportValue(_game._objects.isInInventory(OBJ_TICKET)); + _vm->_gameConv->exportValue(0); + _globals[kWalkerConverse] = _vm->getRandomNumber(1, 4); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_GIVE, NOUN_TICKET, NOUN_USHER)) { + _ticketGivenFl = true; + _vm->_gameConv->run(17); + _vm->_gameConv->exportValue(_game._objects.isInInventory(OBJ_TICKET)); + _vm->_gameConv->exportValue(1); + _globals[kWalkerConverse] = _vm->getRandomNumber(1, 4); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_TALK_TO, NOUN_GENTLEMAN) || _action.isAction(VERB_TALK_TO, NOUN_EDGAR_DEGAS)) { + if (!_globals[kDegasNameIsKnown] ) { + _vm->_gameConv->run(9); + _vm->_gameConv->exportPointer(&_globals[kPlayerScore]); + _globals[kWalkerConverse] = _vm->getRandomNumber(1, 4); + } else + _vm->_dialogs->show(20224); + + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_WALK_THROUGH, NOUN_LEFT_DOOR) || _action.isAction(VERB_OPEN, NOUN_LEFT_DOOR)) { + switch (_game._trigger) { + case (0): + _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, 4); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[1], true); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_SPRITE, 4, 80); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 82); + break; + + case 80: + _scene->deleteSequence(_globals._sequenceIndexes[0]); + _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, 5); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_EXPIRE, 0, 81); + _vm->_sound->command(24); + break; + + case 81: { + int idx = _globals._sequenceIndexes[0]; + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, 5); + _game.syncTimers(SYNC_SEQ, _globals._sequenceIndexes[0], SYNC_SEQ, idx); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); + _game._player.walk(Common::Point(134, 112), FACING_NORTH); + _game._player.setWalkTrigger(83); + } + break; + + case 82: + _game._player._visible = true; + break; + + case 83: + _scene->deleteSequence(_globals._sequenceIndexes[0]); + _globals._sequenceIndexes[0] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[0], false, 8, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 1); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[0], 1, 5); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_EXPIRE, 0, 84); + _vm->_sound->command(25); + break; + + case 84: + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, 5); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 1); + _scene->_nextSceneId = 203; + break; + + default: + break; + } + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_WALK_THROUGH, NOUN_LEFT_ARCHWAY)) { + _scene->_nextSceneId = 201; + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_WALK_THROUGH, NOUN_RIGHT_ARCHWAY)) { + _scene->_nextSceneId = 101; + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_WALK_THROUGH, NOUN_MIDDLE_DOOR)) { + _scene->_nextSceneId = 204; + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_WALK_THROUGH, NOUN_RIGHT_DOOR)) { + _scene->_nextSceneId = 205; + _action._inProgress = false; + return; + } + + if (_action._lookFlag) { + _vm->_dialogs->show(20210); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_LOOK) || _action.isAction(VERB_LOOK_AT)) { + if (_action.isObject(NOUN_FLOOR)) { + _vm->_dialogs->show(20211); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_WALL)) { + _vm->_dialogs->show(20212); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_LEFT_ARCHWAY)) { + _vm->_dialogs->show(20213); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_RIGHT_ARCHWAY)) { + _vm->_dialogs->show(20214); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_LEFT_DOOR)) { + _vm->_dialogs->show(20215); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_MIDDLE_DOOR)) { + _vm->_dialogs->show(20216); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_RIGHT_DOOR)) { + _vm->_dialogs->show(20217); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_LIGHT_FIXTURE)) { + _vm->_dialogs->show(20218); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_OVERDOOR_MEDALLION)) { + _vm->_dialogs->show(20219); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_DECORATIVE_MOLDING)) { + _vm->_dialogs->show(20220); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_PAINTING)) { + _vm->_dialogs->show(20221); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_EDGAR_DEGAS) || _action.isObject(NOUN_GENTLEMAN)) { + _vm->_dialogs->show(20223); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_USHER)) { + _vm->_dialogs->show(20225); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_CHANDELIER)) { + _vm->_dialogs->show(20218); + _action._inProgress = false; + return; + } + } + + if (_action.isAction(VERB_TAKE) && (_action.isObject(NOUN_GENTLEMAN) || _action.isObject(NOUN_EDGAR_DEGAS))) { + _vm->_dialogs->show(20226); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_TAKE, NOUN_USHER)) { + _vm->_dialogs->show(20227); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_CLOSE, NOUN_DOOR)) { + _vm->_dialogs->show(20222); + _action._inProgress = false; + return; + } +} + +void Scene202::preActions() { + if (_action.isAction(VERB_OPEN, NOUN_LEFT_DOOR)) + _game._player.walk(Common::Point(126, 123), FACING_NORTHEAST); + + if ((_globals[kTicketPeoplePresent] == 2) && _action.isAction(VERB_WALK_THROUGH, NOUN_RIGHT_ARCHWAY)) + _game._player.walk(Common::Point(569, 147), FACING_NORTHEAST); + + if (_action.isAction(VERB_TAKE, NOUN_GENTLEMAN) || _action.isAction(VERB_TAKE, NOUN_EDGAR_DEGAS)) + _game._player._needToWalk = false; +} + +void Scene202::handleConversation1() { + bool interlocutorFl = false; + bool heroFl = false; + + switch (_action._activeAction._verbId) { + case 0: + if (!_ticketGivenFl) + _usherStatus = 4; + + _globals[kWalkerConverse] = _vm->getRandomNumber(1, 4); + interlocutorFl = true; + heroFl = true; + break; + + case 3: + _vm->_gameConv->setInterlocutorTrigger(72); + _vm->_gameConv->setHeroTrigger(76); + interlocutorFl = true; + heroFl = true; + break; + + case 4: + _vm->_gameConv->setHeroTrigger(76); + heroFl = true; + interlocutorFl = true; + break; + + default: + break; + } + + switch (_game._trigger) { + case 70: + _globals[kWalkerConverse] = _vm->getRandomNumber(1, 4); + _usherStatus = 0; + break; + + case 72: + _usherStatus = 17; + break; + + case 74: + _globals[kWalkerConverse] = _vm->getRandomNumber(2, 3); + _usherStatus = 2; + _conversationCount = 0; + break; + + case 76: + _globals[kWalkerConverse] = 0; + _ticketGivenFl = false; + heroFl = true; + interlocutorFl = true; + break; + + default: + break; + } + + if (!heroFl) + _vm->_gameConv->setHeroTrigger(74); + + if (!interlocutorFl) + _vm->_gameConv->setInterlocutorTrigger(70); + + _usherCount = 0; +} + +void Scene202::handleConversation2() { + bool interlocutorFl = false; + bool heroFl = false; + + switch (_action._activeAction._verbId) { + case 1: + _globals[kDegasNameIsKnown] = 1; + break; + + case 10: + _globals[kWalkerConverse] = _vm->getRandomNumber(1, 4); + _vm->_gameConv->setHeroTrigger(96); + interlocutorFl = true; + heroFl = true; + break; + + default: + break; + } + + switch (_game._trigger) { + case 74: + _globals[kWalkerConverse] = _vm->getRandomNumber(2, 3); + _degasStatus = 4; + _conversationCount = 0; + break; + + case 93: + _globals[kWalkerConverse] = _vm->getRandomNumber(1, 4); + switch (_action._activeAction._verbId) { + case 1: + _degasStatus = 1; + break; + + case 2: + _degasStatus = 2; + break; + + default: + if ((_action._activeAction._verbId != 11) && (_action._activeAction._verbId != 12)) + _degasStatus = 0; + break; + } + break; + + case 96: + _vm->_gameConv->setInterlocutorTrigger(97); + interlocutorFl = true; + heroFl = true; + break; + + case 97: + _vm->_gameConv->setHeroTrigger(98); + _degasStatus = 0; + interlocutorFl = true; + heroFl = true; + break; + + case 98: + _globals[kWalkerConverse] = 0; + _degasStatus = 3; + + if (_globals[kDegasNameIsKnown] == 1) { + int idx = _scene->_dynamicHotspots.add(NOUN_EDGAR_DEGAS, VERB_WALK_TO, SYNTAX_SINGULAR_MASC, EXT_NONE, Common::Rect(0, 0, 0, 0)); + _scene->_dynamicHotspots[idx]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(idx, Common::Point(596, 144), FACING_EAST); + _scene->setDynamicAnim(idx, _globals._animationIndexes[1], 1); + } else { + int idx = _scene->_dynamicHotspots.add(NOUN_GENTLEMAN, VERB_WALK_TO, SYNTAX_SINGULAR_MASC, EXT_NONE, Common::Rect(0, 0, 0, 0)); + _scene->_dynamicHotspots[idx]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(idx, Common::Point(596, 144), FACING_EAST); + _scene->setDynamicAnim(idx, _globals._animationIndexes[1], 1); + } + + _globals[kDegasNameIsKnown] = 2; + interlocutorFl = true; + heroFl = true; + _scene->_hotspots.activate(NOUN_GENTLEMAN, false); + _game._player._stepEnabled = false; + _vm->_gameConv->hold(); + break; + + default: + break; + } + + if (!heroFl) + _vm->_gameConv->setHeroTrigger(74); + + if (!interlocutorFl) + _vm->_gameConv->setInterlocutorTrigger(93); +} + +void Scene202::handleChandeliersPositions() { + int center = _scene->_posAdjust.x + 160; + + for (int chandelier = 0; chandelier < 5; chandelier++) { + if (_globals._sequenceIndexes[chandelier + 2] >= 0) + _scene->deleteSequence(_globals._sequenceIndexes[chandelier + 2]); + + int diff = center - _chandeliersPosX[chandelier]; + int dir = 0; + + if (diff < 0) + dir = 1; + else if (diff > 0) + dir = -1; + + int shiftBase = (int)(abs(diff) / 5); + if (dir < 0) + shiftBase = -shiftBase; + + int posX = _chandeliersPosX[chandelier] + shiftBase - 1; + int posY = _scene->_sprites[_globals._spriteIndexes[2]]->getFrameHeight(0) - 1; + int frameWidth = _scene->_sprites[_globals._spriteIndexes[2]]->getFrameWidth(0); + + if (((posX - ((frameWidth >> 1) + 1)) >= (_scene->_posAdjust.x + 320)) || ((posX + ((frameWidth >> 1) + 1)) < _scene->_posAdjust.x)) + _globals._sequenceIndexes[chandelier + 2] = -1; + else { + if (_chandeliersHotspotId[chandelier] != -1) + _scene->_dynamicHotspots.remove(_chandeliersHotspotId[chandelier]); + + _chandeliersHotspotId[chandelier] = _scene->_dynamicHotspots.add(NOUN_CHANDELIER, VERB_LOOK_AT, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(posX - 8, posY - 12, posX + 8, posY + 1)); + + _globals._sequenceIndexes[chandelier + 2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 1); + _scene->_sequences.setPosition(_globals._sequenceIndexes[chandelier + 2], Common::Point(posX, posY)); + _scene->_sequences.setDepth(_globals._sequenceIndexes[chandelier + 2], 1); + } + } +} + +void Scene202::handleUsherAnimation() { + if (_scene->_animation[_globals._animationIndexes[0]]->getCurrentFrame() == _usherFrame) + return; + + _usherFrame = _scene->_animation[_globals._animationIndexes[0]]->getCurrentFrame(); + int resetFrame = -1; + int random; + switch (_usherFrame) { + case 1: + case 13: + case 35: + case 51: + case 52: + case 53: + case 54: + switch (_usherStatus) { + case 0: + random = _vm->getRandomNumber(1, 3); + ++_usherCount; + if (_usherCount > 15) { + if (_action._activeAction._verbId == 0) { + _usherStatus = 3; + random = 5; + } else { + _usherStatus = 2; + random = 7; + } + } + break; + + case 3: + random = 5; + break; + + case 4: + random = 6; + break; + + case 17: + random = 4; + break; + + default: + random = 7; + break; + } + + switch (random) { + case 1: + resetFrame = 51; + break; + + case 2: + resetFrame = 52; + break; + + case 3: + resetFrame = 53; + break; + + case 4: + resetFrame = 21; + _usherStatus = 17; + break; + + case 5: + resetFrame = 1; + break; + + case 6: + resetFrame = 35; + _usherStatus = 0; + break; + + default: + resetFrame = 0; + break; + } + break; + + case 7: + if (_usherStatus == 3) + random = 1; + else + random = 2; + + if (random == 1) + resetFrame = 6; + else + resetFrame = 7; + + break; + + case 28: + if (_usherStatus == 17) { + random = 1; + ++_usherCount; + if (_usherCount > 15) { + _usherStatus = 2; + random = 2; + } + } else + random = 2; + + if (random == 1) + resetFrame = 27; + else + resetFrame = 28; + break; + } + + if (resetFrame >= 0) { + _scene->setAnimFrame(_globals._animationIndexes[0], resetFrame); + _usherFrame = resetFrame; + } +} + +void Scene202::handleDegasAnimation() { + if (_scene->_animation[_globals._animationIndexes[1]]->getCurrentFrame() == _degasFrame) + return; + + _degasFrame = _scene->_animation[_globals._animationIndexes[1]]->getCurrentFrame(); + int resetFrame = -1; + int random; + + switch (_degasFrame) { + case 1: + case 17: + case 58: + switch (_degasStatus) { + case 0: + _degasStatus = 4; + random = 1; + break; + + case 1: + case 2: + case 3: + random = 2; + break; + + default: + random = _vm->getRandomNumber(3, 50); + break; + } + + switch (random) { + case 1: + resetFrame = 1; + break; + + case 2: + resetFrame = 58; + break; + + case 3: + resetFrame = 58; + break; + + default: + resetFrame = 0; + break; + } + break; + + case 33: + case 40: + case 55: + case 62: + switch (_degasStatus) { + case 0: + _degasStatus = 4; + random = 1; + break; + + case 1: + _degasStatus = 4; + random = 2; + break; + + case 2: + _degasStatus = 4; + random = 3; + break; + + case 3: + random = 4; + break; + + default: + random = _vm->getRandomNumber(5, 50); + break; + } + + switch (random) { + case 1: + resetFrame = 33; + break; + + case 2: + resetFrame = 17; + break; + + case 3: + resetFrame = 42; + break; + + case 4: + resetFrame = 62; + break; + + case 5: + resetFrame = 41; + break; + + case 6: + resetFrame = 55; + break; + + default: + resetFrame = 39; + break; + } + break; + + case 42: + switch (_degasStatus) { + case 0: + case 1: + case 2: + case 3: + random = 1; + break; + + default: + random = _vm->getRandomNumber(1, 50); + break; + } + + if (random == 1) + resetFrame = 39; + else + resetFrame = 41; + + break; + + case 110: + _vm->_gameConv->release(); + break; + + default: + break; + } + + if (resetFrame >= 0) { + _scene->setAnimFrame(_globals._animationIndexes[1], resetFrame); + _degasFrame = resetFrame; + } +} + +/*------------------------------------------------------------------------*/ + +Scene203::Scene203(MADSEngine *vm) : Scene2xx(vm) { + _anim0ActvFl = false; + _anim1ActvFl = false; + _anim2ActvFl = false; + _anim3ActvFl = false; + _showNoteFl = false; + + _brieStatus = -1; + _brieFrame = -1; + _brieCount = -1; + _raoulStatus = -1; + _raoulFrame = -1; + _raoulCount = -1; + _richardStatus = -1; + _richardFrame = -1; + _daaeStatus = -1; + _daaeFrame = -1; + _conversationCount = -1; +} + +void Scene203::synchronize(Common::Serializer &s) { + Scene2xx::synchronize(s); + + s.syncAsByte(_anim0ActvFl); + s.syncAsByte(_anim1ActvFl); + s.syncAsByte(_anim2ActvFl); + s.syncAsByte(_anim3ActvFl); + s.syncAsByte(_showNoteFl); + + s.syncAsSint16LE(_brieStatus); + s.syncAsSint16LE(_brieFrame); + s.syncAsSint16LE(_brieCount); + s.syncAsSint16LE(_raoulStatus); + s.syncAsSint16LE(_raoulFrame); + s.syncAsSint16LE(_raoulCount); + s.syncAsSint16LE(_richardStatus); + s.syncAsSint16LE(_richardFrame); + s.syncAsSint16LE(_daaeStatus); + s.syncAsSint16LE(_daaeFrame); + s.syncAsSint16LE(_conversationCount); +} + +void Scene203::setup() { + if (_globals[kCurrentYear] == 1993) + _scene->_variant = 1; + + setPlayerSpritesPrefix(); + setAAName(); +} + +void Scene203::enter() { + if (_scene->_priorSceneId != RETURNING_FROM_LOADING) { + _anim0ActvFl = false; + _anim1ActvFl = false; + _anim2ActvFl = false; + _anim3ActvFl = false; + _showNoteFl = false; + } + + _conversationCount = 0; + _scene->_hotspots.activate(NOUN_LETTER, false); + _scene->_hotspots.activate(NOUN_PARCHMENT, false); + _scene->_hotspots.activate(NOUN_NOTICE, false); + + _globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('p', 1)); + _globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('p', 0)); + _globals._spriteIndexes[5] = _scene->_sprites.addSprites(formAnimName('x', 0)); + _globals._spriteIndexes[4] = _scene->_sprites.addSprites("*RDR_6"); + + if (_globals[kCurrentYear] == 1993) { + _globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('z', -1)); + _vm->_gameConv->load(5); + } else { + _vm->_gameConv->load(8); + _vm->_gameConv->load(15); + } + + if (_globals[kCurrentYear] == 1993) { + if (_game._objects.isInRoom(OBJ_PARCHMENT)) { + _globals._sequenceIndexes[1] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[1], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[1], 3); + _scene->_hotspots.activate(NOUN_PARCHMENT, true); + } + + _scene->_hotspots.activate(NOUN_MONSIEUR_RICHARD, false); + _scene->_hotspots.activate(NOUN_MANAGERS_CHAIR, false); + + if (!_globals[kMakeBrieLeave203]) { + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('b', 9), 1); + _anim0ActvFl = true; + _brieStatus = 4; + } else { + _scene->_hotspots.activate(NOUN_MONSIEUR_BRIE, false); + _scene->_hotspots.activate(NOUN_MANAGERS_CHAIR, true); + } + + if ((_scene->_priorSceneId == RETURNING_FROM_LOADING) && (_vm->_gameConv->restoreRunning() == 5)) { + _brieStatus = 4; + _raoulStatus = 0; + _anim1ActvFl = true; + _game._player._visible = false; + _game._player._stepEnabled = false; + _globals._animationIndexes[1] = _scene->loadAnimation(formAnimName('c', 1), 0); + _scene->setAnimFrame(_globals._animationIndexes[1], 9); + _vm->_gameConv->run(5); + _vm->_gameConv->exportPointer(&_globals[kPlayerScore]); + _vm->_gameConv->exportValue(_game._objects.isInInventory(OBJ_SMALL_NOTE)); + _vm->_gameConv->exportValue(_globals[kReadBook]); + _vm->_gameConv->exportValue(_game._objects.isInInventory(OBJ_LARGE_NOTE)); + _vm->_gameConv->exportValue(_globals[kLookedAtCase]); + _vm->_gameConv->exportValue(_globals[kCharlesNameIsKnown]); + _vm->_gameConv->exportValue(_globals[kCanFindBookInLibrary]); + _vm->_gameConv->exportValue(_globals[kFlorentNameIsKnown]); + _vm->_gameConv->exportValue(_globals[kSandbagStatus]); + _vm->_gameConv->exportValue(_globals[kObservedPhan104]); + } + + _scene->drawToBackground(_globals._spriteIndexes[0], 1, Common::Point(-32000, -32000), 0, 100); + _scene->_hotspots.activate(NOUN_CANDLE, false); + } else if (_globals[kJacquesStatus] == 0) { + _scene->_hotspots.activate(NOUN_DESK_LAMP, false); + _scene->_hotspots.activate(NOUN_MONSIEUR_BRIE, false); + _scene->_hotspots.activate(NOUN_MANAGERS_CHAIR, false); + + if (!_globals[kMakeRichLeave203]) { + _globals._animationIndexes[2] = _scene->loadAnimation(formAnimName('r', 1), 1); + _anim2ActvFl = true; + _richardStatus = 4; + } else { + _scene->_hotspots.activate(NOUN_MONSIEUR_RICHARD, false); + _scene->_hotspots.activate(NOUN_MANAGERS_CHAIR, true); + } + + if ((_scene->_priorSceneId == RETURNING_FROM_LOADING) && (_vm->_gameConv->restoreRunning() == 8)) { + _globals._animationIndexes[1] = _scene->loadAnimation(formAnimName('c', 1), 0); + _scene->setAnimFrame(_globals._animationIndexes[1], 9); + _anim1ActvFl = true; + _game._player._visible = false; + _raoulStatus = 0; + _vm->_gameConv->run(8); + _vm->_gameConv->exportPointer(&_globals[kPlayerScore]); + } + + if (_game._objects.isInRoom(OBJ_LETTER)) { + _globals._sequenceIndexes[3] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[3], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[3], 3); + _scene->_hotspots.activate(NOUN_LETTER, true); + } + + if (_game._objects.isInRoom(OBJ_NOTICE)) { + _globals._sequenceIndexes[1] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[1], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[1], 3); + _scene->_hotspots.activate(NOUN_NOTICE, true); + } + } else { + _scene->_hotspots.activate(NOUN_MONSIEUR_BRIE, false); + _scene->_hotspots.activate(NOUN_MONSIEUR_RICHARD, false); + _scene->_hotspots.activate(NOUN_DESK_LAMP, false); + } + + if (_vm->_gameConv->restoreRunning() == 15) { + _globals._sequenceIndexes[5] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[5], false, -1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[5], 14); + _game._player._playerPos = Common::Point(98, 137); + _game._player._facing = FACING_NORTHEAST; + _vm->_gameConv->run(15); + _vm->_gameConv->exportPointer(&_globals[kPlayerScore]); + _vm->_gameConv->exportPointer(&_globals[kChristineToldEnvelope]); + _globals[kWalkerConverse] = _vm->getRandomNumber(1, 4); + } + + if (_scene->_priorSceneId == RETURNING_FROM_LOADING) { + _globals._sequenceIndexes[5] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[5], false, -1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[5], 14); + } else if (_scene->_priorSceneId == 202) { + _globals._sequenceIndexes[5] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[5], false, -1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[5], 14); + _game._player._playerPos = Common::Point(195, 147); + _game._player._facing = FACING_NORTH; + } else if (_scene->_priorSceneId == 150) { + _globals._sequenceIndexes[5] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[5], false, -1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[5], 14); + _game._player._playerPos = Common::Point(98, 137); + _game._player._facing = FACING_NORTHEAST; + _vm->_gameConv->run(15); + _vm->_gameConv->exportPointer(&_globals[kPlayerScore]); + _vm->_gameConv->exportPointer(&_globals[kChristineToldEnvelope]); + _globals[kWalkerConverse] = _vm->getRandomNumber(1, 4); + } else if ((_scene->_priorSceneId == 204) || (_scene->_priorSceneId != RETURNING_FROM_LOADING)) { + _globals._sequenceIndexes[5] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[5], false, -2); + _scene->_sequences.setDepth(_globals._sequenceIndexes[5], 1); + _game._player._playerPos = Common::Point(319, 123); + _game._player._facing = FACING_SOUTHWEST; + _game._player.walk(Common::Point(276, 123), FACING_WEST); + _game._player.setWalkTrigger(95); + _game._player._stepEnabled = false; + } + + sceneEntrySound(); +} + +void Scene203::step() { + if (_anim0ActvFl) + handleBrieAnimation(); + + if (_anim1ActvFl) + handleRaoulAnimation(); + + if (_anim2ActvFl) + handleRichardAnimation(); + + if (_anim3ActvFl) + handleDaaeAnimation(); + + if ((_globals[kWalkerConverse] == 2) || (_globals[kWalkerConverse] == 3)) { + ++_conversationCount; + if (_conversationCount > 200) + _globals[kWalkerConverse] = _vm->getRandomNumber(1, 4); + } + + switch (_game._trigger) { + case 95: + _scene->deleteSequence(_globals._sequenceIndexes[5]); + _globals._sequenceIndexes[5] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[5], false, 8, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[5], 10); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[5], -1, -2); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_EXPIRE, 0, 96); + break; + + case 96: + _vm->_sound->command(25); + _globals._sequenceIndexes[5] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[5], false, -1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[5], 14); + if (_vm->_gameConv->activeConvId() != 15) + _game._player._stepEnabled = true; + break; + + default: + break; + } +} + +void Scene203::actions() { + if (_vm->_gameConv->activeConvId() == 5) { + handleBrieConversation(); + _action._inProgress = false; + return; + } + + if (_vm->_gameConv->activeConvId() == 8) { + handleRichardConversation(); + _action._inProgress = false; + return; + } + + if (_vm->_gameConv->activeConvId() == 15) { + handleRichardAndDaaeConversation(); + _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[4] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[4], false, 5, 2); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], 1, 4); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[4], true); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_SPRITE, 4, 90); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 92); + break; + + case 90: + _vm->_sound->command(24); + _scene->deleteSequence(_globals._sequenceIndexes[5]); + _globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 8, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[5], 1); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[5], -1, -2); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_EXPIRE, 0, 91); + break; + + case 91: + _globals._sequenceIndexes[5] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[5], false, -2); + _scene->_sequences.setDepth(_globals._sequenceIndexes[5], 1); + break; + + case 92: + _game._player._visible = true; + _game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[4]); + _game._player.walk(Common::Point(319, 123), FACING_WEST); + _game._player.setWalkTrigger(93); + break; + + case 93: + _scene->_nextSceneId = 204; + break; + + default: + break; + } + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_TALK_TO, NOUN_MONSIEUR_BRIE)) { + _globals._animationIndexes[1] = _scene->loadAnimation(formAnimName('c', 1), 0); + _anim1ActvFl = true; + _game._player._visible = false; + _raoulStatus = 0; + _game.syncTimers(SYNC_ANIM, _globals._animationIndexes[1], SYNC_PLAYER, 0); + + _vm->_gameConv->run(5); + _vm->_gameConv->hold(); + _vm->_gameConv->exportPointer(&_globals[kPlayerScore]); + _vm->_gameConv->exportValue(_game._objects.isInInventory(OBJ_SMALL_NOTE)); + _vm->_gameConv->exportValue(_globals[kReadBook]); + _vm->_gameConv->exportValue(_game._objects.isInInventory(OBJ_LARGE_NOTE)); + _vm->_gameConv->exportValue(_globals[kLookedAtCase]); + if (_globals[kCharlesNameIsKnown] == 2) + _vm->_gameConv->exportValue(1); + else + _vm->_gameConv->exportValue(0); + + _vm->_gameConv->exportValue(_globals[kCanFindBookInLibrary]); + _vm->_gameConv->exportValue(_globals[kFlorentNameIsKnown]); + _vm->_gameConv->exportValue(_globals[kSandbagStatus]); + _vm->_gameConv->exportValue(_globals[kObservedPhan104]); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_TALK_TO, NOUN_MONSIEUR_RICHARD)) { + if (_globals[kCameFromFade]) { + _vm->_gameConv->run(15); + _vm->_gameConv->exportPointer(&_globals[kPlayerScore]); + _vm->_gameConv->exportPointer(&_globals[kChristineToldEnvelope]); + } else { + _globals._animationIndexes[1] = _scene->loadAnimation(formAnimName('c', 1), 0); + _anim1ActvFl = true; + _game._player._visible = false; + _game._player._stepEnabled = false; + _raoulStatus = 0; + _game.syncTimers(SYNC_ANIM, _globals._animationIndexes[1], SYNC_PLAYER, 0); + + _vm->_gameConv->run(8); + _vm->_gameConv->exportPointer(&_globals[kPlayerScore]); + _vm->_gameConv->hold(); + } + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_EXIT_TO, NOUN_GRAND_FOYER)) { + _scene->_nextSceneId = 202; + _action._inProgress = false; + return; + } + + if (_action._lookFlag) { + if (_globals[kMakeBrieLeave203]) + _vm->_dialogs->show(20337); + else + _vm->_dialogs->show(20310); + + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_LOOK) || _action.isAction(VERB_LOOK_AT)) { + if (_action.isObject(NOUN_WALL)) { + _vm->_dialogs->show(20311); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_FLOOR)) { + _vm->_dialogs->show(20312); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_BOOKCASE)) { + _vm->_dialogs->show(20313); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_DOORWAY)) { + _vm->_dialogs->show(20314); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_COMFY_CHAIR)) { + _vm->_dialogs->show(20315); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_DESK)) { + _vm->_dialogs->show(20316); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_MANAGERS_CHAIR)) { + _vm->_dialogs->show(20317); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_DESK_LAMP)) { + _vm->_dialogs->show(20318); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_LAMP)) { + _vm->_dialogs->show(20319); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_LIGHT_FIXTURE)) { + _vm->_dialogs->show(20320); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_WINDOW)) { + _vm->_dialogs->show(20321); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_SHEERS)) { + _vm->_dialogs->show(20322); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_TAPESTRY)) { + _vm->_dialogs->show(20323); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_GRAND_FOYER)) { + _vm->_dialogs->show(20324); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_TABLE)) { + _vm->_dialogs->show(20325); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_CANDLE)) { + _vm->_dialogs->show(20326); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_MONSIEUR_BRIE)) { + _vm->_dialogs->show(20327); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_MONSIEUR_RICHARD)) { + _vm->_dialogs->show(20328); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_PARCHMENT) && _game._objects.isInRoom(OBJ_PARCHMENT)) { + _vm->_dialogs->show(20329); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_LETTER) && _game._objects.isInRoom(OBJ_LETTER)) { + _vm->_dialogs->show(20331); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_NOTICE) && _game._objects.isInRoom(OBJ_NOTICE)) { + _vm->_dialogs->show(20333); + _action._inProgress = false; + return; + } + } + + if (_action.isAction(VERB_TAKE, NOUN_PARCHMENT)) { + _vm->_dialogs->show(20330); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_TAKE, NOUN_LETTER)) { + _vm->_dialogs->show(20332); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_TAKE, NOUN_NOTICE)) { + _vm->_dialogs->show(20334); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_TAKE, NOUN_MONSIEUR_BRIE)) { + _vm->_dialogs->show(20335); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_TAKE, NOUN_MONSIEUR_RICHARD)) { + _vm->_dialogs->show(20336); + _action._inProgress = false; + return; + } +} + +void Scene203::preActions() { + if (_action.isAction(VERB_TALK_TO, NOUN_MONSIEUR_RICHARD)) { + if (_globals[kCameFromFade]) + _game._player.walk(Common::Point(98, 137), FACING_NORTHEAST); + else + _game._player.walk(Common::Point(154, 131), FACING_NORTHWEST); + } + + if (_action.isAction(VERB_TALK_TO, NOUN_MONSIEUR_BRIE)) + _game._player.walk(Common::Point(154, 131), FACING_NORTHWEST); + + if (_action.isAction(VERB_OPEN, NOUN_DOOR)) + _game._player.walk(Common::Point(276, 123), FACING_EAST); +} + +void Scene203::handleBrieConversation() { + bool interlocutorFl = false; + bool heroFl = false; + + switch (_action._activeAction._verbId) { + case 9: + case 12: + case 35: + case 42: + _vm->_gameConv->setInterlocutorTrigger(70); + interlocutorFl = true; + heroFl = true; + break; + + case 14: + if (!_game._trigger) { + _vm->_gameConv->hold(); + _raoulStatus = 5; + } + break; + + case 17: + _raoulStatus = 0; + _vm->_gameConv->hold(); + break; + + case 24: + _vm->_gameConv->setInterlocutorTrigger(78); + interlocutorFl = true; + break; + + case 20: + case 25: + _vm->_gameConv->setInterlocutorTrigger(76); + interlocutorFl = true; + break; + + case 37: + if (!_game._trigger) { + _vm->_gameConv->hold(); + if (_vm->_sound->_preferRoland) + _vm->_sound->command(65); + else + _scene->playSpeech(1); + + _scene->_sequences.addTimer(60, 110); + } + break; + + case 41: + _globals[kDoneBrieConv203] = 1; + _globals[kChrisFStatus] = 0; + break; + + case 44: + if (!_game._trigger) { + _vm->_gameConv->hold(); + _raoulStatus = 3; + } + break; + + default: + break; + } + + switch (_game._trigger) { + case 60: + _brieStatus = 0; + break; + + case 65: + _brieStatus = 4; + break; + + case 70: + _vm->_gameConv->setHeroTrigger(71); + interlocutorFl = true; + heroFl = true; + break; + + case 71: + _raoulStatus = 2; + break; + + case 74: + _vm->_gameConv->hold(); + _raoulStatus = 3; + break; + + case 76: + _brieStatus = 1; + break; + + case 78: + _brieStatus = 2; + break; + + case 110: + _vm->_gameConv->release(); + break; + + default: + break; + } + + if (!heroFl && (_raoulStatus != 5)) + _vm->_gameConv->setHeroTrigger(65); + + if (!interlocutorFl) + _vm->_gameConv->setInterlocutorTrigger(60); + + _brieCount = 0; + _raoulCount = 0; +} + +void Scene203::handleRichardConversation() { + bool interlocutorFl = false; + bool heroFl = false; + + switch (_action._activeAction._verbId) { + case 4: + _vm->_gameConv->setInterlocutorTrigger(83); + interlocutorFl = true; + break; + + case 5: + case 15: + case 20: + case 21: + case 27: + _vm->_gameConv->setInterlocutorTrigger(70); + interlocutorFl = true; + heroFl = true; + break; + + case 7: + if (_game._objects.isInRoom(OBJ_NOTICE) && !_game._trigger) { + _vm->_gameConv->hold(); + _raoulStatus = 3; + } + break; + + case 9: + if (_game._objects.isInRoom(OBJ_LETTER) && !_game._trigger) { + _vm->_gameConv->hold(); + _raoulStatus = 4; + } + break; + + case 17: + _vm->_gameConv->setInterlocutorTrigger(85); + interlocutorFl = true; + break; + + case 19: + _vm->_gameConv->setInterlocutorTrigger(81); + interlocutorFl = true; + break; + + default: + break; + } + + switch (_game._trigger) { + case 65: + _richardStatus = 4; + break; + + case 70: + _vm->_gameConv->setHeroTrigger(71); + interlocutorFl = true; + heroFl = true; + break; + + case 71: { + _raoulStatus = 2; + int *val1 = _vm->_gameConv->getVariable(24); + int *val2 = _vm->_gameConv->getVariable(26); + if ((*val1) && (*val2)) { + _globals[kDoneRichConv203] = true; + _globals[kMadameGiryShowsUp] = true; + } + } + break; + + case 74: + _vm->_gameConv->hold(); + _raoulStatus = 3; + break; + + case 81: + _richardStatus = 2; + break; + + case 83: + _richardStatus = 1; + break; + + case 85: + _richardStatus = 3; + break; + + case 100: + _richardStatus = 0; + break; + + default: + break; + } + + if (!heroFl && (_raoulStatus != 5)) + _vm->_gameConv->setHeroTrigger(65); + + if (!interlocutorFl) + _vm->_gameConv->setInterlocutorTrigger(100); + + _brieCount = 0; + _raoulCount = 0; +} + +void Scene203::handleRichardAndDaaeConversation() { + bool interlocutorFl = false; + bool heroFl = false; + + switch (_action._activeAction._verbId) { + case 5: + if (!_game._trigger) { + _vm->_gameConv->hold(); + + _vm->_sound->command(24); + _scene->deleteSequence(_globals._sequenceIndexes[5]); + _globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 8, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[5], 1); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[5], -1, -2); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_EXPIRE, 0, 90); + interlocutorFl = true; + heroFl = true; + } + break; + + case 11: + if (!_game._trigger) { + _vm->_gameConv->hold(); + _daaeStatus = 3; + } + break; + + case 13: + case 14: + case 15: + _globals[kChristineDoorStatus] = 1; + _globals[kTicketPeoplePresent] = 2; + heroFl = true; + interlocutorFl = true; + _vm->_gameConv->setInterlocutorTrigger(115); + break; + + default: + break; + } + + switch (_game._trigger) { + case 65: + if (_globals[kWalkerConverse] != 0) + _globals[kWalkerConverse] = _vm->getRandomNumber(2, 3); + + if ((_richardStatus != 5) && (_richardStatus != 7)) + _richardStatus = 4; + + _conversationCount = 0; + break; + + case 90: + _globals._sequenceIndexes[5] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[5], false, -2); + _scene->_sequences.setDepth(_globals._sequenceIndexes[5], 1); + _globals._animationIndexes[3] = _scene->loadAnimation(formAnimName('d', 1), 0); + _anim3ActvFl = true; + _daaeStatus = 0; + break; + + case 100: + if (_globals[kWalkerConverse] != 0) + _globals[kWalkerConverse] = _vm->getRandomNumber(1, 4); + + if ((_action._activeAction._verbId == 7) || (_action._activeAction._verbId == 9)) + _daaeStatus = 1; + else if (_richardStatus == 7) + _richardStatus = 5; + else if (_richardStatus != 5) + _richardStatus = 0; + + break; + + case 115: + _globals[kWalkerConverse] = 0; + heroFl = true; + interlocutorFl = true; + break; + + default: + break; + } + + if (!heroFl) + _vm->_gameConv->setHeroTrigger(65); + + if (!interlocutorFl) + _vm->_gameConv->setInterlocutorTrigger(100); + + _brieCount = 0; + _raoulCount = 0; +} + +void Scene203::handleBrieAnimation() { + if (_scene->_animation[_globals._animationIndexes[0]]->getCurrentFrame() == _brieFrame) + return; + + _brieFrame = _scene->_animation[_globals._animationIndexes[0]]->getCurrentFrame(); + int resetFrame = -1; + int random = -1; + + switch (_brieFrame) { + case 1: + case 2: + case 4: + case 11: + case 22: + case 31: + case 35: + case 29: + random = _vm->getRandomNumber(6, 45); + + switch (_brieStatus) { + case 0: + random = _vm->getRandomNumber(1, 2); + ++_brieCount; + if (_brieCount > 20) { + _brieStatus = 4; + random = 45; + } + break; + + case 1: + random = 5; + break; + + case 2: + random = 4; + break; + + case 3: + random = 3; + _brieStatus = 0; + break; + + default: + break; + } + + switch (random) { + case 1: + resetFrame = 0; + break; + + case 2: + resetFrame = 1; + break; + + case 3: + resetFrame = 2; + break; + + case 4: + resetFrame = 22; + _brieStatus = 0; + break; + + case 5: + resetFrame = 13; + break; + + case 6: + resetFrame = 4; + break; + + case 7: + resetFrame = 29; + break; + + case 8: + resetFrame = 31; + break; + + default: + resetFrame = 0; + break; + } + break; + + case 30: + random = _vm->getRandomNumber(1, 45); + + switch (_brieStatus) { + case 0: + case 1: + case 2: + case 3: + random = 1; + break; + } + + if (random == 1) + resetFrame = 30; + else + resetFrame = 29; + + break; + + case 8: + random = _vm->getRandomNumber(1, 45); + + switch (_brieStatus) { + case 0: + case 1: + case 2: + case 3: + random = 3; + break; + } + + switch (random) { + case 1: + resetFrame = 11; + break; + + case 2: + resetFrame = 12; + break; + + case 3: + resetFrame = 8; + break; + + default: + resetFrame = 7; + break; + } + break; + + case 12: + random = _vm->getRandomNumber(1, 45); + + switch (_brieStatus) { + case 0: + case 1: + case 2: + case 3: + random = 1; + break; + } + + if (random == 1) + resetFrame = 7; + else + resetFrame = 11; + + break; + + case 13: + random = _vm->getRandomNumber(1, 45); + + switch (_brieStatus) { + case 0: + case 1: + case 2: + case 3: + random = 1; + break; + } + + if (random == 1) + resetFrame = 7; + else + resetFrame = 12; + + break; + + case 17: + case 18: + switch (_brieStatus) { + case 0: + case 2: + case 3: + random = 3; + break; + case 1: + random = _vm->getRandomNumber(1, 2); + ++_brieCount; + if (_brieCount > 20) { + _brieStatus = 4; + random = 3; + } + break; + + default: + break; + } + + switch (random) { + case 1: + resetFrame = 16; + break; + + case 2: + resetFrame = 17; + break; + + case 3: + resetFrame = 18; + break; + + default: + break; + } + break; + + case 33: + case 40: + random = _vm->getRandomNumber(1, 45); + + switch (_brieStatus) { + case 0: + case 1: + case 2: + case 3: + random = 1; + break; + } + + switch (random) { + case 1: + resetFrame = 33; + break; + + case 2: + resetFrame = 35; + break; + + default: + resetFrame = 32; + break; + } + break; + + case 38: + random = _vm->getRandomNumber(1, 45); + + switch (_brieStatus) { + case 0: + case 1: + case 2: + case 3: + random = 1; + break; + } + + if (random == 1) + resetFrame = 38; + else + resetFrame = 37; + + break; + } + + if (resetFrame >= 0) { + _scene->setAnimFrame(_globals._animationIndexes[0], resetFrame); + _brieFrame = resetFrame; + } +} + +void Scene203::handleRichardAnimation() { + if (_scene->_animation[_globals._animationIndexes[2]]->getCurrentFrame() == _richardFrame) + return; + + _richardFrame = _scene->_animation[_globals._animationIndexes[2]]->getCurrentFrame(); + int resetFrame = -1; + int random = -1; + + switch (_richardFrame) { + case 1: + case 2: + case 3: + case 7: + case 15: + case 25: + case 37: + case 53: + case 59: + case 63: + case 67: + case 69: + case 79: + case 87: + case 108: + random = _vm->getRandomNumber(8, 45); + + switch (_richardStatus) { + case 0: + random = _vm->getRandomNumber(1, 3); + ++_brieCount; + if (_brieCount > 20) { + _richardStatus = 4; + random = 45; + } + break; + + case 1: + random = 4; + _richardStatus = 0; + break; + + case 2: + random = 5; + _richardStatus = 0; + break; + + case 3: + random = 6; + _richardStatus = 0; + break; + + case 5: + random = 7; + break; + + default: + break; + } + + switch (random) { + case 1: + resetFrame = 0; + break; + + case 2: + resetFrame = 1; + break; + + case 3: + resetFrame = 2; + break; + + case 4: + resetFrame = 69; + break; + + case 5: + resetFrame = 53; + _richardStatus = 0; + break; + + case 6: + resetFrame = 42; + break; + + case 7: + resetFrame = 87; + break; + + case 8: + resetFrame = 25; + break; + + case 9: + resetFrame = 15; + break; + + case 10: + resetFrame = 3; + break; + + case 11: + resetFrame = 7; + break; + + case 12: + resetFrame = 59; + break; + + case 13: + resetFrame = 63; + break; + + case 14: + resetFrame = 67; + break; + + case 15: + resetFrame = 79; + break; + + default: + resetFrame = 0; + break; + } + break; + + case 5: + random = _vm->getRandomNumber(1, 45); + + switch (_richardStatus) { + case 0: + case 1: + case 2: + case 3: + case 5: + random = 1; + break; + } + + if (random == 1) + resetFrame = 5; + else + resetFrame = 4; + + break; + + case 11: + random = _vm->getRandomNumber(1, 45); + + switch (_richardStatus) { + case 0: + case 1: + case 2: + case 3: + case 5: + random = 1; + break; + } + + if (random == 1) + resetFrame = 11; + else + resetFrame = 10; + + break; + + case 61: + random = _vm->getRandomNumber(1, 45); + + switch (_richardStatus) { + case 0: + case 1: + case 2: + case 3: + case 5: + random = 1; + break; + } + + if (random == 1) + resetFrame = 61; + else + resetFrame = 60; + + break; + + case 65: + random = _vm->getRandomNumber(1, 45); + + switch (_richardStatus) { + case 0: + case 1: + case 2: + case 3: + case 5: + random = 1; + break; + } + + if (random == 1) + resetFrame = 65; + else + resetFrame = 64; + + break; + + case 68: + random = _vm->getRandomNumber(1, 45); + + switch (_richardStatus) { + case 0: + case 1: + case 2: + case 3: + case 5: + random = 1; + break; + } + + if (random == 1) + resetFrame = 68; + else + resetFrame = 67; + + break; + + case 83: + random = _vm->getRandomNumber(1, 45); + + switch (_richardStatus) { + case 0: + case 1: + case 2: + case 3: + case 5: + random = 1; + break; + } + + if (random == 1) + resetFrame = 83; + else + resetFrame = 82; + + break; + + case 92: + _vm->_gameConv->release(); + break; + + case 93: + case 94: + case 95: + if (_richardStatus == 5) { + random = _vm->getRandomNumber(1, 3); + ++_brieCount; + if (_brieCount > 20) { + _richardStatus = 7; + random = 4; + } + } else + random = 4; + + switch (random) { + case 1: + resetFrame = 92; + break; + + case 2: + resetFrame = 93; + break; + + case 3: + resetFrame = 94; + break; + + case 4: + resetFrame = 95; + break; + } + break; + + case 100: + case 101: + case 102: + switch (_richardStatus) { + case 5: + random = _vm->getRandomNumber(1, 3); + ++_brieCount; + if (_brieCount > 20) { + _richardStatus = 7; + random = 1; + } + break; + + case 7: + random = 1; + break; + + default: + random = 4; + break; + } + + switch (random) { + case 1: + resetFrame = 99; + break; + + case 2: + resetFrame = 100; + break; + + case 3: + resetFrame = 101; + break; + + case 4: + resetFrame = 102; + break; + + default: + break; + } + break; + + case 31: + random = _vm->getRandomNumber(1, 45); + + switch (_richardStatus) { + case 0 : + case 1: + case 2: + case 3: + case 5: + random = 1; + break; + } + + if (random == 1) + resetFrame = 31; + else + resetFrame = 30; + + break; + } + + if (resetFrame >= 0) { + _scene->setAnimFrame(_globals._animationIndexes[2], resetFrame); + _richardFrame = resetFrame; + } +} + +void Scene203::handleRaoulAnimation() { + 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 9: + case 21: + case 57: + _vm->_gameConv->release(); + break; + + case 10: + case 22: + case 30: + case 34: + case 58: + if (_raoulFrame == 22) + _raoulStatus = 0; + + random = _vm->getRandomNumber(5, 45); + + switch (_raoulStatus) { + case 1: + random = 1; + break; + + case 2: + _game._player._stepEnabled = false; + random = 2; + break; + + case 3: + case 5: + random = 3; + break; + + case 4: + random = 4; + break; + + default: + random = _vm->getRandomNumber(5, 100); + break; + } + + switch (random) { + case 1: + resetFrame = 22; + break; + + case 2: + resetFrame = 34; + break; + + case 3: + resetFrame = 10; + break; + + case 4: + resetFrame = 45; + break; + + case 5: + resetFrame = 30; + break; + + default: + resetFrame = 9; + break; + } + break; + + case 16: + switch (_raoulStatus) { + case 3: + random = 1; + break; + + case 0: + case 2: + random = 2; + break; + + case 5: + random = 3; + break; + + default: + break; + } + + switch (random) { + case 1: + if (_globals[kCurrentYear] == 1881) { + resetFrame = 16; + _scene->deleteSequence(_globals._sequenceIndexes[1]); + _scene->_hotspots.activate(NOUN_NOTICE, false); + _game._objects.addToInventory(OBJ_NOTICE); + _vm->_sound->command(26); + _scene->_speechReady = -1; + _vm->_dialogs->showItem(OBJ_NOTICE, 814, 5); + _raoulStatus = 0; + } else { + resetFrame = 16; + _scene->deleteSequence(_globals._sequenceIndexes[1]); + _scene->_hotspots.activate(NOUN_PARCHMENT, false); + _game._objects.addToInventory(OBJ_PARCHMENT); + _vm->_sound->command(26); + _scene->_speechReady = -1; + _vm->_dialogs->showItem(OBJ_PARCHMENT, 812, 3); + _raoulStatus = 0; + } + break; + + case 2: + if (_showNoteFl) { + _scene->deleteSequence(_globals._sequenceIndexes[2]); + _showNoteFl = false; + } + break; + + default: + if (!_showNoteFl) { + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[1], true, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 3); + _vm->_gameConv->release(); + _showNoteFl = true; + } + resetFrame = 15; + break; + } + break; + + case 26: + random = _vm->getRandomNumber(1, 45); + + switch (_raoulStatus) { + case 0: + case 2: + case 3: + case 4: + case 5: + random = 1; + break; + + case 1: + random = 2; + break; + } + + if (random == 1) + resetFrame = 26; + else + resetFrame = 25; + + break; + + case 45: + _anim1ActvFl = false; + _game._player._visible = true; + _game._player._stepEnabled = true; + _game.syncTimers(SYNC_PLAYER, 0, SYNC_ANIM, _globals._animationIndexes[1]); + resetFrame = 58; + if (_globals[kDoneBrieConv203] && (_globals[kCurrentYear] == 1993)) { + _globals[kPrompterStandStatus] = 1; + _scene->_nextSceneId = 150; + } + break; + + case 52: + _scene->deleteSequence(_globals._sequenceIndexes[3]); + _scene->_hotspots.activate(NOUN_LETTER, false); + _game._objects.addToInventory(OBJ_LETTER); + _vm->_sound->command(26); + _scene->_speechReady = -1; + _vm->_dialogs->showItem(OBJ_LETTER, 813, 4); + _raoulStatus = 0; + break; + + default: + break; + } + + if (resetFrame >= 0) { + _scene->setAnimFrame(_globals._animationIndexes[1], resetFrame); + _raoulFrame = resetFrame; + } +} + +void Scene203::handleDaaeAnimation() { + if (_scene->_animation[_globals._animationIndexes[3]]->getCurrentFrame() == _daaeFrame) + return; + + _daaeFrame = _scene->_animation[_globals._animationIndexes[3]]->getCurrentFrame(); + int resetFrame = -1; + int random = -1; + + switch (_daaeFrame) { + case 20: + _vm->_gameConv->release(); + _richardStatus = 5; + break; + + case 175: + _richardStatus = 4; + break; + + case 198: + _vm->_gameConv->release(); + break; + + case 201: + _scene->_sequences.addTimer(1, 95); + break; + + case 76: + case 92: + case 102: + case 123: + switch (_daaeStatus) { + case 1: + random = _vm->getRandomNumber(1, 2); + _daaeStatus = 2; + break; + + case 2: + random = 3; + _daaeStatus = 0; + break; + + case 3: + random = 4; + break; + + default: + random = 5; + break; + } + + switch (random) { + case 1: + resetFrame = 79; + break; + + case 2: + resetFrame = 92; + break; + + case 3: + resetFrame = 102; + break; + + case 4: + resetFrame = 123; + break; + + case 5: + resetFrame = 75; + break; + + default: + break; + } + break; + } + + if (resetFrame >= 0) { + _scene->setAnimFrame(_globals._animationIndexes[3], resetFrame); + _daaeFrame = resetFrame; + } +} + +/*------------------------------------------------------------------------*/ + +Scene204::Scene204(MADSEngine *vm) : Scene2xx(vm) { + _anim0ActvFl = false; + _anim1ActvFl = false; + _anim2ActvFl = false; + _anim3ActvFl = false; + _raoulDown = false; + _florentGone = false; + _skip1Fl = false; + _skip2Fl = false; + _skip3Fl = false; + _endGameFl = false; + + _brieStatus = -1; + _brieFrame = -1; + _florStatus = -1; + _florFrame = -1; + _raoulStatus = -1; + _raoulFrame = -1; + _raoulCount = -1; +} + +void Scene204::synchronize(Common::Serializer &s) { + Scene2xx::synchronize(s); + + s.syncAsByte(_anim0ActvFl); + s.syncAsByte(_anim1ActvFl); + s.syncAsByte(_anim2ActvFl); + s.syncAsByte(_anim3ActvFl); + s.syncAsByte(_raoulDown); + s.syncAsByte(_florentGone); + s.syncAsByte(_skip1Fl); + s.syncAsByte(_skip2Fl); + s.syncAsByte(_skip3Fl); + s.syncAsByte(_endGameFl); + + s.syncAsSint16LE(_brieStatus); + s.syncAsSint16LE(_brieFrame); + s.syncAsSint16LE(_florStatus); + s.syncAsSint16LE(_florFrame); + s.syncAsSint16LE(_raoulStatus); + s.syncAsSint16LE(_raoulFrame); + s.syncAsSint16LE(_raoulCount); +} + +void Scene204::setup() { + if ((_globals[kCurrentYear] == 1993) || _globals[kRightDoorIsOpen504]) + _scene->_variant = 1; + + setPlayerSpritesPrefix(); + setAAName(); +} + +void Scene204::enter() { + _skip3Fl = false; + + if (_scene->_priorSceneId != RETURNING_FROM_LOADING) { + _anim0ActvFl = false; + _anim1ActvFl = false; + _anim2ActvFl = false; + _anim3ActvFl = false; + _florentGone = false; + _skip1Fl = false; + _skip2Fl = false; + _endGameFl = false; + _raoulDown = true; + } + + if (_globals[kTicketPeoplePresent] == 2) + _globals[kMakeRichLeave203] = true; + + if (_globals[kRightDoorIsOpen504]) + _endGameFl = true; + + warning("TODO: If end of game, remove the walking areas"); + + _scene->_hotspots.activate(NOUN_BOOK, false); + _vm->_gameConv->load(22); + + _globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('p', 0)); + _globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('x', 6)); + _globals._spriteIndexes[4] = _scene->_sprites.addSprites("*RALRH_9"); + _globals._spriteIndexes[5] = _scene->_sprites.addSprites("*RDRR_6"); + + if (_game._objects.isInRoom(OBJ_BOOK) || (_globals[kCurrentYear] == 1881) || _endGameFl) { + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 5); + if (_globals[kScannedBookcase] && (_globals[kCurrentYear] == 1993)) + _scene->_hotspots.activate(NOUN_BOOK, true); + } + + if ((_globals[kCurrentYear] == 1993) || _endGameFl) { + _globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('z', -1)); + _scene->drawToBackground(_globals._spriteIndexes[0], 1, Common::Point(-32000, -32000), 0, 100); + _scene->_sprites.remove(_globals._spriteIndexes[0]); + _scene->_hotspots.activate(NOUN_CANDLE, false); + _scene->_hotspots.activate(NOUN_BUST, false); + _scene->_hotspots.activate(NOUN_COFFEE_TABLE, false); + + int idx = _scene->_dynamicHotspots.add(NOUN_COFFEE_TABLE, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(83, 140, 83 + 45, 140 + 12)); + _scene->_dynamicHotspots.setPosition(idx, Common::Point(84, 150), FACING_SOUTHEAST); + + idx = _scene->_dynamicHotspots.add(NOUN_GRAND_FOYER, VERB_EXIT_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(199, 147, 199 + 52, 147 + 8)); + _scene->_dynamicHotspots.setPosition(idx, Common::Point(224, 152), FACING_SOUTH); + _scene->_dynamicHotspots.setCursor(idx, CURSOR_GO_DOWN); + + idx = _scene->_dynamicHotspots.add(NOUN_GRAND_FOYER, VERB_EXIT_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(145, 147, 145 + 54, 147 + 8)); + _scene->_dynamicHotspots.setPosition(idx, Common::Point(175, 152), FACING_SOUTH); + _scene->_dynamicHotspots.setCursor(idx, CURSOR_GO_DOWN); + } else { + _scene->_hotspots.activate(NOUN_LIGHT, false); + _scene->_hotspots.activate(NOUN_GLASS_CASE, false); + + int idx = _scene->_dynamicHotspots.add(NOUN_COMFY_CHAIR, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(220, 147, 220 + 6, 147 + 8)); + _scene->_dynamicHotspots.setPosition(idx, Common::Point(220, 150), FACING_SOUTHEAST); + + idx = _scene->_dynamicHotspots.add(NOUN_COMFY_CHAIR, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(226, 134, 226 + 12, 134 + 21)); + _scene->_dynamicHotspots.setPosition(idx, Common::Point(220, 150), FACING_SOUTHEAST); + + idx = _scene->_dynamicHotspots.add(NOUN_COMFY_CHAIR, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(238, 128, 238 + 13, 128 + 27)); + _scene->_dynamicHotspots.setPosition(idx, Common::Point(220, 150), FACING_SOUTHEAST); + + idx = _scene->_dynamicHotspots.add(NOUN_GRAND_FOYER, VERB_EXIT_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(199, 147, 199 + 19, 147 + 8)); + _scene->_dynamicHotspots.setPosition(idx, Common::Point(209, 152), FACING_SOUTH); + _scene->_dynamicHotspots.setCursor(idx, CURSOR_GO_DOWN); + + idx = _scene->_dynamicHotspots.add(NOUN_GRAND_FOYER, VERB_EXIT_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(84, 147, 84 + 61, 147 + 8)); + _scene->_dynamicHotspots.setPosition(idx, Common::Point(115, 152), FACING_SOUTH); + _scene->_dynamicHotspots.setCursor(idx, CURSOR_GO_DOWN); + } + + if ((_scene->_priorSceneId == 306) || (_endGameFl)) { + _globals._spriteIndexes[6] = _scene->_sprites.addSprites(formAnimName('f', 0)); + _scene->drawToBackground(_globals._spriteIndexes[6], 1, Common::Point(-32000, -32000), 0, 100); + } else if (_globals[kCurrentYear] == 1993) { + _globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('f', 1)); + _scene->drawToBackground(_globals._spriteIndexes[1], 1, Common::Point(-32000, -32000), 0, 100); + _scene->_sprites.remove(_globals._spriteIndexes[1]); + } + + if (_scene->_priorSceneId == RETURNING_FROM_LOADING) { + if (_endGameFl) { + _game.loadQuoteSet(0x75, 0); + + _globals._animationIndexes[2] = _scene->loadAnimation(formAnimName('r', 1), 0); + _anim2ActvFl = true; + + if (_florentGone) { + _scene->setAnimFrame(_globals._animationIndexes[2], 9); + _raoulStatus = 1; + } else { + _scene->setAnimFrame(_globals._animationIndexes[2], 32); + _raoulStatus = 4; + } + + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('m', 1), 0); + _anim0ActvFl = true; + _brieStatus = 2; + + _globals._animationIndexes[1] = _scene->loadAnimation(formAnimName('f', 1), 0); + _anim1ActvFl = true; + _florStatus = 2; + + if (_florentGone) + _scene->setAnimFrame(_globals._animationIndexes[1], 172); + else if (!_raoulDown) + _scene->setAnimFrame(_globals._animationIndexes[1], 21); + + _game._player._visible = false; + _vm->_gameConv->run(22); + _vm->_gameConv->exportPointer(&_globals[kPlayerScore]); + } else { + _globals._sequenceIndexes[3] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[3], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[3], 5); + } + } else if (_scene->_priorSceneId == 202) { + _globals._sequenceIndexes[3] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[3], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[3], 5); + if (_globals[kCurrentYear] == 1993) + _game._player._playerPos = Common::Point(175, 145); + else + _game._player._playerPos = Common::Point(115, 147); + + _game._player._facing = FACING_NORTHWEST; + } else if (_scene->_priorSceneId == 150) { + int size = _game._objects.size(); + for (int i = 0; i < size; i++) + _game._objects.setRoom(i, 1); + + _game.loadQuoteSet(0x75, 0); + + _globals._animationIndexes[2] = _scene->loadAnimation(formAnimName('r', 1), 0); + _anim2ActvFl = true; + _raoulStatus = 4; + _scene->setAnimFrame(_globals._animationIndexes[2], 32); + + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('m', 1), 0); + _anim0ActvFl = true; + _brieStatus = 2; + + _globals._animationIndexes[1] = _scene->loadAnimation(formAnimName('f', 1), 0); + _anim1ActvFl = true; + _raoulDown = true; + _florStatus = 2; + + _game._player._visible = false; + _endGameFl = true; + + _vm->_gameConv->run(22); + _vm->_gameConv->exportPointer(&_globals[kPlayerScore]); + } else if ((_scene->_priorSceneId == 203) || (_scene->_priorSceneId != RETURNING_FROM_LOADING)) { + _game._player.firstWalk(Common::Point(-10, 136), FACING_EAST, Common::Point(30, 140), FACING_EAST, true); + _game._player.setWalkTrigger(70); + _game._player._stepEnabled = false; + } + + sceneEntrySound(); +} + +void Scene204::step() { + if (_anim0ActvFl) + handleBrieAnimation(); + + if (_anim1ActvFl) + handleFlorAnimation(); + + if (_anim2ActvFl) + handleRaoulAnimation(); + + if (_anim3ActvFl) + handleEndAnimation(); + + if (_game._trigger == 85) + _scene->_nextSceneId = 250; + + if ((_vm->_gameConv->activeConvId() != 22) && !_skip1Fl && _endGameFl) { + _game._player._stepEnabled = false; + _skip1Fl = true; + } + + if (_game._trigger == 70) { + _globals._sequenceIndexes[3] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[3], false, 8, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[3], 10); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], -1, -2); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 71); + } else if (_game._trigger == 71) { + _vm->_sound->command(25); + _globals._sequenceIndexes[3] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[3], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[3], 5); + _game._player._stepEnabled = true; + } +} + +void Scene204::actions() { + if (_vm->_gameConv->activeConvId() == 22) { + handleConversation(); + + _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[5] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[5], true, 5, 2); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[5], 1, 4); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[5], true); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_SPRITE, 4, 60); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_EXPIRE, 0, 61); + break; + + case 60: + _vm->_sound->command(24); + _scene->deleteSequence(_globals._sequenceIndexes[3]); + _globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 8, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[3], 14); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], -1, -2); + break; + + case 61: + _game._player._visible = true; + _game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[5]); + _game._player.walk(Common::Point(0, 136), FACING_WEST); + _game._player.setWalkTrigger(62); + break; + + case 62: + _scene->_nextSceneId = 203; + break; + + default: + break; + } + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_TAKE, NOUN_BOOK) && (_game._objects.isInRoom(OBJ_BOOK) || _game._trigger)) { + switch (_game._trigger) { + case (0): + _game._player._stepEnabled = false; + _game._player._visible = false; + _globals._sequenceIndexes[4] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[4], false, 5, 2); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], -1, -2); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[4], true); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_SPRITE, 8, 1); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2); + break; + + case 1: + _scene->deleteSequence(_globals._sequenceIndexes[2]); + _scene->_hotspots.activate(NOUN_BOOK, false); + _game._objects.addToInventory(OBJ_BOOK); + _vm->_sound->command(26); + break; + + case 2: + _game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[4]); + _game._player._visible = true; + _scene->_sequences.addTimer(20, 3); + break; + + case 3: + _vm->_dialogs->showItem(OBJ_BOOK, 815, 0); + _globals[kReadBook] = true; + _globals[kPlayerScore] += 5; + _game._player._stepEnabled = true; + break; + + default: + break; + } + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_EXIT_TO, NOUN_GRAND_FOYER)) { + _scene->_nextSceneId = 202; + _action._inProgress = false; + return; + } + + if (_action._lookFlag) { + _vm->_dialogs->show(20410); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_LOOK) || _action.isAction(VERB_LOOK_AT)) { + if (_action.isObject(NOUN_WALL)) { + _vm->_dialogs->show(20411); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_FLOOR)) { + _vm->_dialogs->show(20412); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_RUG)) { + _vm->_dialogs->show(20413); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_GLASS_CASE)) { + _vm->_dialogs->show(20414); + _globals[kLookedAtCase] = true; + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_CEILING)) { + if (_globals[kSandbagStatus] == 0) + _vm->_dialogs->show(20429); + else + _vm->_dialogs->show(20416); + + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_BOOKCASE)) { + if (_globals[kCanFindBookInLibrary] && (_globals[kCurrentYear] == 1993)) { + if ((_scene->_customDest.x < 46) && !_game._objects.isInInventory(OBJ_BOOK)) { + if (!_globals[kScannedBookcase]) { + _vm->_dialogs->show(20433); + _scene->_hotspots.activate(NOUN_BOOK, true); + _globals[kScannedBookcase] = true; + } else { + _vm->_dialogs->show(20437); + } + } else { + _vm->_dialogs->show(20417); + } + } else { + _vm->_dialogs->show(20417); + } + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_SOFA)) { + _vm->_dialogs->show(20418); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_END_TABLE)) { + _vm->_dialogs->show(20419); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_LAMP)) { + _vm->_dialogs->show(20420); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_BUST)) { + _vm->_dialogs->show(20421); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_COFFEE_TABLE)) { + _vm->_dialogs->show(20422); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_COMFY_CHAIR)) { + _vm->_dialogs->show(20423); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_DECORATIVE_VASE )) { + _vm->_dialogs->show(20424); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_PAINTING)) { + _vm->_dialogs->show(20425); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_GRAND_FOYER)) { + _vm->_dialogs->show(20426); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_DOOR)) { + _vm->_dialogs->show(20427); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_WINDOW)) { + _vm->_dialogs->show(20428); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_BOOK) && _game._objects.isInRoom(OBJ_BOOK)) { + _vm->_dialogs->show(20434); + _action._inProgress = false; + return; + } + } + + if (_action.isAction(VERB_TALK_TO, NOUN_BUST)) { + _vm->_dialogs->show(20436); + _action._inProgress = false; + return; + } +} + +void Scene204::preActions() { + if (_action.isAction(VERB_LOOK, NOUN_BOOKCASE)) + _game._player._needToWalk = true; + + if (_action.isAction(VERB_LOOK, NOUN_BOOK) && _game._objects.isInRoom(OBJ_BOOK)) + _game._player._needToWalk = true; + + if (_action.isAction(VERB_OPEN, NOUN_DOOR)) + _game._player.walk(Common::Point(27, 139), FACING_WEST); +} + +void Scene204::handleConversation() { + bool interlocutorFl = false; + bool heroFl = false; + + switch (_action._activeAction._verbId) { + case 6: + case 7: + case 8: + if (_raoulDown) { + _vm->_gameConv->hold(); + _raoulDown = false; + } + break; + + case 17: + if (!_game._trigger) { + _florStatus = 3; + _florentGone = true; + interlocutorFl = true; + heroFl = true; + _vm->_gameConv->hold(); + } + break; + + case 25: + if (!_game._trigger) { + _raoulStatus = 5; + _florStatus = 5; + interlocutorFl = true; + heroFl = true; + _vm->_gameConv->hold(); + } + break; + + case 29: + interlocutorFl = true; + heroFl = true; + if (!_game._trigger) { + _brieStatus = 3; + _vm->_gameConv->hold(); + } + break; + + default: + break; + } + + switch (_game._trigger) { + case 75: + if (_florentGone) { + if (_raoulStatus != 2) + _raoulStatus = 0; + } else + _florStatus = 4; + + break; + + case 80: + if (_florentGone) { + if ((_action._activeAction._verbId != 18) && (_action._activeAction._verbId != 23)) + _brieStatus = 0; + } else { + switch (_action._activeAction._verbId) { + case 1: + case 7: + case 8: + case 9: + case 13: + case 15: + case 19: + case 20: + case 21: + case 22: + _brieStatus = 0; + break; + + default: + _florStatus = 0; + break; + } + } + break; + + default: + break; + } + + if (!heroFl && !_raoulDown) + _vm->_gameConv->setHeroTrigger(75); + + if (!interlocutorFl) + _vm->_gameConv->setInterlocutorTrigger(80); + + _raoulCount = 0; +} + +void Scene204::handleBrieAnimation() { + if (_scene->_animation[_globals._animationIndexes[0]]->getCurrentFrame() == _brieFrame) + return; + + _brieFrame = _scene->_animation[_globals._animationIndexes[0]]->getCurrentFrame(); + int resetFrame = -1; + int random; + + switch (_brieFrame) { + case 80: + _vm->_gameConv->release(); + _raoulStatus = 2; + break; + + case 173: + _game._player._stepEnabled = true; + _vm->_dialogs->show(20430); + _game._player._stepEnabled = false; + break; + + case 174: + _raoulStatus = 3; + resetFrame = 173; + break; + + case 1: + case 22: + case 49: + case 7: + case 13: + case 33: + case 61: + switch (_brieStatus) { + case 0: + random = _vm->getRandomNumber(1, 4); + _brieStatus = 2; + break; + + case 1: + random = 5; + break; + + case 3: + random = 6; + break; + + case 4: + random = 7; + break; + + default: + random = 8; + break; + } + + switch (random) { + case 1: + resetFrame = 1; + _brieStatus = 2; + break; + + case 2: + resetFrame = 7; + _brieStatus = 2; + break; + + case 3: + resetFrame = 22; + _brieStatus = 2; + break; + + case 4: + resetFrame = 49; + _brieStatus = 2; + break; + + case 5: + resetFrame = 13; + _brieStatus = 2; + break; + + case 6: + resetFrame = 61; + break; + + default: + resetFrame = 0; + break; + } + break; + } + + if (resetFrame >= 0) { + _scene->setAnimFrame(_globals._animationIndexes[0], resetFrame); + _brieFrame = resetFrame; + } +} + +void Scene204::handleFlorAnimation() { + if (_scene->_animation[_globals._animationIndexes[1]]->getCurrentFrame() == _florFrame) + return; + + _florFrame = _scene->_animation[_globals._animationIndexes[1]]->getCurrentFrame(); + int resetFrame = -1; + int random; + + switch (_florFrame) { + case 80: + _scene->setAnimFrame(_globals._animationIndexes[2], 1); + _game.syncTimers(SYNC_ANIM, _globals._animationIndexes[2], SYNC_ANIM, _globals._animationIndexes[1]); + _raoulStatus = 1; + break; + + case 86: + _vm->_gameConv->release(); + break; + + case 173: + resetFrame = 172; + break; + + case 1: + case 2: + case 3: + if (_raoulDown) { + random = _vm->getRandomNumber(1, 1000); + if (random < 300) + resetFrame = 0; + else if (random < 600) + resetFrame = 1; + else + resetFrame = 2; + } + break; + + case 21: + case 180: + _vm->_gameConv->release(); + break; + + case 22: + case 50: + case 30: + case 174: + case 175: + case 176: + case 181: + switch (_florStatus) { + case 0: + random = 1; + _florStatus = 2; + break; + + case 1: + random = 2; + _florStatus = 2; + break; + + case 3: + random = 3; + break; + + case 5: + random = 4; + _florStatus = 2; + break; + + case 4: + random = _vm->getRandomNumber(5, 7); + ++_raoulCount; + if (_raoulCount > 17) { + _florStatus = 2; + random = 8; + } + break; + + default: + random = 7; + break; + } + + switch (random) { + case 1: + resetFrame = 22; + break; + + case 2: + resetFrame = 30; + break; + + case 3: + resetFrame = 53; + break; + + case 4: + resetFrame = 176; + break; + + case 5: + resetFrame = 173; + break; + + case 6: + resetFrame = 174; + break; + + case 7: + resetFrame = 175; + break; + + default: + resetFrame = 21; + break; + } + break; + } + + if (resetFrame >= 0) { + _scene->setAnimFrame(_globals._animationIndexes[1], resetFrame); + _florFrame = resetFrame; + } +} + +void Scene204::handleRaoulAnimation() { + if (_scene->_animation[_globals._animationIndexes[2]]->getCurrentFrame() == _raoulFrame) + return; + + _raoulFrame = _scene->_animation[_globals._animationIndexes[2]]->getCurrentFrame(); + int resetFrame = -1; + int random; + + switch (_raoulFrame) { + case 1: + if (_raoulStatus == 4) + resetFrame = 0; + + break; + + case 10: + case 14: + case 20: + case 258: + switch (_raoulStatus) { + case 0: + random = _vm->getRandomNumber(1, 2); + _raoulStatus = 1; + break; + + case 2: + random = 3; + break; + + case 5: + random = 4; + break; + + default: + random = 5; + break; + } + + switch (random) { + case 1: + resetFrame = 10; + _raoulStatus = 1; + break; + + case 2: + resetFrame = 14; + _raoulStatus = 1; + break; + + case 3: + resetFrame = 20; + break; + + case 4: + resetFrame = 253; + _raoulStatus = 1; + break; + + default: + resetFrame = 9; + break; + } + break; + + case 31: + if (_raoulStatus == 3) + resetFrame = 33; + else + resetFrame = 30; + + break; + + case 33: + resetFrame = 32; + break; + + case 114: + _scene->deleteSequence(_globals._sequenceIndexes[2]); + _game._objects.addToInventory(OBJ_BOOK); + break; + + case 213: + _game._player._stepEnabled = true; + _vm->_dialogs->showItem(OBJ_BOOK, 20431, 0); + _game._player._stepEnabled = false; + break; + + case 229: + _game._player._stepEnabled = true; + _vm->_dialogs->showItem(OBJ_BOOK, 20432, 0); + _game._player._stepEnabled = false; + break; + + case 237: + _scene->freeAnimation(_globals._animationIndexes[1]); + _scene->freeAnimation(_globals._animationIndexes[0]); + _anim0ActvFl = false; + _anim1ActvFl = false; + _anim3ActvFl = true; + _globals._animationIndexes[3] = _scene->loadAnimation(formAnimName('e', 1), 0); + _scene->loadSpeech(9); + break; + + case 253: + resetFrame = 244; + break; + + case 257: + _vm->_gameConv->release(); + break; + } + + if (resetFrame >= 0) { + _scene->setAnimFrame(_globals._animationIndexes[2], resetFrame); + _raoulFrame = resetFrame; + } +} + +void Scene204::handleEndAnimation() { + if ((_scene->_animation[_globals._animationIndexes[3]]->getCurrentFrame() == 15) && !_skip3Fl) { + _scene->playSpeech(9); + _skip3Fl = true; + } + + if ((_scene->_animation[_globals._animationIndexes[3]]->getCurrentFrame() == 26) && !_skip2Fl) { + _scene->_sequences.addTimer(300, 85); + _scene->_kernelMessages.add(Common::Point(123, 137), 0x1110, 0, 0, 360, _game.getQuote(0x75)); + _skip2Fl = true; + } + + if (_scene->_animation[_globals._animationIndexes[3]]->getCurrentFrame() == 27) + _scene->setAnimFrame(_globals._animationIndexes[3], 12); +} + +/*------------------------------------------------------------------------*/ + +Scene205::Scene205(MADSEngine *vm) : Scene2xx(vm) { + _anim0ActvFl = false; + _anim1ActvFl = false; + _noConversationHold = false; + _giveTicketFl = false; + + _richardFrame = -1; + _richardStatus = -1; + _richardCount = -1; + _giryFrame = -1; + _giryStatus = -1; + _giryCount = -1; + _conversationCounter = -1; + _lastRandom = -1; +} + +void Scene205::synchronize(Common::Serializer &s) { + Scene2xx::synchronize(s); + + s.syncAsByte(_anim0ActvFl); + s.syncAsByte(_anim1ActvFl); + s.syncAsByte(_noConversationHold); + s.syncAsByte(_giveTicketFl); + + s.syncAsSint16LE(_richardFrame); + s.syncAsSint16LE(_richardStatus); + s.syncAsSint16LE(_richardCount); + s.syncAsSint16LE(_giryFrame); + s.syncAsSint16LE(_giryStatus); + s.syncAsSint16LE(_giryCount); + s.syncAsSint16LE(_conversationCounter); + s.syncAsSint16LE(_lastRandom); +} + +void Scene205::setup() { + setPlayerSpritesPrefix(); + setAAName(); + + if (_globals[kCurrentYear] != 1881) + return; + + if (_globals[kJacquesStatus] == 1) + _scene->_variant = 3; + else if (_globals[kJacquesStatus] == 0) { + if (_globals[kMadameGiryLocation] == 0) + _scene->_variant = 2; + else if (_globals[kMadameGiryLocation] == 1) + _scene->_variant = 1; + } +} + +void Scene205::enter() { + _vm->_disableFastwalk = true; + + if (_globals[kJacquesStatus] != 1) { + _scene->_rails.disableNode(6); + _scene->_rails.disableNode(7); + _scene->_rails.disableNode(8); + _scene->_rails.disableNode(9); + } + + if (_scene->_priorSceneId != RETURNING_FROM_LOADING) { + _lastRandom = -1; + _anim0ActvFl = false; + _anim1ActvFl = false; + } + + _conversationCounter = 0; + _noConversationHold = false; + _giveTicketFl = false; + + _globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('f', 0)); + _globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('f', 1)); + _globals._spriteIndexes[2] = _scene->_sprites.addSprites("*RDR_9"); + + _scene->_hotspots.activate(NOUN_MONSIEUR_RICHARD, false); + _scene->_hotspots.activate(NOUN_MADAME_GIRY, false); + _scene->_hotspots.activate(NOUN_WOMAN, false); + + _vm->_gameConv->load(18); + _vm->_gameConv->load(10); + _vm->_gameConv->load(11); + + if (_globals[kCurrentYear] == 1881) { + if ((_globals[kMadameGiryShowsUp]) && (_globals[kJacquesStatus] == 0)) { + _globals._animationIndexes[1] = _scene->loadAnimation(formAnimName('g', 1), 1); + _anim1ActvFl = true; + _giryStatus = 2; + + int idx = _scene->_dynamicHotspots.add(NOUN_MADAME_GIRY, VERB_WALK_TO, SYNTAX_SINGULAR_FEM, EXT_NONE, Common::Rect(0, 0, 0, 0)); + _scene->_dynamicHotspots[idx]._articleNumber = PREP_ON; + _scene->_dynamicHotspots.setPosition(idx, Common::Point(75, 84), FACING_NORTHWEST); + _scene->setDynamicAnim(idx, _globals._animationIndexes[1], 1); + _scene->setDynamicAnim(idx, _globals._animationIndexes[1], 2); + + switch (_globals[kMadameGiryLocation]) { + case 0: + _scene->setAnimFrame(_globals._animationIndexes[1], 138); + _scene->_hotspots.activateAtPos(NOUN_MADAME_GIRY, true, Common::Point(62, 54)); + _scene->_hotspots.activateAtPos(NOUN_MADAME_GIRY, true, Common::Point(62, 66)); + break; + + case 1: + if (_globals[kMadameNameIsKnown] >= 1) { + _scene->_hotspots.activateAtPos(NOUN_MADAME_GIRY, true, Common::Point(113, 44)); + _scene->_hotspots.activateAtPos(NOUN_MADAME_GIRY, true, Common::Point(107, 66)); + } else + _scene->_hotspots.activate(NOUN_WOMAN, true); + + break; + + case 2: + _scene->setAnimFrame(_globals._animationIndexes[1], 273); + _scene->_hotspots.activateAtPos(NOUN_MADAME_GIRY, true, Common::Point(283, 51)); + _scene->_hotspots.activateAtPos(NOUN_MADAME_GIRY, true, Common::Point(289, 62)); + break; + + default: + break; + } + } + + if (_scene->_priorSceneId == RETURNING_FROM_LOADING) { + if (_vm->_gameConv->restoreRunning() == 10) { + int count = 0; + + if (_game._objects.isInInventory(OBJ_RED_FRAME)) + ++count; + if (_game._objects.isInInventory(OBJ_GREEN_FRAME)) + ++count; + if (_game._objects.isInInventory(OBJ_YELLOW_FRAME)) + ++count; + if (_game._objects.isInInventory(OBJ_BLUE_FRAME)) + ++count; + + _vm->_gameConv->run(10); + _vm->_gameConv->exportPointer(&_globals[kPlayerScore]); + _vm->_gameConv->exportValue(_game._difficulty); + + if (count > 2) + _vm->_gameConv->exportValue(1); + else + _vm->_gameConv->exportValue(0); + + _globals[kWalkerConverse] = _vm->getRandomNumber(1, 4); + _noConversationHold = true; + + if (_giryStatus == 4) + _scene->setAnimFrame(_globals._animationIndexes[1], 66); + else + _giryStatus = 2; + } else if (_vm->_gameConv->restoreRunning() == 11) { + _vm->_gameConv->run(11); + _vm->_gameConv->exportValue(_game._objects.isInInventory(OBJ_TICKET)); + _vm->_gameConv->exportValue(0); + _vm->_gameConv->exportValue(0); + _globals[kWalkerConverse] = _vm->getRandomNumber(1, 4); + } + } + } + + if (_scene->_priorSceneId == RETURNING_FROM_LOADING) { + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); + + _globals._sequenceIndexes[1] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[1], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[1], 14); + + if (_globals[kJacquesStatus] == 1) { + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('b', 9), 1); + _anim0ActvFl = true; + _richardStatus = 3; + _scene->_hotspots.activate(NOUN_MONSIEUR_RICHARD, true); + + if (_vm->_gameConv->restoreRunning() == 18) { + _globals[kWalkerConverse] = _vm->getRandomNumber(1, 4); + _richardStatus = 3; + _vm->_gameConv->run(18); + _scene->setAnimFrame(_globals._animationIndexes[0], 1); + } + } + } + + if (_scene->_priorSceneId == 206) { + _game._player._playerPos = Common::Point(37, 64); + _game._player._facing = FACING_SOUTH; + _game._player.walk(Common::Point(41, 67), FACING_SOUTH); + _game._player.setWalkTrigger(90); + _game._player._stepEnabled = false; + _globals._sequenceIndexes[1] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[1], false, -1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[1], 14); + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, -2); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); + if (_globals[kJacquesStatus] == 1) { + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('b', 9), 1); + _anim0ActvFl = true; + _richardStatus = 3; + _scene->_hotspots.activate(NOUN_MONSIEUR_RICHARD, true); + } + } else if (_scene->_priorSceneId == 207) { + _game._player._playerPos = Common::Point(263, 59); + _game._player._facing = FACING_SOUTH; + _game._player.walk(Common::Point(262, 63), FACING_SOUTH); + _game._player.setWalkTrigger(95); + _game._player._stepEnabled = false; + _globals._sequenceIndexes[1] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[1], false, -2); + _scene->_sequences.setDepth(_globals._sequenceIndexes[1], 14); + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, -1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); + } else if (_scene->_priorSceneId == 150) { + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('b', 9), 1); + _anim0ActvFl = true; + _richardStatus = 3; + _game._player._playerPos = Common::Point(132, 112); + _game._player._facing = FACING_NORTHWEST; + _globals[kDoorsIn205] = 1; + _globals[kTicketPeoplePresent] = 0; + _globals[kWalkerConverse] = _vm->getRandomNumber(1, 4); + _globals._sequenceIndexes[1] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[1], false, -1); + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, -1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[1], 14); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); + _scene->_hotspots.activate(NOUN_MONSIEUR_RICHARD, true); + _vm->_gameConv->run(18); + } else if ((_scene->_priorSceneId == 202) || (_scene->_priorSceneId != RETURNING_FROM_LOADING)) { + if (_globals[kJacquesStatus] == 1) { + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('b', 9), 1); + _anim0ActvFl = true; + _richardStatus = 3; + _scene->_hotspots.activate(NOUN_MONSIEUR_RICHARD, true); + } + + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); + + _globals._sequenceIndexes[1] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[1], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[1], 14); + + _game._player.firstWalk(Common::Point(-20, 144), FACING_EAST, Common::Point(19, 144), FACING_NORTHEAST, true); + } + + sceneEntrySound(); +} + +void Scene205::step() { + if (_anim0ActvFl) + handleRichardAnimation(); + + if (_anim1ActvFl) + handleGiryAnimation(); + + if ((_globals[kWalkerConverse] == 2) || (_globals[kWalkerConverse] == 3)) { + ++_conversationCounter; + if (_conversationCounter > 200) + _globals[kWalkerConverse] = _vm->getRandomNumber(1, 4); + } + + if (_giveTicketFl && !_action.isAction(VERB_GIVE)) { + _globals[kWalkerConverse] = 0; + _game._player.walk(Common::Point(_game._player._playerPos.x + 5, _game._player._playerPos.y - 10), FACING_NORTHWEST); + _game._player.setWalkTrigger(100); + _giveTicketFl = false; + } + + switch (_game._trigger) { + case 100: + _game._player._visible = false; + _globals._sequenceIndexes[2] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[2], true, 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, 102); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_SPRITE, 4, 101); + break; + + case 101: + _game._objects.setRoom(OBJ_TICKET, NOWHERE); + _giryStatus = 2; + break; + + case 102: + _game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[2]); + _game._player._visible = true; + _game._player._stepEnabled = true; + _vm->_gameConv->release(); + break; + + default: + break; + } + + switch (_game._trigger) { + case 90: + _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, -2); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_EXPIRE, 0, 91); + break; + + case 91: + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, -1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); + _vm->_sound->command(25); + _game._player._stepEnabled = true; + break; + + case 95: + _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, -2); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 96); + break; + + case 96: + _globals._sequenceIndexes[1] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[1], false, -1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[1], 14); + _vm->_sound->command(25); + _game._player._stepEnabled = true; + break; + + default: + break; + } +} + +void Scene205::actions() { + if (_vm->_gameConv->activeConvId() == 18) { + handleConversation18(); + _action._inProgress = false; + return; + } + + if (_vm->_gameConv->activeConvId() == 10) { + handleConversation10(); + _action._inProgress = false; + return; + } + + if (_vm->_gameConv->activeConvId() == 11) { + handleConversation11(); + _action._inProgress = false; + return; + } + + if ((_action.isAction(VERB_OPEN, NOUN_BOX_FIVE)) || (_action.isAction(VERB_ENTER, NOUN_BOX_FIVE))) { + if (_globals[kTicketPeoplePresent] == 2) { + if (_globals[kMadameGiryLocation] == 2) { + _vm->_gameConv->run(11); + _vm->_gameConv->exportValue(_game._objects.isInInventory(OBJ_TICKET)); + _vm->_gameConv->exportValue(3); + _vm->_gameConv->exportValue(0); + } else { + _vm->_gameConv->run(11); + _vm->_gameConv->exportValue(_game._objects.isInInventory(OBJ_TICKET)); + _vm->_gameConv->exportValue(4); + _vm->_gameConv->exportValue(0); + } + _action._inProgress = false; + return; + } + } + + if (_action.isAction(VERB_WALK_DOWN_STAIRS_TO, NOUN_GRAND_FOYER)) { + if (_globals[kTicketPeoplePresent] == 2) { + if (_globals[kMadameGiryLocation] == 2) { + _vm->_gameConv->run(11); + _vm->_gameConv->exportValue(_game._objects.isInInventory(OBJ_TICKET)); + _vm->_gameConv->exportValue(1); + _vm->_gameConv->exportValue(0); + } else { + _vm->_gameConv->run(11); + _vm->_gameConv->exportValue(_game._objects.isInInventory(OBJ_TICKET)); + _vm->_gameConv->exportValue(2); + _vm->_gameConv->exportValue(0); + } + _action._inProgress = false; + return; + } + } + + if ((_action.isAction(VERB_ENTER)) || (_action.isAction(VERB_OPEN)) || _action.isAction(VERB_UNLOCK) || _action.isAction(VERB_LOCK)) { + if (((_action.isObject(NOUN_BOX_FIVE) && ((_globals[kDoorsIn205] == 0) || (_globals[kDoorsIn205] == 2))) + || _action.isAction(VERB_UNLOCK) || _action.isAction(VERB_LOCK)) + || ((_action.isObject(NOUN_BOX_NINE) && ((_globals[kDoorsIn205] == 0) || (_globals[kDoorsIn205] == 1)))) + || (_action.isObject(NOUN_BOX_SIX)) || (_action.isObject(NOUN_BOX_SEVEN)) || (_action.isObject(NOUN_BOX_EIGHT))) { + 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); + _action._inProgress = false; + return; + + case 1: { + int idx = _globals._sequenceIndexes[2]; + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 4); + _game.syncTimers(SYNC_SEQ, _globals._sequenceIndexes[2], SYNC_SEQ, idx); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[2], false); + _vm->_sound->command(72); + _scene->_sequences.addTimer(15, 2); + _action._inProgress = false; + return; + } + + 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); + _action._inProgress = false; + return; + + case 3: + _game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[2]); + _game._player._visible = true; + _game._player._stepEnabled = true; + if (_action.isAction(VERB_UNLOCK) || _action.isAction(VERB_LOCK)) + _vm->_dialogs->show(20528); + else + _vm->_dialogs->show(20527); + + _action._inProgress = false; + return; + + default: + break; + } + } else if (((_action.isObject(NOUN_BOX_FIVE)) && ((_globals[kDoorsIn205] == 3) || (_globals[kDoorsIn205] == 1))) + || ((_action.isObject(NOUN_BOX_NINE)) && ((_globals[kDoorsIn205] == 3) || (_globals[kDoorsIn205] == 2)))) { + 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, 4, 80); + _action._inProgress = false; + return; + + case 80: + _vm->_sound->command(24); + if (_action.isObject(NOUN_BOX_FIVE)) { + _scene->deleteSequence(_globals._sequenceIndexes[0]); + _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, -2); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_EXPIRE, 0, 81); + } else if (_action.isObject(NOUN_BOX_NINE)) { + _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, 81); + } + _action._inProgress = false; + return; + + case 81: + if (_action.isObject(NOUN_BOX_FIVE)) { + int idx = _globals._sequenceIndexes[0]; + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, -2); + _game.syncTimers(SYNC_SEQ, _globals._sequenceIndexes[0], SYNC_SEQ, idx); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); + } else if (_action.isObject(NOUN_BOX_NINE)) { + int idx = _globals._sequenceIndexes[1]; + _globals._sequenceIndexes[1] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[1], false, -2); + _game.syncTimers(SYNC_SEQ, _globals._sequenceIndexes[1], SYNC_SEQ, idx); + _scene->_sequences.setDepth(_globals._sequenceIndexes[1], 14); + } + _action._inProgress = false; + return; + + case 2: + _game._player._visible = true; + _game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[2]); + if (_action.isObject(NOUN_BOX_FIVE)) { + _game._player.walk(Common::Point(37, 64), FACING_NORTH); + _game._player.setWalkTrigger(3); + + } else if (_action.isObject(NOUN_BOX_NINE)) { + _game._player.walk(Common::Point(263, 59), FACING_NORTH); + _game._player.setWalkTrigger(3); + } + _action._inProgress = false; + return; + + case 3: + if (_action.isObject(NOUN_BOX_FIVE)) { + _scene->_nextSceneId = 206; + _globals[kMadameGiryLocation] = 1; + } else if (_action.isObject(NOUN_BOX_NINE)) { + _scene->_nextSceneId = 207; + _globals[kMadameGiryLocation] = 1; + } + _action._inProgress = false; + return; + + default: + break; + } + } + } + + if (_action.isAction(VERB_TALK_TO, NOUN_MONSIEUR_RICHARD)) { + _vm->_gameConv->run(18); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_TALK_TO, NOUN_MADAME_GIRY) || _action.isAction(VERB_TALK_TO, NOUN_WOMAN) || _action.isAction(VERB_GIVE, NOUN_TICKET, NOUN_MADAME_GIRY)) { + if (_globals[kTicketPeoplePresent] == 2) { + if ((_globals[kDoorsIn205] == 2) || (_globals[kDoorsIn205] == 3)) { + if (_globals[kMadameGiryLocation] == 2) { + _vm->_gameConv->run(11); + _vm->_gameConv->exportValue(_game._objects.isInInventory(OBJ_TICKET)); + _vm->_gameConv->exportValue(1); + + if (_action.isAction(VERB_GIVE)) + _vm->_gameConv->exportValue(1); + else + _vm->_gameConv->exportValue(0); + } else { + _vm->_gameConv->run(11); + _vm->_gameConv->exportValue(_game._objects.isInInventory(OBJ_TICKET)); + _vm->_gameConv->exportValue(2); + + if (_action.isAction(VERB_GIVE)) + _vm->_gameConv->exportValue(1); + else + _vm->_gameConv->exportValue(0); + } + } else { + _vm->_gameConv->run(11); + _vm->_gameConv->exportValue(_game._objects.isInInventory(OBJ_TICKET)); + _vm->_gameConv->exportValue(0); + + if (_action.isAction(VERB_GIVE)) + _vm->_gameConv->exportValue(1); + else + _vm->_gameConv->exportValue(0); + } + } else { + int count = 0; + + if (_game._objects.isInInventory(OBJ_RED_FRAME)) + ++count; + if (_game._objects.isInInventory(OBJ_GREEN_FRAME)) + ++count; + if (_game._objects.isInInventory(OBJ_YELLOW_FRAME)) + ++count; + if (_game._objects.isInInventory(OBJ_BLUE_FRAME)) + ++count; + + _vm->_gameConv->run(10); + _vm->_gameConv->exportPointer(&_globals[kPlayerScore]); + _vm->_gameConv->exportValue(_game._difficulty); + + if (count > 2) + _vm->_gameConv->exportValue(1); + else + _vm->_gameConv->exportValue(0); + + _globals[kWalkerConverse] = _vm->getRandomNumber(1, 4); + } + _action._inProgress = false; + return; + } + + if (_action._lookFlag) { + _vm->_dialogs->show(20510); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_LOOK) || _action.isAction(VERB_LOOK_AT)) { + if (_action.isObject(NOUN_BOX_SIX)) { + _vm->_dialogs->show(20511); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_BOX_SEVEN)) { + _vm->_dialogs->show(20512); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_BOX_EIGHT)) { + _vm->_dialogs->show(20513); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_BOX_NINE)) { + if ((_globals[kDoorsIn205] == 0) || (_globals[kDoorsIn205] == 1)) + _vm->_dialogs->show(20516); + else + _vm->_dialogs->show(20517); + + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_BOX_FIVE)) { + if ((_globals[kDoorsIn205] == 0) || (_globals[kDoorsIn205] == 2)) + _vm->_dialogs->show(20514); + else + _vm->_dialogs->show(20515); + + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_FLOOR)) { + _vm->_dialogs->show(20518); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_MARBLE_COLUMN)) { + _vm->_dialogs->show(20519); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_CEILING)) { + _vm->_dialogs->show(20520); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_WALL)) { + _vm->_dialogs->show(20521); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_BUST)) { + _vm->_dialogs->show(20522); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_CARPET)) { + _vm->_dialogs->show(20523); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_GRAND_FOYER)) { + _vm->_dialogs->show(20524); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_WOMAN) || _action.isObject(NOUN_MADAME_GIRY)) { + _vm->_dialogs->show(20525); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_MONSIEUR_RICHARD)) { + _vm->_dialogs->show(20526); + _action._inProgress = false; + return; + } + } + + if (_action.isAction(VERB_TALK_TO, NOUN_BUST)) { + _vm->_dialogs->show(20529); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_OPEN, NOUN_BOX_TEN) || _action.isAction(VERB_ENTER, NOUN_BOX_TEN) || _action.isAction(VERB_LOOK, NOUN_BOX_TEN)) { + _vm->_dialogs->show(20513); + _action._inProgress = false; + return; + } + + // FIX: the original was doing a | between the two 'objects' + if (_action.isAction(VERB_TAKE) && (_action.isObject(NOUN_WOMAN) || _action.isObject(NOUN_MADAME_GIRY))) { + _vm->_dialogs->show(20530); + _action._inProgress = false; + return; + } +} + +void Scene205::preActions() { + if (_action.isObject(NOUN_BOX_FIVE) && (_action.isAction(VERB_LOCK) || _action.isAction(VERB_UNLOCK) || _action.isAction(VERB_OPEN))) + _game._player.walk(Common::Point(37, 67), FACING_NORTHEAST); + + if (_action.isObject(NOUN_BOX_SIX) && (_action.isAction(VERB_LOCK) || _action.isAction(VERB_UNLOCK) || _action.isAction(VERB_OPEN))) + _game._player.walk(Common::Point(80, 68), FACING_NORTHEAST); + + if (_action.isObject(NOUN_BOX_SEVEN) && (_action.isAction(VERB_LOCK) || _action.isAction(VERB_UNLOCK) || _action.isAction(VERB_OPEN))) + _game._player.walk(Common::Point(167, 65), FACING_NORTHEAST); + + if (_action.isObject(NOUN_BOX_EIGHT) && (_action.isAction(VERB_LOCK) || _action.isAction(VERB_UNLOCK) || _action.isAction(VERB_OPEN))) + _game._player.walk(Common::Point(212, 64), FACING_NORTHEAST); + + if (_action.isObject(NOUN_BOX_NINE) && (_action.isAction(VERB_LOCK) || _action.isAction(VERB_UNLOCK) || _action.isAction(VERB_OPEN))) + _game._player.walk(Common::Point(258, 63), FACING_NORTHEAST); + + if (_action.isAction(VERB_WALK_DOWN_STAIRS_TO, NOUN_GRAND_FOYER) && (_globals[kDoorsIn205] != 2) && (_globals[kDoorsIn205] != 3)) { + _game._player._walkOffScreenSceneId = 202; + _globals[kMadameGiryLocation] = 1; + } +} + +void Scene205::handleConversation18() { + int interlocutorFl = false; + int heroFl = false; + + switch (_action._activeAction._verbId) { + case 0: + _globals[kWalkerConverse] = _vm->getRandomNumber(1, 4); + _richardStatus = 0; + break; + + case 3: + case 4: + _vm->_gameConv->setHeroTrigger(64); + _globals[kRanConvIn205] = true; + heroFl = true; + interlocutorFl = true; + break; + + default: + break; + } + + switch (_game._trigger) { + case 64: + _globals[kWalkerConverse] = 0; + heroFl = true; + interlocutorFl = true; + break; + + case 62: + _globals[kWalkerConverse] = _vm->getRandomNumber(1, 4); + _richardStatus = 0; + break; + + case 60: + _globals[kWalkerConverse] = _vm->getRandomNumber(2, 3); + _richardStatus = 3; + _conversationCounter = 0; + break; + + default: + break; + } + + if (!heroFl) + _vm->_gameConv->setHeroTrigger(60); + + if (!interlocutorFl) + _vm->_gameConv->setInterlocutorTrigger(62); + + _richardCount = 0; +} + +void Scene205::handleConversation10() { + int interlocutorFl = false; + int heroFl = false; + + switch (_action._activeAction._verbId) { + case 9: + _vm->_gameConv->setInterlocutorTrigger(68); + interlocutorFl = true; + _globals[kMadameNameIsKnown] = 1; + _scene->_hotspots.activate(NOUN_WOMAN, false); + _scene->_hotspots.activateAtPos(NOUN_MADAME_GIRY, true, Common::Point(113, 44)); + _scene->_hotspots.activateAtPos(NOUN_MADAME_GIRY, true, Common::Point(107, 66)); + break; + + case 10: + _globals[kMadameNameIsKnown] = 1; + _scene->_hotspots.activate(NOUN_WOMAN, false); + _scene->_hotspots.activateAtPos(NOUN_MADAME_GIRY, true, Common::Point(113, 44)); + _scene->_hotspots.activateAtPos(NOUN_MADAME_GIRY, true, Common::Point(107, 66)); + break; + + case 7: + if (!_game._trigger) { + _giryStatus = 6; + _globals[kMadameNameIsKnown] = 2; + _globals[kMadameGiryLocation] = 0; + _scene->changeVariant(2); + _scene->_rails.disableNode(6); + _scene->_rails.disableNode(7); + _scene->_rails.disableNode(8); + _scene->_rails.disableNode(9); + _scene->_hotspots.activateAtPos(NOUN_MADAME_GIRY, false, Common::Point(113, 44)); + _scene->_hotspots.activateAtPos(NOUN_MADAME_GIRY, false, Common::Point(107, 66)); + interlocutorFl = true; + heroFl = true; + if (_globals[kDoorsIn205] == 0) + _globals[kDoorsIn205] = 1; + else if (_globals[kDoorsIn205] == 2) + _globals[kDoorsIn205] = 3; + } + break; + + case 13: + case 45: + _vm->_gameConv->setInterlocutorTrigger(70); + interlocutorFl = true; + break; + + case 21: + if (!_game._trigger && !_noConversationHold) { + _vm->_gameConv->hold(); + _giryStatus = 4; + } else + _noConversationHold = false; + + break; + + case 17: + _vm->_gameConv->setInterlocutorTrigger(72); + interlocutorFl = true; + break; + + case 11: + if (!_game._trigger) { + _vm->_gameConv->setInterlocutorTrigger(74); + } + heroFl = true; + interlocutorFl = true; + break; + + case 23: + case 25: + if ((!_game._trigger) && (_giryStatus == 4)) { + _vm->_gameConv->hold(); + _giryStatus = 0; + } + break; + + case 4: + case 5: + case 8: + case 14: + case 16: + case 19: + case 40: + case 46: + _vm->_gameConv->setInterlocutorTrigger(64); + interlocutorFl = true; + break; + + default: + break; + } + + switch (_game._trigger) { + case 64: + switch (_action._activeAction._verbId) { + case 5: + case 14: + case 16: + case 19: + case 40: + case 46: + _giryStatus = 0; + break; + } + _globals[kWalkerConverse] = 0; + heroFl = true; + interlocutorFl = true; + break; + + case 68: + _giryStatus = 5; + break; + + case 74: + _giryStatus = 8; + _globals[kWalkerConverse] = 0; + heroFl = true; + interlocutorFl = true; + break; + + case 72: + _giryStatus = 3; + break; + + case 70: + if (_action._activeAction._verbId == 13) { + _globals[kWalkerConverse] = 0; + heroFl = true; + interlocutorFl = true; + } + _giryStatus = 1; + break; + + case 66: + if (_globals[kWalkerConverse] != 0) + _globals[kWalkerConverse] = _vm->getRandomNumber(1, 4); + + if ((_giryStatus != 4) && (_giryStatus != 6) && (_giryStatus != 7)) + _giryStatus = 0; + break; + + case 60: + if (_globals[kWalkerConverse] != 0) + _globals[kWalkerConverse] = _vm->getRandomNumber(2, 3); + + if ((_giryStatus != 4) && (_giryStatus != 6) && (_giryStatus != 7)) + _giryStatus = 2; + + _conversationCounter = 0; + break; + } + + if (!heroFl) + _vm->_gameConv->setHeroTrigger(60); + + if (!interlocutorFl) + _vm->_gameConv->setInterlocutorTrigger(66); + + _giryCount = 0; +} + +void Scene205::handleConversation11() { + int interlocutorFl = false; + int heroFl = false; + + switch (_action._activeAction._verbId) { + case 5: + if (!_game._trigger) { + _vm->_gameConv->hold(); + _giryStatus = 9; + } + break; + + case 8: + if (!_game._trigger) { + _vm->_gameConv->hold(); + _giryStatus = 7; + _vm->_gameConv->setInterlocutorTrigger(64); + _game._player.walk(Common::Point(225,79), FACING_NORTHEAST); + interlocutorFl = true; + _globals[kMadameGiryLocation] = 2; + _scene->changeVariant(4); + _scene->_rails.disableNode(6); + _scene->_rails.disableNode(7); + _scene->_rails.disableNode(8); + _scene->_rails.disableNode(9); + _scene->_hotspots.activateAtPos(NOUN_MADAME_GIRY, false, Common::Point(113, 44)); + _scene->_hotspots.activateAtPos(NOUN_MADAME_GIRY, false, Common::Point(107, 66)); + if (_globals[kDoorsIn205] == 0) + _globals[kDoorsIn205] = 2; + else if (_globals[kDoorsIn205] == 1) + _globals[kDoorsIn205] = 3; + } + break; + + case 9: + case 10: + case 12: + case 13: + case 14: + _vm->_gameConv->setInterlocutorTrigger(64); + interlocutorFl = true; + break; + } + + switch (_game._trigger) { + case 64: + switch (_action._activeAction._verbId) { + case 6: + case 10: + case 12: + case 13: + case 14: + _giryStatus = 0; + break; + } + _globals[kWalkerConverse] = 0; + heroFl = true; + interlocutorFl = true; + break; + + case 110: + _vm->_gameConv->hold(); + _giryStatus = 7; + break; + + case 66: + if (_globals[kWalkerConverse] != 0) + _globals[kWalkerConverse] = _vm->getRandomNumber(1, 4); + + if (_giryStatus != 9) + _giryStatus = 0; + break; + + case 60: + if (_globals[kWalkerConverse] != 0) + _globals[kWalkerConverse] = _vm->getRandomNumber(2, 3); + + if (_giryStatus != 9) + _giryStatus = 2; + + _conversationCounter = 0; + break; + } + + if (!heroFl) + _vm->_gameConv->setHeroTrigger(60); + + if (!interlocutorFl) + _vm->_gameConv->setInterlocutorTrigger(66); + + _giryCount = 0; +} + +void Scene205::handleRichardAnimation() { + if (_scene->_animation[_globals._animationIndexes[0]]->getCurrentFrame() == _richardFrame) + return; + + _richardFrame = _scene->_animation[_globals._animationIndexes[0]]->getCurrentFrame(); + int random; + int resetFrame = -1; + + switch (_richardFrame) { + case 1: + case 2: + case 3: + case 11: + case 19: + case 35: + case 47: + case 57: + case 69: + switch (_richardStatus) { + case 0: + random = _vm->getRandomNumber(1, 3); + ++_richardCount; + if (_richardCount > 30) { + _richardStatus = 3; + random = 9; + } + break; + + case 1: + random = 4; + _richardStatus = 0; + break; + + case 2: + random = 6; + break; + + case 4: + random = 5; + _richardStatus = 0; + break; + + default: + random = _vm->getRandomNumber(7, 50); + while (_lastRandom == random) + random = _vm->getRandomNumber(7, 50); + + _lastRandom = random; + break; + } + + switch (random) { + case 1: + resetFrame = 0; + break; + + case 2: + resetFrame = 1; + break; + + case 3: + resetFrame = 2; + break; + + case 4: + resetFrame = 11; + break; + + case 5: + resetFrame = 3; + break; + + case 6: + resetFrame = 57; + break; + + case 7: + resetFrame = 23; + break; + + case 8: + resetFrame = 19; + break; + + case 9: + resetFrame = 21; + break; + + case 10: + resetFrame = 25; + break; + + case 11: + resetFrame = 35; + break; + + case 12: + resetFrame = 47; + break; + + default: + resetFrame = 0; + break; + } + break; + + case 30: + switch (_richardStatus) { + case 0: + case 1: + case 2: + case 4: + random = 1; + break; + + default: + random = _vm->getRandomNumber(1, 50); + break; + } + + if (random == 1) + resetFrame = 30; + else + resetFrame = 29; + + break; + + case 24: + switch (_richardStatus) { + case 1: + case 2: + case 4: + case 0: + random = 1; + break; + + default: + random = _vm->getRandomNumber(1, 30); + break; + } + + if (random == 1) + resetFrame = 0; + else + resetFrame = 23; + + break; + + case 20: + switch (_richardStatus) { + case 1: + case 2: + case 4: + case 0: + random = 1; + break; + + default: + random = _vm->getRandomNumber(1, 50); + break; + } + + if (random == 1) + resetFrame = 0; + else + resetFrame = 19; + + break; + + case 22: + switch (_richardStatus) { + case 1: + case 2: + case 4: + case 0: + random = 1; + break; + + default: + random = _vm->getRandomNumber(1, 50); + break; + } + + if (random == 1) + resetFrame = 0; + else + resetFrame = 21; + + break; + + case 41: + switch (_richardStatus) { + case 1: + case 2: + case 4: + case 0: + random = 1; + break; + + default: + random = _vm->getRandomNumber(1, 50); + break; + } + + if (random == 1) + resetFrame = 41; + else + resetFrame = 40; + + break; + + case 52: + switch (_richardStatus) { + case 0: + case 1: + case 2: + case 4: + random = 1; + break; + + default: + random = _vm->getRandomNumber(1, 50); + break; + } + + if (random == 1) + resetFrame = 52; + else + resetFrame = 51; + + break; + + case 65: + switch (_richardStatus) { + case 0: + case 1: + case 2: + case 4: + random = 1; + break; + + default: + random = _vm->getRandomNumber(1, 50); + break; + } + + if (random == 1) + resetFrame = 65; + else + resetFrame = 64; + + break; + } + + if (resetFrame >= 0) { + _scene->setAnimFrame(_globals._animationIndexes[0], resetFrame); + _richardFrame = resetFrame; + } +} + +void Scene205::handleGiryAnimation() { + if (_scene->_animation[_globals._animationIndexes[1]]->getCurrentFrame() == _giryFrame) + return; + + _giryFrame = _scene->_animation[_globals._animationIndexes[1]]->getCurrentFrame(); + int random; + int resetFrame = -1; + + switch (_giryFrame) { + case 77: + _vm->_gameConv->release(); + break; + + case 1: + case 2: + case 3: + case 44: + case 14: + case 21: + case 35: + case 56: + case 78: + case 284: + switch (_giryStatus) { + case 0: + random = _vm->getRandomNumber(1, 3); + ++_giryCount; + if (_giryCount > 30) { + _giryStatus = 2; + random = 100; + } + break; + + case 8: + random = 4; + _giryStatus = 0; + break; + + case 3: + random = 5; + _giryStatus = 0; + break; + + case 1: + random = 6; + break; + + case 5: + _giryStatus = 0; + random = 7; + break; + + case 4: + random = 8; + break; + + case 6: + random = 9; + _giryStatus = 2; + break; + + case 7: + random = 10; + _giryStatus = 2; + break; + + case 9: + random = 11; + break; + + default: + random = _vm->getRandomNumber(12, 100); + break; + } + + switch (random) { + case 1: + resetFrame = 0; + break; + + case 2: + resetFrame = 1; + break; + + case 3: + resetFrame = 2; + break; + + case 4: + resetFrame = 3; + break; + + case 5: + resetFrame = 16; + break; + + case 6: + resetFrame = 21; + break; + + case 7: + resetFrame = 44; + break; + + case 8: + resetFrame = 56; + break; + + case 9: + resetFrame = 78; + _vm->_gameConv->hold(); + break; + + case 10: + resetFrame = 140; + break; + + case 11: + resetFrame = 276; + break; + + case 12: + resetFrame = 35; + break; + + default: + resetFrame = 0; + break; + } + break; + + case 27: + case 28: + case 29: + switch (_giryStatus) { + case 0: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + random = 4; + break; + + default: + random = _vm->getRandomNumber(1, 3); + ++_giryCount; + if (_giryCount > 30) { + _giryStatus = 2; + random = 100; + } + break; + } + + switch (random) { + case 1: + resetFrame = 26; + break; + + case 2: + resetFrame = 27; + break; + + case 3: + resetFrame = 28; + break; + + default: + resetFrame = 29; + break; + } + break; + + case 265: + _scene->_hotspots.activateAtPos(NOUN_MADAME_GIRY, true, Common::Point(283, 51)); + _scene->_hotspots.activateAtPos(NOUN_MADAME_GIRY, true, Common::Point(289, 62)); + _vm->_gameConv->release(); + break; + + case 274: + case 275: + case 276: + if (_giryStatus == 0) { + random = _vm->getRandomNumber(1, 3); + ++_giryCount; + if (_giryCount > 30) { + _giryStatus = 2; + random = 100; + } + } else + random = 100; + + switch (random) { + case 1: + resetFrame = 273; + break; + + case 2: + resetFrame = 274; + break; + + case 3: + resetFrame = 275; + break; + + default: + resetFrame = 273; + break; + } + break; + + case 85: + _vm->_gameConv->release(); + break; + + case 110: + _scene->_hotspots.activateAtPos(NOUN_MADAME_GIRY, true, Common::Point(62, 54)); + _scene->_hotspots.activateAtPos(NOUN_MADAME_GIRY, true, Common::Point(62, 66)); + break; + + case 138: + case 139: + case 140: + switch (_giryStatus) { + case 0: + case 1: + random = _vm->getRandomNumber(1, 3); + ++_giryCount; + if (_giryCount > 30) { + _giryStatus = 2; + random = 100; + } + break; + + default: + random = 100; + break; + } + + switch (random) { + case 1: + resetFrame = 137; + break; + + case 2: + resetFrame = 138; + break; + + case 3: + resetFrame = 139; + break; + + default: + resetFrame = 137; + break; + } + break; + + case 66: + _vm->_gameConv->release(); + break; + + case 67: + switch (_giryStatus) { + case 0: + case 9: + case 2: + case 3: + case 5: + case 6: + case 7: + case 8: + random = 1; + break; + + default: + random = 100; + break; + } + + if (random == 1) + resetFrame = 67; + else + resetFrame = 66; + + break; + + case 8: + case 9: + switch (_giryStatus) { + case 0: + case 9: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + random = 1; + break; + + default: + random = 100; + break; + } + + if (random == 1) + resetFrame = 9; + else + resetFrame = 8; + + break; + + case 280: + _giveTicketFl = true; + break; + + case 281: + switch (_giryStatus) { + case 0: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + random = 1; + break; + + default: + random = 100; + break; + } + + if (random == 1) + resetFrame = 281; + else + resetFrame = 280; + + break; + } + + if (resetFrame >= 0) { + _scene->setAnimFrame(_globals._animationIndexes[1], resetFrame); + _giryFrame = resetFrame; + } +} + +/*------------------------------------------------------------------------*/ + +Scene206::Scene206(MADSEngine *vm) : Scene2xx(vm) { + _anim0ActvFl = false; + _skip1Fl = false; + _skip2Fl = false; +} + +void Scene206::synchronize(Common::Serializer &s) { + Scene2xx::synchronize(s); + + s.syncAsByte(_anim0ActvFl); + s.syncAsByte(_skip1Fl); + s.syncAsByte(_skip2Fl); +} + +void Scene206::setup() { + setPlayerSpritesPrefix(); + setAAName(); +} + +void Scene206::enter() { + _anim0ActvFl = false; + _skip1Fl = false; + _skip2Fl = false; + + _scene->loadSpeech(1); + _vm->_gameConv->load(26); + + _globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('x', 0)); + _globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('x', 1)); + _globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('x', 2)); + _globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('x', 3)); + _globals._spriteIndexes[5] = _scene->_sprites.addSprites("*RDR_9"); + + if (_scene->_priorSceneId != 308) { + if (_globals[kPanelIn206] == 0) { + _globals._sequenceIndexes[1] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[1], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[1], 14); + } else { + _globals._sequenceIndexes[1] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[1], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[1], 14); + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 3); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 13); + } + } + + if (_globals[kPanelIn206] == 0) { + _scene->_hotspots.activate(NOUN_PANEL, false); + _scene->_hotspots.activate(NOUN_KEYHOLE, false); + } + + if (_game._objects.isInRoom(OBJ_CRUMPLED_NOTE)) { + _globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('p', 0)); + _globals._sequenceIndexes[4] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[4], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[4], 10); + } else + _scene->_hotspots.activate(NOUN_CRUMPLED_NOTE, false); + + if (_globals[kTrapDoorStatus] == 0) { + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 14); + } + + if (_globals[kRightDoorIsOpen504] && !_globals[kKnockedOverHead]) { + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('h', 1), 88); + _game._player._visible = false; + _game._player._stepEnabled = false; + _anim0ActvFl = true; + } else if (_scene->_priorSceneId == 308) { + _game._player._playerPos = Common::Point(67, 127); + _game._player._stepEnabled = false; + _game._player.walk(Common::Point(108, 137), FACING_EAST); + _game._player.setWalkTrigger(82); + } else if ((_scene->_priorSceneId == 205) || (_scene->_priorSceneId != RETURNING_FROM_LOADING)) { + _game._player._playerPos = Common::Point(153, 148); + _game._player._facing = FACING_NORTH; + } + + sceneEntrySound(); +} + +void Scene206::step() { + switch (_game._trigger) { + case 82: + _vm->_sound->command(24); + _globals._sequenceIndexes[1] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[1], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[1], 14); + _globals._sequenceIndexes[3] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[3], false, 8, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[3], 13); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], -1, -2); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 83); + break; + + case 83: + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 3); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 13); + _game._player._stepEnabled = true; + break; + + case 88: + _game._player._playerPos = Common::Point(168, 138); + _game._player._visible = true; + _game._player._stepEnabled = true; + _anim0ActvFl = false; + _game._player.resetFacing(FACING_WEST); + break; + + default: + break; + } + + if (_anim0ActvFl && !_skip1Fl) { + if (_scene->_animation[_globals._animationIndexes[0]]->getCurrentFrame() == 118) { + _globals[kKnockedOverHead] = true; + _skip1Fl = true; + _scene->_sequences.addTimer(1, 84); + } + } + + if (_anim0ActvFl && !_skip2Fl) { + if (_scene->_animation[_globals._animationIndexes[0]]->getCurrentFrame() == 61) { + if (_vm->_sound->_preferRoland) + _vm->_sound->command(65); + else + _scene->playSpeech(1); + + _skip2Fl = true; + } + } + + switch (_game._trigger) { + case 84: + _vm->_sound->command(24); + _globals._sequenceIndexes[1] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[1], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[1], 14); + _globals._sequenceIndexes[3] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[3], false, 8, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[3], 13); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], -1, -2); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 85); + break; + + case 85: + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 3); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 13); + break; + + default: + break; + } +} + +void Scene206::actions() { + if (_action.isAction(VERB_EXIT_TO, NOUN_LOGE_CORRIDOR)) { + if (_globals[kRightDoorIsOpen504]) { + if (_vm->_sound->_preferRoland) + _vm->_sound->command(65); + else + _scene->playSpeech(1); + + _vm->_gameConv->run(26); + _vm->_gameConv->exportValue(4); + } else + _scene->_nextSceneId = 205; + + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_TAKE, NOUN_CRUMPLED_NOTE) && (_game._objects.isInRoom(OBJ_CRUMPLED_NOTE) || _game._trigger)) { + switch (_game._trigger) { + case (0): + _globals[kPlayerScore] += 5; + _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, -2); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[5], true); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_SPRITE, 4, 77); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_EXPIRE, 0, 78); + _action._inProgress = false; + return; + + case 77: + _scene->deleteSequence(_globals._sequenceIndexes[4]); + _scene->_hotspots.activate(NOUN_CRUMPLED_NOTE, false); + _game._objects.addToInventory(OBJ_CRUMPLED_NOTE); + _vm->_sound->command(26); + _action._inProgress = false; + return; + + case 78: + _game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[5]); + _game._player._visible = true; + _scene->_sequences.addTimer(20, 79); + _action._inProgress = false; + return; + + case 79: + _vm->_dialogs->showItem(OBJ_CRUMPLED_NOTE, 816, 6); + _game._player._stepEnabled = true; + _action._inProgress = false; + return; + + default: + break; + } + } + + if (_action.isAction(VERB_WALK_BEHIND, NOUN_PANEL) || _action.isAction(VERB_OPEN, NOUN_PANEL) + || ((_game._trigger >= 70) && (_game._trigger < 77))) { + if (_globals[kPanelIn206] == 3) { + switch (_game._trigger) { + case (0): + _game._player._stepEnabled = false; + _game._player._visible = false; + _globals._sequenceIndexes[5] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[5], true, 7, 2); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[5], 1, 3); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[5], true); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_SPRITE, 3, 70); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_EXPIRE, 0, 71); + break; + + case 70: + _vm->_sound->command(24); + _scene->deleteSequence(_globals._sequenceIndexes[2]); + _globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 8, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[3], 13); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], -1, -2); + break; + + case 71: + _globals._sequenceIndexes[3] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[3], false, -2); + _scene->_sequences.setDepth(_globals._sequenceIndexes[3], 14); + _game._player._stepEnabled = true; + _game._player._visible = true; + _game._player.walk(Common::Point(67, 127), FACING_NORTHWEST); + _game._player.setWalkTrigger(72); + break; + + case 72: + _vm->_sound->command(24); + _scene->deleteSequence(_globals._sequenceIndexes[3]); + _globals._sequenceIndexes[3] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[3], false, 8, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[3], 13); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], -1, -2); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 73); + break; + + case 73: + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, -2); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 14); + _scene->_nextSceneId = 308; + break; + + default: + break; + } + } else { + switch (_game._trigger) { + case (0): + _game._player._stepEnabled = false; + _game._player._visible = false; + _globals._sequenceIndexes[5] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[5], true, 7, 2); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[5], 1, 3); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[5], true); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_EXPIRE, 0, 74); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_SPRITE, 3, 75); + break; + + case 74: + _game._player._stepEnabled = true; + _game._player._visible = true; + _vm->_dialogs->show(20625); + break; + + case 75: + _vm->_sound->command(72); + break; + + default: + break; + } + } + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_UNLOCK, NOUN_PANEL) || _action.isAction(VERB_LOCK, NOUN_PANEL) || _action.isAction(VERB_PUT, NOUN_KEY, NOUN_KEYHOLE) + || _action.isAction(VERB_UNLOCK, NOUN_KEYHOLE) || _action.isAction(VERB_LOCK, NOUN_KEYHOLE) || (_game._trigger >= 64)) { + if (_globals[kPanelIn206] >= 1) { + switch (_game._trigger) { + case (0): + _game._player._stepEnabled = false; + _game._player._visible = false; + _globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], true, 7, 1); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[5], 1, 3); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[5], true); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_EXPIRE, 0, 64); + break; + + case 64: { + _vm->_sound->command(71); + int idx = _globals._sequenceIndexes[5]; + _globals._sequenceIndexes[5] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[5], true, -2); + _game.syncTimers(SYNC_SEQ, _globals._sequenceIndexes[5], SYNC_SEQ, idx); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[5], false); + _scene->_sequences.addTimer(30, 65); + } + break; + + case 65: + _scene->deleteSequence(_globals._sequenceIndexes[5]); + _globals._sequenceIndexes[5] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[5], true, 7, 1); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[5], 1, 3); + _scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[5], false); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[5], SEQUENCE_TRIGGER_EXPIRE, 0, 66); + break; + + case 66: + if (_action.isAction(VERB_LOCK)) { + _globals[kPanelIn206] = 2; + _vm->_dialogs->show(20629); + } else if (_action.isAction(VERB_UNLOCK)) { + _globals[kPanelIn206] = 3; + _vm->_dialogs->show(20628); + } + + if (_action.isAction(VERB_PUT)) { + if (_globals[kPanelIn206] <= 2) { + _globals[kPanelIn206] = 3; + _vm->_dialogs->show(20628); + } else { + _globals[kPanelIn206] = 2; + _vm->_dialogs->show(20629); + } + } + + _game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[5]); + _game._player._stepEnabled = true; + _game._player._visible = true; + break; + + default: + break; + } + _action._inProgress = false; + return; + } + } + + if (_action._lookFlag) { + _vm->_dialogs->show(20610); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_LOOK) || _action.isAction(VERB_LOOK_AT)) { + if (_action.isObject(NOUN_WALL)) { + _vm->_dialogs->show(20611); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_FLOOR)) { + _vm->_dialogs->show(20612); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_RIGHT_COLUMN)) { + _vm->_dialogs->show(20614); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_KEYHOLE)) { + _vm->_dialogs->show(20615); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_RAIL)) { + _vm->_dialogs->show(20616); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_SEAT)) { + _vm->_dialogs->show(20617); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_LOGE_CORRIDOR)) { + _vm->_dialogs->show(20618); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_STAGE)) { + if (_globals[kJacquesStatus]) + _vm->_dialogs->show(20630); + else + _vm->_dialogs->show(20619); + + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_HOUSE)) { + _vm->_dialogs->show(20620); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_CEILING)) { + _vm->_dialogs->show(20621); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_HOUSE_LIGHT)) { + _vm->_dialogs->show(20622); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_PANEL)) { + if (_globals[kPanelIn206] == 3) + _vm->_dialogs->show(20624); + else + _vm->_dialogs->show(20626); + + _action._inProgress = false; + return; + } + + if ((_action.isObject(NOUN_LEFT_COLUMN)) && (!_game._trigger)) { + if (_globals[kPanelIn206] == 0) { + _vm->_dialogs->show(20613); + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('k', 1), 95); + _game._player._stepEnabled = false; + _game._player._visible = false; + } else + _vm->_dialogs->show(20623); + + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_CRUMPLED_NOTE) && _game._objects.isInRoom(OBJ_CRUMPLED_NOTE)) { + _vm->_dialogs->show(20627); + _action._inProgress = false; + return; + } + } + + switch (_game._trigger) { + case 95: + _game._player._visible = true; + _game.syncTimers(SYNC_PLAYER, 0, SYNC_ANIM, _globals._animationIndexes[0]); + _scene->_hotspots.activate(NOUN_PANEL, true); + _scene->_hotspots.activate(NOUN_KEYHOLE, true); + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 3); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 13); + if (!(_globals[kPlayerScoreFlags] & 8)) { + _globals[kPlayerScoreFlags] |= 8; + _globals[kPlayerScore] += 5; + } + _scene->_sequences.addTimer(15, 96); + + _action._inProgress = false; + return; + + case 96: + _game._player._stepEnabled = true; + _globals[kPanelIn206] = 1; + _vm->_dialogs->show(20623); + _action._inProgress = false; + return; + + default: + break; + } +} + +void Scene206::preActions() { + if (_action.isAction(VERB_LOOK, NOUN_LEFT_COLUMN)) + _game._player._needToWalk = true; + + if (_action.isAction(VERB_UNLOCK, NOUN_PANEL) || _action.isAction(VERB_WALK_BEHIND, NOUN_PANEL) + || _action.isAction(VERB_LOCK, NOUN_PANEL) || _action.isAction(VERB_OPEN, NOUN_PANEL)) + _game._player.walk(Common::Point(108, 137), FACING_NORTHWEST); + + if (_action.isObject(NOUN_LEFT_COLUMN) && (_globals[kPanelIn206] == 0)) + _game._player.walk(Common::Point(103, 137), FACING_NORTHWEST); +} + +/*------------------------------------------------------------------------*/ + +Scene207::Scene207(MADSEngine *vm) : Scene2xx(vm) { + _skip1Fl = false; + _anim0ActvFl = false; +} + +void Scene207::synchronize(Common::Serializer &s) { + Scene2xx::synchronize(s); + + s.syncAsByte(_skip1Fl); + s.syncAsByte(_anim0ActvFl); +} + +void Scene207::setup() { + setPlayerSpritesPrefix(); + setAAName(); +} + +void Scene207::enter() { + _scene->loadSpeech(2); + _skip1Fl = false; + _anim0ActvFl = false; + + _globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('a', 0)); + _globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('c', 0)); + _globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('x', 0)); + + _globals._sequenceIndexes[1] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[1], false, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[1], 10); + + if ((_scene->_priorSceneId == 205) || (_scene->_priorSceneId != RETURNING_FROM_LOADING)) { + _game._player._playerPos = Common::Point(159, 147); + _game._player._facing = FACING_NORTH; + } + + sceneEntrySound(); +} + +void Scene207::step() { + if (_anim0ActvFl && !_skip1Fl) { + if (_scene->_animation[_globals._animationIndexes[0]]->getCurrentFrame() == 6) { + if (_vm->_sound->_preferRoland) + _vm->_sound->command(69); + else + _scene->playSpeech(2); + + _skip1Fl = true; + } + } +} + +void Scene207::actions() { + if (_action.isAction(VERB_TAKE, NOUN_SEAT)) { + switch (_game._trigger) { + case 0: + _globals[kPlayerScore] += 5; + _game._player._stepEnabled = false; + _game._player._visible = false; + _vm->_sound->command(3); + _globals._sequenceIndexes[0] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[0], false, 7, 1); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 10); + _scene->_sequences.setAnimRange(_globals._sequenceIndexes[0], -1, -2); + _scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_EXPIRE, 0, 1); + break; + + case 1: + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, -2); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 10); + _scene->_sequences.addTimer(120, 2); + _scene->_sequences.addTimer(240, 3); + break; + + case 2: + _globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 6, 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, 4); + break; + + case 3: + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('s', 1), 5); + _anim0ActvFl = true; + _scene->deleteSequence(_globals._sequenceIndexes[1]); + break; + + case 4: + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, -2); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 1); + break; + + case 5: + _scene->_nextSceneId = 208; + break; + + default: + break; + } + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_EXIT_TO, NOUN_LOGE_CORRIDOR)) { + _scene->_nextSceneId = 205; + _action._inProgress = false; + return; + } + + if (_action._lookFlag) { + _vm->_dialogs->show(20710); + _action._inProgress = false; + return; + } + + if (_action.isAction(VERB_LOOK) || _action.isAction(VERB_LOOK_AT)) { + if (_action.isObject(NOUN_WALL)) { + _vm->_dialogs->show(20711); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_FLOOR)) { + _vm->_dialogs->show(20712); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_LEFT_COLUMN)) { + _vm->_dialogs->show(20713); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_RIGHT_COLUMN)) { + _vm->_dialogs->show(20714); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_RAIL)) { + _vm->_dialogs->show(20715); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_SEAT)) { + _vm->_dialogs->show(20716); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_LOGE_CORRIDOR)) { + _vm->_dialogs->show(20717); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_STAGE)) { + _vm->_dialogs->show(20718); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_HOUSE)) { + _vm->_dialogs->show(20719); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_CEILING)) { + _vm->_dialogs->show(20720); + _action._inProgress = false; + return; + } + + if (_action.isObject(NOUN_HOUSE_LIGHT)) { + _vm->_dialogs->show(20721); + _action._inProgress = false; + return; + } + } +} + +void Scene207::preActions() { + if (_action.isAction(VERB_TAKE, NOUN_SEAT)) + _game._player.walk(Common::Point(139, 124), FACING_NORTH); +} + +/*------------------------------------------------------------------------*/ + +Scene208::Scene208(MADSEngine *vm) : Scene2xx(vm) { + _skip1Fl = false; + _skip2Fl = false; + + _topLeftPeopleFrame = -1; + _topRightPeopleFrame = -1; + _middleLeftPeopleFrame = -1; + _centerPeopleFrame = -1; + _middleRightPeopleFrame = -1; + _bottomLeftPeopleFrame = -1; + _bottomMiddlePeopleFrame = -1; + _bottomRightPeopleFrame = -1; + _direction = -1; +} + +void Scene208::synchronize(Common::Serializer &s) { + Scene2xx::synchronize(s); + + s.syncAsByte(_skip1Fl); + s.syncAsByte(_skip2Fl); + + s.syncAsSint16LE(_topLeftPeopleFrame); + s.syncAsSint16LE(_topRightPeopleFrame); + s.syncAsSint16LE(_middleLeftPeopleFrame); + s.syncAsSint16LE(_centerPeopleFrame); + s.syncAsSint16LE(_middleRightPeopleFrame); + s.syncAsSint16LE(_bottomLeftPeopleFrame); + s.syncAsSint16LE(_bottomMiddlePeopleFrame); + s.syncAsSint16LE(_bottomRightPeopleFrame); + s.syncAsSint16LE(_direction); +} + +void Scene208::setup() { + setPlayerSpritesPrefix(); + setAAName(); +} + +void Scene208::enter() { + _scene->loadSpeech(1); + + _skip1Fl = false; + _skip2Fl = false; + + _globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('x', 0)); + _globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('x', 1)); + _globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('x', 2)); + _globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('x', 3)); + _globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('x', 4)); + _globals._spriteIndexes[5] = _scene->_sprites.addSprites(formAnimName('x', 5)); + _globals._spriteIndexes[6] = _scene->_sprites.addSprites(formAnimName('x', 6)); + _globals._spriteIndexes[7] = _scene->_sprites.addSprites(formAnimName('x', 7)); + + _scene->_userInterface.emptyConversationList(); + _scene->_userInterface.setup(kInputConversation); + + _scene->loadSpeech(1); + + _game._player._stepEnabled = false; + _game._player._visible = false; + + _topLeftPeopleFrame = 2; + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, _topLeftPeopleFrame); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 1); + _scene->_sequences.addTimer(120, 60); + + _topRightPeopleFrame = 2; + _globals._sequenceIndexes[1] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[1], false, _topRightPeopleFrame); + _scene->_sequences.setDepth(_globals._sequenceIndexes[1], 1); + _scene->_sequences.addTimer(30, 62); + + _middleLeftPeopleFrame = 2; + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, _middleLeftPeopleFrame); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 1); + _scene->_sequences.addTimer(30, 64); + + _centerPeopleFrame = 1; + _direction = 1; + _globals._sequenceIndexes[3] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[3], false, _centerPeopleFrame); + _scene->_sequences.setDepth(_globals._sequenceIndexes[3], 14); + _scene->_sequences.addTimer(300, 66); + + _middleRightPeopleFrame = 3; + _globals._sequenceIndexes[4] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[4], false, _middleRightPeopleFrame); + _scene->_sequences.setDepth(_globals._sequenceIndexes[4], 1); + _scene->_sequences.addTimer(60, 68); + + _bottomLeftPeopleFrame = 4; + _globals._sequenceIndexes[5] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[5], false, _bottomLeftPeopleFrame); + _scene->_sequences.setDepth(_globals._sequenceIndexes[5], 1); + _scene->_sequences.addTimer(60, 70); + + _bottomMiddlePeopleFrame = 4; + _globals._sequenceIndexes[6] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[6], false, _bottomMiddlePeopleFrame); + _scene->_sequences.setDepth(_globals._sequenceIndexes[6], 14); + _scene->_sequences.addTimer(30, 72); + + _bottomRightPeopleFrame = 3; + _globals._sequenceIndexes[7] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[7], false, _bottomRightPeopleFrame); + _scene->_sequences.setDepth(_globals._sequenceIndexes[7], 1); + _scene->_sequences.addTimer(15, 74); + + _globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('p', 1), 80); + + sceneEntrySound(); +} + +void Scene208::step() { + animateTopLeftPeople(); + animateTopRightPeople(); + animateMiddleLeftPeople(); + animateCenterPeople(); + animateMiddleRightPeople(); + animateBottomLeftPeople(); + animateBottomMiddlePeople(); + animateBottomRightPeople(); + + if (!_skip1Fl) { + if (_scene->_animation[_globals._animationIndexes[0]]->getCurrentFrame() == 49) { + if (_vm->_sound->_preferRoland) + _vm->_sound->command(65); + else + _scene->playSpeech(1); + + _skip1Fl = true; + } + } + + if (!_skip2Fl) { + if (_scene->_animation[_globals._animationIndexes[0]]->getCurrentFrame() == 68) { + if (_vm->_sound->_preferRoland) + _vm->_sound->command(65); + else + _scene->playSpeech(1); + + _skip2Fl = true; + } + } + + if (_game._trigger == 80) + _scene->_nextSceneId = 150; +} + +void Scene208::actions() { +} + +void Scene208::preActions() { +} + +void Scene208::animateTopLeftPeople() { + + if (_game._trigger != 60) + return; + + _scene->deleteSequence(_globals._sequenceIndexes[0]); + + int triggerVal; + int rndVal = _vm->getRandomNumber(1, 2); + if (_topLeftPeopleFrame == 3) + triggerVal = 1; + else + triggerVal = rndVal; + + if (rndVal == triggerVal) { + _topLeftPeopleFrame += _vm->getRandomNumber(-1, 1); + if (_topLeftPeopleFrame == 0) + _topLeftPeopleFrame = 1; + else if (_topLeftPeopleFrame == 4) + _topLeftPeopleFrame = 3; + } + + _globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, _topLeftPeopleFrame); + _scene->_sequences.setDepth(_globals._sequenceIndexes[0], 1); + int delay = _vm->getRandomNumber(15, 60); + _scene->_sequences.addTimer(delay, 60); +} + +void Scene208::animateTopRightPeople() { + if (_game._trigger != 62) + return; + + _scene->deleteSequence(_globals._sequenceIndexes[1]); + + int triggerVal; + int rndVal = _vm->getRandomNumber(1, 2); + if (_topRightPeopleFrame == 4) + triggerVal = 1; + else + triggerVal = rndVal; + + if (rndVal == triggerVal) { + _topRightPeopleFrame += _vm->getRandomNumber(-1, 1); + if (_topRightPeopleFrame == 0) + _topRightPeopleFrame = 1; + else if (_topRightPeopleFrame == 5) + _topRightPeopleFrame = 4; + } + + _globals._sequenceIndexes[1] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[1], false, _topRightPeopleFrame); + _scene->_sequences.setDepth(_globals._sequenceIndexes[1], 1); + int delay = _vm->getRandomNumber(15, 60); + _scene->_sequences.addTimer(delay, 62); +} + +void Scene208::animateMiddleLeftPeople() { + if (_game._trigger != 64) + return; + + _scene->deleteSequence(_globals._sequenceIndexes[2]); + int delay = _vm->getRandomNumber(60, 120); + + int triggerVal; + int rndVal = _vm->getRandomNumber(1, 2); + if (_middleLeftPeopleFrame == 2) + triggerVal = 1; + else + triggerVal = rndVal; + + if (rndVal == triggerVal) { + _middleLeftPeopleFrame += _vm->getRandomNumber(-1, 1); + if (_middleLeftPeopleFrame == 0) + _middleLeftPeopleFrame = 1; + else if (_middleLeftPeopleFrame == 5) + _middleLeftPeopleFrame = 4; + } + + if ((_centerPeopleFrame == 3) && (_middleLeftPeopleFrame < 4)) { + ++_middleLeftPeopleFrame; + delay = 10; + } + + _globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, _middleLeftPeopleFrame); + _scene->_sequences.setDepth(_globals._sequenceIndexes[2], 1); + _scene->_sequences.addTimer(delay, 64); +} + + +void Scene208::animateCenterPeople() { + if (_game._trigger != 66) + return; + + _scene->deleteSequence(_globals._sequenceIndexes[3]); + + int delay; + + if (_direction) { + ++_centerPeopleFrame; + delay = 15; + if (_centerPeopleFrame == 4) { + delay = _vm->getRandomNumber(300, 420); + --_centerPeopleFrame; + _direction = 0; + } + } else { + --_centerPeopleFrame; + delay = 15; + if (_centerPeopleFrame == 0) { + delay = _vm->getRandomNumber(600, 900); + ++_centerPeopleFrame; + _direction = 1; + } + } + + _globals._sequenceIndexes[3] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[3], false, _centerPeopleFrame); + _scene->_sequences.setDepth(_globals._sequenceIndexes[3], 14); + _scene->_sequences.addTimer(delay, 66); +} + +void Scene208::animateMiddleRightPeople() { + if (_game._trigger != 68) + return; + + _scene->deleteSequence(_globals._sequenceIndexes[4]); + + int triggerVal; + int rndVal = _vm->getRandomNumber(1, 2); + if (_middleRightPeopleFrame == 1) + triggerVal = 1; + else + triggerVal = rndVal; + + if (rndVal == triggerVal) { + _middleRightPeopleFrame += _vm->getRandomNumber(-1, 1); + if (_middleRightPeopleFrame == 0) + _middleRightPeopleFrame = 1; + else if (_middleRightPeopleFrame == 4) + _middleRightPeopleFrame = 3; + + if (_centerPeopleFrame == 3) + _middleRightPeopleFrame = 3; + } + + _globals._sequenceIndexes[4] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[4], false, _middleRightPeopleFrame); + _scene->_sequences.setDepth(_globals._sequenceIndexes[4], 1); + int delay = _vm->getRandomNumber(15, 60); + _scene->_sequences.addTimer(delay, 68); +} + +void Scene208::animateBottomLeftPeople() { + if (_game._trigger != 70) + return; + + _scene->deleteSequence(_globals._sequenceIndexes[5]); + + int triggerVal; + int rndVal = _vm->getRandomNumber(1, 2); + if (_bottomLeftPeopleFrame == 4) + triggerVal = 1; + else + triggerVal = rndVal; + + if (rndVal == triggerVal) { + _bottomLeftPeopleFrame += _vm->getRandomNumber(-1, 1); + if (_bottomLeftPeopleFrame == 0) + _bottomLeftPeopleFrame = 1; + else if (_bottomLeftPeopleFrame == 5) + _bottomLeftPeopleFrame = 4; + } + + _globals._sequenceIndexes[5] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[5], false, _bottomLeftPeopleFrame); + _scene->_sequences.setDepth(_globals._sequenceIndexes[5], 1); + int delay = _vm->getRandomNumber(15, 60); + _scene->_sequences.addTimer(delay, 70); +} + +void Scene208::animateBottomMiddlePeople() { + if (_game._trigger != 72) + return; + + _scene->deleteSequence(_globals._sequenceIndexes[6]); + + int triggerVal; + int rndVal = _vm->getRandomNumber(1, 2); + if (_bottomMiddlePeopleFrame == 4) + triggerVal = 1; + else + triggerVal = rndVal; + + if (rndVal == triggerVal) { + _bottomMiddlePeopleFrame += _vm->getRandomNumber(-1, 1); + if (_bottomMiddlePeopleFrame == 0) + _bottomMiddlePeopleFrame = 1; + else if (_bottomMiddlePeopleFrame == 5) + _bottomMiddlePeopleFrame = 4; + } + + _globals._sequenceIndexes[6] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[6], false, _bottomMiddlePeopleFrame); + _scene->_sequences.setDepth(_globals._sequenceIndexes[6], 14); + int delay = _vm->getRandomNumber(15, 60); + _scene->_sequences.addTimer(delay, 72); +} + +void Scene208::animateBottomRightPeople() { + if (_game._trigger != 74) + return; + + _scene->deleteSequence(_globals._sequenceIndexes[7]); + + int triggerVal; + int rndVal = _vm->getRandomNumber(1, 2); + if ((_bottomRightPeopleFrame == 3) || (_bottomRightPeopleFrame == 1)) + triggerVal = 1; + else + triggerVal = rndVal; + + if (rndVal == triggerVal) { + _bottomRightPeopleFrame += _vm->getRandomNumber(-1, 1); + if (_bottomRightPeopleFrame == 0) + _bottomRightPeopleFrame = 1; + else if (_bottomRightPeopleFrame == 4) + _bottomRightPeopleFrame = 3; + } + + _globals._sequenceIndexes[7] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[7], false, _bottomRightPeopleFrame); + _scene->_sequences.setDepth(_globals._sequenceIndexes[7], 1); + int delay = _vm->getRandomNumber(15, 60); + _scene->_sequences.addTimer(delay, 74); +} + +/*------------------------------------------------------------------------*/ + +Scene250::Scene250(MADSEngine *vm) : Scene2xx(vm) { +} + +void Scene250::synchronize(Common::Serializer &s) { + Scene2xx::synchronize(s); +} + +void Scene250::setup() { + setPlayerSpritesPrefix(); + setAAName(); +} + +void Scene250::enter() { + warning("TODO: Switch to letter box view. See definition of MADS_MENU_Y"); + + _game._player._stepEnabled = false; + _game._player._visible = false; + + _game.loadQuoteSet(0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0); + _globals._animationIndexes[0] = _scene->loadAnimation("*RM150Q1", 1); +} + +void Scene250::step() { + if (_game._trigger == 1) + _scene->_sequences.addTimer(12, 2); + + if (_game._trigger == 2) { + int y = 68; + + _scene->_kernelMessages.add(Common::Point(160, y), 0x1110, 0x20, 0, 900, _game.getQuote(0x36)); + y += 16; + + if (_globals[kPlayerScore] > 250) + _globals[kPlayerScore] = 250; + + Common::String message = Common::String::format("%d", _globals[kPlayerScore]); + message += " "; + message += _game.getQuote(0x37); + message += " 250 "; + message += _game.getQuote(0x38); + + _scene->_kernelMessages.add(Common::Point(160, y), 0x1110, 0x20, 3, 900, message); + y += 16; + + _scene->_kernelMessages.add(Common::Point(160, y), 0x1110, 0x20, 0, 900, _game.getQuote(0x39)); + y += 16; + + int score = _globals[kPlayerScore]; + int messageId; + + if (score <= 25) + // Score level: Stage sweeper + messageId = 0x3A; + else if (score <= 50) + // Score level: Dresser + messageId = 0x3B; + else if (score <= 75) + // Score level: Usher + messageId = 0x3C; + else if (score <= 100) + // Score level: Stagehand + messageId = 0x3D; + else if (score <= 150) + // Score level: Chorus member + messageId = 0x3E; + else if (score <= 200) + // Score level: Supporting player + messageId = 0x3F; + else if (score <= 249) + // Score level: Star player + messageId = 0x40; + else + // Score level: Director + messageId = 0x41; + + _scene->_kernelMessages.add(Common::Point(160, y), 0x1110, 0x20, 0, 900, _game.getQuote(messageId)); + _scene->_sequences.addTimer(930, 3); + } + + if (_game._trigger == 3) + _game._winStatus = 1; +} + +void Scene250::actions() { +} + +void Scene250::preActions() { +} + +/*------------------------------------------------------------------------*/ + +} // End of namespace Phantom +} // End of namespace MADS |