scummvm/engines/tsage/ringworld_scenes3.cpp

6134 lines
153 KiB
C++

/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
#include "common/config-manager.h"
#include "tsage/ringworld_scenes3.h"
#include "tsage/scenes.h"
#include "tsage/tsage.h"
#include "tsage/staticres.h"
namespace tSage {
/*--------------------------------------------------------------------------
* Scene 2000 - Cockpit cutscenes
*
*--------------------------------------------------------------------------*/
void Scene2000::Action1::signal() {
Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
error("Old stuff");
break;
case 1:
scene->_stripManager.start(2075, this);
break;
case 2:
setDelay(4);
break;
case 3:
_globals->_stripNum = 0;
_globals->_sceneManager.changeScene(1250);
break;
}
}
void Scene2000::Action2::signal() {
Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
scene->_object2.animate(ANIM_MODE_6, NULL);
setDelay(_globals->_randomSource.getRandomNumber(179) + 60);
break;
case 1:
setDelay(_globals->_randomSource.getRandomNumber(179) + 60);
if (_globals->_randomSource.getRandomNumber(4) >= 2)
_actionIndex = 0;
break;
case 2:
setDelay(_globals->_randomSource.getRandomNumber(179) + 60);
_actionIndex = _globals->_randomSource.getRandomNumber(1);
break;
}
}
void Scene2000::Action3::signal() {
Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
scene->_object6.animate(ANIM_MODE_5, NULL);
setDelay(_globals->_randomSource.getRandomNumber(179) + 60);
break;
case 1:
scene->_object6.animate(ANIM_MODE_6, NULL);
setDelay(_globals->_randomSource.getRandomNumber(179) + 60);
_actionIndex = 0;
break;
}
}
void Scene2000::Action4::signal() {
Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
scene->_object4.animate(ANIM_MODE_5, NULL);
setDelay(_globals->_randomSource.getRandomNumber(179) + 60);
break;
case 1:
scene->_object4.animate(ANIM_MODE_6, NULL);
setDelay(_globals->_randomSource.getRandomNumber(179) + 60);
_actionIndex = 0;
break;
}
}
void Scene2000::Action5::signal() {
Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
scene->_object3.animate(ANIM_MODE_5, NULL);
setDelay(_globals->_randomSource.getRandomNumber(125) + 300);
break;
case 1:
scene->_object3.animate(ANIM_MODE_6, NULL);
setDelay(_globals->_randomSource.getRandomNumber(125) + 300);
_actionIndex = 0;
break;
}
}
void Scene2000::Action6::signal() {
Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(130);
break;
case 1:
scene->_soundHandler2.play(79);
scene->_stripManager.start(2000, this);
break;
case 2:
_globals->_soundHandler.play(81);
scene->_object6.postInit();
scene->_object6.setVisage(2003);
scene->_object6.setAction(NULL);
scene->_object6.setStrip2(2);
scene->_object6.setPosition(Common::Point(184, 137));
scene->_object6.animate(ANIM_MODE_5, this);
break;
case 3:
scene->_stripManager.start(95, this);
break;
case 4:
scene->_object6.animate(ANIM_MODE_6, this);
break;
case 5:
_globals->_soundHandler.play(80);
scene->_object6.remove();
_globals->_sceneManager.changeScene(1001);
break;
}
}
void Scene2000::Action7::signal() {
Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(30);
break;
case 1:
scene->_stripManager.start(2072, this);
break;
case 2:
setDelay(3);
break;
case 3:
_globals->_sceneManager.changeScene(2222);
break;
}
}
void Scene2000::Action8::signal() {
Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
error("Old stuff");
break;
case 1:
scene->_stripManager.start(2073, this);
break;
case 2:
setDelay(10);
break;
case 3:
_globals->_stripNum = 2005;
_globals->_sceneManager.changeScene(1000);
break;
}
}
void Scene2000::Action9::signal() {
Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
error("Old stuff");
break;
case 1:
scene->_stripManager.start(2074, this);
break;
case 2:
setDelay(3);
break;
case 3:
_globals->_stripNum = 2008;
_globals->_sceneManager.changeScene(9999);
break;
}
}
void Scene2000::Action10::signal() {
switch (_actionIndex++) {
case 0:
setDelay(30);
break;
case 1:
error("Old stuff");
break;
case 2:
SceneItem::display(2000, 17, SET_Y, 20, SET_X, 110, SET_FONT, 2, SET_BG_COLOR, -1,
SET_FG_COLOR, 17, SET_WIDTH, 200, SET_POS_MODE, 0, SET_KEEP_ONSCREEN, 1, LIST_END);
break;
case 3:
SceneItem::display(0, 0);
_globals->_stripNum = 0;
_globals->_sceneManager.changeScene(9999);
break;
}
}
void Scene2000::Action11::signal() {
Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
error("Old stuff");
break;
case 1:
scene->_stripManager.start(2076, this);
break;
case 2:
scene->_stripManager.start(2077, this);
break;
case 3:
_globals->_stripNum = 0;
_globals->_sceneManager.changeScene(1400);
break;
}
}
void Scene2000::Action12::signal() {
Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(60);
break;
case 1:
_globals->_events.setCursor(CURSOR_WALK);
scene->_stripManager.start(2020, this);
break;
case 2:
_globals->_player.disableControl();
setDelay(10);
break;
case 3:
_globals->_sceneManager.changeScene(2300);
break;
}
}
void Scene2000::Action13::signal() {
Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(30);
break;
case 1:
scene->_stripManager.start(2078, this);
break;
case 2:
SceneItem::display(0, 0);
_globals->_stripNum = 2751;
_globals->_sceneManager.changeScene(1500);
break;
}
}
void Scene2000::Action14::signal() {
Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
_globals->_player.disableControl();
setDelay(30);
break;
case 1:
scene->_stripManager.start(2070, this);
break;
case 2:
setDelay(60);
break;
case 3:
_globals->_soundHandler.play(99);
scene->_object8.show();
scene->_object8.animate(ANIM_MODE_5, this);
break;
case 4:
_globals->_soundHandler.play(12);
scene->_object8.setStrip(2);
scene->_object8.setFrame(1);
scene->_object9.show();
scene->_object10.show();
setDelay(60);
break;
case 5:
scene->_stripManager.start(2001, this, scene);
break;
case 6:
_globals->_soundHandler.fadeOut(0/* was false */);
scene->_object8.setStrip(1);
scene->_object8.setFrame(scene->_object8.getFrameCount());
scene->_object8.animate(ANIM_MODE_6, this);
scene->_object9.remove();
scene->_object10.remove();
break;
case 7:
_globals->_soundHandler.play(111);
scene->_object8.remove();
setDelay(5);
break;
case 8:
scene->_stripManager.start(2071, this);
break;
case 9:
_globals->_stripNum = 1250;
_globals->_sceneManager.changeScene(1000);
break;
}
}
/*--------------------------------------------------------------------------*/
void Scene2000::postInit(SceneObjectList *OwnerList) {
loadScene(2000);
Scene::postInit();
setZoomPercents(0, 100, 200, 100);
_stripManager.addSpeaker(&_speakerQR);
_stripManager.addSpeaker(&_speakerSL);
_stripManager.addSpeaker(&_speakerMR);
_stripManager.addSpeaker(&_speakerQText);
_stripManager.addSpeaker(&_speakerMText);
_stripManager.addSpeaker(&_speakerSText);
_stripManager.addSpeaker(&_speakerGameText);
_stripManager.addSpeaker(&_speakerHText);
_speakerQText._npc = &_object2;
_speakerSText._npc = &_object3;
_speakerMText._npc = &_object6;
_speakerHText._npc = &_object6;
_stripManager.setCallback(this);
_object3.postInit();
_object3.setVisage(2002);
_object3.setPosition(Common::Point(65, 199));
_object4.postInit();
_object4.setVisage(2002);
_object4.setStrip(2);
_object4.setPosition(Common::Point(125, 199));
_object4.setAction(&_action4);
_object2.postInit();
_object2.setVisage(2001);
_object2.setPosition(Common::Point(43, 115));
_object2.setAction(&_action2);
_globals->_player.disableControl();
_object6.postInit();
_object6.setVisage(2003);
_object6.setPosition(Common::Point(267, 170));
_object6.setAction(&_action3);
_object8.postInit();
_object8.setVisage(2005);
_object8.setPosition(Common::Point(169, 133));
_object8.setPriority(133);
_object8.hide();
_object9.postInit();
_object9.setVisage(2005);
_object9.setStrip2(3);
_object9.setFrame(4);
_object9.setPosition(Common::Point(136, 86));
_object9.fixPriority(190);
_object9.hide();
_object10.postInit();
_object10.setVisage(2005);
_object10.setStrip2(5);
_object10.setFrame(4);
_object10.setPosition(Common::Point(202, 86));
_object10.fixPriority(195);
_object10.hide();
switch (_globals->_sceneManager._previousScene) {
case 1000:
setAction(&_action7);
break;
case 1001:
_object6.remove();
setAction(&_action12);
break;
case 1500:
setAction(&_action13);
break;
case 2200:
_globals->_soundHandler.play(111);
setAction(&_action14);
break;
case 2222:
_globals->_soundHandler.play(115);
setAction(&_action8);
break;
case 3500:
setAction(&_action11);
break;
default:
_object6.remove();
_globals->_soundHandler.play(80);
setAction(&_action6);
break;
}
_soundHandler1.play(78);
_globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds);
_globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
}
void Scene2000::stripCallback(int v) {
switch (v) {
case 0:
_object9.setStrip(3);
_object9.animate(ANIM_MODE_7, NULL);
_object10.setStrip(6);
_object10.setFrame(1);
_object10.animate(ANIM_MODE_5, NULL);
break;
case 1:
_object10.setStrip(5);
_object10.animate(ANIM_MODE_7, NULL);
_object9.setStrip(4);
_object9.setFrame(1);
_object9.animate(ANIM_MODE_5, NULL);
break;
case 2:
_object9.animate(ANIM_MODE_NONE, NULL);
break;
case 3:
_object10.setStrip(6);
_object10.setFrame(1);
_object10.animate(ANIM_MODE_5, NULL);
_object9.setStrip(4);
_object9.setFrame(1);
_object9.animate(ANIM_MODE_5, NULL);
break;
}
}
/*--------------------------------------------------------------------------
* Scene 2100 - Starcraft Cockpit
*
*--------------------------------------------------------------------------*/
void Scene2100::Action1::signal() {
Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
_globals->_player.disableControl();
if (!scene->_sitFl)
setDelay(1);
else {
setAction(&scene->_sequenceManager, this, 2102, &_globals->_player, NULL);
scene->_sitFl = 0;
}
break;
case 1: {
Common::Point pt(157, 62);
PlayerMover *mover = new PlayerMover();
_globals->_player.addMover(mover, &pt, this);
break;
}
case 2:
scene->_soundHandler.play(162);
scene->_object1.animate(ANIM_MODE_5, this);
break;
case 3: {
Common::Point pt(157, 56);
NpcMover *mover = new NpcMover();
_globals->_player.addMover(mover, &pt, this);
break;
}
case 4:
_globals->_player._strip = 3;
setDelay(3);
break;
case 5:
_globals->_player.fixPriority(1);
scene->_area1.display();
scene->_area2.display();
scene->_area3.display();
scene->_area4.display();
scene->_area1.draw(true);
_state = 0;
_globals->_events.setCursor(CURSOR_USE);
while (!_state && !_vm->shouldQuit()) {
// Wait for an event
Event event;
if (!_globals->_events.getEvent(event)) {
g_system->updateScreen();
g_system->delayMillis(10);
continue;
}
if (scene->_area1._bounds.contains(event.mousePos)) {
scene->_area1.draw(true);
_state = scene->_area1._actionId;
}
if (scene->_area2._bounds.contains(event.mousePos)) {
scene->_area1.draw(false);
scene->_area2.draw(true);
_state = scene->_area2._actionId;
}
if (scene->_area3._bounds.contains(event.mousePos)) {
scene->_area1.draw(false);
scene->_area3.draw(true);
_state = scene->_area3._actionId;
}
}
scene->_soundHandler.play(161);
scene->_area1.restore();
scene->_area2.restore();
scene->_area3.restore();
scene->_area4.restore();
if (_state == 2100) {
setDelay(1);
} else {
scene->_soundHandler.play(162);
scene->_object1.animate(ANIM_MODE_6, this);
}
break;
case 6:
if (_state == 2100) {
Common::Point pt(157, 65);
NpcMover *mover = new NpcMover();
_globals->_player.addMover(mover, &pt, this);
break;
} else {
_globals->_sceneManager.changeScene(_state);
}
break;
case 7:
_globals->_player.fixPriority(-1);
scene->_soundHandler.play(162);
scene->_object1.animate(ANIM_MODE_6, this);
break;
case 8:
_globals->_player.enableControl();
remove();
break;
}
}
void Scene2100::Action2::signal() {
Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
scene->_object3._numFrames = 5;
setDelay(_globals->_randomSource.getRandomNumber(59));
break;
case 1:
scene->_object3.animate(ANIM_MODE_5, this);
break;
case 2:
setDelay(_globals->_randomSource.getRandomNumber(59));
break;
case 3:
scene->_object3.animate(ANIM_MODE_6, this);
_actionIndex = 0;
break;
}
}
void Scene2100::Action3::signal() {
Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
case 2:
setDelay(_globals->_randomSource.getRandomNumber(119));
break;
case 1:
scene->_object2.animate(ANIM_MODE_5, this);
break;
case 3:
scene->_object2.animate(ANIM_MODE_6, this);
_actionIndex = 0;
break;
}
}
void Scene2100::Action4::signal() {
Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
_globals->_player.disableControl();
if (!scene->_sitFl)
setDelay(1);
else
setAction(&scene->_sequenceManager, this, 2102, &_globals->_player, NULL);
break;
case 1: {
Common::Point pt(80, 66);
PlayerMover *mover = new PlayerMover();
_globals->_player.addMover(mover, &pt, this);
break;
}
case 2:
_globals->_player.setVisage(2109);
_globals->_player._frame = 1;
_globals->_player._strip = 2;
_globals->_player.animate(ANIM_MODE_5, this);
break;
case 3:
_globals->_sceneManager.changeScene(2120);
break;
}
}
void Scene2100::Action5::signal() {
// Quinn enters the cokpit after Seeker decided to enter the cave alone
Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(30);
break;
case 1:
setAction(&scene->_sequenceManager, this, 2104, &_globals->_player, &scene->_object1, NULL);
break;
case 2: {
Common::Point pt(272, 127);
NpcMover *mover = new NpcMover();
_globals->_player.addMover(mover, &pt, this);
break;
}
case 3:
_globals->_player.checkAngle(&scene->_object3);
setDelay(30);
break;
case 4:
_globals->_sceneManager.changeScene(3700);
break;
}
}
void Scene2100::Action6::signal() {
// Seeker stands up and walks to the elevator
Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0: {
scene->_object2.setVisage(2806);
scene->_object2.setStrip(1);
scene->_object2.setStrip2(-1);
scene->_object2.changeZoom(-1);
scene->_object2.setPosition(Common::Point(155, 116));
scene->_object2.setObjectWrapper(new SceneObjectWrapper());
scene->_object2.setAction(NULL);
scene->_object2.animate(ANIM_MODE_1, NULL);
Common::Point pt(130, 116);
NpcMover *mover = new NpcMover();
scene->_object2.addMover(mover, &pt, this);
break;
}
case 1: {
scene->_object2.fixPriority(-1);
Common::Point pt(153, 67);
NpcMover *mover = new NpcMover();
scene->_object2.addMover(mover, &pt, this);
break;
}
case 2:
remove();
break;
}
}
void Scene2100::Action7::signal() {
Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(60);
break;
case 1:
setAction(&scene->_sequenceManager, this, 2104, &_globals->_player, &scene->_object1, NULL);
break;
case 2:
setAction(&scene->_sequenceManager, this, 2104, &_globals->_player, NULL);
break;
case 3:
_globals->_sceneManager.changeScene(8100);
break;
}
}
void Scene2100::Action8::signal() {
Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(60);
break;
case 1:
setAction(&scene->_sequenceManager, this, 2104, &_globals->_player, &scene->_object1, NULL);
break;
case 2: {
Common::Point pt(200, 174);
PlayerMover *mover = new PlayerMover();
_globals->_player.addMover(mover, &pt, this);
break;
}
case 3:
_globals->_player.checkAngle(&scene->_object3);
scene->_stripManager.start((RING_INVENTORY._translator._sceneNumber == 1) ? 7720 : 7710, this);
break;
case 4:
if (RING_INVENTORY._translator._sceneNumber != 1)
_globals->_sceneManager.changeScene(7600);
else {
_globals->setFlag(24);
_globals->_player.enableControl();
remove();
}
break;
}
}
void Scene2100::Action9::signal() {
Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(60);
break;
case 1:
scene->_stripManager.start(6050, this);
break;
case 2:
scene->_soundHandler.play(99);
scene->_object4.show();
scene->_object4.animate(ANIM_MODE_5, this);
break;
case 3:
scene->_soundHandler.play(12);
scene->_object4.setStrip(2);
scene->_stripManager.start(6051, this, scene);
break;
case 4:
scene->_soundHandler.fadeOut(0/* was false */);
scene->_object4.setStrip(1);
scene->_object4.setFrame(scene->_object4.getFrameCount());
scene->_object4.animate(ANIM_MODE_6, this);
break;
case 5:
scene->_object4.hide();
_globals->_events.setCursor(CURSOR_WALK);
scene->_stripManager.start(6010, this);
break;
case 6:
if (scene->_stripManager._field2E8 != 165)
setAction(&scene->_action10);
else
setAction(&scene->_action11);
break;
}
}
void Scene2100::Action10::signal() {
Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(60);
break;
case 1:
setAction(&scene->_sequenceManager, this, 2102, &_globals->_player, NULL);
break;
case 2: {
_globals->_player.disableControl();
Common::Point pt(155, 64);
PlayerMover *mover = new PlayerMover();
_globals->_player.addMover(mover, &pt, this);
break;
}
case 3:
scene->_object3.setVisage(2105);
scene->_object3.setStrip(2);
scene->_object3.setFrame(1);
scene->_object3._numFrames = 10;
scene->_object3.setAction(NULL);
scene->_object3.animate(ANIM_MODE_5, this);
break;
case 4: {
scene->_object3.setVisage(2705);
scene->_object3.setStrip2(-1);
scene->_object3.changeZoom(-1);
scene->_object3.fixPriority(-1);
scene->_object3.setPosition(Common::Point(260, 156));
scene->_object3.setObjectWrapper(new SceneObjectWrapper());
scene->_object3.animate(ANIM_MODE_1, NULL);
Common::Point pt(166, 64);
PlayerMover *mover = new PlayerMover();
scene->_object3.addMover(mover, &pt, this);
setAction(&scene->_action6, NULL);
break;
}
case 5:
scene->_soundHandler.play(162);
scene->_object1.animate(ANIM_MODE_5, this);
break;
case 6: {
_globals->_player.fixPriority(1);
Common::Point pt(144, 54);
NpcMover *mover = new NpcMover();
_globals->_player.addMover(mover, &pt, this);
break;
}
case 7: {
scene->_object3.fixPriority(2);
Common::Point pt1(163, 55);
NpcMover *mover1 = new NpcMover();
scene->_object3.addMover(mover1, &pt1, NULL);
scene->_object2.fixPriority(2);
Common::Point pt2(158, 55);
NpcMover *mover2 = new NpcMover();
scene->_object2.addMover(mover2, &pt2, this);
break;
}
case 8:
_globals->_player.fixPriority(1);
_globals->_player.setStrip(1);
scene->_object3.fixPriority(1);
scene->_object3.setStrip(2);
scene->_object2.fixPriority(2);
scene->_object2.setStrip(3);
setDelay(45);
break;
case 9:
scene->_soundHandler.play(162);
scene->_object1.animate(ANIM_MODE_6, this);
break;
case 10:
_globals->setFlag(70);
_globals->_stripNum = 2101;
_globals->_sceneManager.changeScene(2320);
break;
}
}
void Scene2100::Action11::signal() {
// Miranda stands up and walks to the elevator
Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(60);
break;
case 1:
scene->_object3._numFrames = 10;
scene->_object3.setAction(NULL);
scene->_object3.setVisage(2105);
scene->_object3.setStrip(2);
scene->_object3.setFrame(1);
scene->_object3.animate(ANIM_MODE_5, this);
break;
case 2: {
scene->_object3.setVisage(2705);
scene->_object3.setStrip2(-1);
scene->_object3.changeZoom(-1);
scene->_object3.fixPriority(-1);
scene->_object3.setPosition(Common::Point(260, 156));
scene->_object3.setObjectWrapper(new SceneObjectWrapper());
scene->_object3.animate(ANIM_MODE_1, NULL);
Common::Point pt(158, 62);
PlayerMover *mover = new PlayerMover();
scene->_object3.addMover(mover, &pt, this);
setAction(&scene->_action6, NULL);
break;
}
case 3:
scene->_soundHandler.play(162);
scene->_object1.animate(ANIM_MODE_5, this);
break;
case 4: {
scene->_object3.fixPriority(1);
Common::Point pt1(163, 55);
NpcMover *mover1 = new NpcMover();
scene->_object3.addMover(mover1, &pt1, NULL);
scene->_object2.fixPriority(1);
Common::Point pt2(158, 55);
NpcMover *mover2 = new NpcMover();
scene->_object2.addMover(mover2, &pt2, this);
break;
}
case 5:
scene->_object3.setStrip(2);
scene->_object2.setStrip(3);
setDelay(45);
break;
case 6:
scene->_soundHandler.play(162);
scene->_object1.animate(ANIM_MODE_6, this);
break;
case 7:
scene->_object3.remove();
scene->_object2.remove();
_globals->setFlag(70);
_globals->_stripNum = 2102;
_globals->_player.enableControl();
_globals->_player._canWalk = false;
break;
}
}
void Scene2100::Action12::signal() {
Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(10);
break;
case 1:
scene->_stripManager.start(6000, this);
break;
case 2:
scene->_soundHandler.play(162);
scene->_object1.animate(ANIM_MODE_5, this);
break;
case 3: {
Common::Point pt1(158, 74);
NpcMover *mover1 = new NpcMover();
_globals->_player.addMover(mover1, &pt1, this);
Common::Point pt2(158, 68);
NpcMover *mover2 = new NpcMover();
scene->_object2.addMover(mover2, &pt2, NULL);
break;
}
case 4: {
scene->_soundHandler.play(162);
scene->_object1.animate(ANIM_MODE_6, NULL);
_globals->_player.fixPriority(-1);
Common::Point pt1(277, 84);
PlayerMover *mover1 = new PlayerMover();
_globals->_player.addMover(mover1, &pt1, this);
scene->_object2.fixPriority(-1);
Common::Point pt2(255, 76);
PlayerMover *mover2 = new PlayerMover();
scene->_object2.addMover(mover2, &pt2, this);
break;
}
case 6:
_globals->_player.setStrip(4);
scene->_object2.setStrip(4);
setDelay(60);
break;
case 7:
_globals->_events.setCursor(CURSOR_WALK);
scene->_stripManager.start(6052, this);
break;
case 8:
if (scene->_stripManager._field2E8 == 320)
_globals->setFlag(74);
setDelay(30);
break;
case 9:
_globals->_events.setCursor(OBJECT_STUNNER);
scene->_object2.setAction(&scene->_action13);
setDelay(60);
break;
case 10:
if (_globals->getFlag(74))
setDelay(1);
else
setAction(&scene->_sequenceManager, this, 2101, &_globals->_player, NULL);
break;
case 11:
scene->_stripManager.start(2170, this);
break;
case 12:
setDelay(5);
break;
case 13:
scene->_stripManager.start(_globals->getFlag(74) ? 2172 : 2174, this);
break;
case 14:
if (_globals->getFlag(74)) {
_globals->_stripNum = 6100;
_globals->_sceneManager.changeScene(2320);
} else {
_globals->_sceneManager.changeScene(6100);
}
remove();
break;
}
}
void Scene2100::Action13::signal() {
Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(6);
break;
case 1: {
scene->_object2.fixPriority(113);
Common::Point pt(178, 116);
PlayerMover *mover = new PlayerMover();
scene->_object2.addMover(mover, &pt, this);
break;
}
case 2: {
Common::Point pt(150, 116);
NpcMover *mover = new NpcMover();
scene->_object2.addMover(mover, &pt, this);
break;
}
case 3:
scene->_object2.setVisage(2108);
scene->_object2._strip = 3;
scene->_object2.setPosition(Common::Point(150, 100));
scene->_object2.animate(ANIM_MODE_NONE, NULL);
scene->_object2.changeZoom(100);
scene->_object2.setAction(&scene->_action3);
setDelay(15);
break;
case 4:
remove();
break;
}
}
void Scene2100::Action14::signal() {
Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(6);
break;
case 1:
setAction(&scene->_sequenceManager, this, 2104, &_globals->_player, &scene->_object1, NULL);
break;
case 2:
setAction(&scene->_sequenceManager, this, 2101, &_globals->_player, NULL);
break;
case 3:
scene->_stripManager.start(6008, this);
break;
case 4:
scene->_soundHandler.play(99);
scene->_object4.show();
scene->_object4.animate(ANIM_MODE_5, this);
break;
case 5:
scene->_object4.setStrip(2);
scene->_stripManager.start(6009, this, scene);
break;
case 6:
scene->_soundHandler.fadeOut(0/* was false */);
scene->_object4.setStrip(1);
scene->_object4.setFrame(scene->_object4.getFrameCount());
scene->_object4.animate(ANIM_MODE_6, this);
break;
case 7:
scene->_stripManager.start(6060, this);
break;
case 8:
scene->_object3._numFrames = 10;
scene->_object3.setAction(NULL);
scene->_object3.setVisage(2105);
scene->_object3.setStrip(2);
scene->_object3.setFrame(1);
scene->_object3.animate(ANIM_MODE_5, this);
break;
case 9: {
scene->_object3.setVisage(2705);
scene->_object3.setStrip2(-1);
scene->_object3.changeZoom(-1);
scene->_object3.fixPriority(-1);
scene->_object3.setPosition(Common::Point(260, 156));
scene->_object3.setObjectWrapper(new SceneObjectWrapper());
scene->_object3.animate(ANIM_MODE_1, NULL);
Common::Point pt(157, 65);
PlayerMover *mover = new PlayerMover();
scene->_object3.addMover(mover, &pt, this);
break;
}
case 10:
scene->_soundHandler.play(162);
scene->_object1.animate(ANIM_MODE_5, this);
break;
case 11: {
Common::Point pt(159, 51);
NpcMover *mover = new NpcMover();
scene->_object3.addMover(mover, &pt, this);
break;
}
case 12:
scene->_object3.setStrip(2);
setDelay(30);
break;
case 13:
scene->_object3.fixPriority(1);
scene->_soundHandler.play(162);
scene->_object1.animate(ANIM_MODE_6, this);
break;
case 14:
setDelay(90);
break;
case 15:
_globals->_sceneManager.changeScene(7000);
remove();
break;
}
}
void Scene2100::Action15::signal() {
Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(6);
break;
case 1:
scene->_object3.postInit();
scene->_object3.setVisage(2705);
scene->_object3.animate(ANIM_MODE_1, NULL);
scene->_object3.setObjectWrapper(new SceneObjectWrapper());
scene->_object3.setPosition(Common::Point(157, 56));
scene->_object3.fixPriority(1);
scene->_object3.changeZoom(-1);
scene->_soundHandler.play(162);
scene->_object1.animate(ANIM_MODE_5, this);
break;
case 2: {
scene->_object3.fixPriority(-1);
Common::Point pt(177, 68);
NpcMover *mover = new NpcMover();
scene->_object3.addMover(mover, &pt, this);
break;
}
case 3: {
scene->_soundHandler.play(162);
scene->_object1.animate(ANIM_MODE_6, this);
Common::Point pt(272, 140);
NpcMover *mover = new NpcMover();
scene->_object3.addMover(mover, &pt, this);
break;
}
case 4: {
Common::Point pt(266, 150);
NpcMover *mover = new NpcMover();
scene->_object3.addMover(mover, &pt, this);
break;
}
case 5: {
scene->_object3.fixPriority(156);
Common::Point pt(260, 156);
NpcMover *mover = new NpcMover();
scene->_object3.addMover(mover, &pt, this);
break;
}
case 6:
scene->_object3.setVisage(2105);
scene->_object3._strip = 1;
scene->_object3._frame = 1;
scene->_object3.setPosition(Common::Point(256, 156));
scene->_object3.animate(ANIM_MODE_5, this);
scene->_object3.changeZoom(100);
scene->_object3.animate(ANIM_MODE_NONE, NULL);
break;
case 7:
remove();
break;
}
}
void Scene2100::Action16::signal() {
Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
case 4:
setDelay(3);
break;
case 1:
scene->_stripManager.start(7001, this);
break;
case 2:
setAction(&scene->_sequenceManager, this, 2102, &_globals->_player, NULL);
break;
case 3: {
_globals->_player.disableControl();
Common::Point pt(155, 63);
PlayerMover *mover = new PlayerMover();
_globals->_player.addMover(mover, &pt, this);
break;
}
case 5:
scene->_soundHandler.play(162);
scene->_object1.animate(ANIM_MODE_5, this);
break;
case 6: {
Common::Point pt(160, 54);
NpcMover *mover = new NpcMover();
_globals->_player.addMover(mover, &pt, this);
break;
}
case 7:
_globals->_player.fixPriority(1);
_globals->_player.setStrip(3);
setDelay(45);
break;
case 8:
scene->_soundHandler.play(162);
scene->_object1.animate(ANIM_MODE_6, this);
break;
case 9:
_globals->setFlag(15);
_globals->setFlag(36);
_globals->_sceneManager.changeScene(7000);
remove();
break;
}
}
void Scene2100::Action17::signal() {
Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(60);
break;
case 1:
setAction(&scene->_sequenceManager, this, 2104, &_globals->_player, &scene->_object1, NULL);
break;
case 2:
setAction(&scene->_sequenceManager, this, 2101, &_globals->_player, NULL);
break;
case 3:
scene->_stripManager.start(7070, this);
break;
case 4:
scene->_soundHandler.play(99);
scene->_object4.show();
scene->_object4.animate(ANIM_MODE_5, this);
break;
case 5:
scene->_soundHandler.play(12);
scene->_object4.setStrip(2);
scene->_stripManager.start(7071, this, scene);
break;
case 6:
scene->_soundHandler.fadeOut(NULL);
scene->_object4.setStrip(1);
scene->_object4.setFrame(scene->_object4.getFrameCount());
scene->_object4.animate(ANIM_MODE_6, this);
break;
case 7:
scene->_stripManager.start(7072, this);
break;
case 8:
RING_INVENTORY._stasisNegator._sceneNumber = 1;
_globals->_sceneManager.changeScene(9100);
remove();
break;
}
}
/*--------------------------------------------------------------------------*/
void Scene2100::Hotspot2::doAction(int action) {
Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2100, 3);
break;
case CURSOR_USE:
if (_globals->getFlag(13))
SceneItem::display2(2100, 29);
else {
_globals->_player.disableControl();
scene->setAction(&scene->_action4);
}
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2100::Hotspot3::doAction(int action) {
// Computer, on the left
Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2100, 4);
break;
case CURSOR_USE:
if (_globals->getFlag(13))
SceneItem::display2(2100, 29);
else {
_globals->_player.disableControl();
scene->setAction(&scene->_action4);
}
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2100::Hotspot4::doAction(int action) {
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2100, 5);
break;
case CURSOR_USE:
SceneItem::display2(2100, 6);
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2100::Hotspot8::doAction(int action) {
Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2100, 12);
break;
case CURSOR_USE:
if (_globals->getFlag(13))
SceneItem::display2(2100, 29);
else {
_globals->_player.disableControl();
scene->setAction(&scene->_action4);
}
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2100::Hotspot10::doAction(int action) {
// Quinn's Console
Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2100, 13);
break;
case CURSOR_USE:
if (scene->_sitFl) {
_globals->_player.disableControl();
scene->_sceneMode = 2102;
scene->setAction(&scene->_sequenceManager, scene, 2102, &_globals->_player, NULL);
} else if (_globals->getFlag(13)) {
SceneItem::display2(2100, 28);
} else {
_globals->_player.disableControl();
scene->_sceneMode = 2101;
scene->setAction(&scene->_sequenceManager, scene, 2101, &_globals->_player, NULL);
}
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2100::Hotspot14::doAction(int action) {
switch (action) {
case CURSOR_LOOK:
if (_globals->getFlag(0))
SceneItem::display2(2100, 19);
else
SceneItem::display2(2100, 18);
break;
case CURSOR_USE:
if (_globals->getFlag(1))
SceneItem::display2(2100, 21);
else
SceneItem::display2(2100, 20);
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2100::Object1::doAction(int action) {
// Elevator
Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2100, 1);
break;
case CURSOR_USE:
scene->setAction(&scene->_action1);
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2100::Object2::doAction(int action) {
Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2100, 30);
break;
case CURSOR_TALK:
if (_globals->getFlag(72)) {
_globals->_player.disableControl();
if (!_globals->getFlag(52)) {
scene->_sceneMode = 2111;
scene->setAction(&scene->_sequenceManager, scene, 2111, NULL);
} else {
scene->_sceneMode = _globals->getFlag(53) ? 2112 : 2110;
scene->setAction(&scene->_sequenceManager, scene, scene->_sceneMode, NULL);
}
} else if (_globals->getFlag(13)) {
SceneItem::display2(2100, 31);
} else if (_globals->getFlag(14)) {
SceneItem::display2(2100, 32);
} else {
_globals->setFlag(14);
_globals->_player.disableControl();
scene->_sceneMode = 2108;
scene->setAction(&scene->_sequenceManager, scene, 2109, NULL);
}
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2100::Object3::doAction(int action) {
// Miranda
Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
if (_globals->getFlag(59))
SceneItem::display2(2100, 34);
else
error("***I have no response.");
break;
case CURSOR_TALK:
if (_globals->getFlag(59)) {
_globals->_player.disableControl();
scene->_sceneMode = 2108;
scene->setAction(&scene->_sequenceManager, scene, 2108, NULL);
} else {
error("***I have no response.");
}
break;
default:
SceneHotspot::doAction(action);
break;
}
}
/*--------------------------------------------------------------------------*/
Scene2100::Scene2100() :
_hotspot1(0, CURSOR_LOOK, 2100, 2, LIST_END),
_hotspot5(0, CURSOR_LOOK, 2100, 9, LIST_END),
_hotspot6(0, CURSOR_LOOK, 2100, 7, CURSOR_USE, 2100, 8, LIST_END),
_hotspot7(0, CURSOR_LOOK, 2100, 7, CURSOR_USE, 2100, 11, LIST_END),
_hotspot9(0, CURSOR_LOOK, 2100, 14, LIST_END),
_hotspot11(0, CURSOR_LOOK, 2100, 15, CURSOR_USE, 2100, 16, LIST_END),
_hotspot12(0, CURSOR_LOOK, 2100, 24, CURSOR_USE, 2100, 25, LIST_END),
_hotspot13(0, CURSOR_LOOK, 2100, 17, LIST_END),
_hotspot15(0, CURSOR_LOOK, 2100, 22, CURSOR_USE, 2100, 23, LIST_END) {
_area1.setup(2153, 2, 1, 2100);
_area1._pt = Common::Point(200, 31);
_area2.setup(2153, 3, 1, 2150);
_area2._pt = Common::Point(200, 50);
_area3.setup(2153, 4, 1, 2320);
_area3._pt = Common::Point(200, 75);
_area4.setup(2153, 1, 1, OBJECT_TRANSLATOR);
_area4._pt = Common::Point(237, 77);
}
void Scene2100::postInit(SceneObjectList *OwnerList) {
loadScene(2100);
Scene::postInit();
setZoomPercents(60, 80, 200, 100);
_stripManager.addSpeaker(&_speakerMText);
_stripManager.addSpeaker(&_speakerMR);
_stripManager.addSpeaker(&_speakerQL);
_stripManager.addSpeaker(&_speakerQR);
_stripManager.addSpeaker(&_speakerQText);
_stripManager.addSpeaker(&_speakerSText);
_stripManager.addSpeaker(&_speakerSL);
_stripManager.addSpeaker(&_speakerSAL);
_stripManager.addSpeaker(&_speakerHText);
_stripManager.addSpeaker(&_speakerGameText);
_speakerMText._npc = &_object3;
_speakerQText._npc = &_globals->_player;
_speakerSText._npc = &_object2;
_object1.postInit();
_object1.setVisage(2100);
_object1.animate(ANIM_MODE_NONE, NULL);
_object1.setPosition(Common::Point(157, 57));
_object1.fixPriority(5);
_hotspot3.postInit();
_hotspot3.setVisage(2101);
_hotspot3._frame = 1;
_hotspot3.animate(ANIM_MODE_2, NULL);
_hotspot3.setPosition(Common::Point(53, 44));
_hotspot3.changeZoom(100);
_hotspot3.fixPriority(1);
_hotspot4.postInit();
_hotspot4.setVisage(2101);
_hotspot4._frame = 1;
_hotspot4._strip = 3;
_hotspot4.animate(ANIM_MODE_8, 0, NULL);
_hotspot4.setPosition(Common::Point(274, 52));
_hotspot4.changeZoom(100);
_hotspot4.fixPriority(1);
_hotspot5.postInit();
_hotspot5.setVisage(2101);
_hotspot5._frame = 1;
_hotspot5._strip = 4;
_hotspot5.animate(ANIM_MODE_8, 0, NULL);
_hotspot5.setPosition(Common::Point(219, 141));
_hotspot5.changeZoom(100);
_hotspot5.fixPriority(160);
_hotspot6.postInit();
_hotspot6.setVisage(2101);
_hotspot6._frame = 1;
_hotspot6._strip = 5;
_hotspot6.fixPriority(175);
_hotspot6.animate(ANIM_MODE_8, 0, NULL);
_hotspot6.setPosition(Common::Point(97, 142));
_hotspot6.changeZoom(100);
_hotspot7.postInit();
_hotspot7.setVisage(2101);
_hotspot7._frame = 1;
_hotspot7._strip = 6;
_hotspot7.animate(ANIM_MODE_NONE, NULL);
_hotspot7.setPosition(Common::Point(133, 46));
_hotspot7.changeZoom(100);
_hotspot7.fixPriority(1);
_hotspot8.postInit();
_hotspot8.setVisage(2101);
_hotspot8._frame = 1;
_hotspot8._strip = 7;
_hotspot8.animate(ANIM_MODE_8, 0, NULL);
_hotspot8.setPosition(Common::Point(20, 45));
_hotspot8.changeZoom(100);
_hotspot8.fixPriority(1);
_hotspot2.postInit();
_hotspot2.setVisage(2101);
_hotspot2._frame = 1;
_hotspot2._strip = 8;
_hotspot2.animate(ANIM_MODE_8, 0, NULL);
_hotspot2.setPosition(Common::Point(88, 41));
_hotspot2.changeZoom(100);
_hotspot2.fixPriority(1);
_hotspot11.setBounds(Rect(139, 74, 173, 96));
_hotspot10.setBounds(Rect(71, 100, 91, 135));
_hotspot9.setBounds(Rect(225, 110, 251, 136));
_hotspot14.setBounds(Rect(100, 97, 216, 130));
_hotspot13.setBounds(Rect(13, 124, 94, 168));
_hotspot12.setBounds(Rect(217, 141, 307, 155));
_hotspot15.setBounds(Rect(14, 90, 46, 107));
_hotspot1.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT));
if (!_globals->getFlag(36) && !_globals->getFlag(70) && !_globals->getFlag(43)) {
_object3.postInit();
_object3.setPosition(Common::Point(246, 156));
_object3.animate(ANIM_MODE_NONE, NULL);
_object3.changeZoom(100);
_object3.fixPriority(156);
_object3.setVisage(2107);
_object3.setStrip(1);
_object3.setAction(&_action2);
_globals->_sceneItems.push_back(&_object3);
}
if (!_globals->getFlag(59) && !_globals->getFlag(70) && !_globals->getFlag(37) && !_globals->getFlag(114)) {
_object2.postInit();
_object2.setVisage(2108);
_object2._strip = 3;
_object2.setPosition(Common::Point(150, 100));
_object2.animate(ANIM_MODE_NONE, NULL);
_object2.changeZoom(100);
_object2.fixPriority(113);
_object2.setAction(&_action3);
_globals->_sceneItems.push_back(&_object2);
}
_globals->_sceneItems.addItems(&_hotspot15, &_hotspot11, &_hotspot10, &_hotspot9, &_hotspot14,
&_hotspot13, &_hotspot12, &_hotspot8, &_object1, &_hotspot2, &_hotspot3, &_hotspot4, &_hotspot5,
&_hotspot6, &_hotspot7, &_hotspot1, NULL);
_globals->_player.postInit();
if (_globals->getFlag(13)) {
_globals->_player.setVisage(2170);
_globals->_player._moveDiff.y = 1;
} else {
_globals->_player.setVisage(0);
_globals->_player._moveDiff.y = 3;
}
_globals->_player.setObjectWrapper(new SceneObjectWrapper());
_globals->_player.animate(ANIM_MODE_1, NULL);
_globals->_player._moveDiff.x = 4;
_globals->_player.changeZoom(-1);
_globals->_player.disableControl();
_sitFl = 0;
switch (_globals->_sceneManager._previousScene) {
case 2120:
_globals->_soundHandler.play(160);
_globals->_soundHandler.holdAt(true);
_object1.fixPriority(-1);
_globals->_player.fixPriority(-1);
_globals->_player.setPosition(Common::Point(80, 66));
_globals->_player.enableControl();
break;
case 2150:
_globals->_player.fixPriority(1);
_globals->_player.setPosition(Common::Point(157, 56));
_sceneMode = 2104;
setAction(&_sequenceManager, this, 2104, &_globals->_player, &_object1, NULL);
break;
case 2222:
if (_globals->_sceneObjects->contains(&_object3))
_object3.remove();
_globals->_player.fixPriority(1);
_globals->_player.setPosition(Common::Point(144, 55));
_object2.setVisage(2806);
_object2.changeZoom(-1);
_object2.setPosition(Common::Point(158, 55));
_object2.fixPriority(1);
_object2.setAction(NULL);
_object2.setObjectWrapper(new SceneObjectWrapper());
_object2.animate(ANIM_MODE_1, NULL);
_object2.setStrip(3);
setAction(&_action12);
break;
case 2320:
if (_globals->_stripNum == 2321) {
if (_globals->_sceneObjects->contains(&_object3))
_object3.remove();
_globals->_player.fixPriority(1);
_globals->_player.setPosition(Common::Point(144, 55));
_object2.postInit();
_object2.setVisage(2806);
_object2.setStrip(1);
_object2.changeZoom(-1);
_object2.setPosition(Common::Point(158, 55));
_object2.fixPriority(1);
_object2.setAction(NULL);
_object2.setObjectWrapper(new SceneObjectWrapper());
_object2.animate(ANIM_MODE_1, NULL);
setAction(&_action12);
} else if (_globals->_stripNum == 6100) {
_globals->_player.setPosition(Common::Point(157, 56));
_globals->_player.fixPriority(1);
_object4.postInit();
_object4.setVisage(2102);
_object4.setPosition(Common::Point(160, 199));
_object4.hide();
setAction(&_action14);
} else {
_globals->_player.disableControl();
_globals->_player.fixPriority(1);
_globals->_player.setPosition(Common::Point(157, 56));
_sceneMode = 2104;
setAction(&_sequenceManager, this, 2104, &_globals->_player, &_object1, NULL);
}
break;
case 3700:
_globals->_soundHandler.play(160);
_globals->_soundHandler.holdAt(true);
Scene::setZoomPercents(80, 75, 100, 90);
if (_globals->_sceneObjects->contains(&_object2))
_object2.remove();
_globals->_player._angle = 225;
_globals->_player.setStrip(6);
_globals->_player.setFrame(1);
_globals->_player.fixPriority(-1);
_globals->_player.setPosition(Common::Point(272, 127));
_object3.setPosition(Common::Point(246, 156));
_object3.fixPriority(156);
_sceneMode = 2105;
setAction(&_sequenceManager, this, 2105, &_object3, NULL);
break;
case 4250:
_globals->_soundHandler.play(160);
_globals->_soundHandler.holdAt(true);
_globals->clearFlag(43);
_globals->_player.setVisage(2104);
_globals->_player.setFrame(1);
_globals->_player.setPosition(Common::Point(65, 149));
_globals->_player.fixPriority(152);
_globals->_player.setStrip(2);
_object4.postInit();
_object4.setVisage(2102);
_object4.setPosition(Common::Point(160, 199));
_object4.hide();
_sceneMode = 2107;
setAction(&_sequenceManager, this, 2107, &_object4, NULL);
break;
case 5000:
_globals->_soundHandler.play(160);
_globals->_soundHandler.holdAt(true);
if (_globals->_sceneObjects->contains(&_object2))
_object2.remove();
_globals->_player.setStrip(3);
_globals->_player.setFrame(1);
_globals->_player.fixPriority(1);
_globals->_player.setPosition(Common::Point(157, 56));
_object3.setPosition(Common::Point(246, 156));
_object3.fixPriority(156);
setAction(&_action5);
break;
case 5100:
_globals->_soundHandler.play(160);
_globals->_soundHandler.holdAt(true);
_globals->_player.setVisage(2104);
_globals->_player.setFrame(1);
_globals->_player.setPosition(Common::Point(65, 149));
_globals->_player.fixPriority(152);
_globals->_player.setStrip(2);
_sitFl = 1;
_object4.postInit();
_object4.setVisage(2102);
_object4.setPosition(Common::Point(160, 199));
_object4.hide();
RING_INVENTORY._stasisBox._sceneNumber = 0;
setAction(&_action9);
break;
case 7000:
_globals->_soundHandler.play(160);
_globals->_soundHandler.holdAt(true);
if (RING_INVENTORY._stasisBox2._sceneNumber == 1) {
_globals->_player.fixPriority(1);
_globals->_player.setPosition(Common::Point(157, 56));
_object4.postInit();
_object4.setVisage(2102);
_object4.setPosition(Common::Point(160, 199));
_object4.hide();
_globals->clearFlag(15);
_globals->clearFlag(109);
_globals->clearFlag(72);
setAction(&_action17);
} else {
_globals->_player.setVisage(2104);
_globals->_player.setFrame(1);
_globals->_player.setPosition(Common::Point(65, 149));
_globals->_player.fixPriority(152);
_globals->_player.setStrip(2);
_sitFl = 1;
setAction(&_action16);
}
break;
case 7600:
_globals->_soundHandler.play(160);
_globals->_soundHandler.holdAt(true);
if (_globals->_sceneObjects->contains(&_object2))
_object2.remove();
_globals->_player.fixPriority(1);
_globals->_player.setPosition(Common::Point(157, 56));
setAction(&_action8);
break;
case 8100:
_globals->_soundHandler.play(160);
_globals->_soundHandler.holdAt(true);
_globals->_player.setVisage(2104);
_globals->_player.setFrame(1);
_globals->_player.setPosition(Common::Point(65, 149));
_globals->_player.fixPriority(152);
_globals->_player.setStrip(2);
_sceneMode = 2106;
setAction(&_sequenceManager, this, 2106, NULL);
break;
case 9750:
_globals->_soundHandler.play(160);
_globals->_soundHandler.holdAt(true);
_globals->_player.setVisage(2104);
_globals->_player.setFrame(1);
_globals->_player.setPosition(Common::Point(65, 149));
_globals->_player.fixPriority(152);
_globals->_player.setStrip(2);
_object4.postInit();
_object4.setVisage(2102);
_object4.setPosition(Common::Point(160, 199));
_object4.hide();
_sceneMode = 2103;
setAction(&_sequenceManager, this, 2103, &_object4, NULL);
break;
default:
_globals->_soundHandler.play(160);
_globals->_soundHandler.holdAt(true);
_globals->_player._uiEnabled = true;
break;
}
_globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds);
_globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
}
void Scene2100::stripCallback(int v) {
switch (v) {
case 1:
_object4._numFrames = 4;
_object4.animate(ANIM_MODE_7, NULL);
break;
case 2:
_object4.animate(ANIM_MODE_NONE, NULL);
break;
}
}
void Scene2100::signal() {
switch (_sceneMode) {
case 2101:
_sitFl = 1;
_globals->_player._uiEnabled = true;
_globals->_events.setCursor(CURSOR_USE);
break;
case 2102:
_sitFl = 0;
_globals->_player.enableControl();
break;
case 2103:
_globals->_stripNum = 9000;
_globals->_sceneManager.changeScene(4000);
break;
case 2106:
_globals->_sceneManager.changeScene(7000);
break;
case 2107:
_globals->_sceneManager.changeScene(5000);
break;
case 2104:
case 2105:
case 2108:
case 2110:
case 2111:
case 2112:
_globals->_player.enableControl();
break;
}
}
void Scene2100::synchronize(Serializer &s) {
Scene::synchronize(s);
if (s.getVersion() >= 3)
s.syncAsSint16LE(_sitFl);
}
/*--------------------------------------------------------------------------
* Scene 2120 - Encyclopedia
*
*--------------------------------------------------------------------------*/
Scene2120::Action1::Action1() {
_entries.push_back(Entry(0, 0, 0));
_entries.push_back(Entry(0, 0, 0));
_entries.push_back(Entry(4, 1, 2123));
_entries.push_back(Entry(1, 6, 0));
_entries.push_back(Entry(2, 8, 0));
_entries.push_back(Entry(1, 11, 0));
_entries.push_back(Entry(4, 13, 2131));
_entries.push_back(Entry(2, 18, 0));
_entries.push_back(Entry(4, 21, 0));
_entries.push_back(Entry(7, 26, 2128));
_entries.push_back(Entry(3, 34, 0));
_entries.push_back(Entry(0, 38, 0));
_entries.push_back(Entry(3, 39, 2126));
_entries.push_back(Entry(3, 43, 0));
_entries.push_back(Entry(4, 47, 2125));
_entries.push_back(Entry(3, 52, 0));
_entries.push_back(Entry(4, 56, 2129));
_entries.push_back(Entry(7, 61, 0));
_entries.push_back(Entry(2, 69, 2127));
_entries.push_back(Entry(7, 72, 2122));
_entries.push_back(Entry(0, 80, 2124));
_entries.push_back(Entry(0, 81, 0));
_entries.push_back(Entry(0, 82, 0));
_entries.push_back(Entry(1, 83, 0));
_entries.push_back(Entry(2, 85, 2132));
_entries.push_back(Entry(1, 88, 2133));
_entries.push_back(Entry(2, 90, 2136));
_entries.push_back(Entry(1, 93, 0));
_entries.push_back(Entry(10, 95, 2135));
_entries.push_back(Entry(5, 106, 0));
_entries.push_back(Entry(2, 112, 2134));
_entries.push_back(Entry(1, 115, 2130));
_entries.push_back(Entry(0, 117, 0));
}
void Scene2120::Action1::signal() {
Scene2120 *scene = (Scene2120 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(30);
_globals->_events.setCursor(CURSOR_WALK);
break;
case 1:
// First page of index
SceneItem::display(2120, 0, SET_X, 120, SET_FONT, 1, SET_EXT_BGCOLOR, 7, SET_BG_COLOR, -1,
SET_WIDTH, 200, SET_KEEP_ONSCREEN, -1, SET_TEXT_MODE, 0, LIST_END);
break;
case 2:
// Second page of index
SceneItem::display(2120, 1, SET_X, 120, SET_FONT, 1, SET_EXT_BGCOLOR, 7, SET_BG_COLOR, -1,
SET_WIDTH, 200, SET_KEEP_ONSCREEN, -1, SET_TEXT_MODE, 0, LIST_END);
break;
case 3:
// Display an image associated with the encyclopedia entry
SceneItem::display(0, 0);
scene->_visageHotspot.postInit();
scene->_visageHotspot.setVisage(_entries[scene->_subjectIndex]._visage);
scene->_visageHotspot.setPosition(Common::Point(129, 180));
scene->_visageHotspot.animate(ANIM_MODE_NONE, NULL);
scene->_visageVisable = true;
break;
case 4:
// Display page of text
SceneItem::display(2121, _entries[scene->_subjectIndex]._lineNum + scene->_lineOffset,
SET_X, 130, SET_FONT, 1, SET_EXT_BGCOLOR, 7, SET_BG_COLOR, -1, SET_WIDTH, 200,
SET_KEEP_ONSCREEN, -1, SET_TEXT_MODE, 0, LIST_END);
_actionIndex = 4;
break;
}
}
void Scene2120::Action1::dispatch() {
Scene2120 *scene = (Scene2120 *)_globals->_sceneManager._scene;
Event event;
if (_globals->_events.getEvent(event) && (event.eventType == EVENT_BUTTON_DOWN)) {
if (scene->_listRect.contains(event.mousePos) && (scene->_dbMode != 2)) {
scene->_topicArrowHotspot.setPosition(Common::Point(scene->_topicArrowHotspot._position.x, event.mousePos.y));
}
// Subject button handling
if (scene->_subjectButton._bounds.contains(event.mousePos) && (scene->_dbMode != 2)) {
scene->_arrowHotspot.setPosition(Common::Point(291, 34));
scene->_arrowHotspot._strip = 1;
scene->_arrowHotspot.animate(ANIM_MODE_5, NULL);
if (scene->_dbMode == 0)
scene->_subjectIndex = (scene->_topicArrowHotspot._position.y - 48) / 8;
else
scene->_subjectIndex = (scene->_topicArrowHotspot._position.y - 44) / 8 + 16;
if ((scene->_subjectIndex == 27) && _globals->getFlag(70))
_globals->setFlag(75);
scene->_topicArrowHotspot.hide();
scene->_prevDbMode = scene->_dbMode;
scene->_dbMode = 2;
scene->_lineOffset = 0;
_actionIndex = !_entries[scene->_subjectIndex]._visage ? 4 : 3;
setDelay(30);
scene->_soundHandler.play(159);
}
// Next Page button handling
if (scene->_nextPageButton._bounds.contains(event.mousePos)) {
if (!scene->_dbMode) {
scene->_arrowHotspot._strip = 2;
scene->_arrowHotspot.setPosition(Common::Point(291, 76));
scene->_arrowHotspot.animate(ANIM_MODE_5, NULL);
scene->_dbMode = 1;
_actionIndex = 2;
setDelay(30);
}
if ((scene->_dbMode == 2) && (scene->_lineOffset < _entries[scene->_subjectIndex]._size)) {
if (!scene->_visageVisable) {
++scene->_lineOffset;
} else {
scene->_visageVisable = false;
scene->_visageHotspot.remove();
}
setDelay(30);
}
if ((scene->_subjectIndex == 20) && scene->_visageVisable) {
scene->_visageVisable = false;
scene->_visageHotspot.remove();
setDelay(30);
}
scene->_soundHandler.play(159);
}
// Previous Page button handling
if (scene->_previousPageButton._bounds.contains(event.mousePos)) {
switch (scene->_dbMode) {
case 1:
scene->_arrowHotspot._strip = 3;
scene->_arrowHotspot.setPosition(Common::Point(291, 117));
scene->_arrowHotspot.animate(ANIM_MODE_5, NULL);
scene->_dbMode = 0;
_actionIndex = 1;
setDelay(30);
break;
case 2:
if (scene->_lineOffset > 0) {
--scene->_lineOffset;
setDelay(20);
}
if ((_entries[scene->_subjectIndex]._visage != 0) && (scene->_lineOffset == 0)) {
_actionIndex = 3;
setDelay(30);
}
break;
}
scene->_soundHandler.play(159);
}
// Exit button handling
if (scene->_exitButton._bounds.contains(event.mousePos)) {
if (scene->_dbMode != 2) {
// In the index, so return to the previous scene
setAction(NULL);
SceneItem::display(0, 0);
_globals->_gfxManagerInstance._font.setFontNumber(2);
_globals->_sceneText._fontNumber = 2;
_globals->_sceneManager.changeScene(_globals->_sceneManager._previousScene);
} else {
// Exit out of topic display to index
SceneItem::display(0, 0);
if (_entries[scene->_subjectIndex]._visage)
scene->_visageHotspot.remove();
scene->_arrowHotspot._strip = 4;
scene->_arrowHotspot.setPosition(Common::Point(291, 159));
scene->_arrowHotspot.animate(ANIM_MODE_5, NULL);
scene->_dbMode = scene->_prevDbMode;
_actionIndex = scene->_prevDbMode + 1;
scene->_topicArrowHotspot.show();
setDelay(1);
}
scene->_soundHandler.play(159);
}
}
Action::dispatch();
}
/*--------------------------------------------------------------------------*/
Scene2120::Scene2120(): Scene() {
_listRect = Rect(18, 48, 260, 177);
_dbMode = 0;
_prevDbMode = 0;
_visageVisable = false;
_subjectIndex = 0;
}
void Scene2120::postInit(SceneObjectList *OwnerList) {
loadScene(2120);
setZoomPercents(0, 100, 200, 100);
_globals->_player.disableControl();
_subjectButton.setBounds(Rect(266, 13, 320, 56));
_nextPageButton.setBounds(Rect(266, 56, 320, 98));
_previousPageButton.setBounds(Rect(266, 98, 320, 140));
_exitButton.setBounds(Rect(266, 140, 320, 182));
_topicArrowHotspot.postInit();
_topicArrowHotspot.setVisage(2120);
_topicArrowHotspot.animate(ANIM_MODE_NONE, NULL);
_topicArrowHotspot.setPosition(Common::Point(240, 55));
_arrowHotspot.postInit();
_arrowHotspot.setVisage(2121);
_arrowHotspot.animate(ANIM_MODE_NONE, NULL);
_arrowHotspot._frame = 1;
_arrowHotspot.setPosition(Common::Point(400, 200));
setAction(&_action1);
_globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds);
_globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
}
void Scene2120::synchronize(Serializer &s) {
Scene::synchronize(s);
s.syncAsSint16LE(_dbMode);
s.syncAsSint16LE(_prevDbMode);
s.syncAsSint16LE(_visageVisable);
s.syncAsSint16LE(_subjectIndex);
s.syncAsSint16LE(_lineOffset);
}
/*--------------------------------------------------------------------------
* Scene 2150 - Starcraft Level 2
*
*--------------------------------------------------------------------------*/
void Scene2150::Action1::signal() {
Scene2150 *scene = (Scene2150 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0: {
_globals->_player.disableControl();
Common::Point pt(158, 103);
PlayerMover *mover = new PlayerMover();
_globals->_player.addMover(mover, &pt, this);
break;
}
case 1:
scene->_soundHandler.play(162);
scene->_hotspot1.animate(ANIM_MODE_5, this);
break;
case 2: {
_globals->_player.setStrip2(4);
Common::Point pt(158, 95);
NpcMover *mover = new NpcMover();
_globals->_player.addMover(mover, &pt, this);
break;
}
case 3:
_globals->_player.setStrip2(-1);
_globals->_player._strip = 3;
setDelay(10);
break;
case 4:
scene->_area1.display();
scene->_area2.display();
scene->_area3.display();
scene->_area4.display();
scene->_area2.draw(true);
_state = 0;
_globals->_events.setCursor(CURSOR_USE);
while (!_state && !_vm->shouldQuit()) {
// Wait for an event
Event event;
if (!_globals->_events.getEvent(event)) {
g_system->updateScreen();
g_system->delayMillis(10);
continue;
}
if (scene->_area1._bounds.contains(event.mousePos)) {
scene->_area2.draw(false);
scene->_area1.draw(true);
_state = scene->_area1._actionId;
}
if (scene->_area2._bounds.contains(event.mousePos)) {
scene->_area2.draw(true);
_state = scene->_area2._actionId;
}
if (scene->_area3._bounds.contains(event.mousePos)) {
scene->_area2.draw(false);
scene->_area3.draw(true);
_state = scene->_area3._actionId;
}
}
scene->_soundHandler.play(161);
scene->_area1.restore();
scene->_area2.restore();
scene->_area3.restore();
scene->_area4.restore();
if (_state == 2150) {
setDelay(1);
} else {
scene->_soundHandler.play(162);
scene->_hotspot1.animate(ANIM_MODE_6, this);
}
break;
case 5:
if (_state == 2150) {
Common::Point pt(158, 103);
PlayerMover *mover = new PlayerMover();
_globals->_player.addMover(mover, &pt, this);
break;
} else {
_globals->_sceneManager.changeScene(_state);
}
break;
case 6:
scene->_soundHandler.play(162);
scene->_hotspot1.animate(ANIM_MODE_6, this);
break;
case 7:
_globals->_player.enableControl();
remove();
break;
}
}
void Scene2150::Action2::signal() {
Scene2150 *scene = (Scene2150 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0: {
_globals->_player.disableControl();
Common::Point pt(47, 85);
PlayerMover *mover = new PlayerMover();
_globals->_player.addMover(mover, &pt, this);
break;
}
case 1:
_globals->_player.setVisage(2152);
_globals->_player.setFrame(1);
_globals->_player.setStrip(8);
_globals->_player.animate(ANIM_MODE_8, 1, this);
scene->_soundHandler.play(163);
break;
case 2:
scene->_soundHandler.play(164);
scene->_hotspot10.animate(ANIM_MODE_5, this);
break;
case 3:
_globals->_events.setCursor(CURSOR_WALK);
scene->_stripManager.start((RING_INVENTORY._ale._sceneNumber == 2150) ? 2151 : 2152, this);
break;
case 4:
scene->_hotspot14.postInit();
scene->_hotspot14.setVisage(2152);
scene->_hotspot14.setStrip(6);
scene->_hotspot14.setPosition(Common::Point(59, 54));
if (scene->_stripManager._field2E8 == 15) {
scene->_hotspot14.setFrame(5);
RING_INVENTORY._ale._sceneNumber = 1;
} else {
scene->_hotspot14.setFrame(scene->_stripManager._field2E8 - 5);
}
_globals->_player.setFrame(1);
_globals->_player.setStrip(7);
_globals->_player.animate(ANIM_MODE_5, this);
break;
case 5:
scene->_soundHandler.play(164);
scene->_hotspot10.animate(ANIM_MODE_6, NULL);
scene->_hotspot14.remove();
_globals->_player.animate(ANIM_MODE_6, this);
break;
case 6:
_globals->_player.setVisage(0);
_globals->_player.animate(ANIM_MODE_1, NULL);
_globals->_player.enableControl();
remove();
break;
}
}
/*--------------------------------------------------------------------------*/
void Scene2150::Hotspot1::doAction(int action) {
Scene2150 *scene = (Scene2150 *)_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2150, 0);
break;
case CURSOR_USE:
scene->setAction(&scene->_action1);
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2150::Hotspot2::doAction(int action) {
Scene2150 *scene = (Scene2150 *)_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2150, 1);
break;
case CURSOR_USE:
_globals->_player.disableControl();
scene->_sceneMode = 2156;
scene->setAction(&scene->_sequenceManager, scene, 2156, &_globals->_player, this, NULL);
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2150::Hotspot4::doAction(int action) {
Scene2150 *scene = (Scene2150 *)_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2150, 3);
break;
case CURSOR_USE:
_globals->_player.disableControl();
scene->_sceneMode = 2155;
scene->setAction(&scene->_sequenceManager, scene, 2155, &_globals->_player, &scene->_hotspot4, NULL);
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2150::Hotspot7::doAction(int action) {
Scene2150 *scene = (Scene2150 *)_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2150, 7);
break;
case CURSOR_USE:
if (_globals->getFlag(13))
SceneItem::display2(2150, 19);
else {
_globals->_player.disableControl();
scene->_sceneMode = 2154;
scene->setAction(&scene->_sequenceManager, scene, 2154, &_globals->_player, NULL);
}
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2150::Hotspot10::doAction(int action) {
Scene2150 *scene = (Scene2150 *)_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2150, 10);
break;
case CURSOR_USE:
if (_globals->getFlag(13))
SceneItem::display2(2150, 19);
else
scene->setAction(&scene->_action2);
break;
default:
SceneHotspot::doAction(action);
break;
}
}
/*--------------------------------------------------------------------------*/
Scene2150::Scene2150() :
_hotspot3(18, CURSOR_LOOK, 2150, 2, CURSOR_USE, 2150, 18, LIST_END),
_hotspot5(17, CURSOR_LOOK, 2150, 4, CURSOR_USE, 2150, 18, LIST_END),
_hotspot6(0, CURSOR_LOOK, 2150, 5, CURSOR_USE, 2150, 18, LIST_END),
_hotspot8(16, CURSOR_LOOK, 2150, 8, LIST_END),
_hotspot9(0, CURSOR_LOOK, 2150, 9, CURSOR_USE, 2150, 13, LIST_END),
_hotspot11(0, CURSOR_LOOK, 2150, 12, LIST_END) {
_rect1 = Rect(260, 70, 270, 77);
_rect2 = Rect(222, 142, 252, 150);
_area1.setup(2153, 2, 1, 2100);
_area1._pt = Common::Point(200, 31);
_area2.setup(2153, 3, 1, 2150);
_area2._pt = Common::Point(200, 50);
_area3.setup(2153, 4, 1, 2320);
_area3._pt = Common::Point(200, 75);
_area4.setup(2153, 1, 1, 10);
_area4._pt = Common::Point(237, 77);
}
void Scene2150::postInit(SceneObjectList *OwnerList) {
Scene::postInit();
setZoomPercents(55, 85, 200, 100);
loadScene(2150);
_stripManager.addSpeaker(&_speakerGameText);
_hotspot7.postInit();
_hotspot7.setVisage(2152);
_hotspot7._frame = 1;
_hotspot7._strip = 2;
_hotspot7.animate(ANIM_MODE_8, 0, NULL);
_hotspot7.setPosition(Common::Point(122, 62));
_hotspot7.changeZoom(100);
_hotspot7.fixPriority(76);
_hotspot2.postInit();
_hotspot2.setVisage(2151);
_hotspot2._frame = 1;
_hotspot2._strip = 3;
_hotspot2.animate(ANIM_MODE_NONE, NULL);
_hotspot2.setPosition(Common::Point(257, 67));
_hotspot2.changeZoom(100);
_hotspot2.fixPriority(60);
_hotspot1.postInit();
_hotspot1.setVisage(2151);
_hotspot1._frame = 1;
_hotspot1._strip = 2;
_hotspot1.animate(ANIM_MODE_NONE, NULL);
_hotspot1.setPosition(Common::Point(158, 99));
_hotspot1.changeZoom(100);
_hotspot1.fixPriority(99);
_hotspot4.postInit();
_hotspot4.setVisage(2150);
_hotspot4._frame = 1;
_hotspot4._strip = 2;
_hotspot4.animate(ANIM_MODE_NONE, NULL);
_hotspot4.setPosition(Common::Point(218, 200));
_hotspot4.changeZoom(100);
_hotspot4.fixPriority(200);
_hotspot10.postInit();
_hotspot10.setVisage(2152);
_hotspot10.setStrip(5);
_hotspot10.setPosition(Common::Point(59, 56));
_globals->_player.postInit();
_globals->_player.setVisage(_globals->getFlag(13) ? 2170 : 0);
_globals->_player.animate(ANIM_MODE_1, NULL);
_globals->_player.setObjectWrapper(new SceneObjectWrapper());
_globals->_player.fixPriority(-1);
_globals->_player.changeZoom(-1);
_globals->_player._moveDiff.y = 3;
_hotspot8.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT));
_hotspot9.setBounds(Rect(133, 0, 198, 91));
_hotspot11.setBounds(Rect(142, 119, 176, 158));
_globals->_sceneItems.addItems(&_hotspot1, &_hotspot2, &_hotspot3, &_hotspot4, &_hotspot5,
&_hotspot6, &_hotspot7, &_hotspot10, &_hotspot9, &_hotspot11, &_hotspot8, NULL);
switch (_globals->_sceneManager._previousScene) {
case 2120:
_globals->_soundHandler.play(160);
_globals->_soundHandler.holdAt(true);
_globals->_player.setPosition(Common::Point(108, 99));
break;
case 2200:
_globals->_player.disableControl();
_globals->_player.setPosition(Common::Point(159, 240));
_sceneMode = 2152;
setAction(&_sequenceManager, this, 2152, &_globals->_player, NULL);
break;
case 2280:
_globals->_player.disableControl();
_globals->_player._angle = 180;
_globals->_player.setPosition(Common::Point(265, 80));
_hotspot2._frame = _hotspot2.getFrameCount();
_sceneMode = 2157;
setAction(&_sequenceManager, this, 2157, &_hotspot2, NULL);
break;
case 2230:
_globals->_events.setCursor(CURSOR_WALK);
_globals->_player._strip = 4;
_globals->_player.setPosition(Common::Point(229, 139));
break;
case 2100:
default:
_globals->_player.disableControl();
_globals->_player.setPosition(Common::Point(158, 95));
_globals->_player.setStrip(3);
_sceneMode = 2151;
setAction(&_sequenceManager, this, 2151, &_globals->_player, &_hotspot1, NULL);
break;
}
_globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds);
_globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
}
void Scene2150::synchronize(Serializer &s) {
Scene::synchronize(s);
_rect1.synchronize(s);
_rect2.synchronize(s);
}
void Scene2150::signal() {
switch (_sceneMode) {
case 2151:
_globals->_player.animate(ANIM_MODE_1, NULL);
_globals->_player.enableControl();
break;
case 2152:
case 2153:
case 2157:
_globals->_player.enableControl();
break;
case 2154:
_globals->_sceneManager.changeScene(2120);
break;
case 2155:
_globals->_sceneManager.changeScene(2230);
break;
case 2156:
_globals->_sceneManager.changeScene(2280);
break;
}
}
void Scene2150::dispatch() {
Scene::dispatch();
if (!_action) {
if (_rect1.contains(_globals->_player._position)) {
_globals->_player.disableControl();
_sceneMode = 2156;
setAction(&_sequenceManager, this, 2156, &_globals->_player, &_hotspot2, NULL);
}
if (_rect2.contains(_globals->_player._position)) {
_globals->_player.disableControl();
_sceneMode = 2155;
setAction(&_sequenceManager, this, 2155, &_globals->_player, &_hotspot4, NULL);
}
if (_globals->_player._position.y >= 196) {
_globals->_player.disableControl();
SceneItem::display2(2150, 20);
_sceneMode = 2153;
setAction(&_sequenceManager, this, 2153, &_globals->_player, NULL);
}
}
}
/*--------------------------------------------------------------------------
* Scene 2200 - Starcraft - AutoDoc
*
*--------------------------------------------------------------------------*/
void Scene2200::Action1::signal() {
Scene2200 *scene = (Scene2200 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(6);
break;
case 1:
scene->_hotspot4.animate(ANIM_MODE_5, this);
break;
case 2:
SceneItem::display2(2200, 7);
_globals->_sceneManager.changeScene(2150);
remove();
break;
}
}
void Scene2200::Action2::signal() {
Scene2200 *scene = (Scene2200 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(3);
break;
case 1:
setDelay(30);
break;
case 2:
scene->_hotspot4.animate(ANIM_MODE_5, this);
break;
case 3:
scene->_hotspot4.setStrip(4);
setDelay(30);
break;
case 4:
_globals->_events.setCursor(CURSOR_WALK);
scene->_stripManager.start(2040, this, scene);
break;
case 5:
scene->_hotspot4.setStrip(4);
scene->_hotspot4.animate(ANIM_MODE_NONE, NULL);
_globals->_player._uiEnabled = true;
remove();
break;
}
}
void Scene2200::Action3::signal() {
Scene2200 *scene = (Scene2200 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0: {
scene->_soundHandler2.play(103);
scene->_hotspot4.setStrip(4);
scene->_hotspot4.animate(ANIM_MODE_NONE, NULL);
_globals->_player.disableControl();
scene->_hotspot2.postInit();
scene->_hotspot2.setVisage(2201);
scene->_hotspot2._strip = 2;
scene->_hotspot2.setPosition(Common::Point(218, 0));
Common::Point pt(218, 63);
NpcMover *mover = new NpcMover();
scene->_hotspot2.addMover(mover, &pt, this);
break;
}
case 1:
scene->_soundHandler2.play(104);
scene->_hotspot4.setStrip(2);
scene->_hotspot4.setFrame(2);
setDelay(120);
break;
case 2:
if (_globals->getFlag(83)) {
_actionIndex = 8;
setDelay(5);
} else {
for (SynchronizedList<SceneObject *>::iterator i = _globals->_sceneObjects->begin();
i != _globals->_sceneObjects->end(); ++i) {
(*i)->hide();
}
_globals->_sceneManager._scene->loadScene(66);
scene->_hotspot6.postInit();
scene->_hotspot6.setVisage(66);
scene->_hotspot6.setPosition(Common::Point(160, 197));
scene->_hotspot7.postInit();
scene->_hotspot7.setVisage(65);
scene->_hotspot7.setStrip(4);
scene->_hotspot7.setFrame(1);
scene->_hotspot7.setPosition(Common::Point(145, 165));
SceneItem::display(60, 1, SET_Y, 40, SET_X, 25, SET_FONT, 75, SET_BG_COLOR, -1, SET_FG_COLOR, 34,
SET_POS_MODE, 0, SET_WIDTH, 280, SET_KEEP_ONSCREEN, 1, LIST_END);
_state = 1;
setDelay(1800);
}
break;
case 3:
case 4:
case 5:
SceneItem::display(60, _actionIndex - 2, SET_Y, 40, SET_X, 25, SET_FONT, 75, SET_BG_COLOR, -1, SET_FG_COLOR, 34,
SET_POS_MODE, 0, SET_WIDTH, 280, SET_KEEP_ONSCREEN, 1, LIST_END);
setDelay(1800);
break;
case 6:
scene->_hotspot7.remove();
SceneItem::display(0, 0);
_state = 0;
setDelay(5);
break;
case 7:
for (SynchronizedList<SceneObject *>::iterator i = _globals->_sceneObjects->begin();
i != _globals->_sceneObjects->end(); ++i)
(*i)->show();
scene->_hotspot6.remove();
_globals->_sceneManager._scene->loadScene(2200);
setDelay(5);
break;
case 8:
scene->_stripManager.start(2060, this, scene);
break;
case 9:
scene->_hotspot4.setStrip(4);
scene->_hotspot4.animate(ANIM_MODE_NONE, NULL);
break;
case 10:
_globals->_sceneManager.changeScene(2000);
remove();
break;
}
}
void Scene2200::Action3::process(Event &event) {
if (!event.handled && ((event.eventType == EVENT_KEYPRESS) || (event.eventType == EVENT_BUTTON_DOWN))) {
_state = 0;
event.handled = true;
setDelay(1);
}
Action::process(event);
}
void Scene2200::Action4::signal() {
Scene2200 *scene = (Scene2200 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(5);
break;
case 1:
scene->_stripManager.start(2202, this, scene);
break;
case 2:
scene->_hotspot4.setStrip(4);
scene->_hotspot4.animate(ANIM_MODE_NONE, NULL);
setDelay(10);
break;
case 3:
_globals->_player._uiEnabled = true;
remove();
break;
}
}
/*--------------------------------------------------------------------------*/
void Scene2200::Hotspot3::doAction(int action) {
Scene2200 *scene = (Scene2200 *)_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2200, 10);
break;
case CURSOR_USE:
SceneItem::display2(2200, 11);
break;
case CURSOR_TALK:
_globals->_player._uiEnabled = false;
scene->setAction(&scene->_action4);
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2200::Hotspot5::doAction(int action) {
Scene2200 *scene = (Scene2200 *)_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2200, 8);
break;
case CURSOR_USE:
SceneItem::display2(2200, 9);
break;
case CURSOR_TALK:
scene->_sceneMode = 2201;
_globals->_player._uiEnabled = false;
scene->setAction(&scene->_sequenceManager, scene, 2201, NULL);
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2200::Hotspot9::doAction(int action) {
Scene2200 *scene = (Scene2200 *)_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2200, _globals->getFlag(8) ? 1 : 0);
break;
case CURSOR_USE:
SceneItem::display2(2200, 3);
break;
case OBJECT_INFODISK:
if (_globals->_sceneManager._previousScene == 2310) {
scene->_soundHandler2.play(35);
_globals->_player.disableControl();
scene->setAction(&scene->_action3);
}
break;
default:
SceneHotspot::doAction(action);
break;
}
}
/*--------------------------------------------------------------------------*/
Scene2200::Scene2200() :
_hotspot1(0, CURSOR_LOOK, 2200, 5, CURSOR_USE, 2200, 6, LIST_END),
_hotspot10(0, CURSOR_LOOK, 2200, 4, LIST_END) {
}
void Scene2200::postInit(SceneObjectList *OwnerList) {
Scene::postInit();
setZoomPercents(0, 200, 200, 200);
loadScene(2200);
_stripManager.addSpeaker(&_speakerMText);
_stripManager.addSpeaker(&_speakerSText);
_stripManager.addSpeaker(&_speakerQText);
_stripManager.addSpeaker(&_speakerSL);
_stripManager.addSpeaker(&_speakerQR);
_stripManager.addSpeaker(&_speakerQL);
_stripManager.addSpeaker(&_speakerMR);
_stripManager.addSpeaker(&_speakerGameText);
_speakerQText._npc = &_globals->_player;
_speakerSText._npc = &_hotspot5;
_speakerMText._npc = &_hotspot3;
_stripManager.setCallback(this);
_hotspot5.postInit();
_hotspot5.setVisage(2840);
_hotspot5.setPosition(Common::Point(50, 235));
_hotspot8.postInit();
_hotspot8.setVisage(2840);
_hotspot8.setStrip(2);
_hotspot8.setPosition(Common::Point(96, 184));
_hotspot8.fixPriority(236);
_globals->_player.postInit();
_globals->_player.setVisage(2640);
_globals->_player.setFrame2(3);
_globals->_player.setPosition(Common::Point(110, 233));
_globals->_player.disableControl();
switch (_globals->_sceneManager._previousScene) {
case 2150:
_hotspot5.remove();
_hotspot8.remove();
break;
case 4000:
_globals->_soundHandler.play(100);
_globals->_soundHandler.holdAt(true);
_globals->_player.remove();
_hotspot5.remove();
_hotspot8.remove();
_hotspot1.postInit();
_hotspot1.setVisage(2202);
_hotspot1.setPosition(Common::Point(175, 173));
_hotspot1.fixPriority(99);
_hotspot3.postInit();
_hotspot3.setVisage(2202);
_hotspot3._strip = 2;
_hotspot3.setPosition(Common::Point(152, 76));
_hotspot3.fixPriority(100);
_hotspot4.postInit();
_hotspot4.setVisage(2202);
_hotspot4._strip = 3;
_hotspot4.setPosition(Common::Point(115, 76));
_hotspot4.fixPriority(200);
setAction(&_action1);
break;
case 2310:
default:
RING_INVENTORY._infoDisk._sceneNumber = 1;
_hotspot3.postInit();
_hotspot3.setVisage(2215);
_hotspot3.setPosition(Common::Point(144, 132));
_globals->_sceneItems.push_back(&_hotspot3);
_hotspot4.postInit();
_hotspot4.setVisage(2215);
_hotspot4._strip = 2;
_hotspot4.setPosition(Common::Point(120, 78));
_hotspot4.fixPriority(255);
_globals->_sceneItems.push_back(&_hotspot4);
_soundHandler1.play(101);
_soundHandler2.play(100);
_globals->_soundHandler.holdAt(true);
_globals->_sceneItems.push_back(&_hotspot5);
setAction(&_action2);
break;
}
_exitRect = Rect(0, 0, 35, SCREEN_HEIGHT);
_hotspot9.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT));
_hotspot10.setBounds(Rect(87, 43, 149, 109));
_globals->_sceneItems.addItems(&_hotspot10, &_hotspot9, NULL);
_globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds);
_globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
}
void Scene2200::stripCallback(int v) {
switch (v) {
case 1:
_hotspot4.setStrip(3);
_hotspot4.animate(ANIM_MODE_7, 0, NULL);
break;
case 2:
_hotspot4.setStrip(4);
_hotspot4.animate(ANIM_MODE_NONE, NULL);
break;
}
}
void Scene2200::synchronize(Serializer &s) {
Scene::synchronize(s);
_exitRect.synchronize(s);
}
void Scene2200::signal() {
if ((_sceneMode == 2201) || (_sceneMode == 2202))
_globals->_player._uiEnabled = true;
}
void Scene2200::dispatch() {
Scene::dispatch();
if (!_action) {
if (_exitRect.contains(_globals->_player._position))
_globals->_sceneManager.changeScene(2150);
}
}
/*--------------------------------------------------------------------------
* Scene 2222 - Stasis Field Map
*
*--------------------------------------------------------------------------*/
void Scene2222::Action1::signal() {
Scene2222 *scene = (Scene2222 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(5);
break;
case 1:
scene->_stripManager.start(2222, this);
break;
case 2:
setDelay(30);
break;
case 3:
_globals->_sceneManager.changeScene(1000);
break;
}
}
void Scene2222::Action2::signal() {
Scene2222 *scene = (Scene2222 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(60);
break;
case 1:
scene->_stripManager.start(5700, this);
break;
case 2:
setDelay(120);
break;
case 3:
_globals->_sceneManager._fadeMode = FADEMODE_GRADUAL;
_globals->_sceneManager.changeScene(2100);
break;
}
}
/*--------------------------------------------------------------------------*/
void Scene2222::postInit(SceneObjectList *OwnerList) {
loadScene((_globals->_sceneManager._previousScene == 2000) ? 3400 : 3450);
Scene::postInit();
setZoomPercents(0, 100, 200, 100);
_stripManager.addSpeaker(&_speakerSText);
_stripManager.addSpeaker(&_speakerMText);
_stripManager.addSpeaker(&_speakerQText);
_stripManager.addSpeaker(&_speakerSR);
_stripManager.addSpeaker(&_speakerML);
_hotspot1.postInit();
_hotspot1.setVisage(3401);
_hotspot1.setStrip2(1);
_hotspot1._frame = 1;
_hotspot1.animate(ANIM_MODE_2, 0);
_hotspot2.postInit();
_hotspot2.setVisage(3401);
_hotspot2.setStrip2(2);
_hotspot2._frame = 2;
_hotspot2.animate(ANIM_MODE_2, 0);
_hotspot3.postInit();
_hotspot3.setVisage(3401);
_hotspot3.setStrip2(2);
_hotspot3._frame = 3;
_hotspot3.animate(ANIM_MODE_2, 0);
_hotspot4.postInit();
_hotspot4.setVisage(3401);
_hotspot4.setStrip2(2);
_hotspot4._frame = 4;
_hotspot4.animate(ANIM_MODE_2, 0);
_hotspot5.postInit();
_hotspot5.setVisage(3401);
_hotspot5.setStrip2(2);
_hotspot5.setFrame(5);
_hotspot5.animate(ANIM_MODE_2, 0);
if (_globals->_sceneManager._previousScene == 2100) {
_hotspot1.setPosition(Common::Point(61, 101));
_hotspot2.setPosition(Common::Point(239, 149));
_hotspot3.setPosition(Common::Point(184, 85));
_hotspot4.setPosition(Common::Point(105, 165));
_hotspot5.remove();
setAction(&_action2);
} else {
_hotspot1.setPosition(Common::Point(110, 108));
_hotspot2.setPosition(Common::Point(175, 136));
_hotspot3.setPosition(Common::Point(162, 96));
_hotspot4.setPosition(Common::Point(118, 141));
_hotspot5.setPosition(Common::Point(124, 107));
setAction(&_action1);
}
_soundHandler.play(116);
_globals->_sceneManager._scene->_sceneBounds.center(_hotspot1._position);
_globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds);
_globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
}
/*--------------------------------------------------------------------------
* Scene 2230 - Starcraft - Quinn's Room
*
*--------------------------------------------------------------------------*/
void Scene2230::Action1::signal() {
Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
switch (scene->_field30A) {
case 1:
scene->setAction(&scene->_action3);
break;
case 2:
scene->setAction(&scene->_action6);
break;
default:
setDelay(10);
break;
}
break;
case 1: {
Common::Point pt(84, 74);
NpcMover *mover = new NpcMover();
_globals->_player.addMover(mover, &pt, this);
break;
}
case 2:
scene->_hotspot1.animate(ANIM_MODE_5, this);
break;
case 3: {
Common::Point pt(63, 60);
NpcMover *mover = new NpcMover();
_globals->_player.addMover(mover, &pt, this);
break;
}
case 4:
scene->_hotspot1.animate(ANIM_MODE_6, this);
break;
case 5:
_globals->_sceneManager.changeScene(2150);
break;
}
}
void Scene2230::Action2::signal() {
Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
switch (scene->_field30A) {
case 2:
scene->setAction(&scene->_action6, this);
break;
default:
setDelay(10);
break;
}
break;
case 1: {
_globals->_player.disableControl();
scene->_field30A = 1;
_globals->_player._regionBitList |= ~0x80;
Common::Point pt(160, 96);
NpcMover *mover = new NpcMover();
_globals->_player.addMover(mover, &pt, this);
break;
}
case 2:
_globals->_player.setVisage(2235);
_globals->_player.setStrip2(1);
_globals->_player.fixPriority(100);
_globals->_player._frame = 1;
_globals->_player.setPosition(Common::Point(200, 68));
_globals->_player.animate(ANIM_MODE_5, this);
break;
case 3:
scene->_soundHandler.play(157);
_globals->_player._moveDiff = Common::Point(1, 1);
_globals->_player.setAction(&scene->_action4);
_globals->_player._uiEnabled = true;
_globals->_events.setCursor(CURSOR_USE);
remove();
break;
}
}
void Scene2230::Action3::signal() {
Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0: {
_globals->_player.setAction(NULL);
_globals->_player._moveDiff = Common::Point(5, 3);
_globals->_player.setStrip2(_globals->_player._strip);
Common::Point pt(190, 74);
NpcMover *mover = new NpcMover();
_globals->_player.addMover(mover, &pt, this);
scene->_soundHandler.stop();
break;
}
case 1:
_globals->_player._strip = 3;
_globals->_player._frame = 1;
_globals->_player.animate(ANIM_MODE_5, this);
break;
case 2:
_globals->_player._regionBitList |= 0x80;
scene->_field30A = 0;
_globals->_player.setVisage(0);
_globals->_player.setStrip2(-1);
_globals->_player.fixPriority(-1);
_globals->_player.setPosition(Common::Point(164, 96));
_globals->_player.animate(ANIM_MODE_1, NULL);
_globals->_player._canWalk = true;
_globals->_events.setCursor(CURSOR_USE);
remove();
}
}
void Scene2230::Action4::signal() {
switch (_actionIndex++) {
case 0:
Common::Point pt(190 + _globals->_randomSource.getRandomNumber(9), 68);
NpcMover *mover = new NpcMover();
_globals->_player.addMover(mover, &pt, this);
_actionIndex = 0;
break;
}
}
void Scene2230::Action5::signal() {
Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
switch (scene->_field30A) {
case 2:
scene->setAction(&scene->_action3, this);
break;
default:
setDelay(10);
break;
}
break;
case 1: {
_globals->_player.disableControl();
Common::Point pt(209, 124);
NpcMover *mover = new NpcMover();
_globals->_player.addMover(mover, &pt, this);
break;
}
case 2:
_globals->_player.fixPriority(1430);
_globals->_player.setVisage(2232);
_globals->_player._strip = 1;
_globals->_player._frame = 1;
_globals->_player.animate(ANIM_MODE_5, this);
break;
case 3:
_globals->_events.setCursor(CURSOR_USE);
_globals->_player._uiEnabled = true;
scene->_field30A = 2;
remove();
break;
}
}
void Scene2230::Action6::signal() {
Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
_globals->_player._strip = 2;
_globals->_player._frame = 1;
_globals->_player.fixPriority(-1);
_globals->_player.animate(ANIM_MODE_5, this);
break;
case 1:
scene->_field30A = 0;
_globals->_player.setVisage(0);
_globals->_player._strip = 1;
_globals->_player._canWalk = true;
_globals->_player.animate(ANIM_MODE_1, NULL);
remove();
break;
}
}
void Scene2230::Action7::signal() {
Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
_globals->_player.disableControl();
switch (scene->_field30A) {
case 1:
scene->setAction(&scene->_action3, this);
break;
case 2:
scene->setAction(&scene->_action6, this);
break;
default:
setDelay(10);
break;
}
break;
case 1: {
Common::Point pt(140, 119);
NpcMover *mover = new NpcMover();
_globals->_player.addMover(mover, &pt, this);
break;
}
case 2: {
scene->_soundHandler.play(158);
scene->_hotspot8.setStrip2(2);
Common::Point pt(scene->_hotspot8._position.x, 97);
NpcMover *mover = new NpcMover();
scene->_hotspot8.addMover(mover, &pt, this);
break;
}
case 3:
scene->_hotspot2.postInit();
scene->_hotspot2.setVisage(2231);
scene->_hotspot2._strip = 3;
scene->_hotspot2.setPosition(Common::Point(166, 116));
scene->_hotspot2.fixPriority(131);
scene->_hotspot2.animate(ANIM_MODE_5, this);
scene->_hotspot8._frame = 2;
break;
case 4:
_globals->_sceneItems.push_front(&scene->_hotspot10);
_globals->_sceneItems.push_front(&scene->_hotspot11);
_globals->_sceneItems.push_front(&scene->_hotspot12);
scene->_hotspot2.remove();
_globals->_player.enableControl();
remove();
break;
}
}
void Scene2230::Action8::signal() {
Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
_globals->_player.disableControl();
switch (scene->_field30A) {
case 1:
scene->setAction(&scene->_action3, this);
break;
case 2:
scene->setAction(&scene->_action6, this);
break;
default:
setDelay(10);
break;
}
break;
case 1: {
Common::Point pt(140, 119);
NpcMover *mover = new NpcMover();
_globals->_player.addMover(mover, &pt, this);
break;
}
case 2: {
_globals->_sceneItems.remove(&scene->_hotspot10);
_globals->_sceneItems.remove(&scene->_hotspot11);
_globals->_sceneItems.remove(&scene->_hotspot12);
switch (scene->_field30A) {
case 1:
scene->setAction(&scene->_action3, this);
break;
case 2:
scene->setAction(&scene->_action6, this);
break;
default:
setDelay(10);
break;
}
break;
}
case 3:
scene->_hotspot2.postInit();
scene->_hotspot2.setVisage(2231);
scene->_hotspot2._strip = 3;
scene->_hotspot2._frame = scene->_hotspot2.getFrameCount();
scene->_hotspot2.setPosition(Common::Point(166, 116));
scene->_hotspot2.fixPriority(131);
scene->_hotspot2.animate(ANIM_MODE_6, this);
break;
case 4: {
scene->_soundHandler.play(158);
scene->_hotspot2.remove();
scene->_hotspot8._frame = 1;
Common::Point pt(scene->_hotspot8._position.x, 133);
NpcMover *mover = new NpcMover();
scene->_hotspot8.addMover(mover, &pt, this);
break;
}
case 5:
scene->_hotspot8.setStrip2(1);
_globals->_player.enableControl();
remove();
break;
}
}
/*--------------------------------------------------------------------------*/
void Scene2230::Hotspot1::doAction(int action) {
Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2230, 0);
break;
case CURSOR_USE:
scene->setAction(&scene->_action1);
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2230::Hotspot3::doAction(int action) {
switch (action) {
case CURSOR_LOOK:
if (_globals->getFlag(4))
SceneItem::display2(2230, 1);
else {
SceneItem::display2(2230, 1);
SceneItem::display2(2230, 2);
SceneItem::display2(2230, 3);
_globals->setFlag(4);
}
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2230::Hotspot4::doAction(int action) {
switch (action) {
case CURSOR_LOOK:
if (_globals->getFlag(30))
SceneItem::display2(2230, 6);
else if (_globals->getFlag(29)) {
SceneItem::display2(2230, 5);
_globals->setFlag(30);
} else {
SceneItem::display2(2230, 4);
_globals->setFlag(29);
}
break;
case CURSOR_USE:
SceneItem::display2(2230, 7);
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2230::Hotspot5::doAction(int action) {
switch (action) {
case CURSOR_LOOK:
if (_globals->getFlag(5))
SceneItem::display2(2230, 9);
else {
_globals->setFlag(5);
SceneItem::display2(2230, 8);
}
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2230::Hotspot6::doAction(int action) {
Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
if (_globals->getFlag(6))
SceneItem::display2(2230, 11);
else {
_globals->setFlag(6);
SceneItem::display2(2230, 10);
}
break;
case CURSOR_USE:
if (scene->_field30A == 1)
scene->setAction(&scene->_action3);
else if (_globals->getFlag(13))
SceneItem::display2(2230, 28);
else
scene->setAction(&scene->_action2);
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2230::Hotspot7::doAction(int action) {
Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
if (_globals->getFlag(7))
SceneItem::display2(2230, 13);
else {
_globals->setFlag(6);
SceneItem::display2(2230, 12);
}
break;
case CURSOR_USE:
if (scene->_field30A == 2)
scene->setAction(&scene->_action6);
else if (_globals->getFlag(13))
SceneItem::display2(2230, 29);
else
scene->setAction(&scene->_action5);
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2230::Hotspot8::doAction(int action) {
Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
if (scene->_hotspot8._strip == 1) {
if (_globals->getFlag(22))
SceneItem::display2(2230, 19);
else {
_globals->setFlag(22);
SceneItem::display2(2230, 14);
}
} else {
if (_globals->getFlag(25))
SceneItem::display2(2230, 21);
else {
_globals->setFlag(25);
SceneItem::display2(2230, 20);
}
}
break;
case CURSOR_USE:
if (scene->_hotspot8._strip == 1)
scene->setAction(&scene->_action7);
else
scene->setAction(&scene->_action8);
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2230::Hotspot10::doAction(int action) {
switch (action) {
case CURSOR_LOOK:
if (_globals->getFlag(26))
SceneItem::display2(2230, 25);
else {
_globals->setFlag(26);
SceneItem::display2(2230, 24);
}
break;
case CURSOR_USE:
SceneItem::display2(2230, 28);
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2230::Hotspot11::doAction(int action) {
switch (action) {
case CURSOR_LOOK:
if (_globals->getFlag(27))
SceneItem::display2(2230, 23);
else {
_globals->setFlag(27);
SceneItem::display2(2230, 22);
}
break;
case CURSOR_USE:
SceneItem::display2(2230, 28);
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2230::Hotspot12::doAction(int action) {
switch (action) {
case CURSOR_LOOK:
if (_globals->getFlag(28))
SceneItem::display2(2230, 27);
else {
_globals->setFlag(28);
SceneItem::display2(2230, 26);
}
break;
case CURSOR_USE:
SceneItem::display2(2230, 28);
break;
default:
SceneHotspot::doAction(action);
break;
}
}
/*--------------------------------------------------------------------------*/
Scene2230::Scene2230() :
_hotspot9(0, CURSOR_LOOK, 2230, 16, CURSOR_USE, 2230, 18, LIST_END) {
}
void Scene2230::postInit(SceneObjectList *OwnerList) {
loadScene(2230);
Scene::postInit();
setZoomPercents(75, 80, 120, 100);
_hotspot1.postInit();
_hotspot1.setVisage(2230);
_hotspot1._frame = 1;
_hotspot1.animate(ANIM_MODE_NONE, 0);
_hotspot1.setPosition(Common::Point(72, 69));
_hotspot1.changeZoom(100);
_hotspot8.postInit();
_hotspot8.setVisage(2231);
_hotspot8._frame = 1;
_hotspot8.animate(ANIM_MODE_NONE, 0);
_hotspot8.setPosition(Common::Point(164, 133));
_hotspot8.changeZoom(100);
_hotspot8.fixPriority(129);
_rect1 = Rect(59, 64, 89, 74);
_globals->_player.postInit();
_globals->_player.setVisage(_globals->getFlag(13) ? 2170 : 0);
_globals->_player.animate(ANIM_MODE_1, 0);
_globals->_player.setObjectWrapper(new SceneObjectWrapper());
_globals->_player.setPosition(Common::Point(80, 80));
_globals->_player._moveDiff.y = 3;
_globals->_player._regionBitList |= 0x80;
_globals->_player.changeZoom(-1);
_field30A = 0;
_globals->_player.enableControl();
_hotspot5.setBounds(Rect(108, 34, 142, 76));
_hotspot4.setBounds(Rect(92, 14, 106, 57));
_hotspot6.setBounds(Rect(169, 58, 261, 95));
_hotspot7.setBounds(Rect(111, 117, 222, 158));
_hotspot3.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT));
_hotspot10.setBounds(Rect(170, 96, 176, 106));
_hotspot11.setBounds(Rect(158, 109, 164, 115));
_hotspot12.setBounds(Rect(170, 109, 177, 115));
_globals->_sceneItems.addItems(&_hotspot8, &_hotspot5, &_hotspot4, &_hotspot6, &_hotspot7,
&_hotspot1, &_hotspot3, NULL);
_globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds);
_globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
}
void Scene2230::synchronize(Serializer &s) {
Scene::synchronize(s);
_rect1.synchronize(s);
s.syncAsSint16LE(_field30A);
}
void Scene2230::dispatch() {
Scene::dispatch();
if (!_action) {
if (_rect1.contains(_globals->_player._position))
setAction(&_action1);
}
}
/*--------------------------------------------------------------------------
* Scene 2280 - Starcraft - Storage Room
*
*--------------------------------------------------------------------------*/
void Scene2280::Action1::signal() {
Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0: {
_globals->_player.disableControl();
Common::Point pt(192, 97);
PlayerMover *mover = new PlayerMover();
_globals->_player.addMover(mover, &pt, this);
break;
}
case 1:
scene->_soundHandler.play(162);
scene->_hotspot16.animate(ANIM_MODE_5, this);
break;
case 2: {
Common::Point pt(218, 87);
NpcMover *mover = new NpcMover();
_globals->_player.addMover(mover, &pt, this);
break;
}
case 3:
_globals->_player.setStrip(3);
setDelay(10);
break;
case 4:
_globals->_player.fixPriority(1);
scene->_soundHandler.play(162);
scene->_hotspot16.animate(ANIM_MODE_6, this);
break;
case 5:
_globals->_sceneManager.changeScene(7000);
break;
}
}
void Scene2280::Action2::signal() {
Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0: {
_globals->_player.disableControl();
Common::Point pt(94, 117);
PlayerMover *mover = new PlayerMover();
_globals->_player.addMover(mover, &pt, this);
break;
}
case 1:
scene->_soundHandler.play(265);
_globals->_player.setVisage(2162);
_globals->_player._frame = 1;
_globals->_player._strip = 1;
_globals->_player.animate(ANIM_MODE_5, this);
scene->_hotspot8.remove();
scene->_hotspot10.remove();
break;
case 2:
_globals->_player._frame = 1;
_globals->_player._strip = 2;
_globals->_player.animate(ANIM_MODE_4, 3, 1, this);
break;
case 3:
_globals->_player.animate(ANIM_MODE_5, this);
scene->_hotspot12.remove();
break;
case 4:
scene->_soundHandler.play(266);
_globals->_player.setVisage(2170);
_globals->_player._frame = 1;
_globals->_player._strip = 4;
_globals->_player.animate(ANIM_MODE_1, NULL);
_globals->_player._moveDiff = Common::Point(4, 1);
_globals->setFlag(13);
SceneItem::display2(2280, 37);
_globals->_player.enableControl();
remove();
break;
}
}
void Scene2280::Action3::signal() {
Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0: {
_globals->_player.disableControl();
Common::Point pt(94, 117);
PlayerMover *mover = new PlayerMover();
_globals->_player.addMover(mover, &pt, this);
break;
}
case 1:
scene->_soundHandler.play(265);
_globals->_player.setVisage(2162);
_globals->_player._frame = 6;
_globals->_player._strip = 2;
_globals->_player.animate(ANIM_MODE_4, 3, -1, this);
break;
case 2:
scene->_hotspot12.postInit();
scene->_hotspot12.setVisage(2280);
scene->_hotspot12._strip = 2;
scene->_hotspot12._frame = 3;
scene->_hotspot12.setPosition(Common::Point(88, 76));
scene->_hotspot12.fixPriority(1);
_globals->_player.animate(ANIM_MODE_6, this);
break;
case 3:
_globals->_player._strip = 1;
_globals->_player._frame = 12;
_globals->_player.animate(ANIM_MODE_6, this);
break;
case 4:
scene->_hotspot8.postInit();
scene->_hotspot8.setVisage(2280);
scene->_hotspot8._strip = 2;
scene->_hotspot8._frame = 1;
scene->_hotspot8.animate(ANIM_MODE_NONE, NULL);
scene->_hotspot8.setPosition(Common::Point(79, 108));
scene->_hotspot8.changeZoom(100);
scene->_hotspot8.fixPriority(1);
scene->_hotspot10.postInit();
scene->_hotspot10.setVisage(2280);
scene->_hotspot10._strip = 2;
scene->_hotspot10._frame = 2;
scene->_hotspot10.animate(ANIM_MODE_NONE, NULL);
scene->_hotspot10.setPosition(Common::Point(79, 104));
scene->_hotspot10.changeZoom(100);
scene->_hotspot10.fixPriority(1);
_globals->clearFlag(13);
_globals->_player.setVisage(0);
_globals->_player.animate(ANIM_MODE_1, NULL);
_globals->_player._strip = 4;
_globals->_player._moveDiff = Common::Point(3, 5);
SceneItem::display2(2280, 38);
_globals->_player.enableControl();
remove();
break;
}
}
void Scene2280::Action4::signal() {
Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0: {
switch (_state) {
case 1:
case 51: {
Common::Point pt(163, 67);
NpcMover *mover = new NpcMover();
_globals->_player.addMover(mover, &pt, this);
break;
}
case 6:
case 50: {
Common::Point pt(173, 63);
NpcMover *mover = new NpcMover();
_globals->_player.addMover(mover, &pt, this);
break;
}
}
break;
}
case 1:
_globals->_player.setVisage(2161);
_globals->_player._strip = 1;
_globals->_player._frame = 1;
_globals->_player.animate(ANIM_MODE_5, this);
break;
case 2:
switch (_state) {
case 1:
scene->_hotspot18.remove();
RING_INVENTORY._scanner._sceneNumber = 1;
break;
case 6:
scene->_hotspot17.remove();
RING_INVENTORY._medkit._sceneNumber = 1;
break;
case 50:
scene->_hotspot17.postInit();
scene->_hotspot17.setVisage(2161);
scene->_hotspot17._strip = 2;
scene->_hotspot17._frame = 1;
scene->_hotspot17.animate(ANIM_MODE_NONE, NULL);
scene->_hotspot17.setPosition(Common::Point(162, 39));
scene->_hotspot17.changeZoom(100);
scene->_hotspot17.fixPriority(1);
RING_INVENTORY._medkit._sceneNumber = 2280;
_globals->_sceneItems.push_front(&scene->_hotspot17);
break;
case 51:
scene->_hotspot18.postInit();
scene->_hotspot18.setVisage(2161);
scene->_hotspot18._strip = 2;
scene->_hotspot18._frame = 2;
scene->_hotspot18.animate(ANIM_MODE_NONE, NULL);
scene->_hotspot18.setPosition(Common::Point(152, 43));
scene->_hotspot18.changeZoom(100);
scene->_hotspot18.fixPriority(1);
RING_INVENTORY._scanner._sceneNumber = 2280;
_globals->_sceneItems.push_front(&scene->_hotspot18);
break;
}
_globals->_player.animate(ANIM_MODE_6, this);
break;
case 3:
_globals->_player.enableControl();
_globals->_player.setVisage(0);
_globals->_player.animate(ANIM_MODE_1, NULL);
_globals->_player._strip = 2;
remove();
break;
}
}
/*--------------------------------------------------------------------------*/
void Scene2280::Hotspot1::doAction(int action) {
Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
if (_globals->getFlag(16))
SceneItem::display2(2280, 22);
else {
_globals->setFlag(16);
SceneItem::display2(2230, 21);
}
break;
case CURSOR_USE:
if (!_globals->getFlag(15))
SceneItem::display2(2280, 23);
else if (!_globals->getFlag(13))
SceneItem::display2(2280, 46);
else {
_globals->_player.disableControl();
scene->setAction(&scene->_action1);
}
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2280::Hotspot2::doAction(int action) {
switch (action) {
case CURSOR_LOOK:
if (_globals->getFlag(2))
SceneItem::display2(2280, 1);
else {
_globals->setFlag(2);
SceneItem::display2(2280, 0);
}
break;
case CURSOR_USE:
SceneItem::display2(2280, 2);
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2280::Hotspot4::doAction(int action) {
switch (action) {
case CURSOR_LOOK:
if (_globals->getFlag(21))
SceneItem::display2(2280, 33);
else {
_globals->setFlag(21);
SceneItem::display2(2280, 32);
}
break;
case CURSOR_USE:
SceneItem::display2(2280, 34);
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2280::Hotspot7::doAction(int action) {
Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2280, 24);
break;
case OBJECT_SCANNER:
if (_globals->getFlag(13))
SceneItem::display2(2280, 43);
else {
_globals->_player.disableControl();
scene->_action4._state = 51;
_globals->_events.setCursor(CURSOR_WALK);
_globals->_events._currentCursor = CURSOR_700;
scene->setAction(&scene->_action4);
}
break;
case OBJECT_MEDKIT:
if (_globals->getFlag(13))
SceneItem::display2(2280, 43);
else {
_globals->_player.disableControl();
scene->_action4._state = 50;
_globals->_events.setCursor(CURSOR_WALK);
_globals->_events._currentCursor = CURSOR_700;
scene->setAction(&scene->_action4);
}
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2280::Hotspot8::doAction(int action) {
Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2280, 3);
break;
case CURSOR_USE:
_globals->_player.disableControl();
scene->setAction(&scene->_action2);
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2280::Hotspot10::doAction(int action) {
Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2280, 4);
break;
case CURSOR_USE:
_globals->_player.disableControl();
scene->setAction(&scene->_action2);
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2280::Hotspot12::doAction(int action) {
Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2280, 11);
break;
case CURSOR_USE:
_globals->_player.disableControl();
scene->setAction(&scene->_action2);
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2280::Hotspot14::doAction(int action) {
Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2280, 3);
break;
case CURSOR_USE:
_globals->_player.disableControl();
if (_globals->getFlag(13))
scene->setAction(&scene->_action3);
else
scene->setAction(&scene->_action2);
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2280::Hotspot17::doAction(int action) {
Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
if (_globals->getFlag(18))
SceneItem::display2(2280, 26);
else {
_globals->setFlag(18);
SceneItem::display2(2280, 25);
}
break;
case CURSOR_USE:
if (_globals->getFlag(13))
SceneItem::display2(2280, 29);
else {
_globals->_player.disableControl();
scene->_action4._state = 6;
scene->setAction(&scene->_action4);
}
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2280::Hotspot18::doAction(int action) {
Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
if (_globals->getFlag(19))
SceneItem::display2(2280, 28);
else {
_globals->setFlag(19);
SceneItem::display2(2280, 27);
}
break;
case CURSOR_USE:
if (_globals->getFlag(13))
SceneItem::display2(2280, 29);
else {
_globals->_player.disableControl();
scene->_action4._state = 1;
scene->setAction(&scene->_action4);
}
break;
default:
SceneHotspot::doAction(action);
break;
}
}
/*--------------------------------------------------------------------------*/
Scene2280::Scene2280() :
_hotspot3(0, CURSOR_LOOK, 2280, 30, CURSOR_USE, 2280, 31, LIST_END),
_hotspot5(0, CURSOR_LOOK, 2280, 35, CURSOR_USE, 2280, 36, LIST_END),
_hotspot6(0, CURSOR_LOOK, 2280, 19, CURSOR_USE, 2280, 20, LIST_END),
_hotspot9(0, CURSOR_LOOK, 2280, 5, CURSOR_USE, 2280, 6, LIST_END),
_hotspot11(0, CURSOR_LOOK, 2280, 7, CURSOR_USE, 2280, 8, LIST_END),
_hotspot13(0, CURSOR_LOOK, 2280, 9, CURSOR_USE, 2280, 10, LIST_END),
_hotspot15(0, CURSOR_LOOK, 2280, 45, LIST_END),
_hotspot16(0, CURSOR_LOOK, 2280, 16, CURSOR_USE, 2280, 42, LIST_END) {
}
void Scene2280::postInit(SceneObjectList *OwnerList) {
loadScene(2280);
Scene::postInit();
setZoomPercents(0, 70, 200, 100);
_hotspot16.postInit();
_hotspot16.setVisage(2281);
_hotspot16.setPosition(Common::Point(208, 90));
_hotspot16.fixPriority(80);
if (RING_INVENTORY._medkit._sceneNumber == 2280) {
_hotspot17.postInit();
_hotspot17.setVisage(2161);
_hotspot17._strip = 2;
_hotspot17.setPosition(Common::Point(162, 39));
_hotspot17.fixPriority(1);
_globals->_sceneItems.push_back(&_hotspot17);
}
if (RING_INVENTORY._scanner._sceneNumber == 2280) {
_hotspot18.postInit();
_hotspot18.setVisage(2161);
_hotspot18._strip = 2;
_hotspot18._frame = 2;
_hotspot17.setPosition(Common::Point(152, 43));
_hotspot17.fixPriority(1);
_globals->_sceneItems.push_back(&_hotspot17);
}
if (!_globals->getFlag(13)) {
_hotspot8.postInit();
_hotspot8.setVisage(2280);
_hotspot8._strip = 2;
_hotspot8.setPosition(Common::Point(79, 108));
_hotspot8.fixPriority(1);
_hotspot10.postInit();
_hotspot10.setVisage(2280);
_hotspot10._strip = 2;
_hotspot10._frame = 2;
_hotspot10.setPosition(Common::Point(79, 104));
_hotspot10.fixPriority(2);
_hotspot12.postInit();
_hotspot12.setVisage(2280);
_hotspot12._strip = 2;
_hotspot12._frame = 3;
_hotspot12.setPosition(Common::Point(88, 76));
_hotspot12.fixPriority(1);
_globals->_sceneItems.addItems(&_hotspot8, &_hotspot10, &_hotspot12, NULL);
}
_hotspot14.setBounds(Rect(70, 50, 90, 104));
_hotspot9.postInit();
_hotspot9.setVisage(2280);
_hotspot9.setPosition(Common::Point(104, 96));
_hotspot9.fixPriority(1);
_hotspot11.postInit();
_hotspot11.setVisage(2280);
_hotspot11._frame = 2;
_hotspot11.setPosition(Common::Point(130, 79));
_hotspot11.fixPriority(1);
_hotspot13.postInit();
_hotspot13.setVisage(2280);
_hotspot13._frame = 3;
_hotspot13.setPosition(Common::Point(113, 63));
_hotspot13.fixPriority(1);
_hotspot1.setBounds(Rect(225, 70, 234, 80));
_hotspot2.setBounds(Rect(44, 78, 56, 105));
_hotspot3.setBounds(Rect(47, 108, 56, 117));
_hotspot4.setBounds(Rect(56, 78, 69, 101));
_hotspot5.setBounds(Rect(56, 108, 66, 113));
_hotspot6.setBounds(Rect(261, 39, 276, 90));
_hotspot7.setBounds(Rect(142, 19, 174, 38));
_hotspot15.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT));
_exitRect = Rect(145, 180, 195, 195);
_globals->_player.postInit();
_globals->_player.setVisage(_globals->getFlag(13) ? 2170 : 0);
_globals->_player.animate(ANIM_MODE_1, NULL);
_globals->_player.setObjectWrapper(new SceneObjectWrapper());
_globals->_player.setPosition(Common::Point(146, 161));
_globals->_player.changeZoom(-1);
_globals->_player._moveDiff = Common::Point(4, 3);
if ((_globals->_sceneManager._previousScene != 7300) && (_globals->_sceneManager._previousScene != 7000)) {
_globals->_player.enableControl();
} else {
_globals->setFlag(109);
_globals->_player.fixPriority(76);
_globals->_player.disableControl();
_sceneMode = 2281;
setAction(&_sequenceManager, this, 2281, &_globals->_player, &_hotspot16, NULL);
_globals->_soundHandler.play(160);
_globals->_soundHandler.holdAt(true);
}
_globals->_sceneItems.addItems(&_hotspot13, &_hotspot11, &_hotspot9, &_hotspot14, &_hotspot7,
&_hotspot6, &_hotspot2, &_hotspot3, &_hotspot4, &_hotspot5, &_hotspot1, &_hotspot16, &_hotspot15, NULL);
_globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds);
_globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
}
void Scene2280::signal() {
if (_sceneMode == 2281) {
_globals->_player.fixPriority(-1);
_globals->_player.enableControl();
}
}
void Scene2280::dispatch() {
Scene::dispatch();
if (!_action) {
if (_exitRect.contains(_globals->_player._position))
_globals->_sceneManager.changeScene(2150);
}
}
void Scene2280::synchronize(Serializer &s) {
Scene::synchronize(s);
_exitRect.synchronize(s);
}
/*--------------------------------------------------------------------------
* Scene 2300 - Starcraft - Hanger Bay
*
*--------------------------------------------------------------------------*/
void Scene2300::Action1::signal() {
// Quinn and Seeker
Scene2300 *scene = (Scene2300 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(10);
break;
case 1: {
Common::Point pt(SCREEN_WIDTH, SCREEN_HEIGHT);
NpcMover *mover = new NpcMover();
scene->_hotspot2.addMover(mover, &pt, this);
break;
}
case 2: {
scene->_hotspot8.setAction(&scene->_action4);
scene->_soundHandler2.play(21);
Common::Point pt1(95, scene->_hotspot5._position.y);
NpcMover *mover1 = new NpcMover();
scene->_hotspot5.addMover(mover1, &pt1, this);
Common::Point pt2(99, scene->_hotspot6._position.y);
NpcMover *mover2 = new NpcMover();
scene->_hotspot6.addMover(mover2, &pt2, NULL);
break;
}
case 3:
setDelay(2);
_globals->_player._uiEnabled = true;
_globals->_events.setCursor(CURSOR_WALK);
break;
case 4: {
scene->_hotspot5.setVisage(93);
scene->_hotspot6.setVisage(94);
scene->_hotspot5.setStrip(1);
scene->_hotspot6.setStrip(1);
scene->_hotspot5.changeZoom(50);
scene->_hotspot6.changeZoom(50);
scene->_hotspot5._moveDiff.x = 5;
scene->_hotspot6._moveDiff.x = 5;
scene->_hotspot5.animate(ANIM_MODE_1, NULL);
scene->_hotspot6.animate(ANIM_MODE_1, NULL);
Common::Point pt1(178, 147);
NpcMover *mover1 = new NpcMover();
scene->_hotspot5.addMover(mover1, &pt1, this);
Common::Point pt2(170, 145);
NpcMover *mover2 = new NpcMover();
scene->_hotspot6.addMover(mover2, &pt2, this);
break;
}
case 6:
scene->_soundHandler1.play(28);
_globals->_player.disableControl();
scene->_hotspot2.setVisage(40);
scene->_hotspot2.setStrip(4);
scene->_hotspot2.setFrame(1);
scene->_hotspot2.animate(ANIM_MODE_5, NULL);
_globals->_player.setVisage(40);
_globals->_player.setStrip(2);
_globals->_player.setFrame(1);
_globals->_player.animate(ANIM_MODE_5, this);
break;
case 7:
_globals->_soundHandler.play(77, this);
break;
case 8:
_globals->_game->endGame(2300, 0);
remove();
break;
case 9:
if (scene->_hotspot5._mover)
scene->_hotspot5.addMover(NULL);
if (scene->_hotspot6._mover)
scene->_hotspot6.addMover(NULL);
scene->_hotspot5.animate(ANIM_MODE_NONE, NULL);
scene->_hotspot6.animate(ANIM_MODE_NONE, NULL);
_globals->_player.disableControl();
_globals->_player.setVisage(2672);
_globals->_player._strip = 5;
_globals->_player._frame = 1;
_globals->_player.animate(ANIM_MODE_5, this);
break;
case 10:
_globals->_player.setVisage(2674);
_globals->_player._strip = 5;
_globals->_player._frame = 1;
_globals->_player.animate(ANIM_MODE_5, this);
break;
case 11:
scene->_soundHandler1.play(28);
scene->_hotspot5._strip = 2;
scene->_hotspot6._strip = 2;
scene->_hotspot5._frame = 1;
scene->_hotspot6._frame = 1;
scene->_hotspot5.animate(ANIM_MODE_5, NULL);
scene->_hotspot6.animate(ANIM_MODE_5, NULL);
scene->_hotspot5.fixPriority(20);
scene->_hotspot6.fixPriority(20);
_globals->_player.setVisage(2672);
_globals->_player._strip = 5;
_globals->_player._frame = _globals->_player.getFrameCount();
_globals->_player.animate(ANIM_MODE_6, this);
break;
case 12:
scene->_soundHandler1.play(77);
_globals->_player.setVisage(0);
_globals->_player.animate(ANIM_MODE_1, NULL);
_globals->_player.setStrip(4);
_globals->_player._uiEnabled = false;
setDelay(60);
break;
case 13:
scene->_stripManager.start(2300, this);
break;
case 14:
setDelay(5);
_actionIndex = 16;
break;
case 15: {
Common::Point pt1(101, 148);
PlayerMover *mover1 = new PlayerMover();
_globals->_player.addMover(mover1, &pt1, this);
Common::Point pt2(scene->_hotspot5._position.x + 5, scene->_hotspot5._position.y + 5);
NpcMover *mover2 = new NpcMover();
scene->_hotspot2.addMover(mover2, &pt2, NULL);
break;
}
case 16:
_globals->_sceneManager.changeScene(2000);
remove();
break;
}
}
void Scene2300::Action2::signal() {
// Miranda tearing cables
Scene2300 *scene = (Scene2300 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
_globals->_player.disableControl();
setDelay(30);
break;
case 1: {
Common::Point pt(153, 135);
PlayerMover *mover = new PlayerMover();
_globals->_player.addMover(mover, &pt, this);
break;
}
case 2:
_globals->_events.setCursor(CURSOR_WALK);
scene->_stripManager.start(2030, this);
break;
case 3:
_globals->_player.enableControl();
setDelay(600);
break;
case 4: {
_globals->_player.disableControl();
scene->_hotspot2.postInit();
scene->_hotspot2.setVisage(2801);
scene->_hotspot2.setPosition(Common::Point(109, 145));
scene->_hotspot2.changeZoom(50);
scene->_hotspot2.animate(ANIM_MODE_1, NULL);
scene->_hotspot2.setObjectWrapper(new SceneObjectWrapper());
Common::Point pt(160, 145);
NpcMover *mover = new NpcMover();
scene->_hotspot2.addMover(mover, &pt, this);
break;
}
case 5:
scene->_stripManager.start(2032, this);
break;
case 6:
scene->_hotspot2.setVisage(93);
scene->_hotspot2.setStrip(3);
scene->_hotspot2.setFrame(1);
scene->_hotspot2.animate(ANIM_MODE_5, this);
scene->_soundHandler1.play(28);
scene->_soundHandler2.play(97);
break;
case 7:
scene->_hotspot7._strip = 2;
scene->_hotspot7._frame = 1;
scene->_hotspot7.animate(ANIM_MODE_5, this);
break;
case 8:
scene->_hotspot2.animate(ANIM_MODE_6, this);
break;
case 9:
scene->_stripManager.start(2035, this);
break;
case 10:
_globals->_sceneManager.changeScene(2310);
break;
}
}
void Scene2300::Action3::signal() {
// Stunned Miranda
Scene2300 *scene = (Scene2300 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0: {
Common::Point pt(153, 135);
PlayerMover *mover = new PlayerMover();
_globals->_player.addMover(mover, &pt, this);
break;
}
case 1:
_globals->_player.disableControl();
_globals->_player.setVisage(2672);
_globals->_player._strip = 2;
_globals->_player._frame = 1;
_globals->_player.animate(ANIM_MODE_5, this);
break;
case 2:
_globals->_player.setVisage(2674);
_globals->_player._strip = 2;
_globals->_player._frame = 1;
_globals->_player.animate(ANIM_MODE_5, this);
break;
case 3:
scene->_soundHandler1.play(97);
scene->_soundHandler2.play(28);
scene->_hotspot7._strip = 2;
scene->_hotspot7._frame = 1;
scene->_hotspot7.animate(ANIM_MODE_5, this);
_globals->_player.setVisage(2672);
_globals->_player._strip = 2;
_globals->_player._frame = _globals->_player.getFrameCount();
_globals->_player.animate(ANIM_MODE_6, NULL);
break;
case 4:
scene->_soundHandler2.play(97);
_globals->_player.setVisage(0);
_globals->_player.animate(ANIM_MODE_1, NULL);
_globals->_player.setStrip(1);
scene->_stripManager.start(2034, this);
break;
case 5:
setDelay(10);
break;
case 6:
_globals->_sceneManager.changeScene(2310);
break;
}
}
void Scene2300::Action4::signal() {
// Ennemies coming
Scene2300 *scene = (Scene2300 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
scene->_hotspot8.animate(ANIM_MODE_5, this);
scene->_soundHandler1.play(11);
break;
case 1:
scene->_hotspot9.postInit();
scene->_hotspot9.setVisage(2301);
scene->_hotspot9.setStrip2(2);
scene->_hotspot9.setFrame(3);
scene->_hotspot9.setPosition(Common::Point(273, 199));
scene->_hotspot9.fixPriority(19);
scene->_hotspot9.animate(ANIM_MODE_5, this);
scene->_soundHandler1.play(11);
break;
case 2:
scene->_hotspot8.remove();
scene->_hotspot10.postInit();
scene->_hotspot10.setVisage(2301);
scene->_hotspot10.setStrip(3);
scene->_hotspot10.setFrame(4);
scene->_hotspot10.setPosition(Common::Point(292, 113));
scene->_hotspot10.animate(ANIM_MODE_5, this);
scene->_soundHandler1.play(11);
break;
case 3:
scene->_soundHandler1.play(13);
remove();
break;
}
}
/*--------------------------------------------------------------------------*/
void Scene2300::Hotspot5::doAction(int action) {
// Ennemies
Scene2300 *scene = (Scene2300 *)_globals->_sceneManager._scene;
switch (action) {
case OBJECT_STUNNER:
_globals->_player.disableControl();
_globals->_player.addMover(NULL);
scene->_action1.setActionIndex(9);
scene->_action1.setDelay(1);
break;
case CURSOR_LOOK:
SceneItem::display2(2300, 3);
break;
case CURSOR_USE:
SceneItem::display2(2300, 4);
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2300::Hotspot7::doAction(int action) {
// Miranda
Scene2300 *scene = (Scene2300 *)_globals->_sceneManager._scene;
switch (action) {
case OBJECT_STUNNER:
scene->setAction(&scene->_action3);
break;
case CURSOR_LOOK:
SceneItem::display2(2300, 2);
break;
case CURSOR_USE:
SceneItem::display2(2300, 21);
break;
default:
SceneHotspot::doAction(action);
break;
}
}
/*--------------------------------------------------------------------------*/
Scene2300::Scene2300() :
_hotspot11(0, CURSOR_LOOK, 2300, 6, CURSOR_USE, 2300, 14, LIST_END),
_hotspot12(0, CURSOR_LOOK, 2300, 5, CURSOR_USE, 2300, 13, LIST_END),
_hotspot13(0, CURSOR_LOOK, 2300, 9, CURSOR_USE, 2300, 20, LIST_END),
_hotspot14(0, CURSOR_LOOK, 2300, 7, CURSOR_USE, 2300, 15, LIST_END),
_hotspot15(0, CURSOR_LOOK, 2300, 1, LIST_END) {
}
void Scene2300::postInit(SceneObjectList *OwnerList) {
loadScene(2300);
Scene::postInit();
setZoomPercents(0, 100, 200, 100);
_stripManager.addSpeaker(&_speakerSL);
_stripManager.addSpeaker(&_speakerMText);
_stripManager.addSpeaker(&_speakerQText);
_stripManager.addSpeaker(&_speakerSText);
RING_INVENTORY._stunner._sceneNumber = 1;
RING_INVENTORY._infoDisk._sceneNumber = 1;
_hotspot8.postInit();
_hotspot8.setVisage(2301);
_hotspot8.setPosition(Common::Point(288, 74));
_globals->_soundHandler.play(96);
if (_globals->_sceneManager._previousScene == 2000) {
_hotspot8.remove();
_hotspot9.postInit();
_hotspot9.setVisage(2301);
_hotspot9.setStrip2(2);
_hotspot9._frame = _hotspot9.getFrameCount();
_hotspot9.setPosition(Common::Point(273, 199));
_hotspot9.fixPriority(1);
_hotspot10.postInit();
_hotspot10.setVisage(2301);
_hotspot10.setStrip(3);
_hotspot10._frame = _hotspot10.getFrameCount();
_hotspot10.setPosition(Common::Point(292, 113));
_globals->_player.postInit();
_globals->_player.setVisage(0);
_globals->_player.setPosition(Common::Point(109, 139));
_globals->_player.changeZoom(40);
_globals->_player.animate(ANIM_MODE_1, NULL);
_globals->_player.setObjectWrapper(new SceneObjectWrapper());
_globals->_player.disableControl();
_hotspot7.postInit();
_hotspot7.setVisage(2302);
_hotspot7.animate(ANIM_MODE_2, NULL);
_hotspot7.setPosition(Common::Point(229, 125));
_hotspot7._numFrames = 5;
_soundHandler1.play(95);
_soundHandler2.play(96);
_globals->_sceneItems.push_back(&_hotspot7);
setAction(&_action2);
} else {
_hotspot8._numFrames = 3;
_hotspot3.postInit();
_hotspot3.setVisage(2331);
_hotspot3.setStrip(7);
_hotspot3.setPosition(Common::Point(231, 190));
_hotspot3.changeZoom(40);
_hotspot2.postInit();
_hotspot2.setVisage(2801);
_hotspot2.setPosition(Common::Point(269, 195));
_hotspot2.changeZoom(50);
_hotspot2.animate(ANIM_MODE_1, NULL);
_hotspot2.setObjectWrapper(new SceneObjectWrapper());
_hotspot1.postInit();
_hotspot1.setVisage(2331);
_hotspot1.setStrip(7);
_hotspot1.setPosition(Common::Point(255, 190));
_hotspot1.changeZoom(40);
_globals->_player.postInit();
_globals->_player.setVisage(0);
_globals->_player.setPosition(Common::Point(203, 191));
_globals->_player.changeZoom(40);
_globals->_player.animate(ANIM_MODE_1, NULL);
_globals->_player.setObjectWrapper(new SceneObjectWrapper());
_globals->_player.disableControl();
_hotspot5.postInit();
_hotspot5.setVisage(91);
_hotspot5.setPosition(Common::Point(343, 145));
_hotspot5._moveDiff = Common::Point(35, 35);
_hotspot5.changeZoom(40);
_hotspot5.setObjectWrapper(new SceneObjectWrapper());
_hotspot6.postInit();
_hotspot6.setVisage(92);
_hotspot6.setPosition(Common::Point(343, 130));
_hotspot6._moveDiff = Common::Point(35, 35);
_hotspot6.changeZoom(40);
_hotspot6.setObjectWrapper(new SceneObjectWrapper());
_globals->_sceneItems.push_back(&_hotspot5);
setAction(&_action1);
}
_hotspot12._sceneRegionId = 8;
_hotspot11._sceneRegionId = 9;
_hotspot13._sceneRegionId = 10;
_hotspot14._sceneRegionId = 11;
_hotspot15.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT));
_globals->_sceneItems.addItems(&_hotspot12, &_hotspot11, &_hotspot13, &_hotspot14, &_hotspot15, NULL);
}
/*--------------------------------------------------------------------------
* Scene 2310 - Starcraft - Copy Protection Screen
*
*--------------------------------------------------------------------------*/
Scene2310::Scene2310() {
_pageList[0].set(0, 0, 0, 0, 0, 0);
_pageList[1].set(1, 0, 3, 2, 1, 4);
_pageList[2].set(2, 1, 4, 3, 2, 0);
_pageList[3].set(3, 2, 0, 4, 3, 1);
_pageList[4].set(4, 3, 1, 0, 2, 4);
_pageList[5].set(5, 4, 2, 1, 3, 0);
_pageList[6].set(6, 0, 4, 2, 3, 1);
_pageList[7].set(7, 1, 0, 2, 4, 3);
_pageList[8].set(8, 2, 1, 3, 0, 4);
_pageList[9].set(9, 3, 2, 4, 1, 0);
_pageList[10].set(10, 4, 1, 2, 0, 3);
_pageList[11].set(11, 0, 2, 3, 4, 1);
_pageList[12].set(12, 1, 2, 0, 4, 3);
_pageList[13].set(13, 2, 4, 0, 3, 1);
_pageList[14].set(14, 3, 4, 1, 0, 2);
_pageList[15].set(15, 4, 3, 1, 2, 0);
_pageList[16].set(16, 0, 1, 4, 2, 3);
_pageList[17].set(17, 1, 3, 4, 0, 2);
_pageList[18].set(18, 2, 3, 0, 1, 4);
_pageList[19].set(19, 3, 0, 1, 4, 2);
_pageList[20].set(20, 4, 0, 3, 1, 2);
_rectList[0].set(135, 70, 151, 140);
_rectList[1].set(151, 70, 167, 140);
_rectList[2].set(167, 70, 183, 140);
_rectList[3].set(183, 70, 199, 140);
_rectList[4].set(199, 70, 215, 140);
_wireIndex = 5;
}
void Scene2310::postInit(SceneObjectList *OwnerList) {
Scene::postInit();
loadScene(2301);
Common::Point pointList[5] = { Common::Point(142, 82), Common::Point(158, 82), Common::Point(174, 82),
Common::Point(190, 82), Common::Point(205, 82) };
for (int idx = 0; idx < 5; ++idx) {
_wireList[idx].postInit();
_wireList[idx].setVisage(2300);
_wireList[idx]._strip = idx + 1;
_wireList[idx]._frame = 1;
_wireList[idx].setPosition(pointList[idx]);
}
_globals->_player.disableControl();
_globals->_events.setCursor(CURSOR_WALK);
if (_vm->getFeatures() & GF_CD)
_pageIndex = _globals->_randomSource.getRandomNumber(14) + 2;
else
_pageIndex = _globals->_randomSource.getRandomNumber(19) + 1;
signal();
}
void Scene2310::signal() {
switch (_sceneMode++) {
case 0: {
Common::String fmtString = _resourceManager->getMessage(2300, 22);
Common::String msg = Common::String::format(fmtString.c_str(), _pageList[_pageIndex]._pageNumber);
_sceneText._width = 280;
_sceneText._textMode = ALIGN_CENTER;
_sceneText._color1 = 35;
_sceneText._fontNumber = 2;
_sceneText.setup(msg);
_sceneText.fixPriority(255);
_sceneText.setPosition(Common::Point(30, 20));
break;
}
case 1: {
Common::String msg = _resourceManager->getMessage(2300, 23);
_sceneText.setup(msg);
_sceneText.fixPriority(255);
_sceneText.setPosition(Common::Point(30, 170));
_globals->_sceneObjects->draw();
_globals->_events.waitForPress();
_sceneText.hide();
_globals->_sceneObjects->draw();
_globals->_sceneManager.changeScene(2200);
break;
}
}
}
void Scene2310::synchronize(Serializer &s) {
Scene::synchronize(s);
s.syncAsSint16LE(_wireIndex);
s.syncAsSint16LE(_pageIndex);
}
void Scene2310::process(Event &event) {
int frameNum = 0;
if (!event.handled && (event.eventType == EVENT_BUTTON_DOWN)) {
int idx = 0;
while (idx < 5) {
if (_rectList[idx].contains(event.mousePos))
break;
++idx;
}
if (idx < 5) {
// In handled rectangle area
if (_wireIndex == 5) {
// No wire is currently active, so start moving designated wire
_wireIndex = idx;
frameNum = idx + 2;
if (event.mousePos.y > 105)
idx = findObject(idx);
if (idx != 5) {
_wireList[idx].hide();
_globals->_sceneObjects->draw();
_wireList[idx].setFrame(frameNum);
_wireList[idx].show();
_globals->_sceneObjects->draw();
}
} else {
// End the moving of the currently active wire
_wireList[_wireIndex].setFrame(idx + 2);
_wireIndex = 5;
// Check if solution has been reached
int idx2 = 0;
do {
int objIndex = findObject(idx2);
if (_pageList[_pageIndex]._connectionList[idx2] != objIndex)
// Mismatch
break;
} while (++idx2 < 5);
if (idx2 == 5)
// All the entries are correct
signal();
}
event.handled = true;
} else if (_wireIndex != 5) {
// Reset the active wire back to unplugged
_wireList[_wireIndex].setFrame(1);
_wireIndex = 5;
}
}
}
void Scene2310::dispatch() {
if (_wireIndex != 5) {
for (int idx = 0; idx < 5; ++idx) {
if (_rectList[idx].contains(_globals->_events._mousePos)) {
_wireList[_wireIndex].setFrame(idx + 2);
return;
}
}
_wireList[_wireIndex].setFrame(1);
}
}
int Scene2310::findObject(int objIndex) {
for (int idx = 0; idx < 5; ++idx) {
if (_wireList[idx]._frame == (objIndex + 2))
return idx;
}
return 5;
}
/*--------------------------------------------------------------------------
* Scene 2320 - Starcraft - Lander Bay
*
*--------------------------------------------------------------------------*/
void Scene2320::Action1::signal() {
Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(10);
if (_globals->_sceneManager._previousScene == 2120)
_actionIndex = 3;
break;
case 1: {
Common::Point pt(513, 144);
NpcMover *mover = new NpcMover();
scene->_hotspot11.addMover(mover, &pt, this);
break;
}
case 2: {
Common::Point pt(510, 164);
NpcMover *mover = new NpcMover();
scene->_hotspot11.addMover(mover, &pt, this);
break;
}
case 3:
setAction(&scene->_sequenceManager2, this, 2328, &scene->_hotspot11, NULL);
break;
case 4:
scene->_hotspot11.animate(ANIM_MODE_NONE);
setDelay(120);
_actionIndex = 3;
break;
}
}
void Scene2320::Action2::signal() {
Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0: {
scene->_soundHandler.play(253);
scene->_hotspot13.fixPriority(99);
Common::Point pt(scene->_hotspot13._position.x, 200);
NpcMover *mover = new NpcMover();
scene->_hotspot13.addMover(mover, &pt, this);
break;
}
case 1:
scene->_hotspot13.hide();
remove();
break;
}
}
void Scene2320::Action3::signal() {
Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0: {
Common::Point pt(320, 86);
PlayerMover *mover = new PlayerMover();
_globals->_player.addMover(mover, &pt, this);
break;
}
case 1:
scene->_soundHandler.play(162);
scene->_hotspot6.animate(ANIM_MODE_5, this);
break;
case 2: {
Common::Point pt(320, 79);
NpcMover *mover = new NpcMover();
_globals->_player.addMover(mover, &pt, this);
break;
}
case 3:
_globals->_player.fixPriority(scene->_hotspot6._priority - 1);
_globals->_player._strip = 3;
setDelay(10);
break;
case 4:
scene->_area1.display();
scene->_area2.display();
scene->_area3.display();
scene->_area4.display();
scene->_area3.draw(true);
_state = 0;
_globals->_events.setCursor(CURSOR_USE);
while (!_state && !_vm->shouldQuit()) {
// Wait for an event
Event event;
if (!_globals->_events.getEvent(event)) {
g_system->updateScreen();
g_system->delayMillis(10);
continue;
}
if (scene->_area1._bounds.contains(event.mousePos)) {
scene->_area1.draw(true);
scene->_area3.draw(false);
_state = scene->_area1._actionId;
}
if (scene->_area2._bounds.contains(event.mousePos)) {
scene->_area3.draw(false);
scene->_area2.draw(true);
_state = scene->_area2._actionId;
}
if (scene->_area3._bounds.contains(event.mousePos)) {
scene->_area3.draw(true);
_state = scene->_area3._actionId;
}
}
scene->_soundHandler.play(161);
scene->_area1.restore();
scene->_area2.restore();
scene->_area3.restore();
scene->_area4.restore();
if (_state == 2320) {
setDelay(10);
} else {
scene->_soundHandler.play(162);
scene->_hotspot6.animate(ANIM_MODE_6, this);
}
break;
case 5: {
if (_state == 2320)
_globals->_player.fixPriority(-1);
else
_globals->_sceneManager.changeScene(_state);
Common::Point pt(320, 86);
NpcMover *mover = new NpcMover();
_globals->_player.addMover(mover, &pt, this);
break;
}
case 6:
scene->_soundHandler.play(162);
scene->_hotspot6.animate(ANIM_MODE_6, this);
break;
case 7:
_globals->_player.enableControl();
remove();
break;
}
}
void Scene2320::Action4::signal() {
// Fly Cycle actions
Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
_globals->_player.disableControl();
setDelay(3);
break;
case 1: {
Common::Point pt(213, 84);
PlayerMover *mover = new PlayerMover();
_globals->_player.addMover(mover, &pt, this);
break;
}
case 2:
case 16:
_globals->_player.setVisage(2109);
_globals->_player.setStrip(2);
_globals->_player.setFrame(1);
_globals->_player.animate(ANIM_MODE_5, this);
break;
case 3:
_globals->_player.animate(ANIM_MODE_6, NULL);
setAction(&scene->_action2, this);
break;
case 4: {
scene->_hotspot16.postInit();
scene->_hotspot16.setVisage(2331);
scene->_hotspot16.setStrip(3);
scene->_hotspot16.fixPriority(149);
scene->_hotspot16.setPosition(Common::Point(320, 202));
scene->_hotspot16.show();
Common::Point pt(320, 121);
NpcMover *mover = new NpcMover();
scene->_hotspot16.addMover(mover, &pt, this);
break;
}
case 5: {
scene->_hotspot16.fixPriority(200);
Common::Point pt(320, 180);
NpcMover *mover = new NpcMover();
scene->_hotspot16.addMover(mover, &pt, this);
break;
}
case 6: {
scene->_hotspot16.fixPriority(-1);
_globals->_player.setVisage(0);
_globals->_player.animate(ANIM_MODE_1, NULL);
Common::Point pt(233, 176);
PlayerMover *mover = new PlayerMover();
_globals->_player.addMover(mover, &pt, this);
break;
}
case 7: {
Common::Point pt(291, 194);
PlayerMover *mover = new PlayerMover();
_globals->_player.addMover(mover, &pt, this);
break;
}
case 8:
_globals->_player.setStrip(5);
_globals->_player.setFrame(1);
setDelay(13);
break;
case 9:
// Quinn sits in the flycycle
scene->_hotspot16.hide();
_globals->_player.setVisage(2323);
_globals->_player.setPosition(Common::Point(303, 176));
_globals->_player.setStrip(2);
_globals->_player.setFrame(1);
_globals->_player.animate(ANIM_MODE_5, this);
break;
case 10:
if (_globals->getFlag(109)) {
_globals->_soundHandler.play(40);
_globals->_soundHandler.holdAt(true);
Common::Point pt(303, 240);
NpcMover *mover = new NpcMover();
_globals->_player.addMover(mover, &pt, this);
} else {
setDelay(3);
}
break;
case 11:
if (_globals->getFlag(109)) {
_globals->_sceneManager.changeScene(7600);
} else {
SceneItem::display2(2320, 19);
setDelay(3);
}
break;
case 12:
_globals->_player.animate(ANIM_MODE_6, this);
break;
case 13:
_globals->_player.setVisage(0);
_globals->_player.setPosition(Common::Point(291, 194));
_globals->_player.setStrip(5);
_globals->_player.setFrame(1);
_globals->_player.animate(ANIM_MODE_1, NULL);
scene->_hotspot16.show();
setDelay(3);
break;
case 14: {
Common::Point pt(233, 176);
PlayerMover *mover = new PlayerMover();
_globals->_player.addMover(mover, &pt, this);
break;
}
case 15: {
Common::Point pt(213, 85);
PlayerMover *mover = new PlayerMover();
_globals->_player.addMover(mover, &pt, this);
break;
}
case 17: {
_globals->_player.animate(ANIM_MODE_6, NULL);
scene->_hotspot16.fixPriority(160);
Common::Point pt(320, 121);
NpcMover *mover = new NpcMover();
scene->_hotspot16.addMover(mover, &pt, this);
break;
}
case 18: {
scene->_hotspot16.fixPriority(149);
Common::Point pt(320, 202);
PlayerMover *mover = new PlayerMover();
scene->_hotspot16.addMover(mover, &pt, this);
break;
}
case 19: {
scene->_hotspot16.remove();
scene->_soundHandler.play(253);
scene->_hotspot13.show();
Common::Point pt(319, 157);
NpcMover *mover = new NpcMover();
scene->_hotspot13.addMover(mover, &pt, this);
break;
}
case 20:
_globals->_player.enableControl();
_globals->_player.setVisage(0);
_globals->_player.animate(ANIM_MODE_1, NULL);
scene->_hotspot13.fixPriority(1);
remove();
break;
}
}
void Scene2320::Action5::signal() {
Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
_globals->_player.disableControl();
ADD_PLAYER_MOVER(163, 126);
break;
case 1:
ADD_PLAYER_MOVER(165, 132);
break;
case 2:
setDelay(2);
break;
case 3:
if (!_globals->getFlag(59))
setDelay(10);
else
scene->_stripManager.start(2323, this);
break;
case 4:
_globals->_player.setVisage(2347);
_globals->_player.setStrip(1);
_globals->_player.setFrame(1);
_globals->_player.fixPriority(137);
_globals->_player.animate(ANIM_MODE_5, this);
break;
case 5:
_globals->_player.setStrip(2);
_globals->_player.setFrame(1);
_globals->_player.animate(ANIM_MODE_5, this);
break;
case 6:
if (_globals->getFlag(72))
_globals->_sceneManager.changeScene(7000);
else if (_globals->getFlag(59))
_globals->_sceneManager.changeScene(5000);
else if (!_globals->getFlag(43) || (RING_INVENTORY._ale._sceneNumber != 1))
setDelay(10);
else {
scene->_hotspot11.setAction(NULL);
scene->_hotspot11.setVisage(2705);
scene->_hotspot11.animate(ANIM_MODE_1, NULL);
scene->_hotspot11.setObjectWrapper(new SceneObjectWrapper());
Common::Point pt(185, 135);
NpcMover *mover = new NpcMover();
scene->_hotspot11.addMover(mover, &pt, NULL);
_globals->clearFlag(43);
scene->_stripManager.start(2325, this);
}
break;
case 7:
setDelay(10);
break;
case 8:
_globals->_sceneManager.changeScene(4000);
break;
}
}
void Scene2320::Action6::signal() {
Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(30);
break;
case 1:
_globals->_player.animate(ANIM_MODE_6, this);
break;
case 2:
_globals->_player.setStrip(1);
_globals->_player.setFrame(1);
_globals->_player.animate(ANIM_MODE_6, this);
break;
case 3:
_globals->_player.setVisage(0);
_globals->_player.setStrip(3);
_globals->_player.fixPriority(-1);
_globals->_player.setObjectWrapper(new SceneObjectWrapper());
_globals->_player.animate(ANIM_MODE_1, NULL);
setDelay(60);
break;
case 4:
if ((_globals->_sceneManager._previousScene != 4000) || _globals->getFlag(43))
setDelay(3);
else if (_globals->getFlag(35)) {
_globals->setFlag(43);
scene->_stripManager.start(4200, this);
_globals->setFlag(69);
} else if (_globals->getFlag(36)) {
setDelay(3);
} else {
_globals->setFlag(43);
scene->_stripManager.start(4210, this);
break;
}
break;
case 5:
if (_globals->_sceneObjects->contains(&scene->_hotspot11)) {
scene->_hotspot11.setAction(&scene->_action1);
if (_globals->_sceneObjects->contains(&scene->_hotspot10)) {
ADD_MOVER(scene->_hotspot10, 491, 160);
} else {
setDelay(60);
}
_globals->_sceneItems.push_front(&scene->_hotspot11);
} else {
setDelay(3);
}
break;
case 6:
_globals->_events.setCursor(CURSOR_WALK);
_globals->_player.enableControl();
remove();
break;
}
}
void Scene2320::Action7::signal() {
Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(30);
break;
case 1:
_globals->_soundHandler.play(162);
scene->_hotspot6.animate(ANIM_MODE_5, this);
break;
case 2:
scene->_hotspot10.fixPriority(-1);
ADD_MOVER_NULL(scene->_hotspot10, 321, 94);
scene->_hotspot11.fixPriority(-1);
ADD_MOVER_NULL(scene->_hotspot11, 346, 85);
_globals->_player.fixPriority(-1);
ADD_MOVER(_globals->_player, 297, 89);
break;
case 3:
ADD_PLAYER_MOVER(462, 182);
break;
case 4:
ADD_MOVER(scene->_hotspot11, 391, 88);
break;
case 5:
ADD_MOVER(scene->_hotspot11, 500, 164);
ADD_MOVER(scene->_hotspot10, 382, 93);
_globals->_player.setStrip(3);
break;
case 6:
ADD_MOVER_NULL(scene->_hotspot10, 491, 160);
ADD_MOVER(_globals->_player, 391, 88);
break;
case 7:
ADD_PLAYER_MOVER(462, 182);
break;
case 8:
_globals->_player.setStrip(7);
setDelay(15);
break;
case 9:
scene->_stripManager.start(6020, this);
break;
case 10:
setDelay(6);
break;
case 11:
scene->_stripManager.start(6022, this);
break;
case 12:
_globals->_player.enableControl();
RING_INVENTORY._stasisBox._sceneNumber = 2320;
break;
}
}
void Scene2320::Action8::signal() {
Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(5);
break;
case 1:
ADD_PLAYER_MOVER(462, 182);
break;
case 2:
_globals->_player.setStrip(7);
setDelay(5);
break;
case 3:
scene->_speakerGameText.setTextPos(Common::Point(_globals->_sceneManager._scene->_sceneBounds.left + 30, 10));
scene->_stripManager.start(_globals->getFlag(75) ? 6030 : 2320, this);
break;
case 4:
if (_globals->getFlag(75))
setDelay(3);
else
_globals->_player.enableControl();
break;
case 5:
RING_INVENTORY._stasisBox._sceneNumber = 2320;
scene->_sceneMode = 2326;
scene->_speakerGameText.setTextPos(Common::Point(_globals->_sceneManager._scene->_sceneBounds.left + 30, 10));
scene->setAction(&scene->_sequenceManager1, scene, 2326, &_globals->_player, &scene->_hotspot11, NULL);
break;
}
}
/*--------------------------------------------------------------------------*/
void Scene2320::Hotspot5::doAction(int action) {
Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2320, 13);
break;
case CURSOR_USE:
if (_globals->getFlag(70))
SceneItem::display2(2320, 33);
else if (_globals->getFlag(13))
SceneItem::display2(2320, 18);
else
scene->setAction(&scene->_action5);
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2320::Hotspot6::doAction(int action) {
Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2320, 2);
break;
case CURSOR_USE:
_globals->_player.disableControl();
scene->setAction(&scene->_action3);
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2320::Hotspot8::doAction(int action) {
Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2320, 23);
break;
case CURSOR_USE:
scene->_sceneMode = 2336;
scene->setAction(&scene->_sequenceManager1, scene, 2336, &_globals->_player, this, NULL);
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2320::Hotspot10::doAction(int action) {
// Seeker
Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2320, 26);
break;
case CURSOR_TALK:
_globals->_player.disableControl();
scene->_sceneMode = 2329;
if (_globals->getFlag(13)) {
scene->_stripManager.start(2337, scene);
} else if (_globals->getFlag(70)) {
scene->setAction(&scene->_action8);
} else if (_globals->getFlag(109)) {
scene->setAction(&scene->_sequenceManager1, scene, 2337, NULL);
} else if (!_state) {
++_state;
scene->setAction(&scene->_sequenceManager1, scene, 2334, NULL);
} else {
scene->setAction(&scene->_sequenceManager1, scene, 2335, NULL);
}
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2320::Hotspot11::doAction(int action) {
Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2320, 25);
break;
case CURSOR_TALK:
_globals->_player.disableControl();
scene->_sceneMode = 2329;
if (_globals->getFlag(13)) {
_globals->_player.disableControl();
scene->_sceneMode = 5000;
scene->_stripManager.start(2336, scene);
} else if (_globals->getFlag(70)) {
scene->setAction(&scene->_action8);
} else {
scene->_sceneMode = 2329;
if (RING_INVENTORY._ale._sceneNumber == 1) {
scene->setAction(&scene->_sequenceManager1, scene, 2329, NULL);
} else if (!_globals->getFlag(110)) {
_globals->setFlag(110);
scene->setAction(&scene->_sequenceManager1, scene, 2330, NULL);
} else if (RING_INVENTORY._peg._sceneNumber != 1) {
scene->setAction(&scene->_sequenceManager1, scene, 2331, NULL);
} else if (!_state) {
++_state;
scene->setAction(&scene->_sequenceManager1, scene, 2332, NULL);
} else {
scene->setAction(&scene->_sequenceManager1, scene, 2333, NULL);
}
}
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2320::Hotspot12::doAction(int action) {
Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2320, 5);
break;
case CURSOR_USE:
if (_globals->getFlag(13))
SceneItem::display2(2320, 24);
else {
_globals->_player.disableControl();
scene->_sceneMode = 2322;
scene->setAction(&scene->_sequenceManager1, scene, 2322, &_globals->_player, NULL);
}
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2320::Hotspot14::doAction(int action) {
// Right Console
Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2320, 17);
break;
case CURSOR_USE:
if (_globals->getFlag(24)) {
_globals->clearFlag(24);
_globals->_player.disableControl();
scene->_hotspot8.postInit();
scene->_hotspot8.setVisage(2345);
scene->_hotspot8.setPosition(Common::Point(634, 65));
scene->_hotspot8.hide();
_globals->_sceneItems.push_front(&scene->_hotspot8);
RING_INVENTORY._waldos._sceneNumber = 2320;
scene->_hotspot9.postInit();
scene->_hotspot9.setVisage(2345);
scene->_hotspot9._strip = 6;
scene->_hotspot9.setPosition(Common::Point(536, 103));
scene->_hotspot9.fixPriority(200);
scene->_hotspot9.hide();
scene->_hotspot16.postInit();
scene->_hotspot16.setVisage(2345);
scene->_hotspot16.setStrip(8);
scene->_hotspot16.setPosition(Common::Point(536, 103));
scene->_hotspot16.hide();
scene->_sceneMode = 2324;
scene->setAction(&scene->_sequenceManager1, scene, 2324, &_globals->_player, &scene->_hotspot7,
&scene->_hotspot8, &scene->_hotspot9, &scene->_hotspot16, NULL);
} else if (_globals->getFlag(13)) {
SceneItem::display2(2320, 24);
} else if (!_globals->getFlag(76)) {
SceneItem::display2(2320, 28);
} else if (!RING_INVENTORY._waldos._sceneNumber) {
SceneItem::display2(2320, 27);
} else {
SceneItem::display2(2320, 29);
}
break;
default:
SceneHotspot::doAction(action);
break;
}
}
void Scene2320::Hotspot15::doAction(int action) {
// Left console (Flycycle console)
Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2320, 16);
break;
case CURSOR_USE:
if (_globals->getFlag(13))
SceneItem::display2(2320, 24);
else
scene->setAction(&scene->_action4);
break;
default:
SceneHotspot::doAction(action);
break;
}
}
/*--------------------------------------------------------------------------*/
Scene2320::Scene2320() :
_hotspot1(0, CURSOR_LOOK, 2320, 0, LIST_END),
_hotspot2(0, CURSOR_LOOK, 2320, 1, LIST_END),
_hotspot3(0, CURSOR_LOOK, 2320, 11, LIST_END),
_hotspot4(0, CURSOR_LOOK, 2320, 14, LIST_END),
_hotspot13(0, CURSOR_LOOK, 2320, 12, LIST_END)
{
_area1.setup(2153, 2, 1, 2100);
_area1._pt = Common::Point(200, 31);
_area2.setup(2153, 3, 1, 2150);
_area2._pt = Common::Point(200, 50);
_area3.setup(2153, 4, 1, 2320);
_area3._pt = Common::Point(200, 75);
_area4.setup(2153, 1, 1, 10);
_area4._pt = Common::Point(237, 77);
}
void Scene2320::postInit(SceneObjectList *OwnerList) {
Scene::postInit();
setZoomPercents(60, 75, 100, 100);
_stripManager.addSpeaker(&_speakerMR);
_stripManager.addSpeaker(&_speakerML);
_stripManager.addSpeaker(&_speakerMText);
_stripManager.addSpeaker(&_speakerQText);
_stripManager.addSpeaker(&_speakerQL);
_stripManager.addSpeaker(&_speakerQR);
_stripManager.addSpeaker(&_speakerSR);
_stripManager.addSpeaker(&_speakerSL);
_stripManager.addSpeaker(&_speakerSAL);
_stripManager.addSpeaker(&_speakerSText);
_stripManager.addSpeaker(&_speakerGameText);
_speakerMText._npc = &_hotspot11;
_speakerQText._npc = &_globals->_player;
_hotspotPtr = &_hotspot10;
_hotspot6.postInit();
_hotspot6.setVisage(2321);
_hotspot6.setPosition(Common::Point(320, 67));
_hotspot7.postInit();
_hotspot7.setVisage(2344);
_hotspot7.setPosition(Common::Point(604, 92));
_hotspot13.postInit();
_hotspot13.setVisage(2323);
_hotspot13.setPosition(Common::Point(319, 157));
_hotspot13.fixPriority(1);
_hotspot12.postInit();
_hotspot12.setVisage(2321);
_hotspot12._strip = 4;
_hotspot12.animate(ANIM_MODE_8, 0, NULL);
_hotspot12.setPosition(Common::Point(412, 46));
if (RING_INVENTORY._waldos._sceneNumber == 2320) {
_hotspot8.postInit();
_hotspot8.setVisage(2345);
_hotspot8.setStrip(5);
_hotspot8.setFrame(8);
_hotspot8.setPosition(Common::Point(541, 103));
_hotspot8.fixPriority(201);
_globals->_sceneItems.push_back(&_hotspot8);
}
if (_globals->getFlag(43)) {
_hotspot11.postInit();
_hotspot11.setVisage(2705);
_hotspot11._strip = 3;
_hotspot11.setPosition(Common::Point(510, 156));
_globals->_sceneItems.push_back(&_hotspot11);
_hotspot11._state = 0;
_hotspot11.setAction(&_action1);
}
_globals->_player.postInit();
if (_globals->getFlag(13))
_globals->_player.setVisage(2170);
else
_globals->_player.setVisage(0);
_globals->_player.animate(ANIM_MODE_1, NULL);
_globals->_player.setObjectWrapper(new SceneObjectWrapper());
_globals->_player.setPosition(Common::Point(320, 79));
_globals->_player.fixPriority(10);
_globals->_player.changeZoom(-1);
_globals->_player._moveDiff.y = 3;
_globals->_player.disableControl();
if (_globals->getFlag(114)) {
_hotspot10.postInit();
_hotspot10.setVisage(2806);
_hotspot10.setPosition(Common::Point(481, 162));
_hotspot10.changeZoom(-1);
_hotspot10.setStrip(5);
_hotspot10._state = 0;
_globals->_sceneItems.push_back(&_hotspot10);
}
if (_globals->getFlag(70)) {
_hotspot11.postInit();
_hotspot11.setVisage(2705);
_hotspot11.setPosition(Common::Point(500, 164));
_hotspot10.postInit();
_hotspot10.setVisage(2806);
_hotspot10.setPosition(Common::Point(481, 162));
_hotspot10.changeZoom(-1);
_hotspot10.setStrip(5);
_globals->_sceneItems.addItems(&_hotspot11, &_hotspot10, NULL);
}
switch (_globals->_sceneManager._previousScene) {
case 2120:
_globals->_soundHandler.play(160);
_globals->_soundHandler.holdAt(true);
_globals->_player.fixPriority(-1);
_globals->_player.setPosition(Common::Point(389, 72));
_globals->_player.enableControl();
break;
case 4000:
if (!_globals->getFlag(36) && !_globals->getFlag(43)) {
_hotspot11.postInit();
_hotspot11.setVisage(2705);
_hotspot11.setPosition(Common::Point(178, 118));
_hotspot11.animate(ANIM_MODE_1, NULL);
}
// Deliberate fall-through
case 4250:
case 5000:
case 7000:
_globals->_soundHandler.play(160);
_globals->_soundHandler.holdAt(true);
if ((_globals->_sceneManager._previousScene == 7000) && !_globals->getFlag(80))
_globals->setFlag(36);
_globals->_player.disableControl();
_globals->_player.animate(ANIM_MODE_NONE, NULL);
_globals->_player.setObjectWrapper(NULL);
_globals->_player.setVisage(2347);
_globals->_player.setStrip(2);
_globals->_player.setFrame(5);
_globals->_player.fixPriority(137);
_globals->_player.setPosition(Common::Point(165, 132));
setAction(&_action6);
break;
case 6100:
_globals->_soundHandler.play(160);
_globals->_soundHandler.holdAt(true);
_hotspot8.postInit();
_hotspot8.setVisage(2345);
_hotspot8.setPosition(Common::Point(634, 65));
_hotspot8.hide();
_sceneMode = 2325;
setAction(&_sequenceManager1, this, 2325, &_globals->_player, &_hotspot6, &_hotspot8, &_hotspot7, NULL);
break;
case 7600:
_globals->_soundHandler.play(160);
_globals->_soundHandler.holdAt(true);
_soundHandler.play(21);
_globals->_player.setVisage(2323);
_globals->_player.setStrip(2);
_globals->_player.setFrame(_globals->_player.getFrameCount());
_globals->_player.setPosition(Common::Point(303, 176));
_globals->_player.fixPriority(-1);
_globals->_player.disableControl();
_hotspot13.setPosition(Common::Point(319, 199));
_hotspot16.postInit();
_hotspot16.setVisage(2331);
_hotspot16._strip = 3;
_hotspot16.fixPriority(160);
_hotspot16.setPosition(Common::Point(320, 202));
_hotspot16.hide();
_sceneMode = 2338;
setAction(&_sequenceManager1, this, 2338, &_globals->_player, &_hotspot16, &_hotspot13, NULL);
break;
default:
switch (_globals->_stripNum) {
case 2101:
_globals->_player.disableControl();
_globals->_player.setStrip(3);
_globals->_player.setPosition(Common::Point(307, 84));
_hotspot11.postInit();
_hotspot11.setVisage(2705);
_hotspot11._strip = 2;
_hotspot11.fixPriority(10);
_hotspot11.setPosition(Common::Point(322, 80));
_hotspot11.setObjectWrapper(new SceneObjectWrapper());
_hotspot11.animate(ANIM_MODE_1, NULL);
_hotspot10.postInit();
_hotspot10.setVisage(2806);
_hotspot10.setObjectWrapper(new SceneObjectWrapper());
_hotspot10.changeZoom(-1);
_hotspot10.fixPriority(10);
_hotspot10.setPosition(Common::Point(318, 89));
_hotspot10._strip = 3;
_hotspot10.animate(ANIM_MODE_1, NULL);
setAction(&_action7);
break;
case 6100:
_hotspot8.postInit();
_hotspot8.setVisage(2345);
_hotspot8.setPosition(Common::Point(634, 65));
_hotspot8.hide();
_sceneMode = 2325;
setAction(&_sequenceManager1, this, 2325, &_globals->_player, &_hotspot6, &_hotspot8, &_hotspot7, NULL);
break;
default:
_globals->_soundHandler.play(160);
_globals->_soundHandler.holdAt(true);
_sceneMode = 2321;
_globals->_player.setStrip(3);
setAction(&_sequenceManager1, this, 2321, &_globals->_player, &_hotspot6, NULL);
break;
}
}
_globals->_stripNum = 0;
_globals->_sceneManager._scene->_sceneBounds.center(_globals->_player._position);
loadScene(2320);
_hotspot14._sceneRegionId = 8;
_hotspot1.setBounds(Rect(0, 0, 640, 200));
_hotspot2.setBounds(Rect(278, 0, 362, 61));
_hotspot3.setBounds(Rect(282, 62, 367, 98));
_hotspot4.setBounds(Rect(67, 38, 112, 113));
_hotspot5.setBounds(Rect(104, 122, 174, 157));
_hotspot15.setBounds(Rect(191, 53, 205, 63));
_globals->_sceneItems.addItems(&_hotspot14, &_hotspot15, &_hotspot5, &_hotspot6, &_hotspot12,
&_hotspot13, &_hotspot4, &_hotspot3, &_hotspot2, &_hotspot1, NULL);
}
void Scene2320::synchronize(Serializer &s) {
Scene::synchronize(s);
SYNC_POINTER(_hotspotPtr);
}
void Scene2320::signal() {
switch (_sceneMode) {
case 2321:
case 2327:
case 2329:
if (_globals->getFlag(43) && !_hotspot11._action)
_hotspot11.setAction(&_action1);
_globals->_player.enableControl();
break;
case 2322:
_globals->_sceneManager.changeScene(2120);
break;
case 2323:
_globals->_player.disableControl();
break;
case 2338:
case 2324:
_hotspot16.remove();
_globals->_player.enableControl();
break;
case 2325:
_globals->setFlag(76);
_globals->clearFlag(70);
_globals->_stripNum = 6100;
_globals->_sceneManager.changeScene(2100);
break;
case 2326:
_globals->clearFlag(70);
RING_INVENTORY._nullifier._sceneNumber = 1;
_globals->_stripNum = 2321;
_globals->_sceneManager.changeScene(2100);
break;
case 2336:
_globals->setFlag(77);
RING_INVENTORY._waldos._sceneNumber = 1;
_hotspot8.remove();
break;
case 5000:
_globals->_player.enableControl();
break;
}
}
/*--------------------------------------------------------------------------
* Scene 2400 - Descending in Lander
*
*--------------------------------------------------------------------------*/
void Scene2400::Action1::signal() {
switch (_actionIndex++) {
case 0:
setDelay(60);
break;
case 1:
ADD_MOVER(_globals->_player, 160, 71);
break;
case 2:
ADD_MOVER(_globals->_player, 160, 360);
break;
case 3:
_globals->_player._moveDiff = Common::Point(1, 1);
ADD_MOVER(_globals->_player, 140, 375);
break;
case 4:
ADD_MOVER(_globals->_player, 87, 338);
break;
case 5:
_globals->_player.hide();
setDelay(60);
break;
case 6:
_globals->_sceneManager.changeScene(4000);
break;
}
}
void Scene2400::Action1::dispatch() {
Action::dispatch();
if ((_actionIndex == 4) && (_globals->_player._percent > 5))
_globals->_player.changeZoom(_globals->_player._percent - 2);
}
/*--------------------------------------------------------------------------*/
void Scene2400::postInit(SceneObjectList *OwnerList) {
loadScene(2400);
Scene::postInit();
setZoomPercents(0, 100, 200, 100);
_globals->_player.postInit();
_globals->_player.setVisage(2410);
_globals->_player.setPosition(Common::Point(340, -10));
_globals->_player.animate(ANIM_MODE_2, NULL);
_globals->_player.disableControl();
setAction(&_action1);
_globals->_sceneManager._scene->_sceneBounds.center(_globals->_player._position.x, _globals->_player._position.y);
_globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds);
_globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
_globals->_soundHandler.play(153);
}
} // End of namespace tSage