mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-06 18:00:44 +00:00
2871 lines
99 KiB
C++
2871 lines
99 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/scene.h"
|
|
#include "mads/nebular/nebular_scenes.h"
|
|
#include "mads/nebular/nebular_scenes5.h"
|
|
|
|
namespace MADS {
|
|
|
|
namespace Nebular {
|
|
|
|
void Scene5xx::setAAName() {
|
|
_game._aaName = Resources::formatAAName(5);
|
|
}
|
|
|
|
void Scene5xx::setPlayerSpritesPrefix() {
|
|
_vm->_sound->command(5);
|
|
|
|
Common::String oldName = _game._player._spritesPrefix;
|
|
|
|
if ((_scene->_nextSceneId == 502) || (_scene->_nextSceneId == 504) || (_scene->_nextSceneId == 505) || (_scene->_nextSceneId == 515))
|
|
_game._player._spritesPrefix = "";
|
|
else if (_globals[kSexOfRex] == REX_MALE)
|
|
_game._player._spritesPrefix = "RXM";
|
|
else if ((_scene->_nextSceneId == 501) || (_scene->_nextSceneId == 503) || (_scene->_nextSceneId == 551))
|
|
_game._player._spritesPrefix = "ROX";
|
|
|
|
_game._player._scalingVelocity = true;
|
|
|
|
if ((_scene->_nextSceneId == 512) || (_scene->_nextSceneId == 507))
|
|
_game._player._scalingVelocity = false;
|
|
|
|
if (oldName != _game._player._spritesPrefix)
|
|
_game._player._spritesChanged = true;
|
|
|
|
_vm->_palette->setEntry(16, 10, 63, 63);
|
|
_vm->_palette->setEntry(17, 10, 45, 45);
|
|
}
|
|
|
|
void Scene5xx::sceneEntrySound() {
|
|
if (!_vm->_musicFlag) {
|
|
_vm->_sound->command(2);
|
|
return;
|
|
}
|
|
|
|
switch (_scene->_nextSceneId) {
|
|
case 501:
|
|
case 502:
|
|
case 504:
|
|
case 505:
|
|
case 506:
|
|
case 507:
|
|
case 508:
|
|
case 511:
|
|
case 512:
|
|
case 513:
|
|
case 515:
|
|
case 551:
|
|
if (_scene->_priorSceneId == 503)
|
|
_vm->_sound->command(38);
|
|
else
|
|
_vm->_sound->command(29);
|
|
break;
|
|
case 503:
|
|
_vm->_sound->command(41);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
Scene501::Scene501(MADSEngine *vm) : Scene5xx(vm) {
|
|
_mainSequenceId = -1;
|
|
_mainSpriteId = -1;
|
|
_doorHotspotid = -1;
|
|
|
|
_rexPunched = false;
|
|
}
|
|
|
|
void Scene501::synchronize(Common::Serializer &s) {
|
|
Scene5xx::synchronize(s);
|
|
|
|
s.syncAsSint16LE(_mainSequenceId);
|
|
s.syncAsSint16LE(_mainSpriteId);
|
|
s.syncAsSint16LE(_doorHotspotid);
|
|
s.syncAsByte(_rexPunched);
|
|
}
|
|
|
|
void Scene501::setup() {
|
|
setPlayerSpritesPrefix();
|
|
setAAName();
|
|
_scene->addActiveVocab(NOUN_DOOR);
|
|
_scene->addActiveVocab(VERB_WALK_THROUGH);
|
|
}
|
|
|
|
void Scene501::handleSlotActions() {
|
|
switch (_game._trigger) {
|
|
case 0:
|
|
_game._player._stepEnabled = false;
|
|
_game._player._visible = false;
|
|
int numTicks, frameIndex;
|
|
if (_globals[kSexOfRex] == REX_MALE) {
|
|
_mainSpriteId = _globals._spriteIndexes[4];
|
|
numTicks = 8;
|
|
frameIndex = 3;
|
|
} else {
|
|
_mainSpriteId = _globals._spriteIndexes[5];
|
|
numTicks = 10;
|
|
frameIndex = 2;
|
|
}
|
|
|
|
_mainSequenceId = _scene->_sequences.startReverseCycle(_mainSpriteId, false, numTicks, 1, 0, 0);
|
|
_scene->_sequences.setAnimRange(_mainSequenceId, 1, frameIndex);
|
|
_scene->_sequences.setMsgLayout(_mainSequenceId);
|
|
_vm->_sound->command(10);
|
|
_scene->_sequences.addSubEntry(_mainSequenceId, SEQUENCE_TRIGGER_SPRITE, frameIndex, 1);
|
|
_scene->_sequences.addSubEntry(_mainSequenceId, SEQUENCE_TRIGGER_EXPIRE, 0, 2);
|
|
break;
|
|
|
|
case 1:
|
|
_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 12, 6, 0, 0);
|
|
break;
|
|
|
|
case 2:
|
|
_scene->_sequences.updateTimeout(-1, _mainSequenceId);
|
|
_game._player._visible = true;
|
|
_scene->_sequences.addTimer(15, 3);
|
|
break;
|
|
|
|
case 3:
|
|
_game._player.walk(Common::Point(282, 110), FACING_NORTH);
|
|
_scene->_sequences.addTimer(60, 4);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene501::enter() {
|
|
_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('x', 1));
|
|
_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('c', 0));
|
|
_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('x', 0));
|
|
|
|
if (_globals[kSexOfRex] == REX_MALE) {
|
|
_globals._spriteIndexes[4] = _scene->_sprites.addSprites("*RXMRC_9");
|
|
_globals._spriteIndexes[6] = _scene->_sprites.addSprites("*RXCD_7");
|
|
} else {
|
|
_globals._spriteIndexes[5] = _scene->_sprites.addSprites("*ROXRC_9");
|
|
_globals._spriteIndexes[7] = _scene->_sprites.addSprites("*ROXCD_7");
|
|
}
|
|
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 1);
|
|
int idx = _scene->_dynamicHotspots.add(NOUN_DOOR, VERB_WALK_THROUGH, _globals._sequenceIndexes[3], Common::Rect(0, 0, 0, 0));
|
|
_doorHotspotid = _scene->_dynamicHotspots.setPosition(idx,Common::Point(282, 110), FACING_NORTH);
|
|
_scene->_dynamicHotspots.setCursor(_doorHotspotid, CURSOR_GO_UP);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 7);
|
|
_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, -1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 4);
|
|
_rexPunched = true;
|
|
|
|
if (_scene->_priorSceneId == 504) {
|
|
_game._player._stepEnabled = false;
|
|
_game._player._playerPos = Common::Point(74, 121);
|
|
_game._player._facing = FACING_NORTHWEST;
|
|
_game._player._visible = false;
|
|
_game._player._stepEnabled = false;
|
|
_scene->_sequences.remove(_globals._sequenceIndexes[2]);
|
|
_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, -2);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 4);
|
|
if (_globals[kSexOfRex] == REX_MALE)
|
|
_scene->loadAnimation(formAnimName('G', 2), 70);
|
|
else
|
|
_scene->loadAnimation(formAnimName('R', 2), 70);
|
|
} else if (_scene->_priorSceneId == 503) {
|
|
_game._player._playerPos = Common::Point(317, 102);
|
|
_game._player._facing = FACING_SOUTHWEST;
|
|
_scene->_sequences.addTimer(15, 80);
|
|
} else if (_scene->_priorSceneId != -2)
|
|
_game._player._playerPos = Common::Point(299, 131);
|
|
|
|
if (_scene->_roomChanged) {
|
|
_game._objects.addToInventory(OBJ_FAKE_ID);
|
|
_game._objects.addToInventory(OBJ_SECURITY_CARD);
|
|
_game._objects.addToInventory(OBJ_ID_CARD);
|
|
}
|
|
|
|
sceneEntrySound();
|
|
_game.loadQuoteSet(0x275, 0x276, 0x277, 0);
|
|
|
|
if (!_game._visitedScenes._sceneRevisited)
|
|
_scene->_sequences.addTimer(2, 90);
|
|
}
|
|
|
|
void Scene501::step() {
|
|
if (_game._trigger == 90)
|
|
_vm->_dialogs->show(50127);
|
|
|
|
if (_game._trigger >= 80) {
|
|
switch (_game._trigger) {
|
|
case 80:
|
|
_game._player._stepEnabled = false;
|
|
_scene->_sequences.remove(_globals._sequenceIndexes[3]);
|
|
_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 12, 6, 0, 0);
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 9, 1, 0, 0);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 7);
|
|
_vm->_sound->command(11);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 81);
|
|
break;
|
|
|
|
case 81:
|
|
_scene->_dynamicHotspots.remove(_doorHotspotid);
|
|
_game._player.walk(Common::Point(276, 110), FACING_SOUTHWEST);
|
|
_scene->_sequences.addTimer(120, 82);
|
|
break;
|
|
|
|
case 82:
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[3], false, 9, 1, 0, 0);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 7);
|
|
_vm->_sound->command(12);
|
|
_doorHotspotid = _scene->_dynamicHotspots.add(NOUN_DOOR, VERB_WALK_THROUGH, _globals._sequenceIndexes[3], Common::Rect(0, 0, 0, 0));
|
|
_scene->_dynamicHotspots.setPosition(_globals._sequenceIndexes[3], Common::Point(282, 110), FACING_NORTH);
|
|
_scene->_dynamicHotspots.setCursor(_doorHotspotid, CURSOR_GO_UP);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 83);
|
|
break;
|
|
|
|
case 83:
|
|
_game._player._stepEnabled = true;
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, -1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 7);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (_game._trigger >= 70 && _game._trigger <= 73) {
|
|
switch (_game._trigger) {
|
|
case 70:
|
|
_game._player._visible = true;
|
|
_game._player._priorTimer = _scene->_frameStartTime - _game._player._ticksAmount;
|
|
_scene->_sequences.addTimer(15, 71);
|
|
break;
|
|
|
|
case 71:
|
|
_game._player.walk(Common::Point(92, 130), FACING_SOUTH);
|
|
_scene->_sequences.addTimer(30, 72);
|
|
break;
|
|
|
|
case 72:
|
|
_scene->_sequences.remove(_globals._sequenceIndexes[2]);
|
|
_globals._sequenceIndexes[2] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[2], false, 6, 1, 0, 0);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 4);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 73);
|
|
break;
|
|
|
|
case 73:
|
|
_game._player._stepEnabled = true;
|
|
_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, -1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 4);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
void Scene501::preActions() {
|
|
if (_action.isAction(VERB_WALK_DOWN) && (_action.isObject(NOUN_STREET_TO_EAST) || _action.isObject(NOUN_SIDEWALK_TO_EAST)))
|
|
_game._player._walkOffScreenSceneId = 551;
|
|
}
|
|
|
|
void Scene501::actions() {
|
|
if (_action.isAction(VERB_GET_INTO, NOUN_CAR)) {
|
|
switch (_game._trigger) {
|
|
case 0:
|
|
_game._player._stepEnabled = false;
|
|
_scene->_sequences.remove(_globals._sequenceIndexes[2]);
|
|
_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 6, 1, 0, 0);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 4);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
|
|
break;
|
|
|
|
case 1: {
|
|
int syncIdx = _globals._sequenceIndexes[2];
|
|
_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, -2);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 4);
|
|
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[2], syncIdx);
|
|
_scene->_sequences.addTimer(15, 2);
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
_game._player._visible = false;
|
|
if (_globals[kSexOfRex] == REX_MALE)
|
|
_mainSpriteId = _globals._spriteIndexes[6];
|
|
else
|
|
_mainSpriteId = _globals._spriteIndexes[7];
|
|
|
|
_mainSequenceId = _scene->_sequences.addSpriteCycle(_mainSpriteId, false, 8, 1, 0, 0);
|
|
_scene->_sequences.setMsgLayout(_mainSequenceId);
|
|
_scene->_sequences.addSubEntry(_mainSequenceId, SEQUENCE_TRIGGER_EXPIRE, 0, 3);
|
|
break;
|
|
|
|
case 3: {
|
|
int syncIdx = _mainSequenceId;
|
|
_mainSequenceId = _scene->_sequences.startCycle(_mainSpriteId, false, -2);
|
|
_scene->_sequences.setMsgLayout(_mainSequenceId);
|
|
_scene->_sequences.updateTimeout(_mainSequenceId, syncIdx);
|
|
_scene->_sequences.addTimer(30, 4);
|
|
}
|
|
break;
|
|
|
|
case 4:
|
|
_scene->_nextSceneId = 504;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
} else if (_action.isAction(VERB_PUT, NOUN_SECURITY_CARD, NOUN_CARD_SLOT))
|
|
_vm->_dialogs->show(50113);
|
|
else if (_action.isAction(VERB_PUT, NOUN_FAKE_ID, NOUN_CARD_SLOT)) {
|
|
switch (_game._trigger) {
|
|
case 0:
|
|
case 1:
|
|
case 2:
|
|
case 3:
|
|
handleSlotActions();
|
|
break;
|
|
|
|
case 4:
|
|
if (_globals[kSexOfRex] == REX_MALE) {
|
|
_game._player._visible = false;
|
|
_vm->_sound->command(13);
|
|
_scene->loadAnimation(formAnimName('G', 1), 5);
|
|
} else {
|
|
_rexPunched = false;
|
|
_scene->_kernelMessages.reset();
|
|
_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 6, 120, _game.getQuote(0x277));
|
|
}
|
|
break;
|
|
|
|
case 5:
|
|
_game._player._visible = true;
|
|
_game._player._priorTimer = _scene->_frameStartTime - _game._player._ticksAmount;
|
|
_scene->_sequences.addTimer(30, 6);
|
|
break;
|
|
|
|
case 6:
|
|
if (_globals[kSexOfRex] == REX_MALE) {
|
|
if (_rexPunched) {
|
|
_scene->_kernelMessages.reset();
|
|
_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(0x275));
|
|
_rexPunched = false;
|
|
} else {
|
|
_scene->_kernelMessages.reset();
|
|
_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(0x276));
|
|
}
|
|
}
|
|
_game._player._stepEnabled = true;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
} else if (_action.isAction(VERB_PUT, NOUN_ID_CARD, NOUN_CARD_SLOT)) {
|
|
switch (_game._trigger) {
|
|
case 0:
|
|
case 1:
|
|
case 2:
|
|
case 3:
|
|
handleSlotActions();
|
|
break;
|
|
|
|
case 4:
|
|
_scene->_sequences.remove(_globals._sequenceIndexes[3]);
|
|
_scene->_dynamicHotspots.remove(_doorHotspotid);
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 9, 1, 0, 0);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 7);
|
|
_vm->_sound->command(11);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 6);
|
|
break;
|
|
|
|
case 6:
|
|
_game._player.walk(Common::Point(317, 102), FACING_NORTHEAST);
|
|
_scene->_sequences.addTimer(120, 7);
|
|
break;
|
|
|
|
case 7: {
|
|
_vm->_sound->command(12);
|
|
int syncIdx = _globals._sequenceIndexes[3];
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[3], false, 9, 1, 0, 0);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 7);
|
|
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], syncIdx);
|
|
_vm->_sound->command(12);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 8);
|
|
}
|
|
break;
|
|
|
|
case 8: {
|
|
int syncIdx = _globals._sequenceIndexes[3];
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 7);
|
|
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], syncIdx);
|
|
_scene->_nextSceneId = 503;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
} else if (_action._lookFlag || _action.isAction(VERB_LOOK, NOUN_STREET))
|
|
_vm->_dialogs->show(50121);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_DOOR))
|
|
_vm->_dialogs->show(50110);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_CARD_SLOT))
|
|
_vm->_dialogs->show(50112);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_SIGN))
|
|
_vm->_dialogs->show(50114);
|
|
else if (_action.isAction(VERB_TAKE, NOUN_SIGN))
|
|
_vm->_dialogs->show(50115);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_SIDEWALK_TO_EAST))
|
|
_vm->_dialogs->show(50118);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_SIDEWALK_TO_WEST) || _action.isAction(VERB_LOOK, NOUN_STREET_TO_WEST)
|
|
|| _action.isAction(VERB_WALK_DOWN, NOUN_SIDEWALK_TO_WEST) || _action.isAction(VERB_WALK_DOWN, NOUN_STREET_TO_WEST))
|
|
_vm->_dialogs->show(50119);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_BUILDING))
|
|
_vm->_dialogs->show(50120);
|
|
else if (_action.isAction(VERB_OPEN, NOUN_DOOR))
|
|
_vm->_dialogs->show(50122);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_FIRE_HYDRANT))
|
|
_vm->_dialogs->show(50123);
|
|
else if (_action.isAction(VERB_OPEN, NOUN_FIRE_HYDRANT))
|
|
_vm->_dialogs->show(50124);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_EQUIPMENT_OVERHEAD))
|
|
_vm->_dialogs->show(50125);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_PIPES) || _action.isAction(VERB_LOOK, NOUN_PIPE))
|
|
_vm->_dialogs->show(50126);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_CAR)) {
|
|
if (!_game._visitedScenes.exists(504))
|
|
_vm->_dialogs->show(50116);
|
|
else
|
|
_vm->_dialogs->show(50117);
|
|
} else
|
|
return;
|
|
|
|
_action._inProgress = false;
|
|
}
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
void Scene502::setup() {
|
|
_game._player._spritesPrefix = "";
|
|
// The original is using Scene5xx_setAAName()
|
|
_game._aaName = Resources::formatAAName(5);
|
|
}
|
|
|
|
void Scene502::enter() {
|
|
if (_globals[kSexOfRex] == REX_MALE)
|
|
_handSpriteId = _scene->_sprites.addSprites("*REXHAND");
|
|
else
|
|
_handSpriteId = _scene->_sprites.addSprites("*ROXHAND");
|
|
|
|
teleporterEnter();
|
|
|
|
// The original uses scene5xx_sceneEntrySound
|
|
if (!_vm->_musicFlag)
|
|
_vm->_sound->command(2);
|
|
else if (_scene->_priorSceneId == 503)
|
|
_vm->_sound->command(38);
|
|
else
|
|
_vm->_sound->command(29);
|
|
}
|
|
|
|
void Scene502::step() {
|
|
teleporterStep();
|
|
}
|
|
|
|
void Scene502::actions() {
|
|
if (teleporterActions()) {
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_LOOK, NOUN_VIEWPORT) || _action.isAction(VERB_PEER_THROUGH, NOUN_VIEWPORT))
|
|
_vm->_dialogs->show(50210);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_KEYPAD))
|
|
_vm->_dialogs->show(50211);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_DISPLAY))
|
|
_vm->_dialogs->show(50212);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_0_KEY) || _action.isAction(VERB_LOOK, NOUN_1_KEY)
|
|
|| _action.isAction(VERB_LOOK, NOUN_2_KEY) || _action.isAction(VERB_LOOK, NOUN_3_KEY)
|
|
|| _action.isAction(VERB_LOOK, NOUN_4_KEY) || _action.isAction(VERB_LOOK, NOUN_5_KEY)
|
|
|| _action.isAction(VERB_LOOK, NOUN_6_KEY) || _action.isAction(VERB_LOOK, NOUN_7_KEY)
|
|
|| _action.isAction(VERB_LOOK, NOUN_8_KEY) || _action.isAction(VERB_LOOK, NOUN_9_KEY)
|
|
|| _action.isAction(VERB_LOOK, NOUN_SMILE_KEY) || _action.isAction(VERB_LOOK, NOUN_ENTER_KEY)
|
|
|| _action.isAction(VERB_LOOK, NOUN_FROWN_KEY))
|
|
_vm->_dialogs->show(50213);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_DEVICE) || _action._lookFlag)
|
|
_vm->_dialogs->show(50214);
|
|
else
|
|
return;
|
|
|
|
_action._inProgress = false;
|
|
}
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
Scene503::Scene503(MADSEngine *vm) : Scene5xx(vm) {
|
|
_detonatorHotspotId = -1;
|
|
}
|
|
|
|
void Scene503::synchronize(Common::Serializer &s) {
|
|
Scene5xx::synchronize(s);
|
|
|
|
s.syncAsSint16LE(_detonatorHotspotId);
|
|
}
|
|
|
|
void Scene503::setup() {
|
|
setPlayerSpritesPrefix();
|
|
setAAName();
|
|
_scene->addActiveVocab(NOUN_DETONATORS);
|
|
_scene->addActiveVocab(VERB_WALKTO);
|
|
}
|
|
|
|
void Scene503::enter() {
|
|
_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('c', -1));
|
|
|
|
if (_globals[kSexOfRex] == REX_MALE)
|
|
_globals._spriteIndexes[2] = _scene->_sprites.addSprites("*RXMBD_2");
|
|
else
|
|
_globals._spriteIndexes[3] = _scene->_sprites.addSprites("*ROXBD_2");
|
|
|
|
if (_game._objects[OBJ_DETONATORS]._roomNumber == _scene->_currentSceneId) {
|
|
_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 9, 0, 0, 0);
|
|
_detonatorHotspotId = _scene->_dynamicHotspots.add(NOUN_DETONATORS, VERB_WALKTO, _globals._sequenceIndexes[1], Common::Rect(0, 0, 0, 0));
|
|
_scene->_dynamicHotspots.setPosition(_detonatorHotspotId, Common::Point(254, 135), FACING_SOUTH);
|
|
}
|
|
|
|
if (_scene->_priorSceneId != -2) {
|
|
_game._player._playerPos = Common::Point(191, 152);
|
|
_game._player._facing = FACING_NORTHWEST;
|
|
}
|
|
|
|
sceneEntrySound();
|
|
}
|
|
|
|
void Scene503::actions() {
|
|
if (_action.isAction(VERB_WALK, NOUN_OUTSIDE))
|
|
_scene->_nextSceneId = 501;
|
|
else if (_action.isAction(VERB_TAKE, NOUN_DETONATORS)) {
|
|
if ( _game._trigger || !_game._objects.isInInventory(OBJ_DETONATORS)) {
|
|
switch (_game._trigger) {
|
|
case 0:
|
|
_game._player._stepEnabled = false;
|
|
_game._player._visible = false;
|
|
if (_globals[kSexOfRex] == REX_MALE) {
|
|
_globals._sequenceIndexes[2] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[2], false, 8, 1, 0, 0);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 1, 3);
|
|
_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[2]);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_SPRITE, 3, 1);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
|
|
} else {
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[3], true, 8, 1, 0, 0);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 1, 4);
|
|
_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[3]);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_SPRITE, 4, 1);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
|
|
}
|
|
break;
|
|
|
|
case 1:
|
|
_vm->_sound->command(9);
|
|
_scene->_sequences.remove(_globals._sequenceIndexes[1]);
|
|
_scene->_dynamicHotspots.remove(_detonatorHotspotId);
|
|
_game._objects.addToInventory(OBJ_DETONATORS);
|
|
_vm->_dialogs->showItem(OBJ_DETONATORS, 50326);
|
|
break;
|
|
|
|
case 2:
|
|
if (_globals[kSexOfRex] == REX_MALE)
|
|
_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[2]);
|
|
else
|
|
_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[3]);
|
|
|
|
_game._player._visible = true;
|
|
_game._player._stepEnabled = true;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
} else if (_action._lookFlag)
|
|
_vm->_dialogs->show(50328);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_MONITORING_EQUIPMENT))
|
|
_vm->_dialogs->show(50310);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_PHOTON_RIFLES))
|
|
_vm->_dialogs->show(50311);
|
|
else if (_action.isAction(VERB_TAKE, NOUN_PHOTON_RIFLES) || _action.isAction(VERB_TAKE, NOUN_NUCLEAR_SLINGSHOT))
|
|
_vm->_dialogs->show(50312);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_DISPLAY_CASE))
|
|
_vm->_dialogs->show(50313);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_NUCLEAR_SLINGSHOT))
|
|
_vm->_dialogs->show(50314);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_WATER_COOLER))
|
|
_vm->_dialogs->show(50315);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_STORAGE_BOX))
|
|
_vm->_dialogs->show(50316);
|
|
else if (_action.isAction(VERB_OPEN, NOUN_STORAGE_BOX))
|
|
_vm->_dialogs->show(50317);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_WARNING_LABEL))
|
|
_vm->_dialogs->show(50318);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_DESK))
|
|
_vm->_dialogs->show(50319);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_MONITOR))
|
|
_vm->_dialogs->show(50320);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_FILE_CABINETS))
|
|
_vm->_dialogs->show(50322);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_BOX)) {
|
|
if (_game._objects.isInRoom(OBJ_DETONATORS))
|
|
_vm->_dialogs->show(50323);
|
|
else
|
|
_vm->_dialogs->show(50324);
|
|
} else if (_action.isAction(VERB_LOOK, NOUN_DETONATORS) && (_action._savedFields._mainObjectSource == 4))
|
|
_vm->_dialogs->show(50325);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_WINDOWS))
|
|
_vm->_dialogs->show(50327);
|
|
else if (_action.isAction(VERB_OPEN, NOUN_DISPLAY_CASE))
|
|
_vm->_dialogs->show(50329);
|
|
else if (_action.isAction(VERB_THROW, NOUN_DISPLAY_CASE) && _game._objects.isInInventory(_game._objects.getIdFromDesc(_action._activeAction._objectNameId)))
|
|
_vm->_dialogs->show(50330);
|
|
else
|
|
return;
|
|
|
|
_action._inProgress = false;
|
|
}
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
Scene504::Scene504(MADSEngine *vm) : Scene5xx(vm) {
|
|
_carAnimationMode = -1;
|
|
_carFrame = -1;
|
|
}
|
|
|
|
void Scene504::synchronize(Common::Serializer &s) {
|
|
Scene5xx::synchronize(s);
|
|
|
|
s.syncAsSint16LE(_carAnimationMode);
|
|
s.syncAsSint16LE(_carFrame);
|
|
}
|
|
|
|
void Scene504::setup() {
|
|
_game._player._spritesPrefix = "";
|
|
setAAName();
|
|
}
|
|
|
|
void Scene504::enter() {
|
|
_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('a', 2));
|
|
|
|
for (int i = 0; i < 4; i++)
|
|
_globals._spriteIndexes[5 + i] = _scene->_sprites.addSprites(formAnimName('m', i));
|
|
|
|
if (_globals[kSexOfRex] == REX_MALE)
|
|
_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('a', 0));
|
|
else {
|
|
_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('a', 1));
|
|
_scene->changeVariant(1);
|
|
}
|
|
|
|
_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 6, 1, 0, 0);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 0);
|
|
_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 6, 0, 0, 0);
|
|
_carFrame = -1;
|
|
|
|
if ((_scene->_priorSceneId == 505) && (_globals[kHoverCarDestination] != _globals[kHoverCarLocation])){
|
|
_carAnimationMode = 1;
|
|
_scene->loadAnimation(formAnimName('A', -1));
|
|
_vm->_sound->command(14);
|
|
_scene->_sequences.addTimer(1, 70);
|
|
_game._player._stepEnabled = false;
|
|
} else {
|
|
_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('a', 3));
|
|
_carAnimationMode = 1;
|
|
_scene->loadAnimation(formAnimName('A', -1));
|
|
if ((_scene->_priorSceneId != -2) && (_scene->_priorSceneId != 505))
|
|
_globals[kHoverCarLocation] = _scene->_priorSceneId;
|
|
|
|
_globals._sequenceIndexes[7] = _scene->_sequences.startCycle(_globals._spriteIndexes[7], false, 1);
|
|
}
|
|
|
|
if (_globals[kTimebombTimer] > 10500)
|
|
_globals[kTimebombTimer] = 10500;
|
|
|
|
sceneEntrySound();
|
|
}
|
|
|
|
void Scene504::step() {
|
|
if ((_carAnimationMode == 1) && (_scene->_activeAnimation != nullptr)) {
|
|
if (_scene->_activeAnimation->getCurrentFrame() != _carFrame) {
|
|
_carFrame = _scene->_activeAnimation->getCurrentFrame();
|
|
int nextFrame;
|
|
|
|
if (_carFrame == 1)
|
|
nextFrame = 0;
|
|
else
|
|
nextFrame = -1;
|
|
|
|
if ((nextFrame >= 0) && (nextFrame != _scene->_activeAnimation->getCurrentFrame())) {
|
|
_scene->_activeAnimation->setCurrentFrame(nextFrame);
|
|
_carFrame = nextFrame;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
if (_game._trigger >= 70) {
|
|
switch (_game._trigger) {
|
|
case 70:
|
|
if (_globals[kHoverCarDestination] != -1) {
|
|
_game._player._stepEnabled = false;
|
|
_scene->freeAnimation();
|
|
_carAnimationMode = 2;
|
|
if (((_globals[kHoverCarLocation] >= 500 && _globals[kHoverCarLocation] <= 599) &&
|
|
(_globals[kHoverCarDestination] >= 500 && _globals[kHoverCarDestination] <= 599)) ||
|
|
((_globals[kHoverCarLocation] >= 600 && _globals[kHoverCarLocation] <= 699) &&
|
|
(_globals[kHoverCarDestination] >= 600 && _globals[kHoverCarDestination] <= 699))) {
|
|
_scene->loadAnimation(formAnimName('A', -1), 71);
|
|
} else if (_globals[kHoverCarLocation] > _globals[kHoverCarDestination])
|
|
_scene->loadAnimation(formAnimName('C', -1), 71);
|
|
else
|
|
_scene->loadAnimation(formAnimName('B', -1), 71);
|
|
}
|
|
break;
|
|
|
|
case 71:
|
|
_vm->_sound->command(15);
|
|
_scene->_nextSceneId = _globals[kHoverCarDestination];
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ((_globals[kTimebombTimer] >= 10800) && (_globals[kTimebombStatus] == TIMEBOMB_ACTIVATED) && (_game._difficulty != 3)) {
|
|
_globals[kTimebombStatus] = TIMEBOMB_DEAD;
|
|
_globals[kTimebombTimer] = 0;
|
|
_globals[kCheckDaemonTimebomb] = false;
|
|
_scene->_nextSceneId = 620;
|
|
}
|
|
}
|
|
|
|
void Scene504::preActions() {
|
|
_game._player._needToWalk = false;
|
|
}
|
|
|
|
void Scene504::actions() {
|
|
if (_action.isAction(VERB_EXIT_FROM, NOUN_CAR)) {
|
|
_vm->_sound->command(15);
|
|
_scene->_nextSceneId = _globals[kHoverCarLocation];
|
|
} else if (_action.isAction(VERB_ACTIVATE, NOUN_CAR_CONTROLS)) {
|
|
switch (_game._trigger) {
|
|
case 0:
|
|
_game._player._stepEnabled = false;
|
|
_vm->_sound->command(39);
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 6, 1, 0, 0);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 13);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
|
|
_scene->_sequences.remove(_globals._sequenceIndexes[7]);
|
|
_globals._sequenceIndexes[5] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[5], false, 18, 0, 0, 0);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[5], 14);
|
|
break;
|
|
|
|
case 1: {
|
|
int syncIdx = _globals._sequenceIndexes[3];
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[3], false, 6, 1, 0, 0);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 13);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], 1, 6);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
|
|
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], syncIdx);
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
_scene->_sequences.addTimer(10, 3);
|
|
break;
|
|
|
|
case 3:
|
|
_scene->_sequences.remove(_globals._sequenceIndexes[5]);
|
|
if (_globals[kSexOfRex] == REX_MALE) {
|
|
_vm->_sound->command(34);
|
|
_scene->_sequences.addTimer(60, 4);
|
|
_globals._sequenceIndexes[6] = _scene->_sequences.startCycle(_globals._spriteIndexes[6], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[6], 14);
|
|
} else {
|
|
_vm->_sound->command(40);
|
|
_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 18, 0, 0, 0);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[8], 14);
|
|
_scene->_sequences.addTimer(120, 5);
|
|
}
|
|
break;
|
|
|
|
case 4:
|
|
_game._player._stepEnabled = true;
|
|
_globals[kHoverCarDestination] = _globals[kHoverCarLocation];
|
|
_scene->_nextSceneId = 505;
|
|
break;
|
|
|
|
case 5:
|
|
_game._player._stepEnabled = true;
|
|
_scene->_sequences.remove(_globals._sequenceIndexes[8]);
|
|
_globals._sequenceIndexes[7] = _scene->_sequences.startCycle(_globals._spriteIndexes[7], false, 1);
|
|
_vm->_dialogs->show(50421);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
} else if (_action._lookFlag || _action.isAction(VERB_LOOK, NOUN_INTERIOR_OF_CAR))
|
|
_vm->_dialogs->show(50412);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_GLOVE_COMPARTMENT))
|
|
_vm->_dialogs->show(50410);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_CAR_CONTROLS) || _action.isAction(VERB_LOOK, NOUN_DASHBOARD))
|
|
_vm->_dialogs->show(50411);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_SCENT_PACKET))
|
|
_vm->_dialogs->show(50413);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_SODA_CANS))
|
|
_vm->_dialogs->show(50414);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_KITTY))
|
|
_vm->_dialogs->show(50415);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_WINDSHIELD) || _action.isAction(VERB_LOOK_THROUGH, NOUN_WINDSHIELD))
|
|
_vm->_dialogs->show(50416);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_REARVIEW_MIRROR))
|
|
_vm->_dialogs->show(50417);
|
|
else if (_action.isAction(VERB_TAKE, NOUN_REARVIEW_MIRROR))
|
|
_vm->_dialogs->show(50418);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_MOLDY_SOCK))
|
|
_vm->_dialogs->show(50419);
|
|
else if (_action.isAction(VERB_TAKE, NOUN_MOLDY_SOCK))
|
|
_vm->_dialogs->show(50420);
|
|
else
|
|
return;
|
|
|
|
_action._inProgress = false;
|
|
}
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
Scene505::Scene505(MADSEngine *vm) : Scene5xx(vm) {
|
|
_frame = -1;
|
|
_nextButtonId = -1;
|
|
_homeSelectedId = -1;
|
|
_selectedId = -1;
|
|
_activeCars = -1;
|
|
|
|
for (int i = 0; i < 9; i++)
|
|
_carLocations[i] = -1;
|
|
}
|
|
|
|
void Scene505::synchronize(Common::Serializer &s) {
|
|
Scene5xx::synchronize(s);
|
|
|
|
s.syncAsSint16LE(_frame);
|
|
s.syncAsSint16LE(_nextButtonId);
|
|
s.syncAsSint16LE(_homeSelectedId);
|
|
s.syncAsSint16LE(_selectedId);
|
|
s.syncAsSint16LE(_activeCars);
|
|
|
|
for (int i = 0; i < 9; i++)
|
|
s.syncAsSint16LE(_carLocations[i]);
|
|
}
|
|
|
|
void Scene505::setup() {
|
|
_game._player._spritesPrefix = "";
|
|
setAAName();
|
|
}
|
|
|
|
void Scene505::enter() {
|
|
for (int i = 0; i < 9; i++)
|
|
_globals._spriteIndexes[i] = _scene->_sprites.addSprites(formAnimName('a', i + 1));
|
|
|
|
_globals._spriteIndexes[13] = _scene->_sprites.addSprites(formAnimName('b', 1));
|
|
_globals._spriteIndexes[9] = _scene->_sprites.addSprites(formAnimName('g', 1));
|
|
_globals._spriteIndexes[10] = _scene->_sprites.addSprites(formAnimName('g', 0));
|
|
_globals._spriteIndexes[11] = _scene->_sprites.addSprites(formAnimName('t', -1));
|
|
_globals._spriteIndexes[12] = _scene->_sprites.addSprites(formAnimName('e', -1));
|
|
|
|
if (_scene->_priorSceneId != -2)
|
|
_globals._sequenceIndexes[12] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[12], false, 6, 1, 0, 0);
|
|
|
|
_globals._sequenceIndexes[13] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[13], false, 6, 1, 120, 0);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_EXPIRE, 0, 60);
|
|
_scene->_sequences.addTimer(30, 62);
|
|
|
|
_carLocations[0] = 501;
|
|
_carLocations[1] = 506;
|
|
_carLocations[2] = 511;
|
|
_carLocations[3] = 513;
|
|
_carLocations[4] = 601;
|
|
_carLocations[5] = 604;
|
|
_carLocations[6] = 607;
|
|
_carLocations[7] = 609;
|
|
_carLocations[8] = 612;
|
|
|
|
_activeCars = false;
|
|
|
|
for (int i = 0; i < 9; i++) {
|
|
if (_globals[kHoverCarLocation] == _carLocations[i]) {
|
|
_homeSelectedId = i;
|
|
if (_scene->_priorSceneId != -2)
|
|
_selectedId = i;
|
|
}
|
|
}
|
|
|
|
_game._player._visible = false;
|
|
_game._player._stepEnabled = false;
|
|
_frame = -1;
|
|
_scene->loadAnimation(formAnimName('a', -1));
|
|
_scene->_activeAnimation->setCurrentFrame(86);
|
|
|
|
sceneEntrySound();
|
|
_vm->_sound->command(16);
|
|
}
|
|
|
|
void Scene505::step() {
|
|
if (_frame != _scene->_activeAnimation->getCurrentFrame()) {
|
|
_frame = _scene->_activeAnimation->getCurrentFrame();
|
|
int resetFrame = -1;
|
|
|
|
switch (_frame) {
|
|
case 4:
|
|
case 24:
|
|
case 33:
|
|
case 53:
|
|
case 62:
|
|
case 82:
|
|
if (_nextButtonId == 0x38A)
|
|
resetFrame = 4;
|
|
else if (_nextButtonId == 0x38B)
|
|
resetFrame = 33;
|
|
else if (_nextButtonId == 0x2DE)
|
|
resetFrame = 62;
|
|
|
|
break;
|
|
|
|
case 15:
|
|
case 44:
|
|
case 73: {
|
|
int this_button;
|
|
int old_select;
|
|
_vm->_sound->command(17);
|
|
old_select = _selectedId;
|
|
if (_frame == 15) {
|
|
this_button = 0x38A;
|
|
_selectedId = (_selectedId + 1) % 9;
|
|
} else if (_frame == 44) {
|
|
this_button = 0x38B;
|
|
_selectedId--;
|
|
if (_selectedId < 0)
|
|
_selectedId = 8;
|
|
} else {
|
|
this_button = 0x2DE;
|
|
if ((_globals[kTimebombStatus] == TIMEBOMB_ACTIVATED) && (_carLocations[_selectedId] == 501))
|
|
_vm->_dialogs->show(431);
|
|
else if (_selectedId != _homeSelectedId) {
|
|
_nextButtonId = 0;
|
|
_activeCars = true;
|
|
_game._player._stepEnabled = false;
|
|
_scene->_sequences.remove(_globals._sequenceIndexes[1]);
|
|
_scene->_sequences.remove(_globals._sequenceIndexes[0]);
|
|
_scene->_sequences.remove(_globals._sequenceIndexes[13]);
|
|
_globals._sequenceIndexes[13] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[13], false, 6, 1, 0, 0);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[13], SEQUENCE_TRIGGER_EXPIRE, 0, 63);
|
|
_vm->_sound->command(18);
|
|
}
|
|
}
|
|
|
|
if (_nextButtonId == this_button)
|
|
_nextButtonId = 0;
|
|
|
|
if (old_select != _selectedId) {
|
|
_scene->_sequences.remove(_globals._sequenceIndexes[11]);
|
|
_globals._sequenceIndexes[11] = _scene->_sequences.startCycle(_globals._spriteIndexes[11], false, _selectedId + 1);
|
|
if (old_select != _homeSelectedId)
|
|
_scene->_sequences.remove(_globals._sequenceIndexes[0]);
|
|
|
|
if (_selectedId != _homeSelectedId) {
|
|
_globals._sequenceIndexes[0] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[0 + _selectedId], false, 24, 0, 0, 0);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[0], 1);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
|
|
case 18:
|
|
case 19:
|
|
case 20:
|
|
case 21:
|
|
case 22:
|
|
case 23:
|
|
if (_nextButtonId == 0x38A)
|
|
resetFrame = 29 - _frame;
|
|
|
|
break;
|
|
|
|
case 26:
|
|
case 55:
|
|
case 84:
|
|
if (_nextButtonId != 0)
|
|
resetFrame = 3;
|
|
|
|
break;
|
|
|
|
case 27:
|
|
case 56:
|
|
case 85:
|
|
if (_nextButtonId != 0)
|
|
resetFrame = 2;
|
|
|
|
break;
|
|
|
|
case 29:
|
|
case 58:
|
|
case 87:
|
|
if (_activeCars)
|
|
_globals[kHoverCarDestination] = _carLocations[_selectedId];
|
|
|
|
if (_nextButtonId == 0x38A)
|
|
resetFrame = 0;
|
|
else if (_nextButtonId == 0x38B)
|
|
resetFrame = 29;
|
|
else if (_nextButtonId == 0x2DE)
|
|
resetFrame = 58;
|
|
else
|
|
resetFrame = 86;
|
|
break;
|
|
|
|
case 47:
|
|
case 48:
|
|
case 49:
|
|
case 50:
|
|
case 51:
|
|
case 52:
|
|
if (_nextButtonId == 0x38B)
|
|
resetFrame = 87 - _frame;
|
|
|
|
break;
|
|
|
|
case 76:
|
|
case 77:
|
|
case 78:
|
|
case 79:
|
|
case 80:
|
|
case 81:
|
|
if (_nextButtonId == 0x2DE)
|
|
resetFrame = 145 - _frame;
|
|
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
if ((resetFrame >= 0) && (resetFrame != _scene->_activeAnimation->getCurrentFrame())) {
|
|
_scene->_activeAnimation->setCurrentFrame(resetFrame);
|
|
_frame = resetFrame;
|
|
}
|
|
}
|
|
|
|
switch (_game._trigger) {
|
|
case 60: {
|
|
_game._player._stepEnabled = true;
|
|
int syncIdx = _globals._sequenceIndexes[13];
|
|
_globals._sequenceIndexes[13] = _scene->_sequences.startCycle(_globals._spriteIndexes[13], false, -2);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[13], 8);
|
|
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[13], syncIdx);
|
|
_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[_homeSelectedId], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 1);
|
|
_globals._sequenceIndexes[11] = _scene->_sequences.startCycle(_globals._spriteIndexes[11], false, _selectedId + 1);
|
|
|
|
if (_selectedId != _homeSelectedId) {
|
|
_globals._sequenceIndexes[0] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[0 + _selectedId], false, 24, 0, 0, 0);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[0], 1);
|
|
}
|
|
break;
|
|
}
|
|
|
|
case 61:
|
|
_globals._sequenceIndexes[10] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[10], false, 8, 0, 0, 0);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[10], 8);
|
|
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[10], _globals._sequenceIndexes[9]);
|
|
break;
|
|
|
|
case 62:
|
|
_globals._sequenceIndexes[9] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[9], false, 8, 1, 0, 0);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 8);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[9], SEQUENCE_TRIGGER_EXPIRE, 0, 61);
|
|
break;
|
|
|
|
case 63:
|
|
_globals[kHoverCarDestination] = _carLocations[_selectedId];
|
|
_scene->_nextSceneId = 504;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene505::actions() {
|
|
if (_action.isAction(VERB_PRESS))
|
|
_nextButtonId = _action._activeAction._objectNameId;
|
|
else if (_action.isAction(VERB_RETURN_TO, NOUN_INSIDE_OF_CAR))
|
|
_scene->_nextSceneId = 504;
|
|
else if (_action.isAction(VERB_LOOK, NOUN_VIEW_SCREEN))
|
|
_vm->_dialogs->show(50510);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_CONTROL_PANEL))
|
|
_vm->_dialogs->show(50511);
|
|
else
|
|
return;
|
|
|
|
_action._inProgress = false;
|
|
}
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
Scene506::Scene506(MADSEngine *vm) : Scene5xx(vm), _doorPos(0, 0) {
|
|
_heroFacing = FACING_DUMMY;
|
|
|
|
_doorDepth = -1;
|
|
_doorSpriteIdx = -1;
|
|
_doorSequenceIdx = -1;
|
|
_doorWord = -1;
|
|
|
|
_labDoorFl = false;
|
|
_firstDoorFl = false;
|
|
_actionFl = false;
|
|
}
|
|
|
|
void Scene506::synchronize(Common::Serializer &s) {
|
|
Scene5xx::synchronize(s);
|
|
|
|
s.syncAsSint16LE(_doorPos.x);
|
|
s.syncAsSint16LE(_doorPos.y);
|
|
|
|
s.syncAsByte(_heroFacing);
|
|
|
|
s.syncAsSint16LE(_doorDepth);
|
|
s.syncAsSint16LE(_doorSpriteIdx);
|
|
s.syncAsSint16LE(_doorSequenceIdx);
|
|
s.syncAsSint16LE(_doorWord);
|
|
|
|
s.syncAsByte(_labDoorFl);
|
|
s.syncAsByte(_firstDoorFl);
|
|
s.syncAsByte(_actionFl);
|
|
}
|
|
|
|
void Scene506::setup() {
|
|
setPlayerSpritesPrefix();
|
|
setAAName();
|
|
_scene->addActiveVocab(VERB_WALK_INTO);
|
|
_scene->addActiveVocab(NOUN_SOFTWARE_STORE);
|
|
_scene->addActiveVocab(NOUN_LABORATORY);
|
|
}
|
|
|
|
void Scene506::enter() {
|
|
_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('q', 0));
|
|
_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('q', 1));
|
|
_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('c', -1));
|
|
_globals._spriteIndexes[4] = _scene->_sprites.addSprites("*RXCD_3");
|
|
|
|
_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, 1);
|
|
int idx = _scene->_dynamicHotspots.add(NOUN_LABORATORY, VERB_WALK_INTO, _globals._sequenceIndexes[1], Common::Rect(0, 0, 0, 0));
|
|
int hotspotId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(65, 125), FACING_NORTHWEST);
|
|
_scene->_dynamicHotspots.setCursor(hotspotId, CURSOR_GO_LEFT);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 10);
|
|
_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, 1);
|
|
idx = _scene->_dynamicHotspots.add(NOUN_SOFTWARE_STORE, VERB_WALK_INTO, _globals._sequenceIndexes[2], Common::Rect(0, 0, 0, 0));
|
|
hotspotId = _scene->_dynamicHotspots.setPosition(idx, Common::Point(112, 102), FACING_NORTHWEST);
|
|
_scene->_dynamicHotspots.setCursor(hotspotId, CURSOR_GO_LEFT);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 13);
|
|
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, -1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 5);
|
|
_firstDoorFl = true;
|
|
_actionFl = false;
|
|
|
|
if (_scene->_priorSceneId == 508) {
|
|
_game._player._playerPos = Common::Point(16, 111);
|
|
_game._player._facing = FACING_SOUTHEAST;
|
|
_scene->_sequences.addTimer(15, 80);
|
|
_game._player._stepEnabled = false;
|
|
} else if (_scene->_priorSceneId == 507) {
|
|
_game._player._playerPos = Common::Point(80, 102);
|
|
_game._player._facing = FACING_SOUTHEAST;
|
|
_scene->_sequences.addTimer(60, 80);
|
|
_game._player._stepEnabled = false;
|
|
} else if (_scene->_priorSceneId != -2) {
|
|
_game._player._playerPos = Common::Point(138, 116);
|
|
_game._player._facing = FACING_NORTHEAST;
|
|
_game._player._visible = false;
|
|
_game._player._stepEnabled = false;
|
|
_scene->_sequences.remove(_globals._sequenceIndexes[3]);
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, -2);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 5);
|
|
_scene->loadAnimation(formAnimName('R', 1), 70);
|
|
}
|
|
sceneEntrySound();
|
|
}
|
|
|
|
void Scene506::step() {
|
|
if (_game._trigger >= 80) {
|
|
if (_firstDoorFl) {
|
|
_heroFacing = FACING_SOUTHEAST;
|
|
if (_scene->_priorSceneId == 507) {
|
|
_doorPos = Common::Point(112, 102);
|
|
_doorWord = 0x336;
|
|
} else {
|
|
_doorPos = Common::Point(65, 125);
|
|
_doorWord = 0x37D;
|
|
}
|
|
}
|
|
handleDoorSequences();
|
|
}
|
|
|
|
if (_game._trigger >= 70) {
|
|
switch (_game._trigger) {
|
|
case 70:
|
|
_game._player._visible = true;
|
|
_game._player._priorTimer = _scene->_activeAnimation->getNextFrameTimer() - _game._player._ticksAmount;
|
|
_scene->_sequences.addTimer(6, 71);
|
|
break;
|
|
|
|
case 71:
|
|
_scene->_sequences.remove(_globals._sequenceIndexes[3]);
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[3], false, 6, 1, 0, 0);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 5);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
|
|
break;
|
|
|
|
case 72:
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, -1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 5);
|
|
_game._player._stepEnabled = true;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
void Scene506::handleDoorSequences() {
|
|
_game._triggerSetupMode = SEQUENCE_TRIGGER_DAEMON;
|
|
|
|
if (_firstDoorFl) {
|
|
if (_action.isAction(VERB_WALK_INTO, NOUN_SOFTWARE_STORE) || ((_scene->_priorSceneId == 507) && !_actionFl)) {
|
|
_doorDepth = 13;
|
|
_doorSpriteIdx = _globals._spriteIndexes[2];
|
|
_doorSequenceIdx = _globals._sequenceIndexes[2];
|
|
_labDoorFl = false;
|
|
} else {
|
|
_doorDepth = 10;
|
|
_doorSpriteIdx = _globals._spriteIndexes[1];
|
|
_doorSequenceIdx = _globals._sequenceIndexes[1];
|
|
_labDoorFl = true;
|
|
}
|
|
_firstDoorFl = false;
|
|
}
|
|
|
|
switch (_game._trigger) {
|
|
case 0:
|
|
case 80:
|
|
_game._player._stepEnabled = false;
|
|
_scene->_sequences.remove(_doorSequenceIdx);
|
|
_doorSequenceIdx = _scene->_sequences.addSpriteCycle(_doorSpriteIdx, false, 7, 1, 0, 0);
|
|
_scene->_sequences.setDepth(_doorSequenceIdx, _doorDepth);
|
|
_scene->changeVariant(1);
|
|
_scene->_sequences.addSubEntry(_doorSequenceIdx, SEQUENCE_TRIGGER_EXPIRE, 0, 81);
|
|
break;
|
|
|
|
|
|
case 81:
|
|
_doorSequenceIdx = _scene->_sequences.startCycle(_doorSpriteIdx, false, -2);
|
|
_scene->_sequences.setDepth(_doorSequenceIdx, _doorDepth);
|
|
_game._player._walkAnywhere = true;
|
|
_game._player.walk(_doorPos, _heroFacing);
|
|
_scene->_sequences.addTimer(120, 82);
|
|
break;
|
|
|
|
case 82:
|
|
_scene->_sequences.remove(_doorSequenceIdx);
|
|
_doorSequenceIdx = _scene->_sequences.startReverseCycle(_doorSpriteIdx, false, 7, 1, 0, 0);
|
|
_scene->_sequences.setDepth(_doorSequenceIdx, _doorDepth);
|
|
if (_actionFl)
|
|
_scene->_sequences.addSubEntry(_doorSequenceIdx, SEQUENCE_TRIGGER_EXPIRE, 0, 84);
|
|
else
|
|
_scene->_sequences.addSubEntry(_doorSequenceIdx, SEQUENCE_TRIGGER_EXPIRE, 0, 83);
|
|
|
|
break;
|
|
|
|
case 83: {
|
|
_doorSequenceIdx = _scene->_sequences.startCycle(_doorSpriteIdx, false, 1);
|
|
int idx = _scene->_dynamicHotspots.add(_doorWord, VERB_WALK_INTO, _doorSequenceIdx, Common::Rect(0, 0, 0, 0));
|
|
int hotspotId = _scene->_dynamicHotspots.setPosition(idx, _doorPos, FACING_NORTHWEST);
|
|
_scene->_dynamicHotspots.setCursor(hotspotId, CURSOR_GO_LEFT);
|
|
_scene->_sequences.setDepth(_doorSequenceIdx, _doorDepth);
|
|
_firstDoorFl = true;
|
|
if (_labDoorFl) {
|
|
_globals._spriteIndexes[1] = _doorSpriteIdx;
|
|
_globals._sequenceIndexes[1] = _doorSequenceIdx;
|
|
} else {
|
|
_globals._spriteIndexes[2] = _doorSpriteIdx;
|
|
_globals._sequenceIndexes[2] = _doorSequenceIdx;
|
|
}
|
|
_game._player._stepEnabled = true;
|
|
|
|
}
|
|
break;
|
|
|
|
case 84:
|
|
_actionFl = false;
|
|
_game._player._stepEnabled = true;
|
|
if (_labDoorFl)
|
|
_scene->_nextSceneId = 508;
|
|
else
|
|
_scene->_nextSceneId = 507;
|
|
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene506::actions() {
|
|
if (_action.isAction(VERB_WALK_INTO, NOUN_LABORATORY)) {
|
|
if (_firstDoorFl) {
|
|
_heroFacing = FACING_NORTHWEST;
|
|
_doorPos = Common::Point(16, 111);
|
|
}
|
|
_actionFl = true;
|
|
handleDoorSequences();
|
|
} else if (_action.isAction(VERB_WALK_INTO, NOUN_SOFTWARE_STORE)) {
|
|
if (_firstDoorFl) {
|
|
_heroFacing = FACING_NORTHWEST;
|
|
_doorPos = Common::Point(80, 102);
|
|
}
|
|
_actionFl = true;
|
|
handleDoorSequences();
|
|
} else if (_action.isAction(VERB_GET_INTO, NOUN_CAR)) {
|
|
switch (_game._trigger) {
|
|
case 0:
|
|
_game._player._stepEnabled = false;
|
|
_scene->_sequences.remove(_globals._sequenceIndexes[3]);
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 6, 1, 0, 0);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 5);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
|
|
break;
|
|
|
|
case 1: {
|
|
int syncIdx = _globals._sequenceIndexes[3];
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, -2);
|
|
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], syncIdx);
|
|
_scene->_sequences.addTimer(6, 2);
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
_game._player._visible = false;
|
|
_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 10, 1, 0, 0);
|
|
_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[4]);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
|
|
break;
|
|
|
|
case 3: {
|
|
int syncIdx = _globals._sequenceIndexes[4];
|
|
_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, -2);
|
|
_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[4]);
|
|
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[4], syncIdx);
|
|
_scene->_nextSceneId = 504;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
} else if (_action._lookFlag || _action.isAction(VERB_LOOK, NOUN_STREET))
|
|
_vm->_dialogs->show(50618);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_RESTAURANT))
|
|
_vm->_dialogs->show(50610);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_MOTEL))
|
|
_vm->_dialogs->show(50611);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_CYCLE_SHOP))
|
|
_vm->_dialogs->show(50612);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_AIR_BIKE))
|
|
_vm->_dialogs->show(50613);
|
|
else if (_action.isAction(VERB_TAKE, NOUN_AIR_BIKE))
|
|
_vm->_dialogs->show(50614);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_SOFTWARE_STORE))
|
|
_vm->_dialogs->show(50615);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_LABORATORY))
|
|
_vm->_dialogs->show(50616);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_STREET_TO_WEST) || _action.isAction(VERB_WALK_DOWN, NOUN_STREET_TO_WEST))
|
|
_vm->_dialogs->show(50617);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_SOFTWARE_STORE_SIGN))
|
|
_vm->_dialogs->show(50619);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_CAR))
|
|
_vm->_dialogs->show(50620);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_SKY))
|
|
_vm->_dialogs->show(50621);
|
|
else
|
|
return;
|
|
|
|
_action._inProgress = false;
|
|
}
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
Scene507::Scene507(MADSEngine *vm) : Scene5xx(vm) {
|
|
_penlightHotspotId = -1;
|
|
}
|
|
|
|
void Scene507::synchronize(Common::Serializer &s) {
|
|
Scene5xx::synchronize(s);
|
|
|
|
s.syncAsSint16LE(_penlightHotspotId);
|
|
}
|
|
|
|
void Scene507::setup() {
|
|
setPlayerSpritesPrefix();
|
|
setAAName();
|
|
_scene->addActiveVocab(NOUN_PENLIGHT);
|
|
_scene->addActiveVocab(VERB_WALKTO);
|
|
}
|
|
|
|
void Scene507::enter() {
|
|
_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('p', -1));
|
|
_globals._spriteIndexes[2] = _scene->_sprites.addSprites("*RXMRD_3");
|
|
|
|
if ((_game._difficulty != DIFFICULTY_EASY) && (_game._objects[OBJ_PENLIGHT]._roomNumber == _scene->_currentSceneId)) {
|
|
_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 9, 0, 0, 0);
|
|
_penlightHotspotId = _scene->_dynamicHotspots.add(NOUN_PENLIGHT, VERB_WALKTO, _globals._sequenceIndexes[1], Common::Rect(0, 0, 0, 0));
|
|
_scene->_dynamicHotspots.setPosition(_penlightHotspotId, Common::Point(233, 152), FACING_SOUTHEAST);
|
|
}
|
|
|
|
if (_scene->_priorSceneId != -2) {
|
|
_game._player._playerPos = Common::Point(121, 147);
|
|
_game._player._facing = FACING_NORTH;
|
|
}
|
|
|
|
sceneEntrySound();
|
|
}
|
|
void Scene507::actions() {
|
|
if (_action.isAction(VERB_WALK_THROUGH, NOUN_ENTRANCE))
|
|
_scene->_nextSceneId = 506;
|
|
else if (_action.isAction(VERB_TAKE, NOUN_PENLIGHT)) {
|
|
if (_game._trigger || !_game._objects.isInInventory(OBJ_PENLIGHT)) {
|
|
switch (_game._trigger) {
|
|
case 0:
|
|
_game._player._stepEnabled = false;
|
|
_game._player._visible = false;
|
|
_globals._sequenceIndexes[2] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[2], false, 6, 1, 0, 0);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 1, 5);
|
|
_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[2]);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_SPRITE, 5, 1);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
|
|
break;
|
|
|
|
case 1:
|
|
_scene->_sequences.remove(_globals._sequenceIndexes[1]);
|
|
_scene->_dynamicHotspots.remove(_penlightHotspotId);
|
|
_vm->_sound->command(27);
|
|
_game._objects.addToInventory(OBJ_PENLIGHT);
|
|
_vm->_dialogs->showItem(OBJ_PENLIGHT, 50730);
|
|
break;
|
|
|
|
case 2:
|
|
_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[2]);
|
|
_game._player._visible = true;
|
|
_game._player._stepEnabled = true;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
} else if (_action._lookFlag)
|
|
_vm->_dialogs->show(50722);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_SWIRLING_LIGHT))
|
|
_vm->_dialogs->show(50710);
|
|
else if (_action.isAction(VERB_TAKE, NOUN_SWIRLING_LIGHT))
|
|
_vm->_dialogs->show(50711);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_OLD_SOFTWARE))
|
|
_vm->_dialogs->show(50712);
|
|
else if (_action.isAction(VERB_TAKE, NOUN_OLD_SOFTWARE))
|
|
_vm->_dialogs->show(50713);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_ADVERTISEMENT))
|
|
_vm->_dialogs->show(50714);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_ADVERTISING_POSTER))
|
|
_vm->_dialogs->show(50715);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_SIGN)) {
|
|
if (_scene->_customDest.x < 100)
|
|
_vm->_dialogs->show(50726);
|
|
else
|
|
_vm->_dialogs->show(50716);
|
|
} else if (_action.isAction(VERB_LOOK, NOUN_HOTTEST_SOFTWARE))
|
|
_vm->_dialogs->show(50717);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_SOFTWARE_SHELF))
|
|
_vm->_dialogs->show(50718);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_SENSOR))
|
|
_vm->_dialogs->show(50719);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_CASH_REGISTER))
|
|
_vm->_dialogs->show(50720);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_PAD_OF_PAPER))
|
|
_vm->_dialogs->show(50721);
|
|
else if (_action.isAction(VERB_OPEN, NOUN_CASH_REGISTER))
|
|
_vm->_dialogs->show(50723);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_BARGAIN_VAT))
|
|
_vm->_dialogs->show(50724);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_WINDOW))
|
|
_vm->_dialogs->show(50725);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_COUNTER)) {
|
|
if (_game._objects.isInRoom(OBJ_PENLIGHT))
|
|
_vm->_dialogs->show(50728);
|
|
else
|
|
_vm->_dialogs->show(50727);
|
|
} else if (_action.isAction(VERB_LOOK, NOUN_PENLIGHT) && !_game._objects.isInInventory(OBJ_PENLIGHT)) {
|
|
if (_game._objects.isInRoom(OBJ_PENLIGHT))
|
|
_vm->_dialogs->show(50729);
|
|
} else if (_action.isAction(VERB_LOOK, NOUN_EMERGENCY_LIGHT))
|
|
_vm->_dialogs->show(50731);
|
|
else
|
|
return;
|
|
|
|
_action._inProgress = false;
|
|
}
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
Scene508::Scene508(MADSEngine *vm) : Scene5xx(vm) {
|
|
_chosenObject = -1;
|
|
}
|
|
|
|
void Scene508::synchronize(Common::Serializer &s) {
|
|
Scene5xx::synchronize(s);
|
|
|
|
s.syncAsSint16LE(_chosenObject);
|
|
}
|
|
|
|
void Scene508::setup() {
|
|
setPlayerSpritesPrefix();
|
|
setAAName();
|
|
_scene->addActiveVocab(NOUN_SPINACH_PATCH_DOLL);
|
|
_scene->addActiveVocab(VERB_WALKTO);
|
|
_scene->addActiveVocab(NOUN_LASER_BEAM);
|
|
}
|
|
|
|
void Scene508::enter() {
|
|
_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('a', 0));
|
|
_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('m', 0));
|
|
_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('h', 0));
|
|
_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('l', 2));
|
|
_globals._spriteIndexes[5] = _scene->_sprites.addSprites(formAnimName('t', 0));
|
|
_globals._spriteIndexes[6] = _scene->_sprites.addSprites("*RXMRC_9");
|
|
_globals._spriteIndexes[7] = _scene->_sprites.addSprites(formAnimName('l', 3));
|
|
|
|
if (!_game._visitedScenes._sceneRevisited) {
|
|
_globals[kLaserOn] = false;
|
|
_chosenObject = 0;
|
|
}
|
|
|
|
if (!_globals[kLaserOn]) {
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, -2);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 8);
|
|
_globals._sequenceIndexes[5] = _scene->_sequences.startCycle(_globals._spriteIndexes[5], false, -2);
|
|
int idx = _scene->_dynamicHotspots.add(NOUN_LASER_BEAM, VERB_WALKTO, _globals._sequenceIndexes[5], Common::Rect(0, 0, 0, 0));
|
|
_scene->_dynamicHotspots.setPosition(idx, Common::Point(57, 116), FACING_NORTHEAST);
|
|
_scene->_hotspots.activate(NOUN_HOLE, false);
|
|
_scene->_hotspots.activate(NOUN_LASER_BEAM, false);
|
|
} else {
|
|
_scene->changeVariant(1);
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, -2);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 8);
|
|
_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, -2);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 11);
|
|
int idx = _scene->_dynamicHotspots.add(NOUN_LASER_BEAM, VERB_WALKTO, _globals._sequenceIndexes[4], Common::Rect(0, 0, 0, 0));
|
|
_scene->_dynamicHotspots.setPosition(idx, Common::Point(57, 116), FACING_NORTHEAST);
|
|
_globals._sequenceIndexes[2] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[2], false, 15, 0, 0, 0);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 6, 8);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 6);
|
|
if (_globals[kLaserHoleIsThere]) {
|
|
_globals._sequenceIndexes[7] = _scene->_sequences.startCycle(_globals._spriteIndexes[7], false, -2);
|
|
_scene->_hotspots.activate(NOUN_HOLE, true);
|
|
_scene->_hotspots.activate(NOUN_LASER_BEAM, true);
|
|
}
|
|
_vm->_sound->command(21);
|
|
}
|
|
_vm->_sound->command(20);
|
|
|
|
if (_scene->_priorSceneId == 515) {
|
|
_game._player._playerPos = Common::Point(57, 116);
|
|
_game._player._facing = FACING_NORTHEAST;
|
|
} else if (_scene->_priorSceneId != -2) {
|
|
_game._player._playerPos = Common::Point(289, 139);
|
|
_game._player._facing = FACING_WEST;
|
|
}
|
|
|
|
sceneEntrySound();
|
|
_game.loadQuoteSet(0x273, 0);
|
|
|
|
if (_scene->_roomChanged) {
|
|
_game._objects.addToInventory(OBJ_COMPACT_CASE);
|
|
_game._objects.addToInventory(OBJ_REARVIEW_MIRROR);
|
|
}
|
|
}
|
|
|
|
void Scene508::preActions() {
|
|
if (_action.isAction(VERB_WALK, NOUN_OUTSIDE))
|
|
_game._player._walkOffScreenSceneId = 506;
|
|
}
|
|
|
|
void Scene508::handlePedestral() {
|
|
if (!_globals[kLaserOn])
|
|
_vm->_dialogs->show(50835);
|
|
|
|
if (_globals[kLaserHoleIsThere])
|
|
_vm->_dialogs->show(50836);
|
|
|
|
if (_globals[kLaserOn] && !_globals[kLaserHoleIsThere]) {
|
|
switch (_game._trigger) {
|
|
case 0:
|
|
_game._player._stepEnabled = false;
|
|
_game._player._visible = false;
|
|
_globals._sequenceIndexes[6] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[6], false, 9, 1, 0, 0);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[6], 1, 4);
|
|
_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[6]);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[6], SEQUENCE_TRIGGER_SPRITE, 4, 1);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[6], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
|
|
break;
|
|
|
|
case 1:
|
|
if (_chosenObject == 2)
|
|
_game._objects.removeFromInventory(OBJ_COMPACT_CASE, 1);
|
|
else
|
|
_game._objects.removeFromInventory(OBJ_REARVIEW_MIRROR, 1);
|
|
|
|
_globals._sequenceIndexes[7] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[7], false, 6, 1, 0, 0);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[7], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
|
|
break;
|
|
|
|
case 2:
|
|
_globals._sequenceIndexes[7] = _scene->_sequences.startCycle(_globals._spriteIndexes[7], false, -2);
|
|
_scene->_hotspots.activate(NOUN_HOLE, true);
|
|
_scene->_hotspots.activate(NOUN_LASER_BEAM, true);
|
|
break;
|
|
|
|
case 3:
|
|
_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[6]);
|
|
_game._player._visible = true;
|
|
_scene->_sequences.addTimer(120, 4);
|
|
break;
|
|
|
|
case 4:
|
|
_vm->_dialogs->show(50834);
|
|
_globals[kLaserHoleIsThere] = true;
|
|
_scene->_nextSceneId = 515;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
void Scene508::actions() {
|
|
if (_action.isAction(VERB_PULL, NOUN_LEVER)) {
|
|
if (!_globals[kLaserOn]) {
|
|
switch (_game._trigger) {
|
|
case 0:
|
|
_game._player._stepEnabled = false;
|
|
_scene->_kernelMessages.reset();
|
|
_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 2, 120, _game.getQuote(0x273));
|
|
break;
|
|
|
|
case 2:
|
|
_game._player._visible = false;
|
|
_scene->_sequences.remove(_globals._sequenceIndexes[3]);
|
|
_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 10, 1, 0, 0);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 7);
|
|
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[1], -1);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
|
|
break;
|
|
|
|
case 3:
|
|
_vm->_sound->command(19);
|
|
_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 15, 1, 0, 0);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 6);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 4);
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, -2);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 8);
|
|
_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[1]);
|
|
_game._player._visible = true;
|
|
_scene->_sequences.addTimer(15, 5);
|
|
break;
|
|
|
|
case 4:
|
|
_globals._sequenceIndexes[2] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[2], false, 15, 0, 0, 0);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 6, 8);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 6);
|
|
break;
|
|
|
|
case 5:
|
|
_scene->_sequences.remove(_globals._sequenceIndexes[5]);
|
|
_scene->loadAnimation(formAnimName('B', 1), 6);
|
|
break;
|
|
|
|
case 6: {
|
|
_vm->_sound->command(22);
|
|
_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, -2);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 11);
|
|
int idx = _scene->_dynamicHotspots.add(NOUN_LASER_BEAM, VERB_WALKTO, _globals._sequenceIndexes[4], Common::Rect(0, 0, 0, 0));
|
|
_scene->_dynamicHotspots.setPosition(idx, Common::Point(57, 116), FACING_NORTHEAST);
|
|
_scene->_kernelMessages.reset();
|
|
_scene->changeVariant(1);
|
|
_scene->_sequences.addTimer(30, 7);
|
|
}
|
|
break;
|
|
|
|
case 7:
|
|
_globals[kLaserOn] = true;
|
|
_vm->_dialogs->show(50833);
|
|
_game._player._stepEnabled = true;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
} else {
|
|
_vm->_dialogs->show(50837);
|
|
}
|
|
} else if (_action.isAction(VERB_REFLECT, NOUN_REARVIEW_MIRROR, NOUN_LASER_BEAM) || _action.isAction(VERB_PUT, NOUN_REARVIEW_MIRROR, NOUN_PEDESTAL) || _action.isAction(VERB_PUT, NOUN_REARVIEW_MIRROR, NOUN_LASER_BEAM)) {
|
|
_chosenObject = 1;
|
|
handlePedestral();
|
|
} else if (_action.isAction(VERB_PUT, NOUN_COMPACT_CASE, NOUN_PEDESTAL) || _action.isAction(VERB_PUT, NOUN_COMPACT_CASE, NOUN_LASER_BEAM) || _action.isAction(VERB_REFLECT, NOUN_COMPACT_CASE, NOUN_LASER_BEAM)) {
|
|
_chosenObject = 2;
|
|
handlePedestral();
|
|
} else if (_action._lookFlag)
|
|
_vm->_dialogs->show(50822);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_TARGET_AREA))
|
|
_vm->_dialogs->show(50810);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_SPINACH_PATCH_DOLL))
|
|
_vm->_dialogs->show(50811);
|
|
else if (_action.isAction(VERB_TAKE, NOUN_SPINACH_PATCH_DOLL))
|
|
_vm->_dialogs->show(50812);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_SAND_BAGS))
|
|
_vm->_dialogs->show(50816);
|
|
else if (_action.isAction(VERB_TAKE, NOUN_SAND_BAGS))
|
|
_vm->_dialogs->show(50817);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_CONTROL_STATION))
|
|
_vm->_dialogs->show(50818);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_MONITOR)) {
|
|
if (_globals[kLaserOn])
|
|
_vm->_dialogs->show(50820);
|
|
else
|
|
_vm->_dialogs->show(50819);
|
|
} else if (_action.isAction(VERB_LOOK, NOUN_LASER_CANNON)) {
|
|
if (_globals[kLaserOn])
|
|
_vm->_dialogs->show(50822);
|
|
else
|
|
_vm->_dialogs->show(50821);
|
|
} else if (_action.isAction(VERB_TAKE, NOUN_LASER_CANNON))
|
|
_vm->_dialogs->show(50823);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_LEVER)) {
|
|
if (_globals[kLaserOn])
|
|
_vm->_dialogs->show(50825);
|
|
else
|
|
_vm->_dialogs->show(50824);
|
|
} else if (_action.isAction(VERB_PUSH, NOUN_LEVER))
|
|
_vm->_dialogs->show(50826);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_LASER_BEAM)) {
|
|
if (_globals[kLaserHoleIsThere])
|
|
_vm->_dialogs->show(50828);
|
|
else
|
|
_vm->_dialogs->show(50827);
|
|
} else if (_action.isAction(VERB_TAKE, NOUN_LASER_BEAM))
|
|
_vm->_dialogs->show(50829);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_CEILING)) {
|
|
if (_globals[kLaserHoleIsThere])
|
|
_vm->_dialogs->show(50831);
|
|
else
|
|
_vm->_dialogs->show(50830);
|
|
} else if (_action.isAction(VERB_LOOK, NOUN_WALL))
|
|
_vm->_dialogs->show(50832);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_PEDESTAL)) {
|
|
if (!_globals[kLaserOn])
|
|
_vm->_dialogs->show(50813);
|
|
else if (!_globals[kLaserHoleIsThere])
|
|
_vm->_dialogs->show(50814);
|
|
else
|
|
_vm->_dialogs->show(50815);
|
|
} else
|
|
return;
|
|
|
|
_action._inProgress = false;
|
|
}
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
Scene511::Scene511(MADSEngine *vm) : Scene5xx(vm) {
|
|
_handingLine = false;
|
|
_lineMoving = false;
|
|
|
|
_lineAnimationMode = -1;
|
|
_lineFrame = -1;
|
|
_lineAnimationPosition = -1;
|
|
}
|
|
|
|
void Scene511::synchronize(Common::Serializer &s) {
|
|
Scene5xx::synchronize(s);
|
|
|
|
s.syncAsByte(_handingLine);
|
|
s.syncAsByte(_lineMoving);
|
|
|
|
s.syncAsSint16LE(_lineAnimationMode);
|
|
s.syncAsSint16LE(_lineFrame);
|
|
s.syncAsSint16LE(_lineAnimationPosition);
|
|
}
|
|
|
|
void Scene511::setup() {
|
|
setPlayerSpritesPrefix();
|
|
setAAName();
|
|
_scene->addActiveVocab(NOUN_BOAT);
|
|
_scene->addActiveVocab(NOUN_FISHING_LINE);
|
|
_scene->addActiveVocab(VERB_WALKTO);
|
|
}
|
|
|
|
void Scene511::enter() {
|
|
_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('c', 0));
|
|
_globals._spriteIndexes[4] = _scene->_sprites.addSprites("*RXCD_6");
|
|
|
|
if (_scene->_priorSceneId != -2)
|
|
_handingLine = false;
|
|
|
|
if (_globals[kBoatRaised]) {
|
|
_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('b', 0));
|
|
_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 3);
|
|
_scene->_hotspots.activate(NOUN_BOAT, false);
|
|
int idx = _scene->_dynamicHotspots.add(NOUN_BOAT, VERB_WALKTO, _globals._sequenceIndexes[2], Common::Rect(0, 0, 0, 0));
|
|
_scene->_dynamicHotspots.setPosition(idx, Common::Point(75, 124), FACING_NORTH);
|
|
_scene->_hotspots.activate(NOUN_ROPE, false);
|
|
} else {
|
|
_globals._spriteIndexes[5] = _scene->_sprites.addSprites(formAnimName('b', 2));
|
|
_globals._spriteIndexes[6] = _scene->_sprites.addSprites(formAnimName('b', 3));
|
|
_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('b', 1));
|
|
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 1, 1, 0, 0);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 5);
|
|
|
|
_globals._sequenceIndexes[5] = _scene->_sequences.startCycle(_globals._spriteIndexes[5], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[5], 4);
|
|
|
|
_globals._sequenceIndexes[6] = _scene->_sequences.startCycle(_globals._spriteIndexes[6], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[6],5);
|
|
|
|
_scene->_hotspots.activate(NOUN_ROPE, true);
|
|
_scene->_hotspots.activate(NOUN_BOAT, true);
|
|
_scene->changeVariant(1);
|
|
}
|
|
|
|
int frame = 0;
|
|
if (_globals[kLineStatus] == 2)
|
|
frame = -1;
|
|
else if (_globals[kLineStatus] == 3)
|
|
frame = -2;
|
|
|
|
if (_globals[kLineStatus] == 2 || _globals[kLineStatus] == 3) {
|
|
_globals._spriteIndexes[7] = _scene->_sprites.addSprites(formAnimName('b', 4));
|
|
_globals._sequenceIndexes[7] = _scene->_sequences.startCycle(_globals._spriteIndexes[7], false, frame);
|
|
int idx = _scene->_dynamicHotspots.add(NOUN_FISHING_LINE, VERB_WALKTO, _globals._sequenceIndexes[7], Common::Rect(0, 0, 0, 0));
|
|
_scene->_dynamicHotspots.setPosition(idx, Common::Point(26, 153), FACING_NORTHEAST);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[7], 3);
|
|
if (_globals[kBoatRaised])
|
|
_scene->changeVariant(2);
|
|
}
|
|
|
|
_lineFrame = -1;
|
|
_lineMoving = false;
|
|
|
|
_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, -2);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 1);
|
|
|
|
if (_scene->_priorSceneId == 512) {
|
|
_game._player._playerPos = Common::Point(60, 112);
|
|
_game._player._facing = FACING_SOUTHEAST;
|
|
} else if (_scene->_priorSceneId != -2) {
|
|
_game._player._playerPos = Common::Point(55, 152);
|
|
_game._player._facing = FACING_NORTHWEST;
|
|
_game._player._visible = false;
|
|
_game._player._stepEnabled = false;
|
|
_scene->_sequences.remove(_globals._sequenceIndexes[1]);
|
|
_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, -1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 1);
|
|
_scene->loadAnimation(formAnimName('R', 1), 70);
|
|
} else if (_handingLine) {
|
|
_game._player._visible = false;
|
|
_lineAnimationMode = 1;
|
|
_lineAnimationPosition = 1;
|
|
_scene->loadAnimation(formAnimName('R', -1));
|
|
_lineFrame = 2;
|
|
}
|
|
sceneEntrySound();
|
|
}
|
|
|
|
void Scene511::step() {
|
|
if ((_lineAnimationMode == 1) && _scene->_activeAnimation) {
|
|
if (_lineFrame != _scene->_activeAnimation->getCurrentFrame()) {
|
|
_lineFrame = _scene->_activeAnimation->getCurrentFrame();
|
|
int resetFrame = -1;
|
|
|
|
if ((_lineAnimationPosition == 2) && (_lineFrame == 14))
|
|
_lineMoving = false;
|
|
|
|
if (_lineAnimationPosition == 1) {
|
|
if (_lineFrame == 3) {
|
|
_lineMoving = false;
|
|
resetFrame = 2;
|
|
}
|
|
|
|
if (_handingLine)
|
|
resetFrame = 2;
|
|
}
|
|
|
|
if ((resetFrame >= 0) && (resetFrame != _scene->_activeAnimation->getCurrentFrame())) {
|
|
_scene->_activeAnimation->setCurrentFrame(resetFrame);
|
|
_lineFrame = resetFrame;
|
|
}
|
|
}
|
|
}
|
|
|
|
switch (_game._trigger) {
|
|
case 70:
|
|
_game._player._visible = true;
|
|
_game._player._priorTimer = _scene->_activeAnimation->getNextFrameTimer() - _game._player._ticksAmount;
|
|
_scene->_sequences.addTimer(6, 71);
|
|
break;
|
|
|
|
case 71:
|
|
_scene->_sequences.remove(_globals._sequenceIndexes[1]);
|
|
_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 6, 1, 0, 0);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 1);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
|
|
break;
|
|
|
|
case 72:
|
|
_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, -2);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 1);
|
|
_game._player._stepEnabled = true;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene511::preActions() {
|
|
if (!_handingLine)
|
|
return;
|
|
|
|
if (_action.isAction(VERB_LOOK) || _action.isObject(NOUN_FISHING_LINE) || _action.isAction(VERB_TALKTO))
|
|
_game._player._needToWalk = false;
|
|
|
|
if ((!_action.isAction(VERB_TIE, NOUN_FISHING_LINE, NOUN_BOAT) || !_action.isAction(VERB_ATTACH, NOUN_FISHING_LINE, NOUN_BOAT)) && _game._player._needToWalk) {
|
|
if (_game._trigger == 0) {
|
|
_game._player._readyToWalk = false;
|
|
_game._player._stepEnabled = false;
|
|
_scene->freeAnimation ();
|
|
_lineAnimationMode = 2;
|
|
_scene->loadAnimation(formAnimName('R',2), 1);
|
|
} else if (_game._trigger == 1) {
|
|
_game._player._visible = true;
|
|
_game._player._priorTimer = _scene->_activeAnimation->getNextFrameTimer() - _game._player._ticksAmount;
|
|
_game._objects.setRoom(OBJ_FISHING_LINE, 1);
|
|
_handingLine = false;
|
|
_game._player._stepEnabled = true;
|
|
_game._player._readyToWalk = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
void Scene511::actions() {
|
|
if (_action.isAction(VERB_WALK_INTO, NOUN_RESTAURANT))
|
|
_scene->_nextSceneId = 512;
|
|
else if (_action.isAction(VERB_GET_INTO, NOUN_CAR)) {
|
|
switch (_game._trigger) {
|
|
case 0:
|
|
_game._player._stepEnabled = false;
|
|
_scene->_sequences.remove(_globals._sequenceIndexes[1]);
|
|
_globals._sequenceIndexes[1] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[1], false, 6, 1, 0, 0);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 1);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
|
|
break;
|
|
|
|
case 1: {
|
|
int syncIdx = _globals._sequenceIndexes[1];
|
|
_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, -1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 1);
|
|
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[1], syncIdx);
|
|
_scene->_sequences.addTimer(6, 2);
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
_game._player._visible = false;
|
|
_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 8, 1, 0, 0);
|
|
_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[4]);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
|
|
break;
|
|
|
|
case 3: {
|
|
int syncIdx = _globals._sequenceIndexes[4];
|
|
_globals._sequenceIndexes[4] = _scene->_sequences.startCycle(_globals._spriteIndexes[4], false, -2);
|
|
_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[4]);
|
|
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[4], syncIdx);
|
|
_scene->_nextSceneId = 504;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
} else if (_action.isAction(VERB_TAKE, NOUN_FISHING_LINE)) {
|
|
if (!_globals[kBoatRaised]) {
|
|
if (_globals[kLineStatus] == 2) {
|
|
if (_globals[kLineStatus] != 3) {
|
|
if (_game._trigger == 0) {
|
|
_game._player._stepEnabled = false;
|
|
_game._player._visible = false;
|
|
_lineAnimationMode = 1;
|
|
_lineAnimationPosition = 1;
|
|
_lineMoving = true;
|
|
_scene->loadAnimation(formAnimName('R', -1));
|
|
_scene->_sequences.addTimer(1, 1);
|
|
} else if (_game._trigger == 1) {
|
|
if (_lineMoving) {
|
|
_scene->_sequences.addTimer(1, 1);
|
|
} else {
|
|
_game._objects.addToInventory(OBJ_FISHING_LINE);
|
|
_lineMoving = true;
|
|
_handingLine = true;
|
|
_game._player._stepEnabled = true;
|
|
}
|
|
}
|
|
} else
|
|
_vm->_dialogs->show(51129);
|
|
} else
|
|
return;
|
|
} else {
|
|
_vm->_dialogs->show(51130);
|
|
}
|
|
} else if (_action.isAction(VERB_TIE, NOUN_FISHING_LINE, NOUN_BOAT) || _action.isAction(VERB_ATTACH, NOUN_FISHING_LINE, NOUN_BOAT)) {
|
|
if (_globals[kBoatRaised])
|
|
_vm->_dialogs->show(51131);
|
|
else if (_globals[kLineStatus] == 1)
|
|
_vm->_dialogs->show(51130);
|
|
else if (!_globals[kBoatRaised] && _handingLine) {
|
|
if (_globals[kLineStatus] != 3) {
|
|
if (_game._trigger == 0) {
|
|
_game._player._stepEnabled = false;
|
|
_scene->_sequences.remove(_globals._sequenceIndexes[7]);
|
|
_lineMoving = true;
|
|
_lineAnimationPosition = 2;
|
|
_scene->_sequences.addTimer(1, 1);
|
|
} else if (_game._trigger == 1) {
|
|
if (_lineMoving)
|
|
_scene->_sequences.addTimer(1, 1);
|
|
else {
|
|
_game._player._visible = true;
|
|
_game._player._priorTimer = _scene->_frameStartTime - _game._player._ticksAmount;
|
|
_globals._sequenceIndexes[7] = _scene->_sequences.startCycle(_globals._spriteIndexes[7], false, -2);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[7], 4);
|
|
int idx = _scene->_dynamicHotspots.add(NOUN_FISHING_LINE, VERB_WALKTO, _globals._sequenceIndexes[7], Common::Rect(0, 0, 0, 0));
|
|
_scene->_dynamicHotspots.setPosition(idx, Common::Point(26, 153), FACING_NORTHEAST);
|
|
_game._objects.removeFromInventory(OBJ_FISHING_LINE, 1);
|
|
_handingLine = false;
|
|
_lineMoving = true;
|
|
_globals[kLineStatus] = 3;
|
|
_game._player._stepEnabled = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} else if (_action.isAction(VERB_LOOK, NOUN_STREET) || _action._lookFlag) {
|
|
if (_globals[kLineStatus] == 2)
|
|
_vm->_dialogs->show(51110);
|
|
else {
|
|
if (_globals[kLineStatus] == 3)
|
|
_vm->_dialogs->show(51111);
|
|
else
|
|
_vm->_dialogs->show(51112);
|
|
}
|
|
} else if (_action.isAction(VERB_LOOK, NOUN_CAR))
|
|
_vm->_dialogs->show(51113);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_SIDEWALK))
|
|
_vm->_dialogs->show(51114);
|
|
else if (_action.isAction(VERB_WALK_DOWN, NOUN_SIDEWALK_TO_EAST) || _action.isAction(VERB_WALK_DOWN, NOUN_SIDEWALK_TO_WEST) || _action.isAction(VERB_WALK_DOWN, NOUN_STREET_TO_EAST))
|
|
_vm->_dialogs->show(51115);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_PLEASURE_DOME))
|
|
_vm->_dialogs->show(51116);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_TICKET_BOOTH))
|
|
_vm->_dialogs->show(51117);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_DOME_ENTRANCE))
|
|
_vm->_dialogs->show(51118);
|
|
else if (_action.isAction(VERB_UNLOCK, NOUN_PADLOCK_KEY, NOUN_DOME_ENTRANCE) || _action.isAction(VERB_UNLOCK, NOUN_DOOR_KEY, NOUN_DOME_ENTRANCE))
|
|
_vm->_dialogs->show(51119);
|
|
else if ( (_action.isAction(VERB_PUT) || _action.isAction(VERB_THROW))
|
|
&& (_action.isObject(NOUN_TIMEBOMB) || _action.isObject(NOUN_BOMB) || _action.isObject(NOUN_BOMBS))
|
|
&& _action.isObject(NOUN_DOME_ENTRANCE))
|
|
_vm->_dialogs->show(51120);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_RESTAURANT)) {
|
|
if (_globals[kBoatRaised])
|
|
_vm->_dialogs->show(51121);
|
|
else
|
|
_vm->_dialogs->show(51128);
|
|
} else if (_action.isAction(VERB_LOOK, NOUN_PORTHOLE))
|
|
_vm->_dialogs->show(51122);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_FISHING_LINE) && (_action._mainObjectSource == 4) && (_globals[kLineStatus] == 2))
|
|
_vm->_dialogs->show(51126);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_FISHING_LINE) && (_action._mainObjectSource == 4) && (_globals[kLineStatus] == 3))
|
|
_vm->_dialogs->show(51133);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_STATUE))
|
|
_vm->_dialogs->show(51127);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_BOAT))
|
|
if (_globals[kBoatRaised])
|
|
_vm->_dialogs->show(51123);
|
|
else if (_globals[kLineStatus] != 3)
|
|
_vm->_dialogs->show(51124);
|
|
else
|
|
_vm->_dialogs->show(51125);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_FISHING_LINE) && (_globals[kLineStatus] == 3))
|
|
_vm->_dialogs->show(51125);
|
|
else
|
|
return;
|
|
|
|
_action._inProgress = false;
|
|
}
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
Scene512::Scene512(MADSEngine *vm) : Scene5xx(vm) {
|
|
_fishingRodHotspotId = -1;
|
|
_keyHotspotId = -1;
|
|
}
|
|
|
|
void Scene512::synchronize(Common::Serializer &s) {
|
|
Scene5xx::synchronize(s);
|
|
|
|
s.syncAsSint16LE(_fishingRodHotspotId);
|
|
s.syncAsSint16LE(_keyHotspotId);
|
|
}
|
|
|
|
void Scene512::setup() {
|
|
setPlayerSpritesPrefix();
|
|
setAAName();
|
|
_scene->addActiveVocab(NOUN_FISHING_ROD);
|
|
_scene->addActiveVocab(VERB_WALKTO);
|
|
_scene->addActiveVocab(NOUN_PADLOCK_KEY);
|
|
_scene->addActiveVocab(NOUN_REGISTER_DRAWER);
|
|
}
|
|
|
|
void Scene512::enter() {
|
|
_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('r', -1));
|
|
_globals._spriteIndexes[2] = _scene->_sprites.addSprites("*RXMRC_9");
|
|
_globals._spriteIndexes[8] = _scene->_sprites.addSprites("*RXMRC_8");
|
|
_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('x', 0));
|
|
_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('x', 1));
|
|
_globals._spriteIndexes[5] = _scene->_sprites.addSprites(formAnimName('x', 2));
|
|
_globals._spriteIndexes[6] = _scene->_sprites.addSprites(formAnimName('x', 3));
|
|
|
|
if (_game._objects[OBJ_FISHING_ROD]._roomNumber == _scene->_currentSceneId) {
|
|
_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 9, 0, 0, 0);
|
|
_fishingRodHotspotId = _scene->_dynamicHotspots.add(NOUN_FISHING_ROD, VERB_WALKTO, _globals._sequenceIndexes[1], Common::Rect(0, 0, 0, 0));
|
|
_scene->_dynamicHotspots.setPosition(_fishingRodHotspotId, Common::Point(199, 101), FACING_NORTHEAST);
|
|
}
|
|
|
|
if (!_game._visitedScenes._sceneRevisited)
|
|
_globals[kRegisterOpen] = false;
|
|
|
|
_scene->_hotspots.activate(NOUN_PADLOCK_KEY, false);
|
|
if (_game._difficulty == DIFFICULTY_EASY) {
|
|
if (_game._objects[OBJ_PADLOCK_KEY]._roomNumber == _scene->_currentSceneId) {
|
|
_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 10, 0, 0, 0);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[6], 3);
|
|
_keyHotspotId = _scene->_dynamicHotspots.add(NOUN_PADLOCK_KEY, VERB_WALKTO, _globals._sequenceIndexes[6], Common::Rect(0, 0, 0, 0));
|
|
_scene->_dynamicHotspots.setPosition(_keyHotspotId, Common::Point(218, 152), FACING_NORTHEAST);
|
|
}
|
|
if (_globals[kRegisterOpen]) {
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, -2);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 3);
|
|
_scene->_hotspots.activate(NOUN_PADLOCK_KEY, false);
|
|
}
|
|
} else if (_globals[kRegisterOpen]) {
|
|
if (_game._objects[OBJ_PADLOCK_KEY]._roomNumber == _scene->_currentSceneId) {
|
|
_scene->_hotspots.activate(NOUN_PADLOCK_KEY, true);
|
|
_globals._sequenceIndexes[5] = _scene->_sequences.startCycle(_globals._spriteIndexes[5], false, -2);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[5], 3);
|
|
} else {
|
|
_scene->_hotspots.activate(NOUN_PADLOCK_KEY, false);
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, -2);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 3);
|
|
}
|
|
} else
|
|
_scene->_hotspots.activate(NOUN_PADLOCK_KEY, false);
|
|
|
|
if (_scene->_priorSceneId != -2) {
|
|
_game._player._playerPos = Common::Point(144, 152);
|
|
_game._player._facing = FACING_NORTHEAST;
|
|
}
|
|
|
|
sceneEntrySound();
|
|
}
|
|
|
|
void Scene512::actions() {
|
|
if (_action.isAction(VERB_WALK, NOUN_OUTSIDE))
|
|
_scene->_nextSceneId = 511;
|
|
else if (_action.isAction(VERB_TAKE, NOUN_FISHING_ROD)) {
|
|
if (_game._trigger || !_game._objects.isInInventory(OBJ_FISHING_ROD)) {
|
|
switch (_game._trigger) {
|
|
case 0:
|
|
_game._player._stepEnabled = false;
|
|
_game._player._visible = false;
|
|
_globals._sequenceIndexes[2] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[2], false, 8, 1, 0, 0);
|
|
_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[2]);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_SPRITE, 5, 1);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
|
|
break;
|
|
|
|
case 1:
|
|
_vm->_sound->command(9);
|
|
_scene->_sequences.remove(_globals._sequenceIndexes[1]);
|
|
_scene->_dynamicHotspots.remove(_fishingRodHotspotId);
|
|
_game._objects.addToInventory(OBJ_FISHING_ROD);
|
|
_vm->_dialogs->showItem(OBJ_FISHING_ROD, 51217);
|
|
break;
|
|
|
|
case 2:
|
|
_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[2]);
|
|
_game._player._visible = true;
|
|
_game._player._stepEnabled = true;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
} else if (_action.isAction(VERB_OPEN, NOUN_CASH_REGISTER)) {
|
|
if (!_globals[kRegisterOpen]) {
|
|
switch (_game._trigger) {
|
|
case 0:
|
|
_vm->_dialogs->show(51236);
|
|
_game._player._stepEnabled = false;
|
|
_game._player._facing = FACING_NORTH;
|
|
_scene->_sequences.addTimer(15, 1);
|
|
break;
|
|
|
|
case 1:
|
|
_game._player._visible = false;
|
|
_globals._sequenceIndexes[8] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[8], false, 9, 1, 0, 0);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[8], 1, 3);
|
|
_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[8]);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
|
|
break;
|
|
|
|
case 2:
|
|
_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[8]);
|
|
_game._player._visible = true;
|
|
_scene->_sequences.addTimer(30, 3);
|
|
break;
|
|
|
|
case 3:
|
|
_game._player._facing = FACING_NORTHEAST;
|
|
if (!_game._objects.isInRoom(OBJ_PADLOCK_KEY) || (_game._difficulty == DIFFICULTY_EASY)) {
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 12, 1, 0, 0);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 3);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 4);
|
|
} else {
|
|
_globals._sequenceIndexes[4] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[4], false, 12, 1, 0, 0);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 3);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 5);
|
|
}
|
|
_vm->_sound->command(23);
|
|
break;
|
|
|
|
case 4:
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, -2);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 3);
|
|
_scene->_sequences.addTimer(60, 6);
|
|
break;
|
|
|
|
case 5:
|
|
_globals._sequenceIndexes[5] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[5], false, 14, 0, 0, 0);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[5], 3);
|
|
_scene->_hotspots.activate(NOUN_PADLOCK_KEY, true);
|
|
_scene->_sequences.addTimer(60, 6);
|
|
break;
|
|
|
|
case 6:
|
|
_globals[kRegisterOpen] = true;
|
|
_game._player._stepEnabled = true;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
} else
|
|
_vm->_dialogs->show(51239);
|
|
} else if (_action.isAction(VERB_CLOSE, NOUN_CASH_REGISTER) && _globals[kRegisterOpen]) {
|
|
switch (_game._trigger) {
|
|
case 0:
|
|
_game._player._stepEnabled = false;
|
|
_game._player._visible = false;
|
|
_globals._sequenceIndexes[2] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[2], false, 10, 1, 0, 0);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 1, 2);
|
|
_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[2]);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
|
|
break;
|
|
|
|
case 1:
|
|
_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[2]);
|
|
_game._player._visible = true;
|
|
if (!_game._objects.isInRoom(OBJ_PADLOCK_KEY) || _game._difficulty == DIFFICULTY_EASY) {
|
|
_scene->_sequences.remove(_globals._sequenceIndexes[3]);
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[3], false, 12, 1, 0, 0);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 3);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
|
|
} else {
|
|
_scene->_sequences.remove(_globals._sequenceIndexes[5]);
|
|
_globals._sequenceIndexes[4] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[4], false, 12, 1, 0, 0);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 3);
|
|
_scene->_hotspots.activate(NOUN_PADLOCK_KEY, false);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
_globals[kRegisterOpen] = false;
|
|
_game._player._stepEnabled = true;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
} else if (_action.isAction(VERB_TAKE, NOUN_PADLOCK_KEY)) {
|
|
if (_game._trigger || !_game._objects.isInInventory(OBJ_PADLOCK_KEY)) {
|
|
switch (_game._trigger) {
|
|
case 0:
|
|
_game._player._stepEnabled = false;
|
|
_game._player._visible = false;
|
|
|
|
int endVal;
|
|
if (_game._player._playerPos == Common::Point(218, 152))
|
|
endVal = 3;
|
|
else
|
|
endVal = 2;
|
|
|
|
_globals._sequenceIndexes[2] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[2], false, 10, 1, 0, 0);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], 1, endVal);
|
|
_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[2]);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_SPRITE, endVal, 1);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
|
|
break;
|
|
|
|
case 1:
|
|
if (_game._player._playerPos == Common::Point(218, 152)) {
|
|
_scene->_sequences.remove(_globals._sequenceIndexes[6]);
|
|
_scene->_dynamicHotspots.remove(_keyHotspotId);
|
|
} else {
|
|
_scene->_sequences.remove(_globals._sequenceIndexes[5]);
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, -2);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 3);
|
|
_scene->_hotspots.activate(NOUN_PADLOCK_KEY, false);
|
|
}
|
|
_vm->_sound->command(9);
|
|
_game._objects.addToInventory(OBJ_PADLOCK_KEY);
|
|
_vm->_dialogs->showItem(OBJ_PADLOCK_KEY, 51226);
|
|
break;
|
|
|
|
case 2:
|
|
_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[2]);
|
|
_game._player._visible = true;
|
|
_game._player._stepEnabled = true;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
} else if (_action._lookFlag)
|
|
_vm->_dialogs->show(51225);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_PADLOCK_KEY) && _game._objects.isInRoom(OBJ_PADLOCK_KEY))
|
|
_vm->_dialogs->show(51215);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_FISHING_ROD) && (_scene->_activeAnimation->getCurrentFrame() == 4))
|
|
_vm->_dialogs->show(51216);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_SHIPS_WHEEL))
|
|
_vm->_dialogs->show(51218);
|
|
else if (_action.isAction(VERB_TAKE, NOUN_SHIPS_WHEEL))
|
|
_vm->_dialogs->show(51219);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_PORTHOLE) || _action.isAction(VERB_PEER_THROUGH, NOUN_PORTHOLE))
|
|
_vm->_dialogs->show(51220);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_TABLE))
|
|
_vm->_dialogs->show(51221);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_STARFISH))
|
|
_vm->_dialogs->show(51222);
|
|
else if (_action.isAction(VERB_TAKE, NOUN_STARFISH))
|
|
_vm->_dialogs->show(51223);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_OUTSIDE))
|
|
_vm->_dialogs->show(51224);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_POSTER))
|
|
_vm->_dialogs->show(51227);
|
|
else if (_action.isAction(VERB_TAKE, NOUN_POSTER))
|
|
_vm->_dialogs->show(51228);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_TROPHY)) {
|
|
if (_game._visitedScenes.exists(604))
|
|
_vm->_dialogs->show(51229);
|
|
else
|
|
_vm->_dialogs->show(51230);
|
|
} else if (_action.isAction(VERB_LOOK, NOUN_CHAIR))
|
|
_vm->_dialogs->show(51231);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_ROPE))
|
|
_vm->_dialogs->show(51232);
|
|
else if (_action.isAction(VERB_TAKE, NOUN_ROPE))
|
|
_vm->_dialogs->show(51233);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_LAMP))
|
|
_vm->_dialogs->show(51234);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_COUNTER))
|
|
_vm->_dialogs->show(51235);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_ICE_CHESTS))
|
|
_vm->_dialogs->show(51237);
|
|
else if (_action.isAction(VERB_OPEN, NOUN_ICE_CHESTS))
|
|
_vm->_dialogs->show(51238);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_CASH_REGISTER)) {
|
|
if (!_globals[kRegisterOpen])
|
|
_vm->_dialogs->show(51212);
|
|
else if (_game._objects.isInRoom(OBJ_PADLOCK_KEY))
|
|
_vm->_dialogs->show(51214);
|
|
else
|
|
_vm->_dialogs->show(51213);
|
|
} else
|
|
return;
|
|
|
|
_action._inProgress = false;
|
|
}
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
void Scene513::setup() {
|
|
setPlayerSpritesPrefix();
|
|
setAAName();
|
|
_scene->addActiveVocab(NOUN_ELEVATOR_DOOR);
|
|
_scene->addActiveVocab(VERB_WALKTO);
|
|
}
|
|
|
|
void Scene513::enter() {
|
|
_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('c', 0));
|
|
_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('x', 0));
|
|
_globals._spriteIndexes[3] = _scene->_sprites.addSprites("*RXCD_9");
|
|
_globals._spriteIndexes[4] = _scene->_sprites.addSprites("*RXMRC_9");
|
|
|
|
_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, -2);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 2);
|
|
|
|
_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, -2);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 1);
|
|
|
|
if ((_scene->_priorSceneId == 751) || (_scene->_priorSceneId == 701)) {
|
|
_game._player._playerPos = Common::Point(296, 147);
|
|
_game._player._facing = FACING_WEST;
|
|
_game._player._stepEnabled = false;
|
|
_scene->_sequences.addTimer(15, 80);
|
|
} else if (_scene->_priorSceneId != -2) {
|
|
_game._player._playerPos = Common::Point(63, 149);
|
|
_game._player._facing = FACING_NORTHEAST;
|
|
_game._player._visible = false;
|
|
_game._player._stepEnabled = false;
|
|
_scene->_sequences.remove(_globals._sequenceIndexes[1]);
|
|
_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, -1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 1);
|
|
_scene->loadAnimation(formAnimName('R', 1), 70);
|
|
}
|
|
|
|
sceneEntrySound();
|
|
|
|
if (_scene->_roomChanged)
|
|
_game._objects.addToInventory(OBJ_SECURITY_CARD);
|
|
|
|
_game.loadQuoteSet(0x278, 0);
|
|
}
|
|
|
|
void Scene513::step() {
|
|
switch (_game._trigger) {
|
|
case 80:
|
|
_game._player._stepEnabled = false;
|
|
_scene->_sequences.remove(_globals._sequenceIndexes[2]);
|
|
_globals._sequenceIndexes[2] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[2], false, 7, 1, 0, 0);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 2);
|
|
_vm->_sound->command(24);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 81);
|
|
break;
|
|
|
|
case 81:
|
|
_game._player.walk(Common::Point(265, 152), FACING_WEST);
|
|
_scene->_sequences.addTimer(120, 82);
|
|
break;
|
|
|
|
case 82:
|
|
_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 7, 1, 0, 0);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 2);
|
|
_vm->_sound->command(25);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 83);
|
|
break;
|
|
|
|
case 83:
|
|
_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, -2);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 2);
|
|
_game._player._stepEnabled = true;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
switch (_game._trigger) {
|
|
case 70:
|
|
_game._player._visible = true;
|
|
_game._player._priorTimer = _scene->_activeAnimation->getNextFrameTimer() - _game._player._ticksAmount;
|
|
_scene->_sequences.addTimer(6, 71);
|
|
break;
|
|
|
|
case 71:
|
|
_scene->_sequences.remove(_globals._sequenceIndexes[1]);
|
|
_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 6, 1, 0, 0);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 1);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 72);
|
|
break;
|
|
|
|
case 72:
|
|
_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, -2);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 1);
|
|
_game._player._stepEnabled = true;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene513::actions() {
|
|
if (_action.isAction(VERB_GET_INTO, NOUN_CAR)) {
|
|
switch (_game._trigger) {
|
|
case 0:
|
|
_game._player._stepEnabled = false;
|
|
_scene->_sequences.remove(_globals._sequenceIndexes[1]);
|
|
_globals._sequenceIndexes[1] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[1], false, 6, 1, 0, 0);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 1);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
|
|
break;
|
|
|
|
case 1: {
|
|
int syncIdx = _globals._sequenceIndexes[1];
|
|
_globals._sequenceIndexes[1] = _scene->_sequences.startCycle(_globals._spriteIndexes[1], false, -1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 1);
|
|
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[1], syncIdx);
|
|
_scene->_sequences.addTimer(6, 2);
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
_game._player._visible = false;
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[3], false, 10, 1, 0, 0);
|
|
_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[3]);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
|
|
break;
|
|
|
|
case 3: {
|
|
int syncIdx = _globals._sequenceIndexes[3];
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, -2);
|
|
_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[3]);
|
|
_scene->_sequences.updateTimeout(_globals._sequenceIndexes[3], syncIdx);
|
|
_scene->_nextSceneId = 504;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
} else if (_action.isAction(VERB_PUT, NOUN_ID_CARD, NOUN_CARD_SLOT) || _action.isAction(VERB_PUT, NOUN_FAKE_ID, NOUN_CARD_SLOT)) {
|
|
switch (_game._trigger) {
|
|
case 0:
|
|
_game._player._stepEnabled = false;
|
|
_game._player._visible = false;
|
|
_globals._sequenceIndexes[4] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[4], false, 7, 1, 0, 0);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[4], 1, 2);
|
|
_scene->_sequences.setMsgLayout(_globals._sequenceIndexes[4]);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[4], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
|
|
break;
|
|
|
|
case 1:
|
|
_scene->_sequences.updateTimeout(-1, _globals._sequenceIndexes[4]);
|
|
_game._player._visible = true;
|
|
_scene->_sequences.remove(_globals._sequenceIndexes[2]);
|
|
_globals._sequenceIndexes[2] = _scene->_sequences.startReverseCycle(_globals._spriteIndexes[2], false, 7, 1, 0, 0);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 2);
|
|
_vm->_sound->command(24);
|
|
_scene->_kernelMessages.reset();
|
|
_scene->_kernelMessages.add(Common::Point(0, 0), 0x1110, 34, 0, 120, _game.getQuote(0x278));
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
|
|
break;
|
|
|
|
case 2:
|
|
_game._player.walk(Common::Point(296, 147), FACING_WEST);
|
|
_scene->_sequences.addTimer(120, 3);
|
|
break;
|
|
|
|
case 3:
|
|
_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 7, 1, 0, 0);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 2);
|
|
_vm->_sound->command(25);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 4);
|
|
break;
|
|
|
|
case 4:
|
|
_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, -2);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 2);
|
|
_game._player._stepEnabled = true;
|
|
if (_globals[kCityFlooded])
|
|
_scene->_nextSceneId = 701;
|
|
else
|
|
_scene->_nextSceneId = 751;
|
|
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
} else if ((_action._lookFlag) || _action.isAction(VERB_LOOK, NOUN_STREET))
|
|
_vm->_dialogs->show(51318);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_ELEVATOR))
|
|
_vm->_dialogs->show(51310);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_ELEVATOR_DOOR))
|
|
_vm->_dialogs->show(51311);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_CARD_SLOT))
|
|
_vm->_dialogs->show(51312);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_HANDICAP_SIGN))
|
|
_vm->_dialogs->show(51313);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_BIKE_RACK))
|
|
_vm->_dialogs->show(51314);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_BUILDING))
|
|
_vm->_dialogs->show(51315);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_SIGN))
|
|
_vm->_dialogs->show(51316);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_STREET_TO_WEST) || _action.isAction(VERB_WALK_DOWN, NOUN_STREET_TO_WEST))
|
|
_vm->_dialogs->show(51317);
|
|
else if (_action.isAction(VERB_OPEN, NOUN_ELEVATOR_DOOR) || _action.isAction(VERB_OPEN, NOUN_ELEVATOR))
|
|
_vm->_dialogs->show(51319);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_CAR))
|
|
_vm->_dialogs->show(51321);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_BRICK_WALL))
|
|
_vm->_dialogs->show(51322);
|
|
else if (_action.isAction(VERB_PUT, NOUN_SECURITY_CARD, NOUN_CARD_SLOT))
|
|
_vm->_dialogs->show(51320);
|
|
else
|
|
return;
|
|
|
|
_action._inProgress = false;
|
|
}
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
void Scene515::setup() {
|
|
_game._player._spritesPrefix = "";
|
|
setAAName();
|
|
}
|
|
|
|
void Scene515::enter() {
|
|
_game._player._visible = false;
|
|
_game._player._stepEnabled = false;
|
|
_scene->_sequences.addTimer(30, 70);
|
|
|
|
sceneEntrySound();
|
|
}
|
|
|
|
void Scene515::step() {
|
|
if (_game._trigger == 70)
|
|
_scene->loadAnimation(formAnimName('A', -1), 71);
|
|
else if (_game._trigger == 71)
|
|
_scene->_nextSceneId = 508;
|
|
}
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
void Scene551::setup() {
|
|
setPlayerSpritesPrefix();
|
|
setAAName();
|
|
}
|
|
|
|
void Scene551::enter() {
|
|
if (_globals[kSexOfRex] == REX_MALE)
|
|
_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('a', 0));
|
|
else
|
|
_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('a', 1));
|
|
|
|
if (_scene->_priorSceneId == 501)
|
|
_game._player._playerPos = Common::Point(18, 130);
|
|
else if (_scene->_priorSceneId != -2) {
|
|
_game._player._playerPos = Common::Point(124, 119);
|
|
_game._player._facing = FACING_NORTH;
|
|
}
|
|
|
|
if (_globals[kTeleporterCommand]) {
|
|
_game._player._visible = false;
|
|
_game._player._stepEnabled = false;
|
|
|
|
char sepChar;
|
|
if (_globals[kSexOfRex] == REX_MALE)
|
|
sepChar = 'e';
|
|
else
|
|
sepChar = 'u';
|
|
|
|
int suffixNum;
|
|
int trigger;
|
|
|
|
switch (_globals[kTeleporterCommand]) {
|
|
case 1:
|
|
suffixNum = 3;
|
|
trigger = 75;
|
|
_globals[kTeleporterUnderstood] = true;
|
|
break;
|
|
|
|
case 2:
|
|
suffixNum = 1;
|
|
trigger = 80;
|
|
break;
|
|
|
|
case 4:
|
|
suffixNum = 2;
|
|
trigger = 90;
|
|
break;
|
|
|
|
default:
|
|
trigger = 0;
|
|
suffixNum = 0;
|
|
}
|
|
|
|
_globals[kTeleporterCommand] = 0;
|
|
|
|
if (suffixNum > 0)
|
|
_scene->loadAnimation(formAnimName(sepChar, suffixNum), trigger);
|
|
else {
|
|
_game._player._visible = true;
|
|
_game._player._stepEnabled = true;
|
|
}
|
|
}
|
|
|
|
sceneEntrySound();
|
|
}
|
|
|
|
void Scene551::step() {
|
|
switch (_game._trigger) {
|
|
case 75:
|
|
_game._player._stepEnabled = true;
|
|
_game._player._visible = true;
|
|
_game._player._priorTimer = _scene->_frameStartTime - _game._player._ticksAmount;
|
|
break;
|
|
|
|
case 80:
|
|
_globals[kTeleporterCommand] = 1;
|
|
_scene->_nextSceneId = _globals[kTeleporterDestination];
|
|
_scene->_reloadSceneFlag = true;
|
|
break;
|
|
|
|
case 90:
|
|
if (_globals[kSexOfRex] == REX_MALE) {
|
|
_globals._sequenceIndexes[2] = _scene->_sequences.startCycle(_globals._spriteIndexes[2], false, -2);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 8);
|
|
} else {
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.startCycle(_globals._spriteIndexes[3], false, -2);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 8);
|
|
}
|
|
_vm->_sound->command(28);
|
|
_scene->_sequences.addTimer(60, 91);
|
|
break;
|
|
|
|
case 91:
|
|
_scene->_reloadSceneFlag = true;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene551::preActions() {
|
|
if (_action.isAction(VERB_WALK_DOWN) && (_action.isObject(NOUN_STREET_TO_WEST) || _action.isObject(NOUN_SIDEWALK_TO_WEST)))
|
|
_game._player._walkOffScreenSceneId = 501;
|
|
}
|
|
|
|
void Scene551::actions() {
|
|
if (_action.isAction(VERB_STEP_INTO, NOUN_TELEPORTER))
|
|
_scene->_nextSceneId = 502;
|
|
else if ((_action._lookFlag))
|
|
_vm->_dialogs->show(55117);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_SKELETON))
|
|
_vm->_dialogs->show(55110);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_ELEVATOR_SHAFT))
|
|
_vm->_dialogs->show(55111);
|
|
else if (_action.isAction(VERB_WALKTO, NOUN_ELEVATOR_SHAFT))
|
|
_vm->_dialogs->show(55112);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_BUILDING))
|
|
_vm->_dialogs->show(55113);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_TELEPORTER))
|
|
_vm->_dialogs->show(55114);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_SIDEWALK_TO_WEST)) {
|
|
if (_game._visitedScenes.exists(505))
|
|
_vm->_dialogs->show(55116);
|
|
else
|
|
_vm->_dialogs->show(55115);
|
|
} else if (_action.isAction(VERB_LOOK, NOUN_SIDEWALK))
|
|
_vm->_dialogs->show(55118);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_EQUIPMENT_OVERHEAD))
|
|
_vm->_dialogs->show(55119);
|
|
else if (_action.isAction(VERB_LOOK, NOUN_RAILING))
|
|
_vm->_dialogs->show(55120);
|
|
else
|
|
return;
|
|
|
|
_action._inProgress = false;
|
|
}
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
} // End of namespace Nebular
|
|
} // End of namespace MADS
|