mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-16 22:58:09 +00:00
e75722665d
These are flagged by GCC if -Wswitch-default is enabled.
4978 lines
176 KiB
C++
4978 lines
176 KiB
C++
/* ScummVM - Graphic Adventure Engine
|
|
*
|
|
* ScummVM is the legal property of its developers, whose names
|
|
* are too numerous to list here. Please refer to the COPYRIGHT
|
|
* file distributed with this source distribution.
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*
|
|
*/
|
|
|
|
#include "common/scummsys.h"
|
|
#include "mads/mads.h"
|
|
#include "mads/conversations.h"
|
|
#include "mads/scene.h"
|
|
#include "mads/phantom/phantom_scenes.h"
|
|
#include "mads/phantom/phantom_scenes4.h"
|
|
|
|
namespace MADS {
|
|
|
|
namespace Phantom {
|
|
|
|
void Scene4xx::setAAName() {
|
|
_game._aaName = Resources::formatAAName(1);
|
|
_vm->_palette->setEntry(254, 43, 47, 51);
|
|
}
|
|
|
|
void Scene4xx::sceneEntrySound() {
|
|
if (!_vm->_musicFlag)
|
|
return;
|
|
|
|
_vm->_sound->command(16);
|
|
}
|
|
|
|
void Scene4xx::setPlayerSpritesPrefix() {
|
|
_vm->_sound->command(5);
|
|
|
|
Common::String oldName = _game._player._spritesPrefix;
|
|
if (!_game._player._forcePrefix)
|
|
_game._player._spritesPrefix = "RAL";
|
|
if (oldName != _game._player._spritesPrefix)
|
|
_game._player._spritesChanged = true;
|
|
|
|
_game._player._scalingVelocity = true;
|
|
}
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
Scene401::Scene401(MADSEngine *vm) : Scene4xx(vm) {
|
|
_anim0ActvFl = false;
|
|
_frameInRoomFl = false;
|
|
_takingFrameInRoomFl = false;
|
|
|
|
_redFrameHotspotId = -1;
|
|
_greenFrameHostpotId = -1;
|
|
_blueFrameHotspotId = -1;
|
|
_yellowFrameHotspotId = -1;
|
|
}
|
|
|
|
void Scene401::synchronize(Common::Serializer &s) {
|
|
Scene4xx::synchronize(s);
|
|
|
|
s.syncAsByte(_anim0ActvFl);
|
|
s.syncAsByte(_frameInRoomFl);
|
|
s.syncAsByte(_takingFrameInRoomFl);
|
|
|
|
s.syncAsSint16LE(_redFrameHotspotId);
|
|
s.syncAsSint16LE(_greenFrameHostpotId);
|
|
s.syncAsSint16LE(_blueFrameHotspotId);
|
|
s.syncAsSint16LE(_yellowFrameHotspotId);
|
|
}
|
|
|
|
void Scene401::setup() {
|
|
setPlayerSpritesPrefix();
|
|
setAAName();
|
|
|
|
if (_globals[kCatacombsMisc] & MAZE_EVENT_PUDDLE)
|
|
_scene->_variant = 1;
|
|
|
|
_scene->addActiveVocab(NOUN_RED_FRAME);
|
|
_scene->addActiveVocab(NOUN_YELLOW_FRAME);
|
|
_scene->addActiveVocab(NOUN_BLUE_FRAME);
|
|
_scene->addActiveVocab(NOUN_GREEN_FRAME);
|
|
}
|
|
|
|
void Scene401::enter() {
|
|
_game.initCatacombs();
|
|
_anim0ActvFl = false;
|
|
|
|
_scene->_hotspots.activate(NOUN_PUDDLE, false);
|
|
_scene->_hotspots.activate(NOUN_RATS_NEST, false);
|
|
_scene->_hotspots.activate(NOUN_SKULL, false);
|
|
_scene->_hotspots.activate(NOUN_POT, false);
|
|
|
|
_globals._spriteIndexes[8] = _scene->_sprites.addSprites("*RRD_9");
|
|
_globals._spriteIndexes[9] = _scene->_sprites.addSprites(formAnimName('f', 0));
|
|
_globals._spriteIndexes[10] = _scene->_sprites.addSprites(formAnimName('f', 1));
|
|
_globals._spriteIndexes[11] = _scene->_sprites.addSprites(formAnimName('f', 2));
|
|
_globals._spriteIndexes[12] = _scene->_sprites.addSprites(formAnimName('f', 3));
|
|
|
|
if (_game.exitCatacombs(0) == -1) {
|
|
_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('c', 1));
|
|
_scene->drawToBackground(_globals._spriteIndexes[1], 1, Common::Point(-32000, -32000), 0, 100);
|
|
_scene->_hotspots.activate(NOUN_ARCHWAY_TO_NORTH, false);
|
|
}
|
|
|
|
if (_game.exitCatacombs(3) == -1) {
|
|
_globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('c', 0));
|
|
_scene->drawToBackground(_globals._spriteIndexes[0], 1, Common::Point(-32000, -32000), 0, 100);
|
|
_scene->_hotspots.activate(NOUN_ARCHWAY_TO_WEST, false);
|
|
}
|
|
|
|
if (_game.exitCatacombs(1) == -1) {
|
|
_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('c', 2));
|
|
_scene->drawToBackground(_globals._spriteIndexes[2], 1, Common::Point(-32000, -32000), 0, 100);
|
|
_scene->_hotspots.activate(NOUN_ARCHWAY_TO_EAST, false);
|
|
}
|
|
|
|
if (_game.exitCatacombs(2) == -1)
|
|
_scene->_hotspots.activate(NOUN_MORE_CATACOMBS, false);
|
|
|
|
if (_globals[kCatacombsMisc] & MAZE_EVENT_RAT_NEST) {
|
|
_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('c', 4));
|
|
_scene->drawToBackground(_globals._spriteIndexes[4], 1, Common::Point(-32000, -32000), 0, 100);
|
|
_scene->_hotspots.activate(NOUN_RATS_NEST, true);
|
|
}
|
|
|
|
if (_globals[kCatacombsMisc] & MAZE_EVENT_SKULL) {
|
|
_globals._spriteIndexes[5] = _scene->_sprites.addSprites(formAnimName('c', 5));
|
|
_scene->drawToBackground(_globals._spriteIndexes[5], 1, Common::Point(-32000, -32000), 0, 100);
|
|
_scene->_hotspots.activate(NOUN_SKULL, true);
|
|
}
|
|
|
|
if (_globals[kCatacombsMisc] & MAZE_EVENT_POT) {
|
|
_globals._spriteIndexes[6] = _scene->_sprites.addSprites(formAnimName('c', 6));
|
|
_scene->drawToBackground(_globals._spriteIndexes[6], 1, Common::Point(-32000, -32000), 0, 100);
|
|
_scene->_hotspots.activate(NOUN_POT, true);
|
|
}
|
|
|
|
if (_globals[kCatacombsMisc] & MAZE_EVENT_BRICK) {
|
|
_globals._spriteIndexes[7] = _scene->_sprites.addSprites(formAnimName('c', 7));
|
|
_scene->drawToBackground(_globals._spriteIndexes[7], 1, Common::Point(-32000, -32000), 0, 100);
|
|
}
|
|
|
|
if (_globals[kCatacombsMisc] & MAZE_EVENT_PUDDLE) {
|
|
_scene->_hotspots.activate(NOUN_PUDDLE, true);
|
|
_globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('d', 1), 0);
|
|
_anim0ActvFl = true;
|
|
}
|
|
|
|
if (_scene->_priorSceneId != RETURNING_FROM_LOADING) {
|
|
switch (_globals[kCatacombsFrom]) {
|
|
case 0:
|
|
_game._player._playerPos = Common::Point(128, 78);
|
|
_game._player._facing = FACING_SOUTH;
|
|
_game._player.walk(Common::Point(128, 91), FACING_SOUTH);
|
|
break;
|
|
|
|
case 1:
|
|
_game._player._playerPos = Common::Point(311, 115);
|
|
_game._player._facing = FACING_WEST;
|
|
_game._player.walk(Common::Point(271, 123), FACING_WEST);
|
|
break;
|
|
|
|
case 2:
|
|
_game._player._playerPos = Common::Point(142, 146);
|
|
_game._player._facing = FACING_NORTH;
|
|
break;
|
|
|
|
case 3:
|
|
_game._player._playerPos = Common::Point(4, 113);
|
|
_game._player._facing = FACING_SOUTH;
|
|
_game._player.walk(Common::Point(48, 113), FACING_EAST);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (_game._objects[OBJ_RED_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_globals._sequenceIndexes[9] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[9], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[9]]->getFramePos(0);
|
|
_redFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_RED_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_redFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_game._objects[OBJ_GREEN_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_globals._sequenceIndexes[10] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[10], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[10], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[9]]->getFramePos(0);
|
|
_greenFrameHostpotId = _scene->_dynamicHotspots.add(NOUN_GREEN_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_greenFrameHostpotId , Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_game._objects[OBJ_BLUE_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_globals._sequenceIndexes[11] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[11], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[11], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[9]]->getFramePos(0);
|
|
_blueFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_BLUE_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_blueFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_game._objects[OBJ_YELLOW_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_globals._sequenceIndexes[12] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[12], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[12], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[9]]->getFramePos(0);
|
|
_yellowFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_YELLOW_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_yellowFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
sceneEntrySound();
|
|
}
|
|
|
|
void Scene401::step() {
|
|
if (_anim0ActvFl) {
|
|
if (_scene->_animation[_globals._animationIndexes[0]]->getCurrentFrame() == 20)
|
|
_scene->setAnimFrame(_globals._animationIndexes[0], 0);
|
|
}
|
|
}
|
|
|
|
void Scene401::actions() {
|
|
if (_action.isAction(VERB_PUT) && _action.isTarget(NOUN_FLOOR)) {
|
|
if (_action.isObject(NOUN_RED_FRAME) || _action.isObject(NOUN_BLUE_FRAME) || _action.isObject(NOUN_YELLOW_FRAME) || _action.isObject(NOUN_GREEN_FRAME)) {
|
|
if (_frameInRoomFl)
|
|
_vm->_dialogs->show(29);
|
|
else {
|
|
switch (_game._trigger) {
|
|
case (0):
|
|
_game._player._stepEnabled = false;
|
|
_game._player._visible = false;
|
|
_globals._sequenceIndexes[8] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[8], true, 5, 2);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[8], 1, 5);
|
|
_scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[8], true);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_SPRITE, 5, 1);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
|
|
break;
|
|
|
|
case 1:
|
|
if (_action.isObject(NOUN_RED_FRAME)) {
|
|
_game._objects.setRoom(OBJ_RED_FRAME, NOWHERE);
|
|
_game._objects[OBJ_RED_FRAME]._roomNumber = _globals[kCatacombsRoom] + 600;
|
|
_globals._sequenceIndexes[9] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[9], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[9]]->getFramePos(0);
|
|
_redFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_RED_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_redFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_GREEN_FRAME)) {
|
|
_game._objects.setRoom(OBJ_GREEN_FRAME, NOWHERE);
|
|
_game._objects[OBJ_GREEN_FRAME]._roomNumber = _globals[kCatacombsRoom] + 600;
|
|
_globals._sequenceIndexes[10] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[10], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[10], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[9]]->getFramePos(0);
|
|
_greenFrameHostpotId = _scene->_dynamicHotspots.add(NOUN_GREEN_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_greenFrameHostpotId , Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_BLUE_FRAME)) {
|
|
_game._objects.setRoom(OBJ_BLUE_FRAME, NOWHERE);
|
|
_game._objects[OBJ_BLUE_FRAME]._roomNumber = _globals[kCatacombsRoom] + 600;
|
|
_globals._sequenceIndexes[11] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[11], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[11], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[9]]->getFramePos(0);
|
|
_blueFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_BLUE_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_blueFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_YELLOW_FRAME)) {
|
|
_game._objects.setRoom(OBJ_YELLOW_FRAME, NOWHERE);
|
|
_game._objects[OBJ_YELLOW_FRAME]._roomNumber = _globals[kCatacombsRoom] + 600;
|
|
_globals._sequenceIndexes[12] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[12], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[12], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[9]]->getFramePos(0);
|
|
_yellowFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_YELLOW_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_yellowFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
_game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[8]);
|
|
_game._player._visible = true;
|
|
_game._player._stepEnabled = true;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (_action.isAction(VERB_TAKE)) {
|
|
if (_action.isObject(NOUN_RED_FRAME) || _action.isObject(NOUN_GREEN_FRAME) || _action.isObject(NOUN_BLUE_FRAME) || _action.isObject(NOUN_YELLOW_FRAME)) {
|
|
if ((_takingFrameInRoomFl || _game._trigger)) {
|
|
switch (_game._trigger) {
|
|
case (0):
|
|
_game._player._stepEnabled = false;
|
|
_game._player._visible = false;
|
|
_globals._sequenceIndexes[8] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[8], true, 5, 2);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[8], 1, 5);
|
|
_scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[8], true);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_SPRITE, 5, 1);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
|
|
break;
|
|
|
|
case 1:
|
|
if (_action.isObject(NOUN_RED_FRAME)) {
|
|
_scene->deleteSequence(_globals._sequenceIndexes[9]);
|
|
_scene->_dynamicHotspots.remove(_redFrameHotspotId);
|
|
_game._objects.addToInventory(OBJ_RED_FRAME);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_GREEN_FRAME)) {
|
|
_scene->deleteSequence(_globals._sequenceIndexes[10]);
|
|
_scene->_dynamicHotspots.remove(_greenFrameHostpotId );
|
|
_game._objects.addToInventory(OBJ_GREEN_FRAME);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_BLUE_FRAME)) {
|
|
_scene->deleteSequence(_globals._sequenceIndexes[11]);
|
|
_scene->_dynamicHotspots.remove(_blueFrameHotspotId);
|
|
_game._objects.addToInventory(OBJ_BLUE_FRAME);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_YELLOW_FRAME)) {
|
|
_scene->deleteSequence(_globals._sequenceIndexes[12]);
|
|
_scene->_dynamicHotspots.remove(_yellowFrameHotspotId);
|
|
_game._objects.addToInventory(OBJ_YELLOW_FRAME);
|
|
}
|
|
|
|
_vm->_sound->command(26);
|
|
break;
|
|
|
|
case 2:
|
|
_game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[8]);
|
|
_game._player._visible = true;
|
|
_game._player._stepEnabled = true;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (_action.isAction(VERB_WALK_THROUGH, NOUN_ARCHWAY_TO_NORTH)) {
|
|
_game.moveCatacombs(0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_WALK_THROUGH, NOUN_ARCHWAY_TO_WEST)) {
|
|
_game.moveCatacombs(3);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_EXIT_TO, NOUN_MORE_CATACOMBS)) {
|
|
_game.moveCatacombs(2);
|
|
if ((_game._difficulty == DIFFICULTY_HARD) && (_globals[kCatacombsRoom] == 31))
|
|
_globals[kPriestPistonPuke] = true;
|
|
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_WALK_THROUGH, NOUN_ARCHWAY_TO_EAST)) {
|
|
_game.moveCatacombs(1);
|
|
if ((_game._difficulty == DIFFICULTY_EASY) && (_globals[kCatacombsRoom] == 24))
|
|
_globals[kPriestPistonPuke] = true;
|
|
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action._lookFlag) {
|
|
_vm->_dialogs->show(40110);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_LOOK) || _action.isAction(VERB_LOOK_AT)) {
|
|
if (_action.isObject(NOUN_WALL)) {
|
|
_vm->_dialogs->show(40111);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_FLOOR)) {
|
|
_vm->_dialogs->show(40112);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_ARCHWAY)) {
|
|
_vm->_dialogs->show(40113);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_EXPOSED_BRICK)) {
|
|
_vm->_dialogs->show(40114);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_MORE_CATACOMBS)) {
|
|
_vm->_dialogs->show(40115);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_BLOCKED_ARCHWAY)) {
|
|
_vm->_dialogs->show(40116);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_PUDDLE)) {
|
|
_vm->_dialogs->show(40117);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_RATS_NEST)) {
|
|
_vm->_dialogs->show(40118);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_SKULL)) {
|
|
_vm->_dialogs->show(40120);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_RED_FRAME) && !_game._objects.isInInventory(OBJ_RED_FRAME)) {
|
|
_vm->_dialogs->showItem(OBJ_RED_FRAME, 802, 0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_GREEN_FRAME) && !_game._objects.isInInventory(OBJ_GREEN_FRAME)) {
|
|
_vm->_dialogs->showItem(OBJ_GREEN_FRAME, 819, 0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_BLUE_FRAME) && !_game._objects.isInInventory(OBJ_BLUE_FRAME)) {
|
|
_vm->_dialogs->showItem(OBJ_BLUE_FRAME, 817, 0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_YELLOW_FRAME) && !_game._objects.isInInventory(OBJ_YELLOW_FRAME)) {
|
|
_vm->_dialogs->showItem(OBJ_YELLOW_FRAME, 804, 0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
|
|
if (_action.isObject(NOUN_BROKEN_POT)) {
|
|
_vm->_dialogs->show(40122);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (_action.isAction(VERB_TAKE, NOUN_RATS_NEST)) {
|
|
_vm->_dialogs->show(40119);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_TAKE, NOUN_SKULL)) {
|
|
_vm->_dialogs->show(40121);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_TAKE, NOUN_BROKEN_POT)) {
|
|
_vm->_dialogs->show(40123);
|
|
_action._inProgress = false;
|
|
}
|
|
}
|
|
|
|
void Scene401::preActions() {
|
|
_frameInRoomFl = false;
|
|
_takingFrameInRoomFl = false;
|
|
|
|
if (_game._objects[OBJ_RED_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_frameInRoomFl = true;
|
|
if (_action.isAction(VERB_TAKE, NOUN_RED_FRAME))
|
|
_takingFrameInRoomFl = true;
|
|
}
|
|
|
|
if (_game._objects[OBJ_YELLOW_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_frameInRoomFl = true;
|
|
if (_action.isAction(VERB_TAKE, NOUN_YELLOW_FRAME))
|
|
_takingFrameInRoomFl = true;
|
|
}
|
|
|
|
if (_game._objects[OBJ_BLUE_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_frameInRoomFl = true;
|
|
if (_action.isAction(VERB_TAKE, NOUN_BLUE_FRAME))
|
|
_takingFrameInRoomFl = true;
|
|
}
|
|
|
|
if (_game._objects[OBJ_GREEN_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_frameInRoomFl = true;
|
|
if (_action.isAction(VERB_TAKE, NOUN_GREEN_FRAME))
|
|
_takingFrameInRoomFl = true;
|
|
}
|
|
|
|
if (_action.isAction(VERB_PUT) && _action.isTarget(NOUN_FLOOR)
|
|
&& (_action.isObject(NOUN_RED_FRAME) || _action.isObject(NOUN_BLUE_FRAME)
|
|
|| _action.isObject(NOUN_YELLOW_FRAME) || _action.isObject(NOUN_GREEN_FRAME))) {
|
|
if (_frameInRoomFl)
|
|
_game._player._needToWalk = false;
|
|
else {
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[9]]->getFramePos(0);
|
|
_game._player.walk(Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
}
|
|
}
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
Scene403::Scene403(MADSEngine *vm) : Scene4xx(vm) {
|
|
_frameInRoomFl = false;
|
|
_takingFrameInRoomFl = false;
|
|
|
|
_redFrameHotspotId = -1;
|
|
_greenFrameHostpotId = -1;
|
|
_blueFrameHotspotId = -1;
|
|
_yellowFrameHotspotId = -1;
|
|
}
|
|
|
|
void Scene403::synchronize(Common::Serializer &s) {
|
|
Scene4xx::synchronize(s);
|
|
|
|
s.syncAsByte(_frameInRoomFl);
|
|
s.syncAsByte(_takingFrameInRoomFl);
|
|
|
|
s.syncAsSint16LE(_redFrameHotspotId);
|
|
s.syncAsSint16LE(_greenFrameHostpotId);
|
|
s.syncAsSint16LE(_blueFrameHotspotId);
|
|
s.syncAsSint16LE(_yellowFrameHotspotId);
|
|
}
|
|
|
|
void Scene403::setup() {
|
|
setPlayerSpritesPrefix();
|
|
setAAName();
|
|
|
|
if (_globals[kCatacombsMisc] & MAZE_EVENT_HOLE)
|
|
_scene->_variant = 1;
|
|
|
|
if (_globals[kCatacombsMisc] & MAZE_EVENT_PLANK)
|
|
_scene->_variant = 2;
|
|
|
|
_scene->addActiveVocab(NOUN_RED_FRAME);
|
|
_scene->addActiveVocab(NOUN_YELLOW_FRAME);
|
|
_scene->addActiveVocab(NOUN_BLUE_FRAME);
|
|
_scene->addActiveVocab(NOUN_GREEN_FRAME);
|
|
}
|
|
|
|
void Scene403::enter() {
|
|
_game.initCatacombs();
|
|
|
|
_scene->_hotspots.activate(NOUN_HOLE, false);
|
|
_scene->_hotspots.activate(NOUN_WEB, false);
|
|
_scene->_hotspots.activate(NOUN_RATS_NEST, false);
|
|
_scene->_hotspots.activate(NOUN_SKULL, false);
|
|
_scene->_hotspots.activate(NOUN_PLANK, false);
|
|
_scene->_hotspots.activate(NOUN_GATE, false);
|
|
|
|
_globals._spriteIndexes[8] = _scene->_sprites.addSprites("*RRD_9");
|
|
_globals._spriteIndexes[9] = _scene->_sprites.addSprites(formAnimName('f', 0));
|
|
_globals._spriteIndexes[10] = _scene->_sprites.addSprites(formAnimName('f', 1));
|
|
_globals._spriteIndexes[11] = _scene->_sprites.addSprites(formAnimName('f', 2));
|
|
_globals._spriteIndexes[12] = _scene->_sprites.addSprites(formAnimName('f', 3));
|
|
|
|
if (_game.exitCatacombs(0) == -1) {
|
|
_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('c', 1));
|
|
_scene->drawToBackground(_globals._spriteIndexes[1], 1, Common::Point(-32000, -32000), 0, 100);
|
|
_scene->_hotspots.activate(NOUN_ARCHWAY_TO_NORTH, false);
|
|
}
|
|
|
|
if (_game.exitCatacombs(3) == -1) {
|
|
_globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('c', 0));
|
|
_scene->drawToBackground(_globals._spriteIndexes[0], 1, Common::Point(-32000, -32000), 0, 100);
|
|
_scene->_hotspots.activate(NOUN_ARCHWAY_TO_WEST, false);
|
|
}
|
|
|
|
if (_game.exitCatacombs(1) == -1) {
|
|
_scene->_hotspots.activate(NOUN_MORE_CATACOMBS, false);
|
|
_scene->_hotspots.activate(NOUN_GATE, true);
|
|
_globals._spriteIndexes[13] = _scene->_sprites.addSprites(formAnimName('c', 9));
|
|
_scene->drawToBackground(_globals._spriteIndexes[13], 1, Common::Point(-32000, -32000), 0, 100);
|
|
}
|
|
|
|
if (_globals[kCatacombsMisc] & MAZE_EVENT_HOLE) {
|
|
_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('c', 3));
|
|
_scene->drawToBackground(_globals._spriteIndexes[2], 1, Common::Point(-32000, -32000), 0, 100);
|
|
_scene->_hotspots.activate(NOUN_HOLE, true);
|
|
}
|
|
|
|
if (_globals[kCatacombsMisc] & MAZE_EVENT_WEB) {
|
|
_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('c', 4));
|
|
_scene->drawToBackground(_globals._spriteIndexes[3], 1, Common::Point(-32000, -32000), 0, 100);
|
|
_scene->_hotspots.activate(NOUN_WEB, true);
|
|
}
|
|
|
|
if (_globals[kCatacombsMisc] & MAZE_EVENT_BRICK) {
|
|
_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('c', 5));
|
|
_scene->drawToBackground(_globals._spriteIndexes[4], 1, Common::Point(-32000, -32000), 0, 100);
|
|
_scene->_hotspots.activateAtPos(NOUN_EXPOSED_BRICK, false, Common::Point(178, 35));
|
|
}
|
|
|
|
if (_globals[kCatacombsMisc] & MAZE_EVENT_RAT_NEST) {
|
|
_globals._spriteIndexes[5] = _scene->_sprites.addSprites(formAnimName('c', 6));
|
|
_scene->drawToBackground(_globals._spriteIndexes[5], 1, Common::Point(-32000, -32000), 0, 100);
|
|
_scene->_hotspots.activate(NOUN_RATS_NEST, true);
|
|
}
|
|
|
|
if (_globals[kCatacombsMisc] & MAZE_EVENT_SKULL) {
|
|
_globals._spriteIndexes[6] = _scene->_sprites.addSprites(formAnimName('c', 7));
|
|
_scene->drawToBackground(_globals._spriteIndexes[6], 1, Common::Point(-32000, -32000), 0, 100);
|
|
_scene->_hotspots.activate(NOUN_SKULL, true);
|
|
}
|
|
|
|
if (_globals[kCatacombsMisc] & MAZE_EVENT_PLANK) {
|
|
_globals._spriteIndexes[7] = _scene->_sprites.addSprites(formAnimName('c', 8));
|
|
_scene->drawToBackground(_globals._spriteIndexes[7], 1, Common::Point(-32000, -32000), 0, 100);
|
|
_scene->_hotspots.activate(NOUN_PLANK, true);
|
|
}
|
|
|
|
if (_scene->_priorSceneId != RETURNING_FROM_LOADING) {
|
|
switch (_globals[kCatacombsFrom]) {
|
|
case 0:
|
|
_game._player._playerPos = Common::Point(212, 86);
|
|
_game._player._facing = FACING_SOUTH;
|
|
_game._player.walk(Common::Point(212, 100), FACING_SOUTH);
|
|
break;
|
|
|
|
case 1:
|
|
_game._player.firstWalk(Common::Point(330, 126), FACING_EAST, Common::Point(305, 126), FACING_WEST, true);
|
|
break;
|
|
|
|
case 3:
|
|
_game._player._playerPos = Common::Point(3, 128);
|
|
_game._player._facing = FACING_SOUTH;
|
|
_game._player.walk(Common::Point(40, 128), FACING_EAST);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (_game._objects[OBJ_RED_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_globals._sequenceIndexes[9] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[9], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[9]]->getFramePos(0);
|
|
_redFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_RED_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_redFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_game._objects[OBJ_GREEN_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_globals._sequenceIndexes[10] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[10], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[10], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[9]]->getFramePos(0);
|
|
_greenFrameHostpotId = _scene->_dynamicHotspots.add(NOUN_GREEN_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_greenFrameHostpotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_game._objects[OBJ_BLUE_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_globals._sequenceIndexes[11] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[11], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[11], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[9]]->getFramePos(0);
|
|
_blueFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_BLUE_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_blueFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_game._objects[OBJ_YELLOW_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_globals._sequenceIndexes[12] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[12], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[12], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[9]]->getFramePos(0);
|
|
_yellowFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_YELLOW_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_yellowFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if ((_game._difficulty == DIFFICULTY_EASY) && (_globals[kCatacombsRoom] == 19))
|
|
_scene->_sequences.addTimer(120, 60);
|
|
|
|
sceneEntrySound();
|
|
}
|
|
|
|
void Scene403::step() {
|
|
if (_game._trigger == 60)
|
|
_vm->_dialogs->show(31);
|
|
}
|
|
|
|
void Scene403::actions() {
|
|
if (_action.isAction(VERB_PUT) && _action.isTarget(NOUN_FLOOR)
|
|
&& (_action.isObject(NOUN_RED_FRAME) || _action.isObject(NOUN_BLUE_FRAME) || _action.isObject(NOUN_YELLOW_FRAME) || _action.isObject(NOUN_GREEN_FRAME))) {
|
|
if (_frameInRoomFl)
|
|
_vm->_dialogs->show(29);
|
|
else {
|
|
switch (_game._trigger) {
|
|
case (0):
|
|
_game._player._stepEnabled = false;
|
|
_game._player._visible = false;
|
|
_globals._sequenceIndexes[8] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[8], true, 5, 2);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[8], 1, 5);
|
|
_scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[8], true);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_SPRITE, 5, 1);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
|
|
break;
|
|
|
|
case 1:
|
|
if (_action.isObject(NOUN_RED_FRAME)) {
|
|
_game._objects.setRoom(OBJ_RED_FRAME, NOWHERE);
|
|
_game._objects[OBJ_RED_FRAME]._roomNumber = _globals[kCatacombsRoom] + 600;
|
|
_globals._sequenceIndexes[9] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[9], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[9]]->getFramePos(0);
|
|
_redFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_RED_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_redFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_GREEN_FRAME)) {
|
|
_game._objects.setRoom(OBJ_GREEN_FRAME, NOWHERE);
|
|
_game._objects[OBJ_GREEN_FRAME]._roomNumber = _globals[kCatacombsRoom] + 600;
|
|
_globals._sequenceIndexes[10] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[10], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[10], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[9]]->getFramePos(0);
|
|
_greenFrameHostpotId = _scene->_dynamicHotspots.add(NOUN_GREEN_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_greenFrameHostpotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_BLUE_FRAME)) {
|
|
_game._objects.setRoom(OBJ_BLUE_FRAME, NOWHERE);
|
|
_game._objects[OBJ_BLUE_FRAME]._roomNumber = _globals[kCatacombsRoom] + 600;
|
|
_globals._sequenceIndexes[11] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[11], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[11], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[9]]->getFramePos(0);
|
|
_blueFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_BLUE_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_blueFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_YELLOW_FRAME)) {
|
|
_game._objects.setRoom(OBJ_YELLOW_FRAME, NOWHERE);
|
|
_game._objects[OBJ_YELLOW_FRAME]._roomNumber = _globals[kCatacombsRoom] + 600;
|
|
_globals._sequenceIndexes[12] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[12], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[12], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[9]]->getFramePos(0);
|
|
_yellowFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_YELLOW_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_yellowFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
_game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[8]);
|
|
_game._player._visible = true;
|
|
_game._player._stepEnabled = true;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_TAKE)
|
|
&& (_action.isObject(NOUN_RED_FRAME) || _action.isObject(NOUN_GREEN_FRAME) || _action.isObject(NOUN_BLUE_FRAME) || _action.isObject(NOUN_YELLOW_FRAME))) {
|
|
if ((_takingFrameInRoomFl || _game._trigger)) {
|
|
switch (_game._trigger) {
|
|
case (0):
|
|
_game._player._stepEnabled = false;
|
|
_game._player._visible = false;
|
|
_globals._sequenceIndexes[8] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[8], true, 5, 2);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[8], 1, 5);
|
|
_scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[8], true);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_SPRITE, 5, 1);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
|
|
break;
|
|
|
|
case 1:
|
|
if (_action.isObject(NOUN_RED_FRAME)) {
|
|
_scene->deleteSequence(_globals._sequenceIndexes[9]);
|
|
_scene->_dynamicHotspots.remove(_redFrameHotspotId);
|
|
_game._objects.addToInventory(OBJ_RED_FRAME);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_GREEN_FRAME)) {
|
|
_scene->deleteSequence(_globals._sequenceIndexes[10]);
|
|
_scene->_dynamicHotspots.remove(_greenFrameHostpotId);
|
|
_game._objects.addToInventory(OBJ_GREEN_FRAME);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_BLUE_FRAME)) {
|
|
_scene->deleteSequence(_globals._sequenceIndexes[11]);
|
|
_scene->_dynamicHotspots.remove(_blueFrameHotspotId);
|
|
_game._objects.addToInventory(OBJ_BLUE_FRAME);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_YELLOW_FRAME)) {
|
|
_scene->deleteSequence(_globals._sequenceIndexes[12]);
|
|
_scene->_dynamicHotspots.remove(_yellowFrameHotspotId);
|
|
_game._objects.addToInventory(OBJ_YELLOW_FRAME);
|
|
}
|
|
|
|
_vm->_sound->command(26);
|
|
break;
|
|
|
|
case 2:
|
|
_game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[8]);
|
|
_game._player._visible = true;
|
|
_game._player._stepEnabled = true;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (_action.isAction(VERB_WALK_THROUGH, NOUN_ARCHWAY_TO_NORTH)) {
|
|
_game.moveCatacombs(0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_WALK_THROUGH, NOUN_ARCHWAY_TO_WEST)) {
|
|
_game.moveCatacombs(3);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action._lookFlag) {
|
|
_vm->_dialogs->show(40310);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_LOOK) || _action.isAction(VERB_LOOK_AT)) {
|
|
if (_action.isObject(NOUN_WALL)) {
|
|
_vm->_dialogs->show(40311);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_FLOOR)) {
|
|
_vm->_dialogs->show(40312);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_ARCHWAY)) {
|
|
_vm->_dialogs->show(40313);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_EXPOSED_BRICK)) {
|
|
_vm->_dialogs->show(40314);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_MORE_CATACOMBS)) {
|
|
_vm->_dialogs->show(40315);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_BLOCKED_ARCHWAY)) {
|
|
_vm->_dialogs->show(40316);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_RATS_NEST)) {
|
|
_vm->_dialogs->show(40318);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_SKULL)) {
|
|
_vm->_dialogs->show(40320);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_HOLE)) {
|
|
_vm->_dialogs->show(40323);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_WEB)) {
|
|
_vm->_dialogs->show(40324);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_RED_FRAME) && !_game._objects.isInInventory(OBJ_RED_FRAME)) {
|
|
_vm->_dialogs->showItem(OBJ_RED_FRAME, 802, 0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_GREEN_FRAME) && !_game._objects.isInInventory(OBJ_GREEN_FRAME)) {
|
|
_vm->_dialogs->showItem(OBJ_GREEN_FRAME, 819, 0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_BLUE_FRAME) && !_game._objects.isInInventory(OBJ_BLUE_FRAME)) {
|
|
_vm->_dialogs->showItem(OBJ_BLUE_FRAME, 817, 0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_YELLOW_FRAME) && !_game._objects.isInInventory(OBJ_YELLOW_FRAME)) {
|
|
_vm->_dialogs->showItem(OBJ_YELLOW_FRAME, 804, 0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_GATE)) {
|
|
_vm->_dialogs->show(45330);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_PLANK)) {
|
|
_vm->_dialogs->show(40325);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (_action.isAction(VERB_OPEN, NOUN_GATE)) {
|
|
_vm->_dialogs->show(45331);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_TAKE, NOUN_RATS_NEST)) {
|
|
_vm->_dialogs->show(40319);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_TAKE, NOUN_SKULL)) {
|
|
_vm->_dialogs->show(40321);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_TAKE, NOUN_PLANK)) {
|
|
_vm->_dialogs->show(40326);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
}
|
|
|
|
void Scene403::preActions() {
|
|
if (_action.isAction(VERB_EXIT_TO, NOUN_MORE_CATACOMBS))
|
|
_game.moveCatacombs(1);
|
|
|
|
_frameInRoomFl = false;
|
|
_takingFrameInRoomFl = false;
|
|
|
|
if (_game._objects[OBJ_RED_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_frameInRoomFl = true;
|
|
if (_action.isAction(VERB_TAKE, NOUN_RED_FRAME))
|
|
_takingFrameInRoomFl = true;
|
|
}
|
|
|
|
if (_game._objects[OBJ_YELLOW_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_frameInRoomFl = true;
|
|
if (_action.isAction(VERB_TAKE, NOUN_YELLOW_FRAME))
|
|
_takingFrameInRoomFl = true;
|
|
}
|
|
|
|
if (_game._objects[OBJ_BLUE_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_frameInRoomFl = true;
|
|
if (_action.isAction(VERB_TAKE, NOUN_BLUE_FRAME))
|
|
_takingFrameInRoomFl = true;
|
|
}
|
|
|
|
if (_game._objects[OBJ_GREEN_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_frameInRoomFl = true;
|
|
if (_action.isAction(VERB_TAKE, NOUN_GREEN_FRAME))
|
|
_takingFrameInRoomFl = true;
|
|
}
|
|
|
|
if (_action.isAction(VERB_PUT) && _action.isTarget(NOUN_FLOOR)
|
|
&& (_action.isObject(NOUN_RED_FRAME) || _action.isObject(NOUN_BLUE_FRAME) || _action.isObject(NOUN_YELLOW_FRAME) || _action.isObject(NOUN_GREEN_FRAME))) {
|
|
if (_frameInRoomFl)
|
|
_game._player._needToWalk = false;
|
|
else {
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[9]]->getFramePos(0);
|
|
_game._player.walk(Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
}
|
|
}
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
Scene404::Scene404(MADSEngine *vm) : Scene4xx(vm) {
|
|
_frameInRoomFl = false;
|
|
_takingFrameInRoomFl = false;
|
|
_anim0ActvFl = false;
|
|
|
|
_redFrameHotspotId = -1;
|
|
_greenFrameHostpotId = -1;
|
|
_blueFrameHotspotId = -1;
|
|
_yellowFrameHotspotId = -1;
|
|
}
|
|
|
|
void Scene404::synchronize(Common::Serializer &s) {
|
|
Scene4xx::synchronize(s);
|
|
|
|
s.syncAsByte(_frameInRoomFl);
|
|
s.syncAsByte(_takingFrameInRoomFl);
|
|
s.syncAsByte(_anim0ActvFl);
|
|
|
|
s.syncAsSint16LE(_redFrameHotspotId);
|
|
s.syncAsSint16LE(_greenFrameHostpotId);
|
|
s.syncAsSint16LE(_blueFrameHotspotId);
|
|
s.syncAsSint16LE(_yellowFrameHotspotId);
|
|
}
|
|
|
|
void Scene404::setup() {
|
|
setPlayerSpritesPrefix();
|
|
setAAName();
|
|
|
|
if (_globals[kCatacombsMisc] & MAZE_EVENT_BLOCK)
|
|
_scene->_variant = 1;
|
|
|
|
_scene->addActiveVocab(NOUN_RED_FRAME);
|
|
_scene->addActiveVocab(NOUN_YELLOW_FRAME);
|
|
_scene->addActiveVocab(NOUN_BLUE_FRAME);
|
|
_scene->addActiveVocab(NOUN_GREEN_FRAME);
|
|
}
|
|
|
|
void Scene404::enter() {
|
|
_game.initCatacombs();
|
|
|
|
_scene->_hotspots.activate(NOUN_RATS_NEST, false);
|
|
_scene->_hotspots.activate(NOUN_WEB, false);
|
|
_scene->_hotspots.activate(NOUN_BROKEN_POT, false);
|
|
_scene->_hotspots.activate(NOUN_BLOCK, false);
|
|
_scene->_hotspots.activate(NOUN_PUDDLE, false);
|
|
|
|
_anim0ActvFl = false;
|
|
|
|
_globals._spriteIndexes[9] = _scene->_sprites.addSprites("*RRD_9");
|
|
_globals._spriteIndexes[10] = _scene->_sprites.addSprites(formAnimName('f', 0));
|
|
_globals._spriteIndexes[11] = _scene->_sprites.addSprites(formAnimName('f', 1));
|
|
_globals._spriteIndexes[12] = _scene->_sprites.addSprites(formAnimName('f', 2));
|
|
_globals._spriteIndexes[13] = _scene->_sprites.addSprites(formAnimName('f', 3));
|
|
|
|
|
|
if (_game.exitCatacombs(0) == -1) {
|
|
_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('c', 1));
|
|
_scene->drawToBackground(_globals._spriteIndexes[1], 1, Common::Point(-32000, -32000), 0, 100);
|
|
_scene->_hotspots.activate(NOUN_ARCHWAY_TO_NORTH, false);
|
|
}
|
|
|
|
if (_game.exitCatacombs(3) == -1) {
|
|
_globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('c', 0));
|
|
_scene->drawToBackground(_globals._spriteIndexes[0], 1, Common::Point(-32000, -32000), 0, 100);
|
|
_scene->_hotspots.activate(NOUN_ARCHWAY_TO_WEST, false);
|
|
}
|
|
|
|
if (_game.exitCatacombs(1) == -1) {
|
|
_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('c', 2));
|
|
_scene->drawToBackground(_globals._spriteIndexes[2], 1, Common::Point(-32000, -32000), 0, 100);
|
|
_scene->_hotspots.activate(NOUN_ARCHWAY_TO_EAST, false);
|
|
}
|
|
|
|
if (_game.exitCatacombs(2) == -1)
|
|
_scene->_hotspots.activate(NOUN_MORE_CATACOMBS, false);
|
|
|
|
if (_globals[kCatacombsMisc] & MAZE_EVENT_RAT_NEST) {
|
|
_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('c', 3));
|
|
_scene->drawToBackground(_globals._spriteIndexes[3], 1, Common::Point(-32000, -32000), 0, 100);
|
|
_scene->_hotspots.activate(NOUN_RATS_NEST, true);
|
|
}
|
|
|
|
if (_globals[kCatacombsMisc] & MAZE_EVENT_WEB) {
|
|
_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('c', 4));
|
|
_scene->drawToBackground(_globals._spriteIndexes[4], 1, Common::Point(-32000, -32000), 0, 100);
|
|
_scene->_hotspots.activate(NOUN_WEB, true);
|
|
}
|
|
|
|
if (_globals[kCatacombsMisc] & MAZE_EVENT_POT) {
|
|
_globals._spriteIndexes[5] = _scene->_sprites.addSprites(formAnimName('c', 5));
|
|
_scene->drawToBackground(_globals._spriteIndexes[5], 1, Common::Point(-32000, -32000), 0, 100);
|
|
_scene->_hotspots.activate(NOUN_BROKEN_POT, true);
|
|
}
|
|
|
|
if (_globals[kCatacombsMisc] & MAZE_EVENT_BLOCK) {
|
|
_globals._spriteIndexes[7] = _scene->_sprites.addSprites(formAnimName('c', 7));
|
|
_scene->drawToBackground(_globals._spriteIndexes[7], 1, Common::Point(-32000, -32000), 0, 100);
|
|
}
|
|
|
|
if (_globals[kCatacombsMisc] & MAZE_EVENT_FALLEN_BLOCK) {
|
|
_globals._spriteIndexes[8] = _scene->_sprites.addSprites(formAnimName('c', 8));
|
|
_scene->drawToBackground(_globals._spriteIndexes[8], 1, Common::Point(-32000, -32000), 0, 100);
|
|
_scene->_hotspots.activate(NOUN_BLOCK, true);
|
|
}
|
|
|
|
if (_globals[kCatacombsMisc] & MAZE_EVENT_PUDDLE) {
|
|
_scene->_hotspots.activate(NOUN_PUDDLE, true);
|
|
_globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('d', 1), 0);
|
|
_anim0ActvFl = true;
|
|
}
|
|
|
|
if (_scene->_priorSceneId != RETURNING_FROM_LOADING) {
|
|
switch (_globals[kCatacombsFrom]) {
|
|
case 0:
|
|
_game._player._playerPos = Common::Point(156, 98);
|
|
_game._player._facing = FACING_SOUTH;
|
|
_game._player.walk(Common::Point(156, 117), FACING_SOUTH);
|
|
break;
|
|
|
|
case 1:
|
|
_game._player._playerPos = Common::Point(319, 135);
|
|
_game._player._facing = FACING_WEST;
|
|
_game._player.walk(Common::Point(279, 135), FACING_WEST);
|
|
break;
|
|
|
|
case 2:
|
|
_game._player._playerPos = Common::Point(175, 147);
|
|
_game._player._facing = FACING_NORTH;
|
|
break;
|
|
|
|
case 3:
|
|
_game._player._playerPos = Common::Point(17, 131);
|
|
_game._player._facing = FACING_SOUTH;
|
|
_game._player.walk(Common::Point(60, 131), FACING_EAST);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (_game._objects[OBJ_RED_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_globals._sequenceIndexes[10] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[10], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[10], 14);
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[10]]->getFramePos(0);
|
|
_redFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_RED_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_redFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_game._objects[OBJ_GREEN_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_globals._sequenceIndexes[11] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[11], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[11], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[10]]->getFramePos(0);
|
|
_greenFrameHostpotId = _scene->_dynamicHotspots.add(NOUN_GREEN_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_greenFrameHostpotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_game._objects[OBJ_BLUE_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_globals._sequenceIndexes[12] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[12], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[12], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[10]]->getFramePos(0);
|
|
_blueFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_BLUE_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_blueFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_game._objects[OBJ_YELLOW_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_globals._sequenceIndexes[13] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[13], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[13], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[10]]->getFramePos(0);
|
|
_yellowFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_YELLOW_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_yellowFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_globals[kPriestPistonPuke])
|
|
_scene->_sequences.addTimer(120, 60);
|
|
|
|
sceneEntrySound();
|
|
}
|
|
|
|
void Scene404::step() {
|
|
if (_anim0ActvFl) {
|
|
if (_scene->_animation[_globals._animationIndexes[0]]->getCurrentFrame() == 20)
|
|
_scene->setAnimFrame(_globals._animationIndexes[0], 0);
|
|
}
|
|
|
|
if (_game._trigger == 60) {
|
|
_vm->_dialogs->show(30);
|
|
_globals[kPriestPistonPuke] = false;
|
|
}
|
|
}
|
|
|
|
void Scene404::actions() {
|
|
if (_action.isAction(VERB_PUT) && _action.isTarget(NOUN_FLOOR)
|
|
&& (_action.isObject(NOUN_RED_FRAME) || _action.isObject(NOUN_BLUE_FRAME) || _action.isObject(NOUN_YELLOW_FRAME) || _action.isObject(NOUN_GREEN_FRAME))) {
|
|
if (_frameInRoomFl)
|
|
_vm->_dialogs->show(29);
|
|
else {
|
|
switch (_game._trigger) {
|
|
case (0):
|
|
_game._player._stepEnabled = false;
|
|
_game._player._visible = false;
|
|
_globals._sequenceIndexes[9] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[9], true, 5, 2);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[9], 1, 5);
|
|
_scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[9], true);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[9], SEQUENCE_TRIGGER_SPRITE, 5, 1);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[9], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
|
|
break;
|
|
|
|
case 1:
|
|
if (_action.isObject(NOUN_RED_FRAME)) {
|
|
_game._objects.setRoom(OBJ_RED_FRAME, NOWHERE);
|
|
_game._objects[OBJ_RED_FRAME]._roomNumber = _globals[kCatacombsRoom] + 600;
|
|
_globals._sequenceIndexes[10] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[10], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[10], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[10]]->getFramePos(0);
|
|
_redFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_RED_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_redFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_GREEN_FRAME)) {
|
|
_game._objects.setRoom(OBJ_GREEN_FRAME, NOWHERE);
|
|
_game._objects[OBJ_GREEN_FRAME]._roomNumber = _globals[kCatacombsRoom] + 600;
|
|
_globals._sequenceIndexes[11] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[11], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[11], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[10]]->getFramePos(0);
|
|
_greenFrameHostpotId = _scene->_dynamicHotspots.add(NOUN_GREEN_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_greenFrameHostpotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_BLUE_FRAME)) {
|
|
_game._objects.setRoom(OBJ_BLUE_FRAME, NOWHERE);
|
|
_game._objects[OBJ_BLUE_FRAME]._roomNumber = _globals[kCatacombsRoom] + 600;
|
|
_globals._sequenceIndexes[12] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[12], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[12], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[10]]->getFramePos(0);
|
|
_blueFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_BLUE_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_blueFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_YELLOW_FRAME)) {
|
|
_game._objects.setRoom(OBJ_YELLOW_FRAME, NOWHERE);
|
|
_game._objects[OBJ_YELLOW_FRAME]._roomNumber = _globals[kCatacombsRoom] + 600;
|
|
_globals._sequenceIndexes[13] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[13], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[13], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[10]]->getFramePos(0);
|
|
_yellowFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_YELLOW_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_yellowFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
_game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[9]);
|
|
_game._player._visible = true;
|
|
_game._player._stepEnabled = true;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_TAKE)) {
|
|
if ((_action.isObject(NOUN_RED_FRAME) || _action.isObject(NOUN_GREEN_FRAME) || _action.isObject(NOUN_BLUE_FRAME) || _action.isObject(NOUN_YELLOW_FRAME)) && (_takingFrameInRoomFl || _game._trigger)) {
|
|
switch (_game._trigger) {
|
|
case (0):
|
|
_game._player._stepEnabled = false;
|
|
_game._player._visible = false;
|
|
_globals._sequenceIndexes[9] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[9], true, 5, 2);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[9], 1, 5);
|
|
_scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[9], true);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[9], SEQUENCE_TRIGGER_SPRITE, 5, 1);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[9], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
|
|
break;
|
|
|
|
case 1:
|
|
if (_action.isObject(NOUN_RED_FRAME)) {
|
|
_scene->deleteSequence(_globals._sequenceIndexes[10]);
|
|
_scene->_dynamicHotspots.remove(_redFrameHotspotId);
|
|
_game._objects.addToInventory(OBJ_RED_FRAME);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_GREEN_FRAME)) {
|
|
_scene->deleteSequence(_globals._sequenceIndexes[11]);
|
|
_scene->_dynamicHotspots.remove(_greenFrameHostpotId);
|
|
_game._objects.addToInventory(OBJ_GREEN_FRAME);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_BLUE_FRAME)) {
|
|
_scene->deleteSequence(_globals._sequenceIndexes[12]);
|
|
_scene->_dynamicHotspots.remove(_blueFrameHotspotId);
|
|
_game._objects.addToInventory(OBJ_BLUE_FRAME);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_YELLOW_FRAME)) {
|
|
_scene->deleteSequence(_globals._sequenceIndexes[13]);
|
|
_scene->_dynamicHotspots.remove(_yellowFrameHotspotId);
|
|
_game._objects.addToInventory(OBJ_YELLOW_FRAME);
|
|
}
|
|
|
|
_vm->_sound->command(26);
|
|
break;
|
|
|
|
case 2:
|
|
_game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[9]);
|
|
_game._player._visible = true;
|
|
_game._player._stepEnabled = true;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (_action.isAction(VERB_WALK_THROUGH, NOUN_ARCHWAY_TO_NORTH)) {
|
|
_game.moveCatacombs(0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_WALK_THROUGH, NOUN_ARCHWAY_TO_WEST)) {
|
|
_game.moveCatacombs(3);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_EXIT_TO, NOUN_MORE_CATACOMBS)) {
|
|
_game.moveCatacombs(2);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_WALK_THROUGH, NOUN_ARCHWAY_TO_EAST)) {
|
|
_game.moveCatacombs(1);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action._lookFlag) {
|
|
_vm->_dialogs->show(40410);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_LOOK) || _action.isAction(VERB_LOOK_AT)) {
|
|
if (_action.isObject(NOUN_WALL)) {
|
|
_vm->_dialogs->show(40411);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_FLOOR)) {
|
|
_vm->_dialogs->show(40412);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_ARCHWAY)) {
|
|
_vm->_dialogs->show(40413);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_EXPOSED_BRICK)) {
|
|
_vm->_dialogs->show(40414);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_MORE_CATACOMBS)) {
|
|
_vm->_dialogs->show(40415);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_PUDDLE)) {
|
|
_vm->_dialogs->show(40417);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_RATS_NEST)) {
|
|
_vm->_dialogs->show(40418);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_BROKEN_POT)) {
|
|
_vm->_dialogs->show(40421);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_WEB)) {
|
|
_vm->_dialogs->show(40424);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_RED_FRAME) && !_game._objects.isInInventory(OBJ_RED_FRAME)) {
|
|
_vm->_dialogs->showItem(OBJ_RED_FRAME, 802, 0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_GREEN_FRAME) && !_game._objects.isInInventory(OBJ_GREEN_FRAME)) {
|
|
_vm->_dialogs->showItem(OBJ_GREEN_FRAME, 819, 0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_BLUE_FRAME) && !_game._objects.isInInventory(OBJ_BLUE_FRAME)) {
|
|
_vm->_dialogs->showItem(OBJ_BLUE_FRAME, 817, 0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_YELLOW_FRAME) && !_game._objects.isInInventory(OBJ_YELLOW_FRAME)) {
|
|
_vm->_dialogs->showItem(OBJ_YELLOW_FRAME, 804, 0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_BLOCK)) {
|
|
_vm->_dialogs->show(40430);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (_action.isAction(VERB_TAKE, NOUN_RATS_NEST)) {
|
|
_vm->_dialogs->show(40419);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_TAKE, NOUN_BROKEN_POT)) {
|
|
_vm->_dialogs->show(40422);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_TAKE, NOUN_BLOCK)) {
|
|
_vm->_dialogs->show(40431);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
}
|
|
|
|
void Scene404::preActions() {
|
|
_frameInRoomFl = false;
|
|
_takingFrameInRoomFl = false;
|
|
|
|
if (_game._objects[OBJ_RED_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_frameInRoomFl = true;
|
|
if (_action.isAction(VERB_TAKE, NOUN_RED_FRAME))
|
|
_takingFrameInRoomFl = true;
|
|
}
|
|
|
|
if (_game._objects[OBJ_YELLOW_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_frameInRoomFl = true;
|
|
if (_action.isAction(VERB_TAKE, NOUN_YELLOW_FRAME))
|
|
_takingFrameInRoomFl = true;
|
|
}
|
|
|
|
if (_game._objects[OBJ_BLUE_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_frameInRoomFl = true;
|
|
if (_action.isAction(VERB_TAKE, NOUN_BLUE_FRAME))
|
|
_takingFrameInRoomFl = true;
|
|
}
|
|
|
|
if (_game._objects[OBJ_GREEN_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_frameInRoomFl = true;
|
|
if (_action.isAction(VERB_TAKE, NOUN_GREEN_FRAME))
|
|
_takingFrameInRoomFl = true;
|
|
}
|
|
|
|
if (_action.isAction(VERB_PUT) && _action.isTarget(NOUN_FLOOR)
|
|
&& (_action.isObject(NOUN_RED_FRAME) || _action.isObject(NOUN_BLUE_FRAME) || _action.isObject(NOUN_YELLOW_FRAME) || _action.isObject(NOUN_GREEN_FRAME))) {
|
|
if (_frameInRoomFl)
|
|
_game._player._needToWalk = false;
|
|
else {
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[10]]->getFramePos(0);
|
|
_game._player.walk(Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
}
|
|
}
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
Scene406::Scene406(MADSEngine *vm) : Scene4xx(vm) {
|
|
_frameInRoomFl = false;
|
|
_takingFrameInRoomFl = false;
|
|
|
|
_redFrameHotspotId = -1;
|
|
_greenFrameHostpotId = -1;
|
|
_blueFrameHotspotId = -1;
|
|
_yellowFrameHotspotId = -1;
|
|
}
|
|
|
|
void Scene406::synchronize(Common::Serializer &s) {
|
|
Scene4xx::synchronize(s);
|
|
|
|
s.syncAsByte(_frameInRoomFl);
|
|
s.syncAsByte(_takingFrameInRoomFl);
|
|
|
|
s.syncAsSint16LE(_redFrameHotspotId);
|
|
s.syncAsSint16LE(_greenFrameHostpotId);
|
|
s.syncAsSint16LE(_blueFrameHotspotId);
|
|
s.syncAsSint16LE(_yellowFrameHotspotId);
|
|
}
|
|
|
|
void Scene406::setup() {
|
|
setPlayerSpritesPrefix();
|
|
setAAName();
|
|
|
|
_scene->addActiveVocab(NOUN_RED_FRAME);
|
|
_scene->addActiveVocab(NOUN_YELLOW_FRAME);
|
|
_scene->addActiveVocab(NOUN_BLUE_FRAME);
|
|
_scene->addActiveVocab(NOUN_GREEN_FRAME);
|
|
}
|
|
|
|
void Scene406::enter() {
|
|
_game.initCatacombs();
|
|
|
|
_globals._spriteIndexes[0] = _scene->_sprites.addSprites("*RRD_9");
|
|
_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('f', 0));
|
|
_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('f', 1));
|
|
_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('f', 2));
|
|
_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('f', 3));
|
|
|
|
if (_scene->_priorSceneId != RETURNING_FROM_LOADING) {
|
|
switch (_globals[kCatacombsFrom]) {
|
|
case 1:
|
|
_game._player._playerPos = Common::Point(310, 118);
|
|
_game._player._facing = FACING_WEST;
|
|
_game._player.walk(Common::Point(271, 118), FACING_WEST);
|
|
break;
|
|
|
|
case 3:
|
|
_game._player._playerPos = Common::Point(20, 122);
|
|
_game._player._facing = FACING_SOUTH;
|
|
_game._player.walk(Common::Point(66, 122), FACING_EAST);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (_game._objects[OBJ_RED_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_globals._sequenceIndexes[1] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[1], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[1]]->getFramePos(0);
|
|
_redFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_RED_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_redFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_game._objects[OBJ_GREEN_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[1]]->getFramePos(0);
|
|
_greenFrameHostpotId = _scene->_dynamicHotspots.add(NOUN_GREEN_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_greenFrameHostpotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_game._objects[OBJ_BLUE_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[3], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[1]]->getFramePos(0);
|
|
_blueFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_BLUE_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_blueFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_game._objects[OBJ_YELLOW_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_globals._sequenceIndexes[4] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[4], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[1]]->getFramePos(0);
|
|
_yellowFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_YELLOW_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_yellowFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
sceneEntrySound();
|
|
}
|
|
|
|
void Scene406::step() {
|
|
}
|
|
|
|
void Scene406::actions() {
|
|
if (_action.isAction(VERB_PUT) && _action.isTarget(NOUN_FLOOR)
|
|
&& (_action.isObject(NOUN_RED_FRAME) || _action.isObject(NOUN_BLUE_FRAME) || _action.isObject(NOUN_YELLOW_FRAME) || _action.isObject(NOUN_GREEN_FRAME))) {
|
|
if (_frameInRoomFl)
|
|
_vm->_dialogs->show(29);
|
|
else {
|
|
switch (_game._trigger) {
|
|
case (0):
|
|
_game._player._stepEnabled = false;
|
|
_game._player._visible = false;
|
|
_globals._sequenceIndexes[0] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[0], true, 5, 2);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[0], 1, 5);
|
|
_scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[0], true);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_SPRITE, 5, 1);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
|
|
break;
|
|
|
|
case 1:
|
|
if (_action.isObject(NOUN_RED_FRAME)) {
|
|
_game._objects.setRoom(OBJ_RED_FRAME, NOWHERE);
|
|
_game._objects[OBJ_RED_FRAME]._roomNumber = _globals[kCatacombsRoom] + 600;
|
|
_globals._sequenceIndexes[1] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[1], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[1]]->getFramePos(0);
|
|
_redFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_RED_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_redFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_GREEN_FRAME)) {
|
|
_game._objects.setRoom(OBJ_GREEN_FRAME, NOWHERE);
|
|
_game._objects[OBJ_GREEN_FRAME]._roomNumber = _globals[kCatacombsRoom] + 600;
|
|
_globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[1]]->getFramePos(0);
|
|
_greenFrameHostpotId = _scene->_dynamicHotspots.add(NOUN_GREEN_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_greenFrameHostpotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_BLUE_FRAME)) {
|
|
_game._objects.setRoom(OBJ_BLUE_FRAME, NOWHERE);
|
|
_game._objects[OBJ_BLUE_FRAME]._roomNumber = _globals[kCatacombsRoom] + 600;
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[3], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[1]]->getFramePos(0);
|
|
_blueFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_BLUE_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_blueFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_YELLOW_FRAME)) {
|
|
_game._objects.setRoom(OBJ_YELLOW_FRAME, NOWHERE);
|
|
_game._objects[OBJ_YELLOW_FRAME]._roomNumber = _globals[kCatacombsRoom] + 600;
|
|
_globals._sequenceIndexes[4] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[4], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[1]]->getFramePos(0);
|
|
_yellowFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_YELLOW_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_yellowFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
_game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[0]);
|
|
_game._player._visible = true;
|
|
_game._player._stepEnabled = true;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_TAKE)
|
|
&& (_action.isObject(NOUN_RED_FRAME) || _action.isObject(NOUN_GREEN_FRAME) || _action.isObject(NOUN_BLUE_FRAME) || _action.isObject(NOUN_YELLOW_FRAME))) {
|
|
if ((_takingFrameInRoomFl || _game._trigger)) {
|
|
switch (_game._trigger) {
|
|
case (0):
|
|
_game._player._stepEnabled = false;
|
|
_game._player._visible = false;
|
|
_globals._sequenceIndexes[0] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[0], true, 5, 2);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[0], 1, 5);
|
|
_scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[0], true);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_SPRITE, 5, 1);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
|
|
break;
|
|
|
|
case 1:
|
|
if (_action.isObject(NOUN_RED_FRAME)) {
|
|
_scene->deleteSequence(_globals._sequenceIndexes[1]);
|
|
_scene->_dynamicHotspots.remove(_redFrameHotspotId);
|
|
_game._objects.addToInventory(OBJ_RED_FRAME);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_GREEN_FRAME)) {
|
|
_scene->deleteSequence(_globals._sequenceIndexes[2]);
|
|
_scene->_dynamicHotspots.remove(_greenFrameHostpotId);
|
|
_game._objects.addToInventory(OBJ_GREEN_FRAME);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_BLUE_FRAME)) {
|
|
_scene->deleteSequence(_globals._sequenceIndexes[3]);
|
|
_scene->_dynamicHotspots.remove(_blueFrameHotspotId);
|
|
_game._objects.addToInventory(OBJ_BLUE_FRAME);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_YELLOW_FRAME)) {
|
|
_scene->deleteSequence(_globals._sequenceIndexes[4]);
|
|
_scene->_dynamicHotspots.remove(_yellowFrameHotspotId);
|
|
_game._objects.addToInventory(OBJ_YELLOW_FRAME);
|
|
}
|
|
|
|
_vm->_sound->command(26);
|
|
break;
|
|
|
|
case 2:
|
|
_game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[0]);
|
|
_game._player._visible = true;
|
|
_game._player._stepEnabled = true;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (_action.isAction(VERB_WALK_THROUGH, NOUN_ARCHWAY_TO_WEST)) {
|
|
_game.moveCatacombs(3);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_WALK_THROUGH, NOUN_ARCHWAY_TO_EAST)) {
|
|
_game.moveCatacombs(1);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action._lookFlag) {
|
|
_vm->_dialogs->show(40610);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_LOOK) || _action.isAction(VERB_LOOK_AT)) {
|
|
if (_action.isObject(NOUN_WALL)) {
|
|
_vm->_dialogs->show(40611);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_FLOOR)) {
|
|
_vm->_dialogs->show(40612);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_ARCHWAY)) {
|
|
_vm->_dialogs->show(40613);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_EXPOSED_BRICK)) {
|
|
_vm->_dialogs->show(40614);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_MORE_CATACOMBS)) {
|
|
_vm->_dialogs->show(40615);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_BLOCKED_ARCHWAY)) {
|
|
_vm->_dialogs->show(40616);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_RED_FRAME) && !_game._objects.isInInventory(OBJ_RED_FRAME)) {
|
|
_vm->_dialogs->showItem(OBJ_RED_FRAME, 802, 0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_GREEN_FRAME) && !_game._objects.isInInventory(OBJ_GREEN_FRAME)) {
|
|
_vm->_dialogs->showItem(OBJ_GREEN_FRAME, 819, 0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_BLUE_FRAME) && !_game._objects.isInInventory(OBJ_BLUE_FRAME)) {
|
|
_vm->_dialogs->showItem(OBJ_BLUE_FRAME, 817, 0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_YELLOW_FRAME) && !_game._objects.isInInventory(OBJ_YELLOW_FRAME)) {
|
|
_vm->_dialogs->showItem(OBJ_YELLOW_FRAME, 804, 0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_GRATE)) {
|
|
_vm->_dialogs->show(40617);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (_action.isAction(VERB_OPEN, NOUN_GRATE) || _action.isAction(VERB_PUSH, NOUN_GRATE) || _action.isAction(VERB_PULL, NOUN_GRATE)) {
|
|
switch (_game._trigger) {
|
|
case (0):
|
|
_game._player._stepEnabled = false;
|
|
_game._player._visible = false;
|
|
_globals._sequenceIndexes[0] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[0], true, 5, 1);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[0], -1, -2);
|
|
_scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[0], true);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
|
|
break;
|
|
|
|
case 2:
|
|
_globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], true, -2);
|
|
_scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[0], true);
|
|
_scene->_sequences.addTimer(30, 3);
|
|
break;
|
|
|
|
case 3:
|
|
_scene->deleteSequence(_globals._sequenceIndexes[0]);
|
|
_globals._sequenceIndexes[0] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[0], true, 5, 1);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[0], -1, -2);
|
|
_scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[0], false);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_EXPIRE, 0, 4);
|
|
break;
|
|
|
|
case 4:
|
|
_game._player._visible = true;
|
|
_game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[0]);
|
|
_scene->_sequences.addTimer(6, 5);
|
|
break;
|
|
|
|
case 5:
|
|
_game._player._stepEnabled = true;
|
|
_vm->_dialogs->show(40618);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
_action._inProgress = false;
|
|
}
|
|
}
|
|
|
|
void Scene406::preActions() {
|
|
_frameInRoomFl = false;
|
|
_takingFrameInRoomFl = false;
|
|
|
|
if (_game._objects[OBJ_RED_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_frameInRoomFl = true;
|
|
if (_action.isAction(VERB_TAKE, NOUN_RED_FRAME))
|
|
_takingFrameInRoomFl = true;
|
|
}
|
|
|
|
if (_game._objects[OBJ_YELLOW_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_frameInRoomFl = true;
|
|
if (_action.isAction(VERB_TAKE, NOUN_YELLOW_FRAME))
|
|
_takingFrameInRoomFl = true;
|
|
}
|
|
|
|
if (_game._objects[OBJ_BLUE_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_frameInRoomFl = true;
|
|
if (_action.isAction(VERB_TAKE, NOUN_BLUE_FRAME))
|
|
_takingFrameInRoomFl = true;
|
|
}
|
|
|
|
if (_game._objects[OBJ_GREEN_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_frameInRoomFl = true;
|
|
if (_action.isAction(VERB_TAKE, NOUN_GREEN_FRAME))
|
|
_takingFrameInRoomFl = true;
|
|
}
|
|
|
|
if (_action.isAction(VERB_PUT) && _action.isTarget(NOUN_FLOOR)
|
|
&& (_action.isObject(NOUN_RED_FRAME) || _action.isObject(NOUN_BLUE_FRAME) || _action.isObject(NOUN_YELLOW_FRAME) || _action.isObject(NOUN_GREEN_FRAME))) {
|
|
if (_frameInRoomFl)
|
|
_game._player._needToWalk = false;
|
|
else {
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[1]]->getFramePos(0);
|
|
pos.x += 12;
|
|
_game._player.walk(pos, FACING_NORTHWEST);
|
|
}
|
|
}
|
|
}
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
Scene407::Scene407(MADSEngine *vm) : Scene4xx(vm) {
|
|
_frameInRoomFl = false;
|
|
_takingFrameInRoomFl = false;
|
|
|
|
_redFrameHotspotId = -1;
|
|
_greenFrameHotspotId = -1;
|
|
_blueFrameHotspotId = -1;
|
|
_yellowFrameHotspotId = -1;
|
|
}
|
|
|
|
void Scene407::synchronize(Common::Serializer &s) {
|
|
Scene4xx::synchronize(s);
|
|
|
|
s.syncAsByte(_frameInRoomFl);
|
|
s.syncAsByte(_takingFrameInRoomFl);
|
|
|
|
s.syncAsSint16LE(_redFrameHotspotId);
|
|
s.syncAsSint16LE(_greenFrameHotspotId);
|
|
s.syncAsSint16LE(_blueFrameHotspotId);
|
|
s.syncAsSint16LE(_yellowFrameHotspotId);
|
|
}
|
|
|
|
void Scene407::setup() {
|
|
setPlayerSpritesPrefix();
|
|
setAAName();
|
|
|
|
_scene->addActiveVocab(NOUN_RED_FRAME);
|
|
_scene->addActiveVocab(NOUN_YELLOW_FRAME);
|
|
_scene->addActiveVocab(NOUN_BLUE_FRAME);
|
|
_scene->addActiveVocab(NOUN_GREEN_FRAME);
|
|
}
|
|
|
|
void Scene407::enter() {
|
|
_game.initCatacombs();
|
|
|
|
_globals._spriteIndexes[0] = _scene->_sprites.addSprites("*RRD_9");
|
|
_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('f', 0));
|
|
_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('f', 1));
|
|
_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('f', 2));
|
|
_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('f', 3));
|
|
|
|
if (_game.exitCatacombs(3) == -1) {
|
|
_scene->_hotspots.activateAtPos(NOUN_MORE_CATACOMBS, false, Common::Point(9, 46));
|
|
_scene->_hotspots.activateAtPos(NOUN_MORE_CATACOMBS, false, Common::Point(8, 138));
|
|
_scene->_hotspots.activateAtPos(NOUN_MORE_CATACOMBS, false, Common::Point(12, 149));
|
|
_scene->_hotspots.activateAtPos(NOUN_MORE_CATACOMBS, false, Common::Point(0, 151));
|
|
}
|
|
|
|
if (_game.exitCatacombs(1) == -1) {
|
|
_scene->_hotspots.activateAtPos(NOUN_MORE_CATACOMBS, false, Common::Point(310, 107));
|
|
_scene->_hotspots.activateAtPos(NOUN_MORE_CATACOMBS, false, Common::Point(308, 175));
|
|
_scene->_hotspots.activateAtPos(NOUN_MORE_CATACOMBS, false, Common::Point(308, 146));
|
|
_scene->_hotspots.activateAtPos(NOUN_MORE_CATACOMBS, false, Common::Point(309, 152));
|
|
}
|
|
|
|
if (_scene->_priorSceneId != RETURNING_FROM_LOADING) {
|
|
switch (_globals[kCatacombsFrom]) {
|
|
case 0:
|
|
_game._player._playerPos = Common::Point(197, 14);
|
|
_game._player._facing = FACING_WEST;
|
|
_game._player.walk(Common::Point(181, 14), FACING_WEST);
|
|
break;
|
|
|
|
case 1:
|
|
_game._player.firstWalk(Common::Point(330, 146), FACING_WEST, Common::Point(298, 146), FACING_WEST, true);
|
|
break;
|
|
|
|
case 2:
|
|
_game._player._playerPos = Common::Point(147, 14);
|
|
_game._player._facing = FACING_EAST;
|
|
_game._player.walk(Common::Point(165, 14), FACING_EAST);
|
|
break;
|
|
|
|
case 3:
|
|
_game._player.firstWalk(Common::Point(-20, 143), FACING_WEST, Common::Point(20, 143), FACING_WEST, true);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (_game._objects[OBJ_RED_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_globals._sequenceIndexes[1] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[1], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[1]]->getFramePos(0);
|
|
_redFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_RED_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_redFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_game._objects[OBJ_GREEN_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[1]]->getFramePos(0);
|
|
_greenFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_GREEN_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_greenFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_game._objects[OBJ_BLUE_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[3], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[1]]->getFramePos(0);
|
|
_blueFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_BLUE_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_blueFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_game._objects[OBJ_YELLOW_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_globals._sequenceIndexes[4] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[4], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[1]]->getFramePos(0);
|
|
_yellowFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_YELLOW_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_yellowFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
sceneEntrySound();
|
|
}
|
|
|
|
void Scene407::step() {
|
|
}
|
|
|
|
void Scene407::actions() {
|
|
if (_action.isAction(VERB_WALK_TO, NOUN_WALL) && (_game._player._playerPos.y > 30) && (_scene->_customDest.x > 160) && (_scene->_customDest.x < 190)) {
|
|
_vm->_dialogs->show(40718);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_WALK_TO) && (_scene->_customDest.x < 130) && (_game._player._playerPos.y < 30)) {
|
|
_vm->_dialogs->show(40718);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_WALK_TO) && (_scene->_customDest.x > 203) && (_game._player._playerPos.y < 30)) {
|
|
_vm->_dialogs->show(40718);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_WALK_TO, NOUN_FLOOR)) {
|
|
if ((_game._player._playerPos.y < 30) && (_scene->_customDest.y > 29)) {
|
|
_vm->_dialogs->show(40718);
|
|
_action._inProgress = false;
|
|
return;
|
|
} else if ((_game._player._playerPos.y > 29) && (_scene->_customDest.y < 30)) {
|
|
_vm->_dialogs->show(40718);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (_action.isAction(VERB_PUT) && _action.isTarget(NOUN_FLOOR)) {
|
|
if (_action.isObject(NOUN_RED_FRAME) || _action.isObject(NOUN_BLUE_FRAME) || _action.isObject(NOUN_YELLOW_FRAME) || _action.isObject(NOUN_GREEN_FRAME)) {
|
|
if ((_game._player._playerPos.y < 30) && (_scene->_customDest.y < 30))
|
|
_vm->_dialogs->show(40717);
|
|
else if ((_game._player._playerPos.y < 30) && (_scene->_customDest.y > 29))
|
|
_vm->_dialogs->show(40718);
|
|
else if (_frameInRoomFl)
|
|
_vm->_dialogs->show(29);
|
|
else {
|
|
switch (_game._trigger) {
|
|
case (0):
|
|
_game._player._stepEnabled = false;
|
|
_game._player._visible = false;
|
|
_globals._sequenceIndexes[0] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[0], true, 5, 2);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[0], 1, 5);
|
|
_scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[0], true);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_SPRITE, 5, 1);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
|
|
break;
|
|
|
|
case 1:
|
|
if (_action.isObject(NOUN_RED_FRAME)) {
|
|
_game._objects.setRoom(OBJ_RED_FRAME, NOWHERE);
|
|
_game._objects[OBJ_RED_FRAME]._roomNumber = _globals[kCatacombsRoom] + 600;
|
|
_globals._sequenceIndexes[1] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[1], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[1]]->getFramePos(0);
|
|
_redFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_RED_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_redFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_GREEN_FRAME)) {
|
|
_game._objects.setRoom(OBJ_GREEN_FRAME, NOWHERE);
|
|
_game._objects[OBJ_GREEN_FRAME]._roomNumber = _globals[kCatacombsRoom] + 600;
|
|
_globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[1]]->getFramePos(0);
|
|
_greenFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_GREEN_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_greenFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_BLUE_FRAME)) {
|
|
_game._objects.setRoom(OBJ_BLUE_FRAME, NOWHERE);
|
|
_game._objects[OBJ_BLUE_FRAME]._roomNumber = _globals[kCatacombsRoom] + 600;
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[3], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[1]]->getFramePos(0);
|
|
_blueFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_BLUE_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_blueFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_YELLOW_FRAME)) {
|
|
_game._objects.setRoom(OBJ_YELLOW_FRAME, NOWHERE);
|
|
_game._objects[OBJ_YELLOW_FRAME]._roomNumber = _globals[kCatacombsRoom] + 600;
|
|
_globals._sequenceIndexes[4] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[4], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[1]]->getFramePos(0);
|
|
_yellowFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_YELLOW_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_yellowFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
_game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[0]);
|
|
_game._player._visible = true;
|
|
_game._player._stepEnabled = true;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (_action.isAction(VERB_TAKE)) {
|
|
if (_action.isObject(NOUN_RED_FRAME) || _action.isObject(NOUN_GREEN_FRAME) || _action.isObject(NOUN_BLUE_FRAME) || _action.isObject(NOUN_YELLOW_FRAME)) {
|
|
if ((_takingFrameInRoomFl || _game._trigger)) {
|
|
if (_game._player._playerPos.y < 30)
|
|
_vm->_dialogs->show(40718);
|
|
else {
|
|
switch (_game._trigger) {
|
|
case (0):
|
|
_game._player._stepEnabled = false;
|
|
_game._player._visible = false;
|
|
_globals._sequenceIndexes[0] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[0], true, 5, 2);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[0], 1, 5);
|
|
_scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[0], true);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_SPRITE, 5, 1);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
|
|
break;
|
|
|
|
case 1:
|
|
if (_action.isObject(NOUN_RED_FRAME)) {
|
|
_scene->deleteSequence(_globals._sequenceIndexes[1]);
|
|
_scene->_dynamicHotspots.remove(_redFrameHotspotId);
|
|
_game._objects.addToInventory(OBJ_RED_FRAME);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_GREEN_FRAME)) {
|
|
_scene->deleteSequence(_globals._sequenceIndexes[2]);
|
|
_scene->_dynamicHotspots.remove(_greenFrameHotspotId);
|
|
_game._objects.addToInventory(OBJ_GREEN_FRAME);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_BLUE_FRAME)) {
|
|
_scene->deleteSequence(_globals._sequenceIndexes[3]);
|
|
_scene->_dynamicHotspots.remove(_blueFrameHotspotId);
|
|
_game._objects.addToInventory(OBJ_BLUE_FRAME);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_YELLOW_FRAME)) {
|
|
_scene->deleteSequence(_globals._sequenceIndexes[4]);
|
|
_scene->_dynamicHotspots.remove(_yellowFrameHotspotId);
|
|
_game._objects.addToInventory(OBJ_YELLOW_FRAME);
|
|
}
|
|
|
|
_vm->_sound->command(26);
|
|
break;
|
|
|
|
case 2:
|
|
_game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[0]);
|
|
_game._player._visible = true;
|
|
_game._player._stepEnabled = true;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (_action.isAction(VERB_WALK_THROUGH, NOUN_ARCHWAY_TO_WEST)) {
|
|
if (_game._player._playerPos.y < 30)
|
|
_game.moveCatacombs(2);
|
|
else
|
|
_vm->_dialogs->show(40718);
|
|
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_WALK_THROUGH, NOUN_ARCHWAY_TO_EAST)) {
|
|
if (_game._player._playerPos.y < 30)
|
|
_game.moveCatacombs(0);
|
|
else
|
|
_vm->_dialogs->show(40718);
|
|
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_EXIT_TO, NOUN_MORE_CATACOMBS) && (_game._player._playerPos.y < 30)) {
|
|
_vm->_dialogs->show(40718);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action._lookFlag) {
|
|
_vm->_dialogs->show(40710);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_LOOK) || _action.isAction(VERB_LOOK_AT)) {
|
|
if (_action.isObject(NOUN_WALL)) {
|
|
_vm->_dialogs->show(40711);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_FLOOR)) {
|
|
_vm->_dialogs->show(40712);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_ARCHWAY)) {
|
|
_vm->_dialogs->show(40713);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_MORE_CATACOMBS)) {
|
|
_vm->_dialogs->show(40714);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_COLUMN)) {
|
|
_vm->_dialogs->show(40715);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_RED_FRAME) && !_game._objects.isInInventory(OBJ_RED_FRAME)) {
|
|
_vm->_dialogs->showItem(OBJ_RED_FRAME, 802, 0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_GREEN_FRAME) && !_game._objects.isInInventory(OBJ_GREEN_FRAME)) {
|
|
_vm->_dialogs->showItem(OBJ_GREEN_FRAME, 818, 0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_BLUE_FRAME) && !_game._objects.isInInventory(OBJ_BLUE_FRAME)) {
|
|
_vm->_dialogs->showItem(OBJ_BLUE_FRAME, 817, 0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_YELLOW_FRAME) && !_game._objects.isInInventory(OBJ_YELLOW_FRAME)) {
|
|
_vm->_dialogs->showItem(OBJ_YELLOW_FRAME, 804, 0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_LAKE)) {
|
|
_vm->_dialogs->show(40716);
|
|
_action._inProgress = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
void Scene407::preActions() {
|
|
if (_action.isAction(VERB_EXIT_TO, NOUN_MORE_CATACOMBS)) {
|
|
if (_game._player._playerPos.y > 30) {
|
|
if (_scene->_customDest.x < 100)
|
|
_game.moveCatacombs(3);
|
|
else
|
|
_game.moveCatacombs(1);
|
|
} else
|
|
_game._player._needToWalk = false;
|
|
}
|
|
|
|
if (_action.isAction(VERB_WALK_THROUGH) && (_game._player._playerPos.y > 30))
|
|
_game._player._needToWalk = false;
|
|
|
|
_frameInRoomFl = false;
|
|
_takingFrameInRoomFl = false;
|
|
|
|
if (_game._objects[OBJ_RED_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_frameInRoomFl = true;
|
|
if (_action.isAction(VERB_TAKE, NOUN_RED_FRAME))
|
|
_takingFrameInRoomFl = true;
|
|
}
|
|
|
|
if (_game._objects[OBJ_YELLOW_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_frameInRoomFl = true;
|
|
if (_action.isAction(VERB_TAKE, NOUN_YELLOW_FRAME))
|
|
_takingFrameInRoomFl = true;
|
|
}
|
|
|
|
if (_game._objects[OBJ_BLUE_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_frameInRoomFl = true;
|
|
if (_action.isAction(VERB_TAKE, NOUN_BLUE_FRAME))
|
|
_takingFrameInRoomFl = true;
|
|
}
|
|
|
|
if (_game._objects[OBJ_GREEN_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_frameInRoomFl = true;
|
|
if (_action.isAction(VERB_TAKE, NOUN_GREEN_FRAME))
|
|
_takingFrameInRoomFl = true;
|
|
}
|
|
|
|
if (_action.isAction(VERB_PUT) && _action.isTarget(NOUN_FLOOR)
|
|
&& (_action.isObject(NOUN_RED_FRAME) || _action.isObject(NOUN_BLUE_FRAME) || _action.isObject(NOUN_YELLOW_FRAME) || _action.isObject(NOUN_GREEN_FRAME))) {
|
|
if ((_frameInRoomFl) || (_game._player._playerPos.y < 30) || (_scene->_customDest.y < 30))
|
|
_game._player._needToWalk = false;
|
|
else {
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[1]]->getFramePos(0);
|
|
_game._player.walk(Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
}
|
|
|
|
if (_action.isAction(VERB_TAKE)
|
|
&& (_action.isObject(NOUN_RED_FRAME) || _action.isObject(NOUN_GREEN_FRAME) || _action.isObject(NOUN_BLUE_FRAME) || _action.isObject(NOUN_YELLOW_FRAME))) {
|
|
if (_takingFrameInRoomFl && (_game._player._playerPos.y < 30))
|
|
_game._player._needToWalk = false;
|
|
}
|
|
|
|
if (_action.isAction(VERB_WALK_ACROSS, NOUN_FLOOR) && (_game._player._playerPos.y < 30) && (_scene->_customDest.y > 29))
|
|
_game._player._needToWalk = false;
|
|
|
|
if (_action.isAction(VERB_WALK_TO, NOUN_LAKE) && (_game._player._playerPos.y < 30))
|
|
_game._player.walk(Common::Point(172, 18), FACING_SOUTH);
|
|
|
|
if (_action.isAction(VERB_WALK_TO) && (_scene->_customDest.x < 130) && (_game._player._playerPos.y < 30))
|
|
_game._player._needToWalk = false;
|
|
|
|
if (_action.isAction(VERB_WALK_TO) && (_scene->_customDest.x > 203) && (_game._player._playerPos.y < 30))
|
|
_game._player._needToWalk = false;
|
|
|
|
if (_action.isAction(VERB_WALK_TO, NOUN_WALL) && (_game._player._playerPos.y > 30) && (_scene->_customDest.x > 160) && (_scene->_customDest.x < 190))
|
|
_game._player._needToWalk = false;
|
|
}
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
Scene408::Scene408(MADSEngine *vm) : Scene4xx(vm) {
|
|
_frameInRoomFl = false;
|
|
_takingFrameInRoomFl = false;
|
|
|
|
_redFrameHotspotId = -1;
|
|
_greenFrameHotspotId = -1;
|
|
_blueFrameHotspotId = -1;
|
|
_yellowFrameHotspotId = -1;
|
|
}
|
|
|
|
void Scene408::synchronize(Common::Serializer &s) {
|
|
Scene4xx::synchronize(s);
|
|
|
|
s.syncAsByte(_frameInRoomFl);
|
|
s.syncAsByte(_takingFrameInRoomFl);
|
|
|
|
s.syncAsSint16LE(_redFrameHotspotId);
|
|
s.syncAsSint16LE(_greenFrameHotspotId);
|
|
s.syncAsSint16LE(_blueFrameHotspotId);
|
|
s.syncAsSint16LE(_yellowFrameHotspotId);
|
|
}
|
|
|
|
void Scene408::setup() {
|
|
setPlayerSpritesPrefix();
|
|
setAAName();
|
|
|
|
if ((_globals[kCatacombsMisc] & MAZE_EVENT_WEB) && (!_globals[kCobwebIsCut]))
|
|
_scene->_variant = 1;
|
|
|
|
_scene->addActiveVocab(NOUN_RED_FRAME);
|
|
_scene->addActiveVocab(NOUN_YELLOW_FRAME);
|
|
_scene->addActiveVocab(NOUN_BLUE_FRAME);
|
|
_scene->addActiveVocab(NOUN_GREEN_FRAME);
|
|
}
|
|
|
|
void Scene408::enter() {
|
|
_game.initCatacombs();
|
|
_scene->_hotspots.activate(NOUN_COBWEB, false);
|
|
|
|
_globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('c', 0));
|
|
_globals._spriteIndexes[1] = _scene->_sprites.addSprites("*RRD_9");
|
|
_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('f', 0));
|
|
_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('f', 1));
|
|
_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('f', 2));
|
|
_globals._spriteIndexes[5] = _scene->_sprites.addSprites(formAnimName('f', 3));
|
|
_globals._spriteIndexes[6] = _scene->_sprites.addSprites(formAnimName('c', 1));
|
|
_globals._spriteIndexes[7] = _scene->_sprites.addSprites(formAnimName('c', 2));
|
|
|
|
if (_game.exitCatacombs(0) == -1) {
|
|
_scene->drawToBackground(_globals._spriteIndexes[0], 1, Common::Point(-32000, -32000), 0, 100);
|
|
_scene->_hotspots.activate(NOUN_ARCHWAY_TO_NORTH, false);
|
|
_scene->_hotspots.activateAtPos(NOUN_FLOOR, false, Common::Point(147, 121));
|
|
_scene->_hotspots.activateAtPos(NOUN_FLOOR, false, Common::Point(153, 121));
|
|
_scene->_hotspots.activateAtPos(NOUN_FLOOR, false, Common::Point(154, 115));
|
|
_scene->_hotspots.activateAtPos(NOUN_FLOOR, false, Common::Point(161, 101));
|
|
_scene->_hotspots.activateAtPos(NOUN_FLOOR, false, Common::Point(162, 106));
|
|
_scene->_hotspots.activateAtPos(NOUN_FLOOR, false, Common::Point(187, 107));
|
|
_scene->_hotspots.activateAtPos(NOUN_FLOOR, false, Common::Point(185, 101));
|
|
_scene->_hotspots.activateAtPos(NOUN_FLOOR, false, Common::Point(192, 119));
|
|
_scene->_hotspots.activateAtPos(NOUN_WALL, false, Common::Point(147, 76));
|
|
_scene->_hotspots.activateAtPos(NOUN_WALL, false, Common::Point(159, 108));
|
|
_scene->_hotspots.activateAtPos(NOUN_WALL, false, Common::Point(185, 93));
|
|
_scene->_hotspots.activateAtPos(NOUN_WALL, false, Common::Point(199, 91));
|
|
_scene->changeVariant(1);
|
|
} else
|
|
_scene->_hotspots.activate(NOUN_GATE, false);
|
|
|
|
if (_scene->_priorSceneId != RETURNING_FROM_LOADING) {
|
|
switch (_globals[kCatacombsFrom]) {
|
|
case 0:
|
|
_game._player._playerPos = Common::Point(174, 100);
|
|
_game._player._facing = FACING_SOUTH;
|
|
_game._player.walk(Common::Point(174, 106), FACING_SOUTH);
|
|
break;
|
|
|
|
case 2:
|
|
_game._player._playerPos = Common::Point(175, 145);
|
|
_game._player._facing = FACING_NORTH;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (_globals[kCatacombsMisc] & MAZE_EVENT_WEB) {
|
|
_globals._spriteIndexes[8] = _scene->_sprites.addSprites(formAnimName('x', -1));
|
|
if (!_globals[kCobwebIsCut]) {
|
|
_globals._spriteIndexes[6] = _scene->_sprites.addSprites(formAnimName('c', 1));
|
|
_globals._sequenceIndexes[6] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[6], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[6], 10);
|
|
_scene->_hotspots.activate(NOUN_COBWEB, true);
|
|
} else {
|
|
_globals._sequenceIndexes[8] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[8], false, -2);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[8], 10);
|
|
|
|
int idx = _scene->_dynamicHotspots.add(NOUN_COBWEB, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(199, 112, 199 + 6, 112 + 12));
|
|
_scene->_dynamicHotspots.setPosition(idx, Common::Point(194, 125), FACING_NORTHEAST);
|
|
idx = _scene->_dynamicHotspots.add(NOUN_COBWEB, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(202, 81, 202 + 5, 81 + 31));
|
|
_scene->_dynamicHotspots.setPosition(idx, Common::Point(194, 125), FACING_NORTHEAST);
|
|
|
|
idx = _scene->_dynamicHotspots.add(NOUN_COBWEB, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(138, 74, 138 + 7, 74 + 33));
|
|
_scene->_dynamicHotspots.setPosition(idx, Common::Point(154, 124), FACING_NORTHWEST);
|
|
idx = _scene->_dynamicHotspots.add(NOUN_COBWEB, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(143, 107, 143 + 6, 107 + 15));
|
|
_scene->_dynamicHotspots.setPosition(idx, Common::Point(154, 124), FACING_NORTHWEST);
|
|
}
|
|
}
|
|
|
|
if (_globals[kCatacombsMisc] & MAZE_EVENT_BRICK) {
|
|
_globals._spriteIndexes[7] = _scene->_sprites.addSprites(formAnimName('c', 2));
|
|
_scene->drawToBackground(_globals._spriteIndexes[7], 1, Common::Point(-32000, -32000), 0, 100);
|
|
_scene->_hotspots.activate(NOUN_EXPOSED_BRICK, false);
|
|
}
|
|
|
|
if (_game._objects[OBJ_RED_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[9]]->getFramePos(0);
|
|
_redFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_RED_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_redFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_game._objects[OBJ_GREEN_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[3], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[9]]->getFramePos(0);
|
|
_greenFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_GREEN_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_greenFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_game._objects[OBJ_BLUE_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_globals._sequenceIndexes[4] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[4], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[9]]->getFramePos(0);
|
|
_blueFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_BLUE_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_blueFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_game._objects[OBJ_YELLOW_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_globals._sequenceIndexes[5] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[5], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[5], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[9]]->getFramePos(0);
|
|
_yellowFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_YELLOW_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_yellowFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if ((_game._difficulty == DIFFICULTY_HARD) && (_globals[kCatacombsRoom] == 52))
|
|
_scene->_sequences.addTimer(120, 60);
|
|
|
|
sceneEntrySound();
|
|
}
|
|
|
|
void Scene408::step() {
|
|
if (_game._trigger == 60)
|
|
_vm->_dialogs->show(31);
|
|
}
|
|
|
|
void Scene408::actions() {
|
|
if (_action.isAction(VERB_PUT) && _action.isTarget(NOUN_FLOOR)
|
|
&& (_action.isObject(NOUN_RED_FRAME) || _action.isObject(NOUN_BLUE_FRAME) || _action.isObject(NOUN_YELLOW_FRAME) || _action.isObject(NOUN_GREEN_FRAME))) {
|
|
if (_frameInRoomFl)
|
|
_vm->_dialogs->show(29);
|
|
else {
|
|
switch (_game._trigger) {
|
|
case (0):
|
|
_game._player._stepEnabled = false;
|
|
_game._player._visible = false;
|
|
_globals._sequenceIndexes[1] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[1], true, 5, 2);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[1], 1, 5);
|
|
_scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[1], true);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_SPRITE, 5, 1);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
|
|
break;
|
|
|
|
case 1:
|
|
if (_action.isObject(NOUN_RED_FRAME)) {
|
|
_game._objects.setRoom(OBJ_RED_FRAME, NOWHERE);
|
|
_game._objects[OBJ_RED_FRAME]._roomNumber = _globals[kCatacombsRoom] + 600;
|
|
_globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[2]]->getFramePos(0);
|
|
_redFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_RED_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_redFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_GREEN_FRAME)) {
|
|
_game._objects.setRoom(OBJ_GREEN_FRAME, NOWHERE);
|
|
_game._objects[OBJ_GREEN_FRAME]._roomNumber = _globals[kCatacombsRoom] + 600;
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[3], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[9]]->getFramePos(0);
|
|
_greenFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_GREEN_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_greenFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_BLUE_FRAME)) {
|
|
_game._objects.setRoom(OBJ_BLUE_FRAME, NOWHERE);
|
|
_game._objects[OBJ_BLUE_FRAME]._roomNumber = _globals[kCatacombsRoom] + 600;
|
|
_globals._sequenceIndexes[4] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[4], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[9]]->getFramePos(0);
|
|
_blueFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_BLUE_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_blueFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_YELLOW_FRAME)) {
|
|
_game._objects.setRoom(OBJ_YELLOW_FRAME, NOWHERE);
|
|
_game._objects[OBJ_YELLOW_FRAME]._roomNumber = _globals[kCatacombsRoom] + 600;
|
|
_globals._sequenceIndexes[5] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[5], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[5], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[9]]->getFramePos(0);
|
|
_yellowFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_YELLOW_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_yellowFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
_game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[1]);
|
|
_game._player._visible = true;
|
|
_game._player._stepEnabled = true;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
|
|
if (_action.isAction(VERB_TAKE)
|
|
&& (_action.isObject(NOUN_RED_FRAME) || _action.isObject(NOUN_GREEN_FRAME) || _action.isObject(NOUN_BLUE_FRAME) || _action.isObject(NOUN_YELLOW_FRAME))) {
|
|
if ((_takingFrameInRoomFl || _game._trigger)) {
|
|
switch (_game._trigger) {
|
|
case (0):
|
|
_game._player._stepEnabled = false;
|
|
_game._player._visible = false;
|
|
_globals._sequenceIndexes[1] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[1], true, 5, 2);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[1], 1, 5);
|
|
_scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[1], true);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_SPRITE, 5, 1);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
|
|
break;
|
|
|
|
case 1:
|
|
if (_action.isObject(NOUN_RED_FRAME)) {
|
|
_scene->deleteSequence(_globals._sequenceIndexes[2]);
|
|
_scene->_dynamicHotspots.remove(_redFrameHotspotId);
|
|
_game._objects.addToInventory(OBJ_RED_FRAME);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_GREEN_FRAME)) {
|
|
_scene->deleteSequence(_globals._sequenceIndexes[3]);
|
|
_scene->_dynamicHotspots.remove(_greenFrameHotspotId);
|
|
_game._objects.addToInventory(OBJ_GREEN_FRAME);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_BLUE_FRAME)) {
|
|
_scene->deleteSequence(_globals._sequenceIndexes[4]);
|
|
_scene->_dynamicHotspots.remove(_blueFrameHotspotId);
|
|
_game._objects.addToInventory(OBJ_BLUE_FRAME);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_YELLOW_FRAME)) {
|
|
_scene->deleteSequence(_globals._sequenceIndexes[5]);
|
|
_scene->_dynamicHotspots.remove(_yellowFrameHotspotId);
|
|
_game._objects.addToInventory(OBJ_YELLOW_FRAME);
|
|
}
|
|
|
|
_vm->_sound->command(26);
|
|
break;
|
|
|
|
case 2:
|
|
_game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[1]);
|
|
_game._player._visible = true;
|
|
_game._player._stepEnabled = true;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (_action.isAction(VERB_WALK_THROUGH, NOUN_ARCHWAY_TO_NORTH)) {
|
|
_game.moveCatacombs(0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_EXIT_TO, NOUN_MORE_CATACOMBS)) {
|
|
_game.moveCatacombs(2);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action._lookFlag) {
|
|
_vm->_dialogs->show(40810);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_LOOK) || _action.isAction(VERB_LOOK_AT)) {
|
|
if (_action.isObject(NOUN_WALL)) {
|
|
_vm->_dialogs->show(40811);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_FLOOR)) {
|
|
_vm->_dialogs->show(40812);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_ARCHWAY)) {
|
|
_vm->_dialogs->show(40813);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_EXPOSED_BRICK)) {
|
|
_vm->_dialogs->show(40814);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_MORE_CATACOMBS)) {
|
|
_vm->_dialogs->show(40815);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_CEILING)) {
|
|
_vm->_dialogs->show(40816);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_RED_FRAME) && !_game._objects.isInInventory(OBJ_RED_FRAME)) {
|
|
_vm->_dialogs->showItem(OBJ_RED_FRAME, 802, 0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_GREEN_FRAME) && !_game._objects.isInInventory(OBJ_GREEN_FRAME)) {
|
|
_vm->_dialogs->showItem(OBJ_GREEN_FRAME, 819, 0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_BLUE_FRAME) && !_game._objects.isInInventory(OBJ_BLUE_FRAME)) {
|
|
_vm->_dialogs->showItem(OBJ_BLUE_FRAME, 817, 0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_YELLOW_FRAME) && !_game._objects.isInInventory(OBJ_YELLOW_FRAME)) {
|
|
_vm->_dialogs->showItem(OBJ_YELLOW_FRAME, 804, 0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_GATE)) {
|
|
_vm->_dialogs->show(40817);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_COBWEB)) {
|
|
if (_globals[kCobwebIsCut])
|
|
_vm->_dialogs->show(40820);
|
|
else
|
|
_vm->_dialogs->show(40819);
|
|
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
}
|
|
|
|
if ((_action.isAction(VERB_ATTACK, NOUN_COBWEB) && !_globals[kCobwebIsCut])) {
|
|
_globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('W', 1), 70);
|
|
_game._player._visible = false;
|
|
_game._player._stepEnabled = false;
|
|
_globals[kCobwebIsCut] = true;
|
|
_scene->deleteSequence(_globals._sequenceIndexes[6]);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_game._trigger == 70) {
|
|
_globals._sequenceIndexes[8] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[8], false, -2);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[8], 14);
|
|
_scene->changeVariant(0);
|
|
_scene->_hotspots.activate(NOUN_COBWEB, false);
|
|
_game._player._visible = true;
|
|
_game._player._stepEnabled = true;
|
|
|
|
int idx = _scene->_dynamicHotspots.add(NOUN_COBWEB, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(199, 112, 199 + 6, 112 + 12));
|
|
_scene->_dynamicHotspots.setPosition(idx, Common::Point(194, 125), FACING_NORTHEAST);
|
|
idx = _scene->_dynamicHotspots.add(NOUN_COBWEB, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(202, 81, 202 + 5, 81 + 31));
|
|
_scene->_dynamicHotspots.setPosition(idx, Common::Point(194, 125), FACING_NORTHEAST);
|
|
|
|
idx = _scene->_dynamicHotspots.add(NOUN_COBWEB, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(138, 74, 138 + 7, 74 + 33));
|
|
_scene->_dynamicHotspots.setPosition(idx, Common::Point(154, 124), FACING_NORTHWEST);
|
|
idx = _scene->_dynamicHotspots.add(NOUN_COBWEB, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(143, 107, 143 + 6, 107 + 15));
|
|
_scene->_dynamicHotspots.setPosition(idx, Common::Point(154, 124), FACING_NORTHWEST);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_OPEN, NOUN_GATE)) {
|
|
_vm->_dialogs->show(40818);
|
|
_action._inProgress = false;
|
|
}
|
|
}
|
|
|
|
void Scene408::preActions() {
|
|
_frameInRoomFl = false;
|
|
_takingFrameInRoomFl = false;
|
|
|
|
if (_game._objects[OBJ_RED_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_frameInRoomFl = true;
|
|
if (_action.isAction(VERB_TAKE, NOUN_RED_FRAME))
|
|
_takingFrameInRoomFl = true;
|
|
}
|
|
|
|
if (_game._objects[OBJ_YELLOW_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_frameInRoomFl = true;
|
|
if (_action.isAction(VERB_TAKE, NOUN_YELLOW_FRAME))
|
|
_takingFrameInRoomFl = true;
|
|
}
|
|
|
|
if (_game._objects[OBJ_BLUE_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_frameInRoomFl = true;
|
|
if (_action.isAction(VERB_TAKE, NOUN_BLUE_FRAME))
|
|
_takingFrameInRoomFl = true;
|
|
}
|
|
|
|
if (_game._objects[OBJ_GREEN_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_frameInRoomFl = true;
|
|
if (_action.isAction(VERB_TAKE, NOUN_GREEN_FRAME))
|
|
_takingFrameInRoomFl = true;
|
|
}
|
|
|
|
if (_action.isAction(VERB_PUT) && _action.isTarget(NOUN_FLOOR)
|
|
&& (_action.isObject(NOUN_RED_FRAME) || _action.isObject(NOUN_BLUE_FRAME) || _action.isObject(NOUN_YELLOW_FRAME) || _action.isObject(NOUN_GREEN_FRAME))) {
|
|
if (_frameInRoomFl)
|
|
_game._player._needToWalk = false;
|
|
else {
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[9]]->getFramePos(0);
|
|
_game._player.walk(Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
}
|
|
}
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
Scene409::Scene409(MADSEngine *vm) : Scene4xx(vm) {
|
|
_frameInRoomFl = false;
|
|
_takingFrameInRoomFl = false;
|
|
|
|
_redFrameHotspotId = -1;
|
|
_greenFrameHotspotId = -1;
|
|
_blueFrameHotspotId = -1;
|
|
_yellowFrameHotspotId = -1;
|
|
}
|
|
|
|
void Scene409::synchronize(Common::Serializer &s) {
|
|
Scene4xx::synchronize(s);
|
|
|
|
s.syncAsByte(_frameInRoomFl);
|
|
s.syncAsByte(_takingFrameInRoomFl);
|
|
|
|
s.syncAsSint16LE(_redFrameHotspotId);
|
|
s.syncAsSint16LE(_greenFrameHotspotId);
|
|
s.syncAsSint16LE(_blueFrameHotspotId);
|
|
s.syncAsSint16LE(_yellowFrameHotspotId);
|
|
}
|
|
|
|
void Scene409::setup() {
|
|
setPlayerSpritesPrefix();
|
|
setAAName();
|
|
|
|
_scene->addActiveVocab(NOUN_RED_FRAME);
|
|
_scene->addActiveVocab(NOUN_YELLOW_FRAME);
|
|
_scene->addActiveVocab(NOUN_BLUE_FRAME);
|
|
_scene->addActiveVocab(NOUN_GREEN_FRAME);
|
|
}
|
|
|
|
void Scene409::enter() {
|
|
_game.initCatacombs();
|
|
|
|
_scene->loadSpeech(3);
|
|
_scene->_hotspots.activate(NOUN_SWORD, false);
|
|
|
|
_globals._spriteIndexes[8] = _scene->_sprites.addSprites("*RDR_9");
|
|
_globals._spriteIndexes[0] = _scene->_sprites.addSprites("*RRD_9");
|
|
_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('f', 0));
|
|
_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('f', 1));
|
|
_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('f', 2));
|
|
_globals._spriteIndexes[5] = _scene->_sprites.addSprites(formAnimName('f', 3));
|
|
_globals._spriteIndexes[6] = _scene->_sprites.addSprites(formAnimName('x', 0));
|
|
_globals._spriteIndexes[7] = _scene->_sprites.addSprites(formAnimName('a', 0));
|
|
|
|
if (_game._objects.isInRoom(OBJ_SWORD)) {
|
|
_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('p', 0));
|
|
_globals._spriteIndexes[0] = _scene->_sprites.addSprites("*RRD_9");
|
|
_globals._sequenceIndexes[1] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[1], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 14);
|
|
_scene->_hotspots.activate(NOUN_SWORD, true);
|
|
}
|
|
|
|
if (!_globals[kDoorIn409IsOpen]) {
|
|
_globals._sequenceIndexes[6] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[6], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[6], 14);
|
|
_scene->_hotspots.activate(NOUN_ARCHWAY_TO_NORTH, false);
|
|
} else
|
|
_scene->_hotspots.activate(NOUN_DOOR, false);
|
|
|
|
if (_scene->_priorSceneId == 410) {
|
|
_game._player._facing = FACING_NORTH;
|
|
_game._player._playerPos = Common::Point(229, 106);
|
|
|
|
if (_globals[kFlickedLever1] && _globals[kFlickedLever2] && _globals[kFlickedLever3] && _globals[kFlickedLever4]) {
|
|
if ((_globals[kFlickedLever1] == 5) && (_globals[kFlickedLever2] == 18) && (_globals[kFlickedLever3] == 9) && (_globals[kFlickedLever4] == 11)) {
|
|
if (!_globals[kDoorIn409IsOpen]) {
|
|
_globals[kPlayerScore] += 5;
|
|
_vm->_sound->command(24);
|
|
_scene->deleteSequence(_globals._sequenceIndexes[6]);
|
|
_game._player._stepEnabled = false;
|
|
_globals._sequenceIndexes[6] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[6], false, 7, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[6], 14);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[6], -1, -2);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[6], SEQUENCE_TRIGGER_EXPIRE, 0, 65);
|
|
}
|
|
} else {
|
|
_globals[kFlickedLever1] = 0;
|
|
_globals[kFlickedLever2] = 0;
|
|
_globals[kFlickedLever3] = 0;
|
|
_globals[kFlickedLever4] = 0;
|
|
_game._player._stepEnabled = false;
|
|
_globals._sequenceIndexes[7] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[7], false, 9, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[7], 1);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[7], -1, -2);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[7], SEQUENCE_TRIGGER_SPRITE, 15, 60);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[7], SEQUENCE_TRIGGER_EXPIRE, 0, 61);
|
|
_vm->_sound->command(68);
|
|
}
|
|
} else {
|
|
_globals[kFlickedLever1] = 0;
|
|
_globals[kFlickedLever2] = 0;
|
|
_globals[kFlickedLever3] = 0;
|
|
_globals[kFlickedLever4] = 0;
|
|
}
|
|
} else if (_scene->_priorSceneId != RETURNING_FROM_LOADING) {
|
|
switch (_globals[kCatacombsFrom]) {
|
|
case 0:
|
|
_game._player._playerPos = Common::Point(195, 92);
|
|
_game._player._facing = FACING_SOUTH;
|
|
_game._player.walk(Common::Point(195, 107), FACING_SOUTH);
|
|
break;
|
|
|
|
case 2:
|
|
_game._player._playerPos = Common::Point(184, 45);
|
|
_game._player._facing = FACING_NORTH;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (_game._objects[OBJ_RED_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[2]]->getFramePos(0);
|
|
_redFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_RED_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_redFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_game._objects[OBJ_GREEN_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[3], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[2]]->getFramePos(0);
|
|
_greenFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_GREEN_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_greenFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_game._objects[OBJ_BLUE_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_globals._sequenceIndexes[4] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[4], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[2]]->getFramePos(0);
|
|
_blueFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_BLUE_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_blueFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_game._objects[OBJ_YELLOW_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_globals._sequenceIndexes[5] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[5], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[5], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[2]]->getFramePos(0);
|
|
_yellowFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_YELLOW_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_yellowFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
sceneEntrySound();
|
|
}
|
|
|
|
void Scene409::step() {
|
|
if (_game._trigger == 60) {
|
|
_game._player._visible = false;
|
|
_game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[7]);
|
|
_scene->playSpeech(3);
|
|
}
|
|
|
|
if (_game._trigger == 61) {
|
|
_globals._sequenceIndexes[7] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[7], false, -2);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[7], 1);
|
|
_scene->_sequences.addTimer(60, 62);
|
|
_vm->_sound->command(27);
|
|
}
|
|
|
|
if (_game._trigger == 62)
|
|
_scene->_reloadSceneFlag = true;
|
|
|
|
if (_game._trigger == 65) {
|
|
_game._player._stepEnabled = true;
|
|
_globals[kDoorIn409IsOpen] = true;
|
|
_scene->_hotspots.activate(NOUN_DOOR, false);
|
|
_scene->_hotspots.activate(NOUN_ARCHWAY_TO_NORTH, true);
|
|
}
|
|
}
|
|
|
|
void Scene409::actions() {
|
|
if (_action.isAction(VERB_WALK_THROUGH, NOUN_DOOR) || _action.isAction(VERB_OPEN, NOUN_DOOR)) {
|
|
switch (_game._trigger) {
|
|
case (0):
|
|
_game._player._stepEnabled = false;
|
|
_game._player._visible = false;
|
|
_globals._sequenceIndexes[8] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[8], false, 5, 1);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[8], 1, 4);
|
|
_scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[8], true);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_EXPIRE, 0, 1);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_SPRITE, 4, 4);
|
|
_action._inProgress = false;
|
|
return;
|
|
|
|
case 1: {
|
|
int syncIdx = _globals._sequenceIndexes[8];
|
|
_globals._sequenceIndexes[8] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[8], false, 4);
|
|
_game.syncTimers(SYNC_SEQ, _globals._sequenceIndexes[8], SYNC_SEQ, syncIdx);
|
|
_scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[8], false);
|
|
_scene->_sequences.addTimer(30, 2);
|
|
_action._inProgress = false;
|
|
}
|
|
return;
|
|
|
|
case 2:
|
|
_scene->deleteSequence(_globals._sequenceIndexes[8]);
|
|
_globals._sequenceIndexes[8] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[8], false, 5, 1);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[8], 1, 4);
|
|
_scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[8], false);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_EXPIRE, 0, 3);
|
|
_action._inProgress = false;
|
|
return;
|
|
|
|
case 3:
|
|
_game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[8]);
|
|
_game._player._visible = true;
|
|
_vm->_dialogs->show(40923);
|
|
_game._player._stepEnabled = true;
|
|
_action._inProgress = false;
|
|
return;
|
|
|
|
case 4:
|
|
_vm->_sound->command(70);
|
|
_action._inProgress = false;
|
|
return;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (_action.isAction(VERB_PUT) && _action.isTarget(NOUN_FLOOR)) {
|
|
if (_action.isObject(NOUN_RED_FRAME) || _action.isObject(NOUN_BLUE_FRAME) || _action.isObject(NOUN_YELLOW_FRAME) || _action.isObject(NOUN_GREEN_FRAME)) {
|
|
if (_frameInRoomFl) {
|
|
_vm->_dialogs->show(29);
|
|
} else {
|
|
switch (_game._trigger) {
|
|
case (0):
|
|
_game._player._stepEnabled = false;
|
|
_game._player._visible = false;
|
|
_globals._sequenceIndexes[0] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[0], true, 5, 2);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[0], 1, 5);
|
|
_scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[0], true);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_SPRITE, 5, 1);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
|
|
break;
|
|
|
|
case 1:
|
|
if (_action.isObject(NOUN_RED_FRAME)) {
|
|
_game._objects.setRoom(OBJ_RED_FRAME, NOWHERE);
|
|
_game._objects[OBJ_RED_FRAME]._roomNumber = _globals[kCatacombsRoom] + 600;
|
|
_globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[2]]->getFramePos(0);
|
|
_redFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_RED_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_redFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_GREEN_FRAME)) {
|
|
_game._objects.setRoom(OBJ_GREEN_FRAME, NOWHERE);
|
|
_game._objects[OBJ_GREEN_FRAME]._roomNumber = _globals[kCatacombsRoom] + 600;
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[3], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[2]]->getFramePos(0);
|
|
_greenFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_GREEN_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_greenFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_BLUE_FRAME)) {
|
|
_game._objects.setRoom(OBJ_BLUE_FRAME, NOWHERE);
|
|
_game._objects[OBJ_BLUE_FRAME]._roomNumber = _globals[kCatacombsRoom] + 600;
|
|
_globals._sequenceIndexes[4] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[4], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[2]]->getFramePos(0);
|
|
_blueFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_BLUE_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_blueFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_YELLOW_FRAME)) {
|
|
_game._objects.setRoom(OBJ_YELLOW_FRAME, NOWHERE);
|
|
_game._objects[OBJ_YELLOW_FRAME]._roomNumber = _globals[kCatacombsRoom] + 600;
|
|
_globals._sequenceIndexes[5] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[5], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[5], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[2]]->getFramePos(0);
|
|
_yellowFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_YELLOW_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_yellowFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
_game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[0]);
|
|
_game._player._visible = true;
|
|
_game._player._stepEnabled = true;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (_action.isAction(VERB_TAKE)) {
|
|
if ((_action.isObject(NOUN_RED_FRAME) || _action.isObject(NOUN_GREEN_FRAME) || _action.isObject(NOUN_BLUE_FRAME) || _action.isObject(NOUN_YELLOW_FRAME))
|
|
&& (_takingFrameInRoomFl || _game._trigger)) {
|
|
switch (_game._trigger) {
|
|
case (0):
|
|
_game._player._stepEnabled = false;
|
|
_game._player._visible = false;
|
|
_globals._sequenceIndexes[0] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[0], true, 5, 2);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[0], 1, 5);
|
|
_scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[0], true);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_SPRITE, 5, 1);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
|
|
break;
|
|
|
|
case 1:
|
|
if (_action.isObject(NOUN_RED_FRAME)) {
|
|
_scene->deleteSequence(_globals._sequenceIndexes[2]);
|
|
_scene->_dynamicHotspots.remove(_redFrameHotspotId);
|
|
_game._objects.addToInventory(OBJ_RED_FRAME);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_GREEN_FRAME)) {
|
|
_scene->deleteSequence(_globals._sequenceIndexes[3]);
|
|
_scene->_dynamicHotspots.remove(_greenFrameHotspotId);
|
|
_game._objects.addToInventory(OBJ_GREEN_FRAME);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_BLUE_FRAME)) {
|
|
_scene->deleteSequence(_globals._sequenceIndexes[4]);
|
|
_scene->_dynamicHotspots.remove(_blueFrameHotspotId);
|
|
_game._objects.addToInventory(OBJ_BLUE_FRAME);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_YELLOW_FRAME)) {
|
|
_scene->deleteSequence(_globals._sequenceIndexes[5]);
|
|
_scene->_dynamicHotspots.remove(_yellowFrameHotspotId);
|
|
_game._objects.addToInventory(OBJ_YELLOW_FRAME);
|
|
}
|
|
|
|
_vm->_sound->command(26);
|
|
break;
|
|
|
|
case 2:
|
|
_game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[0]);
|
|
_game._player._visible = true;
|
|
_game._player._stepEnabled = true;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (_action.isAction(VERB_WALK_THROUGH, NOUN_ARCHWAY_TO_NORTH)) {
|
|
_game.enterCatacombs(true);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_EXIT_TO, NOUN_MORE_CATACOMBS)) {
|
|
_game.enterCatacombs(false);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action._lookFlag) {
|
|
_vm->_dialogs->show(40910);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_TAKE, NOUN_SWORD) && (_game._objects.isInRoom(OBJ_SWORD) || _game._trigger)) {
|
|
switch (_game._trigger) {
|
|
case (0):
|
|
_globals[kPlayerScore] += 5;
|
|
_game._player._stepEnabled = false;
|
|
_game._player._visible = false;
|
|
_globals._sequenceIndexes[0] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[0], true, 5, 2);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[0], 1, 5);
|
|
_scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[0], true);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_SPRITE, 5, 1);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
|
|
break;
|
|
|
|
case 1:
|
|
_scene->deleteSequence(_globals._sequenceIndexes[1]);
|
|
_scene->_hotspots.activate(NOUN_SWORD, false);
|
|
_game._objects.addToInventory(OBJ_SWORD);
|
|
_vm->_sound->command(26);
|
|
break;
|
|
|
|
case 2:
|
|
_game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[0]);
|
|
_game._player._visible = true;
|
|
_scene->_sequences.addTimer(20, 3);
|
|
break;
|
|
|
|
case 3:
|
|
_vm->_dialogs->showItem(OBJ_SWORD, 808, 0);
|
|
_game._player._stepEnabled = true;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_LOOK) || _action.isAction(VERB_LOOK_AT)) {
|
|
if (_action.isObject(NOUN_WALL)) {
|
|
_vm->_dialogs->show(40911);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_FLOOR)) {
|
|
_vm->_dialogs->show(40912);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_ARCHWAY)) {
|
|
_vm->_dialogs->show(40913);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_EXPOSED_BRICK)) {
|
|
_vm->_dialogs->show(40914);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_MORE_CATACOMBS)) {
|
|
_vm->_dialogs->show(40915);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_BLOCKED_ARCHWAY)) {
|
|
_vm->_dialogs->show(40916);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_GRATE)) {
|
|
_vm->_dialogs->show(40917);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_UNLUCKY_ADVENTURER)) {
|
|
_vm->_dialogs->show(40920);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_RED_FRAME) && !_game._objects.isInInventory(OBJ_RED_FRAME)) {
|
|
_vm->_dialogs->showItem(OBJ_RED_FRAME, 802, 0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_GREEN_FRAME) && !_game._objects.isInInventory(OBJ_GREEN_FRAME)) {
|
|
_vm->_dialogs->showItem(OBJ_GREEN_FRAME, 819, 0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_BLUE_FRAME) && !_game._objects.isInInventory(OBJ_BLUE_FRAME)) {
|
|
_vm->_dialogs->showItem(OBJ_BLUE_FRAME, 817, 0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_YELLOW_FRAME) && !_game._objects.isInInventory(OBJ_YELLOW_FRAME)) {
|
|
_vm->_dialogs->showItem(OBJ_YELLOW_FRAME, 804, 0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_SWORD) && _game._objects.isInRoom(OBJ_SWORD)) {
|
|
_vm->_dialogs->show(40921);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (_action.isAction(VERB_LOOK, NOUN_SWITCH_PANEL)) {
|
|
_vm->_dialogs->show(40919);
|
|
_scene->_nextSceneId = 410;
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_WALK_TO, NOUN_SWITCH_PANEL)) {
|
|
_scene->_nextSceneId = 410;
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_OPEN, NOUN_GRATE) || _action.isAction(VERB_PUSH, NOUN_GRATE) || _action.isAction(VERB_PULL, NOUN_GRATE)) {
|
|
switch (_game._trigger) {
|
|
case (0):
|
|
_game._player._stepEnabled = false;
|
|
_game._player._visible = false;
|
|
_globals._sequenceIndexes[0] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[0], false, 5, 1);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[0], -1, -2);
|
|
_scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[0], true);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
|
|
break;
|
|
|
|
case 2:
|
|
_globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, -2);
|
|
_scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[0], true);
|
|
_scene->_sequences.addTimer(30, 3);
|
|
break;
|
|
|
|
case 3:
|
|
_scene->deleteSequence(_globals._sequenceIndexes[0]);
|
|
_globals._sequenceIndexes[0] = _scene->_sequences.addReverseSpriteCycle(_globals._spriteIndexes[0], false, 5, 1);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[0], -1, -2);
|
|
_scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[0], false);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_EXPIRE, 0, 4);
|
|
break;
|
|
|
|
case 4:
|
|
_game._player._visible = true;
|
|
_game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[0]);
|
|
_scene->_sequences.addTimer(6, 5);
|
|
break;
|
|
|
|
case 5:
|
|
_game._player._stepEnabled = true;
|
|
_vm->_dialogs->show(40918);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_TALK_TO, NOUN_UNLUCKY_ADVENTURER)) {
|
|
_vm->_dialogs->show(40924);
|
|
_action._inProgress = false;
|
|
}
|
|
}
|
|
|
|
void Scene409::preActions() {
|
|
_frameInRoomFl = false;
|
|
_takingFrameInRoomFl = false;
|
|
|
|
if (_game._objects[OBJ_RED_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_frameInRoomFl = true;
|
|
if (_action.isAction(VERB_TAKE, NOUN_RED_FRAME))
|
|
_takingFrameInRoomFl = true;
|
|
}
|
|
|
|
if (_game._objects[OBJ_YELLOW_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_frameInRoomFl = true;
|
|
if (_action.isAction(VERB_TAKE, NOUN_YELLOW_FRAME))
|
|
_takingFrameInRoomFl = true;
|
|
}
|
|
|
|
if (_game._objects[OBJ_BLUE_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_frameInRoomFl = true;
|
|
if (_action.isAction(VERB_TAKE, NOUN_BLUE_FRAME))
|
|
_takingFrameInRoomFl = true;
|
|
}
|
|
|
|
if (_game._objects[OBJ_GREEN_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_frameInRoomFl = true;
|
|
if (_action.isAction(VERB_TAKE, NOUN_GREEN_FRAME))
|
|
_takingFrameInRoomFl = true;
|
|
}
|
|
|
|
if (_action.isAction(VERB_PUT) && _action.isTarget(NOUN_FLOOR)
|
|
&& (_action.isObject(NOUN_RED_FRAME) || _action.isObject(NOUN_BLUE_FRAME) || _action.isObject(NOUN_YELLOW_FRAME) || _action.isObject(NOUN_GREEN_FRAME))) {
|
|
if (_frameInRoomFl)
|
|
_game._player._needToWalk = false;
|
|
else {
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[2]]->getFramePos(0);
|
|
_game._player.walk(Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
}
|
|
|
|
if (_action.isAction(VERB_LOOK, NOUN_SWITCH_PANEL))
|
|
_game._player.walk(Common::Point(229, 106), FACING_NORTH);
|
|
|
|
if (_action.isAction(VERB_OPEN, NOUN_DOOR))
|
|
_game._player.walk(Common::Point(191, 104), FACING_NORTHEAST);
|
|
|
|
if (_action.isAction(VERB_OPEN, NOUN_GRATE))
|
|
_game._player._needToWalk = true;
|
|
}
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
Scene410::Scene410(MADSEngine *vm) : Scene4xx(vm) {
|
|
for (int i = 0; i < 26; i++)
|
|
_skullSequence[i] = 0;
|
|
}
|
|
|
|
void Scene410::synchronize(Common::Serializer &s) {
|
|
Scene4xx::synchronize(s);
|
|
|
|
for (int i = 0; i < 26; i++)
|
|
s.syncAsSint16LE(_skullSequence[i]);
|
|
}
|
|
|
|
void Scene410::setup() {
|
|
setPlayerSpritesPrefix();
|
|
setAAName();
|
|
}
|
|
|
|
void Scene410::enter() {
|
|
_game._player._visible = false;
|
|
_globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('l', 0));
|
|
_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('l', 1));
|
|
_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('l', 2));
|
|
_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('a', 0));
|
|
_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('f', 0));
|
|
|
|
for (int i = 1; i < 27; i++) {
|
|
Common::Point pos;
|
|
int type;
|
|
|
|
getLeverInfo(&pos, &type, i, NULL);
|
|
int stampType = -1;
|
|
|
|
switch (type) {
|
|
case 1:
|
|
stampType = _globals._spriteIndexes[0];
|
|
break;
|
|
|
|
case 2:
|
|
stampType = _globals._spriteIndexes[1];
|
|
break;
|
|
|
|
case 3:
|
|
stampType = _globals._spriteIndexes[2];
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
_globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(stampType, false, 1);
|
|
_scene->_sequences.setPosition(_globals._sequenceIndexes[0], pos);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[0], 2);
|
|
_skullSequence[i - 1] = _globals._sequenceIndexes[0];
|
|
}
|
|
|
|
if (_globals[kFlickedLever1]) {
|
|
Common::Point pos;
|
|
int type;
|
|
|
|
getLeverInfo(&pos, &type, _globals[kFlickedLever1], NULL);
|
|
int stampType = -1;
|
|
|
|
switch (type) {
|
|
case 1:
|
|
stampType = _globals._spriteIndexes[0];
|
|
break;
|
|
|
|
case 2:
|
|
stampType = _globals._spriteIndexes[1];
|
|
break;
|
|
|
|
case 3:
|
|
stampType = _globals._spriteIndexes[2];
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
_scene->deleteSequence(_skullSequence[_globals[kFlickedLever1] - 1]);
|
|
_globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(stampType, false, -2);
|
|
_scene->_sequences.setPosition(_globals._sequenceIndexes[0], pos);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[0], 2);
|
|
}
|
|
|
|
if (_globals[kFlickedLever2]) {
|
|
Common::Point pos;
|
|
int type;
|
|
|
|
getLeverInfo(&pos, &type, _globals[kFlickedLever2], NULL);
|
|
int stampType = -1;
|
|
switch (type) {
|
|
case 1:
|
|
stampType = _globals._spriteIndexes[0];
|
|
break;
|
|
|
|
case 2:
|
|
stampType = _globals._spriteIndexes[1];
|
|
break;
|
|
|
|
case 3:
|
|
stampType = _globals._spriteIndexes[2];
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
_scene->deleteSequence(_skullSequence[_globals[kFlickedLever2] - 1]);
|
|
_globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(stampType, false, -2);
|
|
_scene->_sequences.setPosition(_globals._sequenceIndexes[0], pos);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[0], 2);
|
|
}
|
|
|
|
if (_globals[kFlickedLever3]) {
|
|
Common::Point pos;
|
|
int type;
|
|
|
|
getLeverInfo(&pos, &type, _globals[kFlickedLever3], NULL);
|
|
int stampType = -1;
|
|
switch (type) {
|
|
case 1:
|
|
stampType = _globals._spriteIndexes[0];
|
|
break;
|
|
|
|
case 2:
|
|
stampType = _globals._spriteIndexes[1];
|
|
break;
|
|
|
|
case 3:
|
|
stampType = _globals._spriteIndexes[2];
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
_scene->deleteSequence(_skullSequence[_globals[kFlickedLever3] - 1]);
|
|
_globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(stampType, false, -2);
|
|
_scene->_sequences.setPosition(_globals._sequenceIndexes[0], pos);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[0], 2);
|
|
}
|
|
|
|
if (_globals[kFlickedLever4]) {
|
|
Common::Point pos;
|
|
int type;
|
|
|
|
getLeverInfo(&pos, &type, _globals[kFlickedLever4], NULL);
|
|
int stampType = -1;
|
|
switch (type) {
|
|
case 1:
|
|
stampType = _globals._spriteIndexes[0];
|
|
break;
|
|
|
|
case 2:
|
|
stampType = _globals._spriteIndexes[1];
|
|
break;
|
|
|
|
case 3:
|
|
stampType = _globals._spriteIndexes[2];
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
_scene->deleteSequence(_skullSequence[_globals[kFlickedLever4] - 1]);
|
|
_globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(stampType, false, -2);
|
|
_scene->_sequences.setPosition(_globals._sequenceIndexes[0], pos);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[0], 2);
|
|
}
|
|
|
|
sceneEntrySound();
|
|
}
|
|
|
|
void Scene410::step() {
|
|
}
|
|
|
|
void Scene410::actions() {
|
|
if (_action._lookFlag) {
|
|
_vm->_dialogs->show(41013);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_PUSH) || _action.isAction(VERB_PULL)) {
|
|
if (_globals[kDoorIn409IsOpen])
|
|
_vm->_dialogs->show(41014);
|
|
else {
|
|
Common::Point pos;
|
|
int type;
|
|
int number;
|
|
|
|
switch (_game._trigger) {
|
|
case 0:
|
|
_game._player._stepEnabled = false;
|
|
getLeverInfo(&pos, &type, 0, &number);
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[3], false, 4, 2);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 1);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[3], -1, -2);
|
|
if (pos.y == 46)
|
|
pos.y = 48;
|
|
|
|
_scene->_sequences.setPosition(_globals._sequenceIndexes[3], Common::Point(pos.x + 4, pos.y + 107));
|
|
if (!_globals[kDoorIn409IsOpen])
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_SPRITE, 16, 1);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[3], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
|
|
break;
|
|
|
|
case 1:
|
|
getLeverInfo(&pos, &type, 0, &number);
|
|
|
|
if ((_globals[kFlickedLever1] != number) && (_globals[kFlickedLever2] != number) && (_globals[kFlickedLever3] != number) && (_globals[kFlickedLever4] != number)) {
|
|
_vm->_sound->command(65);
|
|
|
|
if (!_globals[kFlickedLever1]) {
|
|
_globals[kFlickedLever1] = number;
|
|
if (_globals[kFlickedLever1] == 5)
|
|
_vm->_sound->command(66);
|
|
} else if (!_globals[kFlickedLever2]) {
|
|
_globals[kFlickedLever2] = number;
|
|
if ((_globals[kFlickedLever1] == 5) && (_globals[kFlickedLever2] == 18))
|
|
_vm->_sound->command(66);
|
|
} else if (!_globals[kFlickedLever3]) {
|
|
_globals[kFlickedLever3] = number;
|
|
if ((_globals[kFlickedLever1] == 5) && (_globals[kFlickedLever2] == 18) && (_globals[kFlickedLever3] == 9))
|
|
_vm->_sound->command(66);
|
|
} else if (!_globals[kFlickedLever4]) {
|
|
_globals[kFlickedLever4] = number;
|
|
if ((_globals[kFlickedLever1] == 5) && (_globals[kFlickedLever2] == 18) && (_globals[kFlickedLever3] == 9) && (_globals[kFlickedLever4] == 11))
|
|
_vm->_sound->command(66);
|
|
}
|
|
|
|
if (_game._difficulty == DIFFICULTY_EASY)
|
|
_scene->drawToBackground(_globals._spriteIndexes[4], number, Common::Point(-32000, -32000), 0, 100);
|
|
|
|
switch (type) {
|
|
case 1:
|
|
_scene->deleteSequence(_skullSequence[number - 1]);
|
|
_globals._sequenceIndexes[0] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[0], false, 4, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[0], 2);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[0], -1, -2);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[0], SEQUENCE_TRIGGER_EXPIRE, 0, 4);
|
|
_scene->_sequences.setPosition(_globals._sequenceIndexes[0], pos);
|
|
break;
|
|
|
|
case 2:
|
|
_scene->deleteSequence(_skullSequence[number - 1]);
|
|
_globals._sequenceIndexes[1] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[1], false, 4, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 2);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[1], -1, -2);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 4);
|
|
_scene->_sequences.setPosition(_globals._sequenceIndexes[1], pos);
|
|
break;
|
|
|
|
case 3:
|
|
_scene->deleteSequence(_skullSequence[number - 1]);
|
|
_globals._sequenceIndexes[2] = _scene->_sequences.addSpriteCycle(_globals._spriteIndexes[2], false, 4, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 2);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[2], -1, -2);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[2], SEQUENCE_TRIGGER_EXPIRE, 0, 4);
|
|
_scene->_sequences.setPosition(_globals._sequenceIndexes[2], pos);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
_game._player._stepEnabled = true;
|
|
|
|
if ((_globals[kFlickedLever1] == 5) && (_globals[kFlickedLever2] == 18) && (_globals[kFlickedLever3] == 9) && (_globals[kFlickedLever4] == 11) && !_globals[kDoorIn409IsOpen])
|
|
_vm->_sound->command(67);
|
|
|
|
if (_globals[kFlickedLever1] && _globals[kFlickedLever2] && _globals[kFlickedLever3] && _globals[kFlickedLever4])
|
|
_scene->_nextSceneId = 409;
|
|
|
|
break;
|
|
|
|
case 4:
|
|
getLeverInfo(&pos, &type, 0, &number);
|
|
_globals._sequenceIndexes[0] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[0], false, -2);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[0], 2);
|
|
_scene->_sequences.setPosition(_globals._sequenceIndexes[0], pos);
|
|
break;
|
|
|
|
case 5:
|
|
getLeverInfo(&pos, &type, 0, &number);
|
|
_globals._sequenceIndexes[1] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[1], false, -2);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[1], 2);
|
|
_scene->_sequences.setPosition(_globals._sequenceIndexes[1], pos);
|
|
break;
|
|
|
|
case 6:
|
|
getLeverInfo(&pos, &type, 0, &number);
|
|
_globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, -2);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 2);
|
|
_scene->_sequences.setPosition(_globals._sequenceIndexes[2], pos);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_LOOK) || _action.isAction(VERB_LOOK_AT)) {
|
|
if (_action.isObject(NOUN_WALL)) {
|
|
_vm->_dialogs->show(41011);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_SWITCH_PANEL)) {
|
|
_vm->_dialogs->show(41011);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_CATACOMB_ROOM)) {
|
|
_vm->_dialogs->show(41015);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
switch (_action._activeAction._objectNameId) {
|
|
case NOUN_SKULL_SWITCH_1:
|
|
case NOUN_SKULL_SWITCH_2:
|
|
case NOUN_SKULL_SWITCH_3:
|
|
case NOUN_SKULL_SWITCH_4:
|
|
case NOUN_SKULL_SWITCH_5:
|
|
case NOUN_SKULL_SWITCH_6:
|
|
case NOUN_SKULL_SWITCH_7:
|
|
case NOUN_SKULL_SWITCH_8:
|
|
case NOUN_SKULL_SWITCH_9:
|
|
case NOUN_SKULL_SWITCH_10:
|
|
case NOUN_SKULL_SWITCH_11:
|
|
case NOUN_SKULL_SWITCH_12:
|
|
case NOUN_SKULL_SWITCH_13:
|
|
case NOUN_SKULL_SWITCH_14:
|
|
case NOUN_SKULL_SWITCH_15:
|
|
case NOUN_SKULL_SWITCH_16:
|
|
case NOUN_SKULL_SWITCH_17:
|
|
case NOUN_SKULL_SWITCH_18:
|
|
case NOUN_SKULL_SWITCH_19:
|
|
case NOUN_SKULL_SWITCH_20:
|
|
case NOUN_SKULL_SWITCH_21:
|
|
case NOUN_SKULL_SWITCH_22:
|
|
case NOUN_SKULL_SWITCH_23:
|
|
case NOUN_SKULL_SWITCH_24:
|
|
case NOUN_SKULL_SWITCH_25:
|
|
case NOUN_SKULL_SWITCH_26:
|
|
_vm->_dialogs->show(41012);
|
|
_action._inProgress = false;
|
|
return;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (_action.isAction(VERB_EXIT_TO, NOUN_CATACOMB_ROOM)) {
|
|
_scene->_nextSceneId = 409;
|
|
_action._inProgress = false;
|
|
}
|
|
}
|
|
|
|
void Scene410::preActions() {
|
|
}
|
|
|
|
void Scene410::getLeverInfo(Common::Point *pos, int *type, int lever, int *noun) {
|
|
if (noun != NULL) {
|
|
switch (_action._activeAction._objectNameId) {
|
|
case NOUN_SKULL_SWITCH_1:
|
|
lever = 1;
|
|
break;
|
|
|
|
case NOUN_SKULL_SWITCH_2:
|
|
lever = 2;
|
|
break;
|
|
|
|
case NOUN_SKULL_SWITCH_3:
|
|
lever = 3;
|
|
break;
|
|
|
|
case NOUN_SKULL_SWITCH_4:
|
|
lever = 4;
|
|
break;
|
|
|
|
case NOUN_SKULL_SWITCH_5:
|
|
lever = 5;
|
|
break;
|
|
|
|
case NOUN_SKULL_SWITCH_6:
|
|
lever = 6;
|
|
break;
|
|
|
|
case NOUN_SKULL_SWITCH_7:
|
|
lever = 7;
|
|
break;
|
|
|
|
case NOUN_SKULL_SWITCH_8:
|
|
lever = 8;
|
|
break;
|
|
|
|
case NOUN_SKULL_SWITCH_9:
|
|
lever = 9;
|
|
break;
|
|
|
|
case NOUN_SKULL_SWITCH_10:
|
|
lever = 10;
|
|
break;
|
|
|
|
case NOUN_SKULL_SWITCH_11:
|
|
lever = 11;
|
|
break;
|
|
|
|
case NOUN_SKULL_SWITCH_12:
|
|
lever = 12;
|
|
break;
|
|
|
|
case NOUN_SKULL_SWITCH_13:
|
|
lever = 13;
|
|
break;
|
|
|
|
case NOUN_SKULL_SWITCH_14:
|
|
lever = 14;
|
|
break;
|
|
|
|
case NOUN_SKULL_SWITCH_15:
|
|
lever = 15;
|
|
break;
|
|
|
|
case NOUN_SKULL_SWITCH_16:
|
|
lever = 16;
|
|
break;
|
|
|
|
case NOUN_SKULL_SWITCH_17:
|
|
lever = 17;
|
|
break;
|
|
|
|
case NOUN_SKULL_SWITCH_18:
|
|
lever = 18;
|
|
break;
|
|
|
|
case NOUN_SKULL_SWITCH_19:
|
|
lever = 19;
|
|
break;
|
|
|
|
case NOUN_SKULL_SWITCH_20:
|
|
lever = 20;
|
|
break;
|
|
|
|
case NOUN_SKULL_SWITCH_21:
|
|
lever = 21;
|
|
break;
|
|
|
|
case NOUN_SKULL_SWITCH_22:
|
|
lever = 22;
|
|
break;
|
|
|
|
case NOUN_SKULL_SWITCH_23:
|
|
lever = 23;
|
|
break;
|
|
|
|
case NOUN_SKULL_SWITCH_24:
|
|
lever = 24;
|
|
break;
|
|
|
|
case NOUN_SKULL_SWITCH_25:
|
|
lever = 25;
|
|
break;
|
|
|
|
case NOUN_SKULL_SWITCH_26:
|
|
lever = 26;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
*noun = lever;
|
|
}
|
|
|
|
switch (lever) {
|
|
case 1:
|
|
*pos = Common::Point(124, 46);
|
|
*type = 3;
|
|
break;
|
|
|
|
case 2:
|
|
*pos = Common::Point(143, 46);
|
|
*type = 2;
|
|
break;
|
|
|
|
case 3:
|
|
*pos = Common::Point(162, 46);
|
|
*type = 1;
|
|
break;
|
|
|
|
case 4:
|
|
*pos = Common::Point(181, 46);
|
|
*type = 3;
|
|
break;
|
|
|
|
case 5:
|
|
*pos = Common::Point(200, 46);
|
|
*type = 1;
|
|
break;
|
|
|
|
case 6:
|
|
*pos = Common::Point(219, 46);
|
|
*type = 2;
|
|
break;
|
|
|
|
case 7:
|
|
*pos = Common::Point(238, 46);
|
|
*type = 1;
|
|
break;
|
|
|
|
case 8:
|
|
*pos = Common::Point(133, 71);
|
|
*type = 3;
|
|
break;
|
|
|
|
case 9:
|
|
*pos = Common::Point(152, 71);
|
|
*type = 2;
|
|
break;
|
|
|
|
case 10:
|
|
*pos = Common::Point(171, 71);
|
|
*type = 1;
|
|
break;
|
|
|
|
case 11:
|
|
*pos = Common::Point(190, 71);
|
|
*type = 3;
|
|
break;
|
|
|
|
case 12:
|
|
*pos = Common::Point(209, 71);
|
|
*type = 2;
|
|
break;
|
|
|
|
case 13:
|
|
*pos = Common::Point(228, 71);
|
|
*type = 1;
|
|
break;
|
|
|
|
case 14:
|
|
*pos = Common::Point(124, 98);
|
|
*type = 1;
|
|
break;
|
|
|
|
case 15:
|
|
*pos = Common::Point(143, 98);
|
|
*type = 3;
|
|
break;
|
|
|
|
case 16:
|
|
*pos = Common::Point(162, 98);
|
|
*type = 2;
|
|
break;
|
|
|
|
case 17:
|
|
*pos = Common::Point(181, 98);
|
|
*type = 1;
|
|
break;
|
|
|
|
case 18:
|
|
*pos = Common::Point(200, 98);
|
|
*type = 1;
|
|
break;
|
|
|
|
case 19:
|
|
*pos = Common::Point(219, 98);
|
|
*type = 2;
|
|
break;
|
|
|
|
case 20:
|
|
*pos = Common::Point(238, 98);
|
|
*type = 1;
|
|
break;
|
|
|
|
case 21:
|
|
*pos = Common::Point(133, 125);
|
|
*type = 3;
|
|
break;
|
|
|
|
case 22:
|
|
*pos = Common::Point(152, 125);
|
|
*type = 1;
|
|
break;
|
|
|
|
case 23:
|
|
*pos = Common::Point(171, 125);
|
|
*type = 3;
|
|
break;
|
|
|
|
case 24:
|
|
*pos = Common::Point(190, 125);
|
|
*type = 2;
|
|
break;
|
|
|
|
case 25:
|
|
*pos = Common::Point(209, 125);
|
|
*type = 1;
|
|
break;
|
|
|
|
case 26:
|
|
*pos = Common::Point(228, 125);
|
|
*type = 2;
|
|
break;
|
|
|
|
default:
|
|
*pos = Common::Point(-1, -1);
|
|
*type = -1;
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
Scene453::Scene453(MADSEngine *vm) : Scene4xx(vm) {
|
|
_frameInRoomFl = false;
|
|
_takingFrameInRoomFl = false;
|
|
|
|
_redFrameHotspotId = -1;
|
|
_greenFrameHotspotId = -1;
|
|
_blueFrameHotspotId = -1;
|
|
_yellowFrameHotspotId = -1;
|
|
}
|
|
|
|
void Scene453::synchronize(Common::Serializer &s) {
|
|
Scene4xx::synchronize(s);
|
|
|
|
s.syncAsByte(_frameInRoomFl);
|
|
s.syncAsByte(_takingFrameInRoomFl);
|
|
|
|
s.syncAsSint16LE(_redFrameHotspotId);
|
|
s.syncAsSint16LE(_greenFrameHotspotId);
|
|
s.syncAsSint16LE(_blueFrameHotspotId);
|
|
s.syncAsSint16LE(_yellowFrameHotspotId);
|
|
}
|
|
|
|
void Scene453::setup() {
|
|
setPlayerSpritesPrefix();
|
|
setAAName();
|
|
|
|
if (_globals[kCatacombsMisc] & MAZE_EVENT_STONE)
|
|
_scene->_variant = 1;
|
|
|
|
_scene->addActiveVocab(NOUN_RED_FRAME);
|
|
_scene->addActiveVocab(NOUN_YELLOW_FRAME);
|
|
_scene->addActiveVocab(NOUN_BLUE_FRAME);
|
|
_scene->addActiveVocab(NOUN_GREEN_FRAME);
|
|
}
|
|
|
|
void Scene453::enter() {
|
|
_game.initCatacombs();
|
|
|
|
_scene->_hotspots.activate(NOUN_SKULL, false);
|
|
_scene->_hotspots.activate(NOUN_DRAIN, false);
|
|
_scene->_hotspots.activate(NOUN_RATS_NEST, false);
|
|
_scene->_hotspots.activate(NOUN_WEB, false);
|
|
_scene->_hotspots.activate(NOUN_STONE, false);
|
|
_scene->_hotspots.activate(NOUN_HOLE, false);
|
|
_scene->_hotspots.activate(NOUN_GATE, false);
|
|
|
|
_globals._spriteIndexes[8] = _scene->_sprites.addSprites("*RRD_9");
|
|
_globals._spriteIndexes[9] = _scene->_sprites.addSprites(formAnimName('f', 0));
|
|
_globals._spriteIndexes[10] = _scene->_sprites.addSprites(formAnimName('f', 1));
|
|
_globals._spriteIndexes[11] = _scene->_sprites.addSprites(formAnimName('f', 2));
|
|
_globals._spriteIndexes[12] = _scene->_sprites.addSprites(formAnimName('f', 3));
|
|
|
|
|
|
if (_game.exitCatacombs(0) == -1) {
|
|
_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('c', 1));
|
|
_scene->drawToBackground(_globals._spriteIndexes[1], 1, Common::Point(-32000, -32000), 0, 100);
|
|
_scene->_hotspots.activate(NOUN_ARCHWAY_TO_NORTH, false);
|
|
}
|
|
|
|
if (_game.exitCatacombs(3) == -1) {
|
|
_globals._spriteIndexes[13] = _scene->_sprites.addSprites(formAnimName('c', 8));
|
|
_scene->drawToBackground(_globals._spriteIndexes[13], 1, Common::Point(-32000, -32000), 0, 100);
|
|
_scene->_hotspots.activate(NOUN_MORE_CATACOMBS, false);
|
|
_scene->_hotspots.activate(NOUN_GATE, true);
|
|
}
|
|
|
|
if (_game.exitCatacombs(1) == -1) {
|
|
_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('c', 2));
|
|
_scene->drawToBackground(_globals._spriteIndexes[2], 1, Common::Point(-32000, -32000), 0, 100);
|
|
_scene->_hotspots.activate(NOUN_ARCHWAY_TO_EAST, false);
|
|
}
|
|
|
|
if (_globals[kCatacombsMisc] & MAZE_EVENT_DRAIN) {
|
|
_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('c', 3));
|
|
_scene->drawToBackground(_globals._spriteIndexes[3], 1, Common::Point(-32000, -32000), 0, 100);
|
|
_scene->_hotspots.activate(NOUN_DRAIN, true);
|
|
}
|
|
|
|
if (_globals[kCatacombsMisc] & MAZE_EVENT_RAT_NEST) {
|
|
_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('c', 4));
|
|
_scene->drawToBackground(_globals._spriteIndexes[4], 1, Common::Point(-32000, -32000), 0, 100);
|
|
_scene->_hotspots.activate(NOUN_SKULL, true);
|
|
_scene->_hotspots.activate(NOUN_RATS_NEST, true);
|
|
}
|
|
|
|
if (_globals[kCatacombsMisc] & MAZE_EVENT_WEB) {
|
|
_globals._spriteIndexes[5] = _scene->_sprites.addSprites(formAnimName('c', 5));
|
|
_scene->drawToBackground(_globals._spriteIndexes[5], 1, Common::Point(-32000, -32000), 0, 100);
|
|
_scene->_hotspots.activate(NOUN_WEB, true);
|
|
}
|
|
|
|
if (_globals[kCatacombsMisc] & MAZE_EVENT_BRICK) {
|
|
_globals._spriteIndexes[6] = _scene->_sprites.addSprites(formAnimName('c', 6));
|
|
_scene->drawToBackground(_globals._spriteIndexes[6], 1, Common::Point(-32000, -32000), 0, 100);
|
|
_scene->_hotspots.activateAtPos(NOUN_EXPOSED_BRICK, false, Common::Point(138, 35));
|
|
_scene->_hotspots.activateAtPos(NOUN_EXPOSED_BRICK, false, Common::Point(84, 27));
|
|
}
|
|
|
|
if (_globals[kCatacombsMisc] & MAZE_EVENT_STONE) {
|
|
_globals._spriteIndexes[7] = _scene->_sprites.addSprites(formAnimName('c', 7));
|
|
_scene->drawToBackground(_globals._spriteIndexes[7], 1, Common::Point(-32000, -32000), 0, 100);
|
|
_scene->_hotspots.activate(NOUN_HOLE, true);
|
|
_scene->_hotspots.activate(NOUN_STONE, true);
|
|
}
|
|
|
|
if (_scene->_priorSceneId != RETURNING_FROM_LOADING) {
|
|
switch (_globals[kCatacombsFrom]) {
|
|
case 0:
|
|
_game._player._playerPos = Common::Point(107, 87);
|
|
_game._player._facing = FACING_SOUTH;
|
|
_game._player.walk(Common::Point(107, 98), FACING_SOUTH);
|
|
break;
|
|
|
|
case 1:
|
|
_game._player._playerPos = Common::Point(316, 129);
|
|
_game._player._facing = FACING_WEST;
|
|
_game._player.walk(Common::Point(277, 129), FACING_WEST);
|
|
break;
|
|
|
|
case 3:
|
|
_game._player.firstWalk(Common::Point(-20, 128), FACING_EAST, Common::Point(19, 128), FACING_EAST, true);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (_game._objects[OBJ_RED_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_globals._sequenceIndexes[9] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[9], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[9]]->getFramePos(0);
|
|
_redFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_RED_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_redFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_game._objects[OBJ_GREEN_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_globals._sequenceIndexes[10] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[10], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[10], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[9]]->getFramePos(0);
|
|
_greenFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_GREEN_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_greenFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_game._objects[OBJ_BLUE_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_globals._sequenceIndexes[11] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[11], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[11], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[9]]->getFramePos(0);
|
|
_blueFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_BLUE_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_blueFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_game._objects[OBJ_YELLOW_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_globals._sequenceIndexes[12] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[12], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[12], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[9]]->getFramePos(0);
|
|
_yellowFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_YELLOW_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_yellowFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
sceneEntrySound();
|
|
}
|
|
|
|
void Scene453::step() {
|
|
}
|
|
|
|
void Scene453::actions() {
|
|
if (_action.isAction(VERB_PUT) && _action.isTarget(NOUN_FLOOR)) {
|
|
if (_action.isObject(NOUN_RED_FRAME) || _action.isObject(NOUN_BLUE_FRAME) || _action.isObject(NOUN_YELLOW_FRAME) || _action.isObject(NOUN_GREEN_FRAME)) {
|
|
if (_frameInRoomFl)
|
|
_vm->_dialogs->show(29);
|
|
else {
|
|
switch (_game._trigger) {
|
|
case (0):
|
|
_game._player._stepEnabled = false;
|
|
_game._player._visible = false;
|
|
_globals._sequenceIndexes[8] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[8], true, 5, 2);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[8], 1, 5);
|
|
_scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[8], true);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_SPRITE, 5, 1);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
|
|
break;
|
|
|
|
case 1:
|
|
if (_action.isObject(NOUN_RED_FRAME)) {
|
|
_game._objects.setRoom(OBJ_RED_FRAME, NOWHERE);
|
|
_game._objects[OBJ_RED_FRAME]._roomNumber = _globals[kCatacombsRoom] + 600;
|
|
_globals._sequenceIndexes[9] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[9], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[9], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[9]]->getFramePos(0);
|
|
_redFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_RED_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_redFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_GREEN_FRAME)) {
|
|
_game._objects.setRoom(OBJ_GREEN_FRAME, NOWHERE);
|
|
_game._objects[OBJ_GREEN_FRAME]._roomNumber = _globals[kCatacombsRoom] + 600;
|
|
_globals._sequenceIndexes[10] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[10], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[10], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[9]]->getFramePos(0);
|
|
_greenFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_GREEN_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_greenFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_BLUE_FRAME)) {
|
|
_game._objects.setRoom(OBJ_BLUE_FRAME, NOWHERE);
|
|
_game._objects[OBJ_BLUE_FRAME]._roomNumber = _globals[kCatacombsRoom] + 600;
|
|
_globals._sequenceIndexes[11] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[11], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[11], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[9]]->getFramePos(0);
|
|
_blueFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_BLUE_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_blueFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_YELLOW_FRAME)) {
|
|
_game._objects.setRoom(OBJ_YELLOW_FRAME, NOWHERE);
|
|
_game._objects[OBJ_YELLOW_FRAME]._roomNumber = _globals[kCatacombsRoom] + 600;
|
|
_globals._sequenceIndexes[12] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[12], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[12], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[9]]->getFramePos(0);
|
|
_yellowFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_YELLOW_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_yellowFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
_game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[8]);
|
|
_game._player._visible = true;
|
|
_game._player._stepEnabled = true;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (_action.isAction(VERB_TAKE)) {
|
|
if (_action.isObject(NOUN_RED_FRAME) || _action.isObject(NOUN_GREEN_FRAME) || _action.isObject(NOUN_BLUE_FRAME) || _action.isObject(NOUN_YELLOW_FRAME)) {
|
|
if ((_takingFrameInRoomFl || _game._trigger)) {
|
|
switch (_game._trigger) {
|
|
case (0):
|
|
_game._player._stepEnabled = false;
|
|
_game._player._visible = false;
|
|
_globals._sequenceIndexes[8] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[8], true, 5, 2);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[8], 1, 5);
|
|
_scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[8], true);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_SPRITE, 5, 1);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[8], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
|
|
break;
|
|
|
|
case 1:
|
|
if (_action.isObject(NOUN_RED_FRAME)) {
|
|
_scene->deleteSequence(_globals._sequenceIndexes[9]);
|
|
_scene->_dynamicHotspots.remove(_redFrameHotspotId);
|
|
_game._objects.addToInventory(OBJ_RED_FRAME);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_GREEN_FRAME)) {
|
|
_scene->deleteSequence(_globals._sequenceIndexes[10]);
|
|
_scene->_dynamicHotspots.remove(_greenFrameHotspotId);
|
|
_game._objects.addToInventory(OBJ_GREEN_FRAME);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_BLUE_FRAME)) {
|
|
_scene->deleteSequence(_globals._sequenceIndexes[11]);
|
|
_scene->_dynamicHotspots.remove(_blueFrameHotspotId);
|
|
_game._objects.addToInventory(OBJ_BLUE_FRAME);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_YELLOW_FRAME)) {
|
|
_scene->deleteSequence(_globals._sequenceIndexes[12]);
|
|
_scene->_dynamicHotspots.remove(_yellowFrameHotspotId);
|
|
_game._objects.addToInventory(OBJ_YELLOW_FRAME);
|
|
}
|
|
|
|
_vm->_sound->command(26);
|
|
break;
|
|
|
|
case 2:
|
|
_game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[8]);
|
|
_game._player._visible = true;
|
|
_game._player._stepEnabled = true;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (_action.isAction(VERB_WALK_THROUGH, NOUN_ARCHWAY_TO_NORTH)) {
|
|
_game.moveCatacombs(0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_WALK_THROUGH, NOUN_ARCHWAY_TO_EAST)) {
|
|
_game.moveCatacombs(1);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action._lookFlag) {
|
|
_vm->_dialogs->show(45310);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_LOOK) || _action.isAction(VERB_LOOK_AT)) {
|
|
if (_action.isObject(NOUN_WALL)) {
|
|
_vm->_dialogs->show(45311);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_FLOOR)) {
|
|
_vm->_dialogs->show(45312);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_ARCHWAY)) {
|
|
_vm->_dialogs->show(45313);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_EXPOSED_BRICK)) {
|
|
_vm->_dialogs->show(45314);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_HOLE)) {
|
|
_vm->_dialogs->show(45317);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_SKULL)) {
|
|
_vm->_dialogs->show(45318);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_WEB)) {
|
|
_vm->_dialogs->show(45324);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_RATS_NEST)) {
|
|
_vm->_dialogs->show(45325);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_DRAIN)) {
|
|
_vm->_dialogs->show(45327);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_STONE)) {
|
|
_vm->_dialogs->show(45328);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_RED_FRAME) && !_game._objects.isInInventory(OBJ_RED_FRAME)) {
|
|
_vm->_dialogs->showItem(OBJ_RED_FRAME, 802, 0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_GREEN_FRAME) && !_game._objects.isInInventory(OBJ_GREEN_FRAME)) {
|
|
_vm->_dialogs->showItem(OBJ_GREEN_FRAME, 819, 0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_BLUE_FRAME) && !_game._objects.isInInventory(OBJ_BLUE_FRAME)) {
|
|
_vm->_dialogs->showItem(OBJ_BLUE_FRAME, 817, 0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_YELLOW_FRAME) && !_game._objects.isInInventory(OBJ_YELLOW_FRAME)) {
|
|
_vm->_dialogs->showItem(OBJ_YELLOW_FRAME, 804, 0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_MORE_CATACOMBS)) {
|
|
_vm->_dialogs->show(45315);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_GATE)) {
|
|
_vm->_dialogs->show(45330);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (_action.isAction(VERB_TAKE, NOUN_SKULL)) {
|
|
_vm->_dialogs->show(45319);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_OPEN, NOUN_GATE)) {
|
|
_vm->_dialogs->show(45331);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_TAKE, NOUN_RATS_NEST)) {
|
|
_vm->_dialogs->show(45326);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_TAKE, NOUN_STONE)) {
|
|
_vm->_dialogs->show(45329);
|
|
_action._inProgress = false;
|
|
}
|
|
}
|
|
|
|
void Scene453::preActions() {
|
|
if (_action.isAction(VERB_EXIT_TO, NOUN_MORE_CATACOMBS))
|
|
_game.moveCatacombs(3);
|
|
|
|
_frameInRoomFl = false;
|
|
_takingFrameInRoomFl = false;
|
|
|
|
if (_game._objects[OBJ_RED_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_frameInRoomFl = true;
|
|
if (_action.isAction(VERB_TAKE, NOUN_RED_FRAME))
|
|
_takingFrameInRoomFl = true;
|
|
}
|
|
|
|
if (_game._objects[OBJ_YELLOW_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_frameInRoomFl = true;
|
|
if (_action.isAction(VERB_TAKE, NOUN_YELLOW_FRAME))
|
|
_takingFrameInRoomFl = true;
|
|
}
|
|
|
|
if (_game._objects[OBJ_BLUE_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_frameInRoomFl = true;
|
|
if (_action.isAction(VERB_TAKE, NOUN_BLUE_FRAME))
|
|
_takingFrameInRoomFl = true;
|
|
}
|
|
|
|
if (_game._objects[OBJ_GREEN_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_frameInRoomFl = true;
|
|
if (_action.isAction(VERB_TAKE, NOUN_GREEN_FRAME))
|
|
_takingFrameInRoomFl = true;
|
|
}
|
|
|
|
if (_action.isAction(VERB_PUT) && _action.isTarget(NOUN_FLOOR) && (_action.isObject(NOUN_RED_FRAME) || _action.isObject(NOUN_BLUE_FRAME) || _action.isObject(NOUN_YELLOW_FRAME) || _action.isObject(NOUN_GREEN_FRAME))) {
|
|
if (_frameInRoomFl)
|
|
_game._player._needToWalk = false;
|
|
else {
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[9]]->getFramePos(0);
|
|
_game._player.walk(Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
}
|
|
}
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
Scene456::Scene456(MADSEngine *vm) : Scene4xx(vm) {
|
|
_frameInRoomFl = false;
|
|
_takingFrameInRoomFl = false;
|
|
|
|
_redFrameHotspotId = -1;
|
|
_greenFrameHotspotId = -1;
|
|
_blueFrameHotspotId = -1;
|
|
_yellowFrameHotspotId = -1;
|
|
}
|
|
|
|
void Scene456::synchronize(Common::Serializer &s) {
|
|
Scene4xx::synchronize(s);
|
|
|
|
s.syncAsByte(_frameInRoomFl);
|
|
s.syncAsByte(_takingFrameInRoomFl);
|
|
|
|
s.syncAsSint16LE(_redFrameHotspotId);
|
|
s.syncAsSint16LE(_greenFrameHotspotId);
|
|
s.syncAsSint16LE(_blueFrameHotspotId);
|
|
s.syncAsSint16LE(_yellowFrameHotspotId);
|
|
}
|
|
|
|
void Scene456::setup() {
|
|
setPlayerSpritesPrefix();
|
|
setAAName();
|
|
|
|
_scene->addActiveVocab(NOUN_RED_FRAME);
|
|
_scene->addActiveVocab(NOUN_YELLOW_FRAME);
|
|
_scene->addActiveVocab(NOUN_BLUE_FRAME);
|
|
_scene->addActiveVocab(NOUN_GREEN_FRAME);
|
|
}
|
|
|
|
void Scene456::enter() {
|
|
_game.initCatacombs();
|
|
|
|
_globals._spriteIndexes[0] = _scene->_sprites.addSprites(formAnimName('c', 1));
|
|
_globals._spriteIndexes[1] = _scene->_sprites.addSprites("*RRD_9");
|
|
_globals._spriteIndexes[2] = _scene->_sprites.addSprites(formAnimName('f', 0));
|
|
_globals._spriteIndexes[3] = _scene->_sprites.addSprites(formAnimName('f', 1));
|
|
_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('f', 2));
|
|
_globals._spriteIndexes[5] = _scene->_sprites.addSprites(formAnimName('f', 3));
|
|
|
|
if (_game.exitCatacombs(1) == -1) {
|
|
_scene->drawToBackground(_globals._spriteIndexes[0], 1, Common::Point(-32000, -32000), 0, 100);
|
|
_scene->_hotspots.activate(NOUN_ARCHWAY_TO_EAST, false);
|
|
}
|
|
|
|
if (_scene->_priorSceneId != RETURNING_FROM_LOADING) {
|
|
switch (_globals[kCatacombsFrom]) {
|
|
case 1:
|
|
_game._player._playerPos = Common::Point(298, 123);
|
|
_game._player._facing = FACING_WEST;
|
|
_game._player.walk(Common::Point(254, 123), FACING_WEST);
|
|
break;
|
|
|
|
case 3:
|
|
_game._player._playerPos = Common::Point(14, 117);
|
|
_game._player._facing = FACING_SOUTH;
|
|
_game._player.walk(Common::Point(46, 117), FACING_EAST);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (_game._objects[OBJ_RED_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[2]]->getFramePos(0);
|
|
_redFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_RED_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_redFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_game._objects[OBJ_GREEN_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[3], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[2]]->getFramePos(0);
|
|
_greenFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_GREEN_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_greenFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_game._objects[OBJ_BLUE_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_globals._sequenceIndexes[4] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[4], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[2]]->getFramePos(0);
|
|
_blueFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_BLUE_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_blueFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_game._objects[OBJ_YELLOW_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_globals._sequenceIndexes[5] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[5], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[5], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[2]]->getFramePos(0);
|
|
_yellowFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_YELLOW_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_yellowFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
sceneEntrySound();
|
|
}
|
|
|
|
void Scene456::step() {
|
|
}
|
|
|
|
void Scene456::actions() {
|
|
if (_action.isAction(VERB_PUT) && _action.isTarget(NOUN_FLOOR)) {
|
|
if (_action.isObject(NOUN_RED_FRAME) || _action.isObject(NOUN_BLUE_FRAME) || _action.isObject(NOUN_YELLOW_FRAME) || _action.isObject(NOUN_GREEN_FRAME)) {
|
|
if (_frameInRoomFl) {
|
|
_vm->_dialogs->show(29);
|
|
} else {
|
|
switch (_game._trigger) {
|
|
case (0):
|
|
_game._player._stepEnabled = false;
|
|
_game._player._visible = false;
|
|
_globals._sequenceIndexes[1] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[1], true, 5, 2);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[1], 1, 5);
|
|
_scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[1], true);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_SPRITE, 5, 1);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
|
|
break;
|
|
|
|
case 1:
|
|
if (_action.isObject(NOUN_RED_FRAME)) {
|
|
_game._objects.setRoom(OBJ_RED_FRAME, NOWHERE);
|
|
_game._objects[OBJ_RED_FRAME]._roomNumber = _globals[kCatacombsRoom] + 600;
|
|
_globals._sequenceIndexes[2] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[2], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[2], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[2]]->getFramePos(0);
|
|
_redFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_RED_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_redFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_GREEN_FRAME)) {
|
|
_game._objects.setRoom(OBJ_GREEN_FRAME, NOWHERE);
|
|
_game._objects[OBJ_GREEN_FRAME]._roomNumber = _globals[kCatacombsRoom] + 600;
|
|
_globals._sequenceIndexes[3] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[3], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[3], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[2]]->getFramePos(0);
|
|
_greenFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_GREEN_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_greenFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_BLUE_FRAME)) {
|
|
_game._objects.setRoom(OBJ_BLUE_FRAME, NOWHERE);
|
|
_game._objects[OBJ_BLUE_FRAME]._roomNumber = _globals[kCatacombsRoom] + 600;
|
|
_globals._sequenceIndexes[4] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[4], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[4], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[2]]->getFramePos(0);
|
|
_blueFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_BLUE_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_blueFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_YELLOW_FRAME)) {
|
|
_game._objects.setRoom(OBJ_YELLOW_FRAME, NOWHERE);
|
|
_game._objects[OBJ_YELLOW_FRAME]._roomNumber = _globals[kCatacombsRoom] + 600;
|
|
_globals._sequenceIndexes[5] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[5], false, 1);
|
|
_scene->_sequences.setDepth(_globals._sequenceIndexes[5], 14);
|
|
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[2]]->getFramePos(0);
|
|
_yellowFrameHotspotId = _scene->_dynamicHotspots.add(NOUN_YELLOW_FRAME, VERB_WALK_TO, SYNTAX_SINGULAR, EXT_NONE, Common::Rect(pos.x - 5, pos.y - 5, pos.x + 5, pos.y + 1));
|
|
_scene->_dynamicHotspots.setPosition(_yellowFrameHotspotId, Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
_game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[1]);
|
|
_game._player._visible = true;
|
|
_game._player._stepEnabled = true;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
if (_action.isAction(VERB_TAKE)
|
|
&& (_action.isObject(NOUN_RED_FRAME) || _action.isObject(NOUN_GREEN_FRAME) || _action.isObject(NOUN_BLUE_FRAME) || _action.isObject(NOUN_YELLOW_FRAME))) {
|
|
if ((_takingFrameInRoomFl || _game._trigger)) {
|
|
switch (_game._trigger) {
|
|
case (0):
|
|
_game._player._stepEnabled = false;
|
|
_game._player._visible = false;
|
|
_globals._sequenceIndexes[1] = _scene->_sequences.startPingPongCycle(_globals._spriteIndexes[1], true, 5, 2);
|
|
_scene->_sequences.setAnimRange(_globals._sequenceIndexes[1], 1, 5);
|
|
_scene->_sequences.setSeqPlayer(_globals._sequenceIndexes[1], true);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_SPRITE, 5, 1);
|
|
_scene->_sequences.addSubEntry(_globals._sequenceIndexes[1], SEQUENCE_TRIGGER_EXPIRE, 0, 2);
|
|
break;
|
|
|
|
case 1:
|
|
if (_action.isObject(NOUN_RED_FRAME)) {
|
|
_scene->deleteSequence(_globals._sequenceIndexes[2]);
|
|
_scene->_dynamicHotspots.remove(_redFrameHotspotId);
|
|
_game._objects.addToInventory(OBJ_RED_FRAME);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_GREEN_FRAME)) {
|
|
_scene->deleteSequence(_globals._sequenceIndexes[3]);
|
|
_scene->_dynamicHotspots.remove(_greenFrameHotspotId);
|
|
_game._objects.addToInventory(OBJ_GREEN_FRAME);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_BLUE_FRAME)) {
|
|
_scene->deleteSequence(_globals._sequenceIndexes[4]);
|
|
_scene->_dynamicHotspots.remove(_blueFrameHotspotId);
|
|
_game._objects.addToInventory(OBJ_BLUE_FRAME);
|
|
}
|
|
|
|
if (_action.isObject(NOUN_YELLOW_FRAME)) {
|
|
_scene->deleteSequence(_globals._sequenceIndexes[5]);
|
|
_scene->_dynamicHotspots.remove(_yellowFrameHotspotId);
|
|
_game._objects.addToInventory(OBJ_YELLOW_FRAME);
|
|
}
|
|
|
|
_vm->_sound->command(26);
|
|
break;
|
|
|
|
case 2:
|
|
_game.syncTimers(SYNC_PLAYER, 0, SYNC_SEQ, _globals._sequenceIndexes[1]);
|
|
_game._player._visible = true;
|
|
_game._player._stepEnabled = true;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (_action.isAction(VERB_WALK_THROUGH, NOUN_ARCHWAY_TO_WEST)) {
|
|
_game.moveCatacombs(3);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_WALK_THROUGH, NOUN_ARCHWAY_TO_EAST)) {
|
|
_game.moveCatacombs(1);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action._lookFlag) {
|
|
_vm->_dialogs->show(45610);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isAction(VERB_LOOK) || _action.isAction(VERB_LOOK_AT)) {
|
|
if (_action.isObject(NOUN_WALL)) {
|
|
_vm->_dialogs->show(45611);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_FLOOR)) {
|
|
_vm->_dialogs->show(45612);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_ARCHWAY)) {
|
|
_vm->_dialogs->show(45613);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_EXPOSED_BRICK)) {
|
|
_vm->_dialogs->show(45614);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_RED_FRAME) && !_game._objects.isInInventory(OBJ_RED_FRAME)) {
|
|
_vm->_dialogs->showItem(OBJ_RED_FRAME, 802, 0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_GREEN_FRAME) && !_game._objects.isInInventory(OBJ_GREEN_FRAME)) {
|
|
_vm->_dialogs->showItem(OBJ_GREEN_FRAME, 819, 0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_BLUE_FRAME) && !_game._objects.isInInventory(OBJ_BLUE_FRAME)) {
|
|
_vm->_dialogs->showItem(OBJ_BLUE_FRAME, 817, 0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_YELLOW_FRAME) && !_game._objects.isInInventory(OBJ_YELLOW_FRAME)) {
|
|
_vm->_dialogs->showItem(OBJ_YELLOW_FRAME, 804, 0);
|
|
_action._inProgress = false;
|
|
return;
|
|
}
|
|
|
|
if (_action.isObject(NOUN_MORE_CATACOMBS)) {
|
|
_vm->_dialogs->show(45615);
|
|
_action._inProgress = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
void Scene456::preActions() {
|
|
_frameInRoomFl = false;
|
|
_takingFrameInRoomFl = false;
|
|
|
|
if (_game._objects[OBJ_RED_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_frameInRoomFl = true;
|
|
if (_action.isAction(VERB_TAKE, NOUN_RED_FRAME))
|
|
_takingFrameInRoomFl = true;
|
|
}
|
|
|
|
if (_game._objects[OBJ_YELLOW_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_frameInRoomFl = true;
|
|
if (_action.isAction(VERB_TAKE, NOUN_YELLOW_FRAME))
|
|
_takingFrameInRoomFl = true;
|
|
}
|
|
|
|
if (_game._objects[OBJ_BLUE_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_frameInRoomFl = true;
|
|
if (_action.isAction(VERB_TAKE, NOUN_BLUE_FRAME))
|
|
_takingFrameInRoomFl = true;
|
|
}
|
|
|
|
if (_game._objects[OBJ_GREEN_FRAME]._roomNumber == _globals[kCatacombsRoom] + 600) {
|
|
_frameInRoomFl = true;
|
|
if (_action.isAction(VERB_TAKE, NOUN_GREEN_FRAME))
|
|
_takingFrameInRoomFl = true;
|
|
}
|
|
|
|
if (_action.isAction(VERB_PUT) && _action.isTarget(NOUN_FLOOR)
|
|
&& (_action.isObject(NOUN_RED_FRAME) || _action.isObject(NOUN_BLUE_FRAME) || _action.isObject(NOUN_YELLOW_FRAME) || _action.isObject(NOUN_GREEN_FRAME))) {
|
|
if (_frameInRoomFl)
|
|
_game._player._needToWalk = false;
|
|
else {
|
|
Common::Point pos = _scene->_sprites[_globals._spriteIndexes[2]]->getFramePos(0);
|
|
_game._player.walk(Common::Point(pos.x + 12, pos.y), FACING_NORTHWEST);
|
|
}
|
|
}
|
|
}
|
|
|
|
/*------------------------------------------------------------------------*/
|
|
|
|
} // End of namespace Phantom
|
|
} // End of namespace MADS
|