/* 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->getEventManager()->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->getEventManager()->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::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::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->getEventManager()->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