scummvm/engines/mads/phantom/phantom_scenes1.cpp
2016-09-03 12:46:38 +02:00

9554 lines
263 KiB
C++

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