mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-22 18:02:05 +00:00
2192 lines
56 KiB
C++
2192 lines
56 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.
|
|
*
|
|
* $URL$
|
|
* $Id$
|
|
*
|
|
*/
|
|
|
|
#include "tsage/ringworld_scenes6.h"
|
|
#include "tsage/scenes.h"
|
|
#include "tsage/tsage.h"
|
|
#include "tsage/staticres.h"
|
|
|
|
namespace tSage {
|
|
|
|
/*--------------------------------------------------------------------------
|
|
* Scene 5000 - Caverns - Entrance
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
void Scene5000::Action1::signal() {
|
|
// Ship landing
|
|
Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
setDelay(10);
|
|
break;
|
|
case 1:
|
|
scene->_soundHandler.startSound(190);
|
|
scene->_soundHandler.proc5(true);
|
|
ADD_MOVER(scene->_hotspot1, 283, 12);
|
|
break;
|
|
case 2:
|
|
break;
|
|
case 3:
|
|
scene->_hotspot1._moveDiff.y = 1;
|
|
scene->_hotspot4.setPosition(Common::Point(scene->_hotspot1._position.x,
|
|
scene->_hotspot1._position.y + 15));
|
|
scene->_hotspot4.show();
|
|
setDelay(15);
|
|
break;
|
|
case 4:
|
|
scene->_soundHandler.proc4();
|
|
ADD_MOVER(scene->_hotspot1, 233, 80);
|
|
break;
|
|
case 5:
|
|
scene->_hotspot3.animate(ANIM_MODE_8, 0, NULL);
|
|
scene->_hotspot3.show();
|
|
ADD_MOVER(scene->_hotspot1, 233, 90);
|
|
break;
|
|
case 6:
|
|
scene->_hotspot3.remove();
|
|
scene->_hotspot2.setPosition(Common::Point(233, 76));
|
|
scene->_hotspot2.show();
|
|
scene->_hotspot2.animate(ANIM_MODE_5, this);
|
|
|
|
scene->_hotspot4.remove();
|
|
break;
|
|
case 7:
|
|
setDelay(60);
|
|
scene->_hotspot2.remove();
|
|
break;
|
|
case 8:
|
|
scene->_hotspot5.show();
|
|
scene->_hotspot5.animate(ANIM_MODE_5, this);
|
|
break;
|
|
case 9:
|
|
scene->setAction(&scene->_action2);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene5000::Action1::dispatch() {
|
|
Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene;
|
|
Action::dispatch();
|
|
|
|
if (_actionIndex == 3) {
|
|
if (scene->_hotspot1._percent % 2 == 0) {
|
|
++scene->_hotspot1._position.y;
|
|
if (scene->_hotspot1._position.x > 233)
|
|
--scene->_hotspot1._position.x;
|
|
}
|
|
|
|
scene->_hotspot1.changeZoom(++scene->_hotspot1._percent);
|
|
scene->_hotspot1._flags |= OBJFLAG_PANES;
|
|
|
|
if (scene->_hotspot1._percent >= 100)
|
|
signal();
|
|
}
|
|
|
|
if ((_actionIndex == 5) || (_actionIndex == 6)) {
|
|
scene->_hotspot4.setPosition(Common::Point(scene->_hotspot1._position.x,
|
|
scene->_hotspot1._position.y + 15));
|
|
}
|
|
}
|
|
|
|
void Scene5000::Action2::signal() {
|
|
Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
_globals->_player.setPosition(Common::Point(217, 76));
|
|
setDelay(10);
|
|
break;
|
|
case 1:
|
|
_globals->_player.setStrip2(3);
|
|
_globals->_player.animate(ANIM_MODE_1, NULL);
|
|
ADD_MOVER(_globals->_player, 214, 89);
|
|
break;
|
|
case 2:
|
|
if (!_globals->getFlag(59))
|
|
setAction(&scene->_action3, this);
|
|
_globals->_player.fixPriority(15);
|
|
ADD_MOVER(_globals->_player, 208, 100);
|
|
break;
|
|
case 3:
|
|
ADD_MOVER(_globals->_player, 213, 98);
|
|
break;
|
|
case 4:
|
|
ADD_MOVER(_globals->_player, 215, 115);
|
|
break;
|
|
case 5:
|
|
_globals->_player.changeZoom(47);
|
|
ADD_MOVER(_globals->_player, 220, 125);
|
|
break;
|
|
case 6:
|
|
ADD_MOVER(_globals->_player, 229, 115);
|
|
break;
|
|
case 7:
|
|
_globals->_player.changeZoom(-1);
|
|
_globals->_player.fixPriority(35);
|
|
ADD_MOVER(_globals->_player, 201, 166);
|
|
break;
|
|
case 8:
|
|
_globals->_player.updateZoom();
|
|
ADD_MOVER(_globals->_player, 205, 146);
|
|
break;
|
|
case 9:
|
|
_globals->_player.changeZoom(-1);
|
|
_globals->_player.fixPriority(50);
|
|
ADD_MOVER(_globals->_player, 220, 182);
|
|
break;
|
|
case 10:
|
|
_globals->_player.updateZoom();
|
|
ADD_MOVER(_globals->_player, 208, 163);
|
|
break;
|
|
case 11:
|
|
_globals->_player.changeZoom(-1);
|
|
_globals->_player.setStrip2(-1);
|
|
_globals->_player.fixPriority(-1);
|
|
ADD_MOVER(_globals->_player, 208, 175);
|
|
break;
|
|
case 12:
|
|
_globals->_player.setStrip(8);
|
|
_globals->_player.setFrame(1);
|
|
setDelay(10);
|
|
break;
|
|
case 13:
|
|
if (!_globals->_sceneObjects->contains(&scene->_hotspot7))
|
|
setDelay(10);
|
|
break;
|
|
case 14:
|
|
setDelay(30);
|
|
break;
|
|
case 15:
|
|
_globals->_player.enableControl();
|
|
remove();
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene5000::Action3::signal() {
|
|
Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
setDelay(10);
|
|
break;
|
|
case 1:
|
|
scene->_hotspot7.postInit();
|
|
scene->_hotspot7.setVisage(2809);
|
|
scene->_hotspot7.setObjectWrapper(new SceneObjectWrapper());
|
|
scene->_hotspot7.setPosition(Common::Point(217, 76));
|
|
scene->_hotspot7.changeZoom(10);
|
|
scene->_hotspot7.setStrip2(3);
|
|
scene->_hotspot7.fixPriority(200);
|
|
scene->_hotspot7._moveDiff.y = 2;
|
|
scene->_hotspot7.animate(ANIM_MODE_1, NULL);
|
|
ADD_MOVER(scene->_hotspot7, 214, 89);
|
|
|
|
_globals->_sceneItems.push_front(&scene->_hotspot7);
|
|
break;
|
|
case 2:
|
|
scene->_hotspot7.changeZoom(-1);
|
|
scene->_hotspot7.fixPriority(14);
|
|
ADD_MOVER(scene->_hotspot7, 208, 100);
|
|
break;
|
|
case 3:
|
|
ADD_MOVER(scene->_hotspot7, 213, 98);
|
|
break;
|
|
case 4:
|
|
scene->_hotspot7.fixPriority(19);
|
|
ADD_MOVER(scene->_hotspot7, 213, 98);
|
|
break;
|
|
case 5:
|
|
scene->_hotspot7.changeZoom(46);
|
|
ADD_MOVER(scene->_hotspot7, 220, 125);
|
|
break;
|
|
case 6:
|
|
ADD_MOVER(scene->_hotspot7, 229, 115);
|
|
break;
|
|
case 7:
|
|
scene->_hotspot7.changeZoom(-1);
|
|
scene->_hotspot7.fixPriority(34);
|
|
ADD_MOVER(scene->_hotspot7, 201, 166);
|
|
break;
|
|
case 8:
|
|
scene->_hotspot7.updateZoom();
|
|
ADD_MOVER(scene->_hotspot7, 205, 146);
|
|
break;
|
|
case 9:
|
|
scene->_hotspot7.changeZoom(-1);
|
|
scene->_hotspot7.fixPriority(49);
|
|
ADD_MOVER(scene->_hotspot7, 210, 182);
|
|
break;
|
|
case 10:
|
|
scene->_hotspot7.updateZoom();
|
|
ADD_MOVER(scene->_hotspot7, 208, 163);
|
|
break;
|
|
case 11:
|
|
scene->_hotspot7.changeZoom(-1);
|
|
scene->_hotspot7.setStrip2(-1);
|
|
scene->_hotspot7.fixPriority(-1);
|
|
ADD_MOVER(scene->_hotspot7, 175, 166);
|
|
break;
|
|
case 12:
|
|
ADD_MOVER(scene->_hotspot7, 126, 146);
|
|
break;
|
|
case 13:
|
|
scene->_hotspot7.setStrip(2);
|
|
remove();
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene5000::Action4::signal() {
|
|
Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
setDelay(1);
|
|
break;
|
|
case 1:
|
|
_globals->_player.fixPriority(50);
|
|
_globals->_player.setStrip2(4);
|
|
ADD_MOVER(_globals->_player, 210, 182);
|
|
break;
|
|
case 2:
|
|
ADD_MOVER(_globals->_player, 205, 146);
|
|
break;
|
|
case 3:
|
|
_globals->_player.fixPriority(35);
|
|
ADD_MOVER(_globals->_player, 201, 166);
|
|
break;
|
|
case 4:
|
|
ADD_MOVER(_globals->_player, 229, 115);
|
|
break;
|
|
case 5:
|
|
_globals->_player.fixPriority(20);
|
|
_globals->_player.changeZoom(47);
|
|
ADD_MOVER(_globals->_player, 220, 125);
|
|
break;
|
|
case 6:
|
|
ADD_MOVER(_globals->_player, 215, 115);
|
|
break;
|
|
case 7:
|
|
_globals->_player.changeZoom(-1);
|
|
ADD_MOVER(_globals->_player, 213, 98);
|
|
break;
|
|
case 8:
|
|
_globals->_player.fixPriority(15);
|
|
ADD_MOVER(_globals->_player, 208, 100);
|
|
break;
|
|
case 9:
|
|
ADD_MOVER(_globals->_player, 214, 89);
|
|
break;
|
|
case 10:
|
|
ADD_MOVER(_globals->_player, 217, 76);
|
|
break;
|
|
case 11:
|
|
_globals->_player.hide();
|
|
setDelay(60);
|
|
break;
|
|
case 12:
|
|
if (!_globals->_sceneObjects->contains(&scene->_hotspot7))
|
|
_globals->_sceneManager.changeScene(2320);
|
|
remove();
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene5000::Action5::signal() {
|
|
Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
_globals->_player.disableControl();
|
|
ADD_MOVER(_globals->_player, 91, 155);
|
|
break;
|
|
case 1:
|
|
_globals->_player.setVisage(2670);
|
|
_globals->_player._strip = 4;
|
|
_globals->_player._frame = 1;
|
|
_globals->_player.animate(ANIM_MODE_5, this);
|
|
break;
|
|
case 2:
|
|
SceneItem::display2(5000, _globals->_sceneObjects->contains(&scene->_hotspot7) ? 17 : 13);
|
|
_globals->_player.animate(ANIM_MODE_6, this);
|
|
break;
|
|
case 3:
|
|
_globals->_player.setVisage(0);
|
|
_globals->_player._strip = 8;
|
|
_globals->_player.animate(ANIM_MODE_1, NULL);
|
|
|
|
_globals->_player.enableControl();
|
|
remove();
|
|
}
|
|
}
|
|
|
|
void Scene5000::Action6::signal() {
|
|
// Discussion between the hero and Seeker, then the hero goes back to the lander
|
|
Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
_globals->_player.disableControl();
|
|
setDelay(3);
|
|
break;
|
|
case 1:
|
|
_globals->_events.setCursor(CURSOR_WALK);
|
|
scene->_stripManager.start(2150, this);
|
|
break;
|
|
case 2:
|
|
_globals->_events.setCursor(CURSOR_NONE);
|
|
scene->setAction(&scene->_sequenceManager, this, 5001, &scene->_hotspot7, NULL);
|
|
break;
|
|
case 3:
|
|
ADD_PLAYER_MOVER(208, 163);
|
|
break;
|
|
case 4:
|
|
_globals->_player.fixPriority(50);
|
|
_globals->_player.setStrip2(4);
|
|
ADD_MOVER(_globals->_player, 210, 182);
|
|
break;
|
|
case 5:
|
|
_globals->_sceneManager.changeScene(2100);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
void Scene5000::Hotspot7::doAction(int action) {
|
|
Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(5000, 12);
|
|
break;
|
|
case CURSOR_TALK:
|
|
scene->setAction(&scene->_action6);
|
|
break;
|
|
default:
|
|
SceneHotspot::doAction(action);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene5000::Hotspot8::doAction(int action) {
|
|
// Cave
|
|
Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(5000, 10);
|
|
break;
|
|
case OBJECT_STUNNER:
|
|
SceneItem::display2(5000, 14);
|
|
break;
|
|
case OBJECT_SCANNER:
|
|
scene->setAction(&scene->_action5);
|
|
break;
|
|
default:
|
|
SceneHotspot::doAction(action);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene5000::HotspotGroup1::doAction(int action) {
|
|
Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene;
|
|
|
|
if (_globals->_sceneObjects->contains(&scene->_hotspot7))
|
|
scene->setAction(&scene->_action6);
|
|
else
|
|
SceneItem::display2(5000, 11);
|
|
}
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
Scene5000::Scene5000() :
|
|
_hotspot1(0, CURSOR_LOOK, 5000, 3, LIST_END),
|
|
_hotspot12(0, CURSOR_LOOK, 5000, 6, CURSOR_USE, 5000, 7, OBJECT_STUNNER, 5000, 14,
|
|
OBJECT_SCANNER, 5000, 16, LIST_END),
|
|
_hotspot13(0, CURSOR_LOOK, 5000, 8, CURSOR_USE, 5000, 9, OBJECT_STUNNER, 5000, 0,
|
|
OBJECT_SCANNER, 5000, 16, LIST_END),
|
|
_hotspot14(0, CURSOR_LOOK, 5000, 8, CURSOR_USE, 5000, 9, OBJECT_STUNNER, 5000, 0,
|
|
OBJECT_SCANNER, 5000, 16, LIST_END),
|
|
_hotspot15(0, CURSOR_LOOK, 5000, 2, OBJECT_STUNNER, 5000, 15, LIST_END),
|
|
_hotspot16(0, CURSOR_LOOK, 5000, 4, CURSOR_USE, 5000, 5, LIST_END),
|
|
_hotspot17(0, CURSOR_LOOK, 5000, 1, LIST_END),
|
|
_hotspot18(0, CURSOR_LOOK, 5000, 0, LIST_END) {
|
|
}
|
|
|
|
|
|
void Scene5000::postInit(SceneObjectList *OwnerList) {
|
|
Scene::postInit();
|
|
loadScene(5000);
|
|
|
|
_stripManager.addSpeaker(&_speakerSText);
|
|
_stripManager.addSpeaker(&_speakerQText);
|
|
|
|
_globals->_player.postInit();
|
|
_globals->_player.setObjectWrapper(new SceneObjectWrapper());
|
|
_globals->_player.setVisage(0);
|
|
_globals->_player.animate(ANIM_MODE_1, NULL);
|
|
_globals->_player._moveDiff = Common::Point(4, 2);
|
|
_globals->_player.changeZoom(-1);
|
|
_globals->_player.disableControl();
|
|
|
|
_hotspot1.postInit();
|
|
_hotspot1.setVisage(5001);
|
|
_hotspot1.setFrame2(1);
|
|
_hotspot1._moveDiff = Common::Point(5, 5);
|
|
_hotspot1.fixPriority(10);
|
|
_hotspot1.changeZoom(10);
|
|
|
|
_hotspot4.postInit();
|
|
_hotspot4.setVisage(5001);
|
|
_hotspot4.setStrip2(2);
|
|
_hotspot4._moveDiff = Common::Point(5, 1);
|
|
_hotspot4.fixPriority(10);
|
|
_hotspot4.changeZoom(100);
|
|
_hotspot4.animate(ANIM_MODE_8, 0, NULL);
|
|
_hotspot4.hide();
|
|
|
|
_hotspot2.postInit();
|
|
_hotspot2.setVisage(5001);
|
|
_hotspot2.setStrip2(3);
|
|
_hotspot2._numFrames = 5;
|
|
_hotspot2.hide();
|
|
|
|
_hotspot3.postInit();
|
|
_hotspot3.setVisage(5001);
|
|
_hotspot3.setStrip2(5);
|
|
_hotspot3._numFrames = 5;
|
|
_hotspot3.setPosition(Common::Point(233, 76));
|
|
_hotspot3.hide();
|
|
|
|
_hotspot5.postInit();
|
|
_hotspot5.setVisage(5001);
|
|
_hotspot5.setStrip2(4);
|
|
_hotspot5._numFrames = 5;
|
|
_hotspot5.fixPriority(15);
|
|
_hotspot5.setPosition(Common::Point(218, 76));
|
|
_hotspot5.hide();
|
|
|
|
_hotspot9.postInit();
|
|
_hotspot9.setVisage(5002);
|
|
_hotspot9.fixPriority(80);
|
|
_hotspot9.setPosition(Common::Point(71, 174));
|
|
|
|
_hotspot10.postInit();
|
|
_hotspot10.setVisage(5002);
|
|
_hotspot10.setStrip2(2);
|
|
_hotspot10.setPosition(Common::Point(87, 120));
|
|
|
|
_hotspot11.postInit();
|
|
_hotspot11.setVisage(5002);
|
|
_hotspot11.setStrip2(2);
|
|
_hotspot11.setFrame(3);
|
|
_hotspot10.setPosition(Common::Point(93, 118));
|
|
|
|
setZoomPercents(95, 10, 145, 100);
|
|
|
|
_hotspot8.setBounds(Rect(0, 73, 87, 144));
|
|
_hotspot18.setBounds(Rect(54, 0, 319, 85));
|
|
_hotspot17.setBounds(Rect(184, 0, 199, 79));
|
|
_hotspot13.setBounds(Rect(0, 164, 135, 200));
|
|
_hotspot14.setBounds(Rect(0, 0, 105, 140));
|
|
_hotspot15.setBounds(Rect(266, 70, 291, 85));
|
|
_hotspot16.setBounds(Rect(0, 86, 319, 200));
|
|
_hotspot12.setBounds(Rect(230, 143, 244, 150));
|
|
|
|
_globals->_sceneItems.addItems(&_hotspot9, &_hotspot10, &_hotspot11, &_hotspot8, &_hotspot13,
|
|
&_hotspot14, &_hotspot12, &_hotspot15, &_hotspot17, &_hotspot18, &_hotspot16, NULL);
|
|
|
|
switch (_globals->_sceneManager._previousScene) {
|
|
case 1000:
|
|
case 2100:
|
|
case 2320:
|
|
if (_globals->getFlag(59)) {
|
|
_hotspot1.setPosition(Common::Point(233, 90));
|
|
_hotspot1.changeZoom(100);
|
|
_hotspot1.show();
|
|
|
|
_hotspot5.setFrame(1);
|
|
_hotspot5.animate(ANIM_MODE_5, NULL);
|
|
_hotspot5.setPosition(Common::Point(218, 76));
|
|
_hotspot5.show();
|
|
|
|
_globals->_player.setPosition(Common::Point(217, -10));
|
|
_globals->_player.disableControl();
|
|
|
|
setAction(&_action2);
|
|
} else {
|
|
_globals->_player.setPosition(Common::Point(217, -10));
|
|
_hotspot1.setPosition(Common::Point(320, -10));
|
|
_globals->_player.disableControl();
|
|
|
|
setAction(&_action1);
|
|
}
|
|
break;
|
|
default:
|
|
_globals->_player.disableControl();
|
|
_globals->_player.setPosition(Common::Point(0, 146));
|
|
|
|
_hotspot1.changeZoom(100);
|
|
_hotspot1.setPosition(Common::Point(233, 90));
|
|
_hotspot1.show();
|
|
|
|
_hotspot5.setFrame(_hotspot5.getFrameCount());
|
|
_hotspot5.show();
|
|
|
|
_sceneMode = 5004;
|
|
setAction(&_sequenceManager, this, 5004, &_globals->_player, NULL);
|
|
break;
|
|
}
|
|
|
|
_globals->_soundHandler.startSound(190);
|
|
}
|
|
|
|
void Scene5000::signal() {
|
|
switch (_sceneMode) {
|
|
case 5002:
|
|
case 5003:
|
|
case 5004:
|
|
_globals->_player.enableControl();
|
|
break;
|
|
case 5005:
|
|
_globals->_sceneManager.changeScene(5100);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene5000::dispatch() {
|
|
Scene::dispatch();
|
|
|
|
if (!_action) {
|
|
if (!_globals->_sceneObjects->contains(&_hotspot7) && (_globals->_player.getRegionIndex() == 10)) {
|
|
_globals->_player.disableControl();
|
|
_sceneMode = 5005;
|
|
setAction(&_sequenceManager, this, 5005, &_globals->_player, NULL);
|
|
}
|
|
|
|
if (_globals->_player.getRegionIndex() == 8) {
|
|
_globals->_player.disableControl();
|
|
|
|
if (_globals->_sceneObjects->contains(&_hotspot7)) {
|
|
_sceneMode = 5003;
|
|
_globals->_player.addMover(NULL);
|
|
setAction(&_sequenceManager, this, 5003, &_globals->_player, NULL);
|
|
} else {
|
|
setAction(&_action4);
|
|
}
|
|
}
|
|
|
|
if (_globals->_sceneObjects->contains(&_hotspot7) && (_globals->_player.getRegionIndex() == 15)) {
|
|
_sceneMode = 5002;
|
|
_globals->_player.disableControl();
|
|
_globals->_player.addMover(NULL);
|
|
setAction(&_sequenceManager, this, 5002, &_globals->_player, NULL);
|
|
}
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------
|
|
* Scene 5100 - Caverns
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
void Scene5100::Action1::signal() {
|
|
Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
setDelay(5);
|
|
break;
|
|
case 1:
|
|
ADD_MOVER(_globals->_player, 1111, 165);
|
|
break;
|
|
case 2:
|
|
_globals->_player.setStrip(6);
|
|
_globals->_player.setFrame(1);
|
|
setDelay(60);
|
|
break;
|
|
case 3:
|
|
if (_globals->getFlag(10)) {
|
|
_globals->_player.enableControl();
|
|
remove();
|
|
} else {
|
|
_globals->setFlag(10);
|
|
scene->_stripManager.start(5102, this);
|
|
}
|
|
break;
|
|
case 4:
|
|
scene->_soundHandler.startSound(206);
|
|
|
|
scene->_hotspot5.postInit();
|
|
scene->_hotspot5.setVisage(5362);
|
|
scene->_hotspot5.setPosition(Common::Point(1160, 34));
|
|
scene->_hotspot5.setStrip2(2);
|
|
scene->_hotspot5.animate(ANIM_MODE_1, NULL);
|
|
scene->_hotspot5.fixPriority(10);
|
|
|
|
_globals->_sceneItems.push_front(&scene->_hotspot5);
|
|
ADD_MOVER(scene->_hotspot5, 999, 14);
|
|
break;
|
|
case 5:
|
|
scene->_hotspot5.setStrip2(4);
|
|
scene->_hotspot5._frame = 1;
|
|
scene->_hotspot5.animate(ANIM_MODE_5, this);
|
|
break;
|
|
case 6:
|
|
_globals->_player.enableControl();
|
|
remove();
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene5100::Action2::signal() {
|
|
Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
_globals->_player.disableControl();
|
|
setDelay(5);
|
|
break;
|
|
case 1:
|
|
if (scene->_hotspot8._visage == 2806)
|
|
setDelay(1);
|
|
else
|
|
scene->_hotspot8.animate(ANIM_MODE_5, this);
|
|
break;
|
|
case 2:
|
|
if (scene->_hotspot8._visage != 2806) {
|
|
scene->_hotspot8.setVisage(2806);
|
|
scene->_hotspot8.setPosition(Common::Point(548, 193));
|
|
scene->_hotspot8.animate(ANIM_MODE_1, NULL);
|
|
scene->_hotspot8._angle = 325;
|
|
scene->_hotspot8.setObjectWrapper(new SceneObjectWrapper());
|
|
scene->_hotspot8.setStrip(8);
|
|
}
|
|
|
|
scene->_stripManager.start(5129, this);
|
|
break;
|
|
case 3:
|
|
if (_globals->_player._position.x >= 966) {
|
|
ADD_PLAYER_MOVER_NULL(scene->_hotspot8, 1215, 155);
|
|
} else {
|
|
ADD_PLAYER_MOVER_NULL(scene->_hotspot8, 966, 185);
|
|
}
|
|
|
|
if (_globals->_player._position.x >= 966) {
|
|
setDelay(1);
|
|
} else {
|
|
ADD_PLAYER_MOVER(966, 190);
|
|
}
|
|
break;
|
|
case 4:
|
|
ADD_PLAYER_MOVER_NULL(scene->_hotspot8, 1215, 155);
|
|
ADD_PLAYER_MOVER(1215, 155);
|
|
break;
|
|
case 5:
|
|
_globals->_sceneManager.changeScene(2100);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene5100::Action3::signal() {
|
|
Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
_globals->setFlag(62);
|
|
_globals->_player.disableControl();
|
|
_globals->_player.addMover(NULL);
|
|
|
|
scene->_hotspot2.addMover(NULL);
|
|
scene->_hotspot3.addMover(NULL);
|
|
_globals->_player.setVisage(2672);
|
|
|
|
if (static_cast<SceneObject *>(_owner)->_position.x >= _globals->_player._position.x)
|
|
_globals->_player._strip = 4;
|
|
else
|
|
_globals->_player._strip = 3;
|
|
_globals->_player._frame = 1;
|
|
_globals->_player.animate(ANIM_MODE_5, this);
|
|
break;
|
|
case 1:
|
|
_globals->_player.setVisage(2674);
|
|
_globals->_player.setFrame(1);
|
|
_globals->_player.animate(ANIM_MODE_5, this);
|
|
break;
|
|
case 2:
|
|
scene->_soundHandler.startSound(28);
|
|
if (static_cast<SceneObject *>(_owner)->_position.x < _globals->_player._position.x) {
|
|
scene->_hotspot2.setVisage(5130);
|
|
scene->_hotspot2._strip = 1;
|
|
scene->_hotspot2._frame = 1;
|
|
scene->_hotspot2.animate(ANIM_MODE_5, this);
|
|
scene->_hotspot2.setAction(NULL);
|
|
|
|
scene->_hotspot3.setStrip2(1);
|
|
ADD_PLAYER_MOVER_THIS(scene->_hotspot3, 1200, 100);
|
|
} else {
|
|
scene->_hotspot3.setVisage(5130);
|
|
scene->_hotspot3._strip = 1;
|
|
scene->_hotspot3._frame = 1;
|
|
scene->_hotspot3.animate(ANIM_MODE_5, this);
|
|
scene->_hotspot3.setAction(NULL);
|
|
|
|
scene->_hotspot2.setStrip2(2);
|
|
ADD_PLAYER_MOVER_NULL(scene->_hotspot2, 10, 140);
|
|
|
|
}
|
|
|
|
_globals->_player.setVisage(2672);
|
|
_globals->_player._frame = _globals->_player.getFrameCount();
|
|
_globals->_player.animate(ANIM_MODE_6, this);
|
|
break;
|
|
case 3:
|
|
break;
|
|
case 4:
|
|
SceneItem::display2(5100, 38);
|
|
_globals->_player.enableControl();
|
|
|
|
_globals->_player.setVisage(0);
|
|
_globals->_player._strip = 8;
|
|
_globals->_player.animate(ANIM_MODE_1, NULL);
|
|
remove();
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene5100::Action4::signal() {
|
|
Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0: {
|
|
_globals->_player.disableControl();
|
|
scene->_soundHandler.startSound(208);
|
|
SceneItem::display2(5100, 15);
|
|
|
|
ObjectMover3 *mover = new ObjectMover3();
|
|
scene->_hotspot2.addMover(mover, &_globals->_player, 20, this);
|
|
break;
|
|
}
|
|
case 1:
|
|
scene->_hotspot1.postInit();
|
|
scene->_hotspot1.setVisage(5120);
|
|
scene->_hotspot1.setPosition(Common::Point(795, 161));
|
|
scene->_hotspot1._strip = 4;
|
|
scene->_hotspot1.animate(ANIM_MODE_5, this);
|
|
break;
|
|
case 2:
|
|
setDelay(15);
|
|
break;
|
|
case 3:
|
|
_globals->_sceneManager.changeScene(5200);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene5100::Action5::signal() {
|
|
Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
_globals->_player.disableControl();
|
|
setDelay(60);
|
|
break;
|
|
case 1:
|
|
scene->_stripManager.start(5128, this);
|
|
break;
|
|
case 2:
|
|
setDelay(15);
|
|
break;
|
|
case 3:
|
|
scene->_sceneMode = 5106;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5106, &_globals->_player, NULL);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
void Scene5100::HotspotGroup1::doAction(int action) {
|
|
// Flesh Eaters
|
|
Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(5100, _globals->getFlag(62) ? 41 : 26);
|
|
break;
|
|
case CURSOR_USE:
|
|
SceneItem::display2(5100, 11);
|
|
break;
|
|
case OBJECT_SCANNER:
|
|
SceneItem::display2(5100, 17);
|
|
break;
|
|
case OBJECT_STUNNER:
|
|
if (_globals->getFlag(62))
|
|
SceneItem::display2(5100, 42);
|
|
else
|
|
setAction(&scene->_action3);
|
|
break;
|
|
default:
|
|
SceneHotspot::doAction(action);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene5100::Hotspot4::doAction(int action) {
|
|
Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(5100, 31);
|
|
break;
|
|
case CURSOR_USE:
|
|
_globals->_player.disableControl();
|
|
scene->_sceneMode = 5110;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5110, &_globals->_player, this, &scene->_hotspot7, NULL);
|
|
break;
|
|
case CURSOR_TALK:
|
|
SceneItem::display2(5100, 34);
|
|
break;
|
|
case OBJECT_STUNNER:
|
|
SceneItem::display2(5100, 36);
|
|
break;
|
|
case OBJECT_SCANNER:
|
|
SceneItem::display2(5100, 37);
|
|
break;
|
|
default:
|
|
SceneHotspot::doAction(action);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene5100::HotspotGroup2::doAction(int action) {
|
|
// Bat
|
|
Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(5100, _globals->getFlag(108) ? 47 : 23);
|
|
break;
|
|
case CURSOR_USE:
|
|
SceneItem::display2(5100, 29);
|
|
break;
|
|
case CURSOR_TALK:
|
|
if (_position.x >= 600)
|
|
SceneItem::display2(5100, 28);
|
|
else {
|
|
_globals->_player.disableControl();
|
|
scene->_sceneMode = 5114;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5114, NULL);
|
|
}
|
|
break;
|
|
case OBJECT_SCANNER:
|
|
SceneItem::display2(5100, 43);
|
|
break;
|
|
default:
|
|
SceneHotspot::doAction(action);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene5100::Hotspot9::doAction(int action) {
|
|
// Rope
|
|
Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(5100, 32);
|
|
break;
|
|
case CURSOR_USE:
|
|
_globals->_player.disableControl();
|
|
scene->_sceneMode = 5117;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5117, &_globals->_player, NULL);
|
|
break;
|
|
case OBJECT_STUNNER:
|
|
SceneItem::display2(5100, 35);
|
|
break;
|
|
case OBJECT_SCANNER:
|
|
SceneItem::display2(5100, 44);
|
|
break;
|
|
case OBJECT_BONE:
|
|
_globals->_player.disableControl();
|
|
scene->_sceneMode = 5116;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5116, &_globals->_player, this, &scene->_hotspot10,
|
|
&scene->_hotspot4, NULL);
|
|
break;
|
|
default:
|
|
SceneHotspot::doAction(action);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene5100::Hotspot17::doAction(int action) {
|
|
Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(5100, 18);
|
|
break;
|
|
case CURSOR_USE:
|
|
if (_globals->getFlag(67))
|
|
SceneItem::display2(5100, 19);
|
|
else {
|
|
_globals->_player.disableControl();
|
|
scene->_sceneMode = 5101;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5101, &_globals->_player, this, NULL);
|
|
}
|
|
break;
|
|
default:
|
|
SceneHotspot::doAction(action);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene5100::Hotspot18::doAction(int action) {
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
if (_globals->_sceneManager._previousScene != 5000) {
|
|
SceneItem::display2(5100, 3);
|
|
} else {
|
|
switch (_index1) {
|
|
case 0:
|
|
SceneItem::display2(5100, 0);
|
|
++_index1;
|
|
break;
|
|
case 1:
|
|
SceneItem::display2(5100, 1);
|
|
++_index1;
|
|
break;
|
|
default:
|
|
SceneItem::display2(5100, 2);
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
case CURSOR_USE:
|
|
switch (_index2) {
|
|
case 0:
|
|
SceneItem::display2(5100, 8);
|
|
++_index2;
|
|
break;
|
|
case 1:
|
|
SceneItem::display2(5100, 9);
|
|
++_index2;
|
|
break;
|
|
default:
|
|
SceneItem::display2(5100, 10);
|
|
break;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
SceneHotspot::doAction(action);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene5100::Hotspot19::doAction(int action) {
|
|
// Pillar
|
|
Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(5100, _globals->_sceneObjects->contains(&scene->_hotspot14) ? 27 : 20);
|
|
break;
|
|
case CURSOR_USE:
|
|
_globals->_player.disableControl();
|
|
scene->_sceneMode = 5106;
|
|
|
|
if (_globals->getFlag(66))
|
|
scene->setAction(&scene->_sequenceManager, scene, 5113, &_globals->_player, NULL);
|
|
else {
|
|
_globals->setFlag(66);
|
|
scene->setAction(&scene->_sequenceManager, scene, 5106, &_globals->_player, &scene->_hotspot14, NULL);
|
|
}
|
|
break;
|
|
default:
|
|
SceneHotspot::doAction(action);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene5100::Hotspot20::doAction(int action) {
|
|
Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(5100, 21);
|
|
break;
|
|
case CURSOR_USE:
|
|
_globals->_player.disableControl();
|
|
|
|
if (_globals->getFlag(67)) {
|
|
scene->_sceneMode = 5112;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5112, &_globals->_player, NULL);
|
|
} else {
|
|
scene->_sceneMode = 5101;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5106, &_globals->_player, &scene->_hotspot17, NULL);
|
|
}
|
|
break;
|
|
default:
|
|
SceneHotspot::doAction(action);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
Scene5100::Scene5100() :
|
|
_hotspot16(0, CURSOR_LOOK, 5100, 48, LIST_END),
|
|
_hotspot21(0, CURSOR_LOOK, 5100, 4, CURSOR_USE, 5100, 5, LIST_END) {
|
|
}
|
|
|
|
void Scene5100::postInit(SceneObjectList *OwnerList) {
|
|
Scene::postInit();
|
|
setZoomPercents(50, 10, 200, 100);
|
|
_sceneMode = 0;
|
|
|
|
_stripManager.addSpeaker(&_speakerMText);
|
|
_stripManager.addSpeaker(&_speakerQText);
|
|
_stripManager.addSpeaker(&_speakerSText);
|
|
_stripManager.addSpeaker(&_speakerGameText);
|
|
_stripManager.addSpeaker(&_speakerBatText);
|
|
_speakerQText._npc = &_globals->_player;
|
|
_speakerMText._npc = &_globals->_player;
|
|
_speakerSText._npc = &_hotspot8;
|
|
|
|
_globals->_player.postInit();
|
|
_globals->_player.setVisage(0);
|
|
_globals->_player.setObjectWrapper(new SceneObjectWrapper());
|
|
_globals->_player.animate(ANIM_MODE_1, NULL);
|
|
_globals->_player.disableControl();
|
|
|
|
if (!_globals->getFlag(66)) {
|
|
_hotspot14.postInit();
|
|
_hotspot14.setVisage(5101);
|
|
_hotspot14.setPosition(Common::Point(498, 147));
|
|
_hotspot14.fixPriority(200);
|
|
_hotspot14._moveDiff.y = 10;
|
|
}
|
|
|
|
_hotspot17.postInit();
|
|
_hotspot17.setVisage(5101);
|
|
_hotspot17._strip = 2;
|
|
_hotspot17.fixPriority(200);
|
|
|
|
if (_globals->getFlag(67))
|
|
_hotspot17.setPosition(Common::Point(554, 192));
|
|
else
|
|
_hotspot17.setPosition(Common::Point(539, 179));
|
|
|
|
_hotspot19.setBounds(Rect(488, 115, 508, 148));
|
|
_hotspot21.setBounds(Rect(1150, 85, 1173, 112));
|
|
_hotspot20.setBounds(Rect(517, 193, 562, 200));
|
|
_globals->_sceneItems.addItems(&_hotspot19, &_hotspot21, NULL);
|
|
|
|
if (_globals->getFlag(67)) {
|
|
_globals->_sceneItems.addItems(&_hotspot20, &_hotspot17, NULL);
|
|
} else {
|
|
_globals->_sceneItems.addItems(&_hotspot17, &_hotspot20, NULL);
|
|
}
|
|
|
|
if (!_globals->getFlag(105)) {
|
|
_hotspot4.postInit();
|
|
_hotspot4.setVisage(5363);
|
|
_hotspot4.setPosition(Common::Point(1025, 65));
|
|
_hotspot4.setStrip(4);
|
|
_hotspot4.animate(ANIM_MODE_7, 0, NULL);;
|
|
_globals->_sceneItems.push_back(&_hotspot4);
|
|
|
|
_hotspot9.postInit();
|
|
_hotspot9.setVisage(5363);
|
|
_hotspot9.setPosition(Common::Point(966, 120));
|
|
_globals->_sceneItems.push_back(&_hotspot9);
|
|
|
|
_hotspot10.postInit();
|
|
_hotspot10.setVisage(5363);
|
|
_hotspot10.setPosition(Common::Point(999, 68));
|
|
_hotspot10.setStrip(2);
|
|
|
|
_hotspot6.postInit();
|
|
_hotspot6.setVisage(5362);
|
|
_hotspot6.setPosition(Common::Point(1017, 34));
|
|
_hotspot6._strip = 4;
|
|
_hotspot6._frame = _hotspot6.getFrameCount();
|
|
_globals->_sceneItems.push_back(&_hotspot6);
|
|
}
|
|
|
|
_hotspot16._sceneRegionId = 15;
|
|
_globals->_sceneItems.push_back(&_hotspot16);
|
|
|
|
if (!_globals->getFlag(62)) {
|
|
_hotspot2.postInit();
|
|
_hotspot2.setVisage(5110);
|
|
_hotspot2.animate(ANIM_MODE_1, NULL);
|
|
_hotspot2._moveDiff.x = 4;
|
|
_globals->_sceneItems.push_back(&_hotspot2);
|
|
|
|
_hotspot3.postInit();
|
|
_hotspot3.setVisage(5110);
|
|
_hotspot3.animate(ANIM_MODE_1, NULL);
|
|
_hotspot3._moveDiff.x = 4;
|
|
_globals->_sceneItems.push_back(&_hotspot3);
|
|
|
|
if (_globals->getFlag(61)) {
|
|
_hotspot2.setPosition(Common::Point(483, 189));
|
|
_hotspot3.setPosition(Common::Point(811, 182));
|
|
} else {
|
|
_hotspot2.setPosition(Common::Point(610, 170));
|
|
_hotspot3.setPosition(Common::Point(600, 180));
|
|
}
|
|
}
|
|
|
|
if (_globals->getFlag(60) && (RING_INVENTORY._stasisBox._sceneNumber == 1) &&
|
|
_globals->getFlag(107) && _globals->getFlag(67)) {
|
|
_hotspot8.postInit();
|
|
_hotspot8.setVisage(2806);
|
|
_hotspot8.setPosition(Common::Point(557, 178));
|
|
_hotspot8.animate(ANIM_MODE_1, NULL);
|
|
_hotspot8.setObjectWrapper(new SceneObjectWrapper());
|
|
|
|
_globals->clearFlag(59);
|
|
}
|
|
|
|
switch (_globals->_sceneManager._previousScene) {
|
|
case 5000:
|
|
default:
|
|
_globals->_player.setPosition(Common::Point(1184, 160));
|
|
setAction(&_action1);
|
|
break;
|
|
case 5200:
|
|
if (_globals->_stripNum == 5200) {
|
|
_globals->_player.setVisage(5101);
|
|
_globals->_player.fixPriority(200);
|
|
_globals->_player.setStrip(5);
|
|
_globals->_player.setFrame(1);
|
|
_globals->_player.setPosition(Common::Point(513, 199));
|
|
|
|
_sceneMode = 5108;
|
|
setAction(&_sequenceManager, this, 5108, &_globals->_player, NULL);
|
|
} else {
|
|
_globals->_player.setPosition(Common::Point(20, 175));
|
|
|
|
_hotspot13.postInit();
|
|
_hotspot13.setVisage(5110);
|
|
_hotspot13.setPosition(Common::Point(578, 192));
|
|
_hotspot13._strip = 2;
|
|
|
|
_hotspot11.postInit();
|
|
_hotspot11.setVisage(5110);
|
|
_hotspot11.setPosition(Common::Point(5, 162));
|
|
_hotspot11.setStrip2(1);
|
|
_hotspot11._moveDiff = Common::Point(4, 2);
|
|
_hotspot11.animate(ANIM_MODE_1, NULL);
|
|
|
|
ObjectMover2 *mover = new ObjectMover2();
|
|
_hotspot11.addMover(mover, 15, 20, &_globals->_player);
|
|
|
|
_hotspot12.postInit();
|
|
_hotspot12.setVisage(5110);
|
|
_hotspot12.setPosition(Common::Point(15, 164));
|
|
_hotspot12.setStrip2(1);
|
|
_hotspot12._moveDiff = Common::Point(4, 2);
|
|
_hotspot12.animate(ANIM_MODE_1, NULL);
|
|
|
|
ObjectMover2 *mover2 = new ObjectMover2();
|
|
_hotspot12.addMover(mover2, 25, 50, &_globals->_player);
|
|
|
|
_hotspot17.setPosition(Common::Point(554, 182));
|
|
_globals->_player.disableControl();
|
|
|
|
_sceneMode = 5105;
|
|
setAction(&_sequenceManager, this, 5105, &_globals->_player, NULL);
|
|
}
|
|
break;
|
|
case 5300:
|
|
switch (_globals->_stripNum) {
|
|
case 5300:
|
|
_sceneMode = 5111;
|
|
|
|
_globals->_player.setVisage(5101);
|
|
_globals->_player.setStrip(6);
|
|
_globals->_player.fixPriority(170);
|
|
_globals->_player.setPosition(Common::Point(1168, 110));
|
|
|
|
setAction(&_sequenceManager, this, 5111, &_globals->_player, NULL);
|
|
_hotspot8.setPosition(Common::Point(1107, 178));
|
|
break;
|
|
case 5302:
|
|
_globals->_player.setPosition(Common::Point(512, 190));
|
|
|
|
if (_globals->_sceneObjects->contains(&_hotspot8))
|
|
setAction(&_action2);
|
|
else
|
|
_globals->_player.enableControl();
|
|
break;
|
|
case 5303:
|
|
_hotspot8.setVisage(5102);
|
|
_hotspot8.setPosition(Common::Point(533, 172));
|
|
_globals->_player.setPosition(Common::Point(512, 190));
|
|
setAction(&_action2);
|
|
break;
|
|
}
|
|
|
|
if (_globals->getFlag(108)) {
|
|
_hotspot6.postInit();
|
|
_hotspot6.setVisage(5362);
|
|
_hotspot6.setPosition(Common::Point(542, 19));
|
|
_hotspot6.setStrip(6);
|
|
_hotspot6.setFrame(1);
|
|
_globals->_sceneItems.push_back(&_hotspot6);
|
|
} else if (RING_INVENTORY._vial._sceneNumber != 5100) {
|
|
_hotspot6.postInit();
|
|
_hotspot6.setVisage(5362);
|
|
_hotspot6.setPosition(Common::Point(1152, 70));
|
|
_hotspot6.fixPriority(170);
|
|
_hotspot6.setStrip(6);
|
|
_hotspot6.setFrame(1);
|
|
_globals->_sceneItems.push_back(&_hotspot6);
|
|
}
|
|
break;
|
|
}
|
|
|
|
_hotspot18.setBounds(Rect(0, 0, 1280, 200));
|
|
_globals->_sceneItems.push_back(&_hotspot18);
|
|
|
|
_hotspot15.postInit();
|
|
_hotspot15.setVisage(5140);
|
|
_hotspot15.setStrip(3);
|
|
_hotspot15.setPosition(Common::Point(977, 173));
|
|
_hotspot15.fixPriority(1);
|
|
|
|
_globals->_sceneManager._scene->_sceneBounds.center(_globals->_player._position);
|
|
loadScene(5100);
|
|
_globals->_soundHandler.startSound(205);
|
|
}
|
|
|
|
void Scene5100::signal() {
|
|
switch (_sceneMode) {
|
|
case 5101:
|
|
case 5112:
|
|
_globals->setFlag(67);
|
|
_globals->_sceneManager.changeScene(5300);
|
|
break;
|
|
case 5102:
|
|
case 5114:
|
|
_globals->_player.enableControl();
|
|
break;
|
|
case 5103:
|
|
if (_globals->getFlag(61)) {
|
|
SceneItem::display2(5100, 46);
|
|
_globals->_sceneManager.changeScene(5300);
|
|
} else {
|
|
SceneItem::display2(5100, 45);
|
|
_globals->_sceneManager.changeScene(5200);
|
|
}
|
|
break;
|
|
case 5105:
|
|
_globals->_sceneManager.changeScene(5300);
|
|
break;
|
|
case 5106:
|
|
_globals->_stripNum = 5111;
|
|
_globals->_sceneManager.changeScene(5200);
|
|
break;
|
|
case 5108:
|
|
if (!_globals->getFlag(60))
|
|
_globals->_player.enableControl();
|
|
else if (RING_INVENTORY._stasisBox._sceneNumber == 1)
|
|
setAction(&_action2);
|
|
else
|
|
setAction(&_action5);
|
|
break;
|
|
case 5110:
|
|
SceneItem::display2(5100, 30);
|
|
_globals->_player._angle = 325;
|
|
_globals->_player.enableControl();
|
|
break;
|
|
case 5111:
|
|
_globals->_player.setObjectWrapper(new SceneObjectWrapper());
|
|
_globals->_player.setVisage(0);
|
|
_globals->_player.setStrip(6);
|
|
_globals->_player.fixPriority(-1);
|
|
_globals->_player.animate(ANIM_MODE_1, NULL);
|
|
|
|
if ((RING_INVENTORY._vial._sceneNumber != 5100) && !_globals->getFlag(108)) {
|
|
_globals->setFlag(108);
|
|
_sceneMode = 5130;
|
|
_globals->_player.disableControl();
|
|
|
|
_speakerBatText.setTextPos(Common::Point(_globals->_sceneManager._scene->_sceneBounds.left + 20, 30));
|
|
setAction(&_sequenceManager, this, 5130, &_globals->_player, &_hotspot6, NULL);
|
|
} else if (_globals->_sceneObjects->contains(&_hotspot8)) {
|
|
setAction(&_action2);
|
|
} else {
|
|
_globals->_player.enableControl();
|
|
}
|
|
break;
|
|
case 5116:
|
|
_globals->setFlag(105);
|
|
RING_INVENTORY._bone._sceneNumber = 0;
|
|
|
|
_globals->_player.setObjectWrapper(new SceneObjectWrapper());
|
|
_globals->_player.setVisage(0);
|
|
_globals->_player.setStrip(6);
|
|
_globals->_player.fixPriority(-1);
|
|
_globals->_player.animate(ANIM_MODE_1, NULL);
|
|
// No break on purpose
|
|
case 5117:
|
|
_globals->_player.enableControl();
|
|
break;
|
|
case 5130:
|
|
_hotspot6.setVisage(5362);
|
|
_hotspot6.setPosition(Common::Point(542, 25));
|
|
_hotspot6.setStrip(6);
|
|
_hotspot6.setFrame(1);
|
|
_globals->_player.enableControl();
|
|
break;
|
|
case 5150:
|
|
_globals->clearFlag(60);
|
|
_globals->_sceneManager.changeScene(5300);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene5100::dispatch() {
|
|
// Flesheater trap
|
|
if (_hotspot15._bounds.contains(_globals->_player._position) && !_globals->_player._visage) {
|
|
_globals->_player.disableControl();
|
|
_globals->_player.addMover(NULL);
|
|
|
|
_soundHandler.startSound(207);
|
|
_sceneMode = 5103;
|
|
setAction(&_sequenceManager, this, (_globals->_player._position.x >= 966) ? 5104 : 5103,
|
|
&_globals->_player, &_hotspot15, NULL);
|
|
}
|
|
|
|
if (_globals->getFlag(61) && !_globals->getFlag(62) &&
|
|
((_globals->_player._position.x - _hotspot2._position.x) < 160) &&
|
|
(_globals->_sceneManager._previousScene != 5200) &&
|
|
(_globals->_sceneManager._previousScene != 5150)) {
|
|
setAction(NULL);
|
|
_sceneMode = 5150;
|
|
_soundHandler.startSound(208);
|
|
|
|
if (RING_INVENTORY._vial._sceneNumber == 5100) {
|
|
_globals->_player.addMover(NULL);
|
|
_globals->_player.disableControl();
|
|
SceneItem::display2(5100, 39);
|
|
}
|
|
|
|
_hotspot2.setStrip2(1);
|
|
_hotspot3.setStrip2(2);
|
|
|
|
ObjectMover3 *mover1 = new ObjectMover3();
|
|
_hotspot2.addMover(mover1, &_globals->_player, 20, this);
|
|
ObjectMover3 *mover2 = new ObjectMover3();
|
|
_hotspot3.addMover(mover2, &_globals->_player, 20, this);
|
|
}
|
|
|
|
if (!_action) {
|
|
if (((_globals->_player._position.x - _hotspot2._position.x) < 130) && !_globals->getFlag(61)) {
|
|
_globals->_player._canWalk = false;
|
|
_globals->_player.addMover(NULL);
|
|
|
|
Common::Point pt(20, 25);
|
|
PlayerMover2 *mover = new PlayerMover2();
|
|
_hotspot3.addMover(mover, &pt, &_globals->_player);
|
|
setAction(&_action4);
|
|
}
|
|
|
|
if ((_globals->_sceneManager._scene->_backgroundBounds.right - 85) <= _globals->_player._position.x)
|
|
_globals->_sceneManager.changeScene(5000);
|
|
|
|
if (_globals->_player.getRegionIndex() == 8) {
|
|
_sceneMode = 5114;
|
|
setAction(&_sequenceManager, this, 5115, &_globals->_player, NULL);
|
|
}
|
|
}
|
|
|
|
Scene::dispatch();
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------
|
|
* Scene 5200 - Caverns - Throne Room
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
void Scene5200::Action1::signal() {
|
|
Scene5200 *scene = (Scene5200 *)_globals->_sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
setDelay(_globals->_randomSource.getRandomNumber(59) + 120);
|
|
break;
|
|
case 1:
|
|
scene->_hotspot3.animate(ANIM_MODE_8, 1, this);
|
|
_actionIndex = 0;
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene5200::Action2::signal() {
|
|
// Quinn obtains the stasis box from the flesheater throne room
|
|
Scene5200 *scene = (Scene5200 *)_globals->_sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
_globals->_player.disableControl();
|
|
ADD_PLAYER_MOVER(92, 52);
|
|
break;
|
|
case 1:
|
|
_globals->_player.setVisage(5202);
|
|
_globals->_player._strip = 4;
|
|
_globals->_player._frame = 1;
|
|
_globals->_player.animate(ANIM_MODE_4, 3, 1, this);
|
|
break;
|
|
case 2:
|
|
scene->_soundHandler.proc3();
|
|
scene->_hotspot14.remove();
|
|
|
|
RING_INVENTORY._stasisBox._sceneNumber = 1;
|
|
_globals->_player.animate(ANIM_MODE_5, this);
|
|
break;
|
|
case 3:
|
|
_globals->_player.setVisage(0);
|
|
_globals->_player._strip = 3;
|
|
_globals->_player.animate(ANIM_MODE_1, NULL);
|
|
|
|
scene->_hotspot8.animate(ANIM_MODE_2, NULL);
|
|
ADD_MOVER(scene->_hotspot8, 141, 77);
|
|
break;
|
|
case 4:
|
|
scene->_soundHandler.startSound(303);
|
|
|
|
scene->_hotspot8._strip = 2;
|
|
scene->_hotspot8._frame = 1;
|
|
scene->_hotspot8.animate(ANIM_MODE_5, this);
|
|
break;
|
|
case 5:
|
|
_globals->_player.enableControl();
|
|
remove();
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene5200::Action3::signal() {
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
_globals->_player.disableControl();
|
|
setDelay(5);
|
|
break;
|
|
case 1:
|
|
ADD_PLAYER_MOVER(285, 62);
|
|
break;
|
|
case 2:
|
|
_globals->_player.enableControl();
|
|
remove();
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene5200::Action4::signal() {
|
|
Scene5200 *scene = (Scene5200 *)_globals->_sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
setDelay(120);
|
|
break;
|
|
case 1:
|
|
_globals->_soundHandler.startSound(209);
|
|
scene->_stripManager.start(5202, this, scene);
|
|
break;
|
|
case 2:
|
|
scene->_hotspot6.animate(ANIM_MODE_5, this);
|
|
break;
|
|
case 3:
|
|
setDelay(10);
|
|
break;
|
|
case 4:
|
|
scene->_stripManager.start(5204, this, scene);
|
|
break;
|
|
case 5:
|
|
setDelay(60);
|
|
break;
|
|
case 6:
|
|
_globals->_sceneManager.changeScene(5100);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
void Scene5200::Hotspot9::doAction(int action) {
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
if (!_state) {
|
|
++_state;
|
|
SceneItem::display2(5200, 5);
|
|
} else {
|
|
SceneItem::display2(5200, 6);
|
|
}
|
|
break;
|
|
case CURSOR_USE:
|
|
SceneItem::display2(5200, 14);
|
|
break;
|
|
default:
|
|
SceneItem::doAction(action);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene5200::Hotspot10::doAction(int action) {
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
if (!_state) {
|
|
++_state;
|
|
SceneItem::display2(5200, 7);
|
|
} else {
|
|
SceneItem::display2(5200, 8);
|
|
}
|
|
break;
|
|
default:
|
|
SceneObject::doAction(action);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene5200::Hotspot14::doAction(int action) {
|
|
Scene5200 *scene = (Scene5200 *)_globals->_sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(5200, 4);
|
|
break;
|
|
case CURSOR_USE:
|
|
scene->setAction(&scene->_action2);
|
|
break;
|
|
default:
|
|
SceneObject::doAction(action);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
Scene5200::Scene5200() :
|
|
_hotspot11(0, CURSOR_LOOK, 5200, 0, CURSOR_USE, 5200, 13, LIST_END),
|
|
_hotspot12(10, CURSOR_LOOK, 5200, 9, LIST_END),
|
|
_hotspot13(8, CURSOR_LOOK, 5200, 0, CURSOR_USE, 5200, 13, LIST_END) {
|
|
}
|
|
|
|
|
|
void Scene5200::postInit(SceneObjectList *OwnerList) {
|
|
Scene::postInit();
|
|
setZoomPercents(0, 150, 199, 150);
|
|
_fieldA = 5600;
|
|
_fieldE = 5100;
|
|
|
|
_hotspot9._state = 0;
|
|
_hotspot10._state = 0;
|
|
_stripManager.addSpeaker(&_speakerQText);
|
|
_stripManager.addSpeaker(&_speakerGameText);
|
|
_stripManager.addSpeaker(&_speakerFLText);
|
|
_stripManager.addSpeaker(&_speakerFLL);
|
|
_stripManager.addSpeaker(&_speakerQL);
|
|
_stripManager.setCallback(this);
|
|
|
|
_speakerFLText._textPos.x = 160;
|
|
_speakerQText._textPos.x = 20;
|
|
|
|
if (RING_INVENTORY._stasisBox._sceneNumber == 5200) {
|
|
_soundHandler.startSound(216);
|
|
_soundHandler.proc5(true);
|
|
|
|
_hotspot14.postInit();
|
|
_hotspot14.setVisage(5202);
|
|
_hotspot14._strip = 3;
|
|
_hotspot14.setPosition(Common::Point(105, 52));
|
|
_hotspot14.fixPriority(90);
|
|
|
|
_hotspot8.postInit();
|
|
_hotspot8.setVisage(5202);
|
|
_hotspot8._strip = 1;
|
|
_hotspot8.setPosition(Common::Point(96, 53));
|
|
_hotspot8.fixPriority(90);
|
|
_globals->_sceneItems.push_back(&_hotspot14);
|
|
}
|
|
|
|
if (_globals->_stripNum == 5111) {
|
|
// Happens when the player enters the throne room via the secret passage,
|
|
// after talking with the bat. No NPCs are around and the player can
|
|
// obtain the stasis box.
|
|
_globals->_soundHandler.startSound(205);
|
|
_globals->_player.disableControl();
|
|
|
|
_globals->_player.postInit();
|
|
_globals->_player.setVisage(0);
|
|
_globals->_player.changeZoom(75);
|
|
_globals->_player.setObjectWrapper(new SceneObjectWrapper());
|
|
_globals->_player.animate(ANIM_MODE_1, NULL);
|
|
_globals->_player.setStrip(1);
|
|
_globals->_player.setFrame(3);
|
|
_globals->_player.setPosition(Common::Point(307, 62));
|
|
|
|
setAction(&_action3);
|
|
} else {
|
|
// Happens when the player is captured by the flesh eaters the first time.
|
|
_globals->_player.postInit();
|
|
_globals->_player.setVisage(2640);
|
|
_globals->_player._strip = 1;
|
|
_globals->_player._frame = 4;
|
|
_globals->_player.setPosition(Common::Point(105, 199));
|
|
|
|
_hotspot5.postInit();
|
|
_hotspot5.setVisage(5210);
|
|
_hotspot5._frame = 2;
|
|
_hotspot5.setPosition(Common::Point(189, 167));
|
|
|
|
_hotspot6.postInit();
|
|
_hotspot6.setVisage(5210);
|
|
_hotspot6._frame = 1;
|
|
_hotspot6._strip = 2;
|
|
_hotspot6.setPosition(Common::Point(159, 137));
|
|
|
|
_hotspot7.postInit();
|
|
_hotspot7.setVisage(5210);
|
|
_hotspot7._frame = 1;
|
|
_hotspot7._strip = 4;
|
|
_hotspot7.fixPriority(168);
|
|
_hotspot7.setPosition(Common::Point(186, 106));
|
|
|
|
_hotspot1.postInit();
|
|
_hotspot1.setVisage(5212);
|
|
_hotspot1._frame = 1;
|
|
_hotspot1.setPosition(Common::Point(62, 132));
|
|
|
|
_hotspot2.postInit();
|
|
_hotspot2.setVisage(5212);
|
|
_hotspot2._strip = 3;
|
|
_hotspot2.setPosition(Common::Point(148, 141));
|
|
_hotspot2.fixPriority(90);
|
|
|
|
_hotspot3.postInit();
|
|
_hotspot3.setVisage(5212);
|
|
_hotspot3._strip = 2;
|
|
_hotspot3.setPosition(Common::Point(62, 109));
|
|
_hotspot3.fixPriority(138);
|
|
_hotspot3.setAction(&_action1);
|
|
|
|
_hotspot4.postInit();
|
|
_hotspot4.setVisage(5212);
|
|
_hotspot4._strip = 4;
|
|
_hotspot4.setPosition(Common::Point(146, 110));
|
|
_hotspot4.fixPriority(90);
|
|
|
|
_globals->_player.disableControl();
|
|
_globals->setFlag(61);
|
|
|
|
setAction(&_action4);
|
|
}
|
|
|
|
_hotspot11.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT));
|
|
_hotspot9._sceneRegionId = 11;
|
|
_hotspot10._sceneRegionId = 9;
|
|
_hotspot12._sceneRegionId = 10;
|
|
_hotspot13._sceneRegionId = 8;
|
|
|
|
_globals->_sceneItems.addItems(&_hotspot12, &_hotspot13, &_hotspot9, &_hotspot10, &_hotspot11, NULL);
|
|
_globals->_sceneManager._scene->_sceneBounds.center(_globals->_player._position);
|
|
loadScene(5200);
|
|
}
|
|
|
|
void Scene5200::stripCallback(int v) {
|
|
switch (v) {
|
|
case 1:
|
|
_hotspot7.animate(ANIM_MODE_2, NULL);
|
|
break;
|
|
case 2:
|
|
_hotspot7.animate(ANIM_MODE_NONE, NULL);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene5200::dispatch() {
|
|
Scene::dispatch();
|
|
|
|
if (!_action && (_globals->_player.getRegionIndex() == 12)) {
|
|
_globals->_stripNum = 5200;
|
|
_globals->_sceneManager.changeScene(5100);
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------
|
|
* Scene 5300 - Caverns - Pit
|
|
*
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
void Scene5300::Action1::signal() {
|
|
Scene5300 *scene = (Scene5300 *)_globals->_sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
_globals->_player.disableControl();
|
|
setDelay(3);
|
|
break;
|
|
case 1:
|
|
scene->_hotspot2._numFrames = 4;
|
|
scene->_hotspot2.animate(ANIM_MODE_8, 1, NULL);
|
|
setDelay(120);
|
|
break;
|
|
case 2:
|
|
scene->_hotspot2.animate(ANIM_MODE_NONE, NULL);
|
|
|
|
_globals->_player.animate(ANIM_MODE_1, NULL);
|
|
_globals->_player.setStrip2(-1);
|
|
_globals->_player.setObjectWrapper(new SceneObjectWrapper());
|
|
ADD_MOVER(_globals->_player, 85, 170);
|
|
break;
|
|
case 3:
|
|
scene->_hotspot2.fixPriority(-1);
|
|
_globals->_player.checkAngle(&scene->_hotspot2);
|
|
setAction(&scene->_sequenceManager, this, 5305, &scene->_hotspot2, NULL);
|
|
break;
|
|
case 4:
|
|
scene->_stripManager.start(5316, this);
|
|
break;
|
|
case 5:
|
|
if (!_globals->getFlag(106) || !_globals->getFlag(107) || (RING_INVENTORY._stasisBox._sceneNumber != 1)) {
|
|
_globals->_player.enableControl();
|
|
remove();
|
|
} else {
|
|
_globals->getFlag(60);
|
|
|
|
if (_globals->getFlag(67)) {
|
|
scene->_sceneMode = 5310;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5310, &_globals->_player, &scene->_hotspot2, NULL);
|
|
} else {
|
|
scene->_sceneMode = 5347;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5347, NULL);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene5300::Action2::signal() {
|
|
Scene5300 *scene = (Scene5300 *)_globals->_sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
_globals->_player.disableControl();
|
|
setDelay(60);
|
|
break;
|
|
case 1:
|
|
_globals->setFlag(60);
|
|
scene->_stripManager.start(5328, this);
|
|
break;
|
|
case 2:
|
|
if (RING_INVENTORY._stasisBox._sceneNumber == 1) {
|
|
_globals->_stripNum = 5303;
|
|
setDelay(5);
|
|
} else {
|
|
_globals->_stripNum = 5302;
|
|
scene->_stripManager.start(5329, this);
|
|
}
|
|
break;
|
|
case 3:
|
|
_globals->_sceneManager.changeScene(5100);
|
|
remove();
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene5300::Action3::signal() {
|
|
Scene5300 *scene = (Scene5300 *)_globals->_sceneManager._scene;
|
|
|
|
switch (_actionIndex++) {
|
|
case 0:
|
|
_globals->_player.disableControl();
|
|
setDelay(30);
|
|
break;
|
|
case 1:
|
|
scene->_stripManager.start(_globals->_stripNum, this);
|
|
break;
|
|
case 2:
|
|
_globals->_player.enableControl();
|
|
remove();
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
void Scene5300::Hotspot1::doAction(int action) {
|
|
Scene5300 *scene = (Scene5300 *)_globals->_sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(5300, 24);
|
|
break;
|
|
case CURSOR_TALK:
|
|
_globals->_stripNum = 5312;
|
|
scene->setAction(&scene->_action3);
|
|
break;
|
|
default:
|
|
SceneHotspot::doAction(action);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene5300::Hotspot2::doAction(int action) {
|
|
Scene5300 *scene = (Scene5300 *)_globals->_sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(5300, 23);
|
|
break;
|
|
case CURSOR_USE:
|
|
if (!_globals->getFlag(106)) {
|
|
_globals->_player.disableControl();
|
|
scene->_sceneMode = 5302;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5302, &_globals->_player, NULL);
|
|
} else {
|
|
SceneItem::display2(5300, _globals->getFlag(107) ? 25 : 20);
|
|
}
|
|
break;
|
|
case CURSOR_TALK:
|
|
if (!_globals->getFlag(106)) {
|
|
_globals->_player.disableControl();
|
|
scene->_sceneMode = 5302;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5302, &_globals->_player, NULL);
|
|
} else if (!_globals->getFlag(107)) {
|
|
SceneItem::display2(5300, 11);
|
|
} else {
|
|
_globals->_player.disableControl();
|
|
|
|
if (RING_INVENTORY._stasisBox._sceneNumber != 1) {
|
|
scene->setAction(&scene->_sequenceManager, scene, 5316, NULL);
|
|
} else {
|
|
_globals->setFlag(60);
|
|
scene->_sceneMode = _globals->getFlag(67) ? 5315 : 5347;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5315, this);
|
|
}
|
|
}
|
|
break;
|
|
case OBJECT_SCANNER:
|
|
SceneItem::display2(5300, _globals->getFlag(107) ? 10 : 9);
|
|
break;
|
|
case OBJECT_MEDKIT:
|
|
if (_globals->getFlag(106))
|
|
SceneItem::display2(5300, 7);
|
|
else {
|
|
_globals->setFlag(106);
|
|
_globals->_player.disableControl();
|
|
|
|
scene->_sceneMode = 5303;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5303, &_globals->_player, NULL);
|
|
}
|
|
break;
|
|
case OBJECT_VIAL:
|
|
if (_globals->getFlag(107)) {
|
|
SceneItem::display2(5300, 8);
|
|
} else {
|
|
RING_INVENTORY._vial._sceneNumber = 5300;
|
|
_globals->setFlag(107);
|
|
_globals->_player.disableControl();
|
|
scene->_sceneMode = 5304;
|
|
|
|
scene->setAction(&scene->_sequenceManager, scene, 5304, &_globals->_player, NULL);
|
|
}
|
|
break;
|
|
default:
|
|
SceneHotspot::doAction(action);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene5300::Hotspot5::doAction(int action) {
|
|
Scene5300 *scene = (Scene5300 *)_globals->_sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(5300, 27);
|
|
break;
|
|
case CURSOR_USE:
|
|
RING_INVENTORY._bone._sceneNumber = 1;
|
|
_globals->_player.disableControl();
|
|
|
|
scene->_sceneMode = 5309;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5309, &_globals->_player, this, NULL);
|
|
break;
|
|
default:
|
|
SceneHotspot::doAction(action);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene5300::Hotspot6::doAction(int action) {
|
|
// Left Hole
|
|
Scene5300 *scene = (Scene5300 *)_globals->_sceneManager._scene;
|
|
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
if (!_globals->getFlag(105) || (RING_INVENTORY._vial._sceneNumber == 1))
|
|
SceneItem::display2(5300, 4);
|
|
else
|
|
SceneItem::display2(5300, 26);
|
|
break;
|
|
case CURSOR_USE:
|
|
if (!_globals->getFlag(105) || (RING_INVENTORY._vial._sceneNumber != 5100)) {
|
|
_globals->_player.disableControl();
|
|
scene->_sceneMode = 5301;
|
|
scene->setAction(&scene->_sequenceManager, scene, 5301, &_globals->_player, NULL);
|
|
} else {
|
|
_globals->_player.disableControl();
|
|
scene->_sceneMode = 5307;
|
|
RING_INVENTORY._vial._sceneNumber = 1;
|
|
|
|
scene->setAction(&scene->_sequenceManager, scene, 5307, &scene->_hotspot1, &_globals->_player,
|
|
&scene->_hotspot4, NULL);
|
|
}
|
|
break;
|
|
default:
|
|
SceneHotspot::doAction(action);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene5300::Hotspot7::doAction(int action) {
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
if (_globals->getFlag(63))
|
|
SceneItem::display2(5300, 2);
|
|
else {
|
|
_globals->setFlag(63);
|
|
SceneItem::display2(5300, 0);
|
|
SceneItem::display2(5300, 1);
|
|
}
|
|
break;
|
|
case CURSOR_USE:
|
|
if (_globals->getFlag(64))
|
|
SceneItem::display2(5300, 15);
|
|
else {
|
|
_globals->setFlag(64);
|
|
SceneItem::display2(5300, 14);
|
|
}
|
|
break;
|
|
default:
|
|
SceneHotspot::doAction(action);
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Scene5300::Hotspot8::doAction(int action) {
|
|
switch (action) {
|
|
case CURSOR_LOOK:
|
|
SceneItem::display2(5300, _globals->getFlag(65) ? 6 : 5);
|
|
break;
|
|
case CURSOR_USE:
|
|
SceneItem::display2(5300, 18);
|
|
break;
|
|
default:
|
|
SceneHotspot::doAction(action);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/*--------------------------------------------------------------------------*/
|
|
|
|
Scene5300::Scene5300() :
|
|
_hotspot3(0, CURSOR_LOOK, 5300, 3, CURSOR_USE, 5300, 16, LIST_END) {
|
|
}
|
|
|
|
void Scene5300::postInit(SceneObjectList *OwnerList) {
|
|
Scene::postInit();
|
|
loadScene(5300);
|
|
setZoomPercents(0, 100, 199, 100);
|
|
|
|
_stripManager.addSpeaker(&_speakerQR);
|
|
_stripManager.addSpeaker(&_speakerQL);
|
|
_stripManager.addSpeaker(&_speakerBatR);
|
|
_stripManager.addSpeaker(&_speakerSR);
|
|
_stripManager.addSpeaker(&_speakerSL);
|
|
_stripManager.addSpeaker(&_speakerQText);
|
|
_stripManager.addSpeaker(&_speakerBatText);
|
|
_stripManager.addSpeaker(&_speakerSText);
|
|
_stripManager.addSpeaker(&_speakerGameText);
|
|
|
|
if (_globals->getFlag(106) && _globals->getFlag(107)) {
|
|
_hotspot2.postInit();
|
|
_hotspot2.setVisage(2806);
|
|
_hotspot2.setObjectWrapper(new SceneObjectWrapper());
|
|
_hotspot2.setPosition(Common::Point(63, 170));
|
|
_hotspot2.animate(ANIM_MODE_1, NULL);
|
|
} else {
|
|
_hotspot2.postInit();
|
|
_hotspot2.setVisage(5310);
|
|
_hotspot2.setPosition(Common::Point(63, 170));
|
|
_hotspot2.animate(ANIM_MODE_1, NULL);
|
|
_hotspot2.fixPriority(98);
|
|
}
|
|
|
|
_hotspot1.postInit();
|
|
_hotspot1.setVisage(5362);
|
|
_hotspot1.setStrip2(3);
|
|
_hotspot1.setFrame2(5);
|
|
_hotspot1.setPosition(Common::Point(76, 48));
|
|
|
|
_hotspot4.postInit();
|
|
_hotspot4.setVisage(5316);
|
|
_hotspot4.setStrip(2);
|
|
_hotspot4.setPosition(Common::Point(89, 65));
|
|
_hotspot4.animate(ANIM_MODE_2, NULL);
|
|
_hotspot4.hide();
|
|
|
|
if (_globals->getFlag(67)) {
|
|
_globals->_player.postInit();
|
|
_globals->_player.setVisage(5316);
|
|
_globals->_player.setPosition(Common::Point(191, 27));
|
|
_globals->_player.disableControl();
|
|
|
|
if (_globals->getFlag(107) && _globals->getFlag(106)) {
|
|
_hotspot2.postInit();
|
|
_hotspot2.setObjectWrapper(new SceneObjectWrapper());
|
|
_hotspot2.animate(ANIM_MODE_1, NULL);
|
|
|
|
setAction(&_action2);
|
|
} else {
|
|
_globals->_player.setVisage(5315);
|
|
_globals->_player.setPosition(Common::Point(204, 86));
|
|
_globals->_player.animate(ANIM_MODE_2, NULL);
|
|
_globals->_player.setStrip2(1);
|
|
_globals->_player._moveDiff.y = 12;
|
|
|
|
_sceneMode = 5308;
|
|
setAction(&_sequenceManager, this, 5308, &_globals->_player, NULL);
|
|
}
|
|
} else {
|
|
_hotspot3.postInit();
|
|
_hotspot3.setVisage(5301);
|
|
_hotspot3.setPosition(Common::Point(172, 32));
|
|
_hotspot3.fixPriority(1);
|
|
_hotspot3.animate(ANIM_MODE_NONE, NULL);
|
|
|
|
_globals->_player.postInit();
|
|
_globals->_player.setVisage(5315);
|
|
_globals->_player.setPosition(Common::Point(204, 86));
|
|
_globals->_player.animate(ANIM_MODE_2, NULL);
|
|
_globals->_player.setStrip2(1);
|
|
_globals->_player._moveDiff.y = 12;
|
|
_globals->_player.disableControl();
|
|
|
|
_sceneMode = 5306;
|
|
setAction(&_sequenceManager, this, 5306, &_globals->_player, &_hotspot3, NULL);
|
|
}
|
|
|
|
_field1B0A = 1;
|
|
if (RING_INVENTORY._bone._sceneNumber == 5300) {
|
|
_hotspot5.postInit();
|
|
_hotspot5.setVisage(5301);
|
|
_hotspot5.setStrip(2);
|
|
_hotspot5.setPosition(Common::Point(190, 147));
|
|
_globals->_sceneItems.push_back(&_hotspot5);
|
|
}
|
|
|
|
_hotspot6.setBounds(Rect(74, 51, 114, 69));
|
|
_hotspot7.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT));
|
|
_hotspot8._sceneRegionId = 8;
|
|
|
|
_globals->_sceneItems.addItems(&_hotspot8, &_hotspot2, &_hotspot6, &_hotspot3, &_hotspot7, NULL);
|
|
_globals->_soundHandler.startSound(212);
|
|
}
|
|
|
|
void Scene5300::signal() {
|
|
switch (_sceneMode) {
|
|
case 5301:
|
|
_globals->_stripNum = 5300;
|
|
_globals->_sceneManager.changeScene(5100);
|
|
break;
|
|
case 5307:
|
|
_soundHandler.proc1(NULL);
|
|
// No break on purpose
|
|
case 5302:
|
|
case 5308:
|
|
case 5316:
|
|
case 5347:
|
|
_globals->_player.setStrip2(-1);
|
|
_globals->_player.animate(ANIM_MODE_1, NULL);
|
|
_globals->_player.enableControl();
|
|
break;
|
|
case 5303:
|
|
_globals->_player.animate(ANIM_MODE_1, NULL);
|
|
_globals->_player.enableControl();
|
|
|
|
if (_globals->getFlag(107))
|
|
setAction(&_action1);
|
|
else
|
|
SceneItem::display2(5300, 28);
|
|
break;
|
|
case 5304:
|
|
_globals->_player.animate(ANIM_MODE_1, NULL);
|
|
_globals->_player.enableControl();
|
|
|
|
if (_globals->getFlag(106))
|
|
setAction(&_action1);
|
|
else
|
|
SceneItem::display2(5300, 28);
|
|
break;
|
|
case 5306:
|
|
_globals->clearFlag(67);
|
|
_globals->_player.setStrip2(-1);
|
|
|
|
if ((RING_INVENTORY._vial._sceneNumber == 1) || (RING_INVENTORY._vial._sceneNumber == 5300))
|
|
_stripManager.start(5303, this);
|
|
else
|
|
_stripManager.start(5302, this);
|
|
_sceneMode = 5302;
|
|
break;
|
|
case 5309:
|
|
_hotspot5.remove();
|
|
_globals->_player.enableControl();
|
|
break;
|
|
case 5310:
|
|
_hotspot2.fixPriority(41);
|
|
_sceneMode = 5315;
|
|
|
|
setAction(&_sequenceManager, this, 5315, &_hotspot2, NULL);
|
|
break;
|
|
case 5315:
|
|
_globals->_stripNum = 5315;
|
|
_globals->_sceneManager.changeScene(5100);
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
} // End of namespace tSage
|