aboutsummaryrefslogtreecommitdiff
path: root/engines/tsage/blue_force/blueforce_scenes8.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/tsage/blue_force/blueforce_scenes8.cpp')
-rw-r--r--engines/tsage/blue_force/blueforce_scenes8.cpp1397
1 files changed, 1397 insertions, 0 deletions
diff --git a/engines/tsage/blue_force/blueforce_scenes8.cpp b/engines/tsage/blue_force/blueforce_scenes8.cpp
new file mode 100644
index 0000000000..49de0be65c
--- /dev/null
+++ b/engines/tsage/blue_force/blueforce_scenes8.cpp
@@ -0,0 +1,1397 @@
+/* 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 "tsage/blue_force/blueforce_scenes8.h"
+#include "tsage/blue_force/blueforce_dialogs.h"
+#include "tsage/scenes.h"
+#include "tsage/tsage.h"
+#include "tsage/staticres.h"
+
+namespace TsAGE {
+
+namespace BlueForce {
+
+/*--------------------------------------------------------------------------
+ * Scene 800 - Jamison & Ryan
+ *
+ *--------------------------------------------------------------------------*/
+
+bool Scene800::Item1::startAction(CursorType action, Event &event) {
+ if (action == CURSOR_LOOK) {
+ SceneItem::display2(800, 11);
+ return true;
+ } else {
+ return SceneHotspot::startAction(action, event);
+ }
+}
+
+bool Scene800::Item2::startAction(CursorType action, Event &event) {
+ if (action == CURSOR_LOOK) {
+ SceneItem::display2(800, 1);
+ return true;
+ } else {
+ return SceneHotspot::startAction(action, event);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene800::Doorway::startAction(CursorType action, Event &event) {
+ Scene800 *scene = (Scene800 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(800, 4);
+ return true;
+ case CURSOR_USE:
+ if (BF_GLOBALS._dayNumber == 5)
+ SceneItem::display2(800, 14);
+ else if (BF_GLOBALS._dayNumber < 2)
+ SceneItem::display2(800, BF_GLOBALS.getFlag(onDuty) ? 6 : 15);
+ else if (((BF_INVENTORY.getObjectScene(INV_SCHEDULE) == 1) && (BF_GLOBALS._dayNumber == 3)) ||
+ (BF_GLOBALS._bookmark == bDoneWithIsland))
+ SceneItem::display(800, 5);
+ else {
+ if (BF_GLOBALS.getFlag(fWithLyle)) {
+ ADD_PLAYER_MOVER_NULL(scene->_lyle, 277, 145);
+ }
+
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 8000;
+ setAction(&scene->_sequenceManager, scene, 8000, &BF_GLOBALS._player, this, NULL);
+ }
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene800::Car1::startAction(CursorType action, Event &event) {
+ Scene800 *scene = (Scene800 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(800, 2);
+ return true;
+ case CURSOR_USE:
+ SceneItem::display2(800, 3);
+ return true;
+ case INV_TICKET_BOOK:
+ if (BF_GLOBALS.getFlag(ticketVW))
+ SceneItem::display2(800, 12);
+ else if (!BF_GLOBALS.getFlag(onDuty))
+ SceneItem::display2(800, 13);
+ else {
+ BF_GLOBALS.setFlag(ticketVW);
+ BF_GLOBALS._player.disableControl();
+ BF_GLOBALS._uiElements.addScore(30);
+ scene->_sceneMode = 8005;
+ scene->setAction(&scene->_action1);
+ }
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene800::Motorcycle::startAction(CursorType action, Event &event) {
+ Scene800 *scene = (Scene800 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(800, 0);
+ return true;
+ case CURSOR_USE:
+ if (BF_GLOBALS.getFlag(fWithLyle))
+ SceneItem::display2(800, 8);
+ else {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 8002;
+ setAction(&scene->_sequenceManager, scene, 8002, &BF_GLOBALS._player, this, NULL);
+ }
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene800::Lyle::startAction(CursorType action, Event &event) {
+ Scene800 *scene = (Scene800 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(800, 7);
+ return true;
+ case CURSOR_TALK:
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 8001;
+ scene->_stripManager.start(8003, scene);
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene800::Car2::startAction(CursorType action, Event &event) {
+ Scene800 *scene = (Scene800 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(800, 9);
+ return true;
+ case CURSOR_USE:
+ if (!BF_GLOBALS.getFlag(fWithLyle))
+ SceneItem::display2(800, 10);
+ else {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 8003;
+ setAction(&scene->_sequenceManager, scene, 8003, &BF_GLOBALS._player, &scene->_lyle, NULL);
+ }
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene800::Action1::signal() {
+ Scene800 *scene = (Scene800 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0: {
+ BF_GLOBALS._player.disableControl();
+ ADD_PLAYER_MOVER_THIS(BF_GLOBALS._player, 95, 153);
+ break;
+ }
+ case 1: {
+ ADD_MOVER(BF_GLOBALS._player, 70, 157);
+ break;
+ }
+ case 2:
+ BF_GLOBALS._player.setVisage(800);
+ BF_GLOBALS._player.setStrip(1);
+ BF_GLOBALS._player.setFrame(1);
+ BF_GLOBALS._player.fixPriority(200);
+ BF_GLOBALS._player.animate(ANIM_MODE_4, 16, 1, this);
+ break;
+ case 3:
+ scene->_object6.postInit();
+ scene->_object6.setVisage(800);
+ scene->_object6.setStrip(2);
+ scene->_object6.setFrame(2);
+ scene->_object6.setPosition(Common::Point(58, 135));
+ scene->_object6.fixPriority(170);
+ BF_GLOBALS._player.animate(ANIM_MODE_5, this);
+ break;
+ case 4:
+ BF_GLOBALS._player.setVisage(352);
+ BF_GLOBALS._player.setStrip(2);
+ BF_GLOBALS._player.setFrame(1);
+ BF_GLOBALS._player.fixPriority(-1);
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ ADD_MOVER(BF_GLOBALS._player, 89, 154);
+ break;
+ case 5:
+ BF_GLOBALS._player.enableControl();
+ remove();
+ break;
+ }
+
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene800::postInit(SceneObjectList *OwnerList) {
+ loadScene(800);
+ SceneExt::postInit();
+ setZoomPercents(130, 50, 155, 100);
+
+ _stripManager.addSpeaker(&_gameTextSpeaker);
+ _stripManager.addSpeaker(&_jakeJacketSpeaker);
+ _stripManager.addSpeaker(&_lyleHatSpeaker);
+
+ 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(319, 144));
+ BF_GLOBALS._player._moveDiff = Common::Point(3, 2);
+ BF_GLOBALS._player.changeZoom(-1);
+
+ _motorcycle.postInit();
+ _motorcycle.setVisage(301);
+ _motorcycle.setPosition(Common::Point(319, 162));
+
+ if ((BF_GLOBALS._dayNumber >= 2) && (BF_GLOBALS._dayNumber < 5)) {
+ _car2.postInit();
+ _car2.setVisage(444);
+ _car2.setStrip(3);
+ _car2.setFrame(2);
+ _car2.setPosition(Common::Point(237, 161));
+ _car2.changeZoom(110);
+ _car2.fixPriority(158);
+ BF_GLOBALS._sceneItems.push_back(&_car2);
+
+ BF_GLOBALS._walkRegions.proc1(8);
+ }
+
+ if ((BF_GLOBALS._dayNumber == 4) && (BF_GLOBALS._bookmark < bEndDayThree)) {
+ _car2.remove();
+ BF_GLOBALS._walkRegions.proc2(8);
+ }
+
+ if (BF_GLOBALS.getFlag(fWithLyle)) {
+ _lyle.postInit();
+ _lyle.setVisage(1359);
+ _lyle.setObjectWrapper(new SceneObjectWrapper());
+ _lyle.animate(ANIM_MODE_1, NULL);
+ _lyle.setPosition(Common::Point(210, 160));
+ _lyle.changeZoom(-1);
+ BF_GLOBALS._sceneItems.push_back(&_lyle);
+
+ _motorcycle.setVisage(580);
+ _motorcycle.setStrip(2);
+ _motorcycle.setFrame(2);
+ } else if (BF_GLOBALS.getFlag(onDuty)) {
+ BF_GLOBALS._player.setVisage(352);
+ } else {
+ _motorcycle.setVisage(580);
+ _motorcycle.setStrip(2);
+ _motorcycle.setFrame(2);
+ }
+ BF_GLOBALS._sceneItems.push_back(&_motorcycle);
+
+ _doorway.postInit();
+ _doorway.setVisage(800);
+ _doorway.setStrip(3);
+ _doorway.setPosition(Common::Point(287, 140));
+ BF_GLOBALS._sceneItems.push_back(&_doorway);
+
+ _car1.postInit();
+ _car1.setVisage(800);
+ _car1.setStrip(2);
+ _car1.setFrame(1);
+ _car1.setPosition(Common::Point(58, 163));
+ BF_GLOBALS._sceneItems.push_back(&_car1);
+
+ if (BF_GLOBALS._sceneManager._previousScene == 810) {
+ if (BF_GLOBALS.getFlag(fWithLyle)) {
+ BF_GLOBALS._player.setPosition(Common::Point(271, 148));
+ BF_GLOBALS._player.enableControl();
+ } else {
+ BF_GLOBALS._player.changeZoom(75);
+ BF_GLOBALS._player.setPosition(Common::Point(275, 135));
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 8001;
+ setAction(&_sequenceManager, this, 8001, &BF_GLOBALS._player, &_doorway, NULL);
+ }
+ } else if ((BF_INVENTORY.getObjectScene(INV_SCHEDULE) == 1) && (BF_GLOBALS._bookmark == bFlashBackThree)) {
+ BF_GLOBALS._bookmark = bFlashBackThree;
+ BF_GLOBALS._player.disableControl();
+ BF_GLOBALS._player.setPosition(Common::Point(231, 150));
+ BF_GLOBALS._player.setStrip(3);
+
+ _lyle.setPosition(Common::Point(244, 162));
+ _lyle.setStrip(4);
+ _sceneMode = 8004;
+ setAction(&_sequenceManager, this, 8001, &_lyle, &_doorway, NULL);
+ } else {
+ BF_GLOBALS._player.updateAngle(_motorcycle._position);
+ BF_GLOBALS._player.enableControl();
+ }
+
+ _item2.setBounds(Rect(47, 26, 319, 143));
+ BF_GLOBALS._sceneItems.push_back(&_item2);
+ _item1.setBounds(Rect(0, 0, 320, 165));
+ BF_GLOBALS._sceneItems.push_back(&_item1);
+
+ BF_GLOBALS._sound1.fadeSound(33);
+}
+
+void Scene800::signal() {
+ switch (_sceneMode) {
+ case 8000:
+ BF_GLOBALS._sceneManager.changeScene(810);
+ break;
+ case 8001:
+ case 8005:
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 8002:
+ case 8003:
+ BF_GLOBALS._sceneManager.changeScene(60);
+ break;
+ case 8004:
+ BF_GLOBALS.clearFlag(fWithLyle);
+ _lyle.remove();
+ }
+}
+
+void Scene800::dispatch() {
+ SceneExt::dispatch();
+ if (BF_GLOBALS._player.getRegionIndex() == 7) {
+ BF_GLOBALS._player.updateZoom();
+ } else {
+ BF_GLOBALS._player.changeZoom(-1);
+ }
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 830 - Outside Boat Rentals
+ *
+ *--------------------------------------------------------------------------*/
+
+bool Scene830::Lyle::startAction(CursorType action, Event &event) {
+ Scene830 *scene = (Scene830 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_TALK:
+ if (scene->_field18AA) {
+ scene->_stripManager.start(8304, &BF_GLOBALS._stripProxy);
+ } else {
+ scene->_stripManager.start(8303, &BF_GLOBALS._stripProxy);
+ ++scene->_field18AA;
+ }
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene830::Door::startAction(CursorType action, Event &event) {
+ Scene830 *scene = (Scene830 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ if (BF_GLOBALS._dayNumber == 2) {
+ scene->_sceneMode = 14;
+ Common::Point pt(186, 102);
+ PlayerMover *mover = new PlayerMover();
+ BF_GLOBALS._player.addMover(mover, &pt, NULL);
+ return true;
+ }
+ break;
+ case CURSOR_USE:
+ if (BF_GLOBALS._dayNumber == 2) {
+ scene->_sceneMode = 14;
+ Common::Point pt(186, 102);
+ PlayerMover *mover = new PlayerMover();
+ BF_GLOBALS._player.addMover(mover, &pt, NULL);
+ } else if (scene->_field18A4) {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 832;
+
+ if (BF_GLOBALS.getFlag(onDuty)) {
+ scene->setAction(&scene->_sequenceManager, scene, 8302, &BF_GLOBALS._player, &scene->_door, NULL);
+ } else if (BF_GLOBALS.getFlag(fWithLyle)) {
+ scene->_sceneMode = 11;
+ scene->setAction(&scene->_sequenceManager, scene, 8308, &BF_GLOBALS._player, &scene->_door, &scene->_lyle, NULL);
+ } else {
+ scene->setAction(&scene->_sequenceManager, scene, 832, &BF_GLOBALS._player, &scene->_door, NULL);
+ }
+ } else {
+ scene->_stripManager.start(8305, &BF_GLOBALS._stripProxy);
+ ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 192, 145);
+ }
+ return true;
+ default:
+ break;
+ }
+
+ return NamedObject::startAction(action, event);
+}
+
+bool Scene830::Object4::startAction(CursorType action, Event &event) {
+ Scene830 *scene = (Scene830 *)BF_GLOBALS._sceneManager._scene;
+
+ if (action == INV_RENTAL_KEYS) {
+ BF_GLOBALS._player.disableControl();
+ if (BF_GLOBALS.getFlag(fWithLyle)) {
+ scene->_sceneMode = 8300;
+ scene->setAction(&scene->_sequenceManager, scene, 8300, &BF_GLOBALS._player, &scene->_lyle, NULL);
+ } else {
+ scene->_sceneMode = 834;
+ scene->setAction(&scene->_sequenceManager, scene, 8300, &BF_GLOBALS._player, &scene->_object4, NULL);
+ }
+ return true;
+ } else {
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene830::Object5::startAction(CursorType action, Event &event) {
+ Scene830 *scene = (Scene830 *)BF_GLOBALS._sceneManager._scene;
+
+ if (action == CURSOR_USE) {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 8307;
+ scene->setAction(&scene->_sequenceManager, scene, 8307, &BF_GLOBALS._player, &scene->_object5, NULL);
+ return true;
+ } else {
+ return NamedObject::startAction(action, event);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene830::SouthEastExit::startAction(CursorType action, Event &event) {
+ ADD_PLAYER_MOVER(BF_GLOBALS._player._position.x + 80, BF_GLOBALS._player._position.y + 100);
+ return true;
+}
+
+bool Scene830::NoteBoard::startAction(CursorType action, Event &event) {
+ Scene830 *scene = (Scene830 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ if (BF_GLOBALS._sceneObjects->contains(&scene->_object6)) {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 8309;
+ scene->setAction(&scene->_sequenceManager, scene, 8309, &BF_GLOBALS._player, NULL);
+ return true;
+ }
+ break;
+ case CURSOR_USE:
+ if (BF_GLOBALS._sceneObjects->contains(&scene->_object6)) {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 8305;
+ scene->setAction(&scene->_sequenceManager, scene, 8305, &BF_GLOBALS._player, &scene->_object6, NULL);
+ return true;
+ }
+ break;
+ default:
+ break;
+ }
+
+ return NamedHotspot::startAction(action, event);
+}
+
+/*--------------------------------------------------------------------------*/
+
+Scene830::Scene830(): PalettedScene() {
+ _field18A4 = _field18A6 = _field18A8 = _field18AA = _field18AC = 0;
+}
+
+void Scene830::synchronize(Serializer &s) {
+ PalettedScene::synchronize(s);
+ s.syncAsByte(_field18A4);
+ s.syncAsByte(_field18A6);
+ s.syncAsByte(_field18A8);
+ s.syncAsByte(_field18AA);
+ s.syncAsByte(_field18AC);
+}
+
+void Scene830::postInit(SceneObjectList *OwnerList) {
+ PalettedScene::postInit();
+ loadScene(830);
+ _sound1.fadeSound(35);
+
+ _stripManager.addSpeaker(&_gameTextSpeaker);
+ _stripManager.addSpeaker(&_jakeJacketSpeaker);
+ _stripManager.addSpeaker(&_lyleHatSpeaker);
+
+ if (BF_GLOBALS._dayNumber == 0) {
+ BF_GLOBALS._sceneManager._previousScene = 340;
+ BF_GLOBALS._dayNumber = 1;
+ BF_GLOBALS.setFlag(fWithLyle);
+ }
+
+ _field18A8 = (BF_GLOBALS._dayNumber <= 3) ? 0 : 1;
+ _field18AC = 0;
+ BF_GLOBALS.clearFlag(fCanDrawGun);
+
+ _seExit.setDetails(Rect(183, 161, 320, 167), 830, -1, -1, -1, 1, NULL);
+
+ PaletteRotation *rot = BF_GLOBALS._scenePalette.addRotation(184, 189, 1);
+ rot->setDelay(30);
+
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.disableControl();
+
+ if (_field18A8) {
+ _object4.postInit();
+ _object4.setVisage(830);
+ _object4.setStrip(1);
+ _object4.setPosition(Common::Point(271, 146));
+ _object4.fixPriority(90);
+ _object4.setDetails(830, 0, 1, 2, 1, NULL);
+ }
+
+ _door.postInit();
+ _door.setVisage(830);
+ _door.setDetails(830, 3, 4, -1, 1, NULL);
+ _door.setStrip((BF_GLOBALS._dayNumber == 2) ? 4 : 3);
+ _door.setPosition(Common::Point(182, 97));
+
+ _field18A4 = 1;
+ _noteBoard.setDetails(1, 830, 30, 31, 32, 1);
+
+ switch (BF_GLOBALS._dayNumber) {
+ case 1:
+ if ((BF_GLOBALS._bookmark >= bEndOfWorkDayOne) && (BF_INVENTORY.getObjectScene(INV_CARTER_NOTE) != 1) &&
+ (BF_INVENTORY.getObjectScene(INV_CARTER_NOTE) != 3)) {
+ _object6.postInit();
+ _object6.setVisage(830);
+ _object6.setStrip(4);
+ _object6.setFrame(2);
+ _object6.setPosition(Common::Point(302, 124));
+ }
+ break;
+ case 4:
+ if (BF_INVENTORY.getObjectScene(INV_FISHING_NET) == 830) {
+ _object5.postInit();
+ _object5.setVisage(830);
+ _object5.setStrip(2);
+ _object5.setFrame(2);
+ _object5.setPosition(Common::Point(126, 133));
+ _object5.setDetails(830, 7, 8, -1, 1, NULL);
+ }
+ break;
+ case 5:
+ if ((BF_GLOBALS._sceneManager._previousScene == 840) && (BF_INVENTORY.getObjectScene(INV_RENTAL_KEYS) == 1) &&
+ !BF_GLOBALS.getFlag(fWithLyle)) {
+ _field18A4 = 0;
+
+ _lyle.postInit();
+ _lyle._flags = OBJFLAG_CHECK_REGION;
+ _lyle.setVisage(835);
+ _lyle.setObjectWrapper(new SceneObjectWrapper());
+ _lyle.animate(ANIM_MODE_1, NULL);
+ _lyle.setStrip(4);
+ _lyle.setPosition(Common::Point(180, 154));
+ _lyle._moveDiff = Common::Point(2, 0);
+ _lyle.setDetails(830, 28, -1, 29, 1, NULL);
+
+ _field18AC = 1;
+ }
+ break;
+ }
+
+ _item2.setDetails(7, 830, 9, 10, 11, 1);
+ _item4.setDetails(2, 830, 12, 13, 14, 1);
+ _item5.setDetails(3, 830, 15, 16, 17, 1);
+ _item6.setDetails(4, 830, 18, 19, 20, 1);
+ _item7.setDetails(5, 830, 21, 22, 23, 1);
+ _item8.setDetails(6, 830, 24, 25, 26, 1);
+
+ switch (BF_GLOBALS._sceneManager._previousScene) {
+ case 840:
+ _sceneMode = 833;
+ if (BF_GLOBALS.getFlag(onDuty)) {
+ setAction(&_sequenceManager, this, 8304, &BF_GLOBALS._player, &_door, NULL);
+ } else if (BF_GLOBALS.getFlag(fWithLyle)) {
+ _lyle.postInit();
+ _lyle._moveDiff = Common::Point(2, 0);
+ _sceneMode = 837;
+ setAction(&_sequenceManager, this, 837, &_lyle, &_door, &BF_GLOBALS._player, NULL);
+ } else {
+ setAction(&_sequenceManager, this, 833, &BF_GLOBALS._player, &_door, NULL);
+ }
+ break;
+ case 850:
+ BF_GLOBALS._player.setVisage(831);
+ BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ BF_GLOBALS._player.setStrip(3);
+ BF_GLOBALS._player._moveDiff = Common::Point(2, 0);
+ BF_GLOBALS._player.setPosition(Common::Point(220, 122));
+ BF_GLOBALS._player.enableControl();
+
+ if (BF_GLOBALS.getFlag(fWithLyle)) {
+ _lyle.postInit();
+ _lyle.setVisage(835);
+ _lyle.setObjectWrapper(new SceneObjectWrapper());
+ _lyle.animate(ANIM_MODE_1, NULL);
+ _lyle.setStrip(3);
+ _lyle._moveDiff = Common::Point(2, 0);
+ _lyle.setPosition(Common::Point(224, 126));
+ }
+
+ if ((BF_GLOBALS._bookmark == bEndDayThree) && (BF_INVENTORY.getObjectScene(INV_FISHING_NET) == 1)) {
+ BF_INVENTORY.setObjectScene(INV_FISHING_NET, 0);
+ BF_INVENTORY.setObjectScene(INV_HOOK, 0);
+ }
+ break;
+ case 340:
+ case 830:
+ default:
+ _sceneMode = 830;
+ setAction(&_sequenceManager, this, BF_GLOBALS.getFlag(onDuty) ? 8303 : 830, &BF_GLOBALS._player, NULL);
+
+ if (BF_GLOBALS.getFlag(fWithLyle)) {
+ _lyle.postInit();
+ _lyle.setVisage(835);
+ _lyle.setObjectWrapper(new SceneObjectWrapper());
+ _lyle.animate(ANIM_MODE_1, NULL);
+ _lyle.setPosition(Common::Point(SCREEN_WIDTH, SCREEN_HEIGHT));
+ _lyle._moveDiff = Common::Point(2, 0);
+ ADD_MOVER(_lyle, 280, 160);
+ }
+ break;
+ }
+
+ _field18A6 = 1;
+}
+
+void Scene830::remove() {
+ BF_GLOBALS._scenePalette.clearListeners();
+ PalettedScene::remove();
+}
+
+void Scene830::signal() {
+ static uint32 black = 0;
+
+ switch (_sceneMode) {
+ case 11:
+ _sceneMode = 832;
+ BF_GLOBALS._scenePalette.clearListeners();
+ addFader((const byte *)&black, 5, this);
+ BF_GLOBALS._v51C44 = 0;
+ break;
+ case 12:
+ _sceneMode = 831;
+ BF_GLOBALS._scenePalette.clearListeners();
+ addFader((const byte *)&black, 5, this);
+ BF_GLOBALS._v51C44 = 0;
+ break;
+ case 13:
+ BF_GLOBALS._sceneManager.changeScene(850);
+ break;
+ case 14:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 8312;
+
+ _object1.postInit();
+ setAction(&_sequenceManager, this, 8312, &_object1, NULL);
+ break;
+ case 830:
+ _field18A6 = 1;
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 831:
+ case 8306:
+ BF_GLOBALS._sceneManager.changeScene((BF_GLOBALS._bookmark < bStartOfGame) ||
+ (BF_GLOBALS._bookmark >= bCalledToDomesticViolence) ? 342 : 340);
+ break;
+ case 832:
+ BF_GLOBALS._sceneManager.changeScene(840);
+ break;
+ case 833:
+ if (_field18AC) {
+ BF_GLOBALS.setFlag(fWithLyle);
+ _sceneMode = 8311;
+ setAction(&_sequenceManager, this, 8311, &BF_GLOBALS._player, &_lyle, NULL);
+ } else {
+ BF_GLOBALS._player.enableControl();
+ BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ BF_GLOBALS._player._strip = 3;
+ BF_GLOBALS._player._frame = 1;
+ }
+ break;
+ case 834:
+ BF_GLOBALS._sceneManager.changeScene(850);
+ break;
+ case 837:
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 8300:
+ _sceneMode = 13;
+ BF_GLOBALS._scenePalette.clearListeners();
+ addFader((const byte *)&black, 5, this);
+ break;
+ case 8305:
+ _object6.remove();
+ BF_GLOBALS._player.enableControl();
+ BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ BF_GLOBALS._player._strip = 7;
+
+ BF_GLOBALS._uiElements.addScore(30);
+ BF_INVENTORY.setObjectScene(INV_CARTER_NOTE, 1);
+ break;
+ case 8307:
+ BF_GLOBALS._player.enableControl();
+ _object5.remove();
+ BF_GLOBALS._uiElements.addScore(30);
+ BF_INVENTORY.setObjectScene(INV_FISHING_NET, 1);
+ break;
+ case 8309:
+ case 8311:
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 8312:
+ _object1.remove();
+ BF_GLOBALS._player.enableControl();
+ break;
+ }
+}
+
+void Scene830::process(Event &event) {
+ if (BF_GLOBALS._player._enabled && (event.eventType == EVENT_BUTTON_DOWN) &&
+ (BF_GLOBALS._events.getCursor() == CURSOR_WALK) && !_field18A4) {
+ _stripManager.start(8306, &BF_GLOBALS._stripProxy);
+ event.handled = true;
+ }
+
+ if (BF_GLOBALS._player._enabled && (event.mousePos.y < (BF_INTERFACE_Y - 1))) {
+ // Check if the cursor is on an exit
+ if (_seExit.contains(event.mousePos)) {
+ GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_SE);
+ 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 Scene830::dispatch() {
+ SceneExt::dispatch();
+
+ if (!_action && _field18A6 && (BF_GLOBALS._player._position.y > 160)) {
+ if (!_field18A4) {
+ _stripManager.start(8305, &BF_GLOBALS._player);
+ ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 192, 145);
+ } else if ((BF_INVENTORY.getObjectScene(INV_RENTAL_KEYS) == 1) && (BF_GLOBALS._bookmark == bEndDayThree)) {
+ BF_GLOBALS._player.disableControl();
+ SceneItem::display2(830, 27);
+ _field18A6 = 0;
+ _sceneMode = 830;
+ ADD_PLAYER_MOVER(BF_GLOBALS._player._position.x - 10, BF_GLOBALS._player._position.y - 10);
+ } else {
+ BF_GLOBALS._player.disableControl();
+ _field18A6 = 0;
+ _sceneMode = 831;
+ ADD_PLAYER_MOVER(BF_GLOBALS._player._position.x + 40, BF_GLOBALS._player._position.y + 40);
+
+ if (BF_GLOBALS.getFlag(fWithLyle)) {
+ ADD_MOVER_NULL(_lyle, SCREEN_WIDTH, SCREEN_HEIGHT);
+ if (_lyle._position.y < 160)
+ _sceneMode = 12;
+ }
+ }
+ }
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 840 - Boat Rentals
+ *
+ *--------------------------------------------------------------------------*/
+
+void Scene840::Object2::postInit(SceneObjectList *OwnerList) {
+ FocusObject::postInit(OwnerList);
+
+ if (BF_INVENTORY.getObjectScene(INV_RENTAL_KEYS) != 1) {
+ _rentalKeys.postInit();
+ _rentalKeys.setVisage(840);
+ _rentalKeys.setStrip(2);
+ _rentalKeys.setFrame(3);
+ _rentalKeys.setPosition(Common::Point(120, 132));
+ _rentalKeys.fixPriority(255);
+ _rentalKeys.setDetails(840, 52, 8, -1, 2, NULL);
+ }
+
+ if (BF_INVENTORY.getObjectScene(INV_WAVE_KEYS) != 1) {
+ _waveKeys.postInit();
+ _waveKeys.setVisage(840);
+ _waveKeys.setStrip(2);
+ _waveKeys.setFrame(2);
+ _waveKeys.setPosition(Common::Point(201, 91));
+ _waveKeys.fixPriority(255);
+ _waveKeys.setDetails(840, 53, 8, -1, 2, NULL);
+ }
+
+ _v1B4 = _v1B6 = 0;
+}
+
+void Scene840::Object2::remove() {
+ Scene840 *scene = (Scene840 *)BF_GLOBALS._sceneManager._scene;
+
+ _rentalKeys.remove();
+ _waveKeys.remove();
+ BF_GLOBALS._player.disableControl();
+
+ scene->_sceneMode = 8412;
+ scene->setAction(&scene->_sequenceManager1, scene, 8412, &BF_GLOBALS._player, NULL);
+}
+
+void Scene840::Object2::process(Event &event) {
+ if (BF_GLOBALS._player._enabled) {
+ if (_bounds.contains(event.mousePos)) {
+ CursorType cursorId = BF_GLOBALS._events.getCursor();
+ BF_GLOBALS._events.setCursor(cursorId);
+
+ if ((event.eventType == EVENT_BUTTON_DOWN) && (cursorId == CURSOR_WALK) && (event.btnState == 3)) {
+ BF_GLOBALS._events.setCursor(CURSOR_USE);
+ event.handled = true;
+ }
+ } else if (event.mousePos.y < 168) {
+ BF_GLOBALS._events.setCursor(_img);
+ if (event.eventType == EVENT_BUTTON_DOWN) {
+ event.handled = true;
+ remove();
+ }
+ }
+ }
+
+ FocusObject::process(event);
+}
+
+bool Scene840::Object2::startAction(CursorType action, Event &event) {
+ switch (action) {
+ case CURSOR_LOOK:
+ if ((event.mousePos.y > 43) && (event.mousePos.y < 92)) {
+ if (event.mousePos.x < 135) {
+ SceneItem::display2(840, 54);
+ return true;
+ } else if (event.mousePos.x < 183) {
+ SceneItem::display2(840, 57);
+ return true;
+ }
+ } else if ((event.mousePos.y > 91) && (event.mousePos.y < 132)) {
+ if (event.mousePos.x > 182) {
+ SceneItem::display2(840, 58);
+ return true;
+ } else if (event.mousePos.x > 134) {
+ SceneItem::display2(840, 57);
+ return true;
+ }
+ }
+ break;
+ case INV_WAVE_KEYS:
+ if ((BF_GLOBALS._dayNumber != 4) || (BF_GLOBALS._bookmark != bEndDayThree))
+ SceneItem::display(840, 47);
+ else {
+ BF_GLOBALS._uiElements.addScore(50);
+
+ if (BF_INVENTORY.getObjectScene(INV_RENTAL_KEYS) == 1) {
+ // Replace rental keys
+ _rentalKeys.postInit();
+ _rentalKeys.setVisage(840);
+ _rentalKeys.setStrip(2);
+ _rentalKeys.setFrame(3);
+ _rentalKeys.setPosition(Common::Point(120, 132));
+ _rentalKeys.fixPriority(255);
+ _rentalKeys.setDetails(840, 52, 8, -1, 2, NULL);
+ }
+
+ if (BF_INVENTORY.getObjectScene(INV_WAVE_KEYS) == 1) {
+ // Replace wave keys
+ _waveKeys.postInit();
+ _waveKeys.setVisage(840);
+ _waveKeys.setStrip(2);
+ _waveKeys.setFrame(2);
+ _waveKeys.setPosition(Common::Point(201, 91));
+ _waveKeys.fixPriority(255);
+ _waveKeys.setDetails(840, 53, 8, -1, 2, NULL);
+ }
+
+ BF_INVENTORY.setObjectScene(INV_WAVE_KEYS, 0);
+ BF_INVENTORY.setObjectScene(INV_RENTAL_KEYS, 0);
+ }
+ return true;
+ default:
+ break;
+ }
+
+ return FocusObject::startAction(action, event);
+}
+
+bool Scene840::Object2::RentalKeys::startAction(CursorType action, Event &event) {
+ Scene840 *scene = (Scene840 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_USE:
+ if ((BF_GLOBALS._dayNumber == 4) && (BF_GLOBALS._bookmark >= bEndDayThree)) {
+ SceneItem::display2(840, 9);
+ } else {
+ SceneItem::display2(840, 55);
+ BF_INVENTORY.setObjectScene(INV_RENTAL_KEYS, 1);
+ BF_GLOBALS._uiElements.addScore(30);
+
+ scene->_object2._v1B4 = 1;
+ remove();
+ }
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene840::Object2::WaveKeys::startAction(CursorType action, Event &event) {
+ Scene840 *scene = (Scene840 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_USE:
+ if (scene->_field1AC2) {
+ SceneItem::display(840, 56);
+ BF_INVENTORY.setObjectScene(INV_WAVE_KEYS, 1);
+ BF_GLOBALS._uiElements.addScore(50);
+ scene->_object2._v1B6 = 1;
+ remove();
+ } else {
+ SceneItem::display2(840, 9);
+ }
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene840::Object6::startAction(CursorType action, Event &event) {
+ Scene840 *scene = (Scene840 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ scene->_object1.postInit();
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 8410;
+ scene->setAction(&scene->_sequenceManager1, scene, 8410, &scene->_object1, &BF_GLOBALS._player, NULL);
+ return true;
+ case CURSOR_USE:
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 8411;
+ scene->setAction(&scene->_sequenceManager1, scene, 8411, &BF_GLOBALS._player, NULL);
+ return true;
+ case INV_WAVE_KEYS:
+ case INV_RENTAL_KEYS:
+ if ((BF_GLOBALS._dayNumber == 4) && (BF_GLOBALS._bookmark == bEndDayThree)) {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 8417;
+ scene->setAction(&scene->_sequenceManager1, scene, 8417, &BF_GLOBALS._player, NULL);
+ } else {
+ SceneItem::display2(840, 47);
+ }
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene840::Carter::startAction(CursorType action, Event &event) {
+ Scene840 *scene = (Scene840 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_TALK:
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 1;
+
+ if ((BF_GLOBALS._player._position.x != 219) || (BF_GLOBALS._player._position.y != 129)) {
+ Common::Point pt(219, 129);
+ PlayerMover *mover = new PlayerMover();
+ BF_GLOBALS._player.addMover(mover, &pt, scene);
+ } else {
+ scene->signal();
+ }
+ return true;
+ case INV_RENTAL_COUPON: {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 6;
+
+ Common::Point pt(219, 129);
+ PlayerMover *mover = new PlayerMover();
+ BF_GLOBALS._player.addMover(mover, &pt, scene);
+ return true;
+ }
+ case INV_NICKEL:
+ ++BF_GLOBALS._v4CEB6;
+ BF_GLOBALS._player.disableControl();
+
+ if (BF_INVENTORY.getObjectScene(INV_WAVE_KEYS) == 1) {
+ if (!BF_GLOBALS.getFlag(fGotPointsForCombo)) {
+ BF_GLOBALS._uiElements.addScore(50);
+ BF_GLOBALS.setFlag(fGotPointsForCombo);
+ }
+ }
+
+ scene->_sceneMode = 8407;
+ scene->setAction(&scene->_sequenceManager1, scene, 8407, &BF_GLOBALS._player, NULL);
+ return true;
+ case INV_CARTER_NOTE:
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 8402;
+
+ if (!BF_GLOBALS._v4CEB6) {
+ scene->setAction(&scene->_sequenceManager1, scene, 8402, &BF_GLOBALS._player, &scene->_carter, NULL);
+ } else {
+ scene->setAction(&scene->_sequenceManager1, scene, 8414, &BF_GLOBALS._player, &scene->_carter, NULL);
+ }
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene840::Coins::startAction(CursorType action, Event &event) {
+ Scene840 *scene = (Scene840 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 8404;
+ scene->setAction(&scene->_sequenceManager1, scene, BF_GLOBALS.getFlag(onDuty) ? 8415 : 8404,
+ &BF_GLOBALS._player, NULL);
+ return true;
+ default:
+ return NamedHotspot::startAction(action, event);
+ }
+}
+
+bool Scene840::Exit::startAction(CursorType action, Event &event) {
+ ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 315, 150);
+ return true;
+}
+
+/*--------------------------------------------------------------------------*/
+
+Scene840::Scene840(): PalettedScene() {
+ _field1ABC = 1;
+ _field1ABE = 0;
+ _field1AC0 = 0;
+ _field1AC2 = 0;
+ _field1AC4 = 0;
+ _field1AC6 = (BF_GLOBALS._dayNumber > 3) ? 1 : 0;
+}
+
+void Scene840::synchronize(Serializer &s) {
+ PalettedScene::synchronize(s);
+
+ s.syncAsSint16LE(_field1ABA);
+ s.syncAsSint16LE(_field1ABC);
+ s.syncAsSint16LE(_field1ABE);
+ s.syncAsSint16LE(_field1AC0);
+ s.syncAsSint16LE(_field1AC2);
+ s.syncAsSint16LE(_field1AC4);
+ s.syncAsSint16LE(_field1AC6);
+}
+
+void Scene840::postInit(SceneObjectList *OwnerList) {
+ PalettedScene::postInit(OwnerList);
+ BF_GLOBALS._sound1.changeSound(41);
+ loadScene(840);
+ _field1ABA = 0;
+
+ if (BF_GLOBALS._dayNumber == 0) {
+ // Debugging mode setup
+ BF_GLOBALS._dayNumber = 4;
+ BF_INVENTORY.setObjectScene(INV_NICKEL, 1);
+ BF_INVENTORY.setObjectScene(INV_RENTAL_COUPON, 1);
+ }
+
+ setZoomPercents(0, 90, 110, 100);
+ _exit.setDetails(Rect(310, 133, 320, 167), 840, -1, -1, -1, 1, NULL);
+
+ _stripManager.addSpeaker(&_gameTextSpeaker);
+ _stripManager.addSpeaker(&_jakeJacketSpeaker);
+ _stripManager.addSpeaker(&_jakeUniformSpeaker);
+ _stripManager.addSpeaker(&_carterSpeaker);
+
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.changeZoom(-1);
+ BF_GLOBALS._player._moveDiff.x = BF_GLOBALS.getFlag(onDuty) ? 8 : 7;
+
+ _doors.postInit();
+ _doors.setVisage(840);
+ _doors.setStrip(3);
+ _doors.setPosition(Common::Point(157, 81));
+ _doors.setDetails(840, 0, 1, 2, 1, NULL);
+
+ _carter.postInit();
+ _carter.setVisage(843);
+ _carter.setStrip(6);
+ _carter.fixPriority(110);
+ _carter.setPosition(Common::Point(262, 128));
+ _carter.changeZoom(-1);
+
+ _item14.setDetails(1, 840, 29, 30, 31, 1);
+ _item2.setDetails(Rect(6, 5, 85, 31), 840, 16, 14, 12, 1, NULL);
+ _item3.setDetails(Rect(91, 7, 102, 26), 840, 17, 14, 12, 1, NULL);
+ _item4.setDetails(Rect(6, 49, 80, 67), 840, 18, 15, 13, 1, NULL);
+ _item5.setDetails(Rect(80, 29, 100, 65), 840, 19, 15, 13, 1, NULL);
+ _item6.setDetails(Rect(104, 32, 127, 78), 840, 20, 15, 13, 1, NULL);
+ _item7.setDetails(Rect(1, 106, 35, 166), 840, 21, 15, 13, 1, NULL);
+ _item9.setDetails(Rect(205, 17, 251, 60), 840, 23, 15, 13, 1, NULL);
+ _item10.setDetails(Rect(199, 56, 236, 80), 840, 24, 14, 12, 1, NULL);
+ _item11.setDetails(Rect(256, 94, 319, 118), 840, 25, 15, 13, 1, NULL);
+ _item18.setDetails(6, 840, 38, 39, 40, 1);
+ _carter.setDetails(840, 3, 4, 5, 1, NULL);
+ _item8.setDetails(Rect(259, 4, 319, 87), 840, 22, 15, 13, 1, NULL);
+ _item15.setDetails(2, 840, 32, 33, 34, 1);
+ _coins.setDetails(3, 840, -1, 6, 7, 1);
+ _item16.setDetails(4, 840, 44, 45, 46, 1);
+ _item17.setDetails(5, 840, 26, 27, 28, 1);
+ _item12.setDetails(7, 840, 35, 36, 37, 1);
+ _item13.setDetails(Rect(0, 0, SCREEN_WIDTH - 1, BF_INTERFACE_Y), 840, 41, 42, 43, 1, NULL);
+
+ if (BF_INVENTORY.getObjectScene(INV_RENTAL_KEYS) == 1) {
+ _object6.postInit();
+ _object6.setVisage(840);
+ _object6.setStrip(4);
+ _object6.setFrame(1);
+ _object6.setPosition(Common::Point(250, 83));
+ _object6.fixPriority(120);
+ _object6.setDetails(840, -1, 8, 9, 2, NULL);
+ _field1AC0 = 1;
+ }
+
+ _sceneMode = BF_GLOBALS.getFlag(onDuty) ? 8401 : 8400;
+ setAction(&_sequenceManager1, this, _sceneMode, &BF_GLOBALS._player, NULL);
+
+ if (BF_GLOBALS.getFlag(fWithLyle)) {
+ _lyle.postInit();
+ _lyle.setAction(&_sequenceManager2, NULL, 8405, &_lyle, NULL);
+ }
+}
+
+void Scene840::signal() {
+ switch (_sceneMode) {
+ case 1:
+ // Talking to Carter
+ BF_GLOBALS._player._strip = 7;
+ BF_GLOBALS._player._frame = 1;
+ _sceneMode = 3;
+
+ switch (BF_GLOBALS._dayNumber) {
+ case 1:
+ if (_field1ABA == 1) {
+ _stripManager.start(BF_GLOBALS.getFlag(onDuty) ? 8430 : 8406, this);
+ } else if (!BF_GLOBALS.getFlag(onDuty)) {
+ _stripManager.start(!BF_GLOBALS._v4CEB6 ? 8400 : 8406, this);
+ } else if (BF_GLOBALS._bookmark < bStartOfGame) {
+ _stripManager.start(!BF_GLOBALS._v4CEB6 ? 8429 : 8430, this);
+ } else if (BF_GLOBALS._bookmark < bCalledToDomesticViolence) {
+ _stripManager.start(!BF_GLOBALS._v4CEB6 ? 8402 : 8401, this);
+ } else {
+ _stripManager.start(!BF_GLOBALS._v4CEB6 ? 8404 : 8403, this);
+ }
+ break;
+ case 2:
+ _stripManager.start(!BF_GLOBALS._v4CEB6 ? 8405 : 8430, this);
+ break;
+ case 3:
+ if (!BF_GLOBALS._v4CEB6) {
+ _stripManager.start(BF_GLOBALS.getFlag(fWithLyle) ? 8409 : 8411, this);
+ } else if (_field1ABA == 1) {
+ _stripManager.start(8406, this);
+ } else if (BF_GLOBALS.getFlag(fWithLyle)) {
+ _stripManager.start(BF_GLOBALS.getFlag(fCarterMetLyle) ? 8415 : 8414, this);
+ } else {
+ _stripManager.start(8413, this);
+ }
+
+ BF_GLOBALS.setFlag(fTalkedCarterDay3);
+ break;
+ case 4:
+ if (!BF_GLOBALS._v4CEB6) {
+ if (BF_GLOBALS.getFlag(fTalkedCarterDay3)) {
+ if (BF_GLOBALS.getFlag(fWithLyle))
+ _stripManager.start(BF_GLOBALS.getFlag(fCarterMetLyle) ? 8415 : 8414, this);
+ else
+ _stripManager.start(8413, this);
+ } else if (BF_GLOBALS.getFlag(fWithLyle)) {
+ _stripManager.start(BF_GLOBALS.getFlag(fCarterMetLyle) ? 8431 : 8409, this);
+ } else {
+ _stripManager.start(8411, this);
+ }
+ } else if (_field1ABA == 1) {
+ _stripManager.start(8406, this);
+ } else if (!BF_GLOBALS.getFlag(fWithLyle)) {
+ _stripManager.start(8413, this);
+ } else {
+ _stripManager.start(BF_GLOBALS.getFlag(fCarterMetLyle) ? 8415 : 8414, this);
+ }
+ break;
+ case 5:
+ _stripManager.start((_field1ABA == 1) ? 8406 : 8413, this);
+ break;
+ default:
+ break;
+ }
+
+ _field1ABA = 1;
+ break;
+ case 2:
+ BF_GLOBALS._sceneManager.changeScene(830);
+ BF_GLOBALS._sound1.changeSound(10);
+ break;
+ case 3:
+ case 8404:
+ case 8416:
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 4:
+ _sceneMode = 8403;
+ _object6.postInit();
+ _object6.setDetails(840, -1, 8, 9, 2, NULL);
+ setAction(&_sequenceManager1, this, 8403, &_carter, &_object6, NULL);
+ break;
+ case 5:
+ _sceneMode = 8408;
+ setAction(&_sequenceManager1, this, 8408, &BF_GLOBALS._player, &_carter, &_doors, NULL);
+ _field1AC2 = 1;
+ break;
+ case 6:
+ BF_GLOBALS._player._strip = 7;
+ BF_GLOBALS._player._frame = 1;
+
+ if ((BF_GLOBALS._dayNumber == 4) && (BF_GLOBALS._bookmark >= bEndDayThree)) {
+ _stripManager.start(8440, this);
+ _sceneMode = 3;
+ } else if (BF_GLOBALS._sceneObjects->contains(&_object6)) {
+ _stripManager.start(8442, this);
+ _sceneMode = 3;
+ } else if (_field1AC6) {
+ _sceneMode = 4;
+ _stripManager.start(BF_GLOBALS.getFlag(fWithLyle) ? 8424 : 8410, this);
+ } else {
+ _sceneMode = 3;
+ _stripManager.start(8436, this);
+ }
+ break;
+ case 8400:
+ case 8401:
+ BF_GLOBALS._player._strip = 7;
+ BF_GLOBALS._player._frame = 1;
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 8402:
+ BF_GLOBALS._player.enableControl();
+ BF_GLOBALS._uiElements.addScore(30);
+ BF_INVENTORY.setObjectScene(INV_CARTER_NOTE, 3);
+ BF_INVENTORY.setObjectScene(INV_BASEBALL_CARD, 1);
+ BF_INVENTORY.setObjectScene(INV_RENTAL_COUPON, 1);
+ break;
+ case 8403:
+ BF_GLOBALS._uiElements.addScore(30);
+ _sceneMode = 3;
+ _field1AC0 = 1;
+ _stripManager.start(8441, this);
+ break;
+ case 8407:
+ if (((BF_GLOBALS._dayNumber == 4) && (BF_GLOBALS._bookmark >= bEndDayThree)) ||
+ (BF_INVENTORY.getObjectScene(INV_WAVE_KEYS) == 1)) {
+ _sceneMode = 8416;
+ setAction(&_sequenceManager1, this, 8416, &BF_GLOBALS._player, NULL);
+ } else {
+ _stripManager.start(_field1ABE + 8419, this);
+ _sceneMode = 5;
+
+ if (++_field1ABE == 4)
+ _field1ABE = 1;
+ }
+ break;
+ case 8408:
+ if (_field1AC0) {
+ BF_GLOBALS._player.enableControl();
+ } else {
+ _sceneMode = 8409;
+ setAction(&_sequenceManager1, this, 8409, &BF_GLOBALS._player, &_carter, &_doors, NULL);
+ }
+ break;
+ case 8409:
+ _field1AC2 = 0;
+ _sceneMode = 3;
+ _stripManager.start(8423, this);
+ break;
+ case 8410:
+ BF_GLOBALS._player.enableControl();
+ _object1.remove();
+ break;
+ case 8411:
+ BF_GLOBALS._player.enableControl();
+ _object2.postInit();
+ _object2.setVisage(840);
+ _object2.setStrip(2);
+ _object2.setPosition(Common::Point(160, 140));
+ _object2.fixPriority(254);
+ _object2.setDetails(840, 50, 8, 51);
+ break;
+ case 8412:
+ if (_object2._v1B6) {
+ _sceneMode = 8409;
+ setAction(&_sequenceManager1, this, 8409, &BF_GLOBALS._player, &_carter, &_doors, NULL);
+ } else if (!_object2._v1B4) {
+ BF_GLOBALS._player.enableControl();
+ } else {
+ _sceneMode = 3;
+ _field1AC0 = 1;
+
+ if (BF_GLOBALS._dayNumber == 5) {
+ _stripManager.start(8425, this);
+ } else {
+ _stripManager.start(BF_GLOBALS.getFlag(INV_NICKEL) ? 8417 : 8416, this);
+ }
+ }
+ break;
+ case 8413:
+ BF_GLOBALS._uiElements.addScore(50);
+ _sceneMode = 8409;
+ setAction(&_sequenceManager1, this, 8409, &BF_GLOBALS._player, &_carter, &_doors, NULL);
+ break;
+ case 8417:
+ _field1ABA = 1;
+ BF_GLOBALS._uiElements.addScore(50);
+ BF_INVENTORY.setObjectScene(INV_WAVE_KEYS, 0);
+ BF_INVENTORY.setObjectScene(INV_RENTAL_KEYS, 0);
+ BF_GLOBALS._player.enableControl();
+ break;
+ }
+}
+
+void Scene840::process(Event &event) {
+ SceneExt::process(event);
+
+ if (BF_GLOBALS._player._enabled && !_focusObject && (event.mousePos.y < (BF_INTERFACE_Y - 1))) {
+ if (_exit.contains(event.mousePos)) {
+ GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_E);
+ 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 Scene840::dispatch() {
+ SceneExt::dispatch();
+
+ if (_field1ABC && (BF_GLOBALS._player._position.x > 310) && !_action) {
+ _field1ABC = 0;
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 2;
+ ADD_PLAYER_MOVER(350, 150);
+
+ if (BF_GLOBALS.getFlag(fWithLyle)) {
+ _lyle.setAction(&_sequenceManager2, NULL, 8406, &_lyle, NULL);
+ }
+ }
+}
+
+} // End of namespace BlueForce
+
+} // End of namespace TsAGE