/* 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/blue_force/blueforce_scenes1.h" #include "tsage/scenes.h" #include "tsage/tsage.h" #include "tsage/staticres.h" #include "tsage/globals.h" namespace TsAGE { namespace BlueForce { /*-------------------------------------------------------------------------- * Scene 100 - Tsunami Title Screen #2 * *--------------------------------------------------------------------------*/ void Scene100::Text::dispatch() { SceneText::dispatch(); // Keep the second text string below the first one Scene100 *scene = (Scene100 *)BF_GLOBALS._sceneManager._scene; Common::Point &pt = scene->_action1._sceneText1._position; scene->_action1._sceneText2.setPosition(Common::Point(pt.x, pt.y + scene->_action1._textHeight)); } void Scene100::Action1::signal() { static byte black[3] = { 0, 0, 0 }; switch (_actionIndex++) { case 0: _state = 0; setDelay(6); break; case 1: { Common::String msg1 = g_resourceManager->getMessage(100, _state++); if (msg1.compareTo("LASTCREDIT")) { Common::String msg2 = g_resourceManager->getMessage(100, _state++); setTextStrings(msg1, msg2, this); --_actionIndex; } else { setTextStrings(BF_NAME, BF_ALL_RIGHTS_RESERVED, this); Common::Point pt(_sceneText1._position.x, 80); NpcMover *mover = new NpcMover(); _sceneText1.addMover(mover, &pt, this); } break; } case 2: setDelay(600); break; case 3: BF_GLOBALS._sound1.fade(0, 10, 10, 1, this); GLOBALS._scenePalette.addFader(black, 1, 2, NULL); break; case 4: error("??exit"); break; } } void Scene100::Action1::setTextStrings(const Common::String &msg1, const Common::String &msg2, Action *action) { // Set data for first text control _sceneText1._fontNumber = 10; _sceneText1._width = 160; _sceneText1._textMode = ALIGN_RIGHT; _sceneText1._color1 = BF_GLOBALS._scenePalette._colors.foreground; _sceneText1._color2 = BF_GLOBALS._scenePalette._colors.background; _sceneText1._color3 = BF_GLOBALS._scenePalette._colors.foreground; _sceneText1.setup(msg1); _sceneText1.fixPriority(255); _sceneText1.setPosition(Common::Point( (SCREEN_WIDTH - _sceneText1.getFrame().getBounds().width()) / 2, 202)); _sceneText1._moveRate = 30; _sceneText1._moveDiff.y = 1; // Set data for second text control _sceneText2._fontNumber = 10; _sceneText2._width = _sceneText1._width; _sceneText2._textMode = _sceneText1._textMode; _sceneText2._color1 = _sceneText1._color1; _sceneText2._color2 = 31; _sceneText2._color3 = _sceneText1._color3; _sceneText2.setup(msg2); _sceneText2.fixPriority(255); GfxSurface textSurface = _sceneText2.getFrame(); _sceneText2.setPosition(Common::Point((SCREEN_WIDTH - textSurface.getBounds().width()) / 2, 202)); _sceneText2._moveRate = 30; _sceneText2._moveDiff.y = 1; _textHeight = textSurface.getBounds().height(); int yp = -(_textHeight * 2); Common::Point pt(_sceneText1._position.x, yp); NpcMover *mover = new NpcMover(); _sceneText1.addMover(mover, &pt, action); } void Scene100::Action2::signal() { Scene100 *scene = (Scene100 *)g_globals->_sceneManager._scene; static byte black[3] = {0, 0, 0}; switch (_actionIndex++) { case 0: BF_GLOBALS._scenePalette.addFader(black, 1, -2, this); break; case 1: setDelay(180); break; case 2: { const char *SEEN_INTRO = "seen_intro"; if (!ConfMan.hasKey(SEEN_INTRO) || !ConfMan.getBool(SEEN_INTRO)) { // First time being played, so will need to show the intro ConfMan.setBool(SEEN_INTRO, true); ConfMan.flushToDisk(); } else { // Prompt user for whether to start play or watch introduction g_globals->_player.enableControl(); g_globals->_events.setCursor(CURSOR_WALK); if (MessageDialog::show2(WATCH_INTRO_MSG, START_PLAY_BTN_STRING, INTRODUCTION_BTN_STRING) == 0) { // Signal to start the game scene->_index = 190; remove(); return; } } // At this point the introduction needs to start g_globals->_scenePalette.addFader(black, 1, 2, this); break; } case 3: remove(); break; } } /*--------------------------------------------------------------------------*/ Scene100::Scene100(): SceneExt() { _index = 0; } void Scene100::postInit(SceneObjectList *OwnerList) { SceneExt::postInit(); if (BF_GLOBALS._dayNumber < 6) { // Title loadScene(100); } else { // Credits loadScene(101); } BF_GLOBALS._scenePalette.loadPalette(2); BF_GLOBALS._v51C44 = 1; BF_GLOBALS._interfaceY = SCREEN_HEIGHT; g_globals->_player.postInit(); g_globals->_player.hide(); g_globals->_player.disableControl(); _index = 109; if (BF_GLOBALS._dayNumber < 6) { // Title BF_GLOBALS._sound1.play(2); setAction(&_action2, this); } else { // Credits BF_GLOBALS._sound1.play(118); setAction(&_action1, this); } } void Scene100::signal() { ++_sceneMode; if (BF_GLOBALS._dayNumber < 6) { BF_GLOBALS._scenePalette.clearListeners(); BF_GLOBALS._scenePalette.loadPalette(100); BF_GLOBALS._sceneManager.changeScene(_index); } else { if (_sceneMode > 1) BF_GLOBALS._events.setCursor(CURSOR_ARROW); setAction(this, &_action1, this); } } /*-------------------------------------------------------------------------- * Scene 109 - Introduction Bar Room * *--------------------------------------------------------------------------*/ void Scene109::Action1::signal() { Scene109 *scene = (Scene109 *)BF_GLOBALS._sceneManager._scene; switch (_actionIndex++) { case 0: setDelay(30); break; case 1: BF_GLOBALS._sound1.play(12); BF_GLOBALS._sceneObjects->draw(); BF_GLOBALS._scenePalette.loadPalette(2); BF_GLOBALS._scenePalette.refresh(); setDelay(10); break; case 2: scene->_text.setup(BF_19840515, this); break; case 3: BF_GLOBALS._v51C44 = 1; scene->loadScene(115); scene->_protaginist2.show(); scene->_protaginist2.setPriority(133); scene->_protaginist1.show(); scene->_bartender.show(); scene->_object1.show(); scene->_drunk.show(); scene->_drunk.setAction(&scene->_action3); scene->_object2.show(); scene->_beerSign.show(); scene->_beerSign.setAction(&scene->_action2); BF_GLOBALS._v501FC = 170; setDelay(60); break; case 4: // Start drinking scene->_bartender.setAction(&scene->_sequenceManager4, NULL, 109, &scene->_bartender, &scene->_object2, NULL); scene->_protaginist1.setAction(&scene->_sequenceManager5, NULL, 107, &scene->_protaginist1, NULL); scene->_protaginist2.setAction(&scene->_sequenceManager6, this, 106, &scene->_protaginist2, NULL); break; case 5: // Open briefcase and pass over disk setAction(&scene->_sequenceManager6, this, 105, &scene->_animationInset, NULL); break; case 6: // Protaginist 2 walk to the bar scene->_animationInset.remove(); setAction(&scene->_sequenceManager6, this, 100, &scene->_protaginist2, NULL); break; case 7: // Two thugs enter and walk to table scene->_cop2.setAction(&scene->_sequenceManager7, NULL, 103, &scene->_cop2, NULL); scene->_cop1.setAction(&scene->_sequenceManager8, this, 102, &scene->_cop1, NULL); scene->_protaginist2.setAction(&scene->_sequenceManager6, NULL, 104, &scene->_protaginist2, &scene->_bartender, NULL); break; case 8: // Protaginist 1 leaves, protaginist 2 stands up setAction(&scene->_sequenceManager8, this, 101, &scene->_cop1, &scene->_protaginist1, NULL); break; case 9: // Shots fired! scene->_protaginist1.setAction(&scene->_sequenceManager5, this, 98, &scene->_protaginist1, NULL); scene->_cop2.setAction(&scene->_sequenceManager7, NULL, 99, &scene->_cop2, NULL); break; case 10: // End scene scene->_sceneMode = 1; remove(); break; } } void Scene109::Action2::signal() { Scene109 *scene = (Scene109 *)BF_GLOBALS._sceneManager._scene; setAction(&scene->_sequenceManager2, this, 3117, &scene->_beerSign, NULL); } void Scene109::Action3::signal() { Scene109 *scene = (Scene109 *)BF_GLOBALS._sceneManager._scene; setAction(&scene->_sequenceManager3, this, 108, &scene->_drunk, NULL); } /*--------------------------------------------------------------------------*/ Scene109::Scene109(): PalettedScene() { } void Scene109::postInit(SceneObjectList *OwnerList) { PalettedScene::postInit(OwnerList); loadScene(999); _protaginist2.postInit(); _protaginist2.setVisage(119); _protaginist2.setFrame(11); _protaginist2.fixPriority(133); _protaginist2.setPosition(Common::Point(165, 124)); _protaginist2.hide(); _protaginist1.postInit(); _protaginist1.setVisage(118); _protaginist1.setStrip(1); _protaginist1.setFrame(8); _protaginist1.fixPriority(132); _protaginist1.setPosition(Common::Point(143, 125)); _protaginist1.hide(); _bartender.postInit(); _bartender.setVisage(121); _bartender.setStrip(2); _bartender.setFrame(1); _bartender.setPriority(-1); _bartender.setPosition(Common::Point(92, 64)); _bartender.hide(); _object1.postInit(); _object1.setVisage(121); _object1.setStrip(6); _object1.setFrame(1); _object1.setPriority(-1); _object1.setPosition(Common::Point(110, 64)); _object1.hide(); _drunk.postInit(); _drunk.setVisage(120); _drunk.setStrip(2); _drunk.setFrame(5); _drunk.setPriority(-1); _drunk.setPosition(Common::Point(127, 97)); _drunk.hide(); _object2.postInit(); _object2.setVisage(121); _object2.setStrip(5); _object2.setFrame(1); _object2.setPriority(-1); _object2.setPosition(Common::Point(104, 64)); _object2.hide(); _beerSign.postInit(); _beerSign.setVisage(115); _beerSign.setStrip(4); _beerSign.setFrame(1); _beerSign.setPosition(Common::Point(262, 29)); _beerSign.hide(); _cop1.postInit(); _cop1.hide(); _cop2.postInit(); _cop2.hide(); _animationInset.postInit(); _animationInset.hide(); BF_GLOBALS._player.disableControl(); setAction(&_action1, this); } void Scene109::signal() { if (_sceneMode == 1) { BF_GLOBALS._scenePalette.clearListeners(); BF_GLOBALS._sceneManager.changeScene(110); } } /*-------------------------------------------------------------------------- * Scene 110 - Intro - Outside the bar * *--------------------------------------------------------------------------*/ void Scene110::Action1::signal() { Scene110 *scene = (Scene110 *)BF_GLOBALS._sceneManager._scene; switch (_actionIndex++) { case 0: setDelay(5); break; case 1: scene->_object8.show(); scene->_object7.show(); scene->_object1.show(); scene->_object4.show(); scene->_object5.show(); scene->_object6.show(); scene->_object9.show(); scene->_object10.show(); BF_GLOBALS._v51C44 = 1; scene->loadScene(110); setDelay(10); break; case 2: BF_GLOBALS._v51C44 = 1; scene->_object1.animate(ANIM_MODE_5, this); break; case 3: { Common::Point pt(123, 121); NpcMover *mover = new NpcMover(); scene->_object4.addMover(mover, &pt, this); } // No break on purpose case 7: setDelay(30); break; case 4: // Guy running to the moto scene->_object1.animate(ANIM_MODE_6, NULL); break; case 5: scene->_object4.setStrip(2); scene->_object4.setPosition(Common::Point(117, 106)); scene->_object4.animate(ANIM_MODE_5, this); break; case 6: // Play "Vroum" scene->_sound.play(31); // The guy starts the engine scene->_object4.setStrip(3); scene->_object4._frame = 1; scene->_object4.animate(ANIM_MODE_5, NULL); // The guy looks behind him scene->_object2.setPosition(Common::Point(227, 190)); scene->_object2.animate(ANIM_MODE_5, this); break; case 8: scene->_object2.animate(ANIM_MODE_6, this); break; case 9: scene->_object2.remove(); scene->_object4.remove(); scene->_object5.setStrip(4); scene->_object5.setFrame2(5); scene->_object5.setPosition(Common::Point(105, 120)); setDelay(10); scene->_object6.setPosition(Common::Point(127, 96)); scene->_object6.animate(ANIM_MODE_2, NULL); scene->_object6.setAction(&scene->_action2); scene->_sound.play(22); break; case 10: scene->_object8.setAction(&scene->_action4); scene->_object5.setFrame2(3); scene->_object5.setPosition(Common::Point(87, 120)); setDelay(8); break; case 11: scene->_object5.setFrame2(4); scene->_object5.setPosition(Common::Point(62, 122)); setDelay(6); break; case 12: scene->_object5.setFrame2(5); scene->_object5.setPosition(Common::Point(35, 120)); scene->_object5.fixPriority(70); setDelay(4); break; case 13: scene->_object5.setFrame2(6); scene->_object5.setPosition(Common::Point(22, 111)); setDelay(2); break; case 14: scene->_object5.setFrame2(7); scene->_object5.setPosition(Common::Point(19, 99)); setDelay(2); break; case 15: scene->_object5.setFrame2(8); scene->_object5.setPosition(Common::Point(54, 76)); setDelay(1); break; case 16: { Common::Point pt(182, 54); NpcMover *mover = new NpcMover(); scene->_object5.addMover(mover, &pt, this); } break; case 17: scene->_object5.remove(); break; default: break; } } void Scene110::Action2::signal() { Scene110 *scene = (Scene110 *)BF_GLOBALS._sceneManager._scene; switch (_actionIndex++) { case 0: { Common::Point pt(152, 94); NpcMover *mover = new NpcMover(); scene->_object6.addMover(mover, &pt, this); } break; case 1: { Common::Point pt(167, 108); NpcMover *mover = new NpcMover(); scene->_object6.addMover(mover, &pt, this); } break; case 2: { Common::Point pt(172, 109); NpcMover *mover = new NpcMover(); scene->_object6.addMover(mover, &pt, this); } break; case 3: { Common::Point pt(179, 117); NpcMover *mover = new NpcMover(); scene->_object6.addMover(mover, &pt, this); } break; case 4: setDelay(30); break; case 5: scene->_object6.animate(ANIM_MODE_NONE, NULL); break; default: break; } } void Scene110::Action3::signal() { Scene110 *scene = (Scene110 *)BF_GLOBALS._sceneManager._scene; switch (_actionIndex++) { case 0: setDelay(3); break; case 1: scene->_object7.setPosition(scene->_object7._position); scene->_object1.setFrame(2); setDelay(1); break; case 2: scene->_object1.setFrame(3); setDelay(1); break; case 3: scene->_object1.setFrame(4); scene->_object7.animate(ANIM_MODE_5, this); break; case 4: { scene->_object1.animate(ANIM_MODE_6, NULL); scene->_object7.setPosition(Common::Point(205, 99)); scene->_object7.setStrip(2); scene->_object7.animate(ANIM_MODE_1, NULL); scene->_object7.changeZoom(90); Common::Point pt(151, 88); NpcMover *mover = new NpcMover(); scene->_object7.addMover(mover, &pt, this); } break; case 5: scene->_object7.fixPriority(76); scene->_object7.setStrip(3); scene->_object7.changeZoom(90); scene->_object7.setFrame(1); scene->_object7.animate(ANIM_MODE_5, this); scene->_object10.animate(ANIM_MODE_5, NULL); break; case 6: scene->_object7.fixPriority(73); scene->_object10.animate(ANIM_MODE_6, this); break; case 7: { scene->_object7._yDiff = 1000; scene->_object10.remove(); scene->_object9.setFrame2(2); Common::Point pt(230, 53); NpcMover *mover = new NpcMover(); scene->_object9.addMover(mover, &pt, this); scene->_sound.play(23); } break; case 8: scene->_object9.remove(); BF_GLOBALS._sceneManager.changeScene(125); break; default: break; } } void Scene110::Action3::dispatch() { Scene110 *scene = (Scene110 *)BF_GLOBALS._sceneManager._scene; Action::dispatch(); if ((_actionIndex == 5) && (scene->_object7._percent > 80)) scene->_object7.changeZoom(scene->_object7._percent - 1); } void Scene110::Action4::signal() { Scene110 *scene = (Scene110 *)BF_GLOBALS._sceneManager._scene; switch (_actionIndex++) { case 0: scene->_object8.setPosition(scene->_object8._position); scene->_object1.setFrame(2); setDelay(1); break; case 1: scene->_object1.setFrame(3); setDelay(1); break; case 2: { scene->_object1.setFrame(4); scene->_object8.fixPriority(90); Common::Point pt(194, 119); NpcMover *mover = new NpcMover(); scene->_object8.addMover(mover, &pt, this); } break; case 3: scene->_object1.animate(ANIM_MODE_6, NULL); scene->_object8.setPosition(Common::Point(186, 117)); scene->_object8.setStrip(2); scene->_object8.setFrame(1); scene->_object3.setPosition(scene->_object3._position); scene->_object3.setFrame(1); setDelay(7); break; case 4: scene->_object8.setFrame2(2); scene->_object3.setFrame(3); setDelay(7); break; case 5: scene->_object8.setFrame2(3); scene->_object3.setFrame(3); setDelay(7); scene->_object6.remove(); break; case 6: scene->_object8.setFrame2(4); scene->_object3.setFrame(4); setDelay(7); break; case 7: scene->_object8.setFrame2(5); scene->_object3.setFrame(5); setDelay(7); break; case 8: scene->_object8.setFrame2(7); scene->_object3.setFrame(6); setDelay(30); break; case 9: { scene->_object3.remove(); scene->_object8.setFrame2(-1); scene->_object8.setPosition(Common::Point(176, 105)); scene->_object8.animate(ANIM_MODE_1, NULL); scene->_object8.setStrip(3); Common::Point pt(141, 94); NpcMover *mover = new NpcMover(); scene->_object8.addMover(mover, &pt, this); scene->_object7.setAction(&scene->_action3); } break; case 10: { scene->_object8.fixPriority(77); Common::Point pt(78, 76); NpcMover *mover = new NpcMover(); scene->_object8.addMover(mover, &pt, this); } break; case 11: { scene->_object8.setPosition(Common::Point(87, 76)); scene->_object8.fixPriority(71); scene->_object8.setStrip(6); scene->_object8.changeZoom(75); Common::Point pt(103, 74); NpcMover *mover = new NpcMover(); scene->_object8.addMover(mover, &pt, this); } break; case 12: scene->_object8.setPosition(Common::Point(119, 59)); scene->_object8.setStrip(5); scene->_object8.changeZoom(100); scene->_object8.animate(ANIM_MODE_5, this); break; case 13: scene->_object8.setPosition(Common::Point(119, 59), 300); break; default: break; } } void Scene110::Action4::dispatch() { Scene110 *scene = (Scene110 *)BF_GLOBALS._sceneManager._scene; Action::dispatch(); if ((_actionIndex > 9) && (_actionIndex < 12) && (scene->_object8._percent > 80)) scene->_object8.changeZoom(scene->_object8._percent - 1); } void Scene110::Action5::signal() { Scene110 *scene = (Scene110 *)BF_GLOBALS._sceneManager._scene; switch (_actionIndex++) { case 0: scene->_object3.setPosition(scene->_object3._position); scene->_object3.animate(ANIM_MODE_5, this); break; case 1: scene->_object3.remove(); break; default: break; } } void Scene110::postInit(SceneObjectList *OwnerList) { SceneExt::postInit(); loadScene(999); _object8.postInit(); _object8.setVisage(112); _object8.setPosition(Common::Point(239, 98), 300); _object8.setFrame(1); _object8.setStrip(1); _object8.changeZoom(90); _object8.fixPriority(90); _object8.animate(ANIM_MODE_1, NULL); _object8._moveDiff.x = 7; _object8._moveDiff.y = 3; _object8.hide(); _object3.postInit(); _object3.setVisage(112); _object3.setPosition(Common::Point(247, 190), 300); _object3.setFrame(1); _object3.setStrip(4); _object3.changeZoom(100); _object3.fixPriority(255); _object7.postInit(); _object7.setVisage(113); _object7.setPosition(Common::Point(236, 86), 300); _object7._frame = 1; _object7.setStrip(1); _object7.changeZoom(110); _object7.fixPriority(89); _object7._moveDiff.x = 7; _object7._moveDiff.y = 3; _object7.hide(); _object1.postInit(); _object1.setVisage(110); _object1.setPosition(Common::Point(216, 88), 0); _object1._frame = 1; _object1.setStrip(1); _object1.changeZoom(100); _object1.fixPriority(83); _object1.hide(); _object2.postInit(); _object2.setVisage(111); _object2.setPosition(Common::Point(527, 190), 0); _object2._frame = 1; _object2.fixPriority(250); _object2.setStrip(5); _object2.changeZoom(100); _object4.postInit(); _object4.setVisage(111); _object4.setPosition(Common::Point(253, 98), 0); _object4._frame = 1; _object4.setStrip(1); _object4.changeZoom(100); _object4.fixPriority(90); _object4.animate(ANIM_MODE_1, NULL); _object4._moveDiff.x = 10; _object4._moveDiff.y = 10; _object4.hide(); _object5.postInit(); _object5.setVisage(111); _object5.setPosition(Common::Point(114, 119), 0); _object5.setFrame2(1); _object5.setStrip(7); _object5.fixPriority(70); _object5.changeZoom(100); _object5._moveDiff.x = 20; _object5._moveDiff.y = 20; _object5.hide(); _object6.postInit(); _object6.setVisage(111); _object6.setPosition(Common::Point(527, 96), 0); _object6._frame = 1; _object6.setStrip(6); _object6.changeZoom(100); _object6.fixPriority(238); _object6._moveDiff.x = 10; _object6._moveDiff.y = 10; _object6.hide(); _object9.postInit(); _object9.setVisage(110); _object9.setPosition(Common::Point(148, 69), 0); _object9._frame = 1; _object9.setStrip(2); _object9.changeZoom(100); _object9.fixPriority(72); _object9._moveDiff.x = 10; _object9._moveDiff.y = 10; _object9.hide(); _object10.postInit(); _object10.setVisage(110); _object10._frame = 1; _object10.setStrip(3); _object10.changeZoom(100); _object10.fixPriority(74); _object10._moveDiff.x = 10; _object10._moveDiff.y = 10; _object10.setPosition(_object9._position); _object10.hide(); setAction(&_action1); } /*-------------------------------------------------------------------------- * Scene 114 - Outside the Bar * *--------------------------------------------------------------------------*/ bool Scene114::Vechile::startAction(CursorType action, Event &event) { Scene114 *scene = (Scene114 *)BF_GLOBALS._sceneManager._scene; switch (action) { case CURSOR_LOOK: SceneItem::display2(114, 0); return true; case CURSOR_USE: BF_GLOBALS._player.disableControl(); scene->_sceneMode = 1142; if (BF_GLOBALS.getFlag(fWithLyle)) { scene->_lyle.fixPriority(-1); scene->setAction(&scene->_sequenceManager1, scene, 1142, &BF_GLOBALS._player, &scene->_lyle, NULL); } else { Common::Point pt(155, 111); PlayerMover *mover = new PlayerMover(); BF_GLOBALS._player.addMover(mover, &pt, scene); } return true; default: return NamedObject::startAction(action, event); } } bool Scene114::Door::startAction(CursorType action, Event &event) { Scene114 *scene = (Scene114 *)BF_GLOBALS._sceneManager._scene; switch (action) { case CURSOR_LOOK: SceneItem::display2(114, 1); return true; case CURSOR_USE: BF_GLOBALS._walkRegions.enableRegion(2); BF_GLOBALS._player.disableControl(); scene->_lyle.fixPriority(-1); scene->_sceneMode = 1140; scene->setAction(&scene->_sequenceManager1, scene, 1140, &BF_GLOBALS._player, this, &scene->_lyle, NULL); return true; default: return NamedObject::startAction(action, event); } } void Scene114::postInit(SceneObjectList *OwnerList) { SceneExt::postInit(); BF_GLOBALS._sound1.fadeSound(33); loadScene(110); setZoomPercents(85, 80, 105, 100); BF_GLOBALS._walkRegions.disableRegion(9); BF_GLOBALS._walkRegions.disableRegion(22); _door.postInit(); _door.setVisage(110); _door.setPosition(Common::Point(216, 88)); BF_GLOBALS._sceneItems.push_front(&_door); BF_GLOBALS._player.postInit(); BF_GLOBALS._player.setVisage(1358); BF_GLOBALS._player.animate(ANIM_MODE_1, NULL); BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper()); BF_GLOBALS._player.setPosition(Common::Point(155, 111)); BF_GLOBALS._player._moveDiff.x = 3; BF_GLOBALS._player._moveDiff.y = 2; BF_GLOBALS._player.changeZoom(-1); _lyle.postInit(); _lyle.setVisage(1359); _lyle.setObjectWrapper(new SceneObjectWrapper()); _lyle.animate(ANIM_MODE_1, NULL); _lyle.setPosition(Common::Point(-118, -146)); _lyle.changeZoom(-1); _lyle._moveDiff.x = 2; _lyle._moveDiff.y = 1; _lyle.hide(); _lyle.setDetails(114, 2, -1, -1, 1, (SceneItem *)NULL); _vechile.postInit(); if (BF_GLOBALS.getFlag(fWithLyle)) { _vechile.setVisage(444); _vechile.setPosition(Common::Point(127, 78)); _vechile.fixPriority(20); BF_GLOBALS._player.setPosition(Common::Point(139, 79)); _lyle.setPosition(Common::Point(86, 79)); _lyle.show(); } else { _vechile.setVisage(380); _vechile.setPosition(Common::Point(128, 125)); _vechile.setFrame(1); if (BF_GLOBALS.getFlag(onDuty)) { _vechile.setStrip(2); _vechile.changeZoom(70); BF_GLOBALS._player.setVisage(352); } else { _vechile.setStrip(1); _vechile.changeZoom(77); } BF_GLOBALS._walkRegions.disableRegion(17); } BF_GLOBALS._sceneItems.push_front(&_vechile); BF_GLOBALS._walkRegions.disableRegion(2); if (BF_GLOBALS._sceneManager._previousScene == 115) { BF_GLOBALS._player.setPosition(Common::Point(219, 100)); BF_GLOBALS._player.setStrip(6); _lyle.setPosition(Common::Point(253, 110)); _lyle.fixPriority(108); _lyle.setStrip(6); BF_GLOBALS._player.enableControl(); } else if (BF_GLOBALS.getFlag(fWithLyle)) { _sceneMode = 1141; setAction(&_sequenceManager1, this, 1141, &_lyle, NULL); } else { BF_GLOBALS._player.enableControl(); } _item1.setDetails(Rect(0, 0, 320, 200), 114, 3, -1, -1, 1, (SceneItem *)NULL); } void Scene114::signal() { switch (_sceneMode) { case 1140: BF_GLOBALS._sceneManager.changeScene(115); break; case 1141: BF_GLOBALS._player.enableControl(); break; case 1142: BF_GLOBALS._sceneManager.changeScene(60); break; default: break; } } /*-------------------------------------------------------------------------- * Scene 115 - Inside Tony's bar * *--------------------------------------------------------------------------*/ bool Scene115::Kate::startAction(CursorType action, Event &event) { Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene; switch (action) { case CURSOR_LOOK: SceneItem::display(115, 8, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); return true; case CURSOR_TALK: if (BF_INVENTORY.getObjectScene(INV_NAPKIN) == 1) { BF_GLOBALS._player.disableControl(); scene->_sceneMode = 0; scene->_stripManager.start(1174, scene); } else if (scene->_jukeboxPlaying == 0) { if (BF_GLOBALS.getFlag(fShowedIdToKate)) { BF_GLOBALS._player.disableControl(); scene->_sceneMode = 0; scene->_stripManager.start(1159, scene); } else { scene->_sceneMode = 1167; scene->setAction(&scene->_action6); } } else scene->setAction(&scene->_action7); return true; case INV_MUG_SHOT: if (scene->_jukeboxPlaying == 0) { BF_GLOBALS._player.disableControl(); scene->_sceneMode = 0; if (BF_GLOBALS._tonyDialogCtr == 0) scene->_stripManager.start(1167, scene); else if (BF_GLOBALS.getFlag(fShowedIdToKate)) scene->_stripManager.start(1159, scene); else if (BF_GLOBALS.getFlag(fMugOnKate)) scene->_stripManager.start(1159, scene); else { scene->_sceneMode = 9999; scene->setAction(&scene->_action6); } } else SceneItem::display(115, 44, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); return true; case INV_ID: if (scene->_jukeboxPlaying == 0) { if (BF_GLOBALS._tonyDialogCtr == 0) { scene->_sceneMode = 1167; scene->setAction(&scene->_action6); } else if (BF_GLOBALS.getFlag(fShowedIdToKate)) { BF_GLOBALS._player.disableControl(); scene->_sceneMode = 0; scene->_stripManager.start(1159, scene); } else { BF_GLOBALS.setFlag(fShowedIdToKate); scene->setAction(&scene->_action8); } } else SceneItem::display(115, 44, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); return true; default: return NamedObject::startAction(action, event); } } bool Scene115::Tony::startAction(CursorType action, Event &event) { Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene; switch (action) { case CURSOR_LOOK: SceneItem::display(115, 7, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); return true; case CURSOR_TALK: if (BF_GLOBALS._dayNumber == 3) { if (BF_INVENTORY.getObjectScene(INV_NAPKIN) == 1) scene->_sceneMode = 1173; else if (BF_INVENTORY.getObjectScene(INV_COBB_RAP) == 1) { if (BF_GLOBALS.getFlag(fTalkedToTony)) scene->_sceneMode = 1151; else if (BF_GLOBALS._tonyDialogCtr == 0) { scene->_sceneMode = 1150; BF_GLOBALS.setFlag(fTalkedToTony); } else scene->_sceneMode = 1151; } else if (_talkToTonyCtr2 == 0) { _talkToTonyCtr2++; scene->_sceneMode = 1171; } else scene->_sceneMode = 1172; } else if (BF_GLOBALS.getFlag(onDuty)) { if (scene->_talkToTonyCtr == 0) { scene->_talkToTonyCtr = 1; scene->_sceneMode = 1169; } else scene->_sceneMode = 1170; } else if (scene->_talkToTonyCtr == 0) { scene->_sceneMode = 1171; scene->_talkToTonyCtr = 1; } else scene->_sceneMode = 1172; scene->setAction(&scene->_action9); return true; case INV_FOREST_RAP: if (BF_GLOBALS.getFlag(onDuty)) scene->_sceneMode = 1178; else scene->_sceneMode = 1180; scene->setAction(&scene->_action9); return true; case INV_COBB_RAP: if (BF_GLOBALS.getFlag(onDuty)) scene->_sceneMode = 1177; else if (BF_GLOBALS._tonyDialogCtr == 0) scene->_sceneMode = 1179; else scene->_sceneMode = 1154; scene->setAction(&scene->_action9); return true; case INV_MUG_SHOT: scene->setAction(&scene->_action2); return true; case INV_ID: if (BF_INVENTORY.getObjectScene(INV_NAPKIN) == 1) { scene->_sceneMode = 1173; scene->setAction(&scene->_action9); } else if (BF_INVENTORY.getObjectScene(INV_COBB_RAP) == 1) { if (BF_GLOBALS.getFlag(fTalkedToTony)) { scene->_sceneMode = 1151; scene->setAction(&scene->_action9); } else { T2_GLOBALS._uiElements.addScore(30); BF_GLOBALS.setFlag(fTalkedToTony); if (BF_GLOBALS._tonyDialogCtr == 0) { scene->_sceneMode = 1150; scene->setAction(&scene->_action9); } else { BF_GLOBALS._tonyDialogCtr = 1; scene->setAction(&scene->_action2); } } } else if (_talkToTonyCtr2 == 0) { _talkToTonyCtr2++; if (BF_GLOBALS.getFlag(onDuty)) { scene->_sceneMode = 1182; scene->setAction(&scene->_action9); } else { scene->_sceneMode = 1171; scene->setAction(&scene->_action9); } } else if (BF_GLOBALS.getFlag(onDuty)) { scene->_sceneMode = 1183; scene->setAction(&scene->_action9); } else { scene->_sceneMode = 1172; scene->setAction(&scene->_action9); } return true; default: return NamedObject::startAction(action, event); } } bool Scene115::Object3::startAction(CursorType action, Event &event) { Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene; switch (action) { case CURSOR_LOOK: SceneItem::display(115, 9, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); return true; case CURSOR_USE: SceneItem::display(115, 23, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); return true; case CURSOR_TALK: { BF_GLOBALS._player.disableControl(); scene->_sceneMode = 1; Common::Point pt(160, 110); PlayerMover *mover = new PlayerMover(); BF_GLOBALS._player.addMover(mover, &pt, scene); return true; } default: return NamedObject::startAction(action, event); } } bool Scene115::Object4::startAction(CursorType action, Event &event) { Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene; switch (action) { case CURSOR_LOOK: SceneItem::display(115, 42, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); return true; case CURSOR_TALK: scene->_sceneMode = 0; BF_GLOBALS._player.disableControl(); BF_GLOBALS._player.updateAngle(_position); scene->_stripManager.start(1184, scene); return true; default: return NamedObject::startAction(action, event); } } void Scene115::Jukebox::signal() { Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene; if (_jokeboxPlayingCtr == 2) _jokeboxPlayingCtr = 0; else if (_jokeboxPlayingCtr == 1) { _jokeboxPlayingCtr = 2; setAction(&_sequenceManager6, this, 118, &scene->_object12, &scene->_object11, NULL); } } bool Scene115::Jukebox::startAction(CursorType action, Event &event) { Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene; if (action == CURSOR_USE) { if (_jokeboxPlayingCtr == 0) { _jokeboxPlayingCtr = 1; BF_GLOBALS._player.disableControl(); scene->setAction(&scene->_action4); } else SceneItem::display(_resNum, 37, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); return true; } else return NamedHotspot::startAction(action, event); } void Scene115::Jukebox::synchronize(Serializer &s) { NamedHotspot::synchronize(s); s.syncAsSint16LE(_jokeboxPlayingCtr); } Scene115::Jukebox::Jukebox() { _jokeboxPlayingCtr = 0; } void Scene115::EventHandler1::dispatch() { Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene; if (BF_GLOBALS._player.getRegionIndex() == 27) { scene->_kate.setAction(&scene->_action5); scene->removeTimer(this); } } bool Scene115::Item10::startAction(CursorType action, Event &event) { Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene; if (BF_GLOBALS.getFlag(fWithLyle)) { scene->_object4.setStrip2(6); Common::Point pt(-20, 122); NpcMover *mover = new NpcMover(); scene->_object4.addMover(mover, &pt, NULL); } BF_GLOBALS._player.disableControl(); scene->_sceneMode = 1150; scene->setAction(&scene->_sequenceManager1, scene, 1150, &BF_GLOBALS._player, NULL); return true; } bool Scene115::Item14::startAction(CursorType action, Event &event) { Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene; switch (action) { case CURSOR_LOOK: SceneItem::display(115, 10, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); return true; case CURSOR_USE: if (BF_GLOBALS._sceneObjects->contains(&scene->_object3)) SceneItem::display(115, 23, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); else SceneItem::display(115, 43, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); return true; default: return SceneHotspot::startAction(action, event); } } void Scene115::Action1::signal() { Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene; switch (_actionIndex++) { case 0: setDelay(30); break; case 1: _actionIndex = 2 + BF_GLOBALS._randomSource.getRandomNumber(1); setDelay(BF_GLOBALS._randomSource.getRandomNumber(180)); break; case 2: _actionIndex = 1; setAction(&scene->_sequenceManager2, this, 115, &scene->_object3, &scene->_object8, &scene->_object9, &scene->_object10, NULL); break; case 3: _actionIndex = 1; setAction(&scene->_sequenceManager2, this, 116, &scene->_object3, &scene->_object8, &scene->_object9, &scene->_object10, NULL); break; default: break; } } void Scene115::Action2::signal() { Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene; switch (_actionIndex++) { case 0: BF_GLOBALS._player.disableControl(); if (BF_GLOBALS._tonyDialogCtr < 3) { if (scene->_tony._position.x > 67) { scene->_tony.setAction(&scene->_sequenceManager3, NULL, 1118, &scene->_tony, NULL); } else if (scene->_tony._position.x != 67) { scene->_tony.setAction(&scene->_sequenceManager3, NULL, 1119, &scene->_tony, NULL); } } BF_GLOBALS._player.setAction(&scene->_sequenceManager1, this, 1117, &BF_GLOBALS._player); break; case 1: ++BF_GLOBALS._tonyDialogCtr; if (BF_GLOBALS.getFlag(onDuty)) { if (BF_GLOBALS.getFlag(fTalkedToTony)) { switch (BF_GLOBALS._tonyDialogCtr) { case 1: T2_GLOBALS._uiElements.addScore(30); scene->_stripManager.start(1181, this); break; case 2: scene->_stripManager.start(1176, this); break; default: scene->_stripManager.start(1155, this); break; } } else { scene->_stripManager.start(1175, this); } } else { if (BF_GLOBALS.getFlag(fTalkedToTony)) { switch (BF_GLOBALS._tonyDialogCtr) { case 1: T2_GLOBALS._uiElements.addScore(30); scene->_stripManager.start(1153, this); break; case 2: scene->_stripManager.start(1154, this); break; default: scene->_stripManager.start(1155, this); break; } } else { scene->_stripManager.start(1152, this); } } break; case 2: if (BF_GLOBALS._tonyDialogCtr == 3) scene->_tony.setAction(&scene->_sequenceManager3, NULL, 3119, &scene->_tony, NULL); BF_GLOBALS._player.enableControl(); remove(); default: break; } } void Scene115::Action3::signal() { Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene; setAction(&scene->_sequenceManager4, this, 3117, &scene->_neonSign, NULL); } void Scene115::Action4::signal() { Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene; switch (_actionIndex++) { case 0: { PlayerMover *mover = new PlayerMover(); Common::Point destPos(145, 107); BF_GLOBALS._player.addMover(mover, &destPos, this); break; } case 1: BF_GLOBALS._player.setStrip(4); SceneItem::display(115, 27, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); scene->_object12.animate(ANIM_MODE_NONE); setDelay(10); break; case 2: setAction(&scene->_sequenceManager1, this, 117, &scene->_object12, &scene->_object11, NULL); break; case 3: scene->_sound1.play(81, &scene->_itemJukebox, 127); BF_GLOBALS._player.enableControl(); remove(); default: break; } } void Scene115::Action5::signal() { Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene; switch (_actionIndex++) { case 0: if (scene->_itemJukebox._jokeboxPlayingCtr == 0) { setAction(&scene->_sequenceManager5, this, 1115, &scene->_kate, NULL); scene->_jukeboxPlaying = 1; } else { --_actionIndex; setDelay(120); } break; case 1: setAction(&scene->_sequenceManager5, this, 117, &scene->_object12, &scene->_object11, NULL); break; case 2: scene->_sound1.play(81, &scene->_itemJukebox, 127); scene->_itemJukebox._jokeboxPlayingCtr = 1; setDelay(3); break; case 3: setAction(&scene->_sequenceManager5, this, 1116, &scene->_kate, NULL); break; case 4: scene->_jukeboxPlaying = 0; remove(); default: break; } } void Scene115::Action6::signal() { Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene; switch (_actionIndex++) { case 0: BF_GLOBALS._player.disableControl(); BF_GLOBALS._player.setAction(&scene->_sequenceManager1, this, 2115, &scene->_kate, &BF_GLOBALS._player, NULL); break; case 1: if (scene->_sceneMode == 9999) { setAction(&scene->_sequenceManager1, this, 4115, &scene->_kate, &BF_GLOBALS._player, NULL); --_actionIndex; scene->_sceneMode = 1166; } else { scene->_stripManager.start(scene->_sceneMode, this); } break; case 2: scene->_kate.setVisage(131); scene->_kate.setStrip(1); scene->_kate.setFrame(1); scene->_kate.setPosition(Common::Point(122, 97)); BF_GLOBALS._player.enableControl(); remove(); default: break; } } void Scene115::Action7::signal() { Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene; switch (_actionIndex++) { case 0: { BF_GLOBALS._player.disableControl(); PlayerMover *mover = new PlayerMover(); Common::Point destPos(142, 105); BF_GLOBALS._player.addMover(mover, &destPos, this); } break; case 1: BF_GLOBALS._player.setStrip(4); if (BF_GLOBALS._kateDialogCtr == 0) scene->_stripManager.start(1156, this); else scene->_stripManager.start(1157, this); ++BF_GLOBALS._kateDialogCtr; break; case 2: BF_GLOBALS._player.enableControl(); remove(); break; default: break; } } void Scene115::Action8::signal() { Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene; switch (_actionIndex++) { case 0: BF_GLOBALS._player.disableControl(); setAction(&scene->_sequenceManager1, this, 2115, &scene->_kate, &BF_GLOBALS._player, NULL); break; case 1: T2_GLOBALS._uiElements.addScore(30); setAction(&scene->_sequenceManager1, this, 4115, &scene->_kate, &BF_GLOBALS._player, NULL); break; case 2: scene->_stripManager.start(1160, this); break; case 3: scene->_stripManager.start(1161, this); break; case 4: BF_GLOBALS.setFlag(fGivenNapkin); setAction(&scene->_sequenceManager1, this, 2117, &scene->_kate, &BF_GLOBALS._player, &scene->_object13, NULL); break; case 5: BF_INVENTORY.setObjectScene(INV_NAPKIN, 1); T2_GLOBALS._uiElements.addScore(10); scene->_kate.setVisage(131); scene->_kate.setStrip(1); scene->_kate.setFrame(1); scene->_kate.setPosition(Common::Point(122, 97)); BF_GLOBALS._player.enableControl(); remove(); break; default: break; } } void Scene115::Action9::signal() { Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene; switch (_actionIndex++) { case 0: BF_GLOBALS._player.disableControl(); if (scene->_tony._position.x > 67) scene->_tony.setAction(&scene->_sequenceManager3, NULL, 1118, &scene->_tony, NULL); else if (scene->_tony._position.x != 67) scene->_tony.setAction(&scene->_sequenceManager3, NULL, 1119, &scene->_tony, NULL); BF_GLOBALS._player.setAction(&scene->_sequenceManager1, this, 1117, &BF_GLOBALS._player, NULL); break; case 1: scene->_stripManager.start(scene->_sceneMode, this); break; case 2: scene->_tony.setAction(&scene->_sequenceManager3, this, 3119, &scene->_tony, NULL); break; case 3: BF_GLOBALS._player.enableControl(); remove(); default: break; } } Scene115::Scene115() : SceneExt () { _lineNumModifier = _jukeboxPlaying = _talkToTonyCtr = 0; } void Scene115::postInit(SceneObjectList *OwnerList) { SceneExt::postInit(); BF_GLOBALS._sound1.fadeSound(15); loadScene(115); setZoomPercents(98, 85, 115, 100); _jukeboxPlaying = 0; _stripManager.addSpeaker(&_gameTextSpeaker); _stripManager.addSpeaker(&_kateSpeaker); _stripManager.addSpeaker(&_tonySpeaker); _stripManager.addSpeaker(&_jakeJacketSpeaker); _stripManager.addSpeaker(&_jakeUniformSpeaker); _stripManager.addSpeaker(&_lyleHatSpeaker); _object6.postInit(); _object6.setVisage(121); _object6.setPosition(Common::Point(82, 66)); _object6._frame = 1; _object6.setStrip(5); _object6.changeZoom(100); _object6.fixPriority(95); _object5.postInit(); _object5.setVisage(121); _object5.setPosition(Common::Point(111, 64)); _object5._frame = 1; _object5.setStrip(6); _object5.changeZoom(100); _object5.fixPriority(95); // Bartender _tony.postInit(); _tony.setVisage(132); _tony.setPosition(Common::Point(74, 66)); _tony.setStrip(3); _tony.setFrame(1); _tony.fixPriority(95); _tony.animate(ANIM_MODE_2, NULL); _tony._numFrames = 5; _tony._talkToTonyCtr2 = 0; _talkToTonyCtr = 0; //Neon sign _neonSign.postInit(); _neonSign.setVisage(115); _neonSign.setStrip(4); _neonSign.setFrame(1); _neonSign.setPosition(Common::Point(262, 29)); _neonSign.setAction(&_action3); _object11.postInit(); _object11.hide(); _object12.postInit(); _object12.hide(); _object13.postInit(); _object13.hide(); BF_GLOBALS._player.postInit(); BF_GLOBALS._player.setVisage(129); BF_GLOBALS._player.setStrip(3); BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper()); BF_GLOBALS._player.animate(ANIM_MODE_1, NULL); BF_GLOBALS._player.changeZoom(-1); if (BF_GLOBALS.getFlag(fWithLyle)) { _object4.postInit(); _object4.setVisage(469); _object4.animate(ANIM_MODE_1, NULL); _object4.setStrip2(1); _object4.setPosition(Common::Point(-20, 155)); Common::Point destPos(17, 118); NpcMover *mover = new NpcMover(); _object4.addMover(mover, &destPos, NULL); BF_GLOBALS._sceneItems.push_front(&_object4); BF_GLOBALS._walkRegions.disableRegion(1); } else if (BF_GLOBALS.getFlag(onDuty)) BF_GLOBALS._player.setVisage(1341); if (BF_GLOBALS._dayNumber == 3) { _object3.postInit(); _object3.setVisage(123); _object3.setPosition(Common::Point(212, 108)); _object3.setAction(&_action1); _lineNumModifier = 0; BF_GLOBALS._sceneItems.push_front(&_object3); _object8.postInit(); _object8.setVisage(115); _object8.setPosition(Common::Point(330, 87)); _object8.setStrip(3); _object8.fixPriority(112); _object9.postInit(); _object9.setVisage(115); _object9.setPosition(Common::Point(330, 87)); _object9.setStrip(3); _object9.fixPriority(112); _object10.postInit(); _object10.setVisage(115); _object10.setPosition(Common::Point(330, 87)); _object10.setStrip(3); _object10.fixPriority(112); if (BF_INVENTORY.getObjectScene(INV_COBB_RAP) == 1) { _kate.postInit(); _kate.setVisage(131); _kate.setPosition(Common::Point(122, 97)); _kate.setStrip(1); _kate.setFrame(1); _kate.changeZoom(100); _kate.fixPriority(95); BF_GLOBALS._sceneItems.push_front(&_kate); } addTimer(&_eventHandler1); } BF_GLOBALS._sceneItems.push_front(&_tony); _item11.setDetails(16, 115, 4, 15, 21, 1); _item12.setDetails(20, 115, 5, 15, 21, 1); _item13.setDetails(31, 115, 6, 16, 22, 1); _item14._sceneRegionId = 13; BF_GLOBALS._sceneItems.push_front(&_item14); _item10.setDetails(Rect(0, 147, 30, 167), 115, -1, -1, -1, 1, NULL); // SUB_177B8 addTimer(&_itemJukebox); _itemJukebox.setDetails(Rect(147, 45, 179, 91), 115, 25, 26, 27, 1, NULL); // _item6.setDetails(Rect(107, 43, 122, 61), 115, 28, 29, 30, 1, NULL); _item7.setDetails(Rect(180, 33, 230, 63), 115, 31, 32, 33, 1, NULL); _item8.setDetails(Rect( 0, 35, 96, 66), 115, 34, 35, 36, 1, NULL); _item2.setDetails(Rect( 0, 65, 135, 95), 115, 0, 12, 18, 1, NULL); _item4.setDetails(Rect(104, 0, 150, 90), 115, 2, 14, 20, 1, NULL); _item5.setDetails(Rect(148, 0, 320, 93), 115, 3, 14, 20, 1, NULL); _item3.setDetails(Rect( 0, 95, 320, 168), 115, 1, 13, 19, 1, NULL); _item9.setDetails(Rect( 0, 0, 320, 168), 115, 11, 17, 24, 1, NULL); BF_GLOBALS._player.disableControl(); _sceneMode = 5115; setAction(&_sequenceManager1, this, 5115, &BF_GLOBALS._player, NULL); } void Scene115::signal() { switch (_sceneMode) { case 1150: BF_GLOBALS._sceneManager.changeScene(114); break; case 1: BF_GLOBALS._player.updateAngle(_object3._position); SceneItem::display(115, 38 + _lineNumModifier, SET_WIDTH, 312, SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 4, SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2, SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 19, SET_EXT_BGCOLOR, 9, SET_EXT_FGCOLOR, 13, LIST_END); ++_lineNumModifier; if (_lineNumModifier >= 4) _lineNumModifier = 0; // No break on purpose case 0: // No break on purpose case 5115: // No break on purpose default: BF_GLOBALS._player.enableControl(); break; } } void Scene115::process(Event &event) { SceneExt::process(event); if (!BF_GLOBALS._player._enabled) return; if (event.mousePos.y >= 167) return; if (_item10._bounds.contains(event.mousePos)) { GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_SW); BF_GLOBALS._events.setCursor(surface); } else { CursorType cursorId = BF_GLOBALS._events.getCursor(); BF_GLOBALS._events.setCursor(cursorId); } } void Scene115::synchronize(Serializer &s) { SceneExt::synchronize(s); s.syncAsSint16LE(_lineNumModifier); s.syncAsSint16LE(_jukeboxPlaying); s.syncAsSint16LE(_talkToTonyCtr); } /*-------------------------------------------------------------------------- * Scene 125 - Intro - Chase in the city * *--------------------------------------------------------------------------*/ void Scene125::Action1::signal() { Scene125 *scene = (Scene125 *)BF_GLOBALS._sceneManager._scene; SceneObject *owner = static_cast(this->_owner); switch (_actionIndex++) { case 1: { Common::Point destPos(214, 105); NpcMover *mover = new NpcMover(); owner->addMover(mover, &destPos, this); break; } case 2: owner->animate(ANIM_MODE_4, 4, 1, this); break; case 3: owner->setFrame(5); scene->_object2.show(); setDelay(180); break; case 4: { Common::Point destPos(311, 85); NpcMover *mover = new NpcMover(); owner->addMover(mover, &destPos, this); break; } case 5: owner->remove(); break; case 0: // No break on purpose default: break; } } void Scene125::Action2::signal() { Scene125 *scene = (Scene125 *)BF_GLOBALS._sceneManager._scene; switch (_actionIndex++) { case 0: setDelay(30); break; case 1: scene->_action1.signal(); setDelay(20); break; case 2: { BF_GLOBALS._v501FA = 10; BF_GLOBALS._v51C44 = 1; Common::Point destPos(202, 94); NpcMover *mover = new NpcMover(); BF_GLOBALS._player.addMover(mover, &destPos, this); break; } case 3: { scene->_action3.signal(); Common::Point destPos(280, 84); NpcMover *mover = new NpcMover(); BF_GLOBALS._player.addMover(mover, &destPos, this); break; } case 4: BF_GLOBALS._player.animate(ANIM_MODE_5, this); break; case 5: { Common::Point destPos(375, 111); NpcMover *mover = new NpcMover(); BF_GLOBALS._player.addMover(mover, &destPos, this); break; } case 6: BF_GLOBALS._player.setStrip(2); BF_GLOBALS._player.setFrame(1); BF_GLOBALS._player.animate(ANIM_MODE_5, this); break; case 7: { Common::Point destPos(347, 139); NpcMover *mover = new NpcMover(); BF_GLOBALS._player.addMover(mover, &destPos, this); break; } case 8: BF_GLOBALS._player.setStrip(3); BF_GLOBALS._player.setFrame(1); BF_GLOBALS._player.animate(ANIM_MODE_5, this); break; case 9: { Common::Point destPos(107, 75); NpcMover *mover = new NpcMover(); BF_GLOBALS._player.addMover(mover, &destPos, this); BF_GLOBALS._player.setPriority(80); break; } case 10: BF_GLOBALS._player.setStrip(4); BF_GLOBALS._player.setFrame(1); BF_GLOBALS._player.animate(ANIM_MODE_5, this); break; case 11: { BF_GLOBALS._player.setPriority(64); Common::Point destPos(229, 61); NpcMover *mover = new NpcMover(); BF_GLOBALS._player.addMover(mover, &destPos, this); break; } case 12: scene->_action3.signal(); BF_GLOBALS._player.remove(); default: break; } } void Scene125::Action2::dispatch() { Action::dispatch(); if ((_actionIndex == 10) && (BF_GLOBALS._player._percent > 80)) BF_GLOBALS._player.changeZoom(BF_GLOBALS._player._percent - 1); if ((_actionIndex == 12) && (BF_GLOBALS._player._percent > 50)) BF_GLOBALS._player.changeZoom(BF_GLOBALS._player._percent - 1); } void Scene125::Action3::signal() { Scene125 *scene = (Scene125 *)BF_GLOBALS._sceneManager._scene; SceneObject *owner = static_cast(this->_owner); switch (_actionIndex++) { case 0: break; case 1: { Common::Point destPos(202, 94); NpcMover *mover = new NpcMover(); owner->addMover(mover, &destPos, this); break; } case 2: { Common::Point destPos(275, 84); NpcMover *mover = new NpcMover(); owner->addMover(mover, &destPos, this); break; } case 3: scene->_soundExt2.fadeSound(20); owner->fixPriority(70); owner->animate(ANIM_MODE_5, this); break; case 4: { Common::Point destPos(375, 111); NpcMover *mover = new NpcMover(); owner->addMover(mover, &destPos, this); break; } case 5: owner->setStrip(2); owner->setFrame(1); owner->animate(ANIM_MODE_5, this); break; case 6: { Common::Point destPos(347, 145); NpcMover *mover = new NpcMover(); owner->addMover(mover, &destPos, this); break; } case 7: owner->setStrip(3); owner->setFrame(1); owner->animate(ANIM_MODE_5, this); break; case 8: { Common::Point destPos(96, 71); NpcMover *mover = new NpcMover(); owner->addMover(mover, &destPos, this); owner->_moveDiff.x = 6; owner->_moveDiff.y = 6; owner->setPriority(80); break; } case 9: owner->setPosition(Common::Point(85, 76)); owner->setStrip(4); owner->setFrame(1); owner->changeZoom(100); owner->animate(ANIM_MODE_5, this); break; case 10: { scene->_action5.signal(); scene->_soundExt1.play(25); Common::Point destPos(154, 94); NpcMover *mover = new NpcMover(); owner->addMover(mover, &destPos, this); break; } case 11: break; case 12: scene->_object1.setPosition(owner->_position); scene->_object1.changeZoom(2); scene->_object1.show(); setDelay(1); case 13: BF_GLOBALS._sound1.play(6); scene->_object1.changeZoom(4); scene->_object1.setPosition(Common::Point(148, 88)); setDelay(1); break; case 14: scene->_object1.changeZoom(8); scene->_object1.setPosition(Common::Point(167, 97)); setDelay(1); break; case 15: scene->_object1.changeZoom(16); scene->_object1.setPosition(Common::Point(197, 104)); scene->_object4.show(); scene->_object3.show(); scene->_object4.changeZoom(16); scene->_object4.setPosition(Common::Point(scene->_object1._position.x - 9, scene->_object1._position.y - 8)); scene->_object3.changeZoom(16); scene->_object3.setPosition(Common::Point(scene->_object1._position.x + 5, scene->_object1._position.y - 8)); setDelay(1); break; case 16: scene->_object1.changeZoom(32); scene->_object1.setPosition(Common::Point(197, 104)); scene->_object4.changeZoom(32); scene->_object4.setPosition(Common::Point(scene->_object1._position.x - 17, scene->_object1._position.y - 15)); scene->_object3.changeZoom(32); scene->_object3.setPosition(Common::Point(scene->_object1._position.x + 12, scene->_object1._position.y - 15)); setDelay(1); break; case 17: scene->_object1.changeZoom(64); scene->_object1.setPosition(Common::Point(198, 114)); scene->_object4.changeZoom(64); scene->_object4.setPosition(Common::Point(scene->_object1._position.x - 34, scene->_object1._position.y - 29)); scene->_object3.changeZoom(64); scene->_object3.setPosition(Common::Point(scene->_object1._position.x + 23, scene->_object1._position.y - 29)); setDelay(1); break; case 18: scene->_object1.changeZoom(100); scene->_object1.setPosition(Common::Point(160, 112)); scene->_object4.changeZoom(100); scene->_object4.setPosition(Common::Point(scene->_object1._position.x - 51, scene->_object1._position.y - 45)); scene->_object3.changeZoom(100); scene->_object3.setPosition(Common::Point(scene->_object1._position.x + 42, scene->_object1._position.y - 45)); scene->_object4.animate(ANIM_MODE_5, this); scene->_object3.animate(ANIM_MODE_5, this); setDelay(1); break; case 19: break; case 20: setDelay(30); break; case 21: BF_GLOBALS._sceneManager.changeScene(140); break; default: break; } } void Scene125::Action3::dispatch() { SceneObject *owner = static_cast(this->_owner); Action::dispatch(); if ((_actionIndex == 9) && (owner->_percent > 70)) owner->changeZoom(owner->_percent - 1); } void Scene125::Action4::signal() { Scene125 *scene = (Scene125 *)BF_GLOBALS._sceneManager._scene; SceneObject *owner = static_cast(this->_owner); switch (_actionIndex++) { case 0: setDelay(180); break; case 1: { owner->setPriority(scene->_object2._priority - 1); Common::Point destPos(66, 168); NpcMover *mover = new NpcMover(); owner->addMover(mover, &destPos, this); break; } case 2: owner->animate(ANIM_MODE_5, this); break; case 3: { Common::Point destPos(307, 106); NpcMover *mover = new NpcMover(); owner->addMover(mover, &destPos, this); break; } case 4: owner->remove(); break; default: break; } } void Scene125::Action4::dispatch() { SceneObject *owner = static_cast(this->_owner); Action::dispatch(); if ((_actionIndex == 4) && (owner->_percent > 80)) owner->changeZoom(owner->_percent - 1); } void Scene125::Action5::signal() { SceneObject *owner = static_cast(this->_owner); if (_actionIndex++ == 1) { Common::Point destPos(162, 103); NpcMover *mover = new NpcMover(); owner->addMover(mover, &destPos, this); } } void Scene125::Action6::signal() { SceneObject *owner = static_cast(this->_owner); switch (_actionIndex++) { case 0: setDelay(60); break; case 1: { Common::Point destPos(410, 181); NpcMover *mover = new NpcMover(); owner->addMover(mover, &destPos, this); break; } case 2: owner->remove(); default: break; } } void Scene125::Action6::dispatch() { SceneObject *owner = static_cast(this->_owner); Action::dispatch(); if ((_actionIndex == 2) && (owner->_percent < 100)) owner->changeZoom(owner->_percent + 1); } void Scene125::postInit(SceneObjectList *OwnerList) { SceneExt::postInit(); loadScene(120); _object4.postInit(); _object4.setVisage(124); _object4.setPosition(Common::Point(0, 0)); _object4.setStrip(1); _object4.setFrame(1); _object4.fixPriority(251); _object4.hide(); _object3.postInit(); _object3.setVisage(124); _object3.setPosition(Common::Point(0, 0)); _object3.setStrip(2); _object3.setFrame(1); _object3.fixPriority(251); _object3.hide(); BF_GLOBALS._player.postInit(); BF_GLOBALS._player.setVisage(127); BF_GLOBALS._player.setPosition(Common::Point(160, 110)); BF_GLOBALS._player.setStrip(1); BF_GLOBALS._player.setFrame(1); BF_GLOBALS._player.changeZoom(100); BF_GLOBALS._player.fixPriority(68); BF_GLOBALS._player._moveDiff.x = 6; BF_GLOBALS._player._moveDiff.y = 6; BF_GLOBALS._player.disableControl(); _object5.postInit(); _object5.setVisage(128); _object5.setPosition(Common::Point(150, 117)); _object5.fixPriority(68); _object5._moveDiff.x = 6; _object5._moveDiff.y = 6; _object9.postInit(); _object9.setVisage(126); _object9.setPosition(Common::Point(124, 106)); _object9.setStrip(4); _object9.fixPriority(90); _object9._moveDiff.x = 3; _object9._moveDiff.y = 3; _object1.postInit(); _object1.setVisage(130); _object1.setPosition(Common::Point(139, 88)); _object1.setStrip(1); _object1.setFrame(1); _object1.changeZoom(100); _object1.fixPriority(250); _object1.hide(); _object8.postInit(); _object8.setVisage(126); _object8.setPosition(Common::Point(89, 181)); _object8.setStrip(3); _object8._moveDiff.x = 6; _object8._moveDiff.y = 6; _object6.postInit(); _object6.setVisage(126); _object6.setPosition(Common::Point(289, 128)); _object6.fixPriority(69); _object6._moveDiff.x = 6; _object6._moveDiff.y = 6; _object6.setAction(&_action1); _object2.postInit(); _object2.setVisage(126); _object2.setPosition(Common::Point(214, 105)); _object2.setStrip(2); _object2.setFrame(1); _object2.changeZoom(100); _object2.fixPriority(63); _object2.hide(); _object7.postInit(); _object7.setVisage(126); _object7.setPosition(Common::Point(87, 76)); _object7.setStrip(6); _object7.setFrame(6); _object7.changeZoom(80); _object7._moveDiff.x = 4; _object7._moveDiff.y = 4; _object7.setAction(&_action6); BF_GLOBALS._sound1.play(5); setAction(&_action2); _object5.setAction(&_action3); _object8.setAction(&_action4); _object9.setAction(&_action5); } /*-------------------------------------------------------------------------- * Scene 140 - Intro - Near the house * *--------------------------------------------------------------------------*/ void Scene140::Action1::signal() { Scene140 *scene = (Scene140 *)BF_GLOBALS._sceneManager._scene; SceneObject *owner = static_cast(this->_owner); switch (_actionIndex++) { case 0: scene->loadScene(999); setDelay(2); break; case 1: BF_GLOBALS._scenePalette.loadPalette(2); BF_GLOBALS._scenePalette.refresh(); scene->_text.setup(BF_19840518, this); break; case 2: scene->_object1.show(); scene->loadScene(140); setDelay(1); break; case 3: { Common::Point destPos(236, 144); NpcMover *mover = new NpcMover(); owner->addMover(mover, &destPos, this); owner->_numFrames = 7; break; } case 4: owner->setStrip(3); owner->setFrame(1); owner->_numFrames = 5; owner->setPosition(Common::Point(226, 143)); owner->animate(ANIM_MODE_5, this); break; case 5: owner->setStrip(4); owner->setFrame(1); owner->animate(ANIM_MODE_5, this); break; case 6: scene->_object1.animate(ANIM_MODE_5, this); owner->setStrip(1); owner->setFrame(1); break; case 7: owner->setFrame(1); owner->setPosition(Common::Point(owner->_position.x, owner->_position.y + 1)); owner->animate(ANIM_MODE_5, this); break; case 8: owner->animate(ANIM_MODE_6, this); owner->_numFrames = 10; break; case 9: owner->_numFrames = 5; owner->setPosition(Common::Point(217, 117)); owner->setStrip(2); owner->animate(ANIM_MODE_5, this); break; case 10: owner->setPosition(Common::Point(212, 117)); setDelay(10); // No break on purpose case 11: owner->setPosition(owner->_position, 1000); setDelay(60); break; case 12: BF_GLOBALS._sound1.play(8); setDelay(60); // No break on purpose case 13: BF_GLOBALS._v51C44 = 1; BF_GLOBALS._sceneManager.changeScene(150); default: break; } } void Scene140::postInit(SceneObjectList *OwnerList) { SceneExt::postInit(); loadScene(999); _object2.postInit(); _object2.setVisage(141); _object2.setPosition(Common::Point(333, 149)); _object2.setStrip(5); _object2.animate(ANIM_MODE_1, NULL); _object2._moveDiff.x = 3; _object1.postInit(); _object1.setVisage(141); _object1.setPosition(Common::Point(202, 115)); _object1.setFrame(1); _object1.setStrip(6); _object1.changeZoom(100); _object1.hide(); BF_GLOBALS._v5020C = 0; BF_GLOBALS._v501F8 = 300; BF_GLOBALS._v501FC = 90; BF_GLOBALS._sound1.play(7); _object2.setAction(&_action1); } /*-------------------------------------------------------------------------- * Scene 150 - Intro - Burglar inside the house * *--------------------------------------------------------------------------*/ void Scene150::Action1::signal() { SceneObject *owner = static_cast(this->_owner); static uint32 v50B96 = 0; switch (_actionIndex++) { case 0: _actionIndex = 5; _object2.postInit(); _object2.setVisage(150); _object2.setStrip(3); _object2._frame = 1; _object2.setPosition(Common::Point(148, 126)); _object2.changeZoom(100); setDelay(10); break; case 1: owner->animate(ANIM_MODE_5, this); break; case 2: owner->_frame = 1; owner->setStrip(4); owner->animate(ANIM_MODE_4, 3, 1, this); break; case 3: owner->animate(ANIM_MODE_5, this); _object2.animate(ANIM_MODE_5, this); break; case 4: _object2.remove(); break; case 5: owner->_numFrames = 8; owner->_frame = 1; owner->setStrip(2); owner->animate(ANIM_MODE_4, 14, 1, this); break; case 6: owner->fixPriority(119); owner->animate(ANIM_MODE_5, this); break; case 7: setDelay(60); break; case 8: BF_GLOBALS._sound1.stop(); // No break on purpose case 9: _sound1.play(8); setDelay(30); break; case 10: BF_GLOBALS._scenePalette.addFader((const byte *)&v50B96, 1, 2, this); break; case 11: BF_GLOBALS._sound1.play(9); BF_GLOBALS._sceneManager.changeScene(160); break; default: break; } } void Scene150::postInit(SceneObjectList *OwnerList) { SceneExt::postInit(); loadScene(150); BF_GLOBALS._player.postInit(); BF_GLOBALS._player.setPosition(Common::Point(160, 100)); BF_GLOBALS._player._moveDiff.x = 15; BF_GLOBALS._player.hide(); _object1.postInit(); _object1.setVisage(150); _object1.setPosition(Common::Point(158, 119)); _object1._numFrames = 5; _object1.fixPriority(121); _object1.setAction(&_action1); } /*-------------------------------------------------------------------------- * Scene 160 - Intro - Burial * *--------------------------------------------------------------------------*/ void Scene160::Action1::signal() { Scene160 *scene = (Scene160 *)BF_GLOBALS._sceneManager._scene; switch (_actionIndex++) { case 0: break; case 1: scene->_kid.animate(ANIM_MODE_5, this); break; case 2: // No break on purpose case 10: scene->_grandma.animate(ANIM_MODE_5, this); break; case 3: // No break on purpose case 6: scene->_kid.animate(ANIM_MODE_6, this); break; case 4: scene->_kid.setPosition(Common::Point(scene->_kid._position.x - 2, scene->_kid._position.y + 19)); scene->_kid.setFrame(1); scene->_kid.setStrip(2); scene->_kid.animate(ANIM_MODE_5, this); scene->_kidBody.setPosition(scene->_kid._position); scene->_kidBody.setFrame(1); scene->_kidBody.setStrip(3); break; case 5: setDelay(60); break; case 7: scene->_kidBody.remove(); scene->_kid.setStrip(6); scene->_kid.setFrame(1); scene->_kid.setPosition(Common::Point(scene->_kid._position.x - 4, scene->_kid._position.y + 19)); scene->_grandma.animate(ANIM_MODE_6, this); scene->_grandma._numFrames = 7; break; case 8: scene->_grandma.setStrip(2); scene->_grandma.setFrame(1); scene->_grandma.animate(ANIM_MODE_5, this); break; case 9: setDelay(120); break; default: break; } } void Scene160::Action2::signal() { Scene160 *scene = (Scene160 *)BF_GLOBALS._sceneManager._scene; SceneObject *owner = static_cast(this->_owner); static uint32 v50BAB = 0; static uint32 v50BC3 = 0; switch (_actionIndex++) { case 0: break; case 1: owner->animate(ANIM_MODE_5, this); owner->_numFrames = 8; break; case 2: owner->setStrip(2); owner->setFrame(1); owner->setPosition(Common::Point(scene->_flag._position.x + 56, scene->_flag._position.y + 2)); owner->animate(ANIM_MODE_5, this); break; case 3: owner->setStrip(3); owner->setFrame(1); owner->setPosition(Common::Point(scene->_flag._position.x + 26, scene->_flag._position.y - 8)); owner->animate(ANIM_MODE_4, 8, 1, this); break; case 4: scene->_flag.remove(); owner->animate(ANIM_MODE_5, this); break; case 5: owner->setVisage(162); owner->setStrip(1); owner->setFrame(1); owner->setPosition(Common::Point(owner->_position.x + 27, owner->_position.y + 11)); owner->animate(ANIM_MODE_5, this); break; case 6: owner->setStrip(2); owner->setFrame(1); owner->setPosition(Common::Point(owner->_position.x - 42, owner->_position.y + 15)); owner->animate(ANIM_MODE_5, this); break; case 7: owner->setStrip(3); owner->setFrame(1); owner->setPosition(Common::Point(owner->_position.x + 1, owner->_position.y)); owner->animate(ANIM_MODE_5, this); break; case 8: owner->setStrip(4); owner->setFrame(1); owner->setPosition(Common::Point(owner->_position.x - 3, owner->_position.y - 1)); scene->_leftOfficer.show(); scene->_leftOfficer.setStrip(1); scene->_leftOfficer.setFrame(1); scene->_leftOfficer.setPosition(Common::Point(owner->_position.x + 8, owner->_position.y - 39)); scene->_leftOfficer._numFrames = 5; scene->_leftOfficer.animate(ANIM_MODE_5, this); break; case 9: setDelay(30); break; case 10: scene->_leftOfficer.hide(); owner->setVisage(163); owner->setStrip(2); owner->setFrame(1); owner->setPosition(Common::Point(owner->_position.x + 39, owner->_position.y)); owner->animate(ANIM_MODE_5, this); break; case 11: scene->_leftOfficer.fixPriority(owner->_priority + 1); setDelay(60); break; case 12: scene->_leftOfficer.show(); scene->_leftOfficer.setPosition(Common::Point(owner->_position.x - 32, owner->_position.y - 38)); scene->_leftOfficer.setStrip(3); scene->_leftOfficer.setFrame(1); owner->setVisage(165); owner->setPosition(Common::Point(owner->_position.x + 6, owner->_position.y - 3)); owner->setStrip(1); owner->setFrame(1); owner->animate(ANIM_MODE_5, this); break; case 13: { owner->setStrip(2); owner->setFrame(1); owner->changeZoom(110); owner->animate(ANIM_MODE_1, NULL); Common::Point destPos(scene->_kid._position.x - 25, scene->_kid._position.y + 15); NpcMover *mover = new NpcMover(); owner->addMover(mover, &destPos, this); break; } case 14: owner->changeZoom(100); owner->setStrip(5); owner->setFrame(1); scene->_kid.animate(ANIM_MODE_4, 5, 1, this); break; case 15: owner->animate(ANIM_MODE_5, this); scene->_kid.animate(ANIM_MODE_5, NULL); break; case 16: owner->setStrip(6); owner->setFrame(1); owner->setPosition(Common::Point(owner->_position.x - 8, owner->_position.y + 3)); owner->animate(ANIM_MODE_5, this); break; case 17: setDelay(70); break; case 18: owner->animate(ANIM_MODE_6, this); break; case 19: setDelay(120); break; case 20: BF_GLOBALS._sound1.changeSound(10); BF_GLOBALS._scenePalette.addFader((const byte *)&v50BAB, 1, 2, this); break; case 21: BF_GLOBALS._scenePalette.loadPalette(2); scene->loadScene(999); setDelay(2); break; case 22: scene->_sceneBounds.set(0, 0, 320, 200); scene->_text.setup(BF_11_YEARS, this); break; case 23: BF_GLOBALS._scenePalette.loadPalette(2); scene->loadScene(165); BF_GLOBALS._scenePalette.addFader((const byte *)&v50BC3, 1, -5, this); break; case 24: setDelay(900); break; case 25: BF_GLOBALS._sound1.fade(0, 10, 10, true, this); // FIXME: Currently, fade() doesn't end properly with this song, // thus never returns here. This hack skips the wait and changes // directly to the next scene // Start of hack // break; // case 26: setDelay(5); BF_GLOBALS._sound1.stop(); // End of hack BF_GLOBALS._v51C44 = 1; BF_GLOBALS._sceneManager.changeScene(200); break; default: break; } } void Scene160::Action2::process(Event &event) { if ((event.handled) || (event.eventType == 5)) return; if (_actionIndex == 25) { event.handled = true; setDelay(1); } } void Scene160::Action3::signal() { Scene160 *scene = (Scene160 *)BF_GLOBALS._sceneManager._scene; switch (_actionIndex++) { case 0: scene->_text.setup(BF_3_DAYS, this); break; case 1: { Common::Point destPos(720, 100); NpcMover *mover = new NpcMover(); BF_GLOBALS._player.addMover(mover, &destPos, this); break; } case 2: scene->_action1.signal(); scene->_action2.signal(); break; default: break; } } void Scene160::postInit(SceneObjectList *OwnerList) { SceneExt::postInit(); loadScene(160); _sceneBounds.moveTo(0, 0); BF_GLOBALS._scenePalette.loadPalette(2); BF_GLOBALS._player.postInit(); BF_GLOBALS._player.setPosition(Common::Point(160, 100)); BF_GLOBALS._player._moveDiff.x = 15; BF_GLOBALS._player.hide(); _grandma.postInit(); _grandma.setVisage(54); _grandma.setPosition(Common::Point(712, 97)); _grandma.fixPriority(66); _kid.postInit(); _kid.setPosition(Common::Point(732, 65)); _kid.setVisage(164); _kid.setStrip(4); _kid.fixPriority(68); _kidBody.postInit(); _kidBody.setPosition(Common::Point(_kid._position.x, _kid._position.y)); _kidBody.setVisage(164); _kidBody.setStrip(5); _kidBody.fixPriority(68); _flag.postInit(); _flag.setPosition(Common::Point(645, 116)); _flag.setVisage(161); _flag.setStrip(4); _flag.fixPriority(80); _rightOfficer.postInit(); _rightOfficer.setVisage(161); _rightOfficer.setPosition(Common::Point(_flag._position.x + 58, _flag._position.y + 11)); _rightOfficer.fixPriority(81); _leftOfficer.postInit(); _leftOfficer.setVisage(163); _leftOfficer.setPosition(Common::Point(620, 79)); _leftOfficer.setStrip(3); _leftOfficer.fixPriority(81); _leftOfficer.hide(); _rightOfficer.setAction(&_action2); _grandma.setAction(&_action1); setAction(&_action3); _sceneBounds.center(BF_GLOBALS._player._position.x, BF_GLOBALS._player._position.y); } /*-------------------------------------------------------------------------- * Scene 180 - Front of Home * *--------------------------------------------------------------------------*/ bool Scene180::Vechile::startAction(CursorType action, Event &event) { if (action == CURSOR_USE) { BF_GLOBALS._sceneManager.changeScene(60); return true; } else { return NamedObject::startAction(action, event); } } /*--------------------------------------------------------------------------*/ bool Scene180::GarageExit::startAction(CursorType action, Event &event) { Scene180 *scene = (Scene180 *)BF_GLOBALS._sceneManager._scene; if (scene->_garageExit.contains(event.mousePos)) { ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 256, 114); return true; } else { return false; } } /*--------------------------------------------------------------------------*/ Scene180::Scene180(): SceneExt() { _dispatchMode = 0; } void Scene180::synchronize(Serializer &s) { SceneExt::synchronize(s); s.syncAsSint16LE(_dispatchMode); } void Scene180::postInit(SceneObjectList *OwnerList) { SceneExt::postInit(); if (((BF_GLOBALS._bookmark == bLyleStoppedBy) && (BF_GLOBALS._dayNumber == 1)) || ((BF_GLOBALS._bookmark == bDroppedOffLyle) && (BF_GLOBALS._dayNumber == 3)) || ((BF_GLOBALS._bookmark == bDoneAtLyles) && (BF_GLOBALS._dayNumber == 4))) loadScene(999); else loadScene(1180); _garageExit.setDetails(Rect(243, 93, 275, 122), 180, -1, -1, -1, 1, NULL); _gameTextSpeaker._textPos.y = 180; _stripManager.addSpeaker(&_gameTextSpeaker); _dispatchMode = 0; setZoomPercents(121, 60, 125, 70); if ((BF_GLOBALS._bookmark == bLyleStoppedBy) && (BF_GLOBALS._dayNumber == 1)) { BF_GLOBALS._v501FC = 87; BF_GLOBALS._v501FA = _sceneBounds.left + 10; // CHECKME: BF_GLOBALS._v50206 = 18; ?? _sceneMessage.setup(THE_NEXT_DAY); _sceneMode = 6; setAction(&_sceneMessage, this); BF_GLOBALS._driveFromScene = 4; BF_GLOBALS._driveToScene = 4; BF_GLOBALS._mapLocationId = 4; } else if (((BF_GLOBALS._bookmark == bDroppedOffLyle) && (BF_GLOBALS._dayNumber == 3)) || ((BF_GLOBALS._bookmark == bDoneAtLyles) && (BF_GLOBALS._dayNumber == 4))) { BF_GLOBALS._v501FC = 87; BF_GLOBALS._v501FA = _sceneBounds.left + 10; // CHECKME: BF_GLOBALS._v50206 = 18; ?? _sceneMessage.setup(THE_NEXT_DAY); _sceneMode = 6; setAction(&_sceneMessage, this); } else if (BF_GLOBALS._dayNumber == 0) { BF_GLOBALS._player.setPosition(Common::Point(0, 150)); _vechile.postInit(); _garageExit.postInit(); BF_GLOBALS._driveToScene = 190; BF_GLOBALS._sound1.play(31); BF_GLOBALS._sound1.holdAt(1); _sceneMode = 1800; setAction(&_sequenceManager, this, 1800, &_vechile, &_object1, NULL); } else if (BF_GLOBALS._driveFromScene == 180) { BF_GLOBALS._player.postInit(); BF_GLOBALS._player.setVisage(831); BF_GLOBALS._player.setPosition(Common::Point(285, 125)); BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper()); BF_GLOBALS._player.animate(ANIM_MODE_1, NULL); BF_GLOBALS._player._strip = 3; BF_GLOBALS._player.changeZoom(-1); _vechile.postInit(); _vechile.setVisage(580); _vechile.setStrip(2); _vechile.setPosition(Common::Point(262, 131)); _vechile.setZoom(65); _vechile.setDetails(180, 33, 34, 35, 1, (SceneItem *)NULL); _object1.postInit(); _object1.setVisage(182); _object1.setStrip(2); _object1.setPosition(Common::Point(258, 122)); _object1.setFrame(6); BF_GLOBALS._driveFromScene = 0; BF_GLOBALS._player.enableControl(); } else if (BF_GLOBALS._driveToScene != 180) { BF_GLOBALS._player.postInit(); BF_GLOBALS._player.disableControl(); _vechile.postInit(); _vechile.setDetails(180, 33, 34, 35, 1, (SceneItem *)NULL); _object1.postInit(); BF_GLOBALS._driveFromScene = 4; BF_GLOBALS._driveToScene = 4; BF_GLOBALS._mapLocationId = 4; BF_GLOBALS._sound1.fadeSound(33); _sceneMode = 1801; setAction(&_sequenceManager, this, 1801, &BF_GLOBALS._player, &_vechile, &_object1, NULL); } else { BF_GLOBALS._driveFromScene = 0; if (!BF_GLOBALS.getFlag(onDuty) && !BF_GLOBALS.getFlag(fWithLyle)) { BF_GLOBALS._player.setPosition(Common::Point(0, 150)); _object1.postInit(); _object1.setVisage(182); _object1.setStrip(2); _object1.setPosition(Common::Point(258, 122)); _vechile.postInit(); _vechile.setVisage(181); _vechile.setStrip(2); _vechile.changeZoom(80); _vechile.fixPriority(150); _vechile._moveDiff = Common::Point(40, 5); _vechile.setPosition(Common::Point(-25, 171)); _dispatchMode = 1; BF_GLOBALS._sound1.play(29); _sceneMode = 1; ADD_MOVER(_vechile, 259, 150); } else { BF_GLOBALS._player.setPosition(Common::Point(0, 150)); _object1.postInit(); _object1.setVisage(182); _object1.setStrip(2); _object1.setPosition(Common::Point(258, 122)); _vechile.postInit(); if (BF_GLOBALS.getFlag(onDuty)) { BF_GLOBALS._sound1.play(29); _vechile.setVisage(191); _vechile.setStrip(3); _vechile._frame = 5; _vechile.changeZoom(75); _dispatchMode = 1; _vechile._moveDiff.x = 45; } else { _vechile.setVisage(444); _vechile.setStrip(2); _vechile.changeZoom(85); _dispatchMode = 3; _vechile._moveDiff.x = 30; } _vechile.fixPriority(150); _vechile._moveDiff.y = 5; _vechile.setPosition(Common::Point(-25, 171)); _sceneMode = 3; ADD_MOVER(_vechile, 258, 145); } } if (_sceneMode != 6) { _frontDoor.setDetails(Rect(183, 92, 218, 122), 180, 27, 28, 29, 1, NULL); _driveway.setDetails(8, 180, 36, 37, 38, 1); _street.setDetails(1, 180, 21, 22, 23, 1); _lawn.setDetails(3, 180, 18, 19, 20, 1); _bushes.setDetails(4, 180, 15, 16, 17, 1); _palms.setDetails(6, 180, 12, 13, 14, 1); _garage.setDetails(Rect(241, 85, 319, 121), 180, 30, 31, 32, 1, NULL); _fence.setDetails(Rect(0, 109, 21, 125), 180, 9, 10, 11, 1, NULL); _house.setDetails(5, 180, 24, 25, 26, 1); _steps.setDetails(7, 180, 6, 7, 8, 1); _curb.setDetails(2, 180, 3, 4, 5, 1); _sky.setDetails(Rect(0, 0, 319, 190), 180, 0, 1, 2, 1, NULL); } } void Scene180::signal() { switch (_sceneMode) { case 1: _dispatchMode = 0; switch (BF_GLOBALS._bookmark) { case bFlashBackThree: BF_GLOBALS._bookmark = bDroppedOffLyle; _sceneMode = 7; break; case bDoneWithIsland: BF_GLOBALS._bookmark = bDoneAtLyles; _sceneMode = 8; break; default: _sceneMode = 1802; break; } setAction(&_sequenceManager, this, 1802, &_vechile, &_object1, NULL); break; case 2: _dispatchMode = 0; BF_GLOBALS._sound1.fadeOut2(NULL); BF_GLOBALS._sceneManager.changeScene(BF_GLOBALS._driveToScene); break; case 3: _dispatchMode = 0; BF_GLOBALS._sound1.stop(); _stripManager.start(1800, this); _sceneMode = 4; break; case 4: _sceneMode = 5; BF_GLOBALS._sound1.fadeSound(29); ADD_MOVER(_vechile, 340, 140); _vechile._moveDiff.y = 1; break; case 5: BF_GLOBALS._sceneManager.changeScene(50); break; case 6: loadScene(1180); BF_GLOBALS._sound1.fadeSound(33); switch (BF_GLOBALS._bookmark) { case bLyleStoppedBy: BF_GLOBALS._dayNumber = 2; BF_INVENTORY.alterInventory(2); break; case bDroppedOffLyle: BF_GLOBALS._dayNumber = 4; BF_INVENTORY.alterInventory(4); break; case bDoneAtLyles: BF_GLOBALS._dayNumber = 5; BF_INVENTORY.alterInventory(5); break; default: break; } BF_GLOBALS._player.postInit(); BF_GLOBALS._player.disableControl(); _vechile.postInit(); _vechile.setDetails(180, 33, 34, 35, 1, (SceneItem *)NULL); _object1.postInit(); _sceneMode = 1801; setAction(&_sequenceManager, this, 1801, &BF_GLOBALS._player, &_vechile, &_object1, NULL); _frontDoor.setDetails(Rect(183, 92, 218, 122), 180, 27, 28, 29, 1, NULL); _driveway.setDetails(8, 180, 36, 37, 38, 1); _street.setDetails(1, 180, 21, 22, 23, 1); _lawn.setDetails(3, 180, 18, 19, 20, 1); _bushes.setDetails(4, 180, 15, 16, 17, 1); _palms.setDetails(6, 180, 12, 13, 14, 1); _garage.setDetails(Rect(241, 85, 319, 121), 180, 30, 31, 32, 1, NULL); _fence.setDetails(Rect(0, 109, 21, 125), 180, 9, 10, 11, 1, NULL); _house.setDetails(4, 180, 24, 25, 26, 1); _steps.setDetails(7, 180, 6, 7, 8, 1); _curb.setDetails(2, 180, 3, 4, 5, 1); _sky.setDetails(Rect(0, 0, 319, 190), 180, 0, 1, 2, 1, NULL); break; case 7: BF_INVENTORY.setObjectScene(INV_COBB_RAP, 0); BF_INVENTORY.setObjectScene(INV_MUG_SHOT, 0); BF_INVENTORY.setObjectScene(INV_FOREST_RAP, 0); BF_INVENTORY.setObjectScene(INV_LYLE_CARD, 0); BF_INVENTORY.setObjectScene(INV_NAPKIN, 0); BF_INVENTORY.setObjectScene(INV_9MM_BULLETS, 0); BF_INVENTORY.setObjectScene(INV_SCHEDULE, 0); BF_INVENTORY.setObjectScene(INV_PRINT_OUT, 0); BF_GLOBALS._sceneManager.changeScene(180); break; case 8: if (BF_GLOBALS.getFlag(fLeftTraceIn900) || BF_GLOBALS.getFlag(fGotPointsForSearchingDA) || BF_GLOBALS.getFlag(fLeftTraceIn920)) { BF_GLOBALS._sound1.fadeOut2(NULL); BF_GLOBALS._driveToScene = 0; BF_GLOBALS._driveFromScene = 0; BF_GLOBALS._sceneManager.changeScene(271); } else { BF_GLOBALS._sceneManager.changeScene(180); } break; case 1800: _dispatchMode = 2; _vechile._moveDiff.x = 10; _sceneMode = 2; ADD_MOVER(_vechile, -25, 171); break; case 1801: BF_GLOBALS._player._strip = 3; BF_GLOBALS._player.enableControl(); break; case 1802: BF_GLOBALS._sound1.release(); BF_GLOBALS._driveToScene = 0; BF_GLOBALS._driveFromScene = 0; BF_GLOBALS._sceneManager.changeScene(270); break; default: break; } } void Scene180::process(Event &event) { SceneExt::process(event); if (BF_GLOBALS._player._enabled && !_focusObject && (event.mousePos.y < (UI_INTERFACE_Y - 1))) { if (_vechile.contains(event.mousePos)) { CursorType cursorId = BF_GLOBALS._events.getCursor(); BF_GLOBALS._events.setCursor(cursorId); } else if (_garageExit.contains(event.mousePos)) { GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_NW); BF_GLOBALS._events.setCursor(surface); } else { // In case an exit cursor was being shown, restore the previously selected cursor CursorType cursorId = BF_GLOBALS._events.getCursor(); BF_GLOBALS._events.setCursor(cursorId); } } } void Scene180::dispatch() { switch (_dispatchMode) { case 1: if (_vechile._mover && (_vechile._percent > 50)) _vechile.changeZoom(_vechile._percent - 1); if (_vechile._moveDiff.x > 15) --_vechile._moveDiff.x; break; case 2: if (_vechile._mover && (_vechile._percent < 100)) _vechile.changeZoom(_vechile._percent + 1); if (_vechile._moveDiff.x < 35) ++_vechile._moveDiff.x; break; case 3: if (_vechile._mover && (_vechile._percent > 70)) _vechile.changeZoom(_vechile._percent - 1); if (_vechile._moveDiff.x > 15) --_vechile._moveDiff.x; break; default: break; } SceneExt::dispatch(); if (!_action && (BF_GLOBALS._player._position.y < 120)) { BF_GLOBALS._player.disableControl(); BF_GLOBALS._sound1.fadeOut2(NULL); BF_GLOBALS._driveToScene = 0; BF_GLOBALS._driveFromScene = 0; if (BF_GLOBALS.getFlag(fLeftTraceIn900) || BF_GLOBALS.getFlag(fGotPointsForSearchingDA) || BF_GLOBALS.getFlag(fLeftTraceIn920)) BF_GLOBALS._sceneManager.changeScene(271); else BF_GLOBALS._sceneManager.changeScene(270); } } /*-------------------------------------------------------------------------- * Scene 190 - Front of Police Station * *--------------------------------------------------------------------------*/ bool Scene190::LyleCar::startAction(CursorType action, Event &event) { Scene190 *scene = (Scene190 *)BF_GLOBALS._sceneManager._scene; switch (action) { case CURSOR_USE: { BF_GLOBALS._player.disableControl(); scene->_sceneMode = 13; Common::Point pt(62, 96); PlayerMover *mover = new PlayerMover(); BF_GLOBALS._player.addMover(mover, &pt, scene); return true; } default: return NamedObject::startAction(action, event); } } /*--------------------------------------------------------------------------*/ bool Scene190::Item1::startAction(CursorType action, Event &event) { Scene190 *scene = (Scene190 *)BF_GLOBALS._sceneManager._scene; switch (action) { case CURSOR_USE: scene->setAction(&scene->_action1); return true; default: return NamedHotspot::startAction(action, event); } } bool Scene190::Item2::startAction(CursorType action, Event &event) { Scene190 *scene = (Scene190 *)BF_GLOBALS._sceneManager._scene; switch (action) { case CURSOR_USE: scene->_stripManager.start(1900, scene); return true; default: return NamedHotspot::startAction(action, event); } } bool Scene190::Exit::startAction(CursorType action, Event &event) { Scene190 *scene = (Scene190 *)BF_GLOBALS._sceneManager._scene; Common::Point pt(316, 91); PlayerMover *mover = new PlayerMover(); BF_GLOBALS._player.addMover(mover, &pt, scene); return true; } /*--------------------------------------------------------------------------*/ void Scene190::Action1::signal() { Scene190 *scene = (Scene190 *)BF_GLOBALS._sceneManager._scene; switch (_actionIndex++) { case 0: BF_GLOBALS._player.disableControl(); setDelay(2); break; case 1: { ADD_MOVER(BF_GLOBALS._player, 165, 91); break; } case 2: scene->_sound.play(82); scene->_door.animate(ANIM_MODE_5, this); break; case 3: ADD_MOVER(BF_GLOBALS._player, 180, 86); break; case 4: scene->_sound.play(82); scene->_door.animate(ANIM_MODE_6, this); break; case 5: BF_GLOBALS._sound1.fadeOut2(NULL); BF_GLOBALS._sceneManager.changeScene(315); break; } } /*--------------------------------------------------------------------------*/ Scene190::Scene190(): SceneExt() { _fieldB52 = true; _cursorVisage.setVisage(1, 8); } void Scene190::postInit(SceneObjectList *OwnerList) { BF_GLOBALS._dialogCenter.y = 100; if ((BF_GLOBALS._sceneManager._previousScene == 100) || (BF_GLOBALS._sceneManager._previousScene == 20)) { // clearScreen(); } if (BF_GLOBALS._dayNumber == 0) { // If at start of game, change to first day BF_GLOBALS._dayNumber = 1; // To be checked: Not present in the original g_globals->_sceneManager._previousScene = 100; } SceneExt::postInit(); // Load the scene data loadScene(190); BF_GLOBALS._scenePalette.loadPalette(2); _stripManager.addSpeaker(&_speaker); BF_GLOBALS._player.postInit(); BF_GLOBALS._player.disableControl(); // Initialise objects _door.postInit(); _door.setVisage(190); _door.setStrip(1); _door.setPosition(Common::Point(179, 88)); _flag.postInit(); _flag.setVisage(190); _flag.setStrip(2); _flag.fixPriority(200); _flag.setPosition(Common::Point(170, 31)); _flag.animate(ANIM_MODE_7, 0, NULL); _flag.setDetails(190, 8, 26, 19, 1, (SceneItem *)NULL); _fieldB52 = true; if (BF_GLOBALS.getFlag(fWithLyle)) { BF_GLOBALS._player.setVisage(303); BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper()); BF_GLOBALS._player.animate(ANIM_MODE_1, NULL); BF_GLOBALS._player._moveDiff = Common::Point(3, 1); _lyleCar.postInit(); _lyleCar.setVisage(444); _lyleCar.setFrame(2); _lyleCar.setPosition(Common::Point(54, 114)); _lyleCar.setDetails(190, -1, -1, -1, 1, (SceneItem *)NULL); switch (BF_GLOBALS._sceneManager._previousScene) { case 300: { _sceneMode = 12; BF_GLOBALS._player.setPosition(Common::Point(316, 91)); ADD_MOVER(BF_GLOBALS._player, 305, 91); break; } case 315: _sceneMode = 1901; setAction(&_sequenceManager, this, 1901, &BF_GLOBALS._player, &_door, NULL); break; case 50: case 60: default: _fieldB52 = false; BF_GLOBALS._player.setPosition(Common::Point(62, 96)); BF_GLOBALS._player._strip = 3; BF_GLOBALS._player.enableControl(); break; } } else { BF_GLOBALS._player.setVisage(BF_GLOBALS._player._visage); BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper()); BF_GLOBALS._player.animate(ANIM_MODE_1, NULL); switch (BF_GLOBALS._sceneManager._previousScene) { case 300: { if (!BF_GLOBALS.getFlag(onBike)) { BF_GLOBALS._player._moveDiff = Common::Point(3, 1); _sceneMode = BF_GLOBALS.getFlag(onDuty) ? 11 : 12; BF_GLOBALS._player.setVisage(BF_GLOBALS.getFlag(onDuty) ? 1304 : 303); BF_GLOBALS._player.setPosition(Common::Point(316, 91)); ADD_MOVER(BF_GLOBALS._player, 305, 91); } else { BF_GLOBALS._player.disableControl(); _sceneMode = BF_GLOBALS.getFlag(onDuty) ? 193 : 191; setAction(&_sequenceManager, this, 193, &BF_GLOBALS._player, NULL); } break; } case 315: BF_GLOBALS._player._moveDiff = Common::Point(3, 1); _sceneMode = BF_GLOBALS.getFlag(onDuty) ? 1900 : 1901; setAction(&_sequenceManager, this, _sceneMode, &BF_GLOBALS._player, &_door, NULL); break; case 50: case 60: default: BF_GLOBALS.setFlag(onBike); BF_GLOBALS._player.disableControl(); // To be checked: Not present in the original T2_GLOBALS._uiElements._active = true; _sceneMode = BF_GLOBALS.getFlag(onDuty) ? 192 : 190; setAction(&_sequenceManager, this, _sceneMode, &BF_GLOBALS._player, NULL); break; } } if (BF_GLOBALS.getFlag(onBike)) { BF_GLOBALS._sound1.play(BF_GLOBALS.getFlag(onDuty) ? 37 : 29); } else if (BF_GLOBALS._sceneManager._previousScene != 300) { BF_GLOBALS._sound1.play(33); } _exit.setDetails(Rect(310, 50, 320, 125), 190, -1, -1, -1, 1, NULL); _item2.setDetails(Rect(108, 1, 111, 94), 190, 7, 11, 18, 1, NULL); _item4.setDetails(2, 190, 5, 10, 16, 1); _item3.setDetails(1, 190, 4, 10, 15, 1); _item8.setDetails(6, 190, 20, 21, 22, 1); _item1.setDetails(7, 190, 1, 10, -1, 1); _item7.setDetails(5, 190, 0, 10, 12, 1); _item6.setDetails(4, 190, 2, 10, 13, 1); _item5.setDetails(3, 190, 3, 10, 14, 1); _item9.setDetails(Rect(0, 0, 89, 68), 190, 6, 10, 17, 1, NULL); _item10.setDetails(Rect(0, 0, SCREEN_WIDTH, UI_INTERFACE_Y), 190, 23, -1, -1, 1, NULL); } void Scene190::signal() { switch (_sceneMode) { case 10: if ((BF_GLOBALS._dayNumber == 2) && (BF_GLOBALS._bookmark < bEndDayOne)) BF_GLOBALS._sound1.changeSound(49); BF_GLOBALS._sceneManager.changeScene(300); break; case 11: case 12: case 1900: case 1901: BF_GLOBALS._player.enableControl(); _fieldB52 = false; break; case 13: case 191: case 193: BF_GLOBALS._sceneManager.changeScene(60); break; case 190: case 192: BF_GLOBALS._sceneManager.changeScene(300); break; case 0: default: BF_GLOBALS._player.enableControl(); break; } } void Scene190::process(Event &event) { SceneExt::process(event); if (BF_GLOBALS._player._enabled && !_focusObject && (event.mousePos.y < (UI_INTERFACE_Y - 1))) { // Check if the cursor is on an exit if (_exit.contains(event.mousePos)) { GfxSurface surface = _cursorVisage.getFrame(3); BF_GLOBALS._events.setCursor(surface); } else { // In case an exit cursor was being shown, restore the previously selected cursor CursorType cursorId = BF_GLOBALS._events.getCursor(); BF_GLOBALS._events.setCursor(cursorId); } } } void Scene190::dispatch() { SceneExt::dispatch(); if (!_action && !_fieldB52 && (BF_GLOBALS._player._position.x >= 310) && !BF_GLOBALS.getFlag(onBike)) { // Handle walking off to the right side of the screen BF_GLOBALS._player.disableControl(); _fieldB52 = true; _sceneMode = 10; ADD_MOVER(BF_GLOBALS._player, 330, BF_GLOBALS._player._position.y); } } void Scene190::synchronize(Serializer &s) { SceneExt::synchronize(s); s.syncAsSint16LE(_fieldB52); } } // End of namespace BlueForce } // End of namespace TsAGE