mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-07 18:31:37 +00:00
MADS: Phantom: Implement scene 403
This commit is contained in:
parent
7c4f6bae20
commit
71ea3ce562
@ -122,7 +122,7 @@ SceneLogic *SceneFactory::createScene(MADSEngine *vm) {
|
||||
case 401: // labyrinth room, 3 exits
|
||||
return new Scene401(vm);
|
||||
case 403: // labyrinth room (big), 4 exits + 1 bricked door, left
|
||||
return new DummyScene(vm); // TODO
|
||||
return new Scene403(vm);
|
||||
case 404: // labyrinth room, 3 exits
|
||||
return new DummyScene(vm); // TODO
|
||||
case 406: // labyrinth room, 2 exits
|
||||
|
@ -131,25 +131,25 @@ void Scene401::enter() {
|
||||
_scene->_hotspots.activate(NOUN_MORE_CATACOMBS, false);
|
||||
|
||||
if (_globals[kCatacombsMisc] & MAZE_EVENT_RAT_NEST) {
|
||||
_globals._spriteIndexes[4] = _scene->_sprites.addSprites (formAnimName('c', 4), false);
|
||||
_globals._spriteIndexes[4] = _scene->_sprites.addSprites(formAnimName('c', 4), false);
|
||||
_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), false);
|
||||
_globals._spriteIndexes[5] = _scene->_sprites.addSprites(formAnimName('c', 5), false);
|
||||
_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), false);
|
||||
_globals._spriteIndexes[6] = _scene->_sprites.addSprites(formAnimName('c', 6), false);
|
||||
_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), false);
|
||||
_globals._spriteIndexes[7] = _scene->_sprites.addSprites(formAnimName('c', 7), false);
|
||||
_scene->drawToBackground(_globals._spriteIndexes[7], 1, Common::Point(-32000, -32000), 0, 100);
|
||||
}
|
||||
|
||||
@ -553,5 +553,502 @@ void Scene401::preActions() {
|
||||
|
||||
/*------------------------------------------------------------------------*/
|
||||
|
||||
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->_initialVariant = 1;
|
||||
|
||||
if (_globals[kCatacombsMisc] & MAZE_EVENT_PLANK)
|
||||
_scene->_initialVariant = 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", false);
|
||||
_globals._spriteIndexes[9] = _scene->_sprites.addSprites(formAnimName('f', 0), false);
|
||||
_globals._spriteIndexes[10] = _scene->_sprites.addSprites(formAnimName('f', 1), false);
|
||||
_globals._spriteIndexes[11] = _scene->_sprites.addSprites(formAnimName('f', 2), false);
|
||||
_globals._spriteIndexes[12] = _scene->_sprites.addSprites(formAnimName('f', 3), false);
|
||||
|
||||
if (_game.exitCatacombs(0) == -1) {
|
||||
_globals._spriteIndexes[1] = _scene->_sprites.addSprites(formAnimName('c', 1), false);
|
||||
_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), false);
|
||||
_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), false);
|
||||
_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), false);
|
||||
_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), false);
|
||||
_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), false);
|
||||
_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), false);
|
||||
_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), false);
|
||||
_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), false);
|
||||
_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.setTimingTrigger(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.setTrigger(_globals._sequenceIndexes[8], 2, 5, 1);
|
||||
_scene->_sequences.setTrigger(_globals._sequenceIndexes[8], 0, 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(2, 0, 1, _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.setTrigger(_globals._sequenceIndexes[8], 2, 5, 1);
|
||||
_scene->_sequences.setTrigger(_globals._sequenceIndexes[8], 0, 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(2, 0, 1, _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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------------------*/
|
||||
|
||||
} // End of namespace Phantom
|
||||
} // End of namespace MADS
|
||||
|
@ -75,6 +75,26 @@ public:
|
||||
virtual void actions();
|
||||
};
|
||||
|
||||
class Scene403 : public Scene4xx {
|
||||
private:
|
||||
bool _frameInRoomFl;
|
||||
bool _takingFrameInRoomFl;
|
||||
|
||||
int _redFrameHotspotId;
|
||||
int _greenFrameHostpotId;
|
||||
int _blueFrameHotspotId;
|
||||
int _yellowFrameHotspotId;
|
||||
|
||||
public:
|
||||
Scene403(MADSEngine *vm);
|
||||
virtual void synchronize(Common::Serializer &s);
|
||||
|
||||
virtual void setup();
|
||||
virtual void enter();
|
||||
virtual void step();
|
||||
virtual void preActions();
|
||||
virtual void actions();
|
||||
};
|
||||
} // End of namespace Phantom
|
||||
} // End of namespace MADS
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user