aboutsummaryrefslogtreecommitdiff
path: root/engines/tsage/ringworld_scenes6.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/tsage/ringworld_scenes6.cpp')
-rw-r--r--engines/tsage/ringworld_scenes6.cpp2173
1 files changed, 2173 insertions, 0 deletions
diff --git a/engines/tsage/ringworld_scenes6.cpp b/engines/tsage/ringworld_scenes6.cpp
new file mode 100644
index 0000000000..3ea4d7b279
--- /dev/null
+++ b/engines/tsage/ringworld_scenes6.cpp
@@ -0,0 +1,2173 @@
+/* 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() {
+ 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.setPriority2(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.setPriority2(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.setPriority2(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.setPriority2(-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.setPriority2(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.setPriority2(14);
+ ADD_MOVER(scene->_hotspot7, 208, 100);
+ break;
+ case 3:
+ ADD_MOVER(scene->_hotspot7, 213, 98);
+ break;
+ case 4:
+ scene->_hotspot7.setPriority2(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.setPriority2(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.setPriority2(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.setPriority2(-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.setPriority2(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.setPriority2(35);
+ ADD_MOVER(_globals->_player, 201, 166);
+ break;
+ case 4:
+ ADD_MOVER(_globals->_player, 229, 115);
+ break;
+ case 5:
+ _globals->_player.setPriority2(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.setPriority2(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() {
+ 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.setPriority2(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:
+ setAction(&scene->_action6);
+ break;
+ default:
+ SceneHotspot::doAction(action);
+ break;
+ }
+}
+
+void Scene5000::Hotspot8::doAction(int action) {
+ 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:
+ 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.setPriority2(10);
+ _hotspot1.changeZoom(10);
+
+ _hotspot4.postInit();
+ _hotspot4.setVisage(5001);
+ _hotspot4.setStrip2(2);
+ _hotspot4._moveDiff = Common::Point(5, 1);
+ _hotspot4.setPriority2(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.setPriority2(15);
+ _hotspot5.setPosition(Common::Point(218, 76));
+ _hotspot5.hide();
+
+ _hotspot9.postInit();
+ _hotspot9.setVisage(5002);
+ _hotspot9.setPriority2(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, 3219, 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.setPriority2(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(1215, 155);
+ } else {
+ ADD_PLAYER_MOVER_THIS(scene->_hotspot8, 966, 185);
+ }
+
+ if (_globals->_player._position.x >= 966) {
+ setDelay(1);
+ } else {
+ ADD_PLAYER_MOVER(966, 190);
+ }
+ break;
+ case 4:
+ ADD_PLAYER_MOVER_THIS(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) {
+ 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) {
+ Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(5100, _globals->getFlag(62) ? 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) {
+ 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, &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) {
+ 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.setPriority2(200);
+ _hotspot14._moveDiff.y = 10;
+ }
+
+ _hotspot17.postInit();
+ _hotspot17.setVisage(5101);
+ _hotspot17._strip = 2;
+ _hotspot17.setPriority2(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) && (_globals->_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.setPriority2(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.setPriority2(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 (_globals->_inventory._vial._sceneNumber != 5100) {
+ _hotspot6.postInit();
+ _hotspot6.setVisage(5362);
+ _hotspot6.setPosition(Common::Point(1152, 70));
+ _hotspot6.setPriority2(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.setPriority2(1);
+
+ _globals->_sceneManager._scene->_sceneBounds.centre(_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 (_globals->_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(6);
+ _globals->_player.setStrip(6);
+ _globals->_player.setPriority2(-1);
+ _globals->_player.animate(ANIM_MODE_1, NULL);
+
+ if ((_globals->_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);
+ _globals->_inventory._bone._sceneNumber = 0;
+
+ _globals->_player.setObjectWrapper(new SceneObjectWrapper());
+ _globals->_player.setVisage(0);
+ _globals->_player.setStrip(6);
+ _globals->_player.setPriority2(-1);
+ _globals->_player.animate(ANIM_MODE_1, NULL);
+ break;
+ 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() {
+ 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 (_globals->_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, 20, this);
+ ObjectMover3 *mover2 = new ObjectMover3();
+ _hotspot3.addMover(mover2, 20, this);
+ }
+
+ if (!_action) {
+ if (((_globals->_player._position.x - _hotspot2._position.x) < 130) && !_globals->getFlag(61)) {
+ _globals->_player._canWalk = false;
+ _globals->_player.addMover(NULL);
+
+ PlayerMover2 *mover = new PlayerMover2();
+ _hotspot3.addMover(mover, 20, 25, &_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() {
+ 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();
+
+ _globals->_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++) {
+ _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:
+ SceneItem::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:
+ SceneItem::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 (_globals->_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.setPriority2(90);
+
+ _hotspot8.postInit();
+ _hotspot8.setVisage(5202);
+ _hotspot8._strip = 1;
+ _hotspot8.setPosition(Common::Point(96, 53));
+ _hotspot8.setPriority2(90);
+ _globals->_sceneItems.push_back(&_hotspot14);
+ }
+
+ if (_globals->_stripNum == 1111) {
+ _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 {
+ _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.setPriority2(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.setPriority2(90);
+
+ _hotspot3.postInit();
+ _hotspot3.setVisage(5212);
+ _hotspot3._strip = 2;
+ _hotspot3.setPosition(Common::Point(62, 109));
+ _hotspot3.setPriority2(138);
+ _hotspot3.setAction(&_action1);
+
+ _hotspot4.postInit();
+ _hotspot4.setVisage(5212);
+ _hotspot4._strip = 4;
+ _hotspot4.setPosition(Common::Point(146, 110));
+ _hotspot4.setPriority2(90);
+
+ _globals->_player.disableControl();
+ _globals->setFlag(61);
+
+ setAction(&_action4);
+ }
+
+ _hotspot11.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT));
+ _hotspot9._sceneRegionId = 11;
+ _hotspot10._sceneRegionId = 9;
+
+ _globals->_sceneItems.addItems(&_hotspot12, &_hotspot13, &_hotspot9, &_hotspot10, &_hotspot11, NULL);
+ _globals->_sceneManager._scene->_sceneBounds.centre(_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.setPriority2(-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) || (_globals->_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 (_globals->_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 (_globals->_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 {
+ _globals->_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:
+ _globals->_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) {
+ Scene5300 *scene = (Scene5300 *)_globals->_sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ if (!_globals->getFlag(105) || (_globals->_inventory._vial._sceneNumber == 1))
+ SceneItem::display2(5300, 4);
+ else
+ SceneItem::display2(5300, 26);
+ break;
+ case CURSOR_USE:
+ if (!_globals->getFlag(105) || (_globals->_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;
+ _globals->_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.setPriority2(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.setPriority2(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 (_globals->_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 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 ((_globals->_inventory._vial._sceneNumber == 1) || (_globals->_inventory._vial._sceneNumber == 5300))
+ _stripManager.start(5303, this);
+ else
+ _stripManager.start(5302, this);
+ _sceneMode = 5302;
+ break;
+ case 5307:
+ _soundHandler.proc1(NULL);
+ break;
+ case 5309:
+ _hotspot5.remove();
+ _globals->_player.enableControl();
+ break;
+ case 5310:
+ _hotspot2.setPriority2(41);
+ _sceneMode = 5315;
+
+ setAction(&_sequenceManager, this, 5315, &_hotspot2, NULL);
+ break;
+ case 5315:
+ _globals->_stripNum = 5315;
+ _globals->_sceneManager.changeScene(5100);
+ break;
+ }
+}
+
+
+} // End of namespace tSage