scummvm/engines/tsage/ringworld_scenes6.cpp

2174 lines
55 KiB
C++
Raw Normal View History

/* 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