aboutsummaryrefslogtreecommitdiff
path: root/engines/tsage
diff options
context:
space:
mode:
Diffstat (limited to 'engines/tsage')
-rw-r--r--engines/tsage/blue_force/blueforce_dialogs.cpp434
-rw-r--r--engines/tsage/blue_force/blueforce_dialogs.h92
-rw-r--r--engines/tsage/blue_force/blueforce_logic.cpp1548
-rw-r--r--engines/tsage/blue_force/blueforce_logic.h394
-rw-r--r--engines/tsage/blue_force/blueforce_scenes0.cpp1136
-rw-r--r--engines/tsage/blue_force/blueforce_scenes0.h190
-rw-r--r--engines/tsage/blue_force/blueforce_scenes1.cpp3399
-rw-r--r--engines/tsage/blue_force/blueforce_scenes1.h488
-rw-r--r--engines/tsage/blue_force/blueforce_scenes2.cpp1853
-rw-r--r--engines/tsage/blue_force/blueforce_scenes2.h298
-rw-r--r--engines/tsage/blue_force/blueforce_scenes3.cpp5930
-rw-r--r--engines/tsage/blue_force/blueforce_scenes3.h893
-rw-r--r--engines/tsage/blue_force/blueforce_scenes4.cpp1674
-rw-r--r--engines/tsage/blue_force/blueforce_scenes4.h268
-rw-r--r--engines/tsage/blue_force/blueforce_scenes5.cpp2555
-rw-r--r--engines/tsage/blue_force/blueforce_scenes5.h407
-rw-r--r--engines/tsage/blue_force/blueforce_scenes6.cpp515
-rw-r--r--engines/tsage/blue_force/blueforce_scenes6.h125
-rw-r--r--engines/tsage/blue_force/blueforce_scenes7.cpp277
-rw-r--r--engines/tsage/blue_force/blueforce_scenes7.h103
-rw-r--r--engines/tsage/blue_force/blueforce_scenes8.cpp3612
-rw-r--r--engines/tsage/blue_force/blueforce_scenes8.h568
-rw-r--r--engines/tsage/blue_force/blueforce_scenes9.cpp3892
-rw-r--r--engines/tsage/blue_force/blueforce_scenes9.h498
-rw-r--r--engines/tsage/blue_force/blueforce_speakers.cpp1023
-rw-r--r--engines/tsage/blue_force/blueforce_speakers.h359
-rw-r--r--engines/tsage/blueforce_logic.cpp120
-rw-r--r--engines/tsage/converse.cpp154
-rw-r--r--engines/tsage/converse.h15
-rw-r--r--engines/tsage/core.cpp944
-rw-r--r--engines/tsage/core.h94
-rw-r--r--engines/tsage/debugger.cpp137
-rw-r--r--engines/tsage/debugger.h7
-rw-r--r--engines/tsage/detection.cpp56
-rw-r--r--engines/tsage/detection_tables.h70
-rw-r--r--engines/tsage/dialogs.cpp228
-rw-r--r--engines/tsage/dialogs.h40
-rw-r--r--engines/tsage/events.cpp116
-rw-r--r--engines/tsage/events.h44
-rw-r--r--engines/tsage/globals.cpp258
-rw-r--r--engines/tsage/globals.h161
-rw-r--r--engines/tsage/graphics.cpp165
-rw-r--r--engines/tsage/graphics.h6
-rw-r--r--engines/tsage/module.mk45
-rw-r--r--engines/tsage/resources.cpp19
-rw-r--r--engines/tsage/resources.h9
-rw-r--r--engines/tsage/ringworld/ringworld_demo.cpp (renamed from engines/tsage/ringworld_demo.cpp)34
-rw-r--r--engines/tsage/ringworld/ringworld_demo.h (renamed from engines/tsage/ringworld_demo.h)12
-rw-r--r--engines/tsage/ringworld/ringworld_dialogs.cpp222
-rw-r--r--engines/tsage/ringworld/ringworld_dialogs.h70
-rw-r--r--engines/tsage/ringworld/ringworld_logic.cpp691
-rw-r--r--engines/tsage/ringworld/ringworld_logic.h191
-rw-r--r--engines/tsage/ringworld/ringworld_scenes1.cpp (renamed from engines/tsage/ringworld_scenes1.cpp)930
-rw-r--r--engines/tsage/ringworld/ringworld_scenes1.h (renamed from engines/tsage/ringworld_scenes1.h)20
-rw-r--r--engines/tsage/ringworld/ringworld_scenes10.cpp (renamed from engines/tsage/ringworld_scenes10.cpp)1042
-rw-r--r--engines/tsage/ringworld/ringworld_scenes10.h (renamed from engines/tsage/ringworld_scenes10.h)24
-rw-r--r--engines/tsage/ringworld/ringworld_scenes2.cpp (renamed from engines/tsage/ringworld_scenes2.cpp)244
-rw-r--r--engines/tsage/ringworld/ringworld_scenes2.h (renamed from engines/tsage/ringworld_scenes2.h)13
-rw-r--r--engines/tsage/ringworld/ringworld_scenes3.cpp (renamed from engines/tsage/ringworld_scenes3.cpp)2038
-rw-r--r--engines/tsage/ringworld/ringworld_scenes3.h (renamed from engines/tsage/ringworld_scenes3.h)13
-rw-r--r--engines/tsage/ringworld/ringworld_scenes4.cpp (renamed from engines/tsage/ringworld_scenes4.cpp)52
-rw-r--r--engines/tsage/ringworld/ringworld_scenes4.h (renamed from engines/tsage/ringworld_scenes4.h)13
-rw-r--r--engines/tsage/ringworld/ringworld_scenes5.cpp (renamed from engines/tsage/ringworld_scenes5.cpp)1496
-rw-r--r--engines/tsage/ringworld/ringworld_scenes5.h (renamed from engines/tsage/ringworld_scenes5.h)12
-rw-r--r--engines/tsage/ringworld/ringworld_scenes6.cpp (renamed from engines/tsage/ringworld_scenes6.cpp)895
-rw-r--r--engines/tsage/ringworld/ringworld_scenes6.h (renamed from engines/tsage/ringworld_scenes6.h)12
-rw-r--r--engines/tsage/ringworld/ringworld_scenes8.cpp (renamed from engines/tsage/ringworld_scenes8.cpp)650
-rw-r--r--engines/tsage/ringworld/ringworld_scenes8.h (renamed from engines/tsage/ringworld_scenes8.h)13
-rw-r--r--engines/tsage/ringworld/ringworld_speakers.cpp (renamed from engines/tsage/ringworld_logic.cpp)603
-rw-r--r--engines/tsage/ringworld/ringworld_speakers.h (renamed from engines/tsage/ringworld_logic.h)144
-rw-r--r--engines/tsage/ringworld2/ringworld2_dialogs.cpp193
-rw-r--r--engines/tsage/ringworld2/ringworld2_dialogs.h (renamed from engines/tsage/blueforce_logic.h)46
-rw-r--r--engines/tsage/ringworld2/ringworld2_logic.cpp761
-rw-r--r--engines/tsage/ringworld2/ringworld2_logic.h250
-rw-r--r--engines/tsage/ringworld2/ringworld2_scenes0.cpp331
-rw-r--r--engines/tsage/ringworld2/ringworld2_scenes0.h84
-rw-r--r--engines/tsage/saveload.cpp61
-rw-r--r--engines/tsage/saveload.h21
-rw-r--r--engines/tsage/scenes.cpp268
-rw-r--r--engines/tsage/scenes.h28
-rw-r--r--engines/tsage/sound.cpp477
-rw-r--r--engines/tsage/sound.h101
-rw-r--r--engines/tsage/staticres.cpp76
-rw-r--r--engines/tsage/staticres.h67
-rw-r--r--engines/tsage/tsage.cpp83
-rw-r--r--engines/tsage/tsage.h17
-rw-r--r--engines/tsage/user_interface.cpp529
-rw-r--r--engines/tsage/user_interface.h150
88 files changed, 42489 insertions, 5707 deletions
diff --git a/engines/tsage/blue_force/blueforce_dialogs.cpp b/engines/tsage/blue_force/blueforce_dialogs.cpp
new file mode 100644
index 0000000000..86feceb015
--- /dev/null
+++ b/engines/tsage/blue_force/blueforce_dialogs.cpp
@@ -0,0 +1,434 @@
+/* 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/translation.h"
+
+#include "gui/dialog.h"
+#include "gui/widget.h"
+
+#include "tsage/tsage.h"
+#include "tsage/core.h"
+#include "tsage/dialogs.h"
+#include "tsage/staticres.h"
+#include "tsage/globals.h"
+#include "tsage/blue_force/blueforce_dialogs.h"
+#include "tsage/ringworld/ringworld_logic.h"
+
+namespace TsAGE {
+
+namespace BlueForce {
+
+/**
+ * This dialog implements the right-click dialog
+ */
+RightClickDialog::RightClickDialog() : GfxDialog() {
+ // Setup button areas
+ _rectList1[0] = Rect(7, 50, 41, 67);
+ _rectList1[1] = Rect(13, 27, 50, 50);
+ _rectList1[2] = Rect(49, 27, 84, 50);
+ _rectList1[3] = Rect(56, 50, 90, 67);
+ _rectList1[4] = Rect(26, 68, 69, 99);
+
+ _rectList3[0] = Rect(12, 49, 27, 64);
+ _rectList3[1] = Rect(27, 31, 42, 46);
+ _rectList3[2] = Rect(56, 31, 71, 46);
+ _rectList3[3] = Rect(72, 50, 87, 65);
+ _rectList3[4] = Rect(41, 81, 56, 96);
+
+ // Set the palette and change the cursor
+ GfxSurface cursor = surfaceFromRes(1, 5, 9);
+ BF_GLOBALS._events.setCursor(cursor);
+
+ setPalette();
+
+ // Get the dialog image
+ _surface = surfaceFromRes(1, 1, 1);
+
+ // Set the dialog position
+ Rect dialogRect;
+ dialogRect.resize(_surface, 0, 0, 100);
+ dialogRect.center(g_globals->_events._mousePos.x, g_globals->_events._mousePos.y);
+
+ // Ensure the dialog will be entirely on-screen
+ Rect screenRect = g_globals->gfxManager()._bounds;
+ screenRect.collapse(4, 4);
+ dialogRect.contain(screenRect);
+
+ // Load selected button images
+ _btnImages.setVisage(1, 2);
+
+ _bounds = dialogRect;
+ _gfxManager._bounds = _bounds;
+
+ _highlightedAction = -1;
+ _selectedAction = -1;
+}
+
+RightClickDialog::~RightClickDialog() {
+}
+
+void RightClickDialog::draw() {
+ // Save the covered background area
+ _savedArea = Surface_getArea(g_globals->_gfxManagerInstance.getSurface(), _bounds);
+
+ // Draw the dialog image
+ g_globals->gfxManager().copyFrom(_surface, _bounds.left, _bounds.top);
+
+ // Pre-process rect lists
+ for (int idx = 0; idx < 5; ++idx) {
+ _rectList2[idx] = _rectList1[idx];
+ _rectList4[idx] = _rectList3[idx];
+
+ _rectList2[idx].translate(_bounds.left, _bounds.top);
+ _rectList4[idx].translate(_bounds.left, _bounds.top);
+ }
+}
+
+bool RightClickDialog::process(Event &event) {
+ switch (event.eventType) {
+ case EVENT_MOUSE_MOVE: {
+ // Check whether a button is highlighted
+ int buttonIndex = 0;
+ while ((buttonIndex < 5) && !_rectList1[buttonIndex].contains(event.mousePos))
+ ++buttonIndex;
+ if (buttonIndex == 5)
+ buttonIndex = -1;
+
+ // If selection has changed, handle it
+ if (buttonIndex != _highlightedAction) {
+ if (_highlightedAction != -1) {
+ // Another button was previously selected, so restore dialog
+ _gfxManager.copyFrom(_surface, 0, 0);
+ }
+
+ if (buttonIndex != -1) {
+ // Draw newly selected button
+ GfxSurface btn = _btnImages.getFrame(buttonIndex + 1);
+ _gfxManager.copyFrom(btn, _rectList3[buttonIndex].left, _rectList3[buttonIndex].top);
+ }
+
+ _highlightedAction = buttonIndex;
+ }
+
+ event.handled = true;
+ return true;
+ }
+
+ case EVENT_BUTTON_DOWN:
+ // Specify the selected action
+ _selectedAction = (_highlightedAction == -1) ? 5 : _highlightedAction;
+ event.handled = true;
+ return true;
+
+ default:
+ break;
+ }
+
+ return false;
+}
+
+void RightClickDialog::execute() {
+ // Draw the dialog
+ draw();
+
+ // Dialog event handler loop
+ _gfxManager.activate();
+
+ while (!g_vm->shouldQuit() && (_selectedAction == -1)) {
+ Event evt;
+ while (g_globals->_events.getEvent(evt, EVENT_MOUSE_MOVE | EVENT_BUTTON_DOWN)) {
+ evt.mousePos.x -= _bounds.left;
+ evt.mousePos.y -= _bounds.top;
+
+ process(evt);
+ }
+
+ g_system->delayMillis(10);
+ g_system->updateScreen();
+ }
+
+ // Execute the specified action
+ CursorType cursorNum = CURSOR_NONE;
+ switch (_selectedAction) {
+ case 0:
+ // Walk action
+ cursorNum = BF_GLOBALS._player._canWalk ? CURSOR_WALK : CURSOR_USE;
+ break;
+ case 1:
+ // Use action
+ cursorNum = CURSOR_USE;
+ break;
+ case 2:
+ // Look action
+ cursorNum = CURSOR_LOOK;
+ break;
+ case 3:
+ // Talk action
+ cursorNum = CURSOR_TALK;
+ break;
+ case 4:
+ // Options dialog
+ break;
+ }
+
+ if (cursorNum != CURSOR_NONE)
+ BF_GLOBALS._events.setCursor(cursorNum);
+
+ _gfxManager.deactivate();
+}
+
+/*--------------------------------------------------------------------------*/
+
+AmmoBeltDialog::AmmoBeltDialog() : GfxDialog() {
+ _cursorNum = BF_GLOBALS._events.getCursor();
+ _inDialog = -1;
+ _closeFlag = false;
+
+ // Get the dialog image
+ _surface = surfaceFromRes(9, 5, 2);
+
+ // Set the dialog position
+ _dialogRect.resize(_surface, 0, 0, 100);
+ _dialogRect.center(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2);
+
+ _bounds = _dialogRect;
+ _gfxManager._bounds = _bounds;
+ _savedArea = NULL;
+
+ // Set up area rects
+ _gunRect.set(0, 0, 82, 48);
+ _clip1Rect.set(90, 6, _bounds.width(), 39);
+ _clip2Rect.set(90, 40, _bounds.width(), _bounds.height());
+ _loadedRect.set(50, 40, 60, 50);
+}
+
+AmmoBeltDialog::~AmmoBeltDialog() {
+ BF_GLOBALS._events.setCursor(_cursorNum);
+}
+
+void AmmoBeltDialog::execute() {
+ // Draw the dialog
+ draw();
+
+ // Dialog event handler loop
+ _gfxManager.activate();
+
+ while (!g_vm->shouldQuit() && !_closeFlag) {
+ Event evt;
+ while (g_globals->_events.getEvent(evt, EVENT_MOUSE_MOVE | EVENT_BUTTON_DOWN)) {
+ evt.mousePos.x -= _bounds.left;
+ evt.mousePos.y -= _bounds.top;
+
+ process(evt);
+ }
+
+ g_system->delayMillis(10);
+ g_system->updateScreen();
+ }
+
+ _gfxManager.deactivate();
+}
+
+bool AmmoBeltDialog::process(Event &event) {
+ switch (event.eventType) {
+ case EVENT_MOUSE_MOVE: {
+ // Handle updating cursor depending on whether cursor is in dialog or not
+ int inDialog = Rect(0, 0, _bounds.width(), _bounds.height()).contains(event.mousePos);
+ if (inDialog != _inDialog) {
+ // Update cursor
+ BF_GLOBALS._events.setCursor(inDialog ? CURSOR_USE : CURSOR_EXIT);
+ _inDialog = inDialog;
+ }
+ return true;
+ }
+
+ case EVENT_BUTTON_DOWN:
+ if (!_inDialog)
+ // Clicked outside dialog, so flag to close it
+ _closeFlag = true;
+ else {
+ int v = (BF_GLOBALS.getFlag(fGunLoaded) ? 1 : 0) * (BF_GLOBALS.getFlag(fLoadedSpare) ? 2 : 1);
+
+ // Handle first clip
+ if ((v != 1) && _clip1Rect.contains(event.mousePos)) {
+ if (BF_GLOBALS.getFlag(fGunLoaded)) {
+ event.mousePos.x = event.mousePos.y = 0;
+ }
+
+ BF_GLOBALS.setFlag(fGunLoaded);
+ BF_GLOBALS.clearFlag(fLoadedSpare);
+ }
+
+ // Handle second clip
+ if ((v != 2) && _clip2Rect.contains(event.mousePos)) {
+ if (BF_GLOBALS.getFlag(fGunLoaded)) {
+ event.mousePos.x = event.mousePos.y = 0;
+ }
+
+ BF_GLOBALS.setFlag(fGunLoaded);
+ BF_GLOBALS.setFlag(fLoadedSpare);
+ }
+
+ if (_gunRect.contains(event.mousePos) && BF_GLOBALS.getFlag(fGunLoaded)) {
+ BF_GLOBALS.clearFlag(fGunLoaded);
+ v = (BF_GLOBALS.getFlag(fGunLoaded) ? 1 : 0) * (BF_GLOBALS.getFlag(fLoadedSpare) ? 2 : 1);
+
+ if (v != 2)
+ BF_GLOBALS.clearFlag(fLoadedSpare);
+ }
+
+ draw();
+ }
+
+ return true;
+
+ case EVENT_KEYPRESS:
+ if ((event.kbd.keycode == Common::KEYCODE_ESCAPE) || (event.kbd.keycode == Common::KEYCODE_RETURN)) {
+ // Escape pressed, so flag to close dialog
+ _closeFlag = true;
+ return true;
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ return false;
+}
+
+void AmmoBeltDialog::draw() {
+ Rect bounds = _bounds;
+
+ if (!_savedArea) {
+ // Save the covered background area
+ _savedArea = Surface_getArea(g_globals->_gfxManagerInstance.getSurface(), _bounds);
+ } else {
+ bounds.moveTo(0, 0);
+ }
+
+ // Draw the dialog image
+ g_globals->gfxManager().copyFrom(_surface, bounds.left, bounds.top);
+
+ // Setup clip flags
+ bool clip1 = true, clip2 = true;
+ bool gunLoaded = BF_GLOBALS.getFlag(fGunLoaded);
+ if (gunLoaded) {
+ // A clip is currently loaded. Hide the appropriate clip
+ if (BF_GLOBALS.getFlag(fLoadedSpare))
+ clip2 = false;
+ else
+ clip1 = false;
+ }
+
+ // Draw the first clip if necessary
+ if (clip1) {
+ GfxSurface clipSurface = surfaceFromRes(9, 6, BF_GLOBALS._clip1Bullets);
+ _clip1Rect.resize(clipSurface, _clip1Rect.left, _clip1Rect.top, 100);
+ g_globals->gfxManager().copyFrom(clipSurface, bounds.left + _clip1Rect.left,
+ bounds.top + _clip1Rect.top);
+ }
+
+ // Draw the second clip if necessary
+ if (clip2) {
+ GfxSurface clipSurface = surfaceFromRes(9, 6, BF_GLOBALS._clip2Bullets);
+ _clip2Rect.resize(clipSurface, _clip2Rect.left, _clip2Rect.top, 100);
+ g_globals->gfxManager().copyFrom(clipSurface, bounds.left + _clip2Rect.left,
+ bounds.top + _clip2Rect.top);
+ }
+
+ // If a clip is loaded, draw the 'loaded' portion of the gun
+ if (gunLoaded) {
+ GfxSurface loadedSurface = surfaceFromRes(9, 7, 1);
+ _loadedRect.resize(loadedSurface, _loadedRect.left, _loadedRect.top, 100);
+ g_globals->gfxManager().copyFrom(loadedSurface, bounds.left + _loadedRect.left,
+ bounds.top + _loadedRect.top);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+RadioConvDialog::RadioConvDialog() : GfxDialog() {
+ int idx;
+
+ // Set up the list of buttons
+ int maxWidth = 0;
+ for (idx = 0; idx < 8; ++idx) {
+ _buttons[idx].setText(RADIO_BTN_LIST[idx]);
+ maxWidth = MAX(maxWidth, (int)_buttons[idx]._bounds.width());
+
+ add(&_buttons[idx]);
+ }
+
+ // Set up the button positions and add them to the dialog
+ for (idx = 0; idx < 8; ++idx) {
+ _buttons[idx]._bounds.moveTo((idx % 2) * maxWidth + 2,
+ idx / 2 * _buttons[idx]._bounds.height() + 2);
+ _buttons[idx]._bounds.setWidth(maxWidth);
+
+ add(&_buttons[idx]);
+ }
+
+ // Set the dialog size and position
+ setDefaults();
+ setTopLeft(8, 92);
+
+ BF_GLOBALS._events.setCursor(CURSOR_ARROW);
+}
+
+RadioConvDialog::~RadioConvDialog() {
+ BF_GLOBALS._events.setCursor(CURSOR_WALK);
+}
+
+int RadioConvDialog::execute() {
+ GfxButton *btn = GfxDialog::execute();
+
+ // Get which button was pressed
+ int btnIndex = -1;
+ for (int idx = 0; idx < 8; ++idx) {
+ if (btn == &_buttons[idx]) {
+ btnIndex = idx;
+ break;
+ }
+ }
+
+ return btnIndex;
+}
+
+int RadioConvDialog::show() {
+ // Show the dialog
+ RadioConvDialog *dlg = new RadioConvDialog();
+ dlg->draw();
+
+ int btnIndex = dlg->execute();
+
+ // Close the dialog
+ dlg->remove();
+ delete dlg;
+
+ return btnIndex;
+}
+
+
+} // End of namespace BlueForce
+
+} // End of namespace TsAGE
diff --git a/engines/tsage/blue_force/blueforce_dialogs.h b/engines/tsage/blue_force/blueforce_dialogs.h
new file mode 100644
index 0000000000..ca51c97aa2
--- /dev/null
+++ b/engines/tsage/blue_force/blueforce_dialogs.h
@@ -0,0 +1,92 @@
+/* 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.
+ *
+ */
+
+#ifndef TSAGE_BLUEFORCE_DIALOGS_H
+#define TSAGE_BLUEFORCE_DIALOGS_H
+
+#include "gui/options.h"
+#include "tsage/dialogs.h"
+#include "tsage/events.h"
+#include "tsage/graphics.h"
+#include "common/list.h"
+#include "common/rect.h"
+#include "common/system.h"
+
+namespace TsAGE {
+
+namespace BlueForce {
+
+using namespace TsAGE;
+
+class RightClickDialog : public GfxDialog {
+private:
+ GfxSurface _surface;
+ Visage _btnImages;
+ Rect _rectList1[5];
+ Rect _rectList2[5];
+ Rect _rectList3[5];
+ Rect _rectList4[5];
+
+ int _highlightedAction;
+ int _selectedAction;
+public:
+ RightClickDialog();
+ ~RightClickDialog();
+
+ virtual void draw();
+ virtual bool process(Event &event);
+ void execute();
+};
+
+class AmmoBeltDialog : public GfxDialog {
+private:
+ GfxSurface _surface;
+ Visage _cursorImages;
+ Rect _dialogRect, _loadedRect, _gunRect, _clip1Rect, _clip2Rect;
+ CursorType _cursorNum;
+ int _inDialog;
+ bool _closeFlag;
+public:
+ AmmoBeltDialog();
+ ~AmmoBeltDialog();
+
+ virtual void draw();
+ virtual bool process(Event &event);
+ void execute();
+};
+
+class RadioConvDialog : public GfxDialog {
+private:
+ GfxButton _buttons[8];
+public:
+ RadioConvDialog();
+ virtual ~RadioConvDialog();
+ int execute();
+
+ static int show();
+};
+
+} // End of namespace BlueForce
+
+} // End of namespace TsAGE
+
+#endif
diff --git a/engines/tsage/blue_force/blueforce_logic.cpp b/engines/tsage/blue_force/blueforce_logic.cpp
new file mode 100644
index 0000000000..130cf557b2
--- /dev/null
+++ b/engines/tsage/blue_force/blueforce_logic.cpp
@@ -0,0 +1,1548 @@
+/* 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_logic.h"
+#include "tsage/blue_force/blueforce_dialogs.h"
+#include "tsage/blue_force/blueforce_scenes0.h"
+#include "tsage/blue_force/blueforce_scenes1.h"
+#include "tsage/blue_force/blueforce_scenes2.h"
+#include "tsage/blue_force/blueforce_scenes3.h"
+#include "tsage/blue_force/blueforce_scenes4.h"
+#include "tsage/blue_force/blueforce_scenes5.h"
+#include "tsage/blue_force/blueforce_scenes6.h"
+#include "tsage/blue_force/blueforce_scenes7.h"
+#include "tsage/blue_force/blueforce_scenes8.h"
+#include "tsage/blue_force/blueforce_scenes9.h"
+#include "tsage/scenes.h"
+#include "tsage/tsage.h"
+#include "tsage/graphics.h"
+#include "tsage/staticres.h"
+
+namespace TsAGE {
+
+namespace BlueForce {
+
+void BlueForceGame::start() {
+ // Start the game
+ g_globals->_sceneManager.changeScene(20);
+}
+
+Scene *BlueForceGame::createScene(int sceneNumber) {
+ switch (sceneNumber) {
+ /* Scene Group #0 */
+ case 20:
+ // Tsunami Title Screen
+ return new Scene20();
+ case 50:
+ // Map screen
+ return new Scene50();
+ case 60:
+ // Motorcycle
+ return new Scene60();
+ /* Scene Group #1 */
+ case 100:
+ // Tsnunami Title Screen #2
+ return new Scene100();
+ case 109:
+ // Introduction - Bar Room
+ return new Scene109();
+ case 110:
+ // Introduction - Outside the bar
+ return new Scene110();
+ case 114:
+ // Outside Tony's Bar
+ return new Scene114();
+ case 115:
+ // Inside Tony's Bar
+ return new Scene115();
+ case 125:
+ // Intro - Chase in the city
+ return new Scene125();
+ case 140:
+ // Intro - Burglar near the House
+ return new Scene140();
+ case 150:
+ // Intro - Burglar inside the house
+ return new Scene150();
+ case 160:
+ // Intro - Burial
+ return new Scene160();
+ case 180:
+ // Front of Home
+ return new Scene180();
+ case 190:
+ // Front of Police Station
+ return new Scene190();
+ case 200:
+ // Credits - Motorcycle Training
+ return new Scene200();
+ case 210:
+ // Credits - Car Training
+ return new Scene210();
+ case 220:
+ // Credits - Martial Arts
+ return new Scene220();
+ case 225:
+ // Credits - Gun Training
+ return new Scene225();
+ case 265:
+ // Intro - Graduation Article
+ return new Scene265();
+ case 270:
+ // Living Room & Kitchen
+ return new Scene270();
+ case 271:
+ // Living Room & Kitchen #2
+ return new Scene271();
+ case 280:
+ // Bedroom Flashback cut-scene
+ return new Scene280();
+ case 300:
+ // Outside Police Station
+ return new Scene300();
+ case 315:
+ // Inside Police Station
+ return new Scene315();
+ case 325:
+ // Police Station Conference Room
+ return new Scene325();
+ case 330:
+ // Approaching Marina
+ return new Scene330();
+ case 340:
+ // Marina, Domestic Disturbance
+ return new Scene340();
+ case 342:
+ // Marina, Normal
+ return new Scene342();
+ case 350:
+ // Marina, Outside Boat
+ return new Scene350();
+ case 355:
+ // Future Wave Exterior
+ return new Scene355();
+ case 360:
+ // Future Wave Interior
+ return new Scene360();
+ case 370:
+ // Future Wave Bedroom
+ return new Scene370();
+ case 380:
+ // Outside City Hall & Jail
+ return new Scene380();
+ case 385:
+ // City Hall
+ return new Scene385();
+ case 390:
+ // City Jail
+ return new Scene390();
+ case 410:
+ // Traffic Stop Gang Members
+ return new Scene410();
+ case 415:
+ // Searching Truck
+ return new Scene415();
+ case 440:
+ // Outside Alleycat Bowl
+ return new Scene440();
+ case 450:
+ // Inside Alleycat Bowl
+ return new Scene450();
+ case 550:
+ // Outside Bikini Hut
+ return new Scene550();
+ case 551:
+ // Outside Bikini Hut (Drunk Stop)
+ return new Scene551();
+ case 560:
+ // Study
+ return new Scene560();
+ case 570:
+ // Computer
+ return new Scene570();
+ case 580:
+ // Child Protective Services Parking Lot
+ return new Scene580();
+ case 590:
+ // Child Protective Services
+ return new Scene590();
+ case 600:
+ // Crash cut-scene
+ return new Scene600();
+ case 620:
+ // Hospital cut-scene
+ return new Scene620();
+ case 666:
+ // Death scene
+ return new Scene666();
+ case 690:
+ // Decking
+ return new Scene690();
+ case 710:
+ // Beach
+ return new Scene710();
+ case 800:
+ // Jamison & Ryan
+ return new Scene800();
+ case 810:
+ // Lyle's Office
+ return new Scene810();
+ case 820:
+ // Microfiche Reader
+ return new Scene820();
+ case 830:
+ // Outside Boat Rentals
+ return new Scene830();
+ case 840:
+ // Boat Rentals
+ return new Scene840();
+ case 850:
+ // Boat Leaving/Entering Marina
+ return new Scene850();
+ case 860:
+ // Boat Entering Cove
+ return new Scene860();
+ case 870:
+ // Cove Beach
+ return new Scene870();
+ case 880:
+ // Beach Path
+ return new Scene880();
+ case 900:
+ // Outside the Warehouse
+ return new Scene900();
+ case 910:
+ // Inside the Warehouse
+ return new Scene910();
+ case 920:
+ // Inside the Warehouse: Secret room
+ return new Scene920();
+ case 930:
+ // Inside the caravan
+ return new Scene930();
+ case 935:
+ // Hidden in the wardrobe
+ return new Scene935();
+ case 940:
+ // Jail ending animation
+ return new Scene940();
+ default:
+ error("Unknown scene number - %d", sceneNumber);
+ break;
+ }
+}
+
+/**
+ * Returns true if it is currently okay to restore a game
+ */
+bool BlueForceGame::canLoadGameStateCurrently() {
+ return true;
+}
+
+/**
+ * Returns true if it is currently okay to save the game
+ */
+bool BlueForceGame::canSaveGameStateCurrently() {
+ return true;
+}
+
+void BlueForceGame::rightClick() {
+ RightClickDialog *dlg = new RightClickDialog();
+ dlg->execute();
+ delete dlg;
+}
+
+void BlueForceGame::processEvent(Event &event) {
+ if (event.eventType == EVENT_KEYPRESS) {
+ switch (event.kbd.keycode) {
+ case Common::KEYCODE_F1:
+ // F1 - Help
+ MessageDialog::show(HELP_MSG, OK_BTN_STRING);
+ break;
+
+ case Common::KEYCODE_F2:
+ // F2 - Sound Options
+ SoundDialog::execute();
+ break;
+
+ case Common::KEYCODE_F3:
+ // F3 - Quit
+ quitGame();
+ event.handled = false;
+ break;
+
+ case Common::KEYCODE_F4:
+ // F4 - Restart
+ restartGame();
+ g_globals->_events.setCursorFromFlag();
+ break;
+
+ case Common::KEYCODE_F7:
+ // F7 - Restore
+ restoreGame();
+ g_globals->_events.setCursorFromFlag();
+ break;
+
+ case Common::KEYCODE_F10:
+ // F10 - Pause
+ GfxDialog::setPalette();
+ MessageDialog::show(GAME_PAUSED_MSG, OK_BTN_STRING);
+ g_globals->_events.setCursorFromFlag();
+ break;
+
+ default:
+ break;
+ }
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+AObjectArray::AObjectArray(): EventHandler() {
+ _inUse = false;
+ clear();
+}
+
+void AObjectArray::clear() {
+ for (int i = 0; i < OBJ_ARRAY_SIZE; ++i)
+ _objList[i] = NULL;
+}
+
+void AObjectArray::synchronize(Serializer &s) {
+ EventHandler::synchronize(s);
+ for (int i = 0; i < OBJ_ARRAY_SIZE; ++i)
+ SYNC_POINTER(_objList[i]);
+}
+
+void AObjectArray::process(Event &event) {
+ if (_inUse)
+ error("Array error");
+ _inUse = true;
+
+ for (int i = 0; i < OBJ_ARRAY_SIZE; ++i) {
+ if (_objList[i])
+ _objList[i]->process(event);
+ }
+
+ _inUse = false;
+}
+
+void AObjectArray::dispatch() {
+ if (_inUse)
+ error("Array error");
+ _inUse = true;
+
+ for (int i = 0; i < OBJ_ARRAY_SIZE; ++i) {
+ if (_objList[i])
+ _objList[i]->dispatch();
+ }
+
+ _inUse = false;
+}
+
+int AObjectArray::getNewIndex() {
+ for (int i = 0; i < OBJ_ARRAY_SIZE; ++i) {
+ if (!_objList[i])
+ return i;
+ }
+ error("AObjectArray too full.");
+}
+
+void AObjectArray::add(EventHandler *obj) {
+ int idx = getNewIndex();
+ _objList[idx] = obj;
+}
+
+void AObjectArray::remove(EventHandler *obj) {
+ for (int i = 0; i < OBJ_ARRAY_SIZE; ++i) {
+ if (_objList[i] == obj) {
+ _objList[i] = NULL;
+ return;
+ }
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+Timer::Timer() {
+ _endFrame = 0;
+ _endHandler = NULL;
+ _tickAction = NULL;
+}
+
+void Timer::remove() {
+ _endFrame = 0;
+ _endHandler = NULL;
+
+ ((Scene100 *)BF_GLOBALS._sceneManager._scene)->removeTimer(this);
+}
+
+void Timer::synchronize(Serializer &s) {
+ EventHandler::synchronize(s);
+ SYNC_POINTER(_tickAction);
+ SYNC_POINTER(_endHandler);
+ s.syncAsUint32LE(_endFrame);
+}
+
+void Timer::signal() {
+ assert(_endHandler);
+ EventHandler *item = _endHandler;
+ remove();
+ item->signal();
+}
+
+void Timer::dispatch() {
+ if (_tickAction)
+ _tickAction->dispatch();
+
+ if (_endFrame) {
+ uint32 frameNumber = BF_GLOBALS._events.getFrameNumber();
+ if (frameNumber > _endFrame)
+ // Timer has expired
+ signal();
+ }
+}
+
+void Timer::set(uint32 delay, EventHandler *endHandler) {
+ assert(delay != 0);
+
+ _endFrame = BF_GLOBALS._sceneHandler->getFrameDifference() + delay;
+ _endHandler = endHandler;
+
+ ((SceneExt *)BF_GLOBALS._sceneManager._scene)->addTimer(this);
+}
+
+/*--------------------------------------------------------------------------*/
+
+TimerExt::TimerExt(): Timer() {
+ _action = NULL;
+}
+
+void TimerExt::set(uint32 delay, EventHandler *endHandler, Action *newAction) {
+ _newAction = newAction;
+ Timer::set(delay, endHandler);
+}
+
+void TimerExt::synchronize(Serializer &s) {
+ EventHandler::synchronize(s);
+ SYNC_POINTER(_action);
+}
+
+void TimerExt::remove() {
+ _action = NULL;
+ Timer::remove();
+}
+
+void TimerExt::signal() {
+ EventHandler *endHandler = _endHandler;
+ Action *newAction = _newAction;
+ remove();
+
+ // If the end action doesn't have an action anymore, set it to the specified new action
+ assert(endHandler);
+ if (!endHandler->_action)
+ endHandler->setAction(newAction);
+}
+
+/*--------------------------------------------------------------------------*/
+
+void SceneItemType2::startMove(SceneObject *sceneObj, va_list va) {
+}
+
+/*--------------------------------------------------------------------------*/
+
+void NamedObject::postInit(SceneObjectList *OwnerList) {
+ _lookLineNum = _talkLineNum = _useLineNum = -1;
+ SceneObject::postInit();
+}
+
+void NamedObject::synchronize(Serializer &s) {
+ SceneObject::synchronize(s);
+ s.syncAsSint16LE(_resNum);
+ s.syncAsSint16LE(_lookLineNum);
+ s.syncAsSint16LE(_talkLineNum);
+ s.syncAsSint16LE(_useLineNum);
+}
+
+bool NamedObject::startAction(CursorType action, Event &event) {
+ bool handled = true;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ if (_lookLineNum == -1)
+ handled = false;
+ else
+ SceneItem::display2(_resNum, _lookLineNum);
+ break;
+ case CURSOR_USE:
+ if (_useLineNum == -1)
+ handled = false;
+ else
+ SceneItem::display2(_resNum, _useLineNum);
+ break;
+ case CURSOR_TALK:
+ if (_talkLineNum == -1)
+ handled = false;
+ else
+ SceneItem::display2(_resNum, _talkLineNum);
+ break;
+ default:
+ handled = false;
+ break;
+ }
+
+ if (!handled)
+ handled = ((SceneExt *)BF_GLOBALS._sceneManager._scene)->display(action);
+ return handled;
+}
+
+void NamedObject::setDetails(int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode, SceneItem *item) {
+ _resNum = resNum;
+ _lookLineNum = lookLineNum;
+ _talkLineNum = talkLineNum;
+ _useLineNum = useLineNum;
+
+ switch (mode) {
+ case 2:
+ g_globals->_sceneItems.push_front(this);
+ break;
+ case 4:
+ g_globals->_sceneItems.addBefore(item, this);
+ break;
+ case 5:
+ g_globals->_sceneItems.addAfter(item, this);
+ break;
+ default:
+ g_globals->_sceneItems.push_back(this);
+ break;
+ }
+}
+
+void NamedObject::setDetails(int resNum, int lookLineNum, int talkLineNum, int useLineNum) {
+ _resNum = resNum;
+ _lookLineNum = lookLineNum;
+ _talkLineNum = talkLineNum;
+ _useLineNum = useLineNum;
+}
+
+/*--------------------------------------------------------------------------*/
+
+CountdownObject::CountdownObject(): NamedObject() {
+ _countDown = 0;
+}
+
+void CountdownObject::synchronize(Serializer &s) {
+ SceneObject::synchronize(s);
+ s.syncAsSint16LE(_countDown);
+}
+
+void CountdownObject::dispatch() {
+ int frameNum = _frame;
+ SceneObject::dispatch();
+
+ if ((frameNum != _frame) && (_countDown > 0)) {
+ if (--_countDown == 0) {
+ animate(ANIM_MODE_NONE, 0);
+ _frame = 1;
+ }
+ }
+}
+
+void CountdownObject::fixCountdown(int mode, ...) {
+ if (mode == 8) {
+ va_list va;
+ va_start(va, mode);
+
+ _countDown = va_arg(va, int);
+ animate(ANIM_MODE_8, _countDown, NULL);
+ va_end(va);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+FollowerObject::FollowerObject(): NamedObject() {
+ _object = NULL;
+}
+
+void FollowerObject::synchronize(Serializer &s) {
+ NamedObject::synchronize(s);
+ SYNC_POINTER(_object);
+}
+
+void FollowerObject::remove() {
+ NamedObject::remove();
+ _object = NULL;
+}
+
+void FollowerObject::dispatch() {
+ SceneObject::dispatch();
+ assert(_object);
+
+ if ((_object->_flags & OBJFLAG_HIDE) || ((_object->_visage != 307) &&
+ ((_object->_visage != 308) || (_object->_strip != 1)))) {
+ hide();
+ } else if ((_object->_visage != 308) || (_object->_strip != 1)) {
+ show();
+ setStrip(_object->_strip);
+ setPosition(_object->_position, _object->_yDiff);
+ }
+}
+
+void FollowerObject::reposition() {
+ assert(_object);
+ setStrip(_object->_strip);
+ setPosition(_object->_position, _object->_yDiff);
+ NamedObject::reposition();
+}
+
+void FollowerObject::setup(SceneObject *object, int visage, int frameNum, int yDiff) {
+ SceneObject::postInit();
+ _object = object;
+ _yDiff = yDiff;
+ setVisage(visage);
+ setFrame(frameNum);
+
+ dispatch();
+}
+
+/*--------------------------------------------------------------------------*/
+
+FocusObject::FocusObject(): NamedObject() {
+ _img = surfaceFromRes(1, 5, 7);
+}
+
+void FocusObject::postInit(SceneObjectList *OwnerList) {
+ NamedObject::postInit(OwnerList);
+ _resNum = 560;
+ _lookLineNum = 43;
+ _talkLineNum = 44;
+ _useLineNum = -1;
+ _v90 = 0;
+ _v92 = 1;
+
+ SceneExt *scene = (SceneExt *)BF_GLOBALS._sceneManager._scene;
+ scene->_focusObject = this;
+ BF_GLOBALS._sceneItems.push_front(this);
+}
+
+void FocusObject::synchronize(Serializer &s) {
+ NamedObject::synchronize(s);
+ s.syncAsSint16LE(_v90);
+ s.syncAsSint16LE(_v92);
+}
+
+void FocusObject::remove() {
+ BF_GLOBALS._sceneItems.remove(this);
+
+ SceneExt *scene = (SceneExt *)BF_GLOBALS._sceneManager._scene;
+ if (scene->_focusObject == this)
+ scene->_focusObject = NULL;
+
+ BF_GLOBALS._events.setCursor(BF_GLOBALS._events.getCursor());
+ NamedObject::remove();
+}
+
+void FocusObject::process(Event &event) {
+ if (BF_GLOBALS._player._enabled) {
+ if (_bounds.contains(event.mousePos)) {
+ // Reset the cursor back to normal
+ BF_GLOBALS._events.setCursor(BF_GLOBALS._events.getCursor());
+
+ if ((event.eventType == EVENT_BUTTON_DOWN) && (BF_GLOBALS._events.getCursor() == CURSOR_WALK) &&
+ (event.btnState == 3)) {
+ BF_GLOBALS._events.setCursor(CURSOR_USE);
+ event.handled = true;
+ }
+ } else if (event.mousePos.y < 168) {
+ // Change the cursor to an 'Exit' image
+ BF_GLOBALS._events.setCursor(_img);
+ if (event.eventType == EVENT_BUTTON_DOWN) {
+ // Remove the object from display
+ event.handled = true;
+ remove();
+ }
+ }
+ }
+
+ if (_action)
+ _action->process(event);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SceneExt::SceneExt(): Scene() {
+ _stripManager._onBegin = SceneExt::startStrip;
+ _stripManager._onEnd = SceneExt::endStrip;
+
+ _field372 = _field37A = 0;
+ _savedPlayerEnabled = false;
+ _savedUiEnabled = false;
+ _savedCanWalk = false;
+ _focusObject = NULL;
+ _cursorVisage.setVisage(1, 8);
+}
+
+void SceneExt::postInit(SceneObjectList *OwnerList) {
+ Scene::postInit(OwnerList);
+ if (BF_GLOBALS._dayNumber) {
+ // Blank out the bottom portion of the screen
+ BF_GLOBALS._interfaceY = UI_INTERFACE_Y;
+
+ Rect r(0, UI_INTERFACE_Y, SCREEN_WIDTH, SCREEN_HEIGHT);
+ BF_GLOBALS.gfxManager().getSurface().fillRect(r, 0);
+ }
+}
+
+void SceneExt::remove() {
+ T2_GLOBALS._uiElements.hide();
+ T2_GLOBALS._uiElements.resetClear();
+
+ // Below code originally in Blue Force Scene::remove(). Placed here to avoid contaminating
+ // core class with Blue Force specific code
+ if (_action) {
+ if (_action->_endHandler)
+ _action->_endHandler = NULL;
+ _action->remove();
+ }
+
+ _focusObject = NULL;
+}
+
+void SceneExt::process(Event &event) {
+ _objArray2.process(event);
+ if (!event.handled)
+ Scene::process(event);
+}
+
+void SceneExt::dispatch() {
+ _timerList.dispatch();
+
+ if (_field37A) {
+ if ((--_field37A == 0) && BF_GLOBALS._dayNumber) {
+ if (T2_GLOBALS._uiElements._active && BF_GLOBALS._player._enabled) {
+ T2_GLOBALS._uiElements.show();
+ }
+
+ _field37A = 0;
+ }
+ }
+
+ Scene::dispatch();
+}
+
+void SceneExt::loadScene(int sceneNum) {
+ Scene::loadScene(sceneNum);
+
+ _v51C34.top = 0;
+ _v51C34.bottom = 300;
+}
+
+void SceneExt::checkGun() {
+ // Remove a bullet from the currently loaded clip
+ if (BF_GLOBALS.getFlag(fLoadedSpare) && (BF_GLOBALS._clip2Bullets > 0)) {
+ if (--BF_GLOBALS._clip2Bullets == 0)
+ BF_GLOBALS.clearFlag(fGunLoaded);
+ } else {
+ if (BF_GLOBALS._clip1Bullets > 0)
+ --BF_GLOBALS._clip1Bullets;
+
+ if (!BF_GLOBALS._clip1Bullets)
+ BF_GLOBALS.clearFlag(fGunLoaded);
+ }
+
+ BF_GLOBALS._sound3.play(4);
+}
+
+bool SceneExt::display(CursorType action) {
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(9000, BF_GLOBALS._randomSource.getRandomNumber(2));
+ break;
+ case CURSOR_USE:
+ SceneItem::display2(9000, BF_GLOBALS._randomSource.getRandomNumber(2) + 6);
+ break;
+ case CURSOR_TALK:
+ SceneItem::display2(9000, BF_GLOBALS._randomSource.getRandomNumber(2) + 3);
+ break;
+ case INV_COLT45:
+ gunDisplay();
+ break;
+ default:
+ if (action < BF_LAST_INVENT)
+ SceneItem::display2(9002, (int)action);
+ else
+ return false;
+ break;
+ }
+
+ return true;
+}
+
+void SceneExt::fadeOut() {
+ uint32 black = 0;
+ BF_GLOBALS._scenePalette.fade((const byte *)&black, false, 100);
+}
+
+void SceneExt::gunDisplay() {
+ if (!BF_GLOBALS.getFlag(gunDrawn)) {
+ // Gun not drawn
+ SceneItem::display2(1, BF_GLOBALS.getFlag(fCanDrawGun) ? 0 : 4);
+ } else if (!BF_GLOBALS.getFlag(fGunLoaded)) {
+ // Gun not loaded
+ SceneItem::display2(1, 1);
+ } else if (!BF_GLOBALS.getHasBullets()) {
+ // Out of ammunition
+ SceneItem::display2(1, 2);
+ } else {
+ // Check scene for whether gun can fire
+ checkGun();
+ }
+}
+
+void SceneExt::startStrip() {
+ SceneExt *scene = (SceneExt *)BF_GLOBALS._sceneManager._scene;
+ scene->_field372 = 1;
+ scene->_savedPlayerEnabled = BF_GLOBALS._player._enabled;
+
+ if (scene->_savedPlayerEnabled) {
+ scene->_savedUiEnabled = BF_GLOBALS._player._uiEnabled;
+ scene->_savedCanWalk = BF_GLOBALS._player._canWalk;
+ BF_GLOBALS._player.disableControl();
+
+ if (!BF_GLOBALS._v50696 && T2_GLOBALS._uiElements._active)
+ T2_GLOBALS._uiElements.hide();
+ }
+}
+
+void SceneExt::endStrip() {
+ SceneExt *scene = (SceneExt *)BF_GLOBALS._sceneManager._scene;
+ scene->_field372 = 0;
+
+ if (scene->_savedPlayerEnabled) {
+ BF_GLOBALS._player.enableControl();
+ BF_GLOBALS._player._uiEnabled = scene->_savedUiEnabled;
+ BF_GLOBALS._player._canWalk = scene->_savedCanWalk;
+
+ if (!BF_GLOBALS._v50696 && T2_GLOBALS._uiElements._active)
+ T2_GLOBALS._uiElements.show();
+ }
+}
+
+void SceneExt::clearScreen() {
+ BF_GLOBALS._screenSurface.fillRect(BF_GLOBALS._screenSurface.getBounds(), 0);
+}
+
+/*--------------------------------------------------------------------------*/
+
+PalettedScene::PalettedScene(): SceneExt() {
+ _field794 = 0;
+}
+
+void PalettedScene::synchronize(Serializer &s) {
+ SceneExt::synchronize(s);
+ s.syncAsSint16LE(_field794);
+}
+
+void PalettedScene::postInit(SceneObjectList *OwnerList) {
+ _field794 = 0;
+ _palette._field412 = 1;
+ SceneExt::postInit(OwnerList);
+}
+
+void PalettedScene::remove() {
+ SceneExt::remove();
+ if (_field794 == 1) {
+ for (SynchronizedList<SceneObject *>::iterator i = BF_GLOBALS._sceneObjects->begin();
+ i != BF_GLOBALS._sceneObjects->end(); ++i)
+ (*i)->remove();
+
+ BF_GLOBALS._sceneObjects->draw();
+ BF_GLOBALS._scenePalette.loadPalette(2);
+ BF_GLOBALS._v51C44 = 1;
+ BF_GLOBALS._sceneManager._hasPalette = true;
+ }
+
+ BF_GLOBALS._scenePalette._field412 = 0;
+}
+
+PaletteFader *PalettedScene::addFader(const byte *arrBufferRGB, int step, Action *action) {
+ _field794 = 1;
+ return BF_GLOBALS._scenePalette.addFader(arrBufferRGB, 1, step, action);
+}
+
+void PalettedScene::add2Faders(const byte *arrBufferRGB, int step, int paletteNum, Action *action) {
+ BF_GLOBALS._scenePalette.addFader(arrBufferRGB, 1, 100, NULL);
+ _palette.loadPalette(paletteNum);
+ _palette.loadPalette(2);
+ BF_GLOBALS._scenePalette.addFader(_palette._palette, 256, step, action);
+}
+
+void PalettedScene::transition(const byte *arrBufferRGB, int percent, int paletteNum, Action *action, int fromColor1, int fromColor2, int toColor1, int toColor2, bool flag) {
+ byte tmpPalette[768];
+
+ _palette.loadPalette(paletteNum);
+ _palette.loadPalette(2);
+ if (flag) {
+ for (int i = fromColor1; i <= fromColor2; i++) {
+ tmpPalette[(3 * i)] = BF_GLOBALS._scenePalette._palette[(3 * i)];
+ tmpPalette[(3 * i) + 1] = BF_GLOBALS._scenePalette._palette[(3 * i) + 1];
+ tmpPalette[(3 * i) + 2] = BF_GLOBALS._scenePalette._palette[(3 * i) + 2];
+ }
+ } else {
+ for (int i = fromColor1; i <= fromColor2; i++) {
+ tmpPalette[(3 * i)] = _palette._palette[(3 * i)];
+ tmpPalette[(3 * i) + 1] = _palette._palette[(3 * i) + 1];
+ tmpPalette[(3 * i) + 2] = _palette._palette[(3 * i) + 2];
+ }
+ }
+
+ for (int i = toColor1; i <= toColor2; i++) {
+ tmpPalette[i * 3] = _palette._palette[i * 3] - ((_palette._palette[i * 3] - arrBufferRGB[i * 3]) * (100 - percent)) / 100;
+ tmpPalette[i * 3 + 1] = _palette._palette[i * 3 + 1] - ((_palette._palette[i * 3 + 1] - arrBufferRGB[i * 3 + 1]) * (100 - percent)) / 100;
+ tmpPalette[i * 3 + 2] = _palette._palette[i * 3 + 2] - ((_palette._palette[i * 3 + 2] - arrBufferRGB[i * 3 + 2]) * (100 - percent)) / 100;
+ }
+
+ BF_GLOBALS._scenePalette.addFader((const byte *)tmpPalette, 256, 100, action);
+}
+
+
+/*--------------------------------------------------------------------------*/
+
+void SceneHandlerExt::postInit(SceneObjectList *OwnerList) {
+ SceneHandler::postInit(OwnerList);
+
+ // Load the low end palette data
+ BF_GLOBALS._scenePalette.loadPalette(2);
+ BF_GLOBALS._scenePalette.refresh();
+}
+
+void SceneHandlerExt::process(Event &event) {
+ SceneExt *scene = (SceneExt *)BF_GLOBALS._sceneManager._scene;
+ if (scene && scene->_focusObject)
+ scene->_focusObject->process(event);
+
+ if (T2_GLOBALS._uiElements._active) {
+ T2_GLOBALS._uiElements.process(event);
+ if (event.handled)
+ return;
+ }
+
+ // If the strip proxy is currently being controlled by the strip manager,
+ // then pass all events to it first
+ if (BF_GLOBALS._stripProxy._action) {
+ BF_GLOBALS._stripProxy._action->process(event);
+ if (event.handled)
+ return;
+ }
+
+ // If the user clicks the button whislt the introduction is active, prompt for playing the game
+ if ((BF_GLOBALS._dayNumber == 0) && (event.eventType == EVENT_BUTTON_DOWN)) {
+ // Prompt user for whether to start play or watch introduction
+ BF_GLOBALS._player.enableControl();
+ BF_GLOBALS._events.setCursor(CURSOR_WALK);
+
+ if (MessageDialog::show2(WATCH_INTRO_MSG, START_PLAY_BTN_STRING, INTRODUCTION_BTN_STRING) == 0) {
+ // Start the game
+ BF_GLOBALS._dayNumber = 1;
+ BF_GLOBALS._sceneManager.changeScene(190);
+ } else {
+ BF_GLOBALS._player.disableControl();
+ }
+
+ event.handled = true;
+ }
+
+ SceneHandler::process(event);
+}
+
+void SceneHandlerExt::playerAction(Event &event) {
+ if (BF_GLOBALS._events.getCursor() == INV_DOG_WHISTLE) {
+ SceneItem::display2(1, 6);
+ event.handled = true;
+ }
+}
+
+void SceneHandlerExt::processEnd(Event &event) {
+ // Check for a fallback text display for the given cursor/item being used in the scene
+ if (!event.handled && BF_GLOBALS._sceneManager._scene) {
+ CursorType cursor = BF_GLOBALS._events.getCursor();
+ if (((SceneExt *)BF_GLOBALS._sceneManager._scene)->display(cursor))
+ event.handled = true;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+BlueForceInvObjectList::BlueForceInvObjectList():
+ _none(9, 5, 1),
+ _colt45(9, 1, 1),
+ _ammoClip(9, 4, 2),
+ _spareClip(9, 4, 3),
+ _handcuffs(9, 1, 4),
+ _greensGun(9, 1, 5),
+ _ticketBook(9, 1, 6),
+ _mirandaCard(9, 1, 7),
+ _forestRap(9, 1, 8),
+ _greenId(9, 1, 9),
+ _baseballCard(9, 1, 10),
+ _bookingGreen(9, 1, 11),
+ _flare(9, 1, 12),
+ _cobbRap(9, 1, 13),
+ _bullet22(9, 1, 14),
+ _autoRifle(9, 1, 15),
+ _wig(9, 1, 16),
+ _frankieId(9, 1, 17),
+ _tyroneId(9, 1, 18),
+ _snub22(9, 1, 19),
+ _bug(1, 1, 1),
+ _bookingFrankie(9, 2, 1),
+ _bookingGang(9, 2, 2),
+ _fbiTeletype(9, 2, 3),
+ _daNote(9, 2, 4),
+ _printOut(9, 2, 5),
+ _warehouseKeys(9, 2, 6),
+ _centerPunch(9, 2, 7),
+ _tranqGun(9, 2, 8),
+ _hook(9, 2, 9),
+ _rags(9, 2, 10),
+ _jar(9, 2, 11),
+ _screwdriver(9, 2, 12),
+ _dFloppy(9, 2, 13),
+ _blankDisk(9, 2, 14),
+ _stick(9, 2, 15),
+ _crate1(9, 2, 16),
+ _crate2(9, 2, 17),
+ _shoebox(9, 2, 18),
+ _badge(9, 2, 19),
+ _bug2(1, 1, 1),
+ _rentalCoupon(9, 3, 1),
+ _nickel(9, 3, 2),
+ _lyleCard(9, 3, 3),
+ _carterNote(9, 3, 4),
+ _mugshot(9, 3, 5),
+ _clipping(9, 3, 6),
+ _microfilm(9, 3, 7),
+ _waveKeys(9, 3, 8),
+ _rentalKeys(9, 3, 9),
+ _napkin(9, 3, 10),
+ _dmvPrintout(9, 3, 11),
+ _fishingNet(9, 3, 12),
+ _id(9, 3, 13),
+ _bullets9mm(9, 3, 14),
+ _schedule(9, 3, 15),
+ _grenades(9, 3, 16),
+ _yellowCord(9, 3, 17),
+ _halfYellowCord(9, 3, 18),
+ _blackCord(9, 3, 19),
+ _bug3(1, 1, 1),
+ _halfBlackCord(9, 4, 1),
+ _warrant(9, 4, 2),
+ _jacket(9, 4, 3),
+ _greensKnife(9, 4, 4),
+ _dogWhistle(9, 4, 5),
+ _ammoBelt(9, 1, 2),
+ _alleyCatKey(9, 4, 7) {
+
+ // Add the items to the list
+ _itemList.push_back(&_none);
+ _itemList.push_back(&_colt45);
+ _itemList.push_back(&_ammoClip);
+ _itemList.push_back(&_spareClip);
+ _itemList.push_back(&_handcuffs);
+ _itemList.push_back(&_greensGun);
+ _itemList.push_back(&_ticketBook);
+ _itemList.push_back(&_mirandaCard);
+ _itemList.push_back(&_forestRap);
+ _itemList.push_back(&_greenId);
+ _itemList.push_back(&_baseballCard);
+ _itemList.push_back(&_bookingGreen);
+ _itemList.push_back(&_flare);
+ _itemList.push_back(&_cobbRap);
+ _itemList.push_back(&_bullet22);
+ _itemList.push_back(&_autoRifle);
+ _itemList.push_back(&_wig);
+ _itemList.push_back(&_frankieId);
+ _itemList.push_back(&_tyroneId);
+ _itemList.push_back(&_snub22);
+ _itemList.push_back(&_bug);
+ _itemList.push_back(&_bookingFrankie);
+ _itemList.push_back(&_bookingGang);
+ _itemList.push_back(&_fbiTeletype);
+ _itemList.push_back(&_daNote);
+ _itemList.push_back(&_printOut);
+ _itemList.push_back(&_warehouseKeys);
+ _itemList.push_back(&_centerPunch);
+ _itemList.push_back(&_tranqGun);
+ _itemList.push_back(&_hook);
+ _itemList.push_back(&_rags);
+ _itemList.push_back(&_jar);
+ _itemList.push_back(&_screwdriver);
+ _itemList.push_back(&_dFloppy);
+ _itemList.push_back(&_blankDisk);
+ _itemList.push_back(&_stick);
+ _itemList.push_back(&_crate1);
+ _itemList.push_back(&_crate2);
+ _itemList.push_back(&_shoebox);
+ _itemList.push_back(&_badge);
+ _itemList.push_back(&_bug2);
+ _itemList.push_back(&_rentalCoupon);
+ _itemList.push_back(&_nickel);
+ _itemList.push_back(&_lyleCard);
+ _itemList.push_back(&_carterNote);
+ _itemList.push_back(&_mugshot);
+ _itemList.push_back(&_clipping);
+ _itemList.push_back(&_microfilm);
+ _itemList.push_back(&_waveKeys);
+ _itemList.push_back(&_rentalKeys);
+ _itemList.push_back(&_napkin);
+ _itemList.push_back(&_dmvPrintout);
+ _itemList.push_back(&_fishingNet);
+ _itemList.push_back(&_id);
+ _itemList.push_back(&_bullets9mm);
+ _itemList.push_back(&_schedule);
+ _itemList.push_back(&_grenades);
+ _itemList.push_back(&_yellowCord);
+ _itemList.push_back(&_halfYellowCord);
+ _itemList.push_back(&_blackCord);
+ _itemList.push_back(&_bug3);
+ _itemList.push_back(&_halfBlackCord);
+ _itemList.push_back(&_warrant);
+ _itemList.push_back(&_jacket);
+ _itemList.push_back(&_greensKnife);
+ _itemList.push_back(&_dogWhistle);
+ _itemList.push_back(&_ammoBelt);
+ _itemList.push_back(&_alleyCatKey);
+}
+
+void BlueForceInvObjectList::reset() {
+ // Reset all object scene numbers
+ SynchronizedList<InvObject *>::iterator i;
+ for (i = _itemList.begin(); i != _itemList.end(); ++i) {
+ (*i)->_sceneNumber = 0;
+ }
+
+ // Set up default inventory
+ setObjectScene(INV_COLT45, 1);
+ setObjectScene(INV_HANDCUFFS, 1);
+ setObjectScene(INV_AMMO_BELT, 1);
+ setObjectScene(INV_ID, 1);
+
+ // Set default room for other objects
+ setObjectScene(INV_TICKET_BOOK, 60);
+ setObjectScene(INV_MIRANDA_CARD, 60);
+ setObjectScene(INV_FOREST_RAP, 320);
+ setObjectScene(INV_GREEN_ID, 370);
+ setObjectScene(INV_BASEBALL_CARD, 840);
+ setObjectScene(INV_BOOKING_GREEN, 390);
+ setObjectScene(INV_FLARE, 355);
+ setObjectScene(INV_COBB_RAP, 810);
+ setObjectScene(INV_22_BULLET, 415);
+ setObjectScene(INV_AUTO_RIFLE, 415);
+ setObjectScene(INV_WIG, 415);
+ setObjectScene(INV_FRANKIE_ID, 410);
+ setObjectScene(INV_TYRONE_ID, 410);
+ setObjectScene(INV_22_SNUB, 410);
+ setObjectScene(INV_FBI_TELETYPE, 320);
+ setObjectScene(INV_DA_NOTE, 320);
+ setObjectScene(INV_PRINT_OUT, 570);
+ setObjectScene(INV_WAREHOUSE_KEYS, 360);
+ setObjectScene(INV_CENTER_PUNCH, 0);
+ setObjectScene(INV_TRANQ_GUN, 830);
+ setObjectScene(INV_HOOK, 350);
+ setObjectScene(INV_RAGS, 870);
+ setObjectScene(INV_JAR, 870);
+ setObjectScene(INV_SCREWDRIVER, 355);
+ setObjectScene(INV_D_FLOPPY, 570);
+ setObjectScene(INV_BLANK_DISK, 560);
+ setObjectScene(INV_STICK, 710);
+ setObjectScene(INV_CRATE1, 710);
+ setObjectScene(INV_CRATE2, 870);
+ setObjectScene(INV_SHOEBOX, 270);
+ setObjectScene(INV_BADGE, 560);
+ setObjectScene(INV_RENTAL_COUPON, 0);
+ setObjectScene(INV_NICKEL, 560);
+ setObjectScene(INV_LYLE_CARD, 270);
+ setObjectScene(INV_CARTER_NOTE, 830);
+ setObjectScene(INV_MUG_SHOT, 810);
+ setObjectScene(INV_CLIPPING, 810);
+ setObjectScene(INV_MICROFILM, 810);
+ setObjectScene(INV_WAVE_KEYS, 840);
+ setObjectScene(INV_RENTAL_KEYS, 840);
+ setObjectScene(INV_NAPKIN, 115);
+ setObjectScene(INV_DMV_PRINTOUT, 810);
+ setObjectScene(INV_FISHING_NET, 830);
+ setObjectScene(INV_9MM_BULLETS, 930);
+ setObjectScene(INV_SCHEDULE, 930);
+ setObjectScene(INV_GRENADES, 355);
+ setObjectScene(INV_GREENS_KNIFE, 370);
+ setObjectScene(INV_JACKET, 880);
+ setObjectScene(INV_DOG_WHISTLE, 880);
+ setObjectScene(INV_YELLOW_CORD, 910);
+ setObjectScene(INV_BLACK_CORD, 910);
+
+ // Set up the select item handler method
+ T2_GLOBALS._onSelectItem = SelectItem;
+}
+
+void BlueForceInvObjectList::setObjectScene(int objectNum, int sceneNumber) {
+ // Find the appropriate object
+ int num = objectNum;
+ SynchronizedList<InvObject *>::iterator i = _itemList.begin();
+ while (num-- > 0) ++i;
+ (*i)->_sceneNumber = sceneNumber;
+
+ // If the item is the currently active one, default back to the use cursor
+ if (BF_GLOBALS._events.getCursor() == objectNum)
+ BF_GLOBALS._events.setCursor(CURSOR_USE);
+
+ // Update the user interface if necessary
+ T2_GLOBALS._uiElements.updateInventory();
+}
+
+void BlueForceInvObjectList::alterInventory(int mode) {
+ // Check for existing specific items in player's inventory
+ bool hasPrintout = getObjectScene(INV_PRINT_OUT) == 1;
+ bool hasRags = getObjectScene(INV_RAGS) == 1;
+ bool hasJar = getObjectScene(INV_JAR) == 1;
+ bool hasNickel = getObjectScene(INV_NICKEL) == 1;
+ bool hasCrate1 = getObjectScene(INV_CRATE1) == 1; //di
+ bool hasForestRap = getObjectScene(INV_FOREST_RAP) == 1;
+ bool hasRentalCoupon = getObjectScene(INV_RENTAL_COUPON) == 1; //si
+ bool hasWarehouseKeys = getObjectScene(INV_WAREHOUSE_KEYS) == 1;
+ bool hasCobbRap = getObjectScene(INV_COBB_RAP) == 1;
+ bool hasHook = getObjectScene(INV_HOOK) == 1;
+ bool hasMugShot = getObjectScene(INV_MUG_SHOT) == 1;
+
+ // Remove any items currently in player's inventory
+ SynchronizedList<InvObject *>::iterator i;
+ for (i = _itemList.begin(); i != _itemList.end(); ++i) {
+ if ((*i)->_sceneNumber == 1)
+ (*i)->_sceneNumber = 0;
+ }
+
+ // Give basic set of items back into inventory
+ setObjectScene(INV_COLT45, 1);
+ setObjectScene(INV_HANDCUFFS, 1);
+ setObjectScene(INV_AMMO_BELT, 1);
+ setObjectScene(INV_ID, 1);
+
+ // Reset ticket book and miranda card back to motorcycle
+ setObjectScene(INV_TICKET_BOOK, 60);
+ setObjectScene(INV_MIRANDA_CARD, 60);
+
+ BF_GLOBALS._v4CEC4 = 0;
+
+ switch (mode) {
+ case 2:
+ if (hasPrintout)
+ setObjectScene(INV_PRINT_OUT, 1);
+ if (hasNickel)
+ setObjectScene(INV_NICKEL, 1);
+ if (hasForestRap)
+ setObjectScene(INV_FOREST_RAP, 1);
+ if (hasCrate1)
+ setObjectScene(INV_CRATE1, 1);
+ if (hasRentalCoupon)
+ setObjectScene(INV_RENTAL_COUPON, 1);
+ if (hasHook)
+ setObjectScene(INV_HOOK, 1);
+ break;
+ case 3:
+ if (hasPrintout)
+ setObjectScene(INV_PRINT_OUT, 1);
+ if (hasNickel)
+ setObjectScene(INV_NICKEL, 1);
+ if (hasForestRap)
+ setObjectScene(INV_FOREST_RAP, 1);
+ if (hasCrate1)
+ setObjectScene(INV_CRATE1, 1);
+ if (hasRentalCoupon)
+ setObjectScene(INV_RENTAL_COUPON, 1);
+ if (hasCobbRap)
+ setObjectScene(INV_COBB_RAP, 1);
+ if (hasHook)
+ setObjectScene(INV_HOOK, 1);
+ if (hasMugShot)
+ setObjectScene(INV_MUG_SHOT, 1);
+ break;
+ case 4:
+ if (hasNickel)
+ setObjectScene(INV_NICKEL, 1);
+ if (hasRentalCoupon)
+ setObjectScene(INV_RENTAL_COUPON, 1);
+ if (hasHook)
+ setObjectScene(INV_HOOK, 1);
+ break;
+ case 5:
+ if (hasRags)
+ setObjectScene(INV_RAGS, 1);
+ if (hasJar)
+ setObjectScene(INV_JAR, 1);
+ if (hasRentalCoupon)
+ setObjectScene(INV_RENTAL_COUPON, 1);
+ if (hasWarehouseKeys)
+ setObjectScene(INV_WAREHOUSE_KEYS, 1);
+ break;
+ default:
+ break;
+ }
+}
+
+/**
+ * When an inventory item is selected, check if it's the gun belt, since that has a specific dialog
+ */
+bool BlueForceInvObjectList::SelectItem(int objectNumber) {
+ if (objectNumber == INV_AMMO_BELT) {
+ AmmoBeltDialog *dlg = new AmmoBeltDialog();
+ dlg->execute();
+ delete dlg;
+
+ return true;
+ }
+
+ return false;
+}
+
+/*--------------------------------------------------------------------------*/
+
+NamedHotspot::NamedHotspot() : SceneHotspot() {
+ _resNum = 0;
+ _lookLineNum = _useLineNum = _talkLineNum = -1;
+}
+
+bool NamedHotspot::startAction(CursorType action, Event &event) {
+ switch (action) {
+ case CURSOR_WALK:
+ // Nothing
+ return false;
+ case CURSOR_LOOK:
+ if (_lookLineNum == -1)
+ return SceneHotspot::startAction(action, event);
+
+ SceneItem::display2(_resNum, _lookLineNum);
+ return true;
+ case CURSOR_USE:
+ if (_useLineNum == -1)
+ return SceneHotspot::startAction(action, event);
+
+ SceneItem::display2(_resNum, _useLineNum);
+ return true;
+ case CURSOR_TALK:
+ if (_talkLineNum == -1)
+ return SceneHotspot::startAction(action, event);
+
+ SceneItem::display2(_resNum, _talkLineNum);
+ return true;
+ default:
+ return SceneHotspot::startAction(action, event);
+ }
+}
+
+void NamedHotspot::setDetails(int ys, int xs, int ye, int xe, const int resnum, const int lookLineNum, const int useLineNum) {
+ setBounds(ys, xe, ye, xs);
+ _resNum = resnum;
+ _lookLineNum = lookLineNum;
+ _useLineNum = useLineNum;
+ _talkLineNum = -1;
+ g_globals->_sceneItems.addItems(this, NULL);
+}
+
+void NamedHotspot::setDetails(const Rect &bounds, int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode, SceneItem *item) {
+ setBounds(bounds);
+ _resNum = resNum;
+ _lookLineNum = lookLineNum;
+ _talkLineNum = talkLineNum;
+ _useLineNum = useLineNum;
+
+ switch (mode) {
+ case 2:
+ g_globals->_sceneItems.push_front(this);
+ break;
+ case 4:
+ g_globals->_sceneItems.addBefore(item, this);
+ break;
+ case 5:
+ g_globals->_sceneItems.addAfter(item, this);
+ break;
+ default:
+ g_globals->_sceneItems.push_back(this);
+ break;
+ }
+}
+
+void NamedHotspot::setDetails(int sceneRegionId, int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode) {
+ _sceneRegionId = sceneRegionId;
+ _resNum = resNum;
+ _lookLineNum = lookLineNum;
+ _talkLineNum = talkLineNum;
+ _useLineNum = useLineNum;
+
+ // Handle adding hotspot to scene items list as necessary
+ switch (mode) {
+ case 2:
+ GLOBALS._sceneItems.push_front(this);
+ break;
+ case 3:
+ break;
+ default:
+ GLOBALS._sceneItems.push_back(this);
+ break;
+ }
+}
+
+void NamedHotspot::synchronize(Serializer &s) {
+ SceneHotspot::synchronize(s);
+ s.syncAsSint16LE(_resNum);
+ s.syncAsSint16LE(_lookLineNum);
+ s.syncAsSint16LE(_useLineNum);
+
+ if (g_vm->getGameID() == GType_BlueForce)
+ s.syncAsSint16LE(_talkLineNum);
+}
+
+/*--------------------------------------------------------------------------*/
+
+void SceneMessage::remove() {
+ SceneExt *scene = (SceneExt *)BF_GLOBALS._sceneManager._scene;
+ if (scene->_focusObject == this)
+ scene->_focusObject = NULL;
+
+ Action::remove();
+}
+
+void SceneMessage::signal() {
+ SceneExt *scene = (SceneExt *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ scene->_focusObject = this;
+ BF_GLOBALS._events.setCursor(CURSOR_WALK);
+ draw();
+ setDelay(180);
+ break;
+ case 1:
+ clear();
+ remove();
+ break;
+ default:
+ break;
+ }
+}
+
+void SceneMessage::process(Event &event) {
+ if ((event.eventType == EVENT_BUTTON_DOWN) ||
+ ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_RETURN))) {
+ signal();
+ }
+}
+
+
+void SceneMessage::draw() {
+ GfxSurface &surface = BF_GLOBALS._screenSurface;
+
+ // Clear the game area
+ surface.fillRect(Rect(0, 0, SCREEN_WIDTH, UI_INTERFACE_Y), 0);
+
+ // Disable scene fade in
+ BF_GLOBALS._paneRefreshFlag[0] = 0;
+
+ // Set up the font
+ GfxFont &font = BF_GLOBALS._gfxManagerInstance._font;
+ BF_GLOBALS._scenePalette.setEntry(font._colors.foreground, 255, 255, 255);
+ BF_GLOBALS._scenePalette.setPalette(font._colors.foreground, 1);
+
+ // Write out the message
+ Rect textRect(0, UI_INTERFACE_Y / 2 - (font.getHeight() / 2), SCREEN_WIDTH,
+ UI_INTERFACE_Y / 2 + (font.getHeight() / 2));
+ BF_GLOBALS._gfxManagerInstance._font.writeLines(_message.c_str(), textRect, ALIGN_CENTER);
+
+ // TODO: Ideally, saving and loading should be disabled here until the message display is complete
+}
+
+void SceneMessage::clear() {
+ // Fade out the text display
+ static const uint32 black = 0;
+ BF_GLOBALS._scenePalette.fade((const byte *)&black, false, 100);
+
+ // Refresh the background
+ BF_GLOBALS._paneRefreshFlag[0] = 0;
+
+ // Set up to fade in the game scene
+ g_globals->_sceneManager._fadeMode = FADEMODE_GRADUAL;
+ g_globals->_sceneManager._hasPalette = true;
+}
+
+IntroSceneText::IntroSceneText(): SceneText() {
+ _action = NULL;
+ _frameNumber = 0;
+ _diff = 0;
+}
+
+void IntroSceneText::setup(const Common::String &msg, Action *action) {
+ _frameNumber = BF_GLOBALS._events.getFrameNumber();
+ _diff = 180;
+ _action = action;
+ _fontNumber = 4;
+ _width = 300;
+ _textMode = ALIGN_CENTER;
+ _color1 = BF_GLOBALS._scenePalette._colors.background;
+ _color2 = _color3 = 0;
+
+ SceneText::setup(msg);
+
+ // Center the text on-screen
+ reposition();
+ _bounds.center(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2);
+
+ // Set the new position
+ _position.x = _bounds.left;
+ _position.y = _bounds.top;
+}
+
+void IntroSceneText::synchronize(Serializer &s) {
+ SceneText::synchronize(s);
+ SYNC_POINTER(_action);
+ s.syncAsUint32LE(_frameNumber);
+ s.syncAsSint16LE(_diff);
+}
+
+void IntroSceneText::dispatch() {
+ if (_diff) {
+ uint32 frameNumber = BF_GLOBALS._events.getFrameNumber();
+ if (_frameNumber < frameNumber) {
+ _diff -= frameNumber - _frameNumber;
+ _frameNumber = frameNumber;
+
+ if (_diff <= 0) {
+ // Time has expired, so remove the text and signal the designated action
+ remove();
+ if (_action)
+ _action->signal();
+ }
+ }
+ }
+}
+
+} // End of namespace BlueForce
+
+} // End of namespace TsAGE
diff --git a/engines/tsage/blue_force/blueforce_logic.h b/engines/tsage/blue_force/blueforce_logic.h
new file mode 100644
index 0000000000..1b161bce06
--- /dev/null
+++ b/engines/tsage/blue_force/blueforce_logic.h
@@ -0,0 +1,394 @@
+/* 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.
+ *
+ */
+
+#ifndef TSAGE_BLUEFORCE_LOGIC_H
+#define TSAGE_BLUEFORCE_LOGIC_H
+
+#include "common/scummsys.h"
+#include "tsage/events.h"
+#include "tsage/core.h"
+#include "tsage/scenes.h"
+#include "tsage/globals.h"
+
+namespace TsAGE {
+
+namespace BlueForce {
+
+using namespace TsAGE;
+
+#define BF_INVENTORY (*((::TsAGE::BlueForce::BlueForceInvObjectList *)g_globals->_inventory))
+
+class BlueForceGame: public Game {
+public:
+ virtual void start();
+ virtual Scene *createScene(int sceneNumber);
+ virtual void rightClick();
+ virtual void processEvent(Event &event);
+ virtual bool canSaveGameStateCurrently();
+ virtual bool canLoadGameStateCurrently();
+};
+
+#define OBJ_ARRAY_SIZE 10
+class AObjectArray: public EventHandler {
+public:
+ EventHandler *_objList[OBJ_ARRAY_SIZE];
+ bool _inUse;
+ int getNewIndex();
+public:
+ AObjectArray();
+ void clear();
+
+ virtual Common::String getClassName() { return "AObjectArray"; }
+ virtual void synchronize(Serializer &s);
+ virtual void process(Event &event);
+ virtual void dispatch();
+
+ void add(EventHandler *obj);
+ void remove(EventHandler *obj);
+};
+
+class Timer: public EventHandler {
+public:
+ Action *_tickAction;
+ EventHandler *_endHandler;
+ uint32 _endFrame;
+public:
+ Timer();
+ void set(uint32 delay, EventHandler *endHandler);
+
+ virtual Common::String getClassName() { return "Timer"; }
+ virtual void synchronize(Serializer &s);
+ virtual void remove();
+ virtual void signal();
+ virtual void dispatch();
+};
+
+class TimerExt: public Timer {
+public:
+ Action *_newAction;
+public:
+ TimerExt();
+ void set(uint32 delay, EventHandler *endHandler, Action *action);
+
+ virtual Common::String getClassName() { return "TimerExt"; }
+ virtual void synchronize(Serializer &s);
+ virtual void remove();
+ virtual void signal();
+};
+
+
+class SceneHotspotExt: public SceneHotspot {
+public:
+ int _state;
+
+ SceneHotspotExt() { _state = 0; }
+ virtual Common::String getClassName() { return "SceneHotspotExt"; }
+ virtual void synchronize(Serializer &s) {
+ SceneHotspot::synchronize(s);
+ s.syncAsSint16LE(_state);
+ }
+};
+
+class SceneItemType2: public SceneHotspot {
+public:
+ virtual void startMove(SceneObject *sceneObj, va_list va);
+};
+
+class NamedObject: public SceneObject {
+public:
+ int _resNum;
+ int _lookLineNum, _talkLineNum, _useLineNum;
+
+ virtual Common::String getClassName() { return "NamedObject"; }
+ virtual void synchronize(Serializer &s);
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual bool startAction(CursorType action, Event &event);
+
+ void setDetails(int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode, SceneItem *item);
+ void setDetails(int resNum, int lookLineNum, int talkLineNum, int useLineNum);
+};
+
+class NamedObjectExt: public NamedObject {
+public:
+ int _flag;
+
+ NamedObjectExt() { _flag = 0; }
+ virtual Common::String getClassName() { return "NamedObjectExt"; }
+ virtual void synchronize(Serializer &s) {
+ NamedObject::synchronize(s);
+ s.syncAsSint16LE(_flag);
+ }
+};
+
+class NamedObject2: public NamedObject {
+public:
+ int _v1, _v2;
+
+ NamedObject2() { _v1 = _v2 = 0; }
+ virtual Common::String getClassName() { return "NamedObject2"; }
+ virtual void synchronize(Serializer &s) {
+ NamedObject::synchronize(s);
+ s.syncAsSint16LE(_v1);
+ s.syncAsSint16LE(_v2);
+ }
+};
+
+class CountdownObject: public NamedObject {
+public:
+ int _countDown;
+ CountdownObject();
+ void fixCountdown(int mode, ...);
+
+ virtual Common::String getClassName() { return "CountdownObject"; }
+ virtual void synchronize(Serializer &s);
+ virtual void dispatch();
+};
+
+class FollowerObject: public NamedObject {
+public:
+ SceneObject *_object;
+ FollowerObject();
+
+ virtual Common::String getClassName() { return "FollowerObject"; }
+ virtual void synchronize(Serializer &s);
+ virtual void remove();
+ virtual void dispatch();
+ virtual void reposition();
+
+ void setup(SceneObject *object, int visage, int frameNum, int yDiff);
+};
+
+class FocusObject: public NamedObject {
+public:
+ int _v90, _v92;
+ GfxSurface _img;
+
+ FocusObject();
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void synchronize(Serializer &s);
+ virtual void remove();
+ virtual void process(Event &event);
+};
+
+enum ExitFrame { EXITFRAME_N = 1, EXITFRAME_NE = 2, EXITFRAME_E = 3, EXITFRAME_SE = 4,
+ EXITFRAME_S = 5, EXITFRAME_SW = 6, EXITFRAME_W = 7, EXITFRAME_NW = 8 };
+
+class SceneExt: public Scene {
+private:
+ static void startStrip();
+ static void endStrip();
+public:
+ AObjectArray _timerList, _objArray2;
+ int _field372;
+ bool _savedPlayerEnabled;
+ bool _savedUiEnabled;
+ bool _savedCanWalk;
+ int _field37A;
+
+ EventHandler *_focusObject;
+ Visage _cursorVisage;
+
+ Rect _v51C34;
+public:
+ SceneExt();
+
+ virtual Common::String getClassName() { return "SceneExt"; }
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void remove();
+ virtual void process(Event &event);
+ virtual void dispatch();
+ virtual void loadScene(int sceneNum);
+ virtual void checkGun();
+
+ void addTimer(EventHandler *timer) { _timerList.add(timer); }
+ void removeTimer(EventHandler *timer) { _timerList.remove(timer); }
+ bool display(CursorType action);
+ void fadeOut();
+ void gunDisplay();
+ void clearScreen();
+};
+
+class PalettedScene: public SceneExt {
+public:
+ ScenePalette _palette;
+ int _field794;
+public:
+ PalettedScene();
+
+ virtual void synchronize(Serializer &s);
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void remove();
+ PaletteFader *addFader(const byte *arrBufferRGB, int step, Action *action);
+ void add2Faders(const byte *arrBufferRGB, int step, int paletteNum, Action *action);
+ void transition(const byte *arrBufferRGB, int arg8, int paletteNum, Action *action, int fromColor1, int fromColor2, int toColor1, int toColor2, bool flag);
+};
+
+class SceneHandlerExt: public SceneHandler {
+public:
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void process(Event &event);
+
+ virtual void playerAction(Event &event);
+ virtual void processEnd(Event &event);
+};
+
+class BlueForceInvObjectList : public InvObjectList {
+private:
+ static bool SelectItem(int objectNumber);
+public:
+ InvObject _none;
+ InvObject _colt45;
+ InvObject _ammoClip;
+ InvObject _spareClip;
+ InvObject _handcuffs;
+ InvObject _greensGun;
+ InvObject _ticketBook;
+ InvObject _mirandaCard;
+ InvObject _forestRap;
+ InvObject _greenId;
+ InvObject _baseballCard;
+ InvObject _bookingGreen;
+ InvObject _flare;
+ InvObject _cobbRap;
+ InvObject _bullet22;
+ InvObject _autoRifle;
+ InvObject _wig;
+ InvObject _frankieId;
+ InvObject _tyroneId;
+ InvObject _snub22;
+ InvObject _bug;
+ InvObject _bookingFrankie;
+ InvObject _bookingGang;
+ InvObject _fbiTeletype;
+ InvObject _daNote;
+ InvObject _printOut;
+ InvObject _warehouseKeys;
+ InvObject _centerPunch;
+ InvObject _tranqGun;
+ InvObject _hook;
+ InvObject _rags;
+ InvObject _jar;
+ InvObject _screwdriver;
+ InvObject _dFloppy;
+ InvObject _blankDisk;
+ InvObject _stick;
+ InvObject _crate1;
+ InvObject _crate2;
+ InvObject _shoebox;
+ InvObject _badge;
+ InvObject _bug2;
+ InvObject _rentalCoupon;
+ InvObject _nickel;
+ InvObject _lyleCard;
+ InvObject _carterNote;
+ InvObject _mugshot;
+ InvObject _clipping;
+ InvObject _microfilm;
+ InvObject _waveKeys;
+ InvObject _rentalKeys;
+ InvObject _napkin;
+ InvObject _dmvPrintout;
+ InvObject _fishingNet;
+ InvObject _id;
+ InvObject _bullets9mm;
+ InvObject _schedule;
+ InvObject _grenades;
+ InvObject _yellowCord;
+ InvObject _halfYellowCord;
+ InvObject _blackCord;
+ InvObject _bug3;
+ InvObject _halfBlackCord;
+ InvObject _warrant;
+ InvObject _jacket;
+ InvObject _greensKnife;
+ InvObject _dogWhistle;
+ InvObject _ammoBelt;
+ InvObject _alleyCatKey;
+
+ BlueForceInvObjectList();
+ void reset();
+ void setObjectScene(int objectNum, int sceneNumber);
+ void alterInventory(int mode);
+
+ virtual Common::String getClassName() { return "BlueForceInvObjectList"; }
+};
+
+class NamedHotspot : public SceneHotspot {
+public:
+ int _resNum, _lookLineNum, _useLineNum, _talkLineNum;
+ NamedHotspot();
+
+
+ virtual bool startAction(CursorType action, Event &event);
+ virtual Common::String getClassName() { return "NamedHotspot"; }
+ virtual void synchronize(Serializer &s);
+ virtual void setDetails(int ys, int xs, int ye, int xe, const int resnum, const int lookLineNum, const int useLineNum);
+ virtual void setDetails(const Rect &bounds, int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode, SceneItem *item);
+ virtual void setDetails(int sceneRegionId, int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode);
+};
+
+class NamedHotspotExt : public NamedHotspot {
+public:
+ int _flag;
+ NamedHotspotExt() { _flag = 0; }
+
+ virtual Common::String getClassName() { return "NamedHotspot"; }
+ virtual void synchronize(Serializer &s) {
+ NamedHotspot::synchronize(s);
+ s.syncAsSint16LE(_flag);
+ }
+};
+
+class SceneMessage: public Action {
+private:
+ Common::String _message;
+
+ void draw();
+ void clear();
+public:
+ void setup(const Common::String &msg) { _message = msg; }
+
+ virtual Common::String getClassName() { return "SceneMessage"; }
+ virtual void remove();
+ virtual void signal();
+ virtual void process(Event &event);
+};
+
+class IntroSceneText: public SceneText {
+public:
+ Action *_action;
+ uint32 _frameNumber;
+ int _diff;
+public:
+ IntroSceneText();
+ void setup(const Common::String &msg, Action *action);
+
+ virtual Common::String getClassName() { return "BFIntroText"; }
+ virtual void synchronize(Serializer &s);
+ virtual void dispatch();
+};
+
+} // End of namespace BlueForce
+
+} // End of namespace TsAGE
+
+#endif
diff --git a/engines/tsage/blue_force/blueforce_scenes0.cpp b/engines/tsage/blue_force/blueforce_scenes0.cpp
new file mode 100644
index 0000000000..bb283d051e
--- /dev/null
+++ b/engines/tsage/blue_force/blueforce_scenes0.cpp
@@ -0,0 +1,1136 @@
+/* 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_scenes0.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 20 - Tsunami Title Screen
+ *
+ *--------------------------------------------------------------------------*/
+
+void Scene20::Action1::signal() {
+ Scene20 *scene = (Scene20 *)BF_GLOBALS._sceneManager._scene;
+ static byte black[3] = { 0, 0, 0 };
+
+ switch (_actionIndex++) {
+ case 0:
+ setDelay(2);
+ break;
+ case 1:
+ _sound.play(1);
+ BF_GLOBALS._scenePalette.addRotation(64, 127, -1, 1, this);
+ break;
+ case 2:
+ scene->_object1.setVisage(22);
+ scene->_object1._strip = 1;
+ scene->_object1._frame = 1;
+ scene->_object1.changeZoom(100);
+
+ scene->_object2.setVisage(22);
+ scene->_object2._strip = 2;
+ scene->_object2._frame = 1;
+ scene->_object2.changeZoom(100);
+
+ scene->_object3.setVisage(22);
+ scene->_object3._strip = 3;
+ scene->_object3._frame = 1;
+ scene->_object3.changeZoom(100);
+
+ scene->_object4.setVisage(22);
+ scene->_object4._strip = 4;
+ scene->_object4._frame = 1;
+ scene->_object4.changeZoom(100);
+
+ scene->_object5.setVisage(22);
+ scene->_object5._strip = 5;
+ scene->_object5._frame = 1;
+ scene->_object5.changeZoom(100);
+
+ scene->_object6.setVisage(22);
+ scene->_object6._strip = 6;
+ scene->_object6._frame = 1;
+ scene->_object6.changeZoom(100);
+
+ scene->_object7.setVisage(22);
+ scene->_object7._strip = 7;
+ scene->_object7._frame = 1;
+ scene->_object7.changeZoom(100);
+
+ scene->_object8.setVisage(22);
+ scene->_object8._strip = 8;
+ scene->_object8._frame = 1;
+ scene->_object8.changeZoom(100);
+
+ setDelay(1);
+ break;
+ case 3:
+ BF_GLOBALS._scenePalette.addFader(scene->_scenePalette._palette, 256, 8, this);
+ break;
+ case 4:
+ setDelay(60);
+ break;
+ case 5:
+ scene->_object2.animate(ANIM_MODE_5, NULL);
+ scene->_object3.animate(ANIM_MODE_5, NULL);
+ scene->_object4.animate(ANIM_MODE_5, NULL);
+ scene->_object5.animate(ANIM_MODE_5, NULL);
+ scene->_object6.animate(ANIM_MODE_5, NULL);
+ scene->_object7.animate(ANIM_MODE_5, this);
+ break;
+ case 6:
+ setDelay(120);
+ break;
+ case 7:
+ BF_GLOBALS._scenePalette.addFader(black, 1, 5, this);
+ break;
+ case 8:
+ BF_GLOBALS._sceneManager.changeScene(100);
+ remove();
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene20::postInit(SceneObjectList *OwnerList) {
+ loadScene(20);
+ Scene::postInit();
+ setZoomPercents(60, 85, 200, 100);
+ BF_GLOBALS._interfaceY = SCREEN_HEIGHT;
+
+ _scenePalette.loadPalette(1);
+ _scenePalette.loadPalette(22);
+
+ _object1.postInit();
+ _object1.setVisage(21);
+ _object1._strip = 1;
+ _object1._frame = 1;
+ _object1.animate(ANIM_MODE_NONE, NULL);
+ _object1.setPosition(Common::Point(62, 85));
+ _object1.changeZoom(100);
+
+ _object2.postInit();
+ _object2.setVisage(21);
+ _object2._strip = 2;
+ _object2._frame = 1;
+ _object2.animate(ANIM_MODE_NONE, NULL);
+ _object2.setPosition(Common::Point(27, 94));
+ _object2.changeZoom(100);
+
+ _object3.postInit();
+ _object3.setVisage(21);
+ _object3._strip = 2;
+ _object3._frame = 2;
+ _object3.animate(ANIM_MODE_NONE, NULL);
+ _object3.setPosition(Common::Point(68, 94));
+ _object3.changeZoom(100);
+
+ _object4.postInit();
+ _object4.setVisage(21);
+ _object4._strip = 2;
+ _object4._frame = 3;
+ _object4.animate(ANIM_MODE_NONE, NULL);
+ _object4.setPosition(Common::Point(110, 94));
+ _object4.changeZoom(100);
+
+ _object5.postInit();
+ _object5.setVisage(21);
+ _object5._strip = 2;
+ _object5._frame = 4;
+ _object5.animate(ANIM_MODE_NONE, NULL);
+ _object5.setPosition(Common::Point(154, 94));
+ _object5.changeZoom(100);
+
+ _object6.postInit();
+ _object6.setVisage(21);
+ _object6._strip = 2;
+ _object6._frame = 5;
+ _object6.animate(ANIM_MODE_NONE, NULL);
+ _object6.setPosition(Common::Point(199, 94));
+ _object6.changeZoom(100);
+
+ _object7.postInit();
+ _object7.setVisage(21);
+ _object7._strip = 2;
+ _object7._frame = 6;
+ _object7.animate(ANIM_MODE_NONE, NULL);
+ _object7.setPosition(Common::Point(244, 94));
+ _object7.changeZoom(100);
+
+ _object8.postInit();
+ _object8.setVisage(21);
+ _object8._strip = 2;
+ _object8._frame = 7;
+ _object8.animate(ANIM_MODE_NONE, NULL);
+ _object8.setPosition(Common::Point(286, 94));
+ _object8.changeZoom(100);
+
+ setAction(&_action1);
+ BF_GLOBALS._dialogCenter.y = 165;
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 50 - Map Screen
+ *
+ *--------------------------------------------------------------------------*/
+
+Scene50::Tooltip::Tooltip(): SavedObject() {
+ _newSceneNumber = _locationId = 0;
+}
+
+void Scene50::Tooltip::synchronize(Serializer &s) {
+ SavedObject::synchronize(s);
+ _bounds.synchronize(s);
+ s.syncString(_msg);
+}
+
+void Scene50::Tooltip2::signal() {
+ switch (_actionIndex++) {
+ case 0:
+ setDelay(60);
+ break;
+ case 1: {
+ Common::Point pt(410, 181);
+ NpcMover *mover = new NpcMover();
+ ((SceneObject *)_owner)->addMover(mover, &pt, this);
+ break;
+ }
+ case 2:
+ _owner->remove();
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene50::Tooltip2::dispatch() {
+ Action::dispatch();
+ SceneObject *owner = (SceneObject *)_owner;
+
+ if ((_actionIndex == 2) && (owner->_percent < 100)) {
+ owner->changeZoom(owner->_percent + 1);
+ }
+}
+
+void Scene50::Tooltip::set(const Rect &bounds, int v60, const Common::String &msg, int v62) {
+ _bounds = bounds;
+ _newSceneNumber = v60;
+ _msg = msg;
+ _locationId = v62;
+}
+
+void Scene50::Tooltip::update() {
+ // Set up the text object for the scene with the appropriate settings
+ Scene50 *scene = (Scene50 *)BF_GLOBALS._sceneManager._scene;
+ scene->_text._fontNumber = 10;
+ scene->_text._color1 = BF_GLOBALS._scenePalette._colors.foreground;
+ scene->_text._color2 = BF_GLOBALS._scenePalette._colors.background;
+ scene->_text.setup(_msg);
+
+ int yp = (scene->_text._textSurface.getBounds().height() == 0) ? _bounds.bottom : _bounds.top;
+ scene->_text.setPosition(Common::Point(_bounds.left, yp));
+}
+
+void Scene50::Tooltip::highlight(bool btnDown) {
+ Scene50 *scene = (Scene50 *)BF_GLOBALS._sceneManager._scene;
+
+ scene->_field382 = _newSceneNumber;
+ if ((scene->_field380 != 0) || (scene->_field380 != _newSceneNumber))
+ update();
+
+ if (btnDown) {
+ if ((BF_GLOBALS._bookmark == bCalledToDrunkStop) && BF_GLOBALS.getFlag(beenToJRDay2))
+ scene->_sceneNumber = 600;
+ else if (BF_GLOBALS._bookmark == bBookedGreen)
+ scene->_sceneNumber = 410;
+ else {
+ BF_GLOBALS._driveToScene = _newSceneNumber;
+
+ switch (BF_GLOBALS._driveFromScene) {
+ case 330:
+ case 340:
+ case 342:
+ BF_GLOBALS._player.disableControl();
+ BF_GLOBALS._mapLocationId = _locationId;
+
+ if (BF_GLOBALS._driveToScene != 330) {
+ scene->_sceneNumber = 330;
+ } else {
+ scene->_sceneNumber = (BF_GLOBALS._dayNumber != 1) || (BF_GLOBALS._bookmark < bStartOfGame) ||
+ (BF_GLOBALS._bookmark >= bCalledToDomesticViolence) ? 342 : 340;
+ }
+ break;
+
+ case 410:
+ case 551:
+ if (BF_GLOBALS.getFlag((BF_GLOBALS._driveFromScene == 410) ? fSearchedTruck : didDrunk)) {
+ BF_GLOBALS._mapLocationId = _locationId;
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneNumber = _newSceneNumber;
+ } else {
+ BF_GLOBALS._deathReason = 4;
+ BF_GLOBALS._sceneManager.changeScene(666);
+ return;
+ }
+ break;
+
+ case 300:
+ if (_locationId == 1) {
+ BF_GLOBALS._driveToScene = 300;
+ _newSceneNumber = 300;
+ }
+ // Deliberate fall through to default
+ default:
+ BF_GLOBALS._mapLocationId = _locationId;
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneNumber = _newSceneNumber;
+ break;
+ }
+ }
+
+ // Signal the scene to change to the new scene
+ scene->_sceneMode = 1;
+ scene->signal();
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+Scene50::Scene50(): SceneExt() {
+ _field382 = 0;
+ _field380 = 0;
+}
+
+void Scene50::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+
+ BF_GLOBALS._interfaceY = 200;
+ T2_GLOBALS._uiElements._active = false;
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.setVisage(830);
+ BF_GLOBALS._player.setStrip(3);
+ BF_GLOBALS._player.setPosition(Common::Point(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2));
+ BF_GLOBALS._player.hide();
+ BF_GLOBALS._player.disableControl();
+
+ BF_GLOBALS._scrollFollower = NULL;
+ _text._color1 = 19;
+ _text._color2 = 9;
+ _text._color3 = 9;
+ _text._width = 75;
+ _text._fontNumber = 4;
+ _text._textMode = ALIGN_LEFT;
+ _text.fixPriority(256);
+
+ // Set all the hotspots
+ _location3.set(Rect(10, 92, 24, 105), 180, GRANDMA_FRANNIE, 4);
+ _location2.set(Rect(443, 149, 508, 178), 330, MARINA, 2);
+ _location1.set(Rect(573, 103, 604, 130), 190, POLICE_DEPARTMENT, 1);
+ _location4.set(Rect(313, 21, 325, 33), 114, TONYS_BAR, 8);
+ _location8.set(Rect(69, 79, 82, 88), 580, CHILD_PROTECTIVE_SERVICES, 256);
+ _location6.set(Rect(242, 131, 264, 144), 440, ALLEY_CAT, 64);
+ _location5.set(Rect(383, 57, 402, 70), 380, CITY_HALL_JAIL, 32);
+ _location7.set(Rect(128, 32, 143, 42), 800, JAMISON_RYAN, 128);
+ _location9.set(Rect(349, 125, 359, 132),
+ (BF_GLOBALS._bookmark == bInspectionDone) || (BF_GLOBALS._bookmark == bCalledToDrunkStop) ? 551 : 550,
+ BIKINI_HUT, 16);
+
+ _item.setBounds(Rect(0, 0, SCREEN_WIDTH * 2, SCREEN_HEIGHT));
+ BF_GLOBALS._sceneItems.push_back(&_item);
+
+ // Find the location to start at
+ int selectedTooltip = BF_GLOBALS._mapLocationId;
+ Tooltip *tooltip = NULL;
+ int xp = 0;
+
+ switch (selectedTooltip) {
+ case 1:
+ tooltip = &_location1;
+ xp = 588;
+ break;
+ case 2:
+ tooltip = &_location2;
+ xp = 475;
+ break;
+ case 4:
+ tooltip = &_location3;
+ xp = 17;
+ break;
+ case 8:
+ tooltip = &_location4;
+ xp = 319;
+ break;
+ case 32:
+ tooltip = &_location5;
+ xp = 392;
+ break;
+ case 64:
+ tooltip = &_location6;
+ xp = 253;
+ break;
+ case 128:
+ tooltip = &_location7;
+ xp = 135;
+ break;
+ case 16:
+ tooltip = &_location9;
+ xp = 354;
+ break;
+ case 256:
+ tooltip = &_location8;
+ xp = 75;
+ break;
+ }
+
+ _timer.set(240, this);
+ _sceneBounds.center(xp, SCREEN_HEIGHT / 2);
+ loadScene(55);
+ _sceneMode = 2;
+
+ loadBackground(xp - 160, 0);
+ tooltip->update();
+}
+
+void Scene50::remove() {
+ // Blank out the screen
+ clearScreen();
+ BF_GLOBALS._scrollFollower = &BF_GLOBALS._player;
+
+ SceneExt::remove();
+ T2_GLOBALS._uiElements._active = true;
+}
+
+void Scene50::signal() {
+ if (_sceneMode == 1) {
+ // Destination selected
+ if ((BF_GLOBALS._driveFromScene == 551) && (_sceneNumber != BF_GLOBALS._driveFromScene)) {
+ BF_GLOBALS.clearFlag(f1015Drunk);
+ BF_GLOBALS.clearFlag(f1027Drunk);
+ BF_GLOBALS.clearFlag(f1035Drunk);
+ BF_GLOBALS.clearFlag(f1097Drunk);
+ BF_GLOBALS.clearFlag(f1098Drunk);
+ }
+
+ if ((BF_GLOBALS._driveFromScene == 410) && (_sceneNumber != BF_GLOBALS._driveFromScene)) {
+ BF_GLOBALS.setFlag(125);
+ }
+
+ if ((BF_GLOBALS._driveFromScene == 340) && (_sceneNumber != BF_GLOBALS._driveFromScene)) {
+ BF_GLOBALS.setFlag(123);
+ }
+
+ if ((BF_GLOBALS._driveFromScene == 380) && (_sceneNumber != BF_GLOBALS._driveFromScene)) {
+ if (BF_GLOBALS._bookmark >= bLauraToParamedics)
+ BF_GLOBALS.setFlag(f1098Marina);
+ if (BF_GLOBALS._bookmark >= bStoppedFrankie)
+ BF_GLOBALS.setFlag(f1098Frankie);
+ if (BF_GLOBALS._bookmark == bArrestedGreen) {
+ BF_GLOBALS._deathReason = 19;
+ _sceneNumber = 666;
+ }
+ }
+
+ if ((_sceneNumber == 551) && BF_GLOBALS.getFlag(fHasDrivenFromDrunk))
+ _sceneNumber = 550;
+
+ BF_GLOBALS._sound1.fadeOut2(NULL);
+ BF_GLOBALS._sceneManager.changeScene(_sceneNumber);
+
+ } else if (_sceneMode == 2) {
+ // Initial delay complete, time to switch to interactive mode
+ _text.remove();
+ BF_GLOBALS._player.enableControl();
+ BF_GLOBALS._events.setCursor(CURSOR_WALK);
+ _sceneMode = 0;
+ _field380 = 0;
+ }
+}
+
+void Scene50::process(Event &event) {
+ SceneExt::process(event);
+ Common::Point pt(event.mousePos.x + _sceneBounds.left, event.mousePos.y + _sceneBounds.top);
+ bool mouseDown = false;
+ _field382 = 0;
+
+ if ((event.mousePos.x > 270 && (_sceneBounds.right < (SCREEN_WIDTH * 2))))
+ loadBackground(4, 0);
+ else if ((event.mousePos.x < 50) && (_sceneBounds.left > 0))
+ loadBackground(-4, 0);
+ else
+ mouseDown = event.eventType == EVENT_BUTTON_DOWN;
+
+ if (BF_GLOBALS._player._uiEnabled) {
+ Tooltip *tooltipList[9] = { &_location1, &_location2, &_location3, &_location4,
+ &_location5, &_location6, &_location7, &_location8, &_location9 };
+
+ for (int idx = 0; idx < 9; ++idx) {
+ if (tooltipList[idx]->_bounds.contains(pt)) {
+ // Found a tooltip to highlight
+ tooltipList[idx]->highlight(mouseDown);
+ return;
+ }
+ }
+
+ // No hotspot selected, so remove any current tooltip display
+ _text.remove();
+ }
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 60 - Motorcycle
+ *
+ *--------------------------------------------------------------------------*/
+
+bool Scene60::Ignition::startAction(CursorType action, Event &event) {
+ Scene60 *scene = (Scene60 *)BF_GLOBALS._sceneManager._scene;
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(60, 15);
+ break;
+ default:
+ switch (BF_GLOBALS._dayNumber) {
+ case 1:
+ if (BF_GLOBALS.getFlag(onDuty) && check1())
+ return true;
+ break;
+ case 2:
+ if (BF_GLOBALS.getFlag(onDuty) && check2())
+ return true;
+ }
+
+ BF_GLOBALS._sound1.play(BF_GLOBALS.getFlag(fWithLyle) ? 80 : 31);
+ BF_GLOBALS._sound1.holdAt(1);
+ scene->fadeOut();
+ BF_GLOBALS._sceneManager.changeScene(50);
+ break;
+ }
+
+ return true;
+}
+
+bool Scene60::Ignition::check1() {
+ if (BF_GLOBALS._bookmark >= bStoppedFrankie) {
+ BF_GLOBALS._v5098C |= 1;
+ return false;
+ } else {
+ if ((BF_GLOBALS._bookmark == bBookedGreen) && BF_GLOBALS.getFlag(fArrivedAtGangStop)) {
+ BF_GLOBALS.set2Flags(f1035Frankie);
+ BF_GLOBALS._sceneManager.changeScene(410);
+ }
+
+ if (BF_GLOBALS._bookmark >= bLauraToParamedics) {
+ if (BF_GLOBALS.getFlag(fLeftTraceIn910)) {
+ if (BF_GLOBALS._bookmark < bBookedGreen) {
+ BF_GLOBALS._bookmark = bBookedGreen;
+ BF_GLOBALS.clearFlag(fCalledBackup);
+ BF_GLOBALS.set2Flags(f1035Frankie);
+ return false;
+ } else if (BF_GLOBALS._bookmark == bBookedGreen) {
+ if (!BF_GLOBALS.getFlag(fCalledBackup))
+ BF_GLOBALS.setFlag(f1035Frankie);
+
+ BF_GLOBALS._sceneManager.changeScene(410);
+ return true;
+ }
+ }
+
+ } else if (BF_GLOBALS._bookmark < bStartOfGame) {
+ // Should never reach here
+ } else if (BF_GLOBALS._bookmark < bCalledToDomesticViolence) {
+ if ((BF_GLOBALS._v5098C >> 1) & 1)
+ BF_GLOBALS.setFlag(fLateToMarina);
+ else
+ BF_GLOBALS._v5098C |= 2;
+ } else {
+ int v = (((BF_GLOBALS._v5098C >> 2) & 15) + 1) & 15;
+ BF_GLOBALS._v5098C = (BF_GLOBALS._v5098C & 0xC3) | (v << 2);
+
+ if ((v != 1) && (v != 2)) {
+ BF_GLOBALS._deathReason = 19;
+ BF_GLOBALS._sceneManager.changeScene(666);
+ return true;
+ }
+ }
+ }
+
+ BF_GLOBALS._v5098C |= 1;
+ return false;
+}
+
+bool Scene60::Ignition::check2() {
+ switch (BF_GLOBALS._bookmark) {
+ case bInspectionDone:
+ if (BF_GLOBALS._v5098D & 1) {
+ BF_GLOBALS.setFlag(fLateToDrunkStop);
+ } else {
+ BF_GLOBALS._v5098D |= 1;
+ }
+ break;
+ case bCalledToDrunkStop:
+ BF_GLOBALS.setFlag(fHasDrivenFromDrunk);
+ break;
+ default:
+ break;
+ }
+
+ BF_GLOBALS._v5098C |= 0x80;
+ return false;
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene60::Item3::startAction(CursorType action, Event &event) {
+ Scene60 *scene = (Scene60 *)BF_GLOBALS._sceneManager._scene;
+ scene->fadeOut();
+ BF_GLOBALS._sceneManager.changeScene(scene->_newScene);
+ return true;
+}
+
+bool Scene60::Radio::startAction(CursorType action, Event &event) {
+ Scene60 *scene = (Scene60 *)BF_GLOBALS._sceneManager._scene;
+
+ switch(action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(60, 0);
+ break;
+ case CURSOR_USE:
+ case CURSOR_TALK:
+ scene->_sound.play(32);
+ scene->setAction(&scene->_action1);
+ break;
+ default:
+ SceneItem::display2(60, 1);
+ break;
+ }
+ return true;
+}
+
+bool Scene60::Compartment::startAction(CursorType action, Event &event) {
+ Scene60 *scene = (Scene60 *)BF_GLOBALS._sceneManager._scene;
+
+ switch(action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(60, 8);
+ break;
+ case CURSOR_USE:
+ if ((BF_INVENTORY.getObjectScene(INV_TICKET_BOOK) == 1) &&
+ (BF_INVENTORY.getObjectScene(INV_MIRANDA_CARD) == 1)) {
+ SceneItem::display2(60, 9);
+ }
+ break;
+ case CURSOR_TALK:
+ SceneItem::display2(60, 10);
+ break;
+ case INV_TICKET_BOOK:
+ SceneItem::display2(60, 11);
+ scene->_ticketBook.show();
+ BF_INVENTORY.setObjectScene(INV_TICKET_BOOK, 60);
+ BF_GLOBALS._events.setCursor(CURSOR_USE);
+ BF_GLOBALS._sceneItems.addBefore(&scene->_radio, &scene->_ticketBook);
+ break;
+ case INV_MIRANDA_CARD:
+ SceneItem::display2(60, 12);
+ scene->_mirandaCard.show();
+ BF_INVENTORY.setObjectScene(INV_MIRANDA_CARD, 60);
+ BF_GLOBALS._events.setCursor(CURSOR_USE);
+ BF_GLOBALS._sceneItems.addAfter(&scene->_compartmentDoor, &scene->_mirandaCard);
+ break;
+ default:
+ return NamedHotspot::startAction(action, event);
+ }
+
+ return true;
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene60::MirandaCard::startAction(CursorType action, Event &event) {
+ Scene60 *scene = (Scene60 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(60, 5);
+ return true;
+ case CURSOR_USE:
+ if (BF_INVENTORY.getObjectScene(INV_MIRANDA_CARD) == 60) {
+ SceneItem::display2(60, 6);
+ BF_INVENTORY.setObjectScene(INV_MIRANDA_CARD, 1);
+ if (!BF_GLOBALS.getFlag(fGotPointsForTktBook)) {
+ T2_GLOBALS._uiElements.addScore(10);
+ BF_GLOBALS.setFlag(fGotPointsForTktBook);
+ }
+
+ scene->_mirandaCard.hide();
+ BF_GLOBALS._sceneItems.remove(&scene->_mirandaCard);
+ }
+ return true;
+ case CURSOR_TALK:
+ SceneItem::display2(60, 7);
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ break;
+ }
+}
+
+bool Scene60::TicketBook::startAction(CursorType action, Event &event) {
+ Scene60 *scene = (Scene60 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(60, 2);
+ return true;
+ case CURSOR_USE:
+ if (BF_INVENTORY.getObjectScene(INV_TICKET_BOOK) == 60) {
+ scene->_ticketBook.hide();
+ BF_GLOBALS._sceneItems.remove(&scene->_ticketBook);
+ SceneItem::display2(60, 3);
+ BF_INVENTORY.setObjectScene(INV_TICKET_BOOK, 1);
+ if (!BF_GLOBALS.getFlag(fShotNicoIn910)) {
+ T2_GLOBALS._uiElements.addScore(10);
+ BF_GLOBALS.setFlag(fShotNicoIn910);
+ }
+ }
+ return true;
+ case CURSOR_TALK:
+ SceneItem::display2(60, 4);
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ break;
+ }
+}
+
+bool Scene60::CompartmentDoor::startAction(CursorType action, Event &event) {
+ Scene60 *scene = (Scene60 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(60, 13);
+ return true;
+ case CURSOR_USE:
+ if (_flag) {
+ _flag = false;
+ BF_GLOBALS._player.disableControl();
+ Common::Point pt(308, 165);
+ NpcMover *mover = new NpcMover();
+ addMover(mover, &pt, scene);
+ } else {
+ _flag = true;
+ BF_GLOBALS._player.disableControl();
+ Common::Point pt(288, 165);
+ NpcMover *mover = new NpcMover();
+ addMover(mover, &pt, scene);
+ }
+ return true;
+ case CURSOR_TALK:
+ SceneItem::display2(60, 14);
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene60::Action1::signal() {
+ Scene60 *scene = (Scene60 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ setDelay(2);
+ break;
+ case 1:
+ scene->_stripManager.start(634, this);
+ break;
+ case 2:
+ _state = useRadio();
+ setDelay(4);
+ break;
+ case 3:
+ switch (_state) {
+ case 1:
+ if (BF_GLOBALS.removeFlag(fCan1004Marina)) {
+ T2_GLOBALS._uiElements.addScore(10);
+ _state = 606;
+ } else if (BF_GLOBALS.removeFlag(fCan1004Drunk)) {
+ T2_GLOBALS._uiElements.addScore(10);
+ _state = 606;
+ } else {
+ _state = 611;
+ }
+ break;
+ case 2:
+ _state = 612;
+ break;
+ case 3:
+ if (BF_GLOBALS.removeFlag(f1015Marina)) {
+ T2_GLOBALS._uiElements.addScore(10);
+ _state = 613;
+ } else if (BF_GLOBALS.removeFlag(f1015Frankie)) {
+ T2_GLOBALS._uiElements.addScore(10);
+ _state = 614;
+ } else if (BF_GLOBALS.removeFlag(f1015Drunk)) {
+ T2_GLOBALS._uiElements.addScore(10);
+ _state = 615;
+ } else {
+ _state = 616;
+ }
+ break;
+ case 4:
+ if (BF_GLOBALS.removeFlag(f1027Marina)) {
+ T2_GLOBALS._uiElements.addScore(10);
+ _actionIndex = 5;
+ _state = 617;
+ } else if (BF_GLOBALS.removeFlag(f1027Frankie)) {
+ T2_GLOBALS._uiElements.addScore(10);
+ _actionIndex = 5;
+ _state = 618;
+ } else if (BF_GLOBALS.removeFlag(f1015Drunk)) {
+ T2_GLOBALS._uiElements.addScore(10);
+ _actionIndex = 5;
+ _state = 619;
+ } else {
+ _state = 620;
+ }
+ break;
+ case 5:
+ if (BF_GLOBALS.removeFlag(f1035Marina)) {
+ BF_GLOBALS.setFlag(fCalledBackup);
+ T2_GLOBALS._uiElements.addScore(50);
+ _state = 621;
+ } else if (BF_GLOBALS.removeFlag(f1035Frankie)) {
+ BF_GLOBALS.setFlag(fCalledBackup);
+ T2_GLOBALS._uiElements.addScore(50);
+ _actionIndex = 5;
+ _state = 622;
+ } else if (BF_GLOBALS.removeFlag(f1035Drunk)) {
+ T2_GLOBALS._uiElements.addScore(10);
+ _state = 623;
+ } else {
+ _state = 624;
+ }
+ break;
+ case 6:
+ if (BF_GLOBALS.removeFlag(f1097Marina)) {
+ T2_GLOBALS._uiElements.addScore(10);
+ _state = 625;
+ } else if (BF_GLOBALS.removeFlag(f1097Frankie)) {
+ T2_GLOBALS._uiElements.addScore(10);
+ _actionIndex = 5;
+ _state = 626;
+ } else if (BF_GLOBALS.removeFlag(f1097Drunk)) {
+ T2_GLOBALS._uiElements.addScore(10);
+ _state = 627;
+ } else {
+ _state = 628;
+ }
+ break;
+ case 7:
+ if (BF_GLOBALS.removeFlag(f1098Marina)) {
+ T2_GLOBALS._uiElements.addScore(10);
+ _state = 629;
+ } else if (BF_GLOBALS.removeFlag(f1098Frankie)) {
+ T2_GLOBALS._uiElements.addScore(10);
+ _state = 630;
+ } else if (BF_GLOBALS.removeFlag(f1098Drunk)) {
+ T2_GLOBALS._uiElements.addScore(10);
+ _state = 631;
+ } else {
+ _state = 632;
+ }
+ break;
+ case 0:
+ default:
+ _state = 610;
+ break;
+ }
+
+ scene->_stripManager.start(_state, this);
+ break;
+ case 4:
+ remove();
+ case 5:
+ setDelay(120);
+ break;
+ case 6:
+ _actionIndex = 4;
+ scene->_stripManager.start(633, this);
+ break;
+ }
+}
+
+int Scene60::Action1::useRadio() {
+ return RadioConvDialog::show();
+}
+
+void Scene60::Action2::signal() {
+ Scene60 *scene = (Scene60 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ BF_GLOBALS._player.disableControl();
+ scene->_sound.play(32);
+ setDelay(2);
+ break;
+ case 1:
+ BF_GLOBALS._bookmark = bStartOfGame;
+ BF_GLOBALS.set2Flags(f1035Marina);
+ scene->_stripManager.start(60, this);
+ break;
+ case 2:
+ BF_GLOBALS._player.enableControl();
+ remove();
+ break;
+ }
+}
+
+void Scene60::Action3::signal() {
+ Scene60 *scene = (Scene60 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ BF_GLOBALS._player.disableControl();
+ scene->_sound.play(32);
+ setDelay(2);
+ break;
+ case 1:
+ BF_GLOBALS._bookmark = bInspectionDone;
+ BF_GLOBALS.set2Flags(f1035Drunk);
+ BF_GLOBALS.setFlag(fCan1004Drunk);
+ scene->_stripManager.start(71, this);
+ break;
+ case 2:
+ scene->_field1222 = true;
+ BF_GLOBALS._player.enableControl();
+ remove();
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+Scene60::Scene60(): SceneExt() {
+ _newScene = 0;
+ _sceneNumber = 0;
+ _visage = 0;
+ _cursorId = CURSOR_NONE;
+ _field1222 = false;
+}
+
+void Scene60::synchronize(Serializer &s) {
+ SceneExt::synchronize(s);
+
+ s.syncAsSint16LE(_newScene);
+ s.syncAsSint16LE(_sceneNumber);
+ s.syncAsSint16LE(_visage);
+ s.syncAsSint16LE(_cursorId);
+ s.syncAsSint16LE(_field1222);
+}
+
+void Scene60::postInit(SceneObjectList *OwnerList) {
+ _newScene = BF_GLOBALS._driveFromScene = BF_GLOBALS._sceneManager._previousScene;
+
+ // Set up which scene background to use
+ switch (_newScene) {
+ case 300:
+ _sceneNumber = 1301;
+ break;
+ case 380:
+ _sceneNumber = 1380;
+ break;
+ case 410:
+ _sceneNumber = 1410;
+ break;
+ case 551:
+ _sceneNumber = 1550;
+ break;
+ case 550:
+ _sceneNumber = 1555;
+ break;
+ case 580:
+ _sceneNumber = 1580;
+ break;
+ case 800:
+ _sceneNumber = 1810;
+ break;
+ default:
+ _sceneNumber = 60;
+ break;
+ }
+
+ if (_sceneNumber == 1550) {
+ if (BF_GLOBALS.getFlag(fHasDrivenFromDrunk))
+ _sceneNumber = 1555;
+ else {
+ _object1.postInit();
+ _object1.setVisage(1550);
+ _object1.animate(ANIM_MODE_2);
+ _object1.setPosition(Common::Point(158, 18));
+ }
+ }
+
+ loadScene(_sceneNumber);
+
+ if ((_sceneNumber == 1810) && (BF_GLOBALS._dayNumber > 1) &&
+ (BF_GLOBALS._dayNumber < 5) && !BF_GLOBALS.getFlag(fWithLyle) &&
+ ((BF_GLOBALS._dayNumber != 4) && (BF_GLOBALS._bookmark >= bEndDayThree))) {
+ _car.setup(1810, 1, 1, 164, 131, 1);
+ }
+
+ if ((_sceneNumber == 1410) && (BF_GLOBALS._bookmark == bBookedGreen) &&
+ !BF_GLOBALS.getFlag(fDriverOutOfTruck)) {
+ _object1.postInit();
+ _object1.setVisage(410);
+ _object1.setStrip(6);
+ _object1.setPosition(Common::Point(135, 47));
+ }
+
+ if (BF_GLOBALS.getFlag(fWithLyle)) {
+ _visage = 62;
+ _ignition._sceneRegionId = 22;
+ } else if (BF_GLOBALS.getFlag(onDuty)) {
+ _visage = 63;
+ _ignition._sceneRegionId = 20;
+ } else {
+ _visage = 61;
+ _ignition._sceneRegionId = 28;
+ }
+ _dashboard.setup(_visage, 1, 1, 160, 168, 100);
+ _cursorId = CURSOR_USE;
+
+ if (_visage == 63) {
+ _compartmentDoor.postInit();
+ _compartmentDoor.setVisage(60);
+ _compartmentDoor.setStrip(1);
+ _compartmentDoor.setFrame(1);
+ _compartmentDoor.setPosition(Common::Point(288, 165));
+ _compartmentDoor.setPriority(250);
+ _compartmentDoor._flag = true;
+ BF_GLOBALS._sceneItems.push_back(&_compartmentDoor);
+
+ _mirandaCard.postInit();
+ _mirandaCard.setVisage(60);
+ _mirandaCard.setStrip(2);
+ _mirandaCard.setFrame(2);
+ _mirandaCard.setPosition(Common::Point(280, 160));
+
+ if (BF_INVENTORY.getObjectScene(INV_MIRANDA_CARD) == 60) {
+ _mirandaCard.show();
+ BF_GLOBALS._sceneItems.push_back(&_mirandaCard);
+ } else {
+ _mirandaCard.hide();
+ }
+
+ _ticketBook.postInit();
+ _ticketBook.setVisage(60);
+ _ticketBook.setStrip(2);
+ _ticketBook.setFrame(1);
+ _ticketBook.setPosition(Common::Point(289, 161));
+
+ if (BF_INVENTORY.getObjectScene(INV_TICKET_BOOK) == 60) {
+ _ticketBook.show();
+ BF_GLOBALS._sceneItems.push_back(&_ticketBook);
+ } else {
+ _ticketBook.hide();
+ }
+ }
+
+ _item3._sceneRegionId = 7;
+ _radio._sceneRegionId = 12;
+ _compartment._sceneRegionId = 14;
+
+ _stripManager.addSpeaker(&_gameTextSpeaker);
+ _stripManager.addSpeaker(&_jakeRadioSpeaker);
+
+ if (BF_GLOBALS.getFlag(onDuty) && !BF_GLOBALS.getFlag(fWithLyle)) {
+ BF_GLOBALS._sceneItems.push_back(&_radio);
+ BF_GLOBALS._sceneItems.push_back(&_compartment);
+ }
+
+ BF_GLOBALS._sceneItems.push_back(&_ignition);
+ BF_GLOBALS._sceneItems.push_back(&_item3);
+ BF_GLOBALS._player.enableControl();
+ BF_GLOBALS._events.setCursor(CURSOR_USE);
+
+ switch (BF_GLOBALS._dayNumber) {
+ case 1:
+ if (BF_GLOBALS.getFlag(onDuty) && (BF_GLOBALS._v5098C & 1) &&
+ (BF_GLOBALS._bookmark < bStartOfGame) && (BF_GLOBALS._sceneManager._previousScene != 342)) {
+ setAction(&_action2);
+ if (BF_GLOBALS._sceneManager._previousScene == 342)
+ _newScene = 340;
+ }
+ break;
+ case 2:
+ if (BF_GLOBALS.getFlag(onDuty) && ((BF_GLOBALS._v5098C >> 7) & 1) &&
+ (BF_GLOBALS._sceneManager._previousScene != 550) &&
+ (BF_GLOBALS._bookmark < bInspectionDone)) {
+ setAction(&_action3);
+ }
+ }
+}
+
+void Scene60::remove() {
+ BF_GLOBALS._player.enableControl();
+ BF_GLOBALS._events.setCursor(_cursorId);
+
+ if (_cursorId == CURSOR_EXIT)
+ BF_GLOBALS._events.setCursor(CURSOR_USE);
+}
+
+void Scene60::signal() {
+ ++_sceneMode;
+ BF_GLOBALS._player.enableControl();
+}
+
+void Scene60::dispatch() {
+ SceneExt::dispatch();
+
+ int idx = BF_GLOBALS._sceneRegions.indexOf(Common::Point(
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.left + BF_GLOBALS._events._mousePos.x,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + BF_GLOBALS._events._mousePos.y));
+
+ if (idx == _item3._sceneRegionId) {
+ if (BF_GLOBALS._events.getCursor() != CURSOR_EXIT) {
+ _cursorId = BF_GLOBALS._events.getCursor();
+ BF_GLOBALS._events.setCursor(CURSOR_EXIT);
+ }
+ } else {
+ if (BF_GLOBALS._events.getCursor() == CURSOR_EXIT) {
+ BF_GLOBALS._events.setCursor(_cursorId);
+ }
+ }
+}
+
+} // End of namespace BlueForce
+
+} // End of namespace TsAGE
diff --git a/engines/tsage/blue_force/blueforce_scenes0.h b/engines/tsage/blue_force/blueforce_scenes0.h
new file mode 100644
index 0000000000..103e5f0a4c
--- /dev/null
+++ b/engines/tsage/blue_force/blueforce_scenes0.h
@@ -0,0 +1,190 @@
+/* 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.
+ *
+ */
+
+#ifndef TSAGE_BLUEFORCE_SCENES0_H
+#define TSAGE_BLUEFORCE_SCENES0_H
+
+#include "common/scummsys.h"
+#include "tsage/blue_force/blueforce_logic.h"
+#include "tsage/blue_force/blueforce_speakers.h"
+#include "tsage/converse.h"
+#include "tsage/events.h"
+#include "tsage/core.h"
+#include "tsage/scenes.h"
+#include "tsage/globals.h"
+#include "tsage/sound.h"
+
+namespace TsAGE {
+
+namespace BlueForce {
+
+using namespace TsAGE;
+
+class Scene20 : public SceneExt {
+ /* Actions */
+ class Action1 : public Action {
+ private:
+ ASoundExt _sound;
+ public:
+ virtual void signal();
+ };
+public:
+ Action1 _action1;
+ ScenePalette _scenePalette;
+ SceneObject _object1, _object2, _object3, _object4;
+ SceneObject _object5, _object6, _object7, _object8;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+};
+
+class Scene50: public SceneExt {
+ class Tooltip: public SavedObject {
+ public:
+ Rect _bounds;
+ Common::String _msg;
+ int _newSceneNumber;
+ int _locationId;
+ public:
+ Tooltip();
+ void set(const Rect &bounds, int v60, const Common::String &msg, int v62);
+ void update();
+ void highlight(bool btnDown);
+
+ virtual Common::String getClassName() { return "Scene50_Tooltip"; }
+ virtual void synchronize(Serializer &s);
+ };
+ class Tooltip2: public Action {
+ public:
+ Tooltip2(): Action() {}
+
+ virtual Common::String getClassName() { return "Scene50_Tooltip2"; }
+ virtual void signal();
+ virtual void dispatch();
+ };
+public:
+ int _field380, _field382;
+ int _sceneNumber;
+ SceneText _text;
+ SceneItemType2 _item;
+ Tooltip _location1, _location2, _location3, _location4, _location5;
+ Tooltip _location6, _location7, _location8, _location9;
+ Timer _timer;
+public:
+ Scene50();
+ virtual Common::String getClassName() { return "Scene50"; }
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void remove();
+ virtual void signal();
+ virtual void process(Event &event);
+};
+
+class Scene60 : public SceneExt {
+ /* Items */
+ class Ignition: public NamedHotspot {
+ private:
+ bool check1();
+ bool check2();
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Item3: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Radio: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Compartment: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Objects */
+ class MirandaCard: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class TicketBook: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class CompartmentDoor: public NamedObject {
+ public:
+ bool _flag;
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Actions */
+ class Action1: public ActionExt {
+ private:
+ int useRadio();
+ public:
+ virtual void signal();
+ };
+ class Action2: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action3: public Action {
+ public:
+ virtual void signal();
+ };
+public:
+ SequenceManager _sequenceManager;
+ Action1 _action1;
+ Action2 _action2;
+ Action3 _action3;
+ NamedObject _object1;
+ MirandaCard _mirandaCard;
+ TicketBook _ticketBook;
+ CompartmentDoor _compartmentDoor;
+ SceneObject _dashboard;
+ BackgroundSceneObject _car;
+ NamedHotspot _item1;
+ Ignition _ignition;
+ Item3 _item3;
+ Radio _radio;
+ Compartment _compartment;
+ SpeakerGameText _gameTextSpeaker;
+ SpeakerJakeRadio _jakeRadioSpeaker;
+ ASound _sound;
+ int _newScene;
+ int _sceneNumber;
+ int _visage;
+ CursorType _cursorId;
+ bool _field1222;
+
+ Scene60();
+ virtual void synchronize(Serializer &s);
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void remove();
+ virtual void signal();
+ virtual void dispatch();
+};
+
+
+} // End of namespace BlueForce
+
+} // End of namespace TsAGE
+
+#endif
diff --git a/engines/tsage/blue_force/blueforce_scenes1.cpp b/engines/tsage/blue_force/blueforce_scenes1.cpp
new file mode 100644
index 0000000000..e977d5fbca
--- /dev/null
+++ b/engines/tsage/blue_force/blueforce_scenes1.cpp
@@ -0,0 +1,3399 @@
+/* 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->_object9.show();
+ scene->_object9.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->_object10, NULL);
+ break;
+ case 6:
+ // Protaginist 2 walk to the bar
+ scene->_object10.remove();
+ setAction(&scene->_sequenceManager6, this, 100, &scene->_protaginist2, NULL);
+ break;
+ case 7:
+ // Two thugs enter and walk to table
+ scene->_object7.setAction(&scene->_sequenceManager7, NULL, 103, &scene->_object7, NULL);
+ scene->_object5.setAction(&scene->_sequenceManager8, this, 102, &scene->_object5, 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->_object5, &scene->_protaginist1, NULL);
+ break;
+ case 9:
+ // Shots fired!
+ scene->_protaginist1.setAction(&scene->_sequenceManager5, this, 98, &scene->_protaginist1, NULL);
+ scene->_object7.setAction(&scene->_sequenceManager7, NULL, 99, &scene->_object7, NULL);
+ break;
+ case 10:
+ // End scene
+ scene->_sceneMode = 1;
+ remove();
+ break;
+ }
+}
+
+void Scene109::Action2::signal() {
+ Scene109 *scene = (Scene109 *)BF_GLOBALS._sceneManager._scene;
+ scene->setAction(&scene->_sequenceManager2, this, 3117, &scene->_object9, NULL);
+}
+
+void Scene109::Action3::signal() {
+ Scene109 *scene = (Scene109 *)BF_GLOBALS._sceneManager._scene;
+ 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();
+
+ _object9.postInit();
+ _object9.setVisage(115);
+ _object9.setStrip(4);
+ _object9.setFrame(1);
+ _object9.setPosition(Common::Point(262, 29));
+ _object9.hide();
+
+ _object5.postInit();
+ _object5.hide();
+
+ _object7.postInit();
+ _object7.hide();
+
+ _object10.postInit();
+ _object10.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.proc2(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.proc1(9);
+ BF_GLOBALS._walkRegions.proc1(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, 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.proc1(17);
+ }
+ BF_GLOBALS._sceneItems.push_front(&_vechile);
+ BF_GLOBALS._walkRegions.proc1(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, 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::Object1::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->_field31E8 == 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->_field31E8 == 0) {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 0;
+ if (BF_GLOBALS._v4CEAA == 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->_field31E8 == 0) {
+ if (BF_GLOBALS._v4CEAA == 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::Object2::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._v4CEAA == 0) {
+ scene->_sceneMode = 1150;
+ BF_GLOBALS.setFlag(fTalkedToTony);
+ } else
+ scene->_sceneMode = 1151;
+ } else if (_field15F8 == 0) {
+ _field15F8++;
+ scene->_sceneMode = 1171;
+ } else
+ scene->_sceneMode = 1172;
+ } else if (BF_GLOBALS.getFlag(onDuty)) {
+ if (scene->_field31EA == 0) {
+ scene->_field31EA = 1;
+ scene->_sceneMode = 1169;
+ } else
+ scene->_sceneMode = 1170;
+ } else if (scene->_field31EA == 0) {
+ scene->_sceneMode = 1171;
+ scene->_field31EA = 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._v4CEAA == 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._v4CEAA == 0) {
+ scene->_sceneMode = 1150;
+ scene->setAction(&scene->_action9);
+ } else {
+ BF_GLOBALS._v4CEAA = 1;
+ scene->setAction(&scene->_action2);
+ }
+ }
+ } else if (_field15F8 == 0) {
+ _field15F8++;
+ 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::Item1::signal() {
+ Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene;
+
+ if (_field1F8A == 2)
+ _field1F8A = 0;
+
+ if (_field1F8A == 1) {
+ _field1F8A = 2;
+ setAction(&_sequenceManager6, this, 118, &scene->_object12, &scene->_object11, NULL);
+ }
+}
+
+bool Scene115::Item1::startAction(CursorType action, Event &event) {
+ Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene;
+
+ if (action == CURSOR_USE) {
+ if (_field1F8A == 0) {
+ _field1F8A = 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::Item1::synchronize(Serializer &s) {
+ NamedHotspot::synchronize(s);
+ s.syncAsSint16LE(_field1F8A);
+}
+
+Scene115::Item1::Item1() {
+ _field1F8A = 0;
+}
+
+void Scene115::EventHandler1::dispatch() {
+ Scene115 *scene = (Scene115 *)BF_GLOBALS._sceneManager._scene;
+
+ if (BF_GLOBALS._player.getRegionIndex() == 27) {
+ scene->_object1.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._v4CEAA < 3) {
+ if (scene->_object2._position.x > 67) {
+ scene->_object2.setAction(&scene->_sequenceManager3, NULL, 1118, &scene->_object2, NULL);
+ } else if (scene->_object2._position.x != 67) {
+ scene->_object2.setAction(&scene->_sequenceManager3, NULL, 1119, &scene->_object2, NULL);
+ }
+ }
+ BF_GLOBALS._player.setAction(&scene->_sequenceManager1, this, 1117, &BF_GLOBALS._player);
+ break;
+ case 1:
+ BF_GLOBALS._v4CEAA++;
+ if (BF_GLOBALS.getFlag(onDuty)) {
+ if (BF_GLOBALS.getFlag(fTalkedToTony)) {
+ switch (BF_GLOBALS._v4CEAA) {
+ 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._v4CEAA) {
+ 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._v4CEAA == 3)
+ scene->_object2.setAction(&scene->_sequenceManager3, NULL, 3119, &scene->_object2, 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->_object7, 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->_item1, 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->_item1._field1F8A == 0) {
+ setAction(&scene->_sequenceManager5, this, 1115, &scene->_object1, NULL);
+ } 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->_item1, 127);
+ scene->_item1._field1F8A = 1;
+ setDelay(3);
+ break;
+ case 3:
+ setAction(&scene->_sequenceManager5, this, 1116, &scene->_object1, NULL);
+ break;
+ case 4:
+ scene->_field31E8 = 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->_object1, &BF_GLOBALS._player, NULL);
+ break;
+ case 1:
+ if (scene->_sceneMode == 9999) {
+ setAction(&scene->_sequenceManager1, this, 4115, &scene->_object1, &BF_GLOBALS._player, NULL);
+ _actionIndex--;
+ scene->_sceneMode = 1166;
+ } else {
+ scene->_stripManager.start(scene->_sceneMode, this);
+ }
+ break;
+ case 2:
+ scene->_object1.setVisage(131);
+ scene->_object1.setStrip(1);
+ scene->_object1.setFrame(1);
+ scene->_object1.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._v4CEB0 == 0)
+ scene->_stripManager.start(1156, this);
+ else
+ scene->_stripManager.start(1157, this);
+ BF_GLOBALS._v4CEB0++;
+ 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->_object1, &BF_GLOBALS._player, NULL);
+ break;
+ case 1:
+ T2_GLOBALS._uiElements.addScore(30);
+ setAction(&scene->_sequenceManager1, this, 4115, &scene->_object1, &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->_object1, &BF_GLOBALS._player, &scene->_object13, NULL);
+ break;
+ case 5:
+ BF_INVENTORY.setObjectScene(INV_NAPKIN, 1);
+ T2_GLOBALS._uiElements.addScore(10);
+ scene->_object1.setVisage(131);
+ scene->_object1.setStrip(1);
+ scene->_object1.setFrame(1);
+ scene->_object1.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->_object2._position.x > 67)
+ scene->_object2.setAction(&scene->_sequenceManager3, NULL, 1118, &scene->_object2, NULL);
+ else if (scene->_object2._position.x != 67)
+ scene->_object2.setAction(&scene->_sequenceManager3, NULL, 1119, &scene->_object2, 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->_object2.setAction(&scene->_sequenceManager3, this, 3119, &scene->_object2, NULL);
+ break;
+ case 3:
+ BF_GLOBALS._player.enableControl();
+ remove();
+ default:
+ break;
+ }
+}
+
+Scene115::Scene115() : SceneExt () {
+ _field168A = _field31E8 = _field31EA = 0;
+}
+
+void Scene115::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+
+ BF_GLOBALS._sound1.fadeSound(15);
+ loadScene(115);
+ setZoomPercents(98, 85, 115, 100);
+ _field31E8 = 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
+ _object2.postInit();
+ _object2.setVisage(132);
+ _object2.setPosition(Common::Point(74, 66));
+ _object2.setStrip(3);
+ _object2.setFrame(1);
+ _object2.fixPriority(95);
+ _object2.animate(ANIM_MODE_2, NULL);
+ _object2._numFrames = 5;
+ _object2._field15F8 = 0;
+ _field31EA = 0;
+
+ //Neon sign
+ _object7.postInit();
+ _object7.setVisage(115);
+ _object7.setStrip(4);
+ _object7.setFrame(1);
+ _object7.setPosition(Common::Point(262, 29));
+ _object7.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.proc1(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);
+ _field168A = 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) {
+ _object1.postInit();
+ _object1.setVisage(131);
+ _object1.setPosition(Common::Point(122, 97));
+ _object1.setStrip(1);
+ _object1.setFrame(1);
+ _object1.changeZoom(100);
+ _object1.fixPriority(95);
+ BF_GLOBALS._sceneItems.push_front(&_object1);
+ }
+ addTimer(&_eventHandler1);
+ }
+ BF_GLOBALS._sceneItems.push_front(&_object2);
+
+ _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(&_item1);
+ _item1.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 + _field168A, 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);
+ _field168A++;
+ if (_field168A >= 4)
+ _field168A = 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(_field168A);
+ s.syncAsSint16LE(_field31E8);
+ s.syncAsSint16LE(_field31EA);
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 125 - Intro - Chase in the city
+ *
+ *--------------------------------------------------------------------------*/
+void Scene125::Action1::signal() {
+ Scene125 *scene = (Scene125 *)BF_GLOBALS._sceneManager._scene;
+ SceneObject *owner = static_cast<SceneObject *>(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<SceneObject *>(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<SceneObject *>(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<SceneObject *>(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<SceneObject *>(this->_owner);
+
+ Action::dispatch();
+
+ if ((_actionIndex == 4) && (owner->_percent > 80))
+ owner->changeZoom(owner->_percent - 1);
+}
+
+void Scene125::Action5::signal() {
+ SceneObject *owner = static_cast<SceneObject *>(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<SceneObject *>(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<SceneObject *>(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<SceneObject *>(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<SceneObject *>(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<SceneObject *>(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() {
+ _fieldC56 = 0;
+}
+
+void Scene180::synchronize(Serializer &s) {
+ SceneExt::synchronize(s);
+ s.syncAsSint16LE(_fieldC56);
+}
+
+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);
+ _fieldC56 = 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, 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, 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));
+
+ _fieldC56 = 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);
+
+ _fieldC56 = 1;
+ _vechile._moveDiff.x = 45;
+ } else {
+ _vechile.setVisage(444);
+ _vechile.setStrip(2);
+ _vechile.changeZoom(85);
+
+ _fieldC56 = 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:
+ _fieldC56 = 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:
+ _fieldC56 = 0;
+ BF_GLOBALS._sound1.fadeOut2(NULL);
+ BF_GLOBALS._sceneManager.changeScene(BF_GLOBALS._driveToScene);
+ break;
+ case 3:
+ _fieldC56 = 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, 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:
+ _fieldC56 = 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 (_fieldC56) {
+ 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::Object4::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->_object2.animate(ANIM_MODE_5, this);
+ break;
+ case 3:
+ ADD_MOVER(BF_GLOBALS._player, 180, 86);
+ break;
+ case 4:
+ scene->_sound.play(82);
+ scene->_object2.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;
+
+ // Load the scene data
+ loadScene(190);
+ BF_GLOBALS._scenePalette.loadPalette(2);
+
+ _stripManager.addSpeaker(&_speaker);
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.disableControl();
+
+ // Initialise objects
+ _object2.postInit();
+ _object2.setVisage(190);
+ _object2.setStrip(1);
+ _object2.setPosition(Common::Point(179, 88));
+
+ _object3.postInit();
+ _object3.setVisage(190);
+ _object3.setStrip(2);
+ _object3.fixPriority(200);
+ _object3.setPosition(Common::Point(170, 31));
+ _object3.animate(ANIM_MODE_7, 0, NULL);
+ _object3.setDetails(190, 8, 26, 19, 1, NULL);
+
+ 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);
+
+ _object4.postInit();
+ _object4.setVisage(444);
+ _object4.setFrame(2);
+ _object4.setPosition(Common::Point(54, 114));
+ _object4.setDetails(190, -1, -1, -1, 1, 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, &_object2, 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, &_object2, NULL);
+ break;
+ case 50:
+ case 60:
+ default:
+ BF_GLOBALS.setFlag(onBike);
+ BF_GLOBALS._player.disableControl();
+ 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);
+ }
+}
+
+} // End of namespace BlueForce
+
+} // End of namespace TsAGE
diff --git a/engines/tsage/blue_force/blueforce_scenes1.h b/engines/tsage/blue_force/blueforce_scenes1.h
new file mode 100644
index 0000000000..bdf414ec9b
--- /dev/null
+++ b/engines/tsage/blue_force/blueforce_scenes1.h
@@ -0,0 +1,488 @@
+/* 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.
+ *
+ */
+
+#ifndef TSAGE_BLUEFORCE_SCENES1_H
+#define TSAGE_BLUEFORCE_SCENES1_H
+
+#include "common/scummsys.h"
+#include "tsage/blue_force/blueforce_logic.h"
+#include "tsage/blue_force/blueforce_speakers.h"
+#include "tsage/converse.h"
+#include "tsage/events.h"
+#include "tsage/core.h"
+#include "tsage/scenes.h"
+#include "tsage/globals.h"
+#include "tsage/sound.h"
+
+namespace TsAGE {
+
+namespace BlueForce {
+
+using namespace TsAGE;
+
+class Scene100: public SceneExt {
+ /* Support classes */
+ class Text: public SceneText {
+ public:
+ virtual Common::String getClassName() { return "BF100Text"; }
+ virtual void dispatch();
+ };
+
+ /* Actions */
+ class Action1: public ActionExt {
+ private:
+ void setTextStrings(const Common::String &msg1, const Common::String &msg2, Action *action);
+ public:
+ Text _sceneText1;
+ SceneText _sceneText2;
+ int _textHeight;
+
+ virtual Common::String getClassName() { return "BF100Action1"; }
+ virtual void synchronize(Serializer &s) {
+ ActionExt::synchronize(s);
+ s.syncAsSint16LE(_textHeight);
+ }
+ virtual void signal();
+ };
+ class Action2: public ActionExt {
+ public:
+ virtual void signal();
+ };
+public:
+ SequenceManager _sequenceManager;
+ Action1 _action1;
+ Action2 _action2;
+ ScenePalette _scenePalette;
+ NamedObject _object1, _object2, _object3, _object4, _object5;
+ int _index;
+
+ Scene100();
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+};
+
+class Scene109: public PalettedScene {
+ /* Actions */
+ class Action1: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action2: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action3: public Action {
+ public:
+ virtual void signal();
+ };
+
+public:
+ SequenceManager _sequenceManager1, _sequenceManager2, _sequenceManager3;
+ SequenceManager _sequenceManager4, _sequenceManager5, _sequenceManager6;
+ SequenceManager _sequenceManager7, _sequenceManager8;
+ SceneObject _object1, _object2, _protaginist2, _protaginist1, _object5;
+ SceneObject _drunk, _object7, _bartender, _object9, _object10;
+ IntroSceneText _text;
+ Action1 _action1;
+ Action _action2, _action3;
+public:
+ Scene109();
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+};
+
+class Scene110: public SceneExt {
+ /* Actions */
+ class Action1: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action2: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action3: public Action {
+ public:
+ virtual void signal();
+ virtual void dispatch();
+ };
+ class Action4: public Action {
+ public:
+ virtual void signal();
+ virtual void dispatch();
+ };
+ class Action5: public Action {
+ public:
+ virtual void signal();
+ };
+public:
+ NamedObject _object1, _object2, _object3, _object4, _object5, _object6, _object7, _object8, _object9, _object10;
+ ASound _sound;
+ Action1 _action1;
+ Action2 _action2;
+ Action3 _action3;
+ Action4 _action4;
+ Action5 _action5;
+public:
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+};
+
+class Scene114: public SceneExt {
+ /* Objects */
+ class Vechile: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Door: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+public:
+ SequenceManager _sequenceManager1;
+ Vechile _vechile;
+ Door _door;
+ NamedObject _lyle;
+ NamedHotspot _item1;
+public:
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+};
+
+class Scene115: public SceneExt {
+ /* Objects */
+ class Object1: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Object2: public NamedObject {
+ public:
+ int _field15F8;
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Object3: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Object4: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Custom class */
+ class EventHandler1: public EventHandler {
+ public:
+ virtual Common::String getClassName() { return "Scene115_EventHandler1"; }
+ virtual void dispatch();
+ };
+
+ /* Items */
+ class Item1: public NamedHotspot {
+ SequenceManager _sequenceManager6;
+ public:
+ int _field1F8A;
+
+ Item1();
+ virtual bool startAction(CursorType action, Event &event);
+ virtual void signal();
+ virtual void synchronize(Serializer &s);
+ };
+ class Item10: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Item14: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Actions */
+ class Action1: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action2: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action3: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action4: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action5: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action6: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action7: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action8: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action9: public Action {
+ public:
+ virtual void signal();
+ };
+
+ SequenceManager _sequenceManager1;
+ SequenceManager _sequenceManager2;
+ SequenceManager _sequenceManager3;
+ SequenceManager _sequenceManager4;
+ SequenceManager _sequenceManager5;
+ Object1 _object1;
+ Object2 _object2;
+ Object3 _object3;
+ Object4 _object4;
+ SceneObject _object5, _object6, _object7, _object8, _object9;
+ SceneObject _object10, _object11, _object12, _object13;
+ Item1 _item1;
+ EventHandler1 _eventHandler1;
+ NamedHotspot _item2, _item3, _item4, _item5, _item6, _item7, _item8, _item9;
+ Item10 _item10;
+ NamedHotspot _item11, _item12, _item13;
+ Item14 _item14;
+ Action1 _action1;
+ Action2 _action2;
+ Action3 _action3;
+ Action4 _action4;
+ Action5 _action5;
+ Action6 _action6;
+ Action7 _action7;
+ Action8 _action8;
+ Action9 _action9;
+ SpeakerGameText _gameTextSpeaker;
+ SpeakerKate _kateSpeaker;
+ SpeakerTony _tonySpeaker;
+ SpeakerJakeJacket _jakeJacketSpeaker;
+ SpeakerJakeUniform _jakeUniformSpeaker;
+ SpeakerLyleHat _lyleHatSpeaker;
+ ASound _sound1;
+ int _field168A;
+ int _field31E8;
+ int _field31EA;
+public:
+ Scene115();
+ virtual void synchronize(Serializer &s);
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+ virtual void process(Event &event);
+};
+
+class Scene125: public SceneExt {
+ class Action1: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action2: public Action {
+ public:
+ virtual void signal();
+ virtual void dispatch();
+ };
+ class Action3: public Action {
+ public:
+ virtual void signal();
+ virtual void dispatch();
+ };
+ class Action4: public Action {
+ public:
+ virtual void signal();
+ virtual void dispatch();
+ };
+ class Action5: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action6: public Action {
+ public:
+ virtual void signal();
+ virtual void dispatch();
+ };
+
+public:
+ Action1 _action1;
+ Action2 _action2;
+ Action3 _action3;
+ Action4 _action4;
+ Action5 _action5;
+ Action6 _action6;
+ NamedObject _object1, _object2, _object3, _object4, _object5;
+ NamedObject _object6, _object7, _object8, _object9;
+ ASoundExt _soundExt1;
+ ASoundExt _soundExt2;
+
+ void postInit(SceneObjectList *OwnerList);
+};
+
+class Scene140: public SceneExt {
+ class Action1: public Action {
+ public:
+ virtual void signal();
+ };
+public:
+ Action1 _action1;
+ ASoundExt _soundExt1;
+ NamedObject _object1;
+ NamedObject _object2;
+ IntroSceneText _text;
+
+ void postInit(SceneObjectList *OwnerList);
+};
+
+class Scene150: public SceneExt {
+ class Action1: public Action {
+ NamedObject _object2;
+ ASound _sound1;
+ public:
+ virtual void signal();
+ };
+public:
+ NamedObject _object1;
+ Action1 _action1;
+
+ void postInit(SceneObjectList *OwnerList);
+};
+
+class Scene160: public SceneExt {
+ class Action1: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action2: public Action {
+ public:
+ virtual void signal();
+ virtual void process(Event &event);
+ };
+ class Action3: public ActionExt {
+ public:
+ virtual void signal();
+ };
+public:
+ NamedObject _flag, _kid, _kidBody, _leftOfficer, _grandma, _rightOfficer;
+ ASound _sound1;
+ Action1 _action1;
+ Action2 _action2;
+ Action3 _action3;
+ IntroSceneText _text;
+
+ void postInit(SceneObjectList *OwnerList);
+};
+
+class Scene180: public SceneExt {
+ /* Objects */
+ class Vechile: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Items */
+ class GarageExit: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+public:
+ SequenceManager _sequenceManager;
+ SpeakerGameText _gameTextSpeaker;
+ NamedObject _object1;
+ Vechile _vechile;
+ NamedHotspot _driveway, _garage, _frontDoor, _house, _street;
+ NamedHotspot _lawn, _bushes, _palms, _fence, _steps;
+ NamedHotspot _curb, _sky;
+ GarageExit _garageExit;
+ ASoundExt _sound1;
+ SceneMessage _sceneMessage;
+ int _fieldC56;
+
+ Scene180();
+ virtual void synchronize(Serializer &s);
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+ virtual void process(Event &event);
+ virtual void dispatch();
+};
+
+class Scene190: public SceneExt {
+ /* Objects */
+ class Object4: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Items */
+ class Item1: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Item2: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Exit: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Actions */
+ class Action1: public Action {
+ public:
+ virtual void signal();
+ };
+public:
+ SequenceManager _sequenceManager;
+ FollowerObject _object1;
+ NamedObject _object2, _object3;
+ Object4 _object4;
+ Item1 _item1;
+ Item2 _item2;
+ NamedHotspot _item3, _item4, _item5, _item6;
+ NamedHotspot _item7, _item8, _item9, _item10;
+ Exit _exit;
+ Action1 _action1;
+ ASoundExt _sound;
+ SpeakerGameText _speaker;
+ bool _fieldB52;
+
+ Scene190();
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+ virtual void process(Event &event);
+ virtual void dispatch();
+ virtual void synchronize(Serializer &s) {
+ SceneExt::synchronize(s);
+ s.syncAsSint16LE(_fieldB52);
+ }
+};
+
+} // End of namespace BlueForce
+
+} // End of namespace TsAGE
+
+#endif
diff --git a/engines/tsage/blue_force/blueforce_scenes2.cpp b/engines/tsage/blue_force/blueforce_scenes2.cpp
new file mode 100644
index 0000000000..3af02bd463
--- /dev/null
+++ b/engines/tsage/blue_force/blueforce_scenes2.cpp
@@ -0,0 +1,1853 @@
+/* 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_scenes2.h"
+#include "tsage/scenes.h"
+#include "tsage/tsage.h"
+
+namespace TsAGE {
+
+namespace BlueForce {
+
+/*--------------------------------------------------------------------------
+ * Scene 200 - Credits - Motorcycle Training
+ *
+ *--------------------------------------------------------------------------*/
+
+void Scene200::Action1::signal() {
+ Scene200 *scene = (Scene200 *)BF_GLOBALS._sceneManager._scene;
+ SceneObject *owner = static_cast<SceneObject *>(this->_owner);
+
+ assert(owner);
+
+ switch (_actionIndex++) {
+ case 0:
+ setDelay(1);
+ break;
+ case 1:
+ BF_GLOBALS._scenePalette.loadPalette(235);
+ BF_GLOBALS._scenePalette.refresh();
+ _state = 0;
+ setDelay(30);
+ break;
+ case 2:
+ assert(_owner);
+ owner->animate(ANIM_MODE_5, this);
+ break;
+ case 3:
+ if (++_state < 2) {
+ scene->_action2.signal();
+ owner->setFrame(1);
+ _actionIndex = 2;
+ }
+ setDelay(2);
+ break;
+ case 4: {
+ PaletteRotation *rot;
+ rot = BF_GLOBALS._scenePalette.addRotation(64, 79, 1);
+ rot->setDelay(10);
+ rot = BF_GLOBALS._scenePalette.addRotation(96, 111, 1);
+ rot->setDelay(10);
+
+ scene->setAction(&scene->_sequenceManager, this, 201, &scene->_object1, &scene->_object2,
+ &scene->_object3, &scene->_object4, &scene->_object5, &scene->_object6, NULL);
+ break;
+ }
+ case 5:
+ BF_GLOBALS._sceneManager.changeScene(210);
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene200::Action2::signal() {
+ SceneObject *owner = static_cast<SceneObject *>(this->_owner);
+ assert(owner);
+
+ switch (_actionIndex++) {
+ case 1:
+ owner->setPosition(owner->_position, 0);
+ owner->animate(ANIM_MODE_5, this);
+ break;
+ case 2:
+ owner->setPosition(owner->_position, 1000);
+ owner->setFrame(1);
+ _actionIndex = 0;
+ setDelay(1);
+ break;
+ default:
+ break;
+ }
+}
+
+
+/*--------------------------------------------------------------------------*/
+
+void Scene200::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+ loadScene(200);
+ setZoomPercents(0, 100, 200, 100);
+ BF_GLOBALS._sound1.play(3);
+
+ _object10.postInit();
+ _object10.setVisage(200);
+ _object10.setPosition(Common::Point(114, 102));
+ _object10.setStrip(2);
+ _object10.setFrame(1);
+ _object10.changeZoom(100);
+
+ _object1.postInit();
+ _object1.hide();
+ _object2.postInit();
+ _object2.hide();
+ _object3.postInit();
+ _object3.hide();
+ _object4.postInit();
+ _object4.hide();
+ _object5.postInit();
+ _object5.hide();
+ _object6.postInit();
+ _object6.hide();
+
+ _object11.postInit();
+ _object11.setVisage(200);
+ _object11.setPosition(Common::Point(96, 112), 1000);
+ _object11.setStrip(3);
+ _object11.setFrame(1);
+ _object11.changeZoom(100);
+
+ _object10.setAction(&_action1);
+ _object11.setAction(&_action2);
+}
+
+void Scene200::remove() {
+ BF_GLOBALS._scenePalette.clearListeners();
+ SceneExt::remove();
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 210 - Credits - Car Training
+ *
+ *--------------------------------------------------------------------------*/
+
+void Scene210::Action1::signal() {
+ Scene210 *scene = (Scene210 *)BF_GLOBALS._sceneManager._scene;
+ SceneObject *owner = static_cast<SceneObject *>(_owner);
+ assert(owner);
+
+ switch (_actionIndex++) {
+ case 0:
+ setDelay(1);
+ break;
+ case 1:
+ owner->animate(ANIM_MODE_5, this);
+ break;
+ case 2: {
+ PaletteRotation *rot;
+ rot = BF_GLOBALS._scenePalette.addRotation(64, 79, 1);
+ rot->setDelay(10);
+ rot = BF_GLOBALS._scenePalette.addRotation(96, 111, 1);
+ rot->setDelay(10);
+
+ scene->setAction(&scene->_sequenceManager, this, 210, &scene->_object10, &scene->_object11,
+ &scene->_object12, &scene->_object13, &scene->_object14, &scene->_object15, NULL);
+ break;
+ }
+ case 3:
+ BF_GLOBALS._sceneManager.changeScene(220);
+ break;
+ default:
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene210::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+ loadScene(210);
+
+// FIXME: This fixes an obvious glitch during scene transition.
+// Shouldn't it be included in the 2 previous functions?
+ clearScreen();
+//
+
+ BF_GLOBALS._scenePalette.loadPalette(235);
+ BF_GLOBALS._scenePalette.refresh();
+
+ _object9.postInit();
+ _object9.setVisage(210);
+ _object9.setPosition(Common::Point(146, 151));
+ _object9.setStrip(1);
+ _object9.setFrame(1);
+ _object9.changeZoom(100);
+ _object9.setAction(&_action1);
+
+ _object10.postInit();
+ _object10.hide();
+ _object11.postInit();
+ _object11.hide();
+ _object12.postInit();
+ _object12.hide();
+ _object13.postInit();
+ _object13.hide();
+ _object14.postInit();
+ _object14.hide();
+ _object15.postInit();
+ _object15.hide();
+}
+
+void Scene210::remove() {
+ BF_GLOBALS._scenePalette.clearListeners();
+ SceneExt::remove();
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 220 - Credits - Martial Arts
+ *
+ *--------------------------------------------------------------------------*/
+
+void Scene220::Action1::signal() {
+ Scene220 *scene = (Scene220 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ setDelay(1);
+ break;
+ case 1:
+ BF_GLOBALS._scenePalette.loadPalette(235);
+ BF_GLOBALS._scenePalette.refresh();
+ setDelay(30);
+ break;
+ case 2:
+ BF_GLOBALS._scenePalette.clearListeners();
+ scene->_object2.animate(ANIM_MODE_5, this);
+ break;
+ case 3:
+ scene->_object2.setVisage(221);
+ scene->_object2.setFrame(1);
+ scene->_object2.setPosition(Common::Point(178, 122));
+ scene->_object2.animate(ANIM_MODE_5, this);
+ break;
+ case 4:
+ BF_GLOBALS._scenePalette.loadPalette(2);
+ BF_GLOBALS._scenePalette.refresh();
+ BF_GLOBALS._scenePalette.loadPalette(235);
+ BF_GLOBALS._scenePalette.refresh();
+ setDelay(5);
+ break;
+ case 5:
+ scene->_object1.remove();
+
+ scene->_object2.setVisage(222);
+ scene->_object2.setFrame(1);
+ scene->_object2.setPosition(Common::Point(164, 138));
+ scene->_object2.animate(ANIM_MODE_5, this);
+ break;
+ case 6:
+ scene->_object2.setVisage(223);
+ scene->_object2.setFrame(1);
+ scene->_object2.setPosition(Common::Point(164, 139));
+ scene->_object2.animate(ANIM_MODE_5, this);
+ break;
+ case 7:
+ scene->_object2.setVisage(230);
+ scene->_object2.setFrame(1);
+ scene->_object2.setPosition(Common::Point(168, 136));
+ scene->_object2.animate(ANIM_MODE_4, 13, 1, this);
+ break;
+ case 8:
+ scene->_object2.animate(ANIM_MODE_5, this);
+
+ scene->_object3.postInit();
+ scene->_object3.setVisage(231);
+ scene->_object3.setPosition(Common::Point(65, 179));
+ scene->_object3.setStrip(1);
+ scene->_object3.setFrame(1);
+ scene->_object3.changeZoom(100);
+ scene->_object3.setAction(&scene->_action2, this);
+ break;
+ case 9:
+ break;
+ case 10:
+ scene->_object2.setVisage(224);
+ scene->_object2.setFrame(1);
+ scene->_object2.setPosition(Common::Point(148, 143));
+ scene->_object2.animate(ANIM_MODE_5, this);
+ break;
+ case 11: {
+ PaletteRotation *rot;
+ rot = BF_GLOBALS._scenePalette.addRotation(64, 79, 1);
+ rot->setDelay(10);
+ rot = BF_GLOBALS._scenePalette.addRotation(96, 111, 1);
+ rot->setDelay(10);
+
+ scene->setAction(&scene->_sequenceManager, this, 220, &scene->_object4, &scene->_object5,
+ &scene->_object6, &scene->_object7, &scene->_object8, &scene->_object9, NULL);
+ break;
+ }
+ case 12:
+ scene->_object2.setVisage(232);
+ scene->_object2.setFrame(1);
+ scene->_object2.setPosition(Common::Point(146, 143));
+ scene->_object2._numFrames = 5;
+ scene->_object2.animate(ANIM_MODE_5, this);
+ break;
+ case 13:
+ scene->_object2.setVisage(228);
+ scene->_object2.setFrame(1);
+ scene->_object2.animate(ANIM_MODE_5, this);
+ break;
+ case 14:
+ scene->_object2.setVisage(229);
+ scene->_object2.setFrame(1);
+ scene->_object2.animate(ANIM_MODE_5, this);
+ break;
+ case 15:
+ BF_GLOBALS._sceneManager.changeScene(225);
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene220::Action2::signal() {
+ Scene220 *scene = (Scene220 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ scene->_object3.setPosition(scene->_object3._position);
+ scene->_object3.animate(ANIM_MODE_5, this);
+ break;
+ case 1:
+ setDelay(50);
+ break;
+ case 2:
+ scene->_object3.remove();
+ remove();
+ break;
+ default:
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene220::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+ loadScene(220);
+
+// FIXME: This fixes an obvious glitch during scene transition.
+// Shouldn't it be included in the 2 previous functions?
+ clearScreen();
+//
+
+ _object2.postInit();
+ _object2.setVisage(220);
+ _object2.setPosition(Common::Point(182, 122));
+ _object2.setStrip(1);
+ _object2.setFrame(1);
+ _object2.changeZoom(100);
+
+ _object1.postInit();
+ _object1.setVisage(220);
+ _object1.setPosition(Common::Point(164, 138));
+ _object1.setStrip(2);
+ _object1.setFrame(1);
+ _object1.changeZoom(100);
+
+ _object4.postInit();
+ _object4.hide();
+ _object5.postInit();
+ _object5.hide();
+ _object6.postInit();
+ _object6.hide();
+ _object7.postInit();
+ _object7.hide();
+ _object8.postInit();
+ _object8.hide();
+ _object9.postInit();
+ _object9.hide();
+
+ _object2.setAction(&_action1);
+}
+
+void Scene220::remove() {
+ BF_GLOBALS._scenePalette.clearListeners();
+ SceneExt::remove();
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 225 - Credits - Gun Training
+ *
+ *--------------------------------------------------------------------------*/
+
+void Scene225::Action1::signal() {
+ Scene225 *scene = (Scene225 *)BF_GLOBALS._sceneManager._scene;
+ SceneObject *owner = static_cast<SceneObject *>(this->_owner);
+
+ switch (_actionIndex++) {
+ case 0:
+ setDelay(30);
+ break;
+ case 1:
+ BF_GLOBALS._scenePalette.loadPalette(235);
+ BF_GLOBALS._scenePalette.refresh();
+ setDelay(5);
+ break;
+ case 2:
+ owner->animate(ANIM_MODE_4, 7, 1, this);
+ break;
+ case 3:
+ scene->_object8.animate(ANIM_MODE_5, this);
+ owner->animate(ANIM_MODE_5, this);
+ break;
+ case 4:
+ scene->_object8.remove();
+ break;
+ case 5:
+ scene->_action3.signal();
+ break;
+ case 6:
+ owner->setPosition(Common::Point(owner->_position.x, owner->_position.y - 4));
+ owner->setStrip(2);
+ owner->setFrame(1);
+ owner->animate(ANIM_MODE_5, this);
+ break;
+ case 7:
+ scene->_action2.signal();
+ break;
+ case 8:
+ owner->animate(ANIM_MODE_6, this);
+ break;
+ case 9:
+ owner->setPosition(Common::Point(owner->_position.x - 2, owner->_position.y - 1));
+ owner->setStrip(3);
+ owner->setFrame(1);
+ owner->animate(ANIM_MODE_5, this);
+ break;
+ case 10: {
+ owner->setPosition(Common::Point(owner->_position.x + 10, owner->_position.y + 4));
+ owner->setStrip(4);
+ owner->setFrame(1);
+ owner->fixPriority(116);
+ owner->animate(ANIM_MODE_1, NULL);
+
+ Common::Point destPos(138, 117);
+ NpcMover *mover = new NpcMover();
+ owner->addMover(mover, &destPos, this);
+ break;
+ }
+ case 11: {
+ owner->setPosition(Common::Point(owner->_position.x - 12, owner->_position.y - 1));
+ owner->setStrip(5);
+ owner->setFrame(1);
+ owner->_moveDiff.x = 8;
+
+ Common::Point destPos(402, 116);
+ NpcMover *mover2 = new NpcMover();
+ owner->addMover(mover2, &destPos, this);
+
+ BF_GLOBALS._player.setPosition(Common::Point(owner->_position.x, 0));
+ ADD_MOVER_NULL(BF_GLOBALS._player, 500, 0);
+ break;
+ }
+ case 12:
+ owner->setVisage(1227);
+ owner->setStrip(1);
+ owner->setFrame(1);
+ owner->animate(ANIM_MODE_5, this);
+ break;
+ case 13:
+ owner->setStrip(2);
+ owner->setFrame(4);
+ scene->_action4.signal();
+ break;
+ case 14:
+ owner->animate(ANIM_MODE_6, this);
+ break;
+ case 15:
+ scene->_action6.signal();
+ break;
+ case 16:
+ owner->animate(ANIM_MODE_4, 4, 1, this);
+ break;
+ case 17:
+ owner->setFrame(6);
+ owner->animate(ANIM_MODE_5, this);
+ break;
+ case 18:
+ scene->_action5.signal();
+ break;
+ case 19:
+ owner->animate(ANIM_MODE_4, 4, -1, this);
+ break;
+ case 20:
+ PaletteRotation *rot;
+ rot = BF_GLOBALS._scenePalette.addRotation(64, 79, 1);
+ rot->setDelay(10);
+ rot = BF_GLOBALS._scenePalette.addRotation(96, 111, 1);
+ rot->setDelay(10);
+
+ scene->setAction(&scene->_sequenceManager, this, 225, &scene->_object15, &scene->_object16,
+ &scene->_object17, &scene->_object18, &scene->_object19, &scene->_object20, NULL);
+ break;
+ case 21:
+ scene->_object21.hide();
+ BF_GLOBALS._player._moveDiff.x = 5;
+ BF_GLOBALS._sceneManager.changeScene(265);
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene225::Action2::signal() {
+ Scene225 *scene = (Scene225 *)BF_GLOBALS._sceneManager._scene;
+ SceneObject *owner = static_cast<SceneObject *>(this->_owner);
+
+ switch (_actionIndex++) {
+ case 0:
+ break;
+ case 1:
+ owner->animate(ANIM_MODE_5, this);
+ break;
+ case 2:
+ owner->setStrip(3);
+ owner->setFrame(2);
+ scene->_action1.signal();
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene225::Action3::signal() {
+ Scene225 *scene = (Scene225 *)BF_GLOBALS._sceneManager._scene;
+ SceneObject *owner = static_cast<SceneObject *>(this->_owner);
+
+ switch (_actionIndex++) {
+ case 0:
+ break;
+ case 1:
+ owner->animate(ANIM_MODE_5, this);
+ break;
+ case 2:
+ owner->setStrip(3);
+ owner->setFrame(1);
+ scene->_action1.signal();
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene225::Action4::signal() {
+ Scene225 *scene = (Scene225 *)BF_GLOBALS._sceneManager._scene;
+ SceneObject *owner = static_cast<SceneObject *>(this->_owner);
+
+ switch (_actionIndex++) {
+ case 0:
+ break;
+ case 1:
+ owner->animate(ANIM_MODE_5, this);
+ break;
+ case 2:
+ owner->setStrip(5);
+ owner->setFrame(4);
+ scene->_action1.signal();
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene225::Action5::signal() {
+ Scene225 *scene = (Scene225 *)BF_GLOBALS._sceneManager._scene;
+ SceneObject *owner = static_cast<SceneObject *>(this->_owner);
+
+ switch (_actionIndex++) {
+ case 0:
+ break;
+ case 1:
+ owner->animate(ANIM_MODE_5, this);
+ break;
+ case 2:
+ owner->setStrip(3);
+ owner->setFrame(6);
+ scene->_action1.signal();
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene225::Action6::signal() {
+ Scene225 *scene = (Scene225 *)BF_GLOBALS._sceneManager._scene;
+ SceneObject *owner = static_cast<SceneObject *>(this->_owner);
+
+ switch (_actionIndex++) {
+ case 0:
+ break;
+ case 1:
+ owner->animate(ANIM_MODE_5, this);
+ break;
+ case 2:
+ owner->setStrip(3);
+ owner->setFrame(3);
+ scene->_action1.signal();
+ break;
+ default:
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene225::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+ loadScene(1225);
+ loadBackground(-320, 0);
+
+ _object8.postInit();
+ _object8.setVisage(1225);
+ _object8.setPosition(Common::Point(114, 119));
+ _object8._frame = 1;
+ _object8.setStrip(2);
+ _object8.changeZoom(100);
+
+ _object9.postInit();
+ _object9.setVisage(1226);
+ _object9.setPosition(Common::Point(83, 128));
+ _object9.setStrip(1);
+ _object9.changeZoom(100);
+
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.setPosition(Common::Point(83, 0));
+ BF_GLOBALS._player.hide();
+
+ _object10.postInit();
+ _object10.setVisage(1225);
+ _object10.setPosition(Common::Point(237, 29));
+ _object10.setStrip(1);
+ _object10._frame = 1;
+ _object10.changeZoom(100);
+ _object10._numFrames = 2;
+
+ _object11.postInit();
+ _object11.setVisage(1225);
+ _object11.setPosition(Common::Point(290, 47));
+ _object11.setStrip(1);
+ _object11._frame = 1;
+ _object11.changeZoom(100);
+ _object11._numFrames = 2;
+
+ _object12.postInit();
+ _object12.setVisage(1225);
+ _object12.setPosition(Common::Point(368, 35));
+ _object12.setStrip(4);
+ _object12._frame = 1;
+ _object12.changeZoom(100);
+ _object12._numFrames = 2;
+
+ _object13.postInit();
+ _object13.setVisage(1225);
+ _object13.setPosition(Common::Point(416, 33));
+ _object13.setStrip(1);
+ _object13._frame = 1;
+ _object13.changeZoom(100);
+ _object13._numFrames = 2;
+
+ _object14.postInit();
+ _object14.setVisage(1225);
+ _object14.setPosition(Common::Point(476, 30));
+ _object14.setStrip(1);
+ _object14._frame = 1;
+ _object14.changeZoom(100);
+ _object14._numFrames = 2;
+
+ _object21.postInit();
+ _object21.setVisage(235);
+ _object21.setStrip(1);
+ _object21._frame = 1;
+ _object21.setPosition(Common::Point(498, 41));
+ _object21.changeZoom(100);
+ _object21.hide();
+
+ _object15.postInit();
+ _object15.hide();
+ _object16.postInit();
+ _object16.hide();
+ _object17.postInit();
+ _object17.hide();
+ _object18.postInit();
+ _object18.hide();
+ _object19.postInit();
+ _object19.hide();
+ _object20.postInit();
+ _object20.hide();
+
+ _object9.setAction(&_action1);
+ _object10.setAction(&_action2);
+ _object11.setAction(&_action3);
+ _object12.setAction(&_action4);
+ _object13.setAction(&_action5);
+ _object14.setAction(&_action6);
+}
+
+void Scene225::remove() {
+ BF_GLOBALS._scenePalette.clearListeners();
+ SceneExt::remove();
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 265 - Intro - Graduation Article
+ *
+ *--------------------------------------------------------------------------*/
+
+void Scene265::Action1::signal() {
+ switch (_actionIndex++) {
+ case 0:
+ BF_GLOBALS._scenePalette.loadPalette(2);
+ setDelay(30);
+ break;
+ case 1:
+ BF_GLOBALS._scenePalette.refresh();
+ setDelay(240);
+ break;
+ case 2:
+ ADD_MOVER(BF_GLOBALS._player, 160, 280);
+ break;
+ case 3:
+ // Wait until sound finishes playing
+ if (BF_GLOBALS._sound1.isPlaying())
+ _actionIndex = 3;
+ setDelay(1);
+ break;
+ case 4:
+ BF_GLOBALS._dayNumber = 1;
+ BF_GLOBALS._sceneManager.changeScene(190);
+ break;
+ default:
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene265::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+ loadScene(265);
+
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.setPosition(Common::Point(160, 100));
+ BF_GLOBALS._player.hide();
+ setAction(&_action1);
+}
+
+void Scene265::remove() {
+ clearScreen();
+ SceneExt::remove();
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 270 - Living Room & Kitchen
+ *
+ *--------------------------------------------------------------------------*/
+
+void Scene270::Action1::signal() {
+ Scene270 *scene = (Scene270 *)BF_GLOBALS._sceneManager._scene;
+
+ scene->setAction(&scene->_sequenceManager2, this, 2703, &scene->_tv, NULL);
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene270::Lyle::startAction(CursorType action, Event &event) {
+ Scene270 *scene = (Scene270 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_TALK:
+ scene->_field21A0 = 1;
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 2706;
+
+ if (scene->_field380 == 1) {
+ scene->setAction(&scene->_sequenceManager1, scene, 2706, &BF_GLOBALS._player, &scene->_object2, NULL);
+ } else {
+ scene->signal();
+ }
+ return true;
+ case INV_CRATE1:
+ scene->_field21A0 = 2;
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 2706;
+
+ if (scene->_field380 == 1) {
+ scene->setAction(&scene->_sequenceManager1, scene, 2706, &BF_GLOBALS._player, NULL);
+ } else {
+ scene->signal();
+ }
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene270::Grandma::startAction(CursorType action, Event &event) {
+ Scene270 *scene = (Scene270 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_TALK:
+ switch (BF_GLOBALS._dayNumber) {
+ case 1:
+ // Day 1
+ if (scene->_field380 == 1) {
+ scene->_stripManager.start((scene->_grandma._position.x == 157) ? 2712 : 2723, &BF_GLOBALS._stripProxy);
+ } else if (BF_GLOBALS._bookmark == bBookedFrankieEvidence) {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 2710;
+ scene->setAction(&scene->_sequenceManager1, scene, 2710, &BF_GLOBALS._player, &scene->_grandma, NULL);
+ } else if (BF_GLOBALS.getFlag(onDuty) || (BF_INVENTORY.getObjectScene(INV_BASEBALL_CARD) == 2) ||
+ (scene->_field386 != 0)) {
+ scene->_stripManager.start(2723, &BF_GLOBALS._stripProxy);
+ } else {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 2715;
+ scene->setAction(&scene->_sequenceManager1, scene, 2715, &BF_GLOBALS._player, &scene->_grandma, NULL);
+ }
+ return true;
+ case 3:
+ // Day 3
+ if (scene->_field380 == 1) {
+ scene->_stripManager.start(2712, &BF_GLOBALS._stripProxy);
+ } else if (BF_GLOBALS.getFlag(fGotGreen355fTalkedToGrannyDay3)) {
+ scene->_stripManager.start(2714, &BF_GLOBALS._stripProxy);
+ } else {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 2713;
+ scene->setAction(&scene->_sequenceManager1, scene, 2713, &BF_GLOBALS._player, &scene->_grandma, NULL);
+ }
+ return true;
+ default:
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+
+ return NamedObject::startAction(action, event);
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene270::Item::startAction(CursorType action, Event &event) {
+ Scene270 *scene = (Scene270 *)BF_GLOBALS._sceneManager._scene;
+
+ if ((action == CURSOR_USE) && (scene->_field380 == 0)) {
+ BF_GLOBALS._player.disableControl();
+ scene->_object2.postInit();
+ scene->_object2.hide();
+ scene->_sceneMode = 2705;
+ scene->setAction(&scene->_sequenceManager1, scene, 2705, &BF_GLOBALS._player, &scene->_object2, NULL);
+ return true;
+ } else {
+ return NamedHotspot::startAction(action, event);
+ }
+}
+
+bool Scene270::Exit::startAction(CursorType action, Event &event) {
+ Scene270 *scene = (Scene270 *)BF_GLOBALS._sceneManager._scene;
+
+ if (!_action && !scene->_field384 && !scene->_field386) {
+ if (scene->_field380 == 1) {
+ scene->_tempPos = Common::Point(320, 140);
+ BF_GLOBALS._player.disableControl();
+
+ scene->_sceneMode = 2706;
+ scene->setAction(&scene->_sequenceManager1, scene, 2706, &BF_GLOBALS._player, &scene->_object2, NULL);
+ } else {
+ ADD_PLAYER_MOVER(320, 140);
+ }
+ return true;
+ } else {
+ return false;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+Scene270::Scene270(): SceneExt() {
+ _field380 = _field382 =_field384 = _field386 = 0;
+ _field219A = _tempPos.x = _tempPos.y = _field21A0 = 0;
+ _sceneMode = 0;
+}
+
+void Scene270::synchronize(Serializer &s) {
+ SceneExt::synchronize(s);
+ s.syncAsSint16LE(_field380);
+ s.syncAsSint16LE(_field382);
+ s.syncAsSint16LE(_field384);
+ s.syncAsSint16LE(_field386);
+ s.syncAsSint16LE(_field219A);
+ s.syncAsSint16LE(_tempPos.x);
+ s.syncAsSint16LE(_tempPos.y);
+ s.syncAsSint16LE(_field21A0);
+}
+
+void Scene270::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+ loadScene(270);
+ setZoomPercents(120, 90, 130, 100);
+
+ if (BF_GLOBALS._sceneManager._previousScene != 560)
+ BF_GLOBALS._sound1.fadeSound(26);
+
+ _exit.setDetails(Rect(310, 115, 320, 167), 270, -1, -1, -1, 1, NULL);
+
+ if (BF_GLOBALS._dayNumber == 0) {
+ BF_GLOBALS._dayNumber = 1;
+ BF_INVENTORY.setObjectScene(INV_BASEBALL_CARD, 2);
+ BF_INVENTORY.setObjectScene(INV_CRATE1, 1);
+ BF_GLOBALS._sceneManager._previousScene = 710;
+ }
+
+ if (((BF_GLOBALS._bookmark >= bLauraToParamedics) && (BF_GLOBALS._dayNumber == 1) &&
+ (BF_INVENTORY.getObjectScene(INV_BASEBALL_CARD) != 2) &&
+ (BF_INVENTORY.getObjectScene(INV_BASEBALL_CARD) != 1)) ||
+ ((BF_GLOBALS._dayNumber == 3) && BF_GLOBALS.getFlag(fGotGreen355fTalkedToGrannyDay3))) {
+ BF_GLOBALS._walkRegions.proc1(6);
+ BF_GLOBALS._walkRegions.proc1(14);
+ BF_GLOBALS._walkRegions.proc1(19);
+
+ _grandma.postInit();
+ _grandma.setVisage(274);
+ _grandma.setPosition(Common::Point(157, 132));
+ _grandma._numFrames = 5;
+ _grandma.animate(ANIM_MODE_2, NULL);
+ _grandma.fixPriority(129);
+ }
+
+ if (BF_GLOBALS._bookmark == bTalkedToGrannyAboutSkipsCard) {
+ _grandma.postInit();
+ }
+
+ if (BF_GLOBALS._sceneManager._previousScene == 710) {
+ _skip.postInit();
+ _laura.postInit();
+ _lyle.postInit();
+ _grandma.postInit();
+ }
+
+ _stripManager.addSpeaker(&_grandmaSpeaker);
+ _stripManager.addSpeaker(&_lyleSpeaker);
+ _stripManager.addSpeaker(&_jakeSpeaker);
+ _stripManager.addSpeaker(&_skipSpeaker);
+ _stripManager.addSpeaker(&_lauraSpeaker);
+ _stripManager.addSpeaker(&_gameTextSpeaker);
+
+ _tv.postInit();
+ _tv.setVisage(270);
+ _tv.setPosition(Common::Point(264, 74));
+ _tv.setStrip(5);
+ _tv.fixPriority(132);
+ _tv._numFrames = 3;
+ _tv.setAction(&_action1);
+
+ _fireplace.postInit();
+ _fireplace.setVisage(270);
+ _fireplace.setStrip(2);
+ _fireplace.setPosition(Common::Point(302, 121));
+ _fireplace.fixPriority(132);
+ _fireplace.animate(ANIM_MODE_2, NULL);
+
+ _fridge.setDetails(Rect(0, 56, 56, 130), 270, 9, 10, 11, 1, NULL);
+ _object3.setDetails(270, 12, 13, 14, 1, NULL);
+ _laura.setDetails(270, 15, -1, -1, 1, NULL);
+ _skip.setDetails(270, 14, -1, -1, 1, NULL);
+ _lyle.setDetails(270, 34, 35, 36, 1, NULL);
+ _tv.setDetails(270, 3, 4, 5, 1, NULL);
+ _fireplace.setDetails(270, 6, 7, 8, 1, NULL);
+
+ if ((BF_GLOBALS._sceneManager._previousScene == 710) && (BF_GLOBALS._bookmark == bTalkedToGrannyAboutSkipsCard)) {
+ _grandma.setDetails(270, 15, 16, 17, 1, NULL);
+ } else {
+ _grandma.setDetails(270, 40, 16, 17, 1, NULL);
+ }
+
+ _afgan.setDetails(4, 270, 27, 28, 29, 1);
+ _couch.setDetails(1, 270, 18, 19, 20, 1);
+ _photos.setDetails(Rect(278, 50, 318, 72), 270, 21, 22, 23, 1, NULL);
+ _appliances.setDetails(3, 270, 24, 25, 26, 1);
+ _ivy.setDetails(2, 270, 30, 31, 32, 1);
+ _background.setDetails(Rect(0, 0, 320, 168), 270, 0, 1, 2, 1, NULL);
+
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player._moveDiff.x = 8;
+ BF_GLOBALS._player.changeZoom(-1);
+ BF_GLOBALS._player.disableControl();
+
+ switch (BF_GLOBALS._sceneManager._previousScene) {
+ case 560:
+ if (BF_GLOBALS._bookmark == bTalkedToGrannyAboutSkipsCard) {
+ _field219A = 1;
+ BF_GLOBALS._player._moveDiff.x = 5;
+ _field386 = 0;
+
+ _grandma.animate(ANIM_MODE_1, NULL);
+ setAction(&_sequenceManager1, NULL, 2720, &BF_GLOBALS._player, &_grandma, NULL);
+ BF_GLOBALS._bookmark = bLyleStoppedBy;
+ } else {
+ _sceneMode = 2700;
+ setAction(&_sequenceManager1, this, 2700, &BF_GLOBALS._player, NULL);
+ }
+ break;
+ case 690:
+ BF_GLOBALS._player.setPosition(Common::Point(-13, 162));
+ _sceneMode = 2702;
+ setAction(&_sequenceManager1, this, 2702, &BF_GLOBALS._player, NULL);
+ break;
+ case 710:
+ BF_GLOBALS._player._moveDiff.x = 6;
+ _sceneMode = 2717;
+ setAction(&_sequenceManager1, this, 2717, &BF_GLOBALS._player, &_laura, &_skip, &_lyle, &_grandma, NULL);
+ break;
+ default:
+ _sceneMode = 2701;
+ setAction(&_sequenceManager1, this, 2701, &BF_GLOBALS._player, NULL);
+ break;
+ }
+}
+
+void Scene270::signal() {
+ switch (_sceneMode) {
+ case 10:
+ _sceneMode = 2702;
+ setAction(&_sequenceManager1, this, 2702, &BF_GLOBALS._player, NULL);
+ break;
+ case 11:
+ BF_GLOBALS._player._strip = 8;
+ BF_GLOBALS._player._frame = 1;
+
+ if (_field382) {
+ _sceneMode = 2719;
+ _stripManager.start(2720, this);
+ } else {
+ _field382 = 1;
+ _sceneMode = 13;
+ _stripManager.start(2718, this);
+ }
+ break;
+ case 12:
+ BF_GLOBALS._player._strip = 8;
+ BF_GLOBALS._player._frame = 1;
+ _sceneMode = 13;
+ _stripManager.start(2719, this);
+ break;
+ case 13:
+ case 2713:
+ case 2715:
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 2700:
+ _field219A = 1;
+ BF_GLOBALS._player._strip = 6;
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 2701:
+ BF_GLOBALS._player._strip = 2;
+ BF_GLOBALS._player.enableControl();
+ _field219A = 1;
+ break;
+ case 2702:
+ BF_GLOBALS._player._strip = 1;
+ BF_GLOBALS._player.enableControl();
+ _field219A = 1;
+ break;
+ case 2705:
+ _field380 = 1;
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 2706:
+ BF_GLOBALS._player.changeZoom(-1);
+ _object2.remove();
+ _field380 = 0;
+
+ switch (_field21A0) {
+ case 1:
+ _sceneMode = 11;
+ ADD_PLAYER_MOVER(192, 135);
+ break;
+ case 2:
+ if (BF_GLOBALS.getFlag(shownLyleCrate1Day1)) {
+ SceneItem::display2(270, 37);
+ BF_GLOBALS._player.enableControl();
+ } else {
+ T2_GLOBALS._uiElements.addScore(30);
+ BF_GLOBALS.setFlag(shownLyleCrate1Day1);
+ _sceneMode = 12;
+ ADD_PLAYER_MOVER(192, 135);
+ }
+ break;
+ default:
+ BF_GLOBALS._player.enableControl();
+ ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, _tempPos.x, _tempPos.y);
+ break;
+ }
+
+ _field21A0 = 0;
+ break;
+ case 2710:
+ BF_GLOBALS._bookmark = bEndOfWorkDayOne;
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 2711:
+ BF_GLOBALS._player.setPosition(Common::Point(150, 300));
+ BF_GLOBALS._sound1.fadeOut2(NULL);
+ BF_GLOBALS._sceneManager.changeScene(180);
+ BF_GLOBALS._bookmark = bLyleStoppedBy;
+ break;
+ case 2712:
+ BF_GLOBALS._sound1.fadeOut2(NULL);
+ BF_GLOBALS._sceneManager.changeScene(180);
+ break;
+ case 2714:
+ BF_GLOBALS._sceneManager.changeScene(560);
+ break;
+ case 2717:
+ _sceneMode = 2718;
+ _lyle.setFrame2(-1);
+ setAction(&_sequenceManager1, this, 2718, &BF_GLOBALS._player, &_laura, &_skip,
+ &_lyle, &_grandma, NULL);
+ break;
+ case 2718:
+ BF_GLOBALS._walkRegions.proc1(6);
+ BF_GLOBALS._walkRegions.proc1(14);
+ BF_GLOBALS._walkRegions.proc1(19);
+
+ _field219A = 1;
+ BF_GLOBALS._bookmark = bTalkedToGrannyAboutSkipsCard;
+
+ _grandma.setStrip(8);
+ _grandma._frame = 5;
+ _field384 = 1;
+ _field384 = 1;
+
+ BF_GLOBALS._player._moveDiff.x = 8;
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 2719:
+ _sceneMode = 13;
+ _field384 = 0;
+ BF_GLOBALS._player._moveDiff.x = 6;
+
+ _lyle.setFrame2(-1);
+ setAction(&_sequenceManager1, this, 2719, &BF_GLOBALS._player, &_lyle, &_grandma, NULL);
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene270::process(Event &event) {
+ if ((event.eventType == EVENT_BUTTON_DOWN) && (BF_GLOBALS._events.getCursor() == CURSOR_WALK) &&
+ (_field380 == 1) && !_action) {
+ _tempPos = event.mousePos;
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 2706;
+ setAction(&_sequenceManager1, this, 2706, &BF_GLOBALS._player, &_object2, NULL);
+ event.handled = true;
+ }
+
+ SceneExt::process(event);
+
+ if (BF_GLOBALS._player._enabled && !_focusObject && (event.mousePos.y < (UI_INTERFACE_Y - 1)) &&
+ !_field384 && !_field386) {
+ // Check if the cursor is on an exit
+ 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 Scene270::dispatch() {
+ if (_field384) {
+ _lyle.updateAngle(BF_GLOBALS._player._position);
+
+ if (_lyle._angle < 110)
+ _lyle.setFrame2(4);
+ else if (_lyle._angle < 180)
+ _lyle.setFrame2(3);
+ else if (_lyle._angle < 250)
+ _lyle.setFrame2(2);
+ else
+ _lyle.setFrame2(1);
+ }
+
+ if (_field386) {
+ if (BF_GLOBALS._player._position.x > 290) {
+ _grandma.setFrame(6);
+ } else if (BF_GLOBALS._player._position.x > 274) {
+ _grandma.setFrame(5);
+ } else if (BF_GLOBALS._player._position.x > 258) {
+ _grandma.setFrame(4);
+ } else if (BF_GLOBALS._player._position.x > 242) {
+ _grandma.setFrame(3);
+ } else if (BF_GLOBALS._player._position.x > 226) {
+ _grandma.setFrame(2);
+ } else if (BF_GLOBALS._player._position.x > 210) {
+ if ((_grandma._animateMode == ANIM_MODE_NONE) && (_grandma._frame > 1))
+ _grandma.animate(ANIM_MODE_6, NULL);
+ } else {
+ if ((_grandma._animateMode == ANIM_MODE_NONE) && (_grandma._frame < 3))
+ _grandma.animate(ANIM_MODE_4, 3, 1, NULL);
+ }
+ }
+
+ if (!_action && _field219A) {
+ if ((BF_GLOBALS._player._position.x > 236) && (BF_GLOBALS._player._position.y < 125)) {
+ _field219A = 0;
+ BF_GLOBALS._player.disableControl();
+ if (!_field384) {
+ BF_GLOBALS._sceneManager.changeScene(560);
+ } else {
+ BF_GLOBALS._player.addMover(NULL);
+ SceneItem::display2(270, 38);
+ _sceneMode = 2700;
+ ADD_PLAYER_MOVER(BF_GLOBALS._player._position.x - 10, BF_GLOBALS._player._position.y + 15);
+ }
+ }
+
+ if (BF_GLOBALS._player._position.x <= 20) {
+ _field219A = 0;
+ BF_GLOBALS._player.disableControl();
+ BF_GLOBALS._player.addMover(NULL);
+ BF_GLOBALS._player._strip = 3;
+ BF_GLOBALS._player._frame = 1;
+
+ if (BF_GLOBALS._sceneObjects->contains(&_grandma)) {
+ _sceneMode = 10;
+ _stripManager.start(2711, this);
+ } else {
+ SceneItem::display2(270, 33);
+ _sceneMode = 2702;
+ setAction(&_sequenceManager1, this, 2702, &BF_GLOBALS._player, NULL);
+ }
+ }
+
+ if (BF_GLOBALS._player._position.x > 310) {
+ _field219A = 0;
+ BF_GLOBALS._player.disableControl();
+ if (!_field384 && !_field386) {
+ _sceneMode = 2712;
+ setAction(&_sequenceManager1, this, 2712, &BF_GLOBALS._player, NULL);
+ } else {
+ BF_GLOBALS._player.addMover(NULL);
+ BF_GLOBALS._player._strip = 2;
+ BF_GLOBALS._player._frame = 1;
+ SceneItem::display2(270, !_field384 ? 39 : 38);
+ _sceneMode = 2701;
+
+ ADD_PLAYER_MOVER(BF_GLOBALS._player._position.x - 10, BF_GLOBALS._player._position.y);
+ }
+ }
+ }
+
+ SceneExt::dispatch();
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 271 - Living Room & Kitchen #2
+ *
+ *--------------------------------------------------------------------------*/
+
+void Scene271::Action1::signal() {
+ Scene271 *scene = (Scene271 *)BF_GLOBALS._sceneManager._scene;
+
+ scene->setAction(&scene->_sequenceManager2, this, 2703, &scene->_tv, NULL);
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene271::Object12::startAction(CursorType action, Event &event) {
+ Scene271 *scene = (Scene271 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_TALK:
+ if (BF_GLOBALS._dayNumber == 1) {
+ if (!BF_GLOBALS.getFlag(onDuty) && (BF_INVENTORY.getObjectScene(INV_BASEBALL_CARD) != 2)) {
+ scene->_sceneMode = 2715;
+ scene->setAction(&scene->_sequenceManager1, scene, 2715, &BF_GLOBALS._player, NULL);
+ return true;
+ }
+ } else if (BF_GLOBALS._dayNumber == 3) {
+ if (scene->_field796 == 1) {
+ scene->_stripManager.start(2712, &BF_GLOBALS._stripProxy);
+ return true;
+ } else if (BF_GLOBALS.getFlag(fGotGreen355fTalkedToGrannyDay3)) {
+ scene->_stripManager.start(2714, &BF_GLOBALS._stripProxy);
+ return true;
+ } else {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 2713;
+ scene->setAction(&scene->_sequenceManager1, scene, 2713, &BF_GLOBALS._player, &scene->_object12, NULL);
+ BF_GLOBALS.setFlag(fGotGreen355fTalkedToGrannyDay3);
+ return true;
+ }
+ }
+ break;
+ default:
+ break;
+ }
+
+ return NamedObject::startAction(action, event);
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene271::Item::startAction(CursorType action, Event &event) {
+ Scene271 *scene = (Scene271 *)BF_GLOBALS._sceneManager._scene;
+
+ if ((action == CURSOR_USE) && !scene->_field796) {
+ BF_GLOBALS._player.disableControl();
+ scene->_object1.postInit();
+ scene->_object1.hide();
+
+ scene->_sceneMode = 2705;
+ scene->setAction(&scene->_sequenceManager1, scene, 2705, &BF_GLOBALS._player, &scene->_object1, NULL);
+ return true;
+ } else {
+ return NamedHotspot::startAction(action, event);
+ }
+}
+
+bool Scene271::Exit::startAction(CursorType action, Event &event) {
+ Scene271 *scene = (Scene271 *)BF_GLOBALS._sceneManager._scene;
+
+ if (!scene->_action) {
+ if (scene->_field796 == 1) {
+ scene->_tempPos = Common::Point(320, 140);
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 2706;
+ scene->setAction(&scene->_sequenceManager1, scene, 2706, &BF_GLOBALS._player, &scene->_object1, NULL);
+ } else {
+ ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 320, 140);
+ }
+ }
+
+ return true;
+}
+
+/*--------------------------------------------------------------------------*/
+
+Scene271::Scene271() {
+ _field796 = _field2E16 = 0;
+ _tempPos.x = _tempPos.y = 0;
+ _rect1 = Rect(236, 120, 266, 130);
+}
+
+void Scene271::synchronize(Serializer &s) {
+ PalettedScene::synchronize(s);
+
+ s.syncAsSint16LE(_field796);
+ s.syncAsSint16LE(_field2E16);
+ s.syncAsSint16LE(_tempPos.x);
+ s.syncAsSint16LE(_tempPos.y);
+ _rect1.synchronize(s);
+}
+
+void Scene271::postInit(SceneObjectList *OwnerList) {
+ PalettedScene::postInit();
+ loadScene(270);
+ setZoomPercents(120, 80, 140, 100);
+ BF_GLOBALS._sound1.fadeSound(26);
+
+ _stripManager.addSpeaker(&_grandmaSpeaker);
+ _stripManager.addSpeaker(&_lyleSpeaker);
+ _stripManager.addSpeaker(&_jakeSpeaker);
+ _stripManager.addSpeaker(&_skipSpeaker);
+ _stripManager.addSpeaker(&_lauraSpeaker);
+ _stripManager.addSpeaker(&_gameTextSpeaker);
+ _stripManager.addSpeaker(&_granTextSpeaker);
+ _stripManager.addSpeaker(&_lyleTextSpeaker);
+
+ _exit.setDetails(Rect(310, 115, 320, 167), 270, -1, -1, -1, 1, NULL);
+
+ _tv.postInit();
+ _tv.setVisage(270);
+ _tv.setPosition(Common::Point(264, 74));
+ _tv.setStrip(5);
+ _tv.fixPriority(132);
+ _tv._numFrames = 3;
+ _tv.setAction(&_action1);
+
+ if ((BF_GLOBALS._sceneManager._previousScene != 280) && (BF_GLOBALS._sceneManager._previousScene != 620)) {
+ _object10.postInit();
+ _object10.setVisage(270);
+ _object10.setStrip(2);
+ _object10.setPosition(Common::Point(302, 121));
+ _object10.fixPriority(132);
+ _object10.animate(ANIM_MODE_2, NULL);
+ }
+
+ _object5.postInit();
+ _object5.hide();
+
+ _item5.setDetails(Rect(0, 56, 56, 130), 270, 9, 10, 11, 1, NULL);
+ _object6.setDetails(270, 12, 13, 14, 1, NULL);
+ _object7.setDetails(270, 15, -1, -1, 1, NULL);
+ _object8.setDetails(270, 14, -1, -1, 1, NULL);
+ _object11.setDetails(270, -1, -1, -1, 1, NULL);
+ _tv.setDetails(270, 3, 4, 5, 1, NULL);
+ _object10.setDetails(270, 6, 7, 8, 1, NULL);
+ _object12.setDetails(270, 15, 16, 17, 1, NULL);
+ _item3.setDetails(4, 270, 27, 28, 29, 1);
+ _item1.setDetails(1, 270, 18, 19, 20, 1);
+ _item6.setDetails(Rect(278, 50, 318, 72), 270, 21, 22, 23, 1, NULL);
+ _item2.setDetails(3, 270, 24, 25, 26, 1);
+ _item4.setDetails(2, 270, 30, 31, 32, 1);
+ _item11.setDetails(Rect(0, 0, SCREEN_WIDTH, UI_INTERFACE_Y), 270, 0, 1, 2, 1, NULL);
+
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player._moveDiff.x = 8;
+ BF_GLOBALS._player.changeZoom(-1);
+ BF_GLOBALS._player.disableControl();
+
+ _field796 = 0;
+ _sceneMode = 0;
+ _field2E16 = 0;
+
+ if (BF_GLOBALS._dayNumber == 0) {
+ BF_GLOBALS._dayNumber = 1;
+ BF_GLOBALS._sceneManager.changeScene(180);
+ }
+
+ switch (BF_GLOBALS._sceneManager._previousScene) {
+ case 180:
+ BF_GLOBALS._walkRegions.proc1(6);
+ BF_GLOBALS._walkRegions.proc1(14);
+ BF_GLOBALS._walkRegions.proc1(19);
+
+ BF_GLOBALS._player.setVisage(151);
+ BF_GLOBALS._player.setPosition(Common::Point(348, 151));
+
+ _object12.postInit();
+ _object12.setVisage(274);
+ _object12.setPosition(Common::Point(157, 132));
+ _object12._numFrames = 5;
+ _object12.animate(ANIM_MODE_2, NULL);
+ break;
+ case 280:
+ BF_GLOBALS._player.setVisage(271);
+ BF_GLOBALS._player.setStrip(5);
+ BF_GLOBALS._player._frame = 6;
+ BF_GLOBALS._player.setPosition(Common::Point(228, 138));
+
+ _object1.postInit();
+ _object1.setPosition(Common::Point(340, 100));
+
+ _object11.postInit();
+ _object11.setVisage(272);
+ _object11.setStrip(1);
+ _object11._frame = 2;
+ _object11.setPosition(Common::Point(35, 136));
+
+ _object6.postInit();
+ _object6.hide();
+
+ BF_GLOBALS._walkRegions.proc1(6);
+ BF_GLOBALS._walkRegions.proc1(14);
+ BF_GLOBALS._walkRegions.proc1(19);
+
+ _object12.postInit();
+ _object12.setVisage(274);
+ _object12.setPosition(Common::Point(157, 132));
+ _object12.animate(ANIM_MODE_2, NULL);
+ _object12._numFrames = 5;
+ _object12.fixPriority(120);
+ _field796 = 1;
+ break;
+ case 590:
+ BF_GLOBALS._player.setVisage(275);
+ BF_GLOBALS._player.setStrip(5);
+ BF_GLOBALS._player.setPosition(Common::Point(58, 133));
+ BF_GLOBALS._player.changeZoom(-1);
+
+ _object8.postInit();
+ _object8.setVisage(279);
+ _object8.setPosition(Common::Point(87, 127));
+ _object8.fixPriority(146);
+
+ _object7.postInit();
+ _object7.setVisage(277);
+ _object7.setStrip(7);
+ _object7.setPosition(Common::Point(48, 149));
+
+ BF_GLOBALS._walkRegions.proc1(6);
+ BF_GLOBALS._walkRegions.proc1(14);
+ BF_GLOBALS._walkRegions.proc1(19);
+
+ _object12.postInit();
+ _object12.setVisage(276);
+ _object12.setPosition(Common::Point(129, 130));
+
+ _object2.postInit();
+ _object2.setVisage(270);
+ _object2.setStrip(3);
+ _object2.setFrame(2);
+ _object2.setPosition(Common::Point(62, 101));
+ _object2.fixPriority(145);
+
+ _object3.postInit();
+ _object3.setVisage(270);
+ _object3.setStrip(3);
+ _object3.setFrame(3);
+ _object3.setPosition(Common::Point(90, 104));
+ _object3.fixPriority(132);
+
+ _object4.postInit();
+ _object4.setVisage(270);
+ _object4.setStrip(3);
+ _object4.setFrame(4);
+ _object4.setPosition(Common::Point(132, 87));
+ _object4.fixPriority(1);
+ break;
+ default:
+ BF_GLOBALS._player.setVisage(271);
+ BF_GLOBALS._player.setFrame(1);
+ BF_GLOBALS._player.setPosition(Common::Point(239, 145));
+
+ BF_GLOBALS._walkRegions.proc1(6);
+ BF_GLOBALS._walkRegions.proc1(14);
+ BF_GLOBALS._walkRegions.proc1(19);
+
+ _object12.postInit();
+ _object12.setVisage(274);
+ _object12.setPosition(Common::Point(157, 132));
+ _object12.animate(ANIM_MODE_2, NULL);
+ _object12._numFrames = 5;
+
+ _object1.postInit();
+ _object1.setVisage(271);
+ _object1.setStrip(4);
+ _object1.setPosition(Common::Point(220, 117));
+ _object1.fixPriority(145);
+ break;
+ }
+
+ _sceneMode = 11;
+
+ static uint32 black = 0;
+ add2Faders((const byte *)&black, 2, 270, this);
+}
+
+void Scene271::signal() {
+ static uint32 black = 0;
+
+ switch (_sceneMode) {
+ case 10:
+ _sceneMode = 2702;
+ setAction(&_sequenceManager1, this, 2702, &BF_GLOBALS._player, NULL);
+ break;
+ case 11:
+ switch (BF_GLOBALS._sceneManager._previousScene) {
+ case 180:
+ _sceneMode = 2716;
+ setAction(&_sequenceManager1, this, 2716, &BF_GLOBALS._player, &_object12, NULL);
+ break;
+ case 280:
+ BF_GLOBALS._dayNumber = 3;
+ BF_INVENTORY.alterInventory(3);
+
+ _sceneMode = 2707;
+ setAction(&_sequenceManager1, this, 2707, &BF_GLOBALS._player, &_object1, &_object11, &_object5, &_object6, NULL);
+ break;
+ case 590:
+ _sceneMode = 2704;
+ setAction(&_sequenceManager1, this, 2704, &BF_GLOBALS._player, &_object12, &_object7, &_object8, NULL);
+ break;
+ default:
+ _object11.postInit();
+ _object11.setPosition(Common::Point(340, 100));
+ BF_GLOBALS._sound1.play(36);
+
+ _sceneMode = 2709;
+ setAction(&_sequenceManager1, this, 2709, &BF_GLOBALS._player, &_object1, &_object12, &_object11, NULL);
+ break;
+ }
+ break;
+ case 12:
+ BF_GLOBALS._v51C44 = 0;
+ BF_GLOBALS._sound1.changeSound(67);
+ BF_GLOBALS._sceneManager.changeScene(280);
+ break;
+ case 13:
+ BF_GLOBALS._sound1.fadeOut2(NULL);
+ BF_GLOBALS._sceneManager.changeScene(666);
+ break;
+ case 2702:
+ BF_GLOBALS._player._strip = 1;
+ BF_GLOBALS._player.enableControl();
+ _field2E16 = 1;
+ break;
+ case 2704:
+ BF_GLOBALS._v51C44 = 1;
+ BF_GLOBALS._sound1.fadeOut2(NULL);
+ BF_GLOBALS._sceneManager.changeScene(690);
+ break;
+ case 2705:
+ _field796 = 1;
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 2706:
+ BF_GLOBALS._player.changeZoom(-1);
+ BF_GLOBALS._player.enableControl();
+
+ _object1.remove();
+ _field796 = 0;
+ ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, _tempPos.x, _tempPos.y);
+ break;
+ case 2707:
+ BF_GLOBALS._player.enableControl();
+ _field796 = 1;
+ _field2E16 = 1;
+
+ _object1.remove();
+ _object11.remove();
+
+ BF_INVENTORY.setObjectScene(INV_LYLE_CARD, 1);
+ break;
+ case 2709:
+ BF_GLOBALS._sound1.play(68);
+ _sceneMode = 12;
+ addFader((const byte *)&black, 2, this);
+ break;
+ case 2712:
+ BF_GLOBALS._v51C44 = 1;
+ BF_GLOBALS._sound1.fadeOut2(NULL);
+ BF_GLOBALS._sceneManager.changeScene(180);
+ break;
+ case 2713:
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 2714:
+ BF_GLOBALS._v51C44 = 1;
+ BF_GLOBALS._sceneManager.changeScene(560);
+ break;
+ case 2715:
+ break;
+ case 2716:
+ BF_GLOBALS._deathReason = 24;
+ _sceneMode = 13;
+ addFader((const byte *)&black, 2, this);
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene271::process(Event &event) {
+ if ((event.eventType == EVENT_BUTTON_DOWN) && (BF_GLOBALS._events.getCursor() == CURSOR_WALK) &&
+ (_field796 == 1) && (!_action)) {
+ _tempPos = event.mousePos;
+ BF_GLOBALS._player.disableControl();
+
+ _sceneMode = 2706;
+ setAction(&_sequenceManager1, this, 2706, &BF_GLOBALS._player, &_object1, NULL);
+ event.handled = true;
+ }
+
+ SceneExt::process(event);
+
+ if (BF_GLOBALS._player._enabled && !_focusObject && (event.mousePos.y < UI_INTERFACE_Y)) {
+ if (_exit.contains(event.mousePos)) {
+ GfxSurface cursor = _cursorVisage.getFrame(EXITFRAME_E);
+ BF_GLOBALS._events.setCursor(cursor);
+ } else {
+ CursorType cursorId = BF_GLOBALS._events.getCursor();
+ BF_GLOBALS._events.setCursor(cursorId);
+ }
+ }
+}
+
+void Scene271::dispatch() {
+ if (!_action && (_field2E16 == 1)) {
+ if ((BF_GLOBALS._player._position.x > 236) && (BF_GLOBALS._player._position.y < 120)) {
+ _field2E16 = 0;
+ BF_GLOBALS._sceneManager.changeScene(560);
+ }
+
+ if (BF_GLOBALS._player._position.x <= 20) {
+ _field2E16 = 0;
+ BF_GLOBALS._player.disableControl();
+ BF_GLOBALS._player._mover->remove();
+ BF_GLOBALS._player._strip = 3;
+ BF_GLOBALS._player._frame = 1;
+
+ if (BF_GLOBALS._sceneObjects->contains(&_object12)) {
+ _sceneMode = 10;
+ _stripManager.start(2711, this);
+ } else {
+ SceneItem::display2(270, 33);
+ _sceneMode = 2702;
+ setAction(&_sequenceManager1, this, 2702, &BF_GLOBALS._player, NULL);
+ }
+ }
+
+ if (BF_GLOBALS._player._position.x >= 300) {
+ _field2E16 = 0;
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 2712;
+ setAction(&_sequenceManager1, this, 2712, &BF_GLOBALS._player, NULL);
+ }
+ }
+
+ SceneExt::dispatch();
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 280 - Bedroom Flashback cut-scene
+ *
+ *--------------------------------------------------------------------------*/
+
+void Scene280::Action1::signal() {
+ Scene280 *scene = (Scene280 *)BF_GLOBALS._sceneManager._scene;
+ static uint32 black = 0;
+
+ switch (_actionIndex++) {
+ case 0:
+ scene->_jake.postInit();
+ scene->_jake.setVisage(283);
+ scene->_jake.setPosition(Common::Point(331, 200));
+ scene->_jake.animate(ANIM_MODE_1, NULL);
+ scene->_jake.setStrip(1);
+ ADD_MOVER(scene->_jake, 189, 131);
+ break;
+ case 1:
+ scene->_jake.setStrip(2);
+ scene->_jake.setFrame(1);
+ scene->_jake.animate(ANIM_MODE_8, NULL);
+ scene->_jake._numFrames = 5;
+
+ scene->_stripManager.start(2800, this);
+ break;
+ case 2:
+ scene->_jake.animate(ANIM_MODE_5, NULL);
+ scene->_dad.animate(ANIM_MODE_5, this);
+ break;
+ case 3:
+ scene->_jake.setStrip(4);
+ scene->_jake.setFrame(1);
+ scene->_dad.setStrip(2);
+ scene->_jake.setFrame(1);
+ scene->_dad.animate(ANIM_MODE_5, this);
+ break;
+ case 4:
+ scene->_dad.setStrip(3);
+ scene->_dad.setFrame(1);
+ scene->_dad.animate(ANIM_MODE_5, this);
+ break;
+ case 5:
+ scene->_object4.hide();
+ scene->_dad.setVisage(282);
+ scene->_dad.setStrip(1);
+ scene->_dad.setFrame(1);
+ scene->_dad._numFrames = 5;
+ scene->_dad.animate(ANIM_MODE_5, this);
+ break;
+ case 6:
+ scene->_stripManager.start(2801, this);
+ break;
+ case 7:
+ scene->_mum.postInit();
+ scene->_mum.setVisage(282);
+ scene->_mum.setStrip(2);
+ scene->_mum.setFrame(1);
+ scene->_mum.fixPriority(1);
+ scene->_mum.setPosition(Common::Point(160, 138));
+
+ scene->_jake.setStrip(3);
+ scene->_jake.setFrame(1);
+ scene->_jake.animate(ANIM_MODE_5, this);
+
+ scene->_dad._numFrames = 10;
+ scene->_dad.setVisage(284);
+ scene->_dad.setStrip(1);
+ scene->_dad.fixPriority(-1);
+ scene->_dad.setPosition(Common::Point(174, 136));
+ scene->_dad.setFrame(1);
+ scene->_dad.animate(ANIM_MODE_1, NULL);
+ ADD_MOVER(scene->_dad, 438, 320);
+ break;
+ case 8:
+ scene->_mum.animate(ANIM_MODE_4, 5, 1, this);
+ break;
+ case 9:
+ scene->_sceneMode = 2;
+ BF_GLOBALS._sound1.fadeOut2(NULL);
+ scene->addFader((const byte *)&black, 2, scene);
+
+ scene->_jake.remove();
+ scene->_mum.animate(ANIM_MODE_5, NULL);
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene280::postInit(SceneObjectList *OwnerList) {
+ PalettedScene::postInit();
+ BF_GLOBALS._interfaceY = SCREEN_HEIGHT;
+ loadScene(280);
+
+ _stripManager.addSpeaker(&_gameTextSpeaker);
+
+ _dad.postInit();
+ _dad.setVisage(281);
+ _dad.setPosition(Common::Point(160, 138));
+ _dad.fixPriority(1);
+
+ _object4.postInit();
+ _object4.setVisage(280);
+ _object4.setPosition(Common::Point(139, 141));
+
+ const uint32 black = 0;
+ add2Faders((const byte *)&black, 2, 280, this);
+ _sceneMode = 1;
+ setAction(&_action1);
+}
+
+void Scene280::signal() {
+ if (_sceneMode == 2)
+ BF_GLOBALS._sceneManager.changeScene(271);
+}
+
+} // End of namespace BlueForce
+
+} // End of namespace TsAGE
diff --git a/engines/tsage/blue_force/blueforce_scenes2.h b/engines/tsage/blue_force/blueforce_scenes2.h
new file mode 100644
index 0000000000..17e749d7a1
--- /dev/null
+++ b/engines/tsage/blue_force/blueforce_scenes2.h
@@ -0,0 +1,298 @@
+/* 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.
+ *
+ */
+
+#ifndef TSAGE_BLUEFORCE_SCENES2_H
+#define TSAGE_BLUEFORCE_SCENES2_H
+
+#include "common/scummsys.h"
+#include "tsage/blue_force/blueforce_logic.h"
+#include "tsage/blue_force/blueforce_speakers.h"
+#include "tsage/events.h"
+#include "tsage/core.h"
+#include "tsage/scenes.h"
+#include "tsage/globals.h"
+#include "tsage/sound.h"
+
+namespace TsAGE {
+
+namespace BlueForce {
+
+using namespace TsAGE;
+
+class IntroObject: public NamedObject {
+};
+
+class Scene200: public SceneExt {
+ /* Actions */
+ class Action1: public ActionExt {
+ public:
+ virtual void signal();
+ };
+ class Action2: public Action {
+ public:
+ virtual void signal();
+ };
+public:
+ SequenceManager _sequenceManager;
+ Action1 _action1;
+ Action2 _action2;
+ NamedObject _object1, _object2, _object3, _object4, _object5, _object6;
+ IntroObject _object7, _object8, _object9;
+ NamedObject _object10, _object11;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void remove();
+};
+
+class Scene210: public SceneExt {
+ /* Actions */
+ class Action1: public ActionExt {
+ public:
+ virtual void signal();
+ };
+ class Action2: public Action {
+ public:
+ virtual void signal();
+ };
+public:
+ SequenceManager _sequenceManager;
+ Action1 _action1;
+ IntroObject _object1, _object2, _object3, _object4;
+ IntroObject _object5, _object6, _object7, _object8;
+ NamedObject _object9, _object10, _object11, _object12;
+ NamedObject _object13, _object14, _object15;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void remove();
+};
+
+class Scene220: public SceneExt {
+ /* Actions */
+ class Action1: public ActionExt {
+ public:
+ virtual void signal();
+ };
+ class Action2: public Action {
+ public:
+ virtual void signal();
+ };
+public:
+ SequenceManager _sequenceManager;
+ Action1 _action1;
+ Action2 _action2;
+ NamedObject _object1, _object2, _object3, _object4, _object5;
+ NamedObject _object6, _object7, _object8, _object9;
+ IntroObject _object10, _object11, _object12, _object13;
+ IntroObject _object14, _object15, _object16;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void remove();
+};
+
+class Scene225: public SceneExt {
+ /* Actions */
+ class Action1: public ActionExt {
+ public:
+ virtual void signal();
+ };
+ class Action2: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action3: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action4: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action5: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action6: public Action {
+ public:
+ virtual void signal();
+ };
+public:
+ SequenceManager _sequenceManager;
+ Action1 _action1;
+ Action2 _action2;
+ Action3 _action3;
+ Action4 _action4;
+ Action5 _action5;
+ Action6 _action6;
+ IntroObject _object1, _object2, _object3, _object4;
+ IntroObject _object5, _object6, _object7;
+ NamedObject _object8, _object9, _object10, _object11, _object12;
+ NamedObject _object13, _object14, _object15, _object16;
+ NamedObject _object17, _object18, _object19;
+ NamedObject _object20, _object21;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void remove();
+};
+
+class Scene265: public SceneExt {
+ /* Actions */
+ class Action1: public ActionExt {
+ public:
+ virtual void signal();
+ };
+public:
+ Action1 _action1;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void remove();
+};
+
+class Scene270: public SceneExt {
+ /* Actions */
+ class Action1: public ActionExt {
+ public:
+ virtual void signal();
+ };
+
+ /* Objects */
+ class Lyle: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Grandma: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Items */
+ class Item: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Exit: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+public:
+ SequenceManager _sequenceManager1, _sequenceManager2, _sequenceManager3;
+ SpeakerGrandma _grandmaSpeaker;
+ SpeakerLyle _lyleSpeaker;
+ SpeakerJake _jakeSpeaker;
+ SpeakerLaura _lauraSpeaker;
+ SpeakerSkip _skipSpeaker;
+ SpeakerGameText _gameTextSpeaker;
+ Action1 _action1;
+ NamedObject _object1, _object2, _object3, _laura;
+ NamedObject _skip, _tv, _fireplace;
+ Lyle _lyle;
+ Grandma _grandma;
+ Item _couch, _afgan;
+ NamedHotspot _appliances;
+ NamedHotspot _ivy, _fridge, _photos, _item8, _item9;
+ NamedHotspot _item10, _item11, _background;
+ Exit _exit;
+ int _field380, _field382, _field384, _field386;
+ int _field219A, _field21A0;
+ Common::Point _tempPos;
+
+ Scene270();
+ virtual void synchronize(Serializer &s);
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+ virtual void process(Event &event);
+ virtual void dispatch();
+};
+
+class Scene271: public PalettedScene {
+ /* Actions */
+ class Action1: public ActionExt {
+ public:
+ virtual void signal();
+ };
+
+ /* Objects */
+ class Object12: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Items */
+ class Item: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Exit: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+public:
+ SequenceManager _sequenceManager1, _sequenceManager2, _sequenceManager3;
+ SpeakerGrandma _grandmaSpeaker;
+ SpeakerLyle _lyleSpeaker;
+ SpeakerJake _jakeSpeaker;
+ SpeakerLaura _lauraSpeaker;
+ SpeakerSkip _skipSpeaker;
+ SpeakerGameText _gameTextSpeaker;
+ SpeakerGranText _granTextSpeaker;
+ SpeakerLyleText _lyleTextSpeaker;
+
+ NamedObject _object1, _object2, _object3, _object4, _object5;
+ NamedObject _object6, _object7, _object8, _tv, _object10;
+ NamedObject _object11;
+ Object12 _object12;
+ Item _item1, _item3;
+ NamedHotspot _item2, _item4, _item5, _item6, _item7;
+ NamedHotspot _item8, _item9, _item10, _item11;
+ Exit _exit;
+ Action1 _action1;
+ Rect _rect1;
+ int _field796, _field2E16;
+ Common::Point _tempPos;
+
+ Scene271();
+ virtual void synchronize(Serializer &s);
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+ virtual void process(Event &event);
+ virtual void dispatch();
+};
+
+class Scene280: public PalettedScene {
+ /* Actions */
+ class Action1: public ActionExt {
+ public:
+ virtual void signal();
+ };
+public:
+ Action1 _action1;
+ SpeakerGameText _gameTextSpeaker;
+ NamedObject _jake, _dad, _mum, _object4;
+
+ void postInit(SceneObjectList *OwnerList);
+ virtual void signal();
+};
+
+} // End of namespace BlueForce
+
+} // End of namespace TsAGE
+
+#endif
diff --git a/engines/tsage/blue_force/blueforce_scenes3.cpp b/engines/tsage/blue_force/blueforce_scenes3.cpp
new file mode 100644
index 0000000000..1fa27ccb27
--- /dev/null
+++ b/engines/tsage/blue_force/blueforce_scenes3.cpp
@@ -0,0 +1,5930 @@
+/* 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_scenes3.h"
+#include "tsage/scenes.h"
+#include "tsage/tsage.h"
+#include "tsage/staticres.h"
+#include "tsage/globals.h"
+
+namespace TsAGE {
+
+namespace BlueForce {
+
+/*--------------------------------------------------------------------------
+ * Scene 300 - Outside Police Station
+ *
+ *--------------------------------------------------------------------------*/
+
+bool Scene300::Object::startAction(CursorType action, Event &event) {
+ if (action == CURSOR_TALK) {
+ Scene300 *scene = (Scene300 *)BF_GLOBALS._sceneManager._scene;
+ scene->_stripManager.start(_stripNumber, scene);
+ return true;
+ } else {
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene300::Object19::startAction(CursorType action, Event &event) {
+ if ((action != CURSOR_USE) || !BF_GLOBALS.getFlag(onDuty)) {
+ return NamedObject::startAction(action, event);
+ } else if ((BF_GLOBALS._dayNumber != 2) || (BF_GLOBALS._bookmark >= bEndDayOne)) {
+ Scene300 *scene = (Scene300 *)BF_GLOBALS._sceneManager._scene;
+ setAction(&scene->_action4);
+ } else {
+ SceneItem::display2(300, 33);
+ }
+
+ return true;
+}
+
+bool Scene300::Item1::startAction(CursorType action, Event &event) {
+ if (action == CURSOR_USE) {
+ Scene300 *scene = (Scene300 *)BF_GLOBALS._sceneManager._scene;
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 305;
+ scene->setAction(&scene->_sequenceManager1, scene, 305, &BF_GLOBALS._player,
+ &scene->_object8, NULL);
+ return true;
+ } else {
+ return NamedHotspot::startAction(action, event);
+ }
+}
+
+bool Scene300::Item2::startAction(CursorType action, Event &event) {
+ if ((action == CURSOR_LOOK) || (action == CURSOR_USE)) {
+ Scene300 *scene = (Scene300 *)BF_GLOBALS._sceneManager._scene;
+ scene->setAction(&scene->_sequenceManager1, scene, 304, &scene->_object11, NULL);
+ return true;
+ } else {
+ return NamedHotspot::startAction(action, event);
+ }
+}
+
+bool Scene300::Item14::startAction(CursorType action, Event &event) {
+ ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 151, 54);
+ return true;
+}
+
+bool Scene300::Item15::startAction(CursorType action, Event &event) {
+ ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 316, 90);
+ return true;
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene300::Action1::signal() {
+ switch (_actionIndex++) {
+ case 0:
+ BF_GLOBALS._player.disableControl();
+ setDelay(1);
+ break;
+ case 1:
+ if (BF_GLOBALS.getFlag(fWithLyle))
+ SceneItem::display2(666, 27);
+ else
+ SceneItem::display2(300, 0);
+ setDelay(1);
+ break;
+ case 2: {
+ ADD_PLAYER_MOVER_THIS(BF_GLOBALS._player, BF_GLOBALS._player._position.x - 8,
+ BF_GLOBALS._player._position.y);
+ break;
+ }
+ case 3:
+ BF_GLOBALS._player.enableControl();
+ remove();
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene300::Action2::signal() {
+ switch (_actionIndex++) {
+ case 0:
+ BF_GLOBALS._player.disableControl();
+ setDelay(1);
+ break;
+ case 1:
+ SceneItem::display2(300, 28);
+ setDelay(1);
+ break;
+ case 2: {
+ ADD_MOVER(BF_GLOBALS._player, BF_GLOBALS._player._position.x + 8,
+ BF_GLOBALS._player._position.y);
+ break;
+ }
+ case 3:
+ BF_GLOBALS._player.enableControl();
+ remove();
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene300::Action3::signal() {
+ Scene300 *scene = (Scene300 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ BF_GLOBALS._player.disableControl();
+ setDelay(1);
+ break;
+ case 1:
+ BF_GLOBALS._player.setAction(&scene->_sequenceManager1, this, 306, &BF_GLOBALS._player,
+ &scene->_object8, NULL);
+ break;
+ case 2:
+ SceneItem::display2(300, 35);
+ setDelay(1);
+ break;
+ case 3:
+ BF_GLOBALS._player.enableControl();
+ remove();
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene300::Action4::signal() {
+ Scene300 *scene = (Scene300 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ BF_GLOBALS._player.disableControl();
+ setDelay(1);
+ break;
+ case 1:
+ setAction(&scene->_sequenceManager1, this, 316, &BF_GLOBALS._player, &scene->_object19, NULL);
+ break;
+ case 2:
+ BF_GLOBALS._sceneManager.changeScene(60);
+ break;
+ case 3:
+ setAction(&scene->_sequenceManager1, this, 319, &scene->_object19, NULL);
+ break;
+ case 4:
+ BF_GLOBALS.setFlag(2);
+ BF_GLOBALS._sceneManager.changeScene(190);
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene300::Action5::signal() {
+ Scene300 *scene = (Scene300 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ BF_GLOBALS._player.disableControl();
+ scene->_field2760 = 1;
+ setDelay(1);
+ break;
+ case 1:
+ setAction(&scene->_sequenceManager1, this, 1306, &scene->_object1, &scene->_object8, NULL);
+ break;
+ case 2:
+ scene->_stripManager.start(3004, this);
+ break;
+ case 3: {
+ ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 186, 140);
+ break;
+ }
+ case 4:
+ remove();
+ break;
+ default:
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+Scene300::Scene300(): SceneExt(), _object13(3000), _object14(3001), _object15(3002),
+ _object16(3003) {
+ _field2760 = _field2762 = 0;
+}
+
+void Scene300::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+ loadScene(300);
+
+ // Add the speakers
+ _stripManager.addSpeaker(&_gameTextSpeaker);
+ _stripManager.addSpeaker(&_sutterSpeaker);
+ _stripManager.addSpeaker(&_dougSpeaker);
+ _stripManager.addSpeaker(&_jakeSpeaker);
+
+ _field2762 = 0;
+ _item14.setDetails(Rect(144, 27, 160, 60), 300, -1, -1, -1, 1, NULL);
+ _item15.setDetails(Rect(310, 76, SCREEN_WIDTH, 105), 300, -1, -1, -1, 1, NULL);
+
+ // Setup the player
+ int playerVisage = BF_GLOBALS._player._visage;
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.setVisage(playerVisage);
+ BF_GLOBALS._player.setStrip(3);
+ BF_GLOBALS._player.setPosition(Common::Point(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2));
+ BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ BF_GLOBALS._player._moveDiff = Common::Point(3, 1);
+ BF_GLOBALS._player.disableControl();
+
+ _object8.postInit();
+ _object8.setVisage(301);
+ _object8.setStrip(2);
+ _object8.setPosition(Common::Point(300, 77));
+
+ if ((BF_GLOBALS._dayNumber != 2) || (BF_GLOBALS._bookmark < bEndDayOne)) {
+ _object17.postInit();
+ _object17.setVisage(301);
+ _object17.setStrip(1);
+ _object17.setPosition(Common::Point(87, 88));
+ _object17.setDetails(300, 11, 13, 2, 1, NULL);
+
+ _object18.postInit();
+ _object18.setVisage(301);
+ _object18.setStrip(1);
+ _object18.setPosition(Common::Point(137, 92));
+ _object18.setDetails(300, 11, 13, 3, 1, NULL);
+ }
+
+ _object19.postInit();
+ _object19.setVisage(301);
+ _object19.setStrip(1);
+ _object19.setPosition(Common::Point(175, 99));
+ _object19.setDetails(300, 11, 13, 34, 1, NULL);
+
+ _object11.postInit();
+ _object11.setVisage(301);
+ _object11.setStrip(8);
+ _object11.setPosition(Common::Point(265, 91));
+ _object11.hide();
+
+ switch (BF_GLOBALS._sceneManager._previousScene) {
+ case 50:
+ case 60:
+ BF_GLOBALS.clearFlag(onBike);
+ if (BF_GLOBALS.getFlag(onDuty)) {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 318;
+ setAction(&_sequenceManager1, this, 318, &BF_GLOBALS._player, &_object19, NULL);
+ } else {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 300;
+ setAction(&_sequenceManager1, this, 1300, &BF_GLOBALS._player, NULL);
+ }
+ break;
+ case 190:
+ _sceneMode = 0;
+ if (!BF_GLOBALS.getFlag(2)) {
+ _sceneMode = 7308;
+ BF_GLOBALS._player.setPosition(Common::Point(175, 50));
+ ADD_PLAYER_MOVER_THIS(BF_GLOBALS._player, 123, 71);
+
+ if ((BF_GLOBALS._dayNumber == 2) && (BF_GLOBALS._bookmark < bEndDayOne))
+ setup();
+ } else if (!BF_GLOBALS.getFlag(3)) {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 300;
+ setAction(&_sequenceManager1, this, 300, &BF_GLOBALS._player, NULL);
+ } else {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 318;
+ setAction(&_sequenceManager1, this, 318, &BF_GLOBALS._player, &_object19, NULL);
+ }
+ break;
+ case 315:
+ BF_GLOBALS._player.setPosition(Common::Point(305, 66));
+ if ((BF_GLOBALS._dayNumber != 2) || (BF_GLOBALS._bookmark >= bEndDayOne)) {
+ BF_GLOBALS._player.setVisage(BF_GLOBALS.getFlag(onDuty) ? 1304 : 303);
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 0;
+ setAction(&_sequenceManager1, this, 306, &BF_GLOBALS._player, &_object8, NULL);
+ } else {
+ BF_GLOBALS._player.setVisage(1304);
+ setup();
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 0;
+ setAction(&_sequenceManager1, this, 306, &BF_GLOBALS._player, &_object8, NULL);
+ }
+ break;
+ default:
+ _sceneMode = 0;
+ BF_GLOBALS._player.setVisage(1304);
+ BF_GLOBALS._player.disableControl();
+ setAction(&_sequenceManager1, this, 306, &BF_GLOBALS._player, &_object8, NULL);
+ break;
+ }
+
+ _item10.setDetails(4, 300, 7, 13, 16, 1);
+ _item11.setDetails(2, 300, 9, 13, 18, 1);
+ _item12.setDetails(5, 300, 10, 13, 19, 1);
+ _item13.setDetails(3, 300, 25, 26, 27, 1);
+ _item2.setDetails(Rect(266, 54, 272, 59), 300, -1, -1, -1, 1, NULL);
+ _item1.setDetails(Rect(262, 47, 299, 76), 300, 1, 13, -1, 1, NULL);
+ _item4.setDetails(Rect(0, 85, SCREEN_WIDTH - 1, UI_INTERFACE_Y - 1), 300, 6, 13, 15, 1, NULL);
+ _item7.setDetails(Rect(219, 46, 251, 74), 300, 22, 23, 24, 1, NULL);
+ _item8.setDetails(Rect(301, 53, 319, 78), 300, 22, 23, 24, 1, NULL);
+ _item5.setDetails(Rect(179, 44, 200, 55), 300, 8, 13, 17, 1, NULL);
+ _item6.setDetails(Rect(210, 46, 231, 55), 300, 8, 13, 17, 1, NULL);
+ _item3.setDetails(Rect(160, 0, SCREEN_WIDTH - 1, 75), 300, 4, 13, 14, 1, NULL);
+ _item9.setDetails(Rect(0, 0, SCREEN_WIDTH, UI_INTERFACE_Y), 300, 29, 30, 31, 1, NULL);
+}
+
+void Scene300::signal() {
+ switch (_sceneMode) {
+ case 300:
+ BF_GLOBALS._sound1.fadeSound(33);
+ BF_GLOBALS.clearFlag(onBike);
+ _sceneMode = 0;
+
+ if ((BF_GLOBALS._dayNumber != 1) || (BF_GLOBALS._bookmark != bNone)) {
+ signal();
+ } else {
+ _stripManager.start(3005, this);
+ }
+ break;
+ case 301:
+ if (_field2760) {
+ _sceneMode = 1302;
+ signal();
+ } else {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 1302;
+ setAction(&_sequenceManager1, this, 306, &_object1, &_object8, NULL);
+ }
+
+ _object12.show();
+ _object5.dispatch();
+ BF_GLOBALS._player.hide();
+ break;
+ case 303:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 2307;
+ setAction(&_sequenceManager1, this, 303, &_object13, &_object1, NULL);
+ break;
+ case 305:
+ if ((BF_GLOBALS._dayNumber == 4) || (BF_GLOBALS._dayNumber == 5)) {
+ _sceneMode = 0;
+ setAction(&_action3);
+ } else {
+ BF_GLOBALS._sound1.fadeOut2(NULL);
+ BF_GLOBALS._sceneManager.changeScene(315);
+ }
+ break;
+ case 309:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 3307;
+ setAction(&_sequenceManager1, this, 309, &_object14, &_object1, NULL);
+ break;
+ case 310:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 4307;
+ setAction(&_sequenceManager1, this, 310, &_object12, &_object1, NULL);
+ break;
+ case 311:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 5307;
+ setAction(&_sequenceManager1, this, 311, &_object15, &_object1, NULL);
+ break;
+ case 312:
+ case 5307:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 1305;
+ setAction(&_sequenceManager1, this, 312, &_object1, &_object16, NULL);
+ break;
+ case 317:
+ BF_GLOBALS.setFlag(2);
+ BF_GLOBALS._sceneManager.changeScene(60);
+ break;
+ case 318:
+ BF_GLOBALS.clearFlag(onBike);
+ _sceneMode = 0;
+ signal();
+ break;
+ case 1302:
+ _field2762 = 0;
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 1308;
+ setAction(&_sequenceManager1, this, 302, &_object1, NULL);
+ break;
+ case 1305:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 1313;
+ setAction(&_sequenceManager1, this, 305, &_object1, &_object8, NULL);
+ BF_GLOBALS._player.show();
+ _object12.hide();
+ break;
+ case 1307:
+ case 2308:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 303;
+ setAction(&_sequenceManager1, this, 308, &_object14, NULL);
+ break;
+ case 1308:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 1307;
+ setAction(&_sequenceManager1, this, 308, &_object13, NULL);
+ break;
+ case 1313:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 0;
+ _object15.setAction(&_sequenceManager4, NULL, 315, &_object15, &_object16, NULL);
+ _object13.setAction(&_sequenceManager2, NULL, 313, &_object13, &_object17, NULL);
+ _object14.setAction(&_sequenceManager3, this, 314, &_object14, &_object18, NULL);
+
+ BF_GLOBALS._bookmark = bEndDayOne;
+ BF_GLOBALS._sound1.changeSound(33);
+ break;
+ case 2307:
+ case 3308:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 309;
+ setAction(&_sequenceManager1, this, 308, &_object12, NULL);
+ break;
+ case 3307:
+ _object9.postInit();
+ _object9.hide();
+ _object10.postInit();
+ _object10.hide();
+
+ if (BF_GLOBALS.getFlag(1)) {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 4308;
+ setAction(&_sequenceManager1, this, 6307, &_object2, &_object1, &_object9, &_object10, NULL);
+ } else {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 4308;
+ setAction(&_sequenceManager1, this, 7307, &_object12, &_object1, &_object9, &_object10, NULL);
+ }
+ break;
+ case 4307:
+ case 5308:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 311;
+ setAction(&_sequenceManager1, this, 308, &_object16, NULL);
+ break;
+ case 4308:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 310;
+ setAction(&_sequenceManager1, this, 308, &_object15, NULL);
+ break;
+ case 6308:
+ BF_GLOBALS._sceneManager.changeScene(190);
+ break;
+ case 7308:
+ if (_field2762) {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 301;
+ setAction(&_sequenceManager1, this, 301, &BF_GLOBALS._player, NULL);
+ } else {
+ BF_GLOBALS._player.enableControl();
+ }
+ break;
+ case 0:
+ default:
+ if (_field2762) {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 301;
+ setAction(&_sequenceManager1, this, 301, &BF_GLOBALS._player, NULL);
+ } else {
+ BF_GLOBALS._player.enableControl();
+ }
+ break;
+ }
+}
+
+void Scene300::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 (_item14.contains(event.mousePos)) {
+ GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_NE);
+ BF_GLOBALS._events.setCursor(surface);
+ } else if (_item15.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 Scene300::dispatch() {
+ SceneExt::dispatch();
+
+ if (!_action) {
+ int regionIndex = BF_GLOBALS._player.getRegionIndex();
+ if ((regionIndex == 1) && (_field2762 == 1)) {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 301;
+ setAction(&_sequenceManager1, this, 301, &BF_GLOBALS._player, NULL);
+ }
+
+ if ((BF_GLOBALS._player._position.y < 59) && (BF_GLOBALS._player._position.x > 137) &&
+ (_sceneMode != 6308) && (_sceneMode != 7308)) {
+ BF_GLOBALS._v4CEA4 = 3;
+ _sceneMode = 6308;
+ BF_GLOBALS._player.disableControl();
+ ADD_MOVER(BF_GLOBALS._player, BF_GLOBALS._player._position.x + 20,
+ BF_GLOBALS._player._position.y - 5);
+ }
+
+ if (BF_GLOBALS._player._position.x <= 5)
+ setAction(&_action2);
+
+ if (BF_GLOBALS._player._position.x >= 315) {
+ if (BF_GLOBALS.getFlag(onDuty) || (BF_GLOBALS._bookmark == bNone) || BF_GLOBALS.getFlag(fWithLyle)) {
+ setAction(&_action1);
+ } else {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 317;
+ setAction(&_sequenceManager1, this, 1301, &BF_GLOBALS._player, NULL);
+ }
+ }
+ }
+}
+
+void Scene300::setup() {
+ _object13.postInit();
+ _object13.setVisage(307);
+ _object13.setStrip(6);
+ _object13.setPosition(Common::Point(156, 134));
+ _object13._moveDiff = Common::Point(3, 1);
+ _object3.setup(&_object13, 306, 1, 29);
+
+ _object14.postInit();
+ _object14.setVisage(307);
+ _object14.setStrip(6);
+ _object14.setPosition(Common::Point(171, 137));
+ _object14._moveDiff = Common::Point(3, 1);
+ _object4.setup(&_object14, 306, 2, 29);
+
+ _object12.postInit();
+ _object12.setVisage(307);
+ _object12.setStrip(6);
+ _object12.setPosition(Common::Point(186, 140));
+ _object12._moveDiff = Common::Point(3, 1);
+ _object5.setup(&_object12, 306, 2, 29);
+ _object12.hide();
+
+ _object15.postInit();
+ _object15.setVisage(307);
+ _object15.setStrip(6);
+ _object15.setPosition(Common::Point(201, 142));
+ _object15._moveDiff = Common::Point(3, 1);
+ _object6.setup(&_object15, 306, 3, 29);
+
+ _object16.postInit();
+ _object16.setVisage(307);
+ _object16.setStrip(6);
+ _object16.setPosition(Common::Point(216, 145));
+ _object16._moveDiff = Common::Point(3, 1);
+ _object7.setup(&_object16, 306, 1, 29);
+
+ _object1.postInit();
+ _object1.setVisage(307);
+ _object1.setStrip(6);
+ _object1.setPosition(Common::Point(305, 66));
+ _object1._moveDiff = Common::Point(3, 1);
+ _object1.setObjectWrapper(new SceneObjectWrapper());
+ _object1.animate(ANIM_MODE_1, NULL);
+ _object2.setup(&_object1, 306, 4, 9);
+
+ BF_GLOBALS._sceneItems.addItems(&_object13, &_object14, &_object15, &_object16, NULL);
+ _timer.set(3600, this, &_action5);
+
+ _field2760 = 0;
+ _field2762 = 1;
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 315 - Inside Police Station
+ *
+ *--------------------------------------------------------------------------*/
+
+bool Scene315::Barry::startAction(CursorType action, Event &event) {
+ Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene;
+ scene->_currentCursor = action;
+
+ switch (action) {
+ case CURSOR_USE:
+ if (scene->_field1B60 || scene->_field1B64)
+ SceneItem::display2(320, 51);
+ else
+ NamedHotspot::startAction(action, event);
+ break;
+ case CURSOR_TALK:
+ if ((BF_GLOBALS._dayNumber == 2) && (BF_GLOBALS._sceneManager._previousScene == 325))
+ NamedHotspot::startAction(action, event);
+ else {
+ if (!BF_GLOBALS.getFlag(onDuty))
+ scene->_stripNumber = 3172;
+ else if (BF_GLOBALS.getFlag(fTalkedToBarry))
+ scene->_stripNumber = 3166;
+ else if (BF_GLOBALS.getFlag(fTalkedToLarry))
+ scene->_stripNumber = 3164;
+ else
+ scene->_stripNumber = 3165;
+
+ scene->setAction(&scene->_action1);
+ BF_GLOBALS.setFlag(fTalkedToBarry);
+ }
+ break;
+ case INV_GREENS_GUN:
+ case INV_GREENS_KNIFE:
+ BF_GLOBALS._player.disableControl();
+ if (BF_INVENTORY._bookingGreen._sceneNumber == 390) {
+ scene->_stripNumber = 3174;
+ scene->setAction(&scene->_action1);
+ } else {
+ ++scene->_field1B62;
+ scene->_stripNumber = (action == INV_GREENS_GUN) ? 3168 : 0;
+ scene->_sceneMode = 3153;
+ scene->setAction(&scene->_sequenceManager, scene, 3153, &BF_GLOBALS._player, NULL);
+ }
+ break;
+ case INV_FOREST_RAP:
+ BF_GLOBALS._player.disableControl();
+ scene->_stripNumber = BF_GLOBALS.getFlag(onDuty) ? 3178 : 3173;
+ scene->setAction(&scene->_action1);
+ break;
+ case INV_GREEN_ID:
+ case INV_FRANKIE_ID:
+ case INV_TYRONE_ID:
+ BF_GLOBALS._player.disableControl();
+ scene->_stripNumber = 3175;
+ scene->setAction(&scene->_action1);
+ break;
+ case INV_BOOKING_GREEN:
+ case INV_BOOKING_FRANKIE:
+ case INV_BOOKING_GANG:
+ BF_GLOBALS._player.disableControl();
+ scene->_stripNumber = 3167;
+ scene->setAction(&scene->_action1);
+ break;
+ case INV_COBB_RAP:
+ if (BF_INVENTORY._mugshot._sceneNumber == 1)
+ NamedHotspot::startAction(action, event);
+ else {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 3169;
+ if (BF_GLOBALS._dayNumber > 2)
+ scene->_stripNumber = 3176;
+ else if (BF_GLOBALS.getFlag(onDuty))
+ scene->_stripNumber = 3177;
+ else
+ scene->_stripNumber = 3170;
+ scene->setAction(&scene->_action1);
+ }
+ break;
+ case INV_22_BULLET:
+ case INV_AUTO_RIFLE:
+ case INV_WIG:
+ case INV_22_SNUB:
+ BF_GLOBALS._player.disableControl();
+ if ((BF_GLOBALS.getFlag(fCuffedFrankie) && (BF_INVENTORY._bookingFrankie._sceneNumber == 0)) ||
+ (!BF_GLOBALS.getFlag(fCuffedFrankie) && (BF_INVENTORY._bookingGang._sceneNumber == 0))) {
+ scene->_stripNumber = 3174;
+ scene->setAction(&scene->_action1);
+ } else {
+ ++scene->_field1B66;
+ if (!scene->_field1B6C && (scene->_field1B66 == 1)) {
+ scene->_field1B6C = 1;
+ scene->_stripNumber = 3169;
+ } else {
+ scene->_stripNumber = 0;
+ }
+
+ scene->_sceneMode = 3153;
+ scene->setAction(&scene->_sequenceManager, scene, 3153, &BF_GLOBALS._player, NULL);
+ }
+ break;
+ default:
+ return NamedHotspot::startAction(action, event);
+ }
+
+ return true;
+}
+
+bool Scene315::SutterSlot::startAction(CursorType action, Event &event) {
+ Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene;
+ scene->_currentCursor = action;
+
+ switch (action) {
+ case INV_GREENS_GUN:
+ case INV_22_BULLET:
+ case INV_AUTO_RIFLE:
+ case INV_WIG:
+ case INV_22_SNUB:
+ SceneItem::display2(315, 30);
+ break;
+ case INV_GREEN_ID:
+ case INV_FRANKIE_ID:
+ case INV_TYRONE_ID:
+ BF_GLOBALS._player.disableControl();
+ scene->_stripNumber = 3175;
+ scene->setAction(&scene->_action1);
+ break;
+ case INV_BOOKING_GREEN:
+ case INV_BOOKING_FRANKIE:
+ case INV_BOOKING_GANG:
+ if (action == INV_BOOKING_GREEN)
+ ++scene->_field1B62;
+ else
+ ++scene->_field1B66;
+
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 12;
+ scene->setAction(&scene->_sequenceManager, scene, 3154, &BF_GLOBALS._player, NULL);
+ break;
+ default:
+ return NamedHotspot::startAction(action, event);
+ }
+
+ return true;
+}
+
+bool Scene315::Sign::startAction(CursorType action, Event &event) {
+ Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene;
+
+ if (action == CURSOR_LOOK) {
+ BF_GLOBALS._player.disableControl();
+ BF_GLOBALS._player.addMover(NULL);
+ scene->_object9.postInit();
+ scene->_object9.hide();
+ scene->_sceneMode = 3167;
+ scene->setAction(&scene->_sequenceManager, scene, 3167, &scene->_object9, this, NULL);
+ return true;
+ } else {
+ return NamedHotspot::startAction(action, event);
+ }
+}
+
+bool Scene315::BulletinBoard::startAction(CursorType action, Event &event) {
+ Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene;
+
+ if (action == CURSOR_LOOK) {
+ BF_GLOBALS._player.addMover(NULL);
+ scene->_stripManager.start(3154, &BF_GLOBALS._stripProxy);
+ return true;
+ } else {
+ return NamedHotspot::startAction(action, event);
+ }
+}
+
+bool Scene315::CleaningKit::startAction(CursorType action, Event &event) {
+ Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene;
+
+ if ((action == INV_COLT45) && BF_GLOBALS.getFlag(onDuty)) {
+ if (!BF_GLOBALS.getFlag(onDuty))
+ SceneItem::display2(315, 27);
+ else if (BF_GLOBALS.getHasBullets()) {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 3162;
+ scene->setAction(&scene->_sequenceManager, scene, 3162, &BF_GLOBALS._player, NULL);
+ } else if (BF_GLOBALS.getFlag(fGunLoaded))
+ SceneItem::display2(315, 46);
+ else {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 3159;
+ scene->setAction(&scene->_sequenceManager, scene, 3159, &BF_GLOBALS._player, NULL);
+ }
+ return true;
+ } else {
+ return NamedHotspot::startAction(action, event);
+ }
+}
+
+bool Scene315::BriefingMaterial::startAction(CursorType action, Event &event) {
+ Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene;
+
+ if (action != CURSOR_USE)
+ return NamedHotspot::startAction(action, event);
+ else if (BF_INVENTORY._forestRap._sceneNumber == 1) {
+ SceneItem::display2(315, 37);
+ return true;
+ } else {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 3158;
+ scene->setAction(&scene->_sequenceManager, scene, 3158, &BF_GLOBALS._player, NULL);
+ return true;
+ }
+}
+
+bool Scene315::WestExit::startAction(CursorType action, Event &event) {
+ ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 190, 75);
+ return true;
+}
+
+bool Scene315::SouthWestExit::startAction(CursorType action, Event &event) {
+ ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, event.mousePos.x, event.mousePos.y);
+ return true;
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene315::BulletinMemo::startAction(CursorType action, Event &event) {
+ Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ scene->_stripManager.start(3157, &BF_GLOBALS._stripProxy);
+ return true;
+ case CURSOR_USE:
+ if (!BF_GLOBALS.getFlag(fGotPointsForCleaningGun)) {
+ T2_GLOBALS._uiElements.addScore(10);
+ BF_GLOBALS.setFlag(fGotPointsForCleaningGun);
+ }
+ BF_GLOBALS._player.addMover(NULL);
+ scene->_stripManager.start(3159, &BF_GLOBALS._stripProxy);
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ break;
+ }
+}
+
+bool Scene315::Object2::startAction(CursorType action, Event &event) {
+ Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ BF_GLOBALS._player.disableControl();
+ scene->_object9.postInit();
+ scene->_object9.hide();
+ scene->_sceneMode = 3157;
+ scene->setAction(&scene->_sequenceManager, scene, 3157, &BF_GLOBALS._player, &scene->_object9, NULL);
+ return true;
+ case CURSOR_USE:
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 3156;
+ scene->setAction(&scene->_sequenceManager, scene, BF_GLOBALS.getFlag(onDuty) ? 3156 : 3168,
+ &BF_GLOBALS._player, this, NULL);
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene315::ATFMemo::startAction(CursorType action, Event &event) {
+ Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ BF_GLOBALS._player.addMover(NULL);
+ scene->_stripManager.start(3156, &BF_GLOBALS._stripProxy);
+ return true;
+ case CURSOR_USE:
+ if (!BF_GLOBALS.getFlag(fGotPointsForMemo)) {
+ T2_GLOBALS._uiElements.addScore(30);
+ BF_GLOBALS.setFlag(fGotPointsForMemo);
+ }
+
+ BF_GLOBALS._player.addMover(NULL);
+ scene->_stripManager.start(3158, &BF_GLOBALS._stripProxy);
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene315::Action1::signal() {
+ Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ BF_GLOBALS._player.disableControl();
+ ADD_PLAYER_MOVER_THIS(BF_GLOBALS._player, 128, 128);
+ break;
+ case 1:
+ BF_GLOBALS._player.changeAngle(315);
+ setDelay(2);
+ break;
+ case 2:
+ scene->_stripManager.start(scene->_stripNumber, this);
+ break;
+ case 3:
+ if (scene->_sceneMode == 3169) {
+ T2_GLOBALS._uiElements.addScore(30);
+ BF_INVENTORY.setObjectScene(INV_MUG_SHOT, 1);
+ }
+
+ remove();
+ BF_GLOBALS._player.enableControl();
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+Scene315::Scene315() {
+ BF_GLOBALS._v51C44 = 1;
+ _field1B6C = _field139C = 0;
+ if (BF_GLOBALS._dayNumber == 0)
+ BF_GLOBALS._dayNumber = 1;
+
+ BF_GLOBALS.clearFlag(fCanDrawGun);
+ _field1B68 = true;
+ _field1B6A = false;
+ _field1B60 = _field1B62 = 0;
+ _field1B64 = _field1B66 = 0;
+}
+
+void Scene315::synchronize(Serializer &s) {
+ SceneExt::synchronize(s);
+
+ s.syncAsSint16LE(_field1390);
+ s.syncAsSint16LE(_stripNumber);
+ s.syncAsSint16LE(_field1398);
+ s.syncAsSint16LE(_field1B60);
+ s.syncAsSint16LE(_field1B62);
+ s.syncAsSint16LE(_field1B64);
+ s.syncAsSint16LE(_field1B66);
+ s.syncAsSint16LE(_field1B6C);
+ s.syncAsSint16LE(_field139C);
+ s.syncAsByte(_field1B68);
+ s.syncAsByte(_field1B6A);
+ s.syncAsSint16LE(_currentCursor);
+}
+
+void Scene315::postInit(SceneObjectList *OwnerList) {
+ loadScene(315);
+
+ if (BF_GLOBALS._sceneManager._previousScene != 325)
+ BF_GLOBALS._sound1.fadeSound(11);
+
+ setZoomPercents(67, 72, 124, 100);
+
+ _stripManager.addSpeaker(&_gameTextSpeaker);
+ _stripManager.addSpeaker(&_sutterSpeaker);
+ _stripManager.addSpeaker(&_harrisonSpeaker);
+ _stripManager.addSpeaker(&_jakeJacketSpeaker);
+ _stripManager.addSpeaker(&_jakeUniformSpeaker);
+ _stripManager.addSpeaker(&_jailerSpeaker);
+
+ _object8.postInit();
+ _object8.setVisage(315);
+ _object8.setPosition(Common::Point(272, 69));
+
+ if (BF_GLOBALS._bookmark >= bLauraToParamedics) {
+ _atfMemo.postInit();
+ _atfMemo.setVisage(315);
+ _atfMemo.setPosition(Common::Point(167, 53));
+ _atfMemo.setStrip(4);
+ _atfMemo.setFrame(4);
+ _atfMemo.fixPriority(82);
+ _atfMemo.setDetails(315, -1, -1, -1, 1, NULL);
+ }
+
+ if (BF_GLOBALS._dayNumber == 1) {
+ if (BF_GLOBALS._bookmark >= bLauraToParamedics) {
+ _bulletinMemo.postInit();
+ _bulletinMemo.setVisage(315);
+ _bulletinMemo.setPosition(Common::Point(156, 51));
+ _bulletinMemo.setStrip(4);
+ _bulletinMemo.setFrame(2);
+ _bulletinMemo.fixPriority(82);
+ _bulletinMemo.setDetails(315, -1, -1, -1, 1, NULL);
+ }
+ } else if ((BF_INVENTORY._daNote._sceneNumber != 1) && (BF_GLOBALS._dayNumber < 3)) {
+ _object2.postInit();
+ _object2.setVisage(315);
+ _object2.setStrip(3);
+ _object2.setFrame(2);
+ _object2.setPosition(Common::Point(304, 31));
+ _object2.fixPriority(70);
+ _object2.setDetails(315, 3, 4, -1, 1, NULL);
+ }
+
+ _sutterSlot.setDetails(12, 315, 35, -1, 36, 1);
+ _bulletinBoard.setDetails(3, 315, -1, -1, -1, 1);
+ _barry.setDetails(4, 315, 10, 11, 12, 1);
+ _item3.setDetails(2, 315, 0, 1, 2, 1);
+ _sign.setDetails(Rect(190, 17, 208, 30), 315, -1, -1, -1, 1, NULL);
+ _westExit.setDetails(Rect(184, 31, 211, 80), 315, -1, -1, -1, 1, NULL);
+ _swExit.setDetails(Rect(0, 157, 190, 167), 315, -1, -1, -1, 1, NULL);
+
+ if (!BF_GLOBALS.getFlag(onDuty) && ((BF_GLOBALS._bookmark == bNone) || (BF_GLOBALS._bookmark == bLyleStoppedBy))) {
+ _field1398 = 1;
+ BF_GLOBALS.setFlag(onDuty);
+ } else {
+ _field1398 = 0;
+ }
+
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.changeZoom(-1);
+ BF_GLOBALS._player.disableControl();
+
+ if ((BF_GLOBALS._dayNumber != 2) || (BF_GLOBALS._sceneManager._previousScene != 325)) {
+ _object4.postInit();
+ _object4.setVisage(316);
+ _object4.setPosition(Common::Point(99, 82));
+ _object4.fixPriority(95);
+
+ _object5.postInit();
+ _object5.setVisage(395);
+ _object5.setStrip(2);
+ _object5.setPosition(Common::Point(96, 86));
+ }
+
+ // Set up evidence objects in inventory
+ if (BF_INVENTORY._bookingGreen.inInventory())
+ ++_field1B60;
+ if (BF_INVENTORY._greensGun.inInventory())
+ ++_field1B60;
+ if (BF_INVENTORY._greensKnife.inInventory())
+ ++_field1B60;
+
+ if (BF_INVENTORY._bullet22.inInventory())
+ ++_field1B64;
+ if (BF_INVENTORY._autoRifle.inInventory())
+ ++_field1B64;
+ if (BF_INVENTORY._wig.inInventory())
+ ++_field1B64;
+ if (BF_INVENTORY._bookingFrankie.inInventory())
+ ++_field1B64;
+ if (BF_INVENTORY._bookingGang.inInventory())
+ ++_field1B64;
+ if (BF_INVENTORY._snub22.inInventory())
+ ++_field1B64;
+
+ switch (BF_GLOBALS._sceneManager._previousScene) {
+ case 190:
+ if (_field1398)
+ _field1B6A = true;
+ _sceneMode = BF_GLOBALS.getFlag(onDuty) ? 3150 : 3165;
+ setAction(&_sequenceManager, this, _sceneMode, &BF_GLOBALS._player, NULL);
+ break;
+ case 325:
+ T2_GLOBALS._uiElements._active = false;
+ _object6.postInit();
+ _object7.postInit();
+ _object8.setFrame(8);
+ _sceneMode = (BF_GLOBALS._dayNumber == 1) ? 3152 : 3155;
+ setAction(&_sequenceManager, this, _sceneMode, &BF_GLOBALS._player, &_object6,
+ &_object7, &_object8, NULL);
+ break;
+ case 300:
+ default:
+ if (_field1398)
+ _field1B6A = true;
+ if (!BF_GLOBALS.getFlag(onDuty))
+ _sceneMode = 3166;
+ else if (!_field1398)
+ _sceneMode = 3164;
+ else
+ _sceneMode = 3163;
+
+ setAction(&_sequenceManager, this, _sceneMode, &BF_GLOBALS._player, NULL);
+ break;
+ }
+
+ if (_field1B6A) {
+ _object8.setFrame(8);
+ } else {
+ BF_GLOBALS._walkRegions.proc1(4);
+ }
+
+ _briefingMaterial.setDetails(24, 315, 38, 39, 40, 1);
+ _cleaningKit.setDetails(14, 315, 24, 25, 26, 1);
+ _item7.setDetails(5, 315, 8, 9, -1, 1);
+ _item6.setDetails(6, 315, 5, 6, 7, 1);
+ _item10.setDetails(8, 315, 13, -1, -1, 1);
+ _item11.setDetails(9, 315, 14, -1, -1, 1);
+ _item8.setDetails(7, 315, 15, 16, 17, 1);
+ _item9.setDetails(10, 315, 18, 19, 20, 1);
+}
+
+void Scene315::signal() {
+ int ctr = 0;
+
+ switch (_sceneMode) {
+ case 0:
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 10:
+ if (_field1B62) {
+ if (_field1B62 >= _field1B60)
+ BF_GLOBALS.setFlag(fLeftTraceIn910);
+ else
+ ++ctr;
+ }
+
+ if (_field1B66) {
+ if (_field1B66 < _field1B64)
+ ++ctr;
+ else if (BF_GLOBALS._bookmark < bBookedFrankieEvidence)
+ BF_GLOBALS._bookmark = bBookedFrankieEvidence;
+ }
+
+ if (ctr) {
+ BF_GLOBALS._deathReason = 20;
+ BF_GLOBALS._sceneManager.changeScene(666);
+ } else {
+ BF_GLOBALS._sceneManager.changeScene(300);
+ }
+ BF_GLOBALS._sound1.fadeOut2(NULL);
+ break;
+ case 11:
+ if (_field1B62) {
+ if (_field1B62 >= _field1B60)
+ BF_GLOBALS.setFlag(fLeftTraceIn910);
+ else
+ ++ctr;
+ }
+
+ if (_field1B66) {
+ if (_field1B66 < _field1B64)
+ ++ctr;
+ else if (BF_GLOBALS._bookmark < bBookedFrankie)
+ BF_GLOBALS._bookmark = bBookedFrankie;
+ else if (BF_GLOBALS._bookmark < bBookedFrankieEvidence)
+ BF_GLOBALS._bookmark = bBookedFrankie;
+ }
+
+ if (ctr == 1) {
+ BF_GLOBALS._deathReason = 20;
+ BF_GLOBALS._sound1.fadeOut2(NULL);
+ BF_GLOBALS._sceneManager.changeScene(666);
+ } else if ((BF_GLOBALS._bookmark != bBookedFrankie) || !BF_GLOBALS.getFlag(onDuty)) {
+ BF_GLOBALS._sound1.fadeOut2(NULL);
+ BF_GLOBALS._sceneManager.changeScene(190);
+ } else {
+ BF_GLOBALS._bookmark = bBookedFrankieEvidence;
+ _field139C = 0;
+ BF_GLOBALS.clearFlag(onDuty);
+ BF_INVENTORY.setObjectScene(INV_TICKET_BOOK, 60);
+ BF_INVENTORY.setObjectScene(INV_MIRANDA_CARD, 60);
+ _sceneMode = 3165;
+ setAction(&_sequenceManager, this, 3165, &BF_GLOBALS._player, NULL);
+ }
+ break;
+ case 12:
+ T2_GLOBALS._uiElements.addScore(30);
+ BF_INVENTORY.setObjectScene((int)_currentCursor, 315);
+
+ if (!_field1B64 || (_field1B66 != _field1B64))
+ BF_GLOBALS._player.enableControl();
+ else {
+ _field139C = 1;
+ _stripNumber = 3171;
+ setAction(&_action1);
+ }
+ break;
+ case 3150:
+ case 3164:
+ case 3165:
+ case 3166:
+ BF_GLOBALS._player.enableControl();
+ _field1B68 = false;
+ break;
+ case 3151:
+ BF_GLOBALS._sceneManager.changeScene(325);
+ break;
+ case 3152:
+ BF_GLOBALS._walkRegions.proc1(4);
+ _object7.remove();
+ _object6.remove();
+
+ BF_GLOBALS._player.enableControl();
+ _field1B68 = false;
+ BF_GLOBALS._walkRegions.proc1(4);
+ T2_GLOBALS._uiElements._active = true;
+ T2_GLOBALS._uiElements.show();
+ break;
+ case 3153:
+ T2_GLOBALS._uiElements.addScore(30);
+ BF_INVENTORY.setObjectScene((int)_currentCursor, 315);
+
+ if (_stripNumber != 0)
+ setAction(&_action1);
+ else if (!_field1B64 || (_field1B66 != _field1B64))
+ BF_GLOBALS._player.enableControl();
+ else {
+ _stripNumber = 3171;
+ setAction(&_action1);
+ _field139C = 1;
+ }
+ break;
+ case 3155:
+ BF_GLOBALS._player.enableControl();
+ _field1B68 = false;
+ BF_GLOBALS._walkRegions.proc1(4);
+ T2_GLOBALS._uiElements._active = true;
+ T2_GLOBALS._uiElements.show();
+ break;
+ case 3156:
+ T2_GLOBALS._uiElements.addScore(10);
+ BF_INVENTORY.setObjectScene(INV_DA_NOTE, 1);
+ _object2.remove();
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 3157:
+ BF_GLOBALS._player.enableControl();
+ _object9.remove();
+ break;
+ case 3158:
+ BF_GLOBALS._player.enableControl();
+ T2_GLOBALS._uiElements.addScore(10);
+ BF_INVENTORY.setObjectScene(INV_FOREST_RAP, 1);
+ break;
+ case 3159:
+ if (!BF_GLOBALS.getFlag(fBookedGreenEvidence)) {
+ T2_GLOBALS._uiElements.addScore(30);
+ BF_GLOBALS.setFlag(fBookedGreenEvidence);
+ }
+ BF_GLOBALS.setFlag(gunClean);
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 3161:
+ BF_GLOBALS._deathReason = 21;
+ BF_GLOBALS._sound1.fadeOut2(NULL);
+ BF_GLOBALS._sceneManager.changeScene(666);
+ break;
+ case 3162:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 3161;
+ setAction(&_sequenceManager, this, 3161, &BF_GLOBALS._player, NULL);
+ BF_GLOBALS.setFlag(fShotSuttersDesk);
+ break;
+ case 3163:
+ _sceneMode = 3150;
+ setAction(&_sequenceManager, this, 3150, &BF_GLOBALS._player, NULL);
+ break;
+ case 3167:
+ BF_GLOBALS._player.enableControl();
+ _object9.remove();
+ break;
+ case 3154:
+ default:
+ break;
+ }
+}
+
+void Scene315::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 (_swExit.contains(event.mousePos)) {
+ GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_SW);
+ BF_GLOBALS._events.setCursor(surface);
+ } else if ((BF_GLOBALS._bookmark != bBookedFrankie) && _westExit.contains(event.mousePos)) {
+ GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_W);
+ 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 Scene315::dispatch() {
+ SceneExt::dispatch();
+
+ if (_field1B68)
+ return;
+
+ if (_field1B6A) {
+ if (BF_GLOBALS._player._position.y < 69) {
+ BF_GLOBALS._player.disableControl();
+ _field1B68 = true;
+ _sceneMode = 3151;
+ setAction(&_sequenceManager, this, 3151, &BF_GLOBALS._player, NULL);
+ } else if (BF_GLOBALS._player.getRegionIndex() == 1) {
+ BF_GLOBALS._player.disableControl();
+ _field1B68 = true;
+ SceneItem::display2(315, 28);
+ _sceneMode = 3150;
+ ADD_MOVER(BF_GLOBALS._player, BF_GLOBALS._player._position.x + 30,
+ BF_GLOBALS._player._position.y + 15);
+ } else if (BF_GLOBALS._player._position.y > 156) {
+ BF_GLOBALS._player.disableControl();
+ _field1B68 = true;
+ SceneItem::display2(315, 28);
+ _sceneMode = 3150;
+ ADD_MOVER(BF_GLOBALS._player, BF_GLOBALS._player._position.x + 30,
+ BF_GLOBALS._player._position.y - 24);
+ }
+ } else if (BF_GLOBALS._player.getRegionIndex() == 1) {
+ BF_GLOBALS._player.disableControl();
+ _field1B68 = true;
+ _sceneMode = 11;
+ ADD_MOVER(BF_GLOBALS._player, BF_GLOBALS._player._position.x - 30,
+ BF_GLOBALS._player._position.y - 5);
+ } else if (BF_GLOBALS._player._position.y > 156) {
+ BF_GLOBALS._player.disableControl();
+ _field1B68 = true;
+
+ if (_field139C) {
+ SceneItem::display2(315, 45);
+ _sceneMode = 3150;
+ ADD_MOVER(BF_GLOBALS._player, 112, 152);
+ } else {
+ _sceneMode = 10;
+ ADD_MOVER(BF_GLOBALS._player, BF_GLOBALS._player._position.x - 150,
+ BF_GLOBALS._player._position.y + 120);
+ }
+ }
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 325 - Police Station Conference Room
+ *
+ *--------------------------------------------------------------------------*/
+
+bool Scene325::Item1::startAction(CursorType action, Event &event) {
+ if (action == CURSOR_EXIT) {
+ BF_GLOBALS._events.setCursor(CURSOR_WALK);
+ BF_GLOBALS._player.disableControl();
+ BF_GLOBALS._sceneManager.changeScene(315);
+ return true;
+ } else {
+ return false;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene325::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+ loadScene(325);
+ BF_GLOBALS._interfaceY = 200;
+ BF_GLOBALS.clearFlag(fCanDrawGun);
+
+ if (BF_GLOBALS._dayNumber == 0)
+ BF_GLOBALS._dayNumber = 1;
+
+ // Add the speakers
+ _stripManager.addSpeaker(&_gameTextSpeaker);
+ _stripManager.addSpeaker(&_PSutterSpeaker);
+
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.hide();
+
+ if (BF_GLOBALS._dayNumber == 1) {
+ _object1.postInit();
+ _object1.setVisage(325);
+ _object1.setStrip(8);
+ _object1.setPosition(Common::Point(128, 44));
+ } else {
+ _object1.postInit();
+ _object1.setVisage(325);
+ _object1.setStrip(8);
+ _object1.setFrame(2);
+ _object1.setPosition(Common::Point(132, 28));
+
+ _object2.postInit();
+ _object2.setVisage(325);
+ _object2.setStrip(8);
+ _object2.setFrame(3);
+ _object2.setPosition(Common::Point(270, 24));
+ }
+
+ _object3.postInit();
+ _object3.setVisage(335);
+ _object3.setStrip(4);
+ _object3.setPosition(Common::Point(202, 122));
+
+ _object4.postInit();
+ _object4.setVisage(335);
+ _object4.setStrip(2);
+ _object4.setPosition(Common::Point(283, 102));
+
+ _object5.postInit();
+ _object5.setVisage(335);
+ _object5.setStrip(1);
+ _object5.setPosition(Common::Point(135, 167));
+
+ _item1.setDetails(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), 560, -1, -1, -1, 1, NULL);
+ BF_GLOBALS._player.disableControl();
+
+ _sceneMode = (BF_GLOBALS._dayNumber == 1) ? 3250 : 3251;
+ setAction(&_sequenceManager, this, _sceneMode, &_object3, &_object4, &_object5, NULL);
+}
+
+void Scene325::signal() {
+ BF_GLOBALS._player._uiEnabled = 0;
+ BF_GLOBALS._player._canWalk = true;
+ BF_GLOBALS._player._enabled = true;
+ BF_GLOBALS._events.setCursor(CURSOR_EXIT);
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 330 - Approaching Marina
+ *
+ *--------------------------------------------------------------------------*/
+
+void Scene330::Timer1::signal() {
+ PaletteRotation *rotation = BF_GLOBALS._scenePalette.addRotation(240, 254, 1);
+ rotation->setDelay(25);
+ remove();
+}
+
+/*--------------------------------------------------------------------------*/
+
+Scene330::Scene330() {
+ _seqNumber = 0;
+}
+
+void Scene330::synchronize(Serializer &s) {
+ SceneExt::synchronize(s);
+ s.syncAsSint16LE(_seqNumber);
+}
+
+void Scene330::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+ BF_GLOBALS._sound1.changeSound(35);
+ _sound1.fadeSound(35);
+
+ loadScene(850);
+ _timer.set(2, NULL);
+
+ if (BF_GLOBALS._dayNumber >= 4) {
+ _object2.postInit();
+ _object2.setVisage(851);
+ _object2.setPosition(Common::Point(120, 112));
+ }
+
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.setVisage(BF_GLOBALS.getFlag(onDuty) ? 850 : 852);
+ BF_GLOBALS._player.setStrip(2);
+ BF_GLOBALS._player.setFrame(1);
+ BF_GLOBALS._player.hide();
+ if (BF_GLOBALS.getFlag(fWithLyle))
+ BF_GLOBALS._player.setStrip(5);
+
+ if ((BF_GLOBALS._dayNumber == 1) && BF_GLOBALS.getFlag(fBackupArrived340)) {
+ _object1.postInit();
+ _object1.setVisage(850);
+ _object1.setStrip(6);
+ _object1.setFrame(1);
+ _object1.setPosition(Common::Point(47, 169));
+ _object1.animate(ANIM_MODE_2);
+ }
+
+ if (BF_GLOBALS._sceneManager._previousScene == 50) {
+ // Coming from map
+ if ((BF_GLOBALS._driveFromScene == 340) || (BF_GLOBALS._driveFromScene == 342) ||
+ (BF_GLOBALS._driveFromScene == 330)) {
+ if (BF_GLOBALS.getFlag(fWithLyle)) {
+ _seqNumber = 3304;
+ } else {
+ _seqNumber = 3302;
+ _sound2.play(123);
+ BF_GLOBALS.setFlag(onBike);
+ }
+ } else if (BF_GLOBALS.getFlag(fWithLyle)) {
+ _seqNumber = 3303;
+ } else {
+ _sound2.play(123);
+ _seqNumber = 3301;
+
+ if ((BF_GLOBALS._dayNumber == 1) && (BF_GLOBALS._bookmark >= bStartOfGame) &&
+ (BF_GLOBALS._bookmark < bCalledToDomesticViolence)) {
+ BF_GLOBALS._player.animate(ANIM_MODE_2);
+ }
+ }
+ } else if (BF_GLOBALS.getFlag(fWithLyle)) {
+ _seqNumber = 3303;
+ } else {
+ _seqNumber = 3301;
+ _sound2.play(123);
+
+ if ((BF_GLOBALS._dayNumber == 1) && (BF_GLOBALS._bookmark >= bStartOfGame) &&
+ (BF_GLOBALS._bookmark < bCalledToDomesticViolence)) {
+ BF_GLOBALS._player.animate(ANIM_MODE_2);
+ }
+ }
+
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 0;
+ setAction(&_sequenceManager, this, _seqNumber, &BF_GLOBALS._player, NULL);
+}
+
+void Scene330::remove() {
+ BF_GLOBALS._scenePalette.clearListeners();
+ SceneExt::remove();
+}
+
+void Scene330::signal() {
+ if ((BF_GLOBALS._driveFromScene == 330) || (BF_GLOBALS._driveFromScene == 340) ||
+ (BF_GLOBALS._driveFromScene == 342)) {
+ // Leaving marina
+ if ((BF_GLOBALS._dayNumber != 1) || (BF_GLOBALS._bookmark < bStartOfGame) ||
+ (BF_GLOBALS._bookmark >= bCalledToDomesticViolence))
+ // Leave scene normally
+ BF_GLOBALS._sceneManager.changeScene(BF_GLOBALS._driveToScene);
+ else {
+ // Player leaves with domestic violence unresolved
+ BF_GLOBALS._player.hide();
+ BF_GLOBALS._deathReason = 4;
+ BF_GLOBALS._sceneManager.changeScene(666);
+ }
+ } else {
+ // Arriving at marina
+ BF_GLOBALS.clearFlag(onBike);
+
+ if ((BF_GLOBALS._dayNumber != 1) || (BF_GLOBALS._bookmark < bStartOfGame) ||
+ (BF_GLOBALS._bookmark >= bCalledToDomesticViolence))
+ BF_GLOBALS._sceneManager.changeScene(342);
+ else
+ BF_GLOBALS._sceneManager.changeScene(340);
+ }
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 340 - Marina, Domestic Disturbance
+ *
+ *--------------------------------------------------------------------------*/
+
+bool Scene340::Child::startAction(CursorType action, Event &event) {
+ Scene340 *scene = (Scene340 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(340, 5);
+ return true;
+ case CURSOR_USE:
+ SceneItem::display2(340, 14);
+ return true;
+ case CURSOR_TALK:
+ if (!BF_GLOBALS.getFlag(fBackupArrived340) || (BF_GLOBALS._marinaWomanCtr < 3) || !BF_GLOBALS.getFlag(fGotAllSkip340))
+ scene->setAction(&scene->_action3);
+ else
+ scene->setAction(&scene->_action2);
+ return true;
+ case INV_COLT45:
+ scene->gunDisplay();
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ break;
+ }
+}
+
+bool Scene340::Woman::startAction(CursorType action, Event &event) {
+ Scene340 *scene = (Scene340 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(340, 4);
+ return true;
+ case CURSOR_USE:
+ SceneItem::display2(340, 13);
+ return true;
+ case CURSOR_TALK:
+ if (!BF_GLOBALS.getFlag(fBackupArrived340) || (BF_GLOBALS._marinaWomanCtr < 3) || !BF_GLOBALS.getFlag(fGotAllSkip340))
+ scene->setAction(&scene->_action1);
+ else
+ scene->setAction(&scene->_action2);
+ return true;
+ case INV_COLT45:
+ scene->gunDisplay();
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ break;
+ }
+}
+
+bool Scene340::Harrison::startAction(CursorType action, Event &event) {
+ Scene340 *scene = (Scene340 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(340, 6);
+ return true;
+ case CURSOR_USE:
+ SceneItem::display2(340, 15);
+ return true;
+ case CURSOR_TALK:
+ scene->setAction(&scene->_action5);
+ return true;
+ case INV_COLT45:
+ scene->gunDisplay();
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ break;
+ }
+}
+
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene340::Item1::startAction(CursorType action, Event &event) {
+ Scene340 *scene = (Scene340 *)BF_GLOBALS._sceneManager._scene;
+
+ if (action == INV_COLT45) {
+ scene->gunDisplay();
+ return true;
+ } else {
+ return NamedHotspot::startAction(action, event);
+ }
+}
+
+bool Scene340::WestExit::startAction(CursorType action, Event &event) {
+ Scene340 *scene = (Scene340 *)BF_GLOBALS._sceneManager._scene;
+
+ if (BF_GLOBALS.getFlag(fBackupArrived340)) {
+ scene->setAction(&scene->_action6);
+ } else {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 4;
+ setAction(&scene->_sequenceManager1, scene, 1348, &BF_GLOBALS._player, NULL);
+ }
+ return true;
+}
+
+bool Scene340::SouthWestExit::startAction(CursorType action, Event &event) {
+ Scene340 *scene = (Scene340 *)BF_GLOBALS._sceneManager._scene;
+
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 3;
+ setAction(&scene->_sequenceManager1, scene, 1340, &BF_GLOBALS._player, NULL);
+ return true;
+}
+
+bool Scene340::NorthExit::startAction(CursorType action, Event &event) {
+ ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 254, 106);
+ return true;
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene340::Action1::signal() {
+ Scene340 *scene = (Scene340 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0: {
+ BF_GLOBALS._player.disableControl();
+ ADD_PLAYER_MOVER(64, 155);
+ break;
+ }
+ case 1:
+ BF_GLOBALS._player.changeAngle(45);
+ setDelay(3);
+ break;
+ case 2:
+ if (!BF_GLOBALS._marinaWomanCtr) {
+ setAction(&scene->_action8, this);
+ } else if (!_action) {
+ BF_GLOBALS._player.setAction(&scene->_sequenceManager1, this,
+ MIN(BF_GLOBALS._marinaWomanCtr, 3) + 2340, &scene->_woman, &scene->_child,
+ &scene->_object4, NULL);
+ }
+ break;
+ case 3:
+ if ((BF_GLOBALS._marinaWomanCtr != 1) || BF_GLOBALS.getFlag(fCalledBackup)) {
+ setDelay(3);
+ } else {
+ scene->_sound1.play(8);
+ scene->_stripManager.start(3413, this);
+ }
+ break;
+ case 4:
+ if (BF_GLOBALS._marinaWomanCtr == 1)
+ ++BF_GLOBALS._marinaWomanCtr;
+
+ if (BF_GLOBALS.getFlag(fBackupArrived340)) {
+ scene->_field2654 = 1;
+ scene->_harrison.setPosition(Common::Point(46, 154));
+ BF_GLOBALS._walkRegions.proc1(19);
+ } else if (BF_GLOBALS.getFlag(fCalledBackup)) {
+ scene->_timer1.set(40, &scene->_harrison, &scene->_action4);
+ }
+
+ ++BF_GLOBALS._marinaWomanCtr;
+ BF_GLOBALS._player.enableControl();
+ remove();
+ break;
+ }
+}
+
+void Scene340::Action2::signal() {
+ Scene340 *scene = (Scene340 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0: {
+ ADD_PLAYER_MOVER(64, 155);
+ break;
+ }
+ case 1:
+ BF_GLOBALS._player.changeAngle(45);
+ setDelay(3);
+ break;
+ case 2:
+ BF_GLOBALS._player.setAction(&scene->_sequenceManager3, this, 1341, &scene->_woman, &scene->_child, NULL);
+ break;
+ case 3:
+ scene->_woman.remove();
+ scene->_child.remove();
+ BF_GLOBALS.setFlag(fToldToLeave340);
+ BF_GLOBALS._player.enableControl();
+ remove();
+ break;
+ }
+}
+
+void Scene340::Action3::signal() {
+ Scene340 *scene = (Scene340 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0: {
+ ADD_PLAYER_MOVER(64, 155);
+ break;
+ }
+ case 1:
+ BF_GLOBALS._player.changeAngle(45);
+ setDelay(3);
+ break;
+ case 2:
+ scene->_stripManager.start(scene->_field2652 + 3404, this);
+ break;
+ case 3:
+ if (++scene->_field2652 > 2) {
+ if (!BF_GLOBALS.getFlag(fGotAllSkip340))
+ BF_GLOBALS.setFlag(fGotAllSkip340);
+ scene->_field2652 = 0;
+ }
+
+ BF_GLOBALS._player.enableControl();
+ remove();
+ break;
+ }
+}
+
+void Scene340::Action4::signal() {
+ Scene340 *scene = (Scene340 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ if (!_action) {
+ BF_GLOBALS._player.disableControl();
+ setDelay(3);
+ } else {
+ scene->_timer1.set(30, &scene->_harrison, &scene->_action4);
+ remove();
+ }
+ break;
+ case 1:
+ BF_GLOBALS.setFlag(fBackupArrived340);
+ scene->_field2654 = 1;
+ setDelay(3);
+ break;
+ case 2:
+ BF_GLOBALS._player.setAction(&scene->_sequenceManager3, this, 1347, &scene->_harrison, NULL);
+ break;
+ case 3:
+ BF_GLOBALS._walkRegions.proc1(19);
+ BF_GLOBALS._player.enableControl();
+ remove();
+ break;
+ }
+}
+
+void Scene340::Action5::signal() {
+ Scene340 *scene = (Scene340 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ BF_GLOBALS._player.disableControl();
+ if (scene->_field2654) {
+ ADD_PLAYER_MOVER(64, 155);
+ } else {
+ BF_GLOBALS._player.changeAngle(45);
+ setDelay(3);
+ }
+ break;
+ case 1:
+ BF_GLOBALS._player.updateAngle(scene->_harrison._position);
+ setDelay(3);
+ break;
+ case 2:
+ setDelay(15);
+ break;
+ case 3:
+ if (BF_GLOBALS.getFlag(fBriefedBackup))
+ scene->_stripManager.start(3416, this);
+ else {
+ BF_GLOBALS.setFlag(fBriefedBackup);
+ scene->_stripManager.start(3407, this);
+ }
+ break;
+ case 4:
+ BF_GLOBALS._player.enableControl();
+ remove();
+ break;
+ }
+}
+
+void Scene340::Action6::signal() {
+ Scene340 *scene = (Scene340 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ BF_GLOBALS._player.disableControl();
+ ADD_PLAYER_MOVER(10, 110);
+ break;
+ case 1:
+ BF_GLOBALS._player.updateAngle(scene->_harrison._position);
+ scene->_harrison.updateAngle(BF_GLOBALS._player._position);
+ scene->_stripManager.start(3415, this);
+ break;
+ case 2: {
+ ADD_MOVER(BF_GLOBALS._player, -8, 110);
+ break;
+ }
+ case 3:
+ scene->_sceneMode = 4;
+ scene->signal();
+ remove();
+ break;
+ }
+}
+
+void Scene340::Action7::signal() {
+ Scene340 *scene = (Scene340 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ BF_GLOBALS._player.disableControl();
+ ADD_PLAYER_MOVER(254, 121);
+ break;
+ case 1:
+ BF_GLOBALS._player.updateAngle(scene->_harrison._position);
+ scene->_stripManager.start(BF_GLOBALS.getFlag(fBriefedBackup) ? 3414 : 3417, this);
+ break;
+ case 2:
+ BF_GLOBALS.setFlag(fBackupIn350);
+ BF_GLOBALS._sceneManager.changeScene(350);
+ break;
+ }
+}
+
+void Scene340::Action8::signal() {
+ Scene340 *scene = (Scene340 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ scene->_stripManager.start(3400, this);
+ break;
+ case 1:
+ setDelay(2);
+ break;
+ case 2:
+ scene->_object4.setPriority(250);
+ scene->_object4.setPosition(Common::Point(138, 130));
+ scene->_object4.setVisage(347);
+ scene->_object4.setStrip(6);
+ scene->_object4.setFrame(1);
+ scene->_object4._numFrames = 2;
+ scene->_object4.animate(ANIM_MODE_5, NULL);
+ scene->_object4.show();
+ break;
+ case 3:
+ scene->_object4.hide();
+
+ scene->_woman.setPriority(123);
+ scene->_woman.setPosition(Common::Point(88, 143));
+ scene->_woman.setVisage(344);
+ scene->_woman.setStrip(2);
+ scene->_woman.setFrame(1);
+ scene->_woman.changeZoom(100);
+ scene->_woman._numFrames = 10;
+ scene->_woman._moveRate = 10;
+ scene->_woman._moveDiff = Common::Point(3, 2);
+ scene->_woman.show();
+
+ scene->_child.setPriority(120);
+ scene->_child.setPosition(Common::Point(81, 143));
+ scene->_child.setVisage(347);
+ scene->_child.setStrip(3);
+ scene->_child.setFrame(1);
+ scene->_child.changeZoom(100);
+ scene->_child._numFrames = 10;
+ scene->_child._moveRate = 10;
+ scene->_child.show();
+
+ setDelay(6);
+ break;
+ case 4:
+ remove();
+ break;
+ }
+}
+
+void Scene340::Action8::process(Event &event) {
+ if ((_actionIndex != 3) || (event.eventType == EVENT_NONE))
+ Action::process(event);
+ else if (event.eventType == EVENT_BUTTON_DOWN) {
+ event.handled = true;
+ setDelay(2);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene340::Timer2::signal() {
+ PaletteRotation *item;
+
+ item = BF_GLOBALS._scenePalette.addRotation(235, 239, 1);
+ item->setDelay(30);
+ item = BF_GLOBALS._scenePalette.addRotation(247, 249, 1);
+ item->setDelay(30);
+ item = BF_GLOBALS._scenePalette.addRotation(240, 246, 1);
+ item->setDelay(30);
+ item = BF_GLOBALS._scenePalette.addRotation(252, 254, 1);
+ item->setDelay(30);
+
+ remove();
+}
+
+/*--------------------------------------------------------------------------*/
+
+Scene340::Scene340(): PalettedScene() {
+ _seqNumber1 = _field2652 = _field2654 = 0;
+}
+
+void Scene340::synchronize(Serializer &s) {
+ PalettedScene::synchronize(s);
+
+ s.syncAsSint16LE(_seqNumber1);
+ s.syncAsSint16LE(_field2652);
+ s.syncAsSint16LE(_field2654);
+}
+
+void Scene340::postInit(SceneObjectList *OwnerList) {
+ PalettedScene::postInit();
+ loadScene(340);
+ setZoomPercents(126, 70, 162, 100);
+
+ BF_GLOBALS._walkRegions.proc1(13);
+ BF_GLOBALS._walkRegions.proc1(15);
+ _timer2.set(2, NULL);
+
+ _stripManager.addSpeaker(&_gameTextSpeaker);
+ _stripManager.addSpeaker(&_jakeUniformSpeaker);
+
+ _field2652 = 0;
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+
+ _westExit.setDetails(Rect(0, 76, 19, 115), 340, -1, -1, -1, 1, NULL);
+ _swExit.setDetails(15, 340, -1, -1, -1, 1);
+ _northExit.setDetails(16, 340, -1, -1, -1, 1);
+
+ BF_GLOBALS._player._regionBitList = 0x10000;
+ BF_GLOBALS._player.setVisage(BF_GLOBALS.getFlag(onDuty) ? 1341 : 129);
+ BF_GLOBALS._player._moveDiff = Common::Point(5, 2);
+
+ if (BF_GLOBALS._dayNumber < 5) {
+ _object5.postInit();
+ _object5.setVisage(340);
+ _object5.setStrip(4);
+ _object5.setPosition(Common::Point(259, 61));
+ }
+
+ if (!BF_GLOBALS.getFlag(fToldToLeave340)) {
+ _woman.postInit();
+ _woman.setVisage(344);
+ _woman.setStrip(3);
+ _woman.setFrame(1);
+ _woman.fixPriority(123);
+ _woman.setPosition(Common::Point(88, 143));
+
+ _object4.postInit();
+ _object4.hide();
+
+ _child.postInit();
+ _child.setVisage(347);
+ _child.setStrip(3);
+ _child.setFrame(1);
+ _child.fixPriority(120);
+ _child.setPosition(Common::Point(81, 143));
+
+ _woman.setAction(&_sequenceManager2, NULL, 348, &_woman, &_child, &_object4, NULL);
+ BF_GLOBALS._sceneItems.addItems(&_child, &_woman, NULL);
+
+ _stripManager.addSpeaker(&_jordanSpeaker);
+ _stripManager.addSpeaker(&_skipBSpeaker);
+
+ BF_GLOBALS.set2Flags(f1097Marina);
+ }
+
+ if (BF_GLOBALS.getFlag(fCalledBackup)) {
+ _harrison.postInit();
+ _harrison.setVisage(326);
+ _harrison.setObjectWrapper(new SceneObjectWrapper());
+ _harrison.animate(ANIM_MODE_1, NULL);
+ _harrison.setPosition(Common::Point(-60, 219));
+ BF_GLOBALS._sceneItems.push_back(&_harrison);
+
+ _stripManager.addSpeaker(&_harrisonSpeaker);
+ if (BF_GLOBALS.getFlag(fBackupIn350)) {
+ _field2654 = 0;
+ _harrison.setVisage(1355);
+ _harrison.setPosition(Common::Point(289, 112));
+ _harrison.changeAngle(225);
+ _harrison.setFrame(1);
+ _harrison.fixPriority(75);
+
+ BF_GLOBALS._walkRegions.proc1(23);
+ } else if (BF_GLOBALS.getFlag(fBackupArrived340)) {
+ _field2654 = 1;
+ _harrison.setPosition(Common::Point(46, 154));
+ BF_GLOBALS._walkRegions.proc1(19);
+ } else if (BF_GLOBALS.getFlag(fCalledBackup) && (BF_GLOBALS._marinaWomanCtr > 0)) {
+ _timer1.set(900, &_harrison, &_action4);
+ }
+ }
+
+ switch (BF_GLOBALS._sceneManager._previousScene) {
+ case 350:
+ _seqNumber1 = 1342;
+ break;
+ case 830:
+ BF_GLOBALS._player._regionBitList |= 0x800;
+ _seqNumber1 = 1343;
+ break;
+ case 60:
+ _seqNumber1 = 342;
+ break;
+ default:
+ _sound1.fadeSound(35);
+ BF_GLOBALS._sound1.fadeSound((BF_GLOBALS._bookmark < bStartOfGame) ||
+ (BF_GLOBALS._bookmark > bCalledToDomesticViolence) ? 10 : 19);
+ _seqNumber1 = 342;
+ break;
+ }
+
+ _item3.setDetails(7, 340, 3, 9, 12, 1);
+ _item2.setDetails(Rect(0, 0, SCREEN_WIDTH - 1, 39), 340, 2, 8, 11, 1, NULL);
+ _item1.setDetails(Rect(0, 0, SCREEN_WIDTH - 1, UI_INTERFACE_Y), 340, 1, 7, 10, 1, NULL);
+
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 0;
+ setAction(&_sequenceManager1, this, _seqNumber1, &BF_GLOBALS._player, NULL);
+}
+
+void Scene340::remove() {
+ BF_GLOBALS._scenePalette.clearListeners();
+ PalettedScene::remove();
+}
+
+void Scene340::signal() {
+ switch (_sceneMode) {
+ case 1:
+ case 2:
+ BF_GLOBALS._sceneManager.changeScene(350);
+ break;
+ case 3:
+ BF_GLOBALS._sceneManager.changeScene(60);
+ break;
+ case 4:
+ BF_GLOBALS._sceneManager.changeScene(830);
+ break;
+ default:
+ BF_GLOBALS._player.enableControl();
+ break;
+ }
+}
+
+void Scene340::process(Event &event) {
+ // Check for gun being clicked on player
+ if ((event.eventType == EVENT_BUTTON_DOWN) && (BF_GLOBALS._events.getCursor() == INV_COLT45) &&
+ BF_GLOBALS._player.contains(event.mousePos)) {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 0;
+ SceneItem::display2(350, 26);
+
+ signal();
+ event.handled = true;
+ }
+
+ if (!event.handled) {
+ 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 (_westExit.contains(event.mousePos)) {
+ GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_W);
+ BF_GLOBALS._events.setCursor(surface);
+ } else if (_swExit.contains(event.mousePos)) {
+ GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_SW);
+ BF_GLOBALS._events.setCursor(surface);
+ } else if (_northExit.contains(event.mousePos)) {
+ GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_N);
+ 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 Scene340::dispatch() {
+ SceneExt::dispatch();
+ int idx = BF_GLOBALS._player.getRegionIndex();
+
+ if (idx == 20) {
+ BF_GLOBALS._player.updateZoom();
+ BF_GLOBALS._player.fixPriority(75);
+ }
+ if (idx == 26) {
+ BF_GLOBALS._player.updateZoom();
+ }
+ if (idx == 31) {
+ BF_GLOBALS._player.changeZoom(-1);
+ BF_GLOBALS._player.fixPriority(-1);
+ }
+
+ if (BF_GLOBALS._player._regionIndex == 16) {
+ BF_GLOBALS._player._regionBitList &= ~0x10000;
+
+ if (!BF_GLOBALS.getFlag(fBackupArrived340)) {
+ _sceneMode = 1;
+ ADD_PLAYER_MOVER_THIS(BF_GLOBALS._player, 254, 110);
+ } else if (!BF_GLOBALS.getFlag(fBackupIn350)) {
+ setAction(&_action7);
+ } else {
+ _sceneMode = 1;
+ ADD_PLAYER_MOVER_THIS(BF_GLOBALS._player, 254, 110);
+ }
+ }
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 342 - Marina, Normal
+ *
+ *--------------------------------------------------------------------------*/
+
+bool Scene342::Lyle::startAction(CursorType action, Event &event) {
+ Scene342 *scene = (Scene342 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(340, 16);
+ return true;
+ case CURSOR_USE:
+ SceneItem::display2(340, 15);
+ return true;
+ case CURSOR_TALK:
+ SceneItem::display2(340, 17);
+ return true;
+ case INV_COLT45:
+ scene->gunDisplay();
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene342::Item1::startAction(CursorType action, Event &event) {
+ Scene342 *scene = (Scene342 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case INV_COLT45:
+ scene->gunDisplay();
+ return true;
+ default:
+ return NamedHotspot::startAction(action, event);
+ }
+}
+
+bool Scene342::WestExit::startAction(CursorType action, Event &event) {
+ Scene342 *scene = (Scene342 *)BF_GLOBALS._sceneManager._scene;
+
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 4;
+ setAction(&scene->_sequenceManager1, scene, 1348, &BF_GLOBALS._player, NULL);
+ return true;
+}
+
+bool Scene342::SouthWestExit::startAction(CursorType action, Event &event) {
+ Scene342 *scene = (Scene342 *)BF_GLOBALS._sceneManager._scene;
+
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 3;
+ setAction(&scene->_sequenceManager1, scene, 1340, &BF_GLOBALS._player, NULL);
+ return true;
+}
+
+bool Scene342::NorthExit::startAction(CursorType action, Event &event) {
+ Scene342 *scene = (Scene342 *)BF_GLOBALS._sceneManager._scene;
+
+ scene->_sceneMode = 1;
+ ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 254, 106);
+ return true;
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene342::Timer1::signal() {
+ PaletteRotation *item;
+
+ item = BF_GLOBALS._scenePalette.addRotation(235, 239, 1);
+ item->setDelay(30);
+ item = BF_GLOBALS._scenePalette.addRotation(247, 249, 1);
+ item->setDelay(30);
+ item = BF_GLOBALS._scenePalette.addRotation(240, 246, 1);
+ item->setDelay(30);
+ item = BF_GLOBALS._scenePalette.addRotation(252, 254, 1);
+ item->setDelay(30);
+
+ remove();
+}
+
+/*--------------------------------------------------------------------------*/
+
+Scene342::Scene342(): PalettedScene() {
+ _field1A1A = 0;
+}
+
+void Scene342::synchronize(Serializer &s) {
+ PalettedScene::synchronize(s);
+
+ s.syncAsSint16LE(_field1A1A);
+}
+
+void Scene342::postInit(SceneObjectList *OwnerList) {
+ PalettedScene::postInit();
+ loadScene(340);
+ setZoomPercents(126, 70, 162, 100);
+
+ BF_GLOBALS._walkRegions.proc1(13);
+ BF_GLOBALS._walkRegions.proc1(15);
+
+ _field1A1A = 0;
+ _timer1.set(2, NULL);
+
+ _stripManager.addSpeaker(&_gameTextSpeaker);
+ _stripManager.addSpeaker(&_jakeJacketSpeaker);
+ _stripManager.addSpeaker(&_lyleHatSpeaker);
+
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+
+ _westExit.setDetails(Rect(0, 76, 19, 115), 340, -1, -1, -1, 1, NULL);
+ _swExit.setDetails(15, 340, -1, -1, -1, 1);
+ _northExit.setDetails(16, 340, -1, -1, -1, 1);
+
+ if (BF_GLOBALS._dayNumber < 5) {
+ _object3.postInit();
+ _object3.setVisage(340);
+ _object3.setStrip(4);
+ _object3.setPosition(Common::Point(259, 61));
+ }
+
+ if (BF_GLOBALS.getFlag(onDuty)) {
+ BF_GLOBALS._player.setVisage(1341);
+ BF_GLOBALS._player._moveDiff = Common::Point(5, 2);
+ } else {
+ BF_GLOBALS._player.setVisage(129);
+ BF_GLOBALS._player._moveDiff = Common::Point(5, 2);
+
+ if (BF_GLOBALS.getFlag(fWithLyle)) {
+ _lyle.postInit();
+ _lyle.setVisage(469);
+ _lyle.setObjectWrapper(new SceneObjectWrapper());
+ _lyle.animate(ANIM_MODE_1, NULL);
+ _lyle.hide();
+ }
+ }
+
+ switch (BF_GLOBALS._randomSource.getRandomNumber(2)) {
+ case 0:
+ _object2.setPosition(Common::Point(46, 59));
+ ADD_MOVER_NULL(_object2, 300, -10);
+ break;
+ case 1:
+ _object2.setPosition(Common::Point(311, 57));
+ ADD_MOVER_NULL(_object2, 140, -10);
+ break;
+ case 2:
+ _object2.setPosition(Common::Point(-5, 53));
+ ADD_MOVER_NULL(_object2, 170, -10);
+ break;
+ default:
+ break;
+ }
+
+ switch (BF_GLOBALS._sceneManager._previousScene) {
+ case 50:
+ case 60:
+ case 330:
+ if (BF_GLOBALS._sceneManager._previousScene != 60) {
+ _sound1.fadeSound(35);
+ BF_GLOBALS._sound1.fadeSound((BF_GLOBALS._bookmark < bStartOfGame) ||
+ (BF_GLOBALS._bookmark > bCalledToDomesticViolence) ? 10 : 19);
+ }
+
+ if (BF_GLOBALS.getFlag(fWithLyle)) {
+ BF_GLOBALS._walkRegions.proc1(19);
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 0;
+
+ setAction(&_sequenceManager1, this, 346, &_lyle, NULL);
+ BF_GLOBALS._player.setAction(&_sequenceManager2, NULL, 342, &BF_GLOBALS._player, NULL);
+ } else {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 0;
+ setAction(&_sequenceManager1, this, 342, &BF_GLOBALS._player, NULL);
+ }
+ break;
+ case 350:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 0;
+ setAction(&_sequenceManager1, this, 1342, &BF_GLOBALS._player, NULL);
+ break;
+ default:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 0;
+ setAction(&_sequenceManager1, this, 1343, &BF_GLOBALS._player, NULL);
+
+ if (BF_GLOBALS.getFlag(fWithLyle)) {
+ _lyle.setPosition(Common::Point(-21, 118));
+ _lyle.setStrip(5);
+ _lyle.setFrame(1);
+ _lyle.setPriority(75);
+ _lyle.setZoom(75);
+ _lyle.setAction(&_sequenceManager2, NULL, 347, &_lyle, NULL);
+ BF_GLOBALS._sceneItems.push_back(&_lyle);
+ }
+ break;
+ }
+
+ _item3.setDetails(7, 340, 3, 9, 12, 1);
+ _item2.setDetails(Rect(0, 0, SCREEN_WIDTH - 1, 39), 340, 2, 8, 11, 1, NULL);
+ _item1.setDetails(Rect(0, 0, SCREEN_WIDTH - 1, UI_INTERFACE_Y), 340, 1, 7, 10, 1, NULL);
+}
+
+void Scene342::remove() {
+ BF_GLOBALS._scenePalette.clearListeners();
+ PalettedScene::remove();
+}
+
+void Scene342::signal() {
+ switch (_sceneMode) {
+ case 1:
+ ADD_PLAYER_MOVER(254, 106);
+ BF_GLOBALS._sceneManager.changeScene(350);
+ break;
+ case 3:
+ BF_GLOBALS._sceneManager.changeScene(60);
+ break;
+ case 4:
+ BF_GLOBALS._sceneManager.changeScene(830);
+ break;
+ default:
+ BF_GLOBALS._player.enableControl();
+ break;
+ }
+}
+
+void Scene342::process(Event &event) {
+ // Check for gun being clicked on player
+ if ((event.eventType == EVENT_BUTTON_DOWN) && (BF_GLOBALS._events.getCursor() == INV_COLT45) &&
+ BF_GLOBALS._player.contains(event.mousePos)) {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 0;
+ SceneItem::display2(350, 26);
+
+ signal();
+ event.handled = true;
+ }
+
+ if (!event.handled) {
+ 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 (_westExit.contains(event.mousePos)) {
+ GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_W);
+ BF_GLOBALS._events.setCursor(surface);
+ } else if (_swExit.contains(event.mousePos)) {
+ GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_SW);
+ BF_GLOBALS._events.setCursor(surface);
+ } else if (_northExit.contains(event.mousePos)) {
+ GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_N);
+ 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 Scene342::dispatch() {
+ SceneExt::dispatch();
+ int idx = BF_GLOBALS._player.getRegionIndex();
+
+ if (idx == 20) {
+ BF_GLOBALS._player.updateZoom();
+ BF_GLOBALS._player.fixPriority(75);
+ }
+ if (idx == 26) {
+ BF_GLOBALS._player.updateZoom();
+ }
+ if (idx == 31) {
+ BF_GLOBALS._player.changeZoom(-1);
+ BF_GLOBALS._player.fixPriority(-1);
+ }
+
+ if (idx == 16) {
+ BF_GLOBALS._player.enableControl();
+ ADD_PLAYER_MOVER(254, 110);
+ }
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 350 - Marina, Outside Boat
+ *
+ *--------------------------------------------------------------------------*/
+
+bool Scene350::FireBox::startAction(CursorType action, Event &event) {
+ Scene350 *scene = (Scene350 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(350, 20);
+ return true;
+ case CURSOR_USE: {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 3;
+
+ Common::Point pt(76, 154);
+ PlayerMover *mover = new PlayerMover();
+ BF_GLOBALS._player.addMover(mover, &pt, scene);
+ return true;
+ }
+ default:
+ return NamedHotspot::startAction(action, event);
+ }
+}
+
+void Scene350::Yacht::synchronize(Serializer &s) {
+ NamedHotspot::synchronize(s);
+ s.syncAsSint16LE(_flag);
+}
+
+bool Scene350::Yacht::startAction(CursorType action, Event &event) {
+ Scene350 *scene = (Scene350 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_USE:
+ if ((BF_GLOBALS._dayNumber != 1) || !BF_GLOBALS.getFlag(onDuty) || (BF_GLOBALS._bookmark < bStartOfGame)) {
+ if ((BF_GLOBALS._dayNumber == 1) || (BF_GLOBALS._dayNumber == 4)) {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 1;
+ scene->setAction(&scene->_sequenceManager1, scene, 3512, &BF_GLOBALS._player, &scene->_yachtDoor, NULL);
+ return true;
+ }
+ } else {
+ _flag = true;
+ scene->_sceneMode = 1;
+ BF_GLOBALS._player.disableControl();
+ scene->setAction(&scene->_sequenceManager1, scene, BF_GLOBALS.getFlag(gunDrawn) ? 3504 : 3505,
+ &BF_GLOBALS._player, &scene->_yachtDoor, NULL);
+ return true;
+ }
+ break;
+ default:
+ break;
+ }
+
+ return NamedHotspot::startAction(action, event);
+}
+
+bool Scene350::SouthWestExit::startAction(CursorType action, Event &event) {
+ BF_GLOBALS._player.disableControl();
+
+ Scene350 *scene = (Scene350 *)BF_GLOBALS._sceneManager._scene;
+ scene->_sceneMode = 2;
+
+ if (BF_GLOBALS.getFlag(fBackupIn350))
+ scene->setAction(&scene->_sequenceManager1, scene, 3507, &BF_GLOBALS._player, &scene->_harrison, NULL);
+ else
+ scene->setAction(&scene->_sequenceManager1, scene, 3510, &BF_GLOBALS._player, NULL);
+ return true;
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene350::Hook::startAction(CursorType action, Event &event) {
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(350, 30);
+ return true;
+ case CURSOR_USE:
+ BF_INVENTORY.setObjectScene(INV_HOOK, 1);
+ if (!BF_GLOBALS.getFlag(hookPoints)) {
+ BF_GLOBALS.setFlag(hookPoints);
+ T2_GLOBALS._uiElements.addScore(30);
+ }
+ remove();
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene350::FireboxInset::startAction(CursorType action, Event &event) {
+ Scene350 *scene = (Scene350 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(350, BF_INVENTORY.getObjectScene(INV_HOOK) ? 29 : 28);
+ return true;
+ case CURSOR_USE:
+ scene->_fireBoxInset.remove();
+ return true;
+ case INV_HOOK:
+ BF_INVENTORY.setObjectScene(INV_HOOK, 350);
+
+ scene->_hook.postInit();
+ scene->_hook.setVisage(350);
+ scene->_hook.setStrip(5);
+ scene->_hook.fixPriority(201);
+ scene->_hook.setPosition(Common::Point(106, 146));
+ BF_GLOBALS._sceneItems.push_front(&scene->_hook);
+ return true;
+ default:
+ return FocusObject::startAction(action, event);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene350::Timer1::signal() {
+ PaletteRotation *rot;
+ rot = BF_GLOBALS._scenePalette.addRotation(233, 235, 1);
+ rot->setDelay(40);
+ rot = BF_GLOBALS._scenePalette.addRotation(236, 238, 1);
+ rot->setDelay(20);
+ rot = BF_GLOBALS._scenePalette.addRotation(239, 241, 1);
+ rot->setDelay(20);
+ rot = BF_GLOBALS._scenePalette.addRotation(242, 244, 1);
+ rot->setDelay(12);
+
+ remove();
+}
+
+/*--------------------------------------------------------------------------*/
+
+Scene350::Scene350(): SceneExt() {
+ _field1D44 = _field1D46 = 0;
+}
+
+void Scene350::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+ loadScene(350);
+ setZoomPercents(90, 80, 143, 100);
+ _sound1.fadeSound(35);
+ _timer1.set(2, NULL);
+
+ _stripManager.addSpeaker(&_gameTextSpeaker);
+ _stripManager.addSpeaker(&_jakeUniformSpeaker);
+
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.setVisage(BF_GLOBALS.getFlag(onDuty) ? 352 : 1358);
+ BF_GLOBALS._player.setFrame(1);
+ BF_GLOBALS._player.changeZoom(-1);
+ BF_GLOBALS._player.setPosition(Common::Point(99, 152));
+ BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ BF_GLOBALS._player._moveDiff = Common::Point(3, 1);
+
+ _yacht._flag = false;
+ _swExit.setDetails(Rect(0, 160, SCREEN_WIDTH, UI_INTERFACE_Y - 1), 350, -1, -1, -1, 1, NULL);
+
+ if ((BF_GLOBALS._dayNumber != 1) && (BF_GLOBALS._dayNumber != 4)) {
+ _yacht.setDetails(28, 350, 15, 16, 17, 1);
+ } else {
+ _yachtDoor.postInit();
+ _yachtDoor.setVisage(350);
+ _yachtDoor.setStrip(3);
+ _yachtDoor.setFrame(1);
+ _yachtDoor.fixPriority(72);
+ _yachtDoor.setPosition(Common::Point(40, 74));
+
+ _yachtBody.setup(350, 1, 1, 129, 142, 255);
+
+ if (BF_GLOBALS.getFlag(fBackupIn350)) {
+ _harrison.postInit();
+ _harrison.setVisage(1355);
+ _harrison.setObjectWrapper(new SceneObjectWrapper());
+ _harrison.animate(ANIM_MODE_1, NULL);
+ _harrison.changeZoom(-1);
+ _harrison.setDetails(350, 12, 13, 14, 1, NULL);
+ _harrison._moveDiff = Common::Point(2, 1);
+
+ _stripManager.addSpeaker(&_harrisonSpeaker);
+ }
+
+ if (BF_GLOBALS._bookmark < bStartOfGame) {
+ // Setup scene in debug mode
+ _yacht.setDetails(28, 350, 6, 18, 19, 1);
+ } else {
+ _yacht.setDetails(28, 350, 6, BF_GLOBALS.getFlag(bStartOfGame) ? 7 : 18, 8, 1);
+ }
+ }
+
+ _fireBox._sceneRegionId = 5;
+ BF_GLOBALS._sceneItems.push_back(&_fireBox);
+ _item4.setDetails(15, 350, 0, 1, 2, 1);
+ BF_GLOBALS._sceneItems.push_back(&_yacht);
+
+ _item3.setDetails(7, 350, 23, 24, 25, 1);
+ _item2.setDetails(Rect(0, 0, SCREEN_WIDTH - 1, 31), 350, 3, 4, 5, 1, NULL);
+ _item1.setDetails(Rect(0, 0, SCREEN_WIDTH - 1, UI_INTERFACE_Y), 350, 0, 1, 2, 1, NULL);
+
+ switch (BF_GLOBALS._sceneManager._previousScene) {
+ case 370:
+ BF_GLOBALS._player.enableControl();
+ T2_GLOBALS._uiElements._active = true;
+ T2_GLOBALS._uiElements.show();
+ // Deliberate fall-through
+ case 355:
+ if (BF_GLOBALS.getFlag(onDuty) && BF_GLOBALS.getFlag(gunDrawn))
+ BF_GLOBALS._player.setVisage(351);
+
+ BF_GLOBALS._player.setPosition(Common::Point(22, 91));
+ BF_GLOBALS._player.changeAngle(225);
+ break;
+ default:
+ BF_GLOBALS.clearFlag(gunDrawn);
+
+ if ((BF_GLOBALS._dayNumber == 1) && (BF_GLOBALS._bookmark < bCalledToDomesticViolence) &&
+ BF_GLOBALS.getFlag(fBackupIn350)) {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 0;
+ setAction(&_sequenceManager1, this, 3509, &_harrison, NULL);
+ BF_GLOBALS._player.setAction(&_sequenceManager2, NULL, 3508, &BF_GLOBALS._player, NULL);
+ } else {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 0;
+ setAction(&_sequenceManager1, this, 3508, &BF_GLOBALS._player, NULL);
+ }
+ break;
+ }
+}
+
+void Scene350::remove() {
+ BF_GLOBALS._scenePalette.clearListeners();
+ SceneExt::remove();
+}
+
+void Scene350::signal() {
+ switch (_sceneMode) {
+ case 1:
+ BF_GLOBALS._sceneManager.changeScene(355);
+ break;
+ case 2:
+ BF_GLOBALS._sceneManager.changeScene((BF_GLOBALS._dayNumber != 1) ||
+ (BF_GLOBALS._bookmark < bStartOfGame) || (BF_GLOBALS._bookmark >= bCalledToDomesticViolence) ? 342 : 340);
+ break;
+ case 3:
+ BF_GLOBALS._player.setStrip(8);
+
+ _fireBoxInset.postInit();
+ _fireBoxInset.setVisage(350);
+ _fireBoxInset.setStrip(4);
+ _fireBoxInset.fixPriority(200);
+ _fireBoxInset.setPosition(Common::Point(85, 166));
+ BF_GLOBALS._sceneItems.push_front(&_fireBoxInset);
+
+ if (BF_INVENTORY.getObjectScene(INV_HOOK) == 350) {
+ _hook.postInit();
+ _hook.setVisage(350);
+ _hook.setStrip(5);
+ _hook.fixPriority(201);
+ _hook.setPosition(Common::Point(106, 146));
+ BF_GLOBALS._sceneItems.push_front(&_hook);
+ }
+
+ BF_GLOBALS._player.enableControl();
+ _sound2.play(97);
+ break;
+ default:
+ if (BF_GLOBALS.getFlag(fBackupIn350)) {
+ _harrison.updateAngle(BF_GLOBALS._player._position);
+ BF_GLOBALS._walkRegions.proc1(19);
+ }
+
+ BF_GLOBALS._player.enableControl();
+ break;
+ }
+}
+
+void Scene350::process(Event &event) {
+ // Check for gun being clicked on player
+ if ((event.eventType == EVENT_BUTTON_DOWN) && (BF_GLOBALS._events.getCursor() == INV_COLT45) &&
+ BF_GLOBALS._player.contains(event.mousePos)) {
+ BF_GLOBALS._player.disableControl();
+
+ if (!BF_GLOBALS.getFlag(onDuty)) {
+ // Player not on duty
+ SceneItem::display2(350, 26);
+ signal();
+ } else if (BF_GLOBALS.getFlag(gunDrawn)) {
+ // Holster the gun
+ BF_GLOBALS.clearFlag(gunDrawn);
+ _sceneMode = 0;
+ setAction(&_sequenceManager1, this, 3501, &BF_GLOBALS._player, NULL);
+
+ if (BF_GLOBALS.getFlag(fBackupIn350))
+ _harrison.setAction(&_sequenceManager3, NULL, 3503, &_harrison, NULL);
+ } else {
+ // Drawn the gun
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 0;
+ setAction(&_sequenceManager1, this, 3500, &BF_GLOBALS._player, NULL);
+
+ if (BF_GLOBALS.getFlag(fBackupIn350))
+ _harrison.setAction(&_sequenceManager3, NULL, 3502, &_harrison, NULL);
+
+ BF_GLOBALS.setFlag(gunDrawn);
+ }
+
+ event.handled = true;
+ }
+
+ if (!event.handled) {
+ 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 (_swExit.contains(event.mousePos)) {
+ GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_SW);
+ 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 Scene350::checkGun() {
+ if ((BF_GLOBALS._dayNumber != 1) || (BF_GLOBALS._bookmark < bStartOfGame) ||
+ (BF_GLOBALS._bookmark >= bCalledToDomesticViolence) || BF_GLOBALS.getFlag(fRandomShot350)) {
+ SceneItem::display2(350, 27);
+ } else {
+ BF_GLOBALS.setFlag(fRandomShot350);
+ if (BF_GLOBALS.getFlag(fBackupIn350)) {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 0;
+ setAction(&_sequenceManager1, this, 3511, &BF_GLOBALS._player, NULL);
+ } else {
+ _stripManager.start(3502, this);
+ }
+ }
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 355 - Future Wave Exterior
+ *
+ *--------------------------------------------------------------------------*/
+
+void Scene355::Doorway::synchronize(Serializer &s) {
+ NamedObject::synchronize(s);
+ s.syncAsSint16LE(_v1);
+ s.syncAsSint16LE(_v2);
+ s.syncAsSint16LE(_v3);
+}
+
+bool Scene355::Doorway::startAction(CursorType action, Event &event) {
+ Scene355 *scene = (Scene355 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(355, 9);
+ return true;
+ case CURSOR_USE:
+ if (!scene->_modeFlag) {
+ scene->_sceneMode = 9984;
+ scene->signal();
+ } else {
+ scene->setMode(true, 9984);
+ }
+ return true;
+ case CURSOR_TALK:
+ if (BF_GLOBALS._dayNumber >= 5) {
+ switch (_v2) {
+ case 0:
+ ++_v2;
+ BF_GLOBALS._sound1.play(109);
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 0;
+
+ BF_GLOBALS.setFlag(fTookTrailerAmmo);
+ scene->_stripManager.start(3575, scene);
+ scene->_lyle._flag = 1;
+ return true;
+ case 1:
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 0;
+ scene->_stripManager.start(3573, scene);
+ return true;
+ default:
+ break;
+ }
+ } else if (!BF_GLOBALS.getFlag(greenTaken) && (BF_GLOBALS._dayNumber == 1)) {
+ scene->_sceneMode = 1357;
+ BF_GLOBALS._player.disableControl();
+ scene->_stripManager.start(3550, scene);
+ return true;
+ }
+ break;
+ case INV_WAVE_KEYS:
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 3562;
+ scene->setAction(&scene->_sequenceManager, scene, 3562, &BF_GLOBALS._player, NULL);
+ _v3 = !_v3 ? 1 : 0;
+ return true;
+ default:
+ break;
+ }
+
+ return NamedObject::startAction(action, event);
+}
+
+bool Scene355::Locker::startAction(CursorType action, Event &event) {
+ Scene355 *scene = (Scene355 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(355, 51);
+ return true;
+ case CURSOR_USE:
+ if (BF_GLOBALS._dayNumber < 5)
+ SceneItem::display2(355, 46);
+ else if (BF_INVENTORY.getObjectScene(INV_FLARE) != 355)
+ SceneItem::display2(355, 45);
+ else if (scene->_modeFlag)
+ scene->setMode(true, 9996);
+ else {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 9996;
+
+ if (scene->_nextSceneMode) {
+ scene->_nextSceneMode = 0;
+ scene->setAction(&scene->_sequenceManager, scene, 3555, &BF_GLOBALS._player, NULL);
+ } else {
+ scene->signal();
+ }
+ }
+ return true;
+ case INV_SCREWDRIVER:
+ if (scene->_modeFlag)
+ scene->setMode(true, 9996);
+ else {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 9996;
+ if (!scene->_nextSceneMode)
+ scene->signal();
+ else {
+ scene->_nextSceneMode = 0;
+ scene->setAction(&scene->_sequenceManager, scene, 3555, &BF_GLOBALS._player, NULL);
+ }
+ }
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene355::LockerInset::startAction(CursorType action, Event &event) {
+ Scene355 *scene = (Scene355 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ if (_frame == 1)
+ SceneItem::display2(355, 46);
+ else
+ SceneItem::display2(355, BF_GLOBALS._sceneObjects->contains(&scene->_object5) ? 26 : 47);
+ return true;
+ case CURSOR_USE:
+ if (_frame == 1) {
+ SceneItem::display2(355, 23);
+ return true;
+ }
+ return true;
+ case INV_SCREWDRIVER:
+ scene->_sound2.play(104);
+ BF_INVENTORY.setObjectScene(INV_SCREWDRIVER, 999);
+ setFrame(2);
+
+ scene->_object9.postInit();
+ scene->_object9.setVisage(378);
+ scene->_object9.setPosition(Common::Point(83, 100));
+ scene->_object9.fixPriority(100);
+
+ scene->_object5.postInit();
+ scene->_object5.setVisage(2356);
+ scene->_object5.setStrip(3);
+ scene->_object5.setPosition(Common::Point(67, 85));
+ scene->_object5.fixPriority(255);
+ BF_GLOBALS._sceneItems.push_front(&scene->_object5);
+
+ SceneItem::display2(355, 27);
+ scene->_locker.setFrame(2);
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene355::Object5::startAction(CursorType action, Event &event) {
+ Scene355 *scene = (Scene355 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(355, 30);
+ return true;
+ case CURSOR_USE:
+ BF_INVENTORY.setObjectScene(INV_FLARE, 1);
+ T2_GLOBALS._uiElements.addScore(30);
+
+ scene->_object9.remove();
+ remove();
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene355::Green::startAction(CursorType action, Event &event) {
+ Scene355 *scene = (Scene355 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(355, 34);
+ return true;
+ case CURSOR_USE:
+ if (scene->_modeFlag)
+ SceneItem::display2(355, 35);
+ else if (!_flag)
+ SceneItem::display2(355, 38);
+ else if (BF_INVENTORY.getObjectScene(INV_GRENADES) == 1)
+ SceneItem::display2(355, 49);
+ else {
+ BF_GLOBALS._player._regionBitList |= 0x10;
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 9985;
+ scene->setAction(&scene->_sequenceManager, scene, 3557, &BF_GLOBALS._player, this, NULL);
+ }
+ return true;
+ case CURSOR_TALK:
+ scene->_sceneMode = 0;
+ if (BF_INVENTORY.getObjectScene(INV_GRENADES) != 355) {
+ scene->_stripManager.start(3584, scene);
+ } else if (BF_INVENTORY.getObjectScene(INV_HANDCUFFS) != 1) {
+ return false;
+ } else {
+ switch (BF_GLOBALS._greenDay5TalkCtr++) {
+ case 0:
+ scene->_stripManager.start(3565, scene);
+ break;
+ case 1:
+ scene->_stripManager.start(3567, scene);
+ break;
+ default:
+ scene->_stripManager.start(3571, scene);
+ break;
+ }
+ }
+ return true;
+
+ default:
+ if ((action < BF_LAST_INVENT) && scene->_modeFlag) {
+ SceneItem::display2(355, 35);
+ return true;
+ }
+
+ switch (action) {
+ case INV_COLT45:
+ if (BF_INVENTORY.getObjectScene(INV_HANDCUFFS) == 355)
+ SceneItem::display2(355, 39);
+ else if (!BF_GLOBALS.getFlag(fGunLoaded))
+ SceneItem::display2(1, 1);
+ else if (!BF_GLOBALS.getFlag(gunDrawn))
+ SceneItem::display2(1, 0);
+ else {
+ if (BF_GLOBALS._sceneObjects->contains(&scene->_lyle))
+ scene->_lyle.setAction(NULL);
+
+ BF_GLOBALS._player.disableControl();
+ scene->_green.setStrip(1);
+ scene->_green.setFrame(1);
+ scene->_sceneMode = 9981;
+ scene->signal();
+ }
+ return true;
+ case INV_HANDCUFFS:
+ if (BF_GLOBALS._greenDay5TalkCtr <= 1)
+ SceneItem::display2(355, 38);
+ else {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 9979;
+ scene->setAction(&scene->_sequenceManager, scene, 4551, &BF_GLOBALS._player, this, NULL);
+ BF_INVENTORY.setObjectScene(INV_HANDCUFFS, 355);
+ T2_GLOBALS._uiElements.addScore(50);
+ _flag = 1;
+ BF_GLOBALS._bookmark = bInvestigateBoat;
+ }
+ return true;
+ default:
+ break;
+ }
+
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene355::Lyle::startAction(CursorType action, Event &event) {
+ Scene355 *scene = (Scene355 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_TALK:
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 0;
+
+ if (BF_GLOBALS._sceneObjects->contains(&scene->_green)) {
+ scene->_stripManager.start((BF_INVENTORY.getObjectScene(INV_HANDCUFFS) == 355) ? 3578 : 3577, scene);
+ } else {
+ switch (_flag) {
+ case 0:
+ scene->_stripManager.start(3574, scene);
+ break;
+ case 1:
+ scene->_stripManager.start(3576, scene);
+ break;
+ case 2:
+ scene->_stripManager.start(3563, scene);
+ break;
+ default:
+ break;
+ }
+ }
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene355::Object8::startAction(CursorType action, Event &event) {
+ Scene355 *scene = (Scene355 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(355, 0);
+ return true;
+ case CURSOR_USE:
+ if (BF_GLOBALS.getFlag(fBackupIn350)) {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 9999;
+ scene->_stripManager.start(3559, scene);
+ return true;
+ } else if (BF_GLOBALS._dayNumber < 5) {
+ SceneItem::display2(355, 52);
+ return true;
+ }
+ break;
+ case INV_COLT45:
+ if (BF_GLOBALS.getFlag(fBackupIn350)) {
+ scene->_sceneMode = 9997;
+ scene->_stripManager.start(3561, scene);
+ } else {
+ SceneItem::display2(1, 4);
+ }
+ return true;
+ default:
+ break;
+ }
+
+ return NamedObject::startAction(action, event);
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene355::Item1::startAction(CursorType action, Event &event) {
+ Scene355 *scene = (Scene355 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(355, 28);
+ return true;
+ case CURSOR_USE:
+ SceneItem::display2(355, 37);
+ return true;
+ case INV_RENTAL_KEYS:
+ if (scene->_modeFlag) {
+ scene->_sceneMode = 9980;
+ scene->signal();
+ } else if (!scene->_nextSceneMode)
+ SceneItem::display2(355, 36);
+ else
+ scene->setMode(false, 9980);
+ return true;
+ default:
+ return SceneHotspot::startAction(action, event);
+ }
+}
+
+bool Scene355::Item2::startAction(CursorType action, Event &event) {
+ Scene355 *scene = (Scene355 *)BF_GLOBALS._sceneManager._scene;
+
+ if (BF_GLOBALS.getFlag(fBackupIn350)) {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 9999;
+ scene->_stripManager.start(3559, scene);
+ } else {
+ if (scene->_action) {
+ scene->_sceneMode = 0;
+ scene->_action->remove();
+ }
+
+ BF_GLOBALS._sceneManager.changeScene(350);
+ }
+ return true;
+}
+
+bool Scene355::Item3::startAction(CursorType action, Event &event) {
+ Scene355 *scene = (Scene355 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(355, 33);
+ return true;
+ case CURSOR_USE:
+ if (BF_GLOBALS._dayNumber < 5)
+ SceneItem::display2(355, 21);
+ else if (scene->_modeFlag)
+ scene->setMode(true, 9987);
+ else {
+ scene->_sceneMode = 9987;
+ scene->signal();
+ }
+ return true;
+ case INV_FLARE:
+ scene->_sound2.play(105);
+ _state = 3554;
+ break;
+ case INV_RAGS:
+ _state = 3559;
+ break;
+ case INV_JAR:
+ _state = 3558;
+ break;
+ default:
+ return SceneHotspotExt::startAction(action, event);
+ }
+
+ // Handling for inventory objects
+ BF_INVENTORY.setObjectScene(action, 0);
+ if (scene->_modeFlag)
+ scene->setMode(true, 9986);
+ else {
+ scene->_sceneMode = 9986;
+ scene->signal();
+ }
+
+ scene->_nextSceneMode = 0;
+ return true;
+}
+
+bool Scene355::Item4::startAction(CursorType action, Event &event) {
+ Scene355 *scene = (Scene355 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(355, 31);
+ return true;
+ case CURSOR_USE:
+ if ((BF_GLOBALS._dayNumber < 5) || (BF_INVENTORY.getObjectScene(INV_GRENADES) != 355))
+ SceneItem::display2(355, 21);
+ else if (scene->_modeFlag)
+ scene->setMode(true, 9987);
+ else {
+ scene->_sceneMode = 9987;
+ scene->signal();
+ }
+ return true;
+ default:
+ return SceneHotspot::startAction(action, event);
+ }
+}
+
+
+bool Scene355::Pouch::startAction(CursorType action, Event &event) {
+ Scene355 *scene = (Scene355 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ if (BF_INVENTORY.getObjectScene(INV_SCREWDRIVER) == 355) {
+ SceneItem::display2(355, 29);
+ return true;
+ }
+ break;
+ case CURSOR_USE:
+ if (BF_INVENTORY.getObjectScene(INV_SCREWDRIVER) == 355) {
+ if (scene->_modeFlag) {
+ scene->_sceneMode = 9992;
+ scene->signal();
+ } else if (!scene->_nextSceneMode) {
+ scene->setMode(false, 9992);
+ } else {
+ scene->_sceneMode = 9977;
+ scene->_nextSceneMode = 0;
+ scene->setAction(&scene->_sequenceManager, scene, 3555, &BF_GLOBALS._player, NULL);
+ }
+ } else {
+ SceneItem::display2(355, 45);
+ }
+ return true;
+ case INV_RENTAL_KEYS:
+ if (scene->_modeFlag) {
+ scene->_sceneMode = 9980;
+ scene->signal();
+ } else if (!scene->_nextSceneMode) {
+ scene->setMode(false, 9980);
+ } else {
+ SceneItem::display2(355, 36);
+ }
+ return true;
+ default:
+ break;
+ }
+
+ return NamedHotspot::startAction(action, event);
+}
+
+bool Scene355::Item11::startAction(CursorType action, Event &event) {
+ Scene355 *scene = (Scene355 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_WALK:
+ return (BF_GLOBALS._bookmark == bStartOfGame) || (BF_GLOBALS._bookmark == bCalledToDomesticViolence) ||
+ (BF_GLOBALS._bookmark == bArrestedGreen);
+ case CURSOR_LOOK:
+ SceneItem::display2(355, 7);
+ return true;
+ case CURSOR_USE:
+ SceneItem::display2(355, 8);
+ return true;
+ case CURSOR_TALK:
+ if (BF_GLOBALS._dayNumber == 5) {
+ switch (scene->_doorway._v2) {
+ case 0:
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 0;
+ BF_GLOBALS.setFlag(fTookTrailerAmmo);
+ scene->_stripManager.start(3575, scene);
+ scene->_lyle._flag = 1;
+ scene->_doorway._v2 = 1;
+ break;
+ case 1:
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 0;
+ scene->_stripManager.start(3573, scene);
+ break;
+ default:
+ return false;
+ }
+ } else {
+ if (!BF_GLOBALS.getFlag(onDuty))
+ return false;
+ scene->_sceneMode = 1357;
+ BF_GLOBALS._player.disableControl();
+ scene->_stripManager.start(3550, scene);
+ }
+ return true;
+ case INV_COLT45:
+ if (!BF_GLOBALS.getFlag(fBackupIn350) || !BF_GLOBALS.getFlag(gunDrawn) || !BF_GLOBALS.getFlag(fGunLoaded))
+ SceneItem::display2(1, 4);
+ else {
+ scene->_sceneMode = 9997;
+ BF_GLOBALS._player.disableControl();
+ scene->_stripManager.start(3561, scene);
+ }
+ return true;
+ default:
+ break;
+ }
+
+ return NamedHotspot::startAction(action, event);
+}
+
+bool Scene355::RentalExit::startAction(CursorType action, Event &event) {
+ Scene355 *scene = (Scene355 *)BF_GLOBALS._sceneManager._scene;
+
+ if (!BF_GLOBALS.getFlag(gunDrawn)) {
+ if (scene->_modeFlag)
+ scene->setMode(true, 0);
+ else if (!scene->_nextSceneMode)
+ scene->setMode(false, 0);
+ else {
+ scene->_nextSceneMode = 0;
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 9991;
+ scene->setAction(&scene->_sequenceManager, scene, 3555, &BF_GLOBALS._player, NULL);
+ }
+ }
+
+ return true;
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene355::Action1::signal() {
+ Scene355 *scene = (Scene355 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ setDelay(3600 * (BF_GLOBALS._randomSource.getRandomNumber(1) + 1));
+ break;
+ case 1:
+ _actionIndex = 0;
+ scene->_lyle.animate(ANIM_MODE_8, 1, this);
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene355::Action2::signal() {
+ Scene355 *scene = (Scene355 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ setDelay(10);
+ break;
+ case 1:
+ scene->_stripManager.start((BF_INVENTORY.getObjectScene(INV_HANDCUFFS) == 1) ? 3566 : 3568, this);
+ break;
+ case 2:
+ scene->_sceneMode = 9979;
+ scene->signal();
+ remove();
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+Scene355::Scene355(): PalettedScene() {
+ _nextSceneMode = 0;
+ _modeFlag = false;
+}
+
+void Scene355::synchronize(Serializer &s) {
+ SceneExt::synchronize(s);
+ s.syncAsSint16LE(_nextSceneMode);
+ s.syncAsSint16LE(_modeFlag);
+}
+
+void Scene355::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+ if (BF_GLOBALS._dayNumber == 0)
+ BF_GLOBALS._dayNumber = 5;
+
+ if (BF_GLOBALS._dayNumber == 5) {
+ loadScene(356);
+ BF_GLOBALS._player._regionBitList &= ~0x10;
+ } else {
+ loadScene(355);
+ }
+
+ _sound1.fadeSound(35);
+ _stripManager.addSpeaker(&_gameTextSpeaker);
+ _stripManager.addSpeaker(&_jakeUniformSpeaker);
+ _stripManager.addSpeaker(&_jakeJacketSpeaker);
+ _stripManager.addSpeaker(&_lyleHatSpeaker);
+ _stripManager.addSpeaker(&_harrisonSpeaker);
+ _stripManager.addSpeaker(&_greenSpeaker);
+
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
+ if (!BF_GLOBALS.getFlag(onDuty)) {
+ BF_GLOBALS._player.setVisage(368);
+ BF_GLOBALS._player.setStrip(3);
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ } else if (BF_GLOBALS.getFlag(gunDrawn)) {
+ BF_GLOBALS._player.setVisage(356);
+ BF_GLOBALS._player.setFrame(BF_GLOBALS._player.getFrameCount());
+ } else {
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ BF_GLOBALS._player.setVisage(356);
+ BF_GLOBALS._player.setStrip(7);
+ }
+
+ if (BF_GLOBALS.getFlag(greenTaken)) {
+ BF_GLOBALS._player.setVisage(BF_GLOBALS.getFlag(onDuty) ? 361 : 368);
+ BF_GLOBALS._player.setStrip(3);
+ BF_GLOBALS._player.setPosition(Common::Point(244, 140));
+ } else {
+ BF_GLOBALS._player.setPosition(Common::Point(244, 132));
+ }
+
+ BF_GLOBALS._player._moveDiff = Common::Point(6, 4);
+ BF_GLOBALS._player.enableControl();
+ BF_GLOBALS._player._canWalk = false;
+
+ _item4._sceneRegionId = 17;
+ BF_GLOBALS._sceneItems.push_back(&_item4);
+
+ _locker.postInit();
+ _locker.setVisage(2356);
+ _locker.setPosition(Common::Point(88, 99));
+
+ if (BF_INVENTORY.getObjectScene(INV_SCREWDRIVER) == 999) {
+ _locker.setFrame(2);
+
+ if (BF_INVENTORY.getObjectScene(INV_FLARE) == 355) {
+ _object9.postInit();
+ _object9.setVisage(378);
+ _object9.setPosition(Common::Point(83, 100));
+ _object9.fixPriority(100);
+ }
+ }
+ BF_GLOBALS._sceneItems.push_back(&_locker);
+
+ _doorway.postInit();
+ _doorway.setVisage(355);
+ _doorway.setPosition(Common::Point(193, 105));
+ _doorway.fixPriority(18);
+ _doorway._v1 = 0;
+ _doorway._v3 = 0;
+ BF_GLOBALS._sceneItems.push_back(&_doorway);
+
+ switch (BF_GLOBALS._dayNumber) {
+ case 1:
+ if (!BF_GLOBALS.getFlag(onDuty))
+ _doorway._v3 = 1;
+ else if (BF_INVENTORY.getObjectScene(INV_GREENS_GUN) == 320)
+ _doorway._v3 = 1;
+ break;
+ case 2:
+ case 3:
+ case 4:
+ _doorway._v3 = 1;
+ break;
+ default:
+ break;
+ }
+
+ if (BF_GLOBALS._dayNumber == 5)
+ _doorway._v2 = BF_GLOBALS.getFlag(fTookTrailerAmmo) ? 1 : 0;
+
+ _object8.postInit();
+ _object8.setVisage(355);
+ if (BF_GLOBALS._dayNumber == 5) {
+ _object8.setStrip(3);
+ _object8.setPosition(Common::Point(103, 148));
+ _object8.hide();
+ } else {
+ _object8.setStrip(2);
+ _object8.setPosition(Common::Point(142, 151));
+ _object8.fixPriority(247);
+ }
+
+ switch (BF_GLOBALS._dayNumber) {
+ case 2:
+ case 3:
+ case 4:
+ break;
+ case 5:
+ BF_GLOBALS._player.enableControl();
+ _modeFlag = true;
+ BF_GLOBALS._player.setPosition(Common::Point(133, 173));
+ BF_GLOBALS._player.fixPriority(249);
+ BF_GLOBALS._player.setStrip(7);
+
+ if (BF_GLOBALS._bookmark == bDoneAtLyles)
+ BF_GLOBALS._bookmark = bEndDayFour;
+
+ _pouch.setDetails(Rect(22, 136, 46, 146), 355, 43, -1, -1, 1, NULL);
+ _nextSceneMode = 0;
+
+ if (!BF_GLOBALS.getFlag(fLyleOnIsland)) {
+ _lyle.postInit();
+ _lyle.setVisage(847);
+ _lyle.setPosition(Common::Point(296, 97));
+ _lyle.setStrip(1);
+ _lyle.setAction(&_action1);
+ _lyle._flag = BF_GLOBALS.getFlag(fTookTrailerAmmo) ? 1 : 0;
+ _lyle.setDetails(355, 40, 42, 41, 1, NULL);
+ }
+
+ if ((BF_INVENTORY.getObjectScene(INV_RAGS) == 0) && (BF_INVENTORY.getObjectScene(INV_JAR) == 0) &&
+ (BF_INVENTORY.getObjectScene(INV_FLARE) == 0)) {
+ BF_GLOBALS._sound1.changeSound(103);
+
+ _object9.postInit();
+ _object9.setVisage(2357);
+ _object9.setStrip(2);
+ _object9.setPosition(Common::Point(231, 19));
+ _object9.animate(ANIM_MODE_2);
+
+ _object11.postInit();
+ _object11.setVisage(2357);
+ _object11.setStrip(6);
+ _object11.setPosition(Common::Point(183, 39));
+ _object11.animate(ANIM_MODE_2);
+
+ _doorway.setPosition(Common::Point(146, 107));
+ _doorway._v3 = 0;
+ _doorway._v2 = 2;
+ _lyle._flag = 2;
+
+ _green.postInit();
+ BF_GLOBALS._sceneItems.push_back(&_green);
+
+ if (BF_INVENTORY.getObjectScene(INV_HANDCUFFS) == 1) {
+ _green.setVisage(376);
+ _green.setStrip(1);
+ _green.setPosition(Common::Point(193, 88));
+ _green._flag = 0;
+ } else {
+ _green._flag = 1;
+
+ if (BF_INVENTORY.getObjectScene(INV_GRENADES) == 1) {
+ _green.setVisage(373);
+ _green.setStrip(5);
+ _green.setPosition(Common::Point(238, 142));
+ } else {
+ _green.setVisage(375);
+ _green.setStrip(1);
+ _green.setFrame(_green.getFrameCount());
+ _green.setPosition(Common::Point(193, 147));
+ }
+ }
+
+ if ((BF_GLOBALS._bookmark == bFinishedWGreen) && BF_GLOBALS._sceneObjects->contains(&_lyle) &&
+ !BF_GLOBALS.getFlag(iWasAmbushed)) {
+ BF_GLOBALS.setFlag(iWasAmbushed);
+ BF_GLOBALS._player.disableControl();
+
+ _sceneMode = 0;
+ _stripManager.start(3582, this);
+ }
+ }
+ break;
+ default:
+ if (!BF_GLOBALS.getFlag(greenTaken)) {
+ _harrison.postInit();
+ _harrison.setPosition(Common::Point(152, 131));
+ _harrison.animate(ANIM_MODE_1, NULL);
+ _harrison.setObjectWrapper(new SceneObjectWrapper());
+
+ if (BF_GLOBALS.getFlag(gunDrawn)) {
+ _harrison.setVisage(357);
+ _harrison.setStrip(2);
+ } else {
+ _harrison.setVisage(1363);
+ _harrison.setStrip(3);
+ }
+
+ _harrison.hide();
+ if (BF_GLOBALS.getFlag(fBackupIn350)) {
+ _harrison.show();
+ BF_GLOBALS._sceneItems.push_back(&_harrison);
+ }
+
+ _sceneMode = 1355;
+ setAction(&_sequenceManager, this, 1355, NULL);
+ }
+ break;
+ }
+
+ _item3._sceneRegionId = 18;
+ _harrison.setDetails(355, 18, 20, 19, 1, NULL);
+ _item6.setDetails(10, 355, 2, -1, 14, 1);
+ _item7.setDetails(11, 355, 3, -1, 15, 1);
+ _item8.setDetails(12, 355, 4, -1, 8, 1);
+ _item9.setDetails(13, 355, 5, -1, -1, 1);
+ _item10.setDetails(15, 355, 10, -1, 11, 1);
+ _item1._sceneRegionId = 22;
+ BF_GLOBALS._sceneItems.addItems(&_item3, &_item6, &_item7, &_item8, &_item9, &_item10, &_item1, NULL);
+
+ if (BF_GLOBALS._dayNumber == 5) {
+ _rentalExit.setBounds(Rect(115, 101, 186, 154));
+ BF_GLOBALS._sceneItems.push_front(&_rentalExit);
+ } else {
+ _item2.setDetails(Rect(273, 53, 320, 101), 355, -1, -1, -1, 2, NULL);
+ }
+
+ _item11.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT));
+ BF_GLOBALS._sceneItems.push_back(&_item11);
+}
+
+void Scene355::signal() {
+ static uint32 black = 0;
+
+ switch (_sceneMode) {
+ case 12:
+ SceneItem::display2(355, 22);
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 1355:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 9999;
+ _stripManager.start(BF_GLOBALS.getFlag(fBackupIn350) ? 3559 : 3554, this);
+ break;
+ case 1356:
+ switch (_doorway._v1) {
+ case 0:
+ ++_doorway._v1;
+ _sceneMode = 9999;
+ _stripManager.start(3550, this);
+ break;
+ case 1:
+ _sceneMode = 9999;
+ _stripManager.start(3551, this);
+ ++_doorway._v1;
+ break;
+ default:
+ break;
+ }
+ break;
+ case 2357:
+ _harrison.animate(ANIM_MODE_1, NULL);
+ // Deliberate fall-through
+ case 1357:
+ BF_GLOBALS._player.enableControl();
+ if (BF_GLOBALS.getFlag(gunDrawn))
+ BF_GLOBALS._player._canWalk = false;
+ break;
+ case 1359:
+ BF_GLOBALS._sceneManager.changeScene(360);
+ break;
+ case 2358:
+ if (!BF_GLOBALS.getFlag(fBackupIn350))
+ BF_GLOBALS._sceneManager.changeScene(360);
+ else {
+ _sceneMode = 1359;
+ setAction(&_sequenceManager, this, BF_GLOBALS.getFlag(gunDrawn) ? 1359 : 3550, &_harrison, NULL);
+ }
+ break;
+ case 3553:
+ BF_GLOBALS._player.enableControl();
+ BF_GLOBALS._player._canWalk = false;
+ break;
+ case 3554:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 9988;
+ setAction(&_sequenceManager, this, 3554, &BF_GLOBALS._player, NULL);
+ break;
+ case 3556:
+ if (BF_GLOBALS._player._angle == 45) {
+ _sceneMode = 4554;
+ signal();
+ } else {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 4554;
+ setAction(&_sequenceManager, this, 3556, &BF_GLOBALS._player, NULL);
+ }
+ break;
+ case 3558:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 9988;
+ setAction(&_sequenceManager, this, 3558, &BF_GLOBALS._player, NULL);
+ break;
+ case 3559:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 9988;
+ setAction(&_sequenceManager, this, 3559, &BF_GLOBALS._player, NULL);
+ break;
+ case 3561:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 1357;
+ setAction(&_sequenceManager, this, 3561, &BF_GLOBALS._player, NULL);
+ break;
+ case 3562:
+ if (!BF_GLOBALS.getFlag(unlockBoat)) {
+ BF_GLOBALS.setFlag(unlockBoat);
+ T2_GLOBALS._uiElements.addScore(10);
+ }
+
+ SceneItem::display2(355, !_doorway._v3 ? 24 : 25);
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 4550:
+ T2_GLOBALS._uiElements.addScore(50);
+ _object10.remove();
+ BF_GLOBALS._sound1.play(90);
+ BF_GLOBALS._player._regionBitList |= 0x10;
+
+ _doorway._v3 = 0;
+ _doorway._v2 = 2;
+ _lyle._flag = 2;
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 4552:
+ BF_GLOBALS._sceneManager.changeScene(666);
+ break;
+ case 4554:
+ BF_GLOBALS._player.disableControl();
+ switch (_nextSceneMode) {
+ case 9980:
+ _sceneMode = 9980;
+ break;
+ case 9992:
+ _sceneMode = 9992;
+ break;
+ default:
+ _sceneMode = 0;
+ break;
+ }
+ setAction(&_sequenceManager, this, 4554, &BF_GLOBALS._player, NULL);
+ _nextSceneMode = 0;
+ _modeFlag = true;
+ break;
+ case 9977:
+ setMode(false, 9992);
+ break;
+ case 9979:
+ _sceneMode = 0;
+ signal();
+ break;
+ case 9980:
+ _sceneMode = 9982;
+ ADD_MOVER(BF_GLOBALS._player, 64, 173);
+ break;
+ case 9981:
+ _sceneMode = 9994;
+ _green.animate(ANIM_MODE_5, NULL);
+ addFader((const byte *)&black, 10, this);
+ break;
+ case 9982:
+ _sceneMode = 9983;
+ if (BF_INVENTORY.getObjectScene(INV_HANDCUFFS) == 355) {
+ if (BF_GLOBALS.getFlag(fLyleOnIsland)) {
+ BF_GLOBALS._player.updateAngle(_green._position);
+ _stripManager.start(3581, this);
+ } else {
+ BF_GLOBALS._player.updateAngle(_lyle._position);
+ _stripManager.start(3570, this);
+ }
+ } else {
+ if (BF_GLOBALS.getFlag(fLyleOnIsland)) {
+ if (BF_GLOBALS._sceneObjects->contains(&_green)) {
+ BF_INVENTORY.setObjectScene(INV_GRENADES, 860);
+ _stripManager.start(3583, this);
+ } else {
+ signal();
+ }
+ } else {
+ BF_GLOBALS._player.updateAngle(_lyle._position);
+ _stripManager.start(BF_GLOBALS.getFlag(fTookTrailerAmmo) ? 3579 : 3580, this);
+ }
+ }
+ break;
+ case 9983:
+ BF_GLOBALS._sceneManager.changeScene(860);
+ break;
+ case 9984:
+ if (BF_GLOBALS._dayNumber == 5) {
+ _sceneMode = 0;
+ switch (_doorway._v2) {
+ case 0:
+ BF_GLOBALS._sound1.play(109);
+ BF_GLOBALS.setFlag(fTookTrailerAmmo);
+ _stripManager.start(3575, this);
+ _lyle._flag = 1;
+ ++_doorway._v2;
+ break;
+ case 1:
+ _stripManager.start(3573, this);
+ break;
+ default:
+ SceneItem::display2(355, 21);
+ BF_GLOBALS._player.enableControl();
+ break;
+ }
+ } else if (BF_GLOBALS.getFlag(greenTaken) || (BF_GLOBALS._dayNumber > 1)) {
+ if (_doorway._v3) {
+ SceneItem::display2(355, 23);
+ _sceneMode = 0;
+ signal();
+ } else {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 2358;
+ setAction(&_sequenceManager, this, 3551, &BF_GLOBALS._player, &_doorway, NULL);
+ }
+ } else if (BF_GLOBALS.getFlag(gunDrawn)) {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 1356;
+ setAction(&_sequenceManager, this, 1358, &BF_GLOBALS._player, NULL);
+ } else {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 1356;
+ setAction(&_sequenceManager, this, 1356, &BF_GLOBALS._player, NULL);
+ }
+ break;
+ case 9985:
+ _sceneMode = 0;
+ _stripManager.start(3569, this);
+ BF_INVENTORY.setObjectScene(INV_GRENADES, 1);
+ T2_GLOBALS._uiElements.addScore(50);
+ BF_GLOBALS._player._regionBitList |= 0x10;
+ break;
+ case 9986:
+ if (_nextSceneMode) {
+ _sceneMode = _item3._state;
+ signal();
+ } else {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = _item3._state;
+ setAction(&_sequenceManager, this, 3553, &BF_GLOBALS._player, NULL);
+ }
+ break;
+ case 9987:
+ if (_nextSceneMode) {
+ _nextSceneMode = 0;
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 3555;
+ setAction(&_sequenceManager, this, 3555, &BF_GLOBALS._player, NULL);
+ } else {
+ _nextSceneMode = 1;
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 3553;
+ setAction(&_sequenceManager, this, 3553, &BF_GLOBALS._player, NULL);
+ }
+ break;
+ case 9988:
+ T2_GLOBALS._uiElements.addScore(30);
+ if ((BF_INVENTORY.getObjectScene(INV_RAGS) == 0) && (BF_INVENTORY.getObjectScene(INV_JAR) == 0) &&
+ (BF_INVENTORY.getObjectScene(INV_FLARE) == 0)) {
+ _green.postInit();
+ _green.setVisage(373);
+ _green.setPosition(Common::Point(-10, -10));
+ _green._flag = 0;
+
+ _object9.postInit();
+ _object9.setPosition(Common::Point(-10, -10));
+ _object10.postInit();
+ _object10.setPosition(Common::Point(-10, -10));
+ _object11.postInit();
+ _object11.setPosition(Common::Point(-10, -10));
+
+ BF_GLOBALS._sceneItems.push_front(&_green);
+ BF_GLOBALS.setFlag(fTookTrailerAmmo);
+ BF_GLOBALS._sound1.fade(0, 5, 60, true, NULL);
+ _sceneMode = 4550;
+
+ setAction(&_sequenceManager, this, 4550, &_doorway, &_green, &_object9, &_object10, &_object11, NULL);
+ } else {
+ BF_GLOBALS._player.enableControl();
+ }
+ break;
+ case 9989:
+ _lockerInset.postInit();
+ _lockerInset.setVisage(2356);
+ _lockerInset.setStrip(2);
+ BF_GLOBALS._sceneItems.push_front(&_lockerInset);
+
+ if (BF_INVENTORY.getObjectScene(INV_SCREWDRIVER) == 999) {
+ _lockerInset.setFrame(2);
+ if (BF_INVENTORY.getObjectScene(INV_FLARE) == 355) {
+ _object5.postInit();
+ _object5.setVisage(2356);
+ _object5.setStrip(3);
+ _object5.setPosition(Common::Point(67, 85));
+ _object5.fixPriority(255);
+ BF_GLOBALS._sceneItems.push_front(&_object5);
+ }
+ } else {
+ _lockerInset.setFrame(1);
+ }
+
+ _lockerInset.setPosition(Common::Point(82, 115));
+ _lockerInset.fixPriority(254);
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 9990:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 3556;
+ ADD_PLAYER_MOVER(145, 145);
+ break;
+ case 9991:
+ setMode(false, 0);
+ break;
+ case 9992:
+ _sceneMode = 9993;
+ ADD_PLAYER_MOVER(59, 174);
+ break;
+ case 9993:
+ BF_INVENTORY.setObjectScene(INV_SCREWDRIVER, 1);
+ SceneItem::display2(355, 29);
+ T2_GLOBALS._uiElements.addScore(30);
+ _sceneMode = 0;
+ signal();
+ break;
+ case 9996: {
+ _sceneMode = 9989;
+ ADD_PLAYER_MOVER(116, 146);
+ break;
+ }
+ case 9997:
+ _sceneMode = 9999;
+ _doorway._v1 = 2;
+ _stripManager.start(3562, this);
+ break;
+ case 9998:
+ error("Talkdoor state");
+ break;
+ case 9999:
+ if (_doorway._v1 != 2) {
+ BF_GLOBALS._player.enableControl();
+ BF_GLOBALS._player._canWalk = false;
+ } else if (BF_GLOBALS.getFlag(gunDrawn)) {
+ _sceneMode = 2358;
+ setAction(&_sequenceManager, this, 2359, &BF_GLOBALS._player, &_doorway, &_harrison, NULL);
+ } else {
+ _sceneMode = 2358;
+ setAction(&_sequenceManager, this, 2358, &BF_GLOBALS._player, &_doorway, &_harrison, NULL);
+ }
+ break;
+ case 0:
+ case 3555:
+ default:
+ BF_GLOBALS._player.enableControl();
+ break;
+ }
+}
+
+void Scene355::process(Event &event) {
+ if (BF_GLOBALS._dayNumber != 5) {
+ // Handling for earlier days
+ if (BF_GLOBALS._player._enabled && !_focusObject && (event.mousePos.y < (UI_INTERFACE_Y - 1))) {
+ // Check if the cursor is on an exit
+ if (_rentalExit.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);
+ }
+ }
+
+ if ((_sceneMode != 2357) && (_sceneMode != 1357) && !BF_GLOBALS.getFlag(greenTaken) &&
+ (event.eventType == EVENT_BUTTON_DOWN) && (BF_GLOBALS._events.getCursor() == INV_COLT45)) {
+ if (BF_GLOBALS._player.contains(event.mousePos)) {
+ BF_GLOBALS._player.disableControl();
+ if (BF_GLOBALS.getFlag(gunDrawn)) {
+ BF_GLOBALS.clearFlag(gunDrawn);
+ _sceneMode = 2357;
+ setAction(&_sequenceManager, this, 2357, &BF_GLOBALS._player, &_harrison, NULL);
+ } else {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 1357;
+ setAction(&_sequenceManager, this, 1357, &BF_GLOBALS._player, &_harrison, NULL);
+ BF_GLOBALS.setFlag(gunDrawn);
+ }
+ } else {
+ _item11.startAction(INV_COLT45, event);
+ }
+ event.handled = true;
+ }
+ } else {
+ // Day 5 handling
+ if (BF_GLOBALS._player._enabled && !_focusObject && (event.mousePos.y < (UI_INTERFACE_Y - 1))) {
+ // Check if the cursor is on the exit to the rental boat
+ if (_rentalExit.contains(event.mousePos)) {
+ GfxSurface surface = _cursorVisage.getFrame(!_modeFlag ? EXITFRAME_SW : EXITFRAME_NE);
+ 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);
+ }
+ }
+
+ // Special handling of actions
+ if (event.eventType == EVENT_BUTTON_DOWN) {
+ switch (BF_GLOBALS._events.getCursor()) {
+ case INV_COLT45:
+ if (BF_GLOBALS._player.contains(event.mousePos)) {
+ BF_GLOBALS._player.addMover(NULL);
+
+ if (BF_GLOBALS.getFlag(gunDrawn)) {
+ BF_GLOBALS.clearFlag(gunDrawn);
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 1357;
+ setAction(&_sequenceManager, this, 3560, &BF_GLOBALS._player, NULL);
+ } else {
+ BF_GLOBALS.setFlag(gunDrawn);
+ if (_modeFlag) {
+ setMode(true, 3561);
+ } else {
+ _sceneMode = 3561;
+ signal();
+ }
+ }
+ }
+ break;
+ case CURSOR_WALK:
+ if (BF_GLOBALS.getFlag(gunDrawn))
+ event.handled = true;
+ break;
+ case CURSOR_LOOK:
+ case CURSOR_TALK:
+ break;
+ case CURSOR_USE:
+ if (BF_GLOBALS.getFlag(gunDrawn)) {
+ SceneItem::display2(355, 50);
+ event.handled = true;
+ }
+ break;
+ default:
+ if (BF_GLOBALS.getFlag(gunDrawn)) {
+ SceneItem::display2(355, 50);
+ event.handled = true;
+ }
+ break;
+ }
+ }
+ }
+
+ PalettedScene::process(event);
+}
+
+void Scene355::dispatch() {
+ PalettedScene::dispatch();
+ if (BF_GLOBALS._sceneObjects->contains(&_lyle)) {
+ _lyle.updateAngle(BF_GLOBALS._player._position);
+ }
+
+ if (!_action && (BF_GLOBALS._player.getRegionIndex() == 20)) {
+ ADD_MOVER(BF_GLOBALS._player, 238, 142);
+ }
+}
+
+void Scene355::setMode(bool mode, int sceneMode) {
+ Scene355 *scene = (Scene355 *)BF_GLOBALS._sceneManager._scene;
+
+ if (mode) {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = sceneMode;
+ setAction(&scene->_sequenceManager, this, 4553, &BF_GLOBALS._player, NULL);
+ _modeFlag = false;
+ } else {
+ _sceneMode = 9990;
+ _nextSceneMode = sceneMode;
+ signal();
+ }
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 360 - Future Wave Interior
+ *
+ *--------------------------------------------------------------------------*/
+
+bool Scene360::Item1::startAction(CursorType action, Event &event) {
+ Scene360 *scene = (Scene360 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(360, 9);
+ return true;
+ case CURSOR_TALK:
+ scene->_sceneMode = 3607;
+ BF_GLOBALS._player.disableControl();
+ scene->_stripManager.start(3550, this);
+ return true;
+ case INV_COLT45:
+ SceneItem::display2(1, 4);
+ return true;
+ default:
+ return SceneHotspot::startAction(action, event);
+ }
+}
+
+bool Scene360::Item2::startAction(CursorType action, Event &event) {
+ Scene360 *scene = (Scene360 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(360, 10);
+ return true;
+ case CURSOR_USE:
+ if (BF_GLOBALS._dayNumber != 4)
+ SceneItem::display2(360, 5);
+ else
+ scene->setAction(&scene->_action1);
+ return true;
+ default:
+ return SceneHotspot::startAction(action, event);
+ }
+}
+
+bool Scene360::Item3::startAction(CursorType action, Event &event) {
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(360, 11);
+ return true;
+ case CURSOR_USE:
+ SceneItem::display2(360, 12);
+ return true;
+ default:
+ return SceneHotspot::startAction(action, event);
+ }
+}
+
+bool Scene360::Barometer::startAction(CursorType action, Event &event) {
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(360, 15);
+ return true;
+ case CURSOR_USE:
+ SceneItem::display2(360, 16);
+ return true;
+ default:
+ return SceneHotspot::startAction(action, event);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene360::SlidingDoor::startAction(CursorType action, Event &event) {
+ Scene360 *scene = (Scene360 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(360, 0);
+ return true;
+ case CURSOR_USE:
+ BF_GLOBALS._player.disableControl();
+ if (BF_GLOBALS.getFlag(greenTaken)) {
+ scene->_sceneMode = 3611;
+ setAction(&scene->_sequenceManager1, scene, 3611, &BF_GLOBALS._player, this, NULL);
+ } else {
+ scene->_sceneMode = 3604;
+ setAction(&scene->_sequenceManager1, scene, 3604, &BF_GLOBALS._player, NULL);
+ }
+ return true;
+ case CURSOR_TALK:
+ scene->_sceneMode = 3607;
+ BF_GLOBALS._player.disableControl();
+ scene->_stripManager.start(3550, scene);
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene360::Window::startAction(CursorType action, Event &event) {
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(360, 13);
+ return true;
+ case CURSOR_USE:
+ SceneItem::display2(360, 14);
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene360::Object4::startAction(CursorType action, Event &event) {
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(360, 3);
+ return true;
+ case CURSOR_USE:
+ SceneItem::display2(360, 2);
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene360::BsseballCards::startAction(CursorType action, Event &event) {
+ switch (action) {
+ case CURSOR_LOOK:
+ if (event.mousePos.x >= (_bounds.left + _bounds.width() / 2))
+ SceneItem::display2(360, 4);
+ else
+ SceneItem::display2(360, 22);
+ return true;
+ case CURSOR_USE:
+ SceneItem::display2(360, 2);
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene360::Object6::startAction(CursorType action, Event &event) {
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(360, 6);
+ return true;
+ case CURSOR_USE:
+ SceneItem::display2(360, 7);
+ return true;
+ case CURSOR_TALK:
+ SceneItem::display2(360, 8);
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene360::Object7::startAction(CursorType action, Event &event) {
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(360, 1);
+ return true;
+ case CURSOR_USE:
+ SceneItem::display2(360, 21);
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene360::Action1::signal() {
+ switch (_actionIndex++) {
+ case 0:
+ BF_GLOBALS._player.disableControl();
+ ADD_PLAYER_MOVER(153, 115);
+ break;
+ case 1:
+ BF_GLOBALS._player.setStrip(7);
+ if (BF_INVENTORY.getObjectScene(INV_WAREHOUSE_KEYS) == 360) {
+ SceneItem::display2(360, 20);
+ BF_INVENTORY.setObjectScene(INV_WAREHOUSE_KEYS, 1);
+ T2_GLOBALS._uiElements.addScore(30);
+ } else {
+ SceneItem::display2(360, 5);
+ }
+
+ BF_GLOBALS._player.enableControl();
+ remove();
+ break;
+ default:
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+Scene360::Scene360() {
+ _field380 = 0;
+}
+
+void Scene360::synchronize(Serializer &s) {
+ SceneExt::synchronize(s);
+ s.syncAsSint16LE(_field380);
+}
+
+void Scene360::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+ loadScene(760);
+ setZoomPercents(108, 90, 135, 100);
+ _sound1.play(125);
+
+ _stripManager.addSpeaker(&_gameTextSpeaker);
+ _stripManager.addSpeaker(&_jakeUniformSpeaker);
+ _stripManager.addSpeaker(&_harrisonSpeaker);
+ _stripManager.addSpeaker(&_greenSpeaker);
+
+ _item2._sceneRegionId = 11;
+ BF_GLOBALS._sceneItems.push_back(&_item2);
+
+ _slidingDoor.postInit();
+ _slidingDoor.setVisage(760);
+ _slidingDoor.setPosition(Common::Point(42, 120));
+ _slidingDoor.setStrip(2);
+ _slidingDoor.fixPriority(85);
+ BF_GLOBALS._sceneItems.push_back(&_slidingDoor);
+
+ _window.postInit();
+ _window.setVisage(760);
+ _window.setStrip(4);
+ _window.setPosition(Common::Point(176, 43));
+ _window.fixPriority(10);
+ _window._numFrames = 2;
+ _window.animate(ANIM_MODE_8, 0, NULL);
+ BF_GLOBALS._sceneItems.push_back(&_window);
+
+ _object4.postInit();
+ _object4.setVisage(760);
+ _object4.setStrip(5);
+ _object4.setPosition(Common::Point(157, 75));
+ _object4.fixPriority(50);
+ BF_GLOBALS._sceneItems.push_back(&_object4);
+
+ if (BF_GLOBALS._dayNumber <= 1) {
+ _object7.postInit();
+ _object7.setVisage(760);
+ _object7.setStrip(1);
+ _object7.setPosition(Common::Point(246, 105));
+ _object7.fixPriority(50);
+ BF_GLOBALS._sceneItems.push_back(&_object7);
+
+ _baseballCards.postInit();
+ _baseballCards.setVisage(760);
+ _baseballCards.setStrip(6);
+ _baseballCards.setPosition(Common::Point(159, 115));
+ _baseballCards.fixPriority(50);
+ BF_GLOBALS._sceneItems.push_back(&_baseballCards);
+ }
+
+ BF_GLOBALS._player.postInit();
+ if (BF_GLOBALS.getFlag(onDuty)) {
+ if (BF_GLOBALS.getFlag(gunDrawn)) {
+ BF_GLOBALS._player.setVisage(1351);
+ BF_GLOBALS._player._moveDiff.x = 5;
+ } else {
+ BF_GLOBALS._player.setVisage(361);
+ BF_GLOBALS._player._moveDiff.x = 6;
+ }
+ } else {
+ BF_GLOBALS._player.setVisage(368);
+ BF_GLOBALS._player._moveDiff.x = 6;
+ }
+
+ BF_GLOBALS._player.changeZoom(-1);
+ BF_GLOBALS._player.setStrip(3);
+ BF_GLOBALS._player.setPosition(Common::Point(340, 160));
+ BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ BF_GLOBALS._player._moveDiff.y = 4;
+ BF_GLOBALS._player.enableControl();
+
+ if (BF_GLOBALS._sceneManager._previousScene == 370) {
+ BF_GLOBALS._player.setPosition(Common::Point(62, 122));
+ } else {
+ BF_GLOBALS._player.setPosition(Common::Point(253, 135));
+ BF_GLOBALS._player.setStrip(2);
+
+ if (BF_GLOBALS.getFlag(fBackupIn350)) {
+ _object6.postInit();
+ _object6.setVisage(BF_GLOBALS.getFlag(gunDrawn) ? 363 : 1363);
+ _object6.animate(ANIM_MODE_1, NULL);
+ _object6.setObjectWrapper(new SceneObjectWrapper());
+ _object6.setPosition(Common::Point(235, 150));
+ _object6.setStrip(2);
+ BF_GLOBALS._sceneItems.push_back(&_object6);
+ }
+
+ _sceneMode = 3607;
+ if (BF_GLOBALS.getFlag(greenTaken)) {
+ _slidingDoor.setPosition(Common::Point(42, 120));
+ } else {
+ BF_GLOBALS._player.disableControl();
+
+ _object2.postInit();
+ _object2.setPosition(Common::Point(-40, -40));
+
+ _slidingDoor.setPosition(Common::Point(6, 130));
+ _slidingDoor.setAction(&_sequenceManager1, this, 3606, &_slidingDoor, &_object7, NULL);
+ }
+ }
+
+ _barometer._sceneRegionId = 9;
+ BF_GLOBALS._sceneItems.push_back(&_barometer);
+ _item3._sceneRegionId = 10;
+ BF_GLOBALS._sceneItems.push_back(&_item3);
+ _item1.setBounds(Rect(0, 0, SCREEN_WIDTH, UI_INTERFACE_Y));
+ BF_GLOBALS._sceneItems.push_back(&_item1);
+}
+
+void Scene360::signal() {
+ switch (_sceneMode) {
+ case 3600:
+ case 3611:
+ BF_GLOBALS._sceneManager.changeScene(370);
+ break;
+ case 3602:
+ BF_GLOBALS.setFlag(gunDrawn);
+ BF_GLOBALS._deathReason = BF_GLOBALS.getFlag(fBackupIn350) ? 2 : 1;
+ BF_GLOBALS._player.setPosition(Common::Point(BF_GLOBALS._player._position.x - 20,
+ BF_GLOBALS._player._position.y));
+ _sceneMode = 3610;
+ setAction(&_sequenceManager1, this, 3610, &_slidingDoor, &_object2, &BF_GLOBALS._player, NULL);
+ break;
+ case 3603:
+ _sceneMode = 3605;
+ setAction(&_sequenceManager1, this, 3605, &BF_GLOBALS._player, &_slidingDoor, NULL);
+ break;
+ case 3604:
+ _sceneMode = BF_GLOBALS.getFlag(fBackupIn350) ? 3603 : 3605;
+ setAction(&_sequenceManager1, this, _sceneMode, &_object6, NULL);
+ break;
+ case 3605:
+ if (BF_GLOBALS.getFlag(fBackupIn350)) {
+ _sceneMode = 3600;
+ setAction(&_sequenceManager1, this, 3600, NULL);
+ } else {
+ BF_GLOBALS._deathReason = BF_GLOBALS.getFlag(fBackupIn350) ? 2 : 1;
+ _sceneMode = 3610;
+ setAction(&_sequenceManager1, this, 3601, &BF_GLOBALS._player, NULL);
+ }
+ break;
+ case 3607:
+ case 3609:
+ _object6.setVisage(1363);
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 3608:
+ BF_GLOBALS._sceneManager.changeScene(355);
+ break;
+ case 3610:
+ BF_GLOBALS._sceneManager.changeScene(666);
+ break;
+ case 9998:
+ BF_GLOBALS._player.setVisage(1351);
+ BF_GLOBALS._player._moveDiff.x = 5;
+ BF_GLOBALS._player.setFrame(1);
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 9999:
+ BF_GLOBALS._player.setVisage(361);
+ BF_GLOBALS._player._moveDiff.x = 6;
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ BF_GLOBALS._player.enableControl();
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene360::process(Event &event) {
+ SceneExt::process(event);
+
+ if ((event.eventType == EVENT_BUTTON_DOWN) && (BF_GLOBALS._events.getCursor() == INV_COLT45) &&
+ BF_GLOBALS._player.contains(event.mousePos) && !BF_GLOBALS.getFlag(greenTaken)) {
+ // Player clicked gun on themselves
+ if (BF_GLOBALS.getFlag(gunDrawn)) {
+ // Handle holstering gun
+ if (BF_GLOBALS._player._position.x <= 160)
+ SceneItem::display2(360, 18);
+ else {
+ if (BF_GLOBALS.getFlag(fBackupIn350))
+ SceneItem::display2(360, 19);
+
+ BF_GLOBALS.clearFlag(gunDrawn);
+ _sceneMode = 9999;
+ BF_GLOBALS._player.setVisage(1361);
+ BF_GLOBALS._player.addMover(NULL);
+ BF_GLOBALS._player.setFrame(BF_GLOBALS._player.getFrameCount());
+ BF_GLOBALS._player.animate(ANIM_MODE_6, this);
+
+ _object6.setVisage(1363);
+ }
+ } else {
+ // Handle drawing gun
+ if (BF_GLOBALS.getFlag(fBackupIn350))
+ SceneItem::display2(360, 19);
+
+ BF_GLOBALS._player.disableControl();
+ BF_GLOBALS._player.addMover(NULL);
+ BF_GLOBALS._player.setVisage(1361);
+ BF_GLOBALS._player.setFrame(1);
+ BF_GLOBALS._player.animate(ANIM_MODE_5, this);
+
+ BF_GLOBALS.setFlag(gunDrawn);
+ _sceneMode = 9998;
+ _object6.setVisage(363);
+ }
+
+ event.handled = true;
+ }
+}
+
+void Scene360::dispatch() {
+ SceneExt::dispatch();
+
+ if (!_action) {
+ if (BF_GLOBALS._player.getRegionIndex() == 8) {
+ // Leaving the boat
+ BF_GLOBALS._player.disableControl();
+ if (BF_GLOBALS.getFlag(fBackupIn350)) {
+ BF_GLOBALS._player.addMover(NULL);
+ _sceneMode = 3609;
+ setAction(&_sequenceManager1, this, 3609, &BF_GLOBALS._player, NULL);
+ } else {
+ BF_GLOBALS._sceneManager.changeScene(355);
+ }
+ }
+
+ if ((BF_GLOBALS._player._position.x <= 168) && !BF_GLOBALS.getFlag(greenTaken) &&
+ !BF_GLOBALS.getFlag(gunDrawn)) {
+ // Moving to doorway without drawn gun before Green is captured
+ BF_GLOBALS._player.disableControl();
+ BF_GLOBALS._player.addMover(NULL);
+ _sceneMode = 3602;
+ setAction(&_sequenceManager1, this, 3602, &_slidingDoor, &_object2, &BF_GLOBALS._player, NULL);
+ }
+ }
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 370 - Future Wave Bedroom
+ *
+ *--------------------------------------------------------------------------*/
+
+bool Scene370::GreensGun::startAction(CursorType action, Event &event) {
+ Scene370 *scene = (Scene370 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(370, 4);
+ return true;
+ case CURSOR_USE:
+ if ((BF_INVENTORY.getObjectScene(INV_HANDCUFFS) != 1) || BF_GLOBALS.getFlag(greenTaken)) {
+ BF_GLOBALS._player.disableControl();
+ BF_GLOBALS._walkRegions.proc2(3);
+ scene->_sceneMode = 3711;
+ scene->setAction(&scene->_sequenceManager, scene, 3711, &BF_GLOBALS._player, this, NULL);
+ } else {
+ SceneItem::display2(370, 5);
+ }
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene370::Green::startAction(CursorType action, Event &event) {
+ Scene370 *scene = (Scene370 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(370, (_v2 < 3) ? 10 : 0);
+ return true;
+ case CURSOR_USE:
+ if (_v2 != 3)
+ SceneItem::display2(370, 1);
+ else if (BF_INVENTORY.getObjectScene(INV_HANDCUFFS) == 1)
+ SceneItem::display2(370, 26);
+ else if (BF_INVENTORY.getObjectScene(INV_GREENS_KNIFE) == 1) {
+ scene->_sceneMode = 2;
+ scene->_stripManager.start(3717, scene);
+ } else {
+ BF_GLOBALS._player.disableControl();
+ BF_GLOBALS._walkRegions.proc2(3);
+ scene->_sceneMode = 3715;
+ scene->setAction(&scene->_sequenceManager, scene, 3715, &BF_GLOBALS._player, this, NULL);
+ }
+ return true;
+ case CURSOR_TALK:
+ BF_GLOBALS._player.disableControl();
+ switch (_v2) {
+ case 0:
+ ++_v2;
+ scene->_sceneMode = 3706;
+ scene->setAction(&scene->_sequenceManager, scene, 3706, NULL);
+ break;
+ case 1:
+ ++_v2;
+ scene->_sceneMode = 3707;
+
+ scene->_object5.postInit();
+ scene->_object5.setVisage(362);
+ scene->_object5.setStrip(3);
+ scene->_object5.setPosition(scene->_harrison._position);
+ scene->_object5.hide();
+
+ scene->setAction(&scene->_sequenceManager, scene, 3707, &scene->_harrison, &scene->_object5, NULL);
+ break;
+ case 2:
+ ++_v2;
+ scene->_sceneMode = 3708;
+ scene->setAction(&scene->_sequenceManager, scene, 3708, this, &scene->_laura, &scene->_harrison,
+ &scene->_object5, &scene->_greensGun, NULL);
+ break;
+ case 3:
+ scene->_sceneMode = BF_INVENTORY.getObjectScene(INV_HANDCUFFS) == 1 ? 3713 : 2;
+ scene->_stripManager.start(3717, scene);
+ break;
+ default:
+ break;
+ }
+ return true;
+ case INV_COLT45:
+ if ((BF_INVENTORY.getObjectScene(INV_GREENS_GUN) == 370) || (BF_INVENTORY.getObjectScene(INV_GREENS_GUN) == 1))
+ SceneItem::display2(370, 28);
+ else if (!BF_GLOBALS.getHasBullets())
+ SceneItem::display2(1, 1);
+ else {
+ BF_GLOBALS._player.disableControl();
+ BF_GLOBALS._deathReason = 9;
+ scene->_sceneMode = 3702;
+ scene->setAction(&scene->_sequenceManager, scene, 3702, &BF_GLOBALS._player, this, &scene->_harrison, NULL);
+ }
+ return true;
+ case INV_HANDCUFFS:
+ if (_v2 != 3)
+ SceneItem::display2(370, 2);
+ else {
+ T2_GLOBALS._uiElements.addScore(50);
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 3704;
+ scene->setAction(&scene->_sequenceManager, scene, 3704, &BF_GLOBALS._player, this, &scene->_harrison, NULL);
+ }
+ return true;
+ case INV_MIRANDA_CARD:
+ if (BF_INVENTORY.getObjectScene(INV_HANDCUFFS) == 1)
+ SceneItem::display2(370, 5);
+ else if (BF_GLOBALS.getFlag(readGreenRights))
+ SceneItem::display2(390, 15);
+ else {
+ BF_GLOBALS.setFlag(readGreenRights);
+ BF_GLOBALS._player.disableControl();
+ BF_GLOBALS._player.updateAngle(this->_position);
+ scene->_sceneMode = 3717;
+ scene->setAction(&scene->_sequenceManager, scene, 3717, &BF_GLOBALS._player, NULL);
+ }
+ return true;
+ default:
+ break;
+ }
+
+ return NamedObject2::startAction(action, event);
+}
+
+bool Scene370::Harrison::startAction(CursorType action, Event &event) {
+ Scene370 *scene = (Scene370 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(370, 8);
+ return true;
+ case CURSOR_TALK:
+ if (scene->_green._v2 != 3) {
+ scene->_sceneMode = 3;
+ scene->_stripManager.start(3714, scene);
+ } else if ((BF_INVENTORY.getObjectScene(INV_GREENS_KNIFE) == 1) ||
+ ((BF_INVENTORY.getObjectScene(INV_GREENS_GUN) == 1) && BF_GLOBALS._sceneObjects->contains(&scene->_laura))) {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 3716;
+ scene->setAction(&scene->_sequenceManager, scene, 3716, &BF_GLOBALS._player, &scene->_green, this, NULL);
+ } else {
+ BF_GLOBALS._player.updateAngle(this->_position);
+ scene->_stripManager.start(3715, scene);
+ }
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene370::Laura::startAction(CursorType action, Event &event) {
+ Scene370 *scene = (Scene370 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(370, 11);
+ return true;
+ case CURSOR_USE:
+ SceneItem::display2(370, BF_GLOBALS._sceneObjects->contains(&scene->_green) ? 12 : 13);
+ return true;
+ case CURSOR_TALK:
+ if (BF_INVENTORY.getObjectScene(INV_HANDCUFFS) != 1) {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 3705;
+ scene->setAction(&scene->_sequenceManager, scene, 3705, &BF_GLOBALS._player, this, NULL);
+ return true;
+ }
+ // Deliberate fall-through
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene370::Item1::startAction(CursorType action, Event &event) {
+ Scene370 *scene = (Scene370 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(370, 15);
+ return true;
+ case CURSOR_USE:
+ SceneItem::display2(370, 16);
+ return true;
+ case INV_COLT45:
+ if (BF_GLOBALS._sceneObjects->contains(&scene->_green) && (BF_INVENTORY.getObjectScene(INV_GREENS_GUN) != 370)) {
+ scene->_green.setAction(NULL);
+ scene->_sceneMode = 3703;
+ scene->setAction(&scene->_sequenceManager, scene, 3703, &BF_GLOBALS._player, &scene->_green, &scene->_harrison, NULL);
+ return true;
+ }
+ // Deliberate fall-through
+ default:
+ return NamedHotspot::startAction(action, event);
+ }
+}
+
+bool Scene370::Item6::startAction(CursorType action, Event &event) {
+ Scene370 *scene = (Scene370 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(370, 14);
+ return true;
+ case CURSOR_USE:
+ SceneItem::display2(370, 29);
+ return true;
+ case INV_COLT45:
+ if (BF_GLOBALS._sceneObjects->contains(&scene->_green) && (BF_INVENTORY.getObjectScene(INV_GREENS_GUN) != 370) &&
+ (BF_INVENTORY.getObjectScene(INV_HANDCUFFS) == 1)) {
+ BF_GLOBALS._player.disableControl();
+ scene->_green.setAction(NULL);
+ scene->_sceneMode = 3703;
+ scene->setAction(&scene->_sequenceManager, scene, 3703, &BF_GLOBALS._player, &scene->_green, &scene->_harrison, NULL);
+ return true;
+ }
+ // Deliberate fall-through
+ default:
+ return SceneHotspot::startAction(action, event);
+ }
+}
+
+
+bool Scene370::Exit::startAction(CursorType action, Event &event) {
+ Scene370 *scene = (Scene370 *)BF_GLOBALS._sceneManager._scene;
+
+ if (BF_GLOBALS._sceneObjects->contains(&scene->_green))
+ return false;
+ else {
+ ADD_PLAYER_MOVER(event.mousePos.x, event.mousePos.y);
+ return true;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene370::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+ loadScene(370);
+
+ _stripManager.addSpeaker(&_gameTextSpeaker);
+ _stripManager.addSpeaker(&_jakeUniformSpeaker);
+ _stripManager.addSpeaker(&_lauraSpeaker);
+ _stripManager.addSpeaker(&_lauraHeldSpeaker);
+ _stripManager.addSpeaker(&_greenSpeaker);
+ _stripManager.addSpeaker(&_harrisonSpeaker);
+
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.setVisage(1351);
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
+ BF_GLOBALS._player.setStrip(8);
+ BF_GLOBALS._player.setPosition(Common::Point(310, 153));
+ BF_GLOBALS._player._moveDiff = Common::Point(7, 2);
+ BF_GLOBALS._player.disableControl();
+
+ if (BF_GLOBALS.getFlag(greenTaken)) {
+ // Green has already been arrested
+ BF_GLOBALS._player.setVisage(BF_GLOBALS.getFlag(onDuty) ? 361 : 368);
+ BF_GLOBALS._player._moveDiff.x = 6;
+ BF_GLOBALS._player.enableControl();
+ } else {
+ // Hostage scene setup
+ _green.postInit();
+ _green.setVisage(373);
+ _green.setStrip(2);
+ _green._numFrames = 5;
+ _green.setPosition(Common::Point(164, 137));
+ _green.animate(ANIM_MODE_7, 0, NULL);
+ _green.fixPriority(125);
+ BF_GLOBALS._sceneItems.push_back(&_green);
+
+ _laura.postInit();
+ _laura.setVisage(374);
+ _laura.setStrip(2);
+ _laura.setPosition(_green._position);
+ _laura.hide();
+ _laura.animate(ANIM_MODE_1, NULL);
+
+ _harrison.postInit();
+ _harrison.setVisage(372);
+ _harrison.setPosition(Common::Point(256, 166));
+ BF_GLOBALS._sceneItems.push_back(&_harrison);
+
+ _sceneMode = 3700;
+ setAction(&_sequenceManager, this, 3700, NULL);
+ }
+
+ if ((BF_INVENTORY.getObjectScene(INV_GREENS_GUN) != 320) && (BF_INVENTORY.getObjectScene(INV_GREENS_GUN) != 1)) {
+ _greensGun.postInit();
+ _greensGun.setVisage(362);
+ _greensGun.setStrip(6);
+ _greensGun.setPosition(_green._position);
+ _greensGun.fixPriority(149);
+ _greensGun.hide();
+ }
+
+ if ((BF_INVENTORY.getObjectScene(INV_GREENS_GUN) == 370) && (BF_GLOBALS._dayNumber == 1)) {
+ _greensGun.setPosition(Common::Point(172, 137));
+ _greensGun.show();
+ BF_GLOBALS._sceneItems.push_front(&_greensGun);
+ }
+
+ _item1._sceneRegionId = 8;
+ BF_GLOBALS._sceneItems.push_back(&_item1);
+ _item2.setDetails(9, 370, 17, -1, 18, 1);
+ _item3.setDetails(10, 370, 19, -1, 20, 1);
+ _item4.setDetails(11, 370, 21, -1, 22, 1);
+ _item5.setDetails(12, 370, 23, -1, 24, 1);
+ _exit.setDetails(Rect(316, 133, 320, 166), 360, -1, -1, -1, 1, NULL);
+ _item6.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT));
+
+ BF_GLOBALS._sceneItems.push_back(&_item6);
+ BF_GLOBALS._sceneItems.remove(&BF_GLOBALS._player);
+ BF_GLOBALS._sceneItems.push_back(&BF_GLOBALS._player);
+}
+
+void Scene370::signal() {
+ switch (_sceneMode) {
+ case 1:
+ BF_GLOBALS._bookmark = bArrestedGreen;
+ BF_GLOBALS._sceneManager.changeScene(350);
+ break;
+ case 2:
+ case 3717:
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 3:
+ break;
+ case 3707:
+ _object5.setDetails(370, 6, -1, 7, 1, NULL);
+ BF_GLOBALS._sceneItems.push_back(&_object5);
+ // Deliberate fall-through
+ case 3700:
+ case 3706:
+ _green.setAction(&_sequenceManager, this, 3701, NULL);
+ BF_GLOBALS._player.enableControl();
+ BF_GLOBALS._player._canWalk = false;
+ break;
+ case 3701:
+ BF_GLOBALS._player.disableControl();
+ setAction(&_sequenceManager, this, 3710, NULL);
+ break;
+ case 3702:
+ // Player tried to shoot Green
+ BF_GLOBALS._deathReason = 2;
+ BF_GLOBALS._sceneManager.changeScene(666);
+ break;
+ case 3703:
+ // Player dropped his gun
+ BF_GLOBALS._deathReason = 9;
+ BF_GLOBALS._sceneManager.changeScene(666);
+ break;
+ case 3704:
+ BF_GLOBALS.clearFlag(gunDrawn);
+ BF_INVENTORY.setObjectScene(INV_HANDCUFFS, 390);
+ BF_GLOBALS._player.setVisage(361);
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
+ BF_GLOBALS._player.setStrip(3);
+
+ BF_GLOBALS._sceneItems.push_front(&_laura);
+ BF_GLOBALS._walkRegions.proc1(3);
+ _harrison.setAction(NULL);
+ BF_GLOBALS._player.enableControl();
+
+ BF_GLOBALS.set2Flags(f1015Marina);
+ BF_GLOBALS.set2Flags(f1027Marina);
+ BF_GLOBALS.set2Flags(f1098Marina);
+ break;
+ case 3705:
+ _laura.remove();
+ BF_GLOBALS._walkRegions.proc2(6);
+ BF_GLOBALS._walkRegions.proc2(1);
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 3708:
+ _sound1.play(6);
+ BF_GLOBALS._sound1.changeSound(35);
+ BF_INVENTORY.setObjectScene(INV_GREENS_GUN, 370);
+ T2_GLOBALS._uiElements.addScore(50);
+ BF_GLOBALS._sceneItems.push_front(&_greensGun);
+
+ BF_GLOBALS._player.enableControl();
+ BF_GLOBALS._player._canWalk = false;
+
+ _sceneMode = 0;
+ _object5.remove();
+ _green.setAction(NULL);
+ BF_GLOBALS._walkRegions.proc1(6);
+ BF_GLOBALS._walkRegions.proc1(1);
+ break;
+ case 3709:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 3713;
+ setAction(&_sequenceManager, this, 3713, NULL);
+ break;
+ case 3710:
+ BF_GLOBALS._player.enableControl();
+ BF_GLOBALS._player._canWalk = false;
+ _sceneMode = 3701;
+ _green.setAction(&_sequenceManager, this, 3701, NULL);
+ break;
+ case 3711:
+ BF_GLOBALS._walkRegions.proc1(3);
+ BF_INVENTORY.setObjectScene(INV_GREENS_GUN, 1);
+ T2_GLOBALS._uiElements.addScore(30);
+ _greensGun.remove();
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 3712:
+ T2_GLOBALS._uiElements._active = false;
+ T2_GLOBALS._uiElements.hide();
+
+ if (BF_GLOBALS._sceneObjects->contains(&_greensGun))
+ _greensGun.remove();
+ _sceneMode = 1;
+ setAction(&_sequenceManager, this, 3714, NULL);
+ break;
+ case 3713:
+ BF_GLOBALS._player.enableControl();
+ BF_GLOBALS._player._canWalk = false;
+ break;
+ case 3715:
+ T2_GLOBALS._uiElements.addScore(50);
+ BF_INVENTORY.setObjectScene(INV_GREEN_ID, 1);
+ BF_INVENTORY.setObjectScene(INV_GREENS_KNIFE, 1);
+ BF_GLOBALS._walkRegions.proc1(3);
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 3716:
+ BF_GLOBALS.clearFlag(fCalledBackup);
+ BF_GLOBALS.clearFlag(fBackupIn350);
+ BF_GLOBALS.clearFlag(fBackupArrived340);
+ BF_GLOBALS.setFlag(greenTaken);
+ BF_GLOBALS.setFlag(fToldToLeave340);
+
+ BF_GLOBALS._bookmark = bCalledToDomesticViolence;
+ _harrison.remove();
+ _green.remove();
+ BF_GLOBALS._player.enableControl();
+ break;
+ }
+}
+
+void Scene370::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(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 Scene370::dispatch() {
+ SceneExt::dispatch();
+
+ if ((BF_GLOBALS._player._position.x >= 316) && !BF_GLOBALS._sceneObjects->contains(&_laura) &&
+ !BF_GLOBALS._sceneObjects->contains(&_green)) {
+ if (BF_GLOBALS._bookmark < bArrestedGreen) {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 3712;
+ setAction(&_sequenceManager, this, 3712, &BF_GLOBALS._player, NULL);
+ } else {
+ BF_GLOBALS._sound1.fadeSound(35);
+ BF_GLOBALS._sceneManager.changeScene(360);
+ }
+ }
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 380 - Outside City Hall & Jail
+ *
+ *--------------------------------------------------------------------------*/
+
+bool Scene380::Vechile::startAction(CursorType action, Event &event) {
+ Scene380 *scene = (Scene380 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_USE:
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 1;
+ scene->setAction(&scene->_sequenceManager, scene, 3802, &BF_GLOBALS._player, NULL);
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene380::Door::startAction(CursorType action, Event &event) {
+ Scene380 *scene = (Scene380 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_USE:
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 2;
+ scene->setAction(&scene->_sequenceManager, scene, 3800, &BF_GLOBALS._player, &scene->_door, NULL);
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene380::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+ loadScene(380);
+ setZoomPercents(68, 80, 131, 100);
+
+ BF_GLOBALS._sound1.fadeSound(33);
+ BF_GLOBALS._walkRegions.proc1(9);
+
+ _door.postInit();
+ _door.setVisage(380);
+ _door.setStrip(4);
+ _door.setPosition(Common::Point(132, 66));
+ _door.setDetails(380, 12, 13, -1, 1, NULL);
+
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ BF_GLOBALS._player.changeZoom(-1);
+
+ _vechile.postInit();
+ _vechile.setVisage(380);
+ _vechile.fixPriority(109);
+
+ if (BF_GLOBALS.getFlag(fWithLyle)) {
+ // Show vechile as car
+ _vechile.setStrip(3);
+ _vechile.setPosition(Common::Point(273, 125));
+ _vechile.setDetails(580, 2, 3, -1, 1, NULL);
+
+ BF_GLOBALS._player.setVisage(129);
+ BF_GLOBALS._walkRegions.proc1(12);
+ BF_GLOBALS._walkRegions.proc1(18);
+ BF_GLOBALS._walkRegions.proc1(19);
+ BF_GLOBALS._walkRegions.proc1(20);
+ BF_GLOBALS._walkRegions.proc1(25);
+ BF_GLOBALS._walkRegions.proc1(26);
+ BF_GLOBALS._walkRegions.proc1(27);
+ } else if (BF_GLOBALS.getFlag(onDuty)) {
+ // Show on duty motorcycle
+ _vechile.setStrip(2);
+ _vechile.setDetails(300, 11, 13, -1, 1, NULL);
+ _vechile.setPosition(Common::Point(252, 115));
+
+ BF_GLOBALS._player.setVisage(1341);
+ } else {
+ // Show off duty motorcycle
+ _vechile.setStrip(1);
+ _vechile.setDetails(580, 0, 1, -1, 1, NULL);
+ _vechile.setPosition(Common::Point(249, 110));
+
+ BF_GLOBALS._player.setVisage(129);
+ }
+
+ BF_GLOBALS._player.updateAngle(_vechile._position);
+ BF_GLOBALS._sceneItems.push_back(&_door);
+
+ switch (BF_GLOBALS._sceneManager._previousScene) {
+ case 50:
+ case 60:
+ case 330:
+ case 370:
+ BF_GLOBALS._player.setPosition(Common::Point(251, 100));
+ BF_GLOBALS._player._strip = 3;
+ BF_GLOBALS._player.enableControl();
+ break;
+ default:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 0;
+ setAction(&_sequenceManager, this, 3801, &BF_GLOBALS._player, &_door, NULL);
+ break;
+ }
+
+ _item1.setDetails(7, 380, 0, 1, 2, 1);
+ _item2.setDetails(9, 380, 3, 4, 5, 1);
+ _item3.setDetails(17, 380, 6, 7, 8, 1);
+ _item4.setDetails(20, 380, 9, 10, 11, 1);
+ _item5.setDetails(15, 380, 14, 15, 16, 1);
+ _item6.setDetails(4, 380, 17, 18, 19, 1);
+ _item7.setDetails(19, 380, 20, 4, 21, 1);
+ _item8.setDetails(18, 380, 22, 23, 24, 1);
+ _item9.setDetails(6, 380, 25, 26, 27, 1);
+}
+
+void Scene380::signal() {
+ switch (_sceneMode) {
+ case 1:
+ BF_GLOBALS._sceneManager.changeScene(60);
+ break;
+ case 2:
+ BF_GLOBALS._sceneManager.changeScene(385);
+ break;
+ default:
+ BF_GLOBALS._player.enableControl();
+ }
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 385 - City Hall
+ *
+ *--------------------------------------------------------------------------*/
+
+void Scene385::Action1::signal() {
+ Scene385 *scene = (Scene385 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ BF_GLOBALS._player.disableControl();
+
+ switch (scene->_talkAction) {
+ case 0:
+ error("Bugs::talkscript385");
+ break;
+ case 3850:
+ case 3851:
+ case 3852:
+ case 3853:
+ case 3854:
+ case 3855:
+ case 3856:
+ case 3857:
+ case 3863:
+ case 3866: {
+ ADD_PLAYER_MOVER(187, 144);
+ break;
+ }
+ default: {
+ ADD_PLAYER_MOVER(231, 158);
+ break;
+ }
+ }
+ break;
+ case 1:
+ BF_GLOBALS._player.changeAngle(45);
+ setDelay(3);
+ break;
+ case 2:
+ scene->_stripManager.start(scene->_talkAction, this);
+ break;
+ case 3:
+ if (scene->_talkAction)
+ scene->_dezi.animate(ANIM_MODE_5, NULL);
+ BF_GLOBALS._player.enableControl();
+ remove();
+ break;
+ }
+}
+
+void Scene385::Action2::signal() {
+ Scene385 *scene = (Scene385 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0: {
+ ADD_PLAYER_MOVER(231, 158);
+ break;
+ }
+ case 1:
+ BF_GLOBALS._player.updateAngle(BF_GLOBALS._player._position);
+ setDelay(3);
+ break;
+ case 2:
+ scene->_stripManager.start(3864, this);
+ break;
+ case 3:
+ scene->_jim.animate(ANIM_MODE_5, this);
+ break;
+ case 4:
+ scene->_jim.setStrip(4);
+ scene->_jim.animate(ANIM_MODE_5, this);
+ break;
+ case 5:
+ scene->_stripManager.start(3865, this);
+ break;
+ case 6:
+ BF_GLOBALS._player.enableControl();
+ remove();
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene385::Door::startAction(CursorType action, Event &event) {
+ Scene385 *scene = (Scene385 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_USE:
+ BF_GLOBALS._walkRegions.proc2(6);
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 3850;
+ scene->setAction(&scene->_sequenceManager, scene, 3850, &BF_GLOBALS._player, this, NULL);
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene385::Jim::startAction(CursorType action, Event &event) {
+ Scene385 *scene = (Scene385 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_TALK:
+ if (scene->_jimFlag) {
+ scene->_talkAction = 3867;
+ scene->setAction(&scene->_action1);
+ } else {
+ switch (BF_GLOBALS._dayNumber) {
+ case 1:
+ scene->_talkAction = 3858;
+ break;
+ case 2:
+ scene->_talkAction = 3859;
+ break;
+ case 3:
+ scene->_talkAction = 3860;
+ break;
+ case 4:
+ scene->_talkAction = 3861;
+ break;
+ default:
+ BF_GLOBALS._deziTopic = 3;
+ scene->_talkAction = 3868;
+ break;
+ }
+
+ scene->_jimFlag = 1;
+ scene->setAction(&scene->_action1);
+ }
+ return true;
+ case INV_PRINT_OUT:
+ if (!BF_GLOBALS.getFlag(fGotPointsForMCard)) {
+ T2_GLOBALS._uiElements.addScore(30);
+ BF_GLOBALS.getFlag(fGotPointsForMCard);
+
+ scene->setAction(&scene->_action2);
+ return true;
+ }
+ break;
+ default:
+ break;
+ }
+
+ return NamedObject::startAction(action, event);
+}
+
+bool Scene385::Dezi::startAction(CursorType action, Event &event) {
+ Scene385 *scene = (Scene385 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_TALK:
+ if (BF_GLOBALS._deziTopic == 3) {
+ scene->_talkAction = 3857;
+ } else {
+ BF_GLOBALS._deziTopic = 3;
+
+ switch (BF_GLOBALS._dayNumber) {
+ case 1:
+ if (BF_GLOBALS._deziTopic++ == 0) {
+ scene->_talkAction = 3850;
+ } else {
+ BF_GLOBALS._deziTopic = 3;
+ scene->_talkAction = 3851;
+ }
+ break;
+ case 2:
+ if (BF_GLOBALS._deziTopic++ == 0) {
+ scene->_talkAction = 3852;
+ } else {
+ BF_GLOBALS._deziTopic = 3;
+ scene->_talkAction = 3853;
+ }
+ break;
+ case 3:
+ if (BF_GLOBALS._deziTopic++ == 0) {
+ scene->_talkAction = 3854;
+ } else {
+ BF_GLOBALS._deziTopic = 3;
+ scene->_talkAction = 3855;
+ }
+ break;
+ case 4:
+ BF_GLOBALS._deziTopic = 3;
+ scene->_talkAction = 3856;
+ break;
+ default:
+ BF_GLOBALS._deziTopic = 3;
+ scene->_talkAction = 3868;
+ break;
+ }
+ }
+
+ scene->setAction(&scene->_action1);
+ return true;
+ case INV_PRINT_OUT:
+ scene->_talkAction = 3863;
+ scene->setAction(&scene->_action1);
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene385::Exit::startAction(CursorType action, Event &event) {
+ ADD_PLAYER_MOVER(BF_GLOBALS._player._position.x - 100, BF_GLOBALS._player._position.y + 100);
+ return true;
+}
+
+/*--------------------------------------------------------------------------*/
+
+
+Scene385::Scene385(): SceneExt() {
+ _talkAction = _jimFlag = 0;
+}
+
+void Scene385::synchronize(Serializer &s) {
+ SceneExt::synchronize(s);
+ s.syncAsSint16LE(_talkAction);
+ s.syncAsSint16LE(_jimFlag);
+}
+
+void Scene385::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+ if (BF_GLOBALS._dayNumber == 0)
+ BF_GLOBALS._dayNumber = 1;
+
+ _exit.setDetails(Rect(0, 162, 320, 167), 385, -1, -1, -1, 1, NULL);
+ BF_GLOBALS._sound1.fadeSound(119);
+
+ loadScene(385);
+ setZoomPercents(115, 90, 145, 100);
+
+ _stripManager.addSpeaker(&_gameTextSpeaker);
+ _stripManager.addSpeaker(&_jake385Speaker);
+ _stripManager.addSpeaker(&_jimSpeaker);
+ _stripManager.addSpeaker(&_deziSpeaker);
+
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.setVisage(BF_GLOBALS.getFlag(onDuty) ? 361 : 368);
+ BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ BF_GLOBALS._player.changeZoom(-1);
+ BF_GLOBALS._player.enableControl();
+
+ _item3.setDetails(1, 385, 5, -1, -1, 1);
+ _item2.setDetails(2, 385, 7, -1, -1, 1);
+ _item1.setDetails(3, 385, 6, -1, 6, 1);
+ _item5.setDetails(4, 385, 14, -1, -1, 1);
+
+ _jim.postInit();
+ _jim.setVisage(385);
+ _jim.setStrip(3);
+ _jim.setPosition(Common::Point(304, 113));
+ _jim.setDetails(385, 1, -1, 2, 1, NULL);
+
+ _dezi.postInit();
+ _dezi.setVisage(385);
+ _dezi.setStrip(2);
+ _dezi.setPosition(Common::Point(235, 93));
+ _dezi.fixPriority(120);
+ _dezi.setDetails(385, 3, -1, 2, 1, NULL);
+
+ _door.postInit();
+ _door.setVisage(385);
+ _door.setPosition(Common::Point(107, 27));
+ _door.setDetails(385, 0, -1, -1, 1, NULL);
+
+ BF_GLOBALS._walkRegions.proc1(6);
+
+ if (BF_GLOBALS._sceneManager._previousScene == 390) {
+ BF_GLOBALS._player.setPosition(Common::Point(109, 119));
+ } else {
+ BF_GLOBALS._player.disableControl();
+ BF_GLOBALS._player.setPosition(Common::Point(15, 250));
+ _sceneMode = 3852;
+ setAction(&_sequenceManager, this, 3852, &BF_GLOBALS._player, NULL);
+ }
+
+ _item4.setDetails(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), 385, 4, -1, -1, 1, NULL);
+}
+
+void Scene385::signal() {
+ switch (_sceneMode) {
+ case 3850:
+ BF_GLOBALS._sceneManager.changeScene(390);
+ break;
+ case 3851:
+ BF_GLOBALS._sceneManager.changeScene(380);
+ break;
+ case 3852:
+ BF_GLOBALS._player.enableControl();
+ break;
+ }
+}
+
+void Scene385::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(EXITFRAME_SW);
+ 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 Scene385::dispatch() {
+ SceneExt::dispatch();
+
+ if (!_action && (BF_GLOBALS._player._position.y > 162)) {
+ // Leaving by exit
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 3851;
+ setAction(&_sequenceManager, this, 3851, &BF_GLOBALS._player, NULL);
+ }
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 390 - City Jail
+ *
+ *--------------------------------------------------------------------------*/
+
+void Scene390::Action1::signal() {
+ Scene390 *scene = (Scene390 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ setDelay(1);
+ break;
+ case 1:
+ switch (scene->_sceneMode) {
+ case 3900:
+ case 3905:
+ case 3906:
+ case 3913:
+ case 3914:
+ case 3916:
+ case 3917: {
+ ADD_PLAYER_MOVER(75, 122);
+ break;
+ }
+ default: {
+ ADD_PLAYER_MOVER(147, 133);
+ break;
+ }
+ }
+ break;
+ case 2:
+ switch (scene->_sceneMode) {
+ case 3900:
+ case 3905:
+ case 3906:
+ case 3913:
+ case 3914:
+ case 3916:
+ case 3917: {
+ BF_GLOBALS._player.changeAngle(315);
+ break;
+ }
+ default: {
+ BF_GLOBALS._player.changeAngle(90);
+ break;
+ }
+ }
+ setDelay(1);
+ break;
+ case 3:
+ scene->_stripManager.start(scene->_sceneMode, this);
+ break;
+ case 4:
+ BF_GLOBALS._player.enableControl();
+ remove();
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene390::BookingForms::startAction(CursorType action, Event &event) {
+ Scene390 *scene = (Scene390 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_USE:
+ if (_flag) {
+ SceneItem::display2(390, 16);
+ } else if (!BF_GLOBALS.getFlag(onDuty)) {
+ SceneItem::display2(390, 22);
+ } else if (((BF_GLOBALS._bookmark < bLauraToParamedics) && BF_GLOBALS.getFlag(greenTaken)) ||
+ ((BF_GLOBALS._bookmark >= bStoppedFrankie) && !BF_GLOBALS.getFlag(frankInJail) && (BF_GLOBALS._dayNumber == 1))) {
+ BF_GLOBALS._player.disableControl();
+ ++_flag;
+ scene->_sceneMode = 3902;
+ setAction(&scene->_sequenceManager, scene, 3902, &BF_GLOBALS._player, NULL);
+ } else {
+ SceneItem::display2(390, 23);
+ }
+ return true;
+ default:
+ return NamedHotspotExt::startAction(action, event);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene390::Green::startAction(CursorType action, Event &event) {
+ Scene390 *scene = (Scene390 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_TALK:
+ if (!_flag) {
+ ++_flag;
+ scene->_sceneMode = 3901;
+ } else {
+ scene->_sceneMode = 3902;
+ }
+ scene->setAction(&scene->_action1);
+ return true;
+ case INV_MIRANDA_CARD:
+ if (BF_GLOBALS.getFlag(readGreenRights)) {
+ SceneItem::display2(390, 15);
+ } else {
+ T2_GLOBALS._uiElements.addScore(30);
+ BF_GLOBALS.setFlag(readGreenRights);
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 3904;
+
+ scene->setAction(&scene->_sequenceManager, scene, 3904, &BF_GLOBALS._player, this, NULL);
+ }
+ return true;
+ default:
+ return NamedObjectExt::startAction(action, event);
+ }
+}
+
+bool Scene390::Object2::startAction(CursorType action, Event &event) {
+ Scene390 *scene = (Scene390 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_TALK:
+ if (!_flag)
+ break;
+
+ if (!BF_GLOBALS.getFlag(onDuty)) {
+ scene->_sceneMode = 3917;
+ } else if (BF_GLOBALS.getFlag(fTalkedToBarry) && !BF_GLOBALS.getFlag(fTalkedToLarry)) {
+ scene->_sceneMode = 3913;
+ } else if (!BF_GLOBALS.getFlag(fTalkedToLarry)) {
+ scene->_sceneMode = 3914;
+ } else {
+ ++_flag;
+
+ if (BF_GLOBALS._sceneObjects->contains(&scene->_green)) {
+ scene->_sceneMode = 3900;
+ } else if (!BF_GLOBALS._sceneObjects->contains(&scene->_green)) {
+ scene->_sceneMode = 3905;
+ } else if (BF_GLOBALS.getFlag(fCuffedFrankie)) {
+ scene->_sceneMode = 3906;
+ } else {
+ scene->_sceneMode = 3916;
+ }
+ }
+
+ BF_GLOBALS.setFlag(fTalkedToLarry);
+ scene->setAction(&scene->_action1);
+ return true;
+ case INV_BOOKING_GREEN:
+ if (BF_GLOBALS._bookmark >= bLauraToParamedics)
+ SceneItem::display2(390, 21);
+ else {
+ BF_GLOBALS._player.disableControl();
+ BF_GLOBALS._bookmark = bLauraToParamedics;
+ scene->_sceneMode = 3905;
+
+ BF_INVENTORY.setObjectScene(INV_GREEN_ID, 390);
+ if (BF_GLOBALS.getFlag(fLeftTraceIn910))
+ BF_GLOBALS.clearFlag(fLeftTraceIn910);
+
+ scene->setAction(&scene->_sequenceManager, scene, 3905, &BF_GLOBALS._player, this, NULL);
+ BF_GLOBALS.clearFlag(f1015Marina);
+ BF_GLOBALS.clearFlag(f1027Marina);
+ BF_GLOBALS.clearFlag(f1035Marina);
+ }
+ return true;
+ case INV_BOOKING_FRANKIE:
+ case INV_BOOKING_GANG:
+ if (BF_GLOBALS.getFlag(frankInJail)) {
+ SceneItem::display2(390, 21);
+ } else {
+ scene->_sceneMode = 3905;
+ BF_GLOBALS._player.disableControl();
+ scene->setAction(&scene->_sequenceManager, scene, 3905, &BF_GLOBALS._player, this, NULL);
+
+ BF_INVENTORY.setObjectScene(INV_FRANKIE_ID, 390);
+ BF_INVENTORY.setObjectScene(INV_TYRONE_ID, 390);
+ BF_GLOBALS.clearFlag(frankInJail);
+ BF_GLOBALS.clearFlag(f1015Frankie);
+ BF_GLOBALS.clearFlag(f1027Frankie);
+ BF_GLOBALS.clearFlag(f1035Frankie);
+ }
+ return true;
+ default:
+ break;
+ }
+
+ return NamedObjectExt::startAction(action, event);
+}
+
+bool Scene390::Object3::startAction(CursorType action, Event &event) {
+ Scene390 *scene = (Scene390 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case INV_GREEN_ID:
+ scene->_sceneMode = 3903;
+ setAction(&scene->_sequenceManager, scene, 3902, &BF_GLOBALS._player, NULL);
+ remove();
+ BF_INVENTORY.setObjectScene(INV_BOOKING_GREEN, 1);
+ return true;
+ case INV_FRANKIE_ID:
+ BF_INVENTORY.setObjectScene(INV_BOOKING_FRANKIE, 1);
+ scene->_sceneMode = 3903;
+ setAction(&scene->_sequenceManager, scene, 3902, &BF_GLOBALS._player, NULL);
+ remove();
+ return true;
+ case INV_TYRONE_ID:
+ scene->_sceneMode = 3903;
+ setAction(&scene->_sequenceManager, scene, 3902, &BF_GLOBALS._player, NULL);
+ remove();
+ BF_INVENTORY.setObjectScene(INV_BOOKING_GANG, 1);
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene390::GangMember1::startAction(CursorType action, Event &event) {
+ Scene390 *scene = (Scene390 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_TALK:
+ scene->_sceneMode = 3908;
+ scene->setAction(&scene->_action1);
+ return true;
+ case INV_MIRANDA_CARD:
+ if (BF_GLOBALS.getFlag(readFrankRights)) {
+ SceneItem::display2(390, 15);
+ } else {
+ BF_GLOBALS.setFlag(readFrankRights);
+ T2_GLOBALS._uiElements.addScore(30);
+ BF_GLOBALS._player.disableControl();
+
+ scene->_sceneMode = 3904;
+ scene->setAction(&scene->_sequenceManager, scene, 3907, &BF_GLOBALS._player, NULL);
+ }
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene390::GangMember2::startAction(CursorType action, Event &event) {
+ Scene390 *scene = (Scene390 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_TALK:
+ scene->_sceneMode = 3909;
+ scene->setAction(&scene->_action1);
+ return true;
+ case INV_MIRANDA_CARD:
+ if (BF_GLOBALS.getFlag(readFrankRights)) {
+ SceneItem::display2(390, 15);
+ } else {
+ T2_GLOBALS._uiElements.addScore(30);
+ BF_GLOBALS.setFlag(readFrankRights);
+ BF_GLOBALS._player.disableControl();
+
+ scene->_sceneMode = 3904;
+ scene->setAction(&scene->_sequenceManager, scene, 3907, &BF_GLOBALS._player, NULL);
+ }
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene390::Door::startAction(CursorType action, Event &event) {
+ Scene390 *scene = (Scene390 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_USE:
+ if ((BF_INVENTORY.getObjectScene(INV_BOOKING_GREEN) == 1) && (BF_INVENTORY.getObjectScene(INV_GREEN_ID) == 1)) {
+ scene->_stripManager.start(3918, &BF_GLOBALS._stripProxy);
+ } else if ((BF_INVENTORY.getObjectScene(INV_BOOKING_FRANKIE) == 1) && (BF_INVENTORY.getObjectScene(INV_FRANKIE_ID) == 1)) {
+ scene->_stripManager.start(3918, &BF_GLOBALS._stripProxy);
+ } else if ((BF_INVENTORY.getObjectScene(INV_BOOKING_GANG) == 1) && (BF_INVENTORY.getObjectScene(INV_TYRONE_ID) == 1)) {
+ scene->_stripManager.start(3918, &BF_GLOBALS._stripProxy);
+ } else {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 3900;
+ scene->setAction(&scene->_sequenceManager, scene, 3900, &BF_GLOBALS._player, this, NULL);
+ }
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene390::postInit(TsAGE::SceneObjectList *OwnerList) {
+ BF_GLOBALS._sound1.play(17);
+ SceneExt::postInit();
+ setZoomPercents(105, 85, 130, 100);
+ loadScene(390);
+
+ _stripManager.addSpeaker(&_gameTextSpeaker);
+ _stripManager.addSpeaker(&_jakeUniformSpeaker);
+ _stripManager.addSpeaker(&_jakeJacketSpeaker);
+ _stripManager.addSpeaker(&_greenSpeaker);
+ _stripManager.addSpeaker(&_jailerSpeaker);
+ _stripManager.addSpeaker(&_shooterSpeaker);
+ _stripManager.addSpeaker(&_driverSpeaker);
+
+ if (BF_GLOBALS._dayNumber == 0) {
+ BF_GLOBALS.setFlag(onDuty);
+ BF_GLOBALS._bookmark = bStoppedFrankie;
+ BF_GLOBALS.clearFlag(frankInJail);
+ BF_GLOBALS.setFlag(fTalkedToBarry);
+ BF_INVENTORY.setObjectScene(INV_22_SNUB, 1);
+ }
+
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.setVisage(BF_GLOBALS.getFlag(onDuty) ? 361 : 368);
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
+ BF_GLOBALS._player.setPosition(Common::Point(147, 114));
+ BF_GLOBALS._player.setStrip(6);
+ BF_GLOBALS._player.changeZoom(-1);
+
+ _object2.postInit();
+ _object2.setVisage(395);
+ _object2.setStrip(2);
+ _object2.setPosition(Common::Point(38, 84));
+ _object2.fixPriority(50);
+ _object2._flag = 0;
+ _object2.setDetails(390, 10, 17, 10, 1, NULL);
+
+ _door.postInit();
+ _door.setVisage(390);
+ _door.setStrip(2);
+ _door.setPosition(Common::Point(151, 18));
+ _door.setDetails(390, 5, -1, -1, 1, NULL);
+
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 3901;
+ setAction(&_sequenceManager, this, 3901, &BF_GLOBALS._player, NULL);
+
+ if ((BF_GLOBALS._bookmark < bLauraToParamedics) && BF_GLOBALS.getFlag(greenTaken)) {
+ _green.postInit();
+ _green.setVisage(392);
+ _green.setPosition(Common::Point(241, 164));
+ _green.fixPriority(153);
+ _green.setDetails(390, 12, -1, 13, 1, NULL);
+ _green._flag = 0;
+ }
+
+ if ((BF_GLOBALS._bookmark >= bStoppedFrankie) && !BF_GLOBALS.getFlag(frankInJail) && (BF_GLOBALS._dayNumber == 1)) {
+ _gangMember1.postInit();
+ _gangMember1.setVisage(396);
+ _gangMember1.setPosition(Common::Point(273, 169));
+ _gangMember1.fixPriority(152);
+ _gangMember1._flag = 0;
+ _gangMember1.setDetails(390, 19, -1, 20, 1, NULL);
+
+ _gangMember2.postInit();
+ _gangMember2.setVisage(396);
+ _gangMember2.setStrip(2);
+ _gangMember2.setPosition(Common::Point(241, 153));
+ _gangMember2.fixPriority(152);
+ _gangMember2._flag = 0;
+ _gangMember2.setDetails(390, 19, -1, 20, 1, NULL);
+ }
+
+ _item1.setDetails(Rect(22, 40, 77, 67), 390, 0, -1, 1, 1, NULL);
+ _bookingForms.setDetails(Rect(89, 46, 110, 65), 390, 2, -1, -1, 1, NULL);
+ _item3.setDetails(Rect(193, 0, 320, 165), 390, 4, -1, -1, 1, NULL);
+ _item4.setDetails(Rect(0, 0, 320, 170), 390, 7, -1, -1, 1, NULL);
+}
+
+void Scene390::signal() {
+ switch (_sceneMode) {
+ case 3900:
+ BF_GLOBALS._sound1.fadeOut2(NULL);
+ BF_GLOBALS._sceneManager.changeScene(385);
+ break;
+ case 3901:
+ case 3904:
+ if ((BF_INVENTORY.getObjectScene(INV_22_SNUB) == 410) && BF_GLOBALS._sceneObjects->contains(&_gangMember1)) {
+ _sceneMode = 3906;
+ setAction(&_sequenceManager, this, 3906, &BF_GLOBALS._player, &_object2, NULL);
+ } else if ((BF_INVENTORY.getObjectScene(INV_GREENS_KNIFE) == 370) && BF_GLOBALS._sceneObjects->contains(&_green)) {
+ _sceneMode = 3906;
+ setAction(&_sequenceManager, this, 3906, &BF_GLOBALS._player, &_object2, NULL);
+ } else {
+ BF_GLOBALS._player.enableControl();
+ }
+ break;
+ case 3902:
+ SceneItem::display2(390, 3);
+
+ _object3.postInit();
+ _object3.setVisage(390);
+ _object3.setPosition(Common::Point(250, 60));
+ _object3.fixPriority(255);
+ _object3.setDetails(390, 8, -1, 9, 2, NULL);
+
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 3903:
+ SceneItem::display2(390, 18);
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 3905:
+ T2_GLOBALS._uiElements.addScore(30);
+ _object2.remove();
+ BF_INVENTORY.setObjectScene(INV_HANDCUFFS, 1);
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 3906:
+ BF_GLOBALS._deathReason = 18;
+ BF_GLOBALS._sceneManager.changeScene(666);
+ break;
+ }
+}
+
+} // End of namespace BlueForce
+
+} // End of namespace TsAGE
diff --git a/engines/tsage/blue_force/blueforce_scenes3.h b/engines/tsage/blue_force/blueforce_scenes3.h
new file mode 100644
index 0000000000..2982fd3306
--- /dev/null
+++ b/engines/tsage/blue_force/blueforce_scenes3.h
@@ -0,0 +1,893 @@
+/* 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.
+ *
+ */
+
+#ifndef TSAGE_BLUEFORCE_SCENES3_H
+#define TSAGE_BLUEFORCE_SCENES3_H
+
+#include "common/scummsys.h"
+#include "tsage/blue_force/blueforce_logic.h"
+#include "tsage/blue_force/blueforce_speakers.h"
+#include "tsage/converse.h"
+#include "tsage/events.h"
+#include "tsage/core.h"
+#include "tsage/scenes.h"
+#include "tsage/globals.h"
+#include "tsage/sound.h"
+
+namespace TsAGE {
+
+namespace BlueForce {
+
+using namespace TsAGE;
+
+class Scene300: public SceneExt {
+ /* Objects */
+ class Object: public NamedObject {
+ public:
+ int _stripNumber;
+ public:
+ Object(int stripNumber) { _stripNumber = stripNumber; }
+
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Object19: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Items */
+ class Item1: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Item2: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Item14: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Item15: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Actions */
+ class Action1: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action2: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action3: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action4: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action5: public Action {
+ public:
+ virtual void signal();
+ };
+private:
+ void setup();
+public:
+ SequenceManager _sequenceManager1, _sequenceManager2;
+ SequenceManager _sequenceManager3, _sequenceManager4;
+ NamedObject _object1;
+ FollowerObject _object2, _object3, _object4, _object5, _object6, _object7;
+ SceneObject _object8, _object9, _object10;
+ NamedObject _object11, _object12;
+ Object _object13, _object14, _object15, _object16;
+ NamedObject _object17, _object18;
+ Object19 _object19;
+ Item1 _item1;
+ Item2 _item2;
+ NamedHotspot _item3, _item4, _item5, _item6, _item7;
+ NamedHotspot _item8, _item9, _item10, _item11;
+ NamedHotspot _item12, _item13;
+ Item14 _item14;
+ Item15 _item15;
+ Action1 _action1;
+ Action2 _action2;
+ Action3 _action3;
+ Action4 _action4;
+ Action5 _action5;
+ SpeakerGameText _gameTextSpeaker;
+ SpeakerSutter _sutterSpeaker;
+ SpeakerDoug _dougSpeaker;
+ SpeakerJakeNoHead _jakeSpeaker;
+ TimerExt _timer;
+ int _field2760, _field2762;
+
+ Scene300();
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+ virtual void process(Event &event);
+ virtual void dispatch();
+};
+
+class Scene315: public SceneExt {
+ /* Objects */
+ class BulletinMemo: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Object2: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class ATFMemo: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Items */
+ class Barry: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class SutterSlot: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Sign: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class BulletinBoard: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class CleaningKit: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class BriefingMaterial: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class WestExit: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class SouthWestExit: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Actions */
+ class Action1: public Action {
+ public:
+ virtual void signal();
+ };
+public:
+ SequenceManager _sequenceManager;
+ SpeakerGameText _gameTextSpeaker;
+ SpeakerSutter _sutterSpeaker;
+ SpeakerHarrison _harrisonSpeaker;
+ SpeakerJakeJacket _jakeJacketSpeaker;
+ SpeakerJakeUniform _jakeUniformSpeaker;
+ SpeakerJailer _jailerSpeaker;
+ Barry _barry;
+ SutterSlot _sutterSlot;
+ NamedHotspot _item3;
+ Sign _sign;
+ BulletinBoard _bulletinBoard;
+ BulletinMemo _bulletinMemo;
+ Object2 _object2;
+ ATFMemo _atfMemo;
+ SceneObject _object4, _object5, _object6;
+ SceneObject _object7, _object8, _object9;
+ NamedHotspot _item6, _item7, _item8, _item9;
+ NamedHotspot _item10, _item11, _item12, _item13;
+ CleaningKit _cleaningKit;
+ BriefingMaterial _briefingMaterial;
+ WestExit _westExit;
+ SouthWestExit _swExit;
+ Action1 _action1;
+ int _field1390;
+ int _stripNumber;
+ int _field1398;
+ int _field1B60, _field1B62, _field1B64;
+ int _field1B66, _field1B6C, _field139C;
+ bool _field1B68, _field1B6A;
+ CursorType _currentCursor;
+
+ Scene315();
+ virtual void synchronize(Serializer &s);
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+ virtual void process(Event &event);
+ virtual void dispatch();
+};
+
+class Scene325: public SceneExt {
+ /* Items */
+ class Item1: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+public:
+ SequenceManager _sequenceManager;
+ SpeakerGameText _gameTextSpeaker;
+ SpeakerPSutter _PSutterSpeaker;
+ Item1 _item1;
+ NamedObject _object1, _object2, _object3, _object4, _object5;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+};
+
+class Scene330: public SceneExt {
+ class Timer1: public Timer {
+ public:
+ virtual void signal();
+ };
+public:
+ SequenceManager _sequenceManager;
+ NamedObject _object1;
+ SceneObject _object2;
+ ASoundExt _sound1, _sound2;
+ Timer1 _timer;
+ int _seqNumber;
+
+ Scene330();
+ virtual void synchronize(Serializer &s);
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void remove();
+ virtual void signal();
+};
+
+class Scene340: public PalettedScene {
+ /* Actions */
+ class Action1: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action2: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action3: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action4: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action5: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action6: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action7: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action8: public Action {
+ public:
+ virtual void signal();
+ void process(Event &event);
+ };
+
+ /* Items */
+ class Item1: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class WestExit: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class SouthWestExit: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class NorthExit: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Objects */
+ class Child: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Woman: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Harrison: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Timers */
+ class Timer2: public Timer {
+ public:
+ virtual void signal();
+ };
+public:
+ SequenceManager _sequenceManager1, _sequenceManager2, _sequenceManager3;
+ Child _child;
+ Woman _woman;
+ Harrison _harrison;
+ SceneObject _object4, _object5;
+ Item1 _item1;
+ NamedHotspot _item2, _item3;
+ WestExit _westExit;
+ SouthWestExit _swExit;
+ NorthExit _northExit;
+ Action1 _action1;
+ Action2 _action2;
+ Action3 _action3;
+ Action4 _action4;
+ Action5 _action5;
+ Action6 _action6;
+ Action7 _action7;
+ Action8 _action8;
+ SpeakerGameText _gameTextSpeaker;
+ SpeakerJordan _jordanSpeaker;
+ SpeakerSkipB _skipBSpeaker;
+ SpeakerJakeUniform _jakeUniformSpeaker;
+ SpeakerHarrison _harrisonSpeaker;
+ ASoundExt _sound1, _sound2;
+ TimerExt _timer1;
+ Timer2 _timer2;
+ int _seqNumber1, _field2652, _field2654;
+
+ Scene340();
+ virtual void synchronize(Serializer &s);
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void remove();
+ virtual void signal();
+ virtual void process(Event &event);
+ virtual void dispatch();
+};
+
+class Scene342: public PalettedScene {
+ /* Items */
+ class Item1: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class WestExit: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class SouthWestExit: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class NorthExit: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Objects */
+ class Lyle: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Timers */
+ class Timer1: public Timer {
+ public:
+ virtual void signal();
+ };
+public:
+ SequenceManager _sequenceManager1, _sequenceManager2;
+ Lyle _lyle;
+ NamedObject _object2;
+ SceneObject _object3, _object4;
+ Item1 _item1;
+ NamedHotspot _item2, _item3;
+ WestExit _westExit;
+ SouthWestExit _swExit;
+ NorthExit _northExit;
+ SpeakerGameText _gameTextSpeaker;
+ SpeakerJakeJacket _jakeJacketSpeaker;
+ SpeakerLyleHat _lyleHatSpeaker;
+ ASoundExt _sound1;
+ Timer1 _timer1;
+ int _field1A1A;
+
+ Scene342();
+ virtual void synchronize(Serializer &s);
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void remove();
+ virtual void signal();
+ virtual void process(Event &event);
+ virtual void dispatch();
+};
+
+class Scene350: public SceneExt {
+ /* Items */
+ class FireBox: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Yacht: public NamedHotspot {
+ public:
+ bool _flag;
+
+ virtual Common::String getClassName() { return "Scene350_Item6"; }
+ virtual void synchronize(Serializer &s);
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class SouthWestExit: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Objects */
+ class Hook: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class FireboxInset: public FocusObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Timers */
+ class Timer1: public Timer {
+ public:
+ virtual void signal();
+ };
+public:
+ SequenceManager _sequenceManager1, _sequenceManager2, _sequenceManager3;
+ NamedObject _harrison;
+ SceneObject _yachtDoor;
+ BackgroundSceneObject _yachtBody;
+ Hook _hook;
+ FireboxInset _fireBoxInset;
+ NamedHotspot _item1, _item2, _item3, _item4;
+ FireBox _fireBox;
+ Yacht _yacht;
+ SouthWestExit _swExit;
+ SpeakerGameText _gameTextSpeaker;
+ SpeakerJakeUniform _jakeUniformSpeaker;
+ SpeakerHarrison _harrisonSpeaker;
+ ASoundExt _sound1, _sound2;
+ Timer1 _timer1;
+ int _field1D44, _field1D46;
+
+ Scene350();
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void remove();
+ virtual void signal();
+ virtual void process(Event &event);
+ virtual void checkGun();
+};
+
+class Scene355: public PalettedScene {
+ /* Objects */
+ class Doorway: public NamedObject {
+ public:
+ int _v1, _v2, _v3;
+
+ Doorway() { _v1 = _v2 = _v3 = 0; }
+ virtual Common::String getClassName() { return "Scene355_Doorway"; }
+ virtual void synchronize(Serializer &s);
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Locker: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class LockerInset: public FocusObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Object5: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Green: public NamedObjectExt {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Lyle: public NamedObjectExt {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Object8: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Items */
+ class Item1: public SceneHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Item2: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Item3: public SceneHotspotExt {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Item4: public SceneHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Pouch: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Item11: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class RentalExit: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Actions */
+ class Action1: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action2: public Action {
+ public:
+ virtual void signal();
+ };
+public:
+ SequenceManager _sequenceManager;
+ SpeakerGameText _gameTextSpeaker;
+ SpeakerJakeUniform _jakeUniformSpeaker;
+ SpeakerJakeJacket _jakeJacketSpeaker;
+ SpeakerHarrison _harrisonSpeaker;
+ SpeakerLyleHat _lyleHatSpeaker;
+ SpeakerGreen _greenSpeaker;
+ NamedObject _harrison;
+ Doorway _doorway;
+ Locker _locker;
+ LockerInset _lockerInset;
+ Object5 _object5;
+ Green _green;
+ Lyle _lyle;
+ Object8 _object8;
+ NamedObject _object9, _object10, _object11;
+ Item1 _item1;
+ Item2 _item2;
+ Item3 _item3;
+ Item4 _item4;
+ Pouch _pouch;
+ NamedHotspot _item6, _item7, _item8;
+ NamedHotspot _item9, _item10;
+ Item11 _item11;
+ RentalExit _rentalExit;
+ ASoundExt _sound1, _sound2, _sound3;
+ Action1 _action1;
+ Action2 _action2;
+ int _nextSceneMode;
+ bool _modeFlag;
+
+ Scene355();
+ virtual void synchronize(Serializer &s);
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+ virtual void process(Event &event);
+ virtual void dispatch();
+
+ void setMode(bool mode, int sceneMode);
+};
+
+class Scene360: public SceneExt {
+ /* Objects */
+ class SlidingDoor: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Window: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Object4: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class BsseballCards: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Object6: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Object7: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Items */
+ class Item1: public SceneHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Item2: public SceneHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Item3: public SceneHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Barometer: public SceneHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Actions */
+ class Action1: public Action {
+ public:
+ virtual void signal();
+ };
+public:
+ SequenceManager _sequenceManager1, _sequenceManager2;
+ SpeakerGameText _gameTextSpeaker;
+ SpeakerJakeUniform _jakeUniformSpeaker;
+ SpeakerHarrison _harrisonSpeaker;
+ SpeakerGreen _greenSpeaker;
+ SlidingDoor _slidingDoor;
+ SceneObject _object2;
+ Window _window;
+ Object4 _object4;
+ BsseballCards _baseballCards;
+ Object6 _object6;
+ Object7 _object7;
+ Item1 _item1;
+ Item2 _item2;
+ Item3 _item3;
+ Barometer _barometer;
+ Action1 _action1;
+ ASound _sound1;
+ int _field380;
+
+ Scene360();
+ virtual void synchronize(Serializer &s);
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+ virtual void process(Event &event);
+ virtual void dispatch();
+};
+
+class Scene370: public SceneExt {
+ /* Items */
+ class Item1: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Item6: public SceneHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Exit: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Objects */
+ class GreensGun: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Green: public NamedObject2 {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Harrison: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Laura: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Speakers */
+ class SpeakerLaura370: public SpeakerLaura {
+ public:
+ virtual void setText(const Common::String &msg);
+ };
+public:
+ SequenceManager _sequenceManager;
+ SpeakerGameText _gameTextSpeaker;
+ SpeakerJakeUniform _jakeUniformSpeaker;
+ SpeakerLaura _lauraSpeaker;
+ SpeakerLauraHeld _lauraHeldSpeaker;
+ SpeakerGreen _greenSpeaker;
+ SpeakerHarrison _harrisonSpeaker;
+ GreensGun _greensGun;
+ Green _green;
+ Harrison _harrison;
+ Laura _laura;
+ NamedObject _object5;
+ SceneObject _object6;
+ Item1 _item1;
+ NamedHotspot _item2, _item3, _item4, _item5;
+ Item6 _item6;
+ Exit _exit;
+ ASound _sound1;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+ virtual void process(Event &event);
+ virtual void dispatch();
+};
+
+class Scene380: public SceneExt {
+ /* Objects */
+ class Vechile: public NamedObjectExt {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Door: public NamedObjectExt {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+public:
+ SequenceManager _sequenceManager;
+ SpeakerGameText _gameTextSpeaker;
+ Vechile _vechile;
+ Door _door;
+ NamedHotspot _item1, _item2, _item3, _item4, _item5;
+ NamedHotspot _item6, _item7, _item8, _item9;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+};
+
+class Scene385: public SceneExt {
+ /* Items */
+ class Exit: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Objects */
+ class Door: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Jim: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Dezi: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Actions */
+ class Action1: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action2: public Action {
+ public:
+ virtual void signal();
+ };
+public:
+ SequenceManager _sequenceManager;
+ Action1 _action1;
+ Action2 _action2;
+ Door _door;
+ Jim _jim;
+ Dezi _dezi;
+ SpeakerGameText _gameTextSpeaker;
+ SpeakerJim _jimSpeaker;
+ SpeakerDezi _deziSpeaker;
+ SpeakerJake385 _jake385Speaker;
+ NamedHotspot _item1, _item2, _item3, _item4, _item5;
+ Exit _exit;
+ int _talkAction, _jimFlag;
+
+ Scene385();
+ virtual void synchronize(Serializer &s);
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+ virtual void process(Event &event);
+ virtual void dispatch();
+};
+
+class Scene390: public SceneExt {
+ /* Items */
+ class BookingForms: public NamedHotspotExt {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Objects */
+ class Green: public NamedObjectExt {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Object2: public NamedObjectExt {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Object3: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class GangMember1: public NamedObjectExt {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class GangMember2: public NamedObjectExt {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Door: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Actions */
+ class Action1: public Action {
+ public:
+ virtual void signal();
+ };
+public:
+ SequenceManager _sequenceManager;
+ SpeakerGameText _gameTextSpeaker;
+ SpeakerJakeUniform _jakeUniformSpeaker;
+ SpeakerJakeJacket _jakeJacketSpeaker;
+ SpeakerGreen _greenSpeaker;
+ SpeakerJailer _jailerSpeaker;
+ SpeakerDriver _driverSpeaker;
+ SpeakerShooter _shooterSpeaker;
+ Action1 _action1;
+ Green _green;
+ Object2 _object2;
+ Object3 _object3;
+ GangMember1 _gangMember1;
+ GangMember2 _gangMember2;
+ Door _door;
+ NamedHotspot _item1, _item3, _item4;
+ BookingForms _bookingForms;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+};
+
+} // End of namespace BlueForce
+
+} // End of namespace TsAGE
+
+#endif
diff --git a/engines/tsage/blue_force/blueforce_scenes4.cpp b/engines/tsage/blue_force/blueforce_scenes4.cpp
new file mode 100644
index 0000000000..814a2fff7f
--- /dev/null
+++ b/engines/tsage/blue_force/blueforce_scenes4.cpp
@@ -0,0 +1,1674 @@
+/* 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_scenes4.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 410 - Traffic Stop Gang Members
+ *
+ *--------------------------------------------------------------------------*/
+
+void Scene410::Action1::signal() {
+ Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (scene->_field1FB6++) {
+ case 0:
+ if (BF_GLOBALS.getFlag(fTalkedDriverNoBkup)) {
+ setDelay(3);
+ } else {
+ scene->_sceneMode = 4101;
+ scene->_stripManager.start(4103, scene);
+ }
+ break;
+ case 1:
+ scene->_sceneMode = 0;
+ scene->_stripManager.start(4104, scene);
+ break;
+ case 2:
+ scene->_sceneMode = 0;
+ scene->_stripManager.start(4105, scene);
+ break;
+ default:
+ scene->_sceneMode = 0;
+ scene->_stripManager.start(4106, scene);
+ break;
+ }
+}
+
+void Scene410::Action2::signal() {
+ Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene;
+ BF_GLOBALS._player.disableControl();
+
+ switch (scene->_talkCount++) {
+ case 0:
+ scene->_sceneMode = 4105;
+ scene->_stripManager.start(BF_GLOBALS.getFlag(fTalkedShooterNoBkup) ? 4123 : 4107, scene);
+ break;
+ case 1:
+ scene->_sceneMode = 4110;
+ scene->_stripManager.start(4102, scene);
+ break;
+ case 2:
+ scene->_sceneMode = 0;
+ scene->_stripManager.start(4108, scene);
+ break;
+ case 3:
+ scene->_sceneMode = 0;
+ scene->_stripManager.start(4109, scene);
+ break;
+ case 4:
+ scene->_sceneMode = 0;
+ scene->_stripManager.start(4110, scene);
+ break;
+ default:
+ SceneItem::display(410, 11, SET_WIDTH, 300,
+ SET_X, GLOBALS._sceneManager._scene->_sceneBounds.left + 10,
+ SET_Y, GLOBALS._sceneManager._scene->_sceneBounds.top + UI_INTERFACE_Y + 2,
+ SET_FONT, 4, SET_BG_COLOR, 1, SET_FG_COLOR, 13, SET_EXT_BGCOLOR, 82,
+ SET_EXT_FGCOLOR, 13, LIST_END);
+ BF_GLOBALS._player.enableControl();
+ break;
+ }
+}
+
+void Scene410::Action3::signal() {
+ Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene;
+ if (BF_GLOBALS.getFlag(fTalkedShooterNoBkup)) {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 2;
+ scene->setAction(&scene->_sequenceManager1, scene, 4102, &scene->_passenger, &BF_GLOBALS._player, NULL);
+ } else {
+ BF_GLOBALS.setFlag(fTalkedShooterNoBkup);
+ scene->_sceneMode = 0;
+ scene->_stripManager.start(4107, scene);
+ }
+}
+
+void Scene410::Action4::signal() {
+ Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ if (scene->_field1FC4 == 0) {
+ ADD_PLAYER_MOVER(114, 133);
+ } else {
+ ADD_PLAYER_MOVER(195, 139);
+ }
+ break;
+ case 1:
+ BF_GLOBALS._player.updateAngle(scene->_passenger._position);
+ setDelay(3);
+ break;
+ case 2:
+ setDelay(3);
+ break;
+ case 3:
+ if (BF_GLOBALS.getFlag(fCalledBackup))
+ scene->setAction(&scene->_action2);
+ else
+ scene->setAction(&scene->_action3);
+ remove();
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene410::Action5::signal() {
+ Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ if (scene->_field1FC4 == 0) {
+ ADD_PLAYER_MOVER(114, 133);
+ } else {
+ ADD_PLAYER_MOVER(195, 139);
+ }
+ break;
+ case 1:
+ BF_GLOBALS._player.updateAngle(scene->_passenger._position);
+ setDelay(3);
+ break;
+ case 2:
+ setDelay(3);
+ break;
+ case 3:
+ if (BF_GLOBALS.getFlag(fCalledBackup))
+ scene->setAction(&scene->_action2);
+ else
+ scene->setAction(&scene->_action3);
+ remove();
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene410::Action6::signal() {
+ Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ if (scene->_field1FC4 == 0) {
+ ADD_PLAYER_MOVER(114, 133);
+ } else {
+ ADD_PLAYER_MOVER(126, 99);
+ }
+ break;
+ case 1:
+ BF_GLOBALS._player.updateAngle(scene->_driver._position);
+ setDelay(3);
+ break;
+ case 2:
+ setDelay(3);
+ break;
+ case 3:
+ if (BF_GLOBALS.getFlag(fCalledBackup))
+ scene->setAction(&scene->_action1);
+ else
+ scene->setAction(&scene->_action4);
+ remove();
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene410::Action7::signal() {
+ Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ BF_GLOBALS._player.disableControl();
+ setDelay(2);
+ break;
+ case 1:
+ BF_GLOBALS._bookmark = bStoppedFrankie;
+ BF_GLOBALS.set2Flags(f1098Frankie);
+ BF_GLOBALS.clearFlag(f1098Marina);
+ scene->_stripManager.start(4113, this);
+ break;
+ case 2:
+ case 4:
+ setDelay(2);
+ break;
+ case 3:
+ BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
+ BF_GLOBALS._player.updateAngle(Common::Point(100, 170));
+ scene->setAction(&scene->_sequenceManager1, this, 4112, &scene->_driver, &scene->_passenger,
+ &scene->_harrison, NULL);
+ break;
+ case 5:
+ T2_GLOBALS._uiElements.addScore(30);
+ setAction(&scene->_sequenceManager1, this, 4118, &BF_GLOBALS._player, NULL);
+ BF_GLOBALS._player.disableControl();
+ break;
+ case 6:
+ scene->_sceneMode = 3;
+ scene->signal();
+ break;
+ default:
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene410::Motorcycle::startAction(CursorType action, Event &event) {
+ Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_USE:
+ if (!BF_GLOBALS.getFlag(fCalledBackup)) {
+ scene->_sceneMode = 4103;
+ scene->signal();
+ } else if (BF_GLOBALS.getFlag(fSearchedTruck) && !BF_GLOBALS._sceneObjects->contains(&scene->_harrison)) {
+ scene->_sceneMode = 4103;
+ scene->signal();
+ } else if (scene->_field1FBC != 0) {
+ SceneItem::display2(410, 12);
+ } else {
+ scene->_sceneMode = 4103;
+ scene->signal();
+ }
+ return true;
+ default:
+ return NamedHotspot::startAction(action, event);
+ }
+}
+
+bool Scene410::TruckFront::startAction(CursorType action, Event &event) {
+ Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_USE:
+ if ((BF_GLOBALS._bookmark < bStoppedFrankie) && (!scene->_field1FBC || !scene->_field1FBA))
+ break;
+ else if (BF_GLOBALS.getFlag(fSearchedTruck))
+ SceneItem::display2(410, 13);
+ else if (BF_GLOBALS.getFlag(fGangInCar)) {
+ T2_GLOBALS._uiElements.addScore(30);
+ scene->_sceneMode = 4118;
+ scene->signal();
+ } else {
+ scene->setAction(&scene->_action7);
+ }
+ return true;
+ default:
+ break;
+ }
+
+ return NamedHotspot::startAction(action, event);
+}
+
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene410::Driver::startAction(CursorType action, Event &event) {
+ Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_USE:
+ if (!BF_GLOBALS.getFlag(fCalledBackup)) {
+ if (BF_GLOBALS.getFlag(fTalkedDriverNoBkup)) {
+ scene->setAction(&scene->_action4);
+ } else {
+ SceneItem::display2(410, 7);
+ }
+ } else if (!scene->_field1FBC) {
+ SceneItem::display2(410, 7);
+ } else if (!scene->_field1FC0) {
+ scene->_sceneMode = 4124;
+ scene->_field1FC0 = 1;
+ T2_GLOBALS._uiElements.addScore(30);
+ scene->signal();
+ } else {
+ break;
+ }
+ return true;
+ case CURSOR_TALK:
+ BF_GLOBALS._player.setAction(&scene->_action6);
+ return true;
+ case INV_HANDCUFFS:
+ if (BF_GLOBALS.getFlag(fCalledBackup)) {
+ if ((scene->_talkCount < 5) || (scene->_field1FB6 < 1) || (scene->_field1FBC != 0))
+ break;
+
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 4123;
+ scene->_stripManager.start(4125, scene);
+ scene->_field1FBC = 1;
+ T2_GLOBALS._uiElements.addScore(30);
+ } else {
+ if (BF_GLOBALS.getFlag(fTalkedDriverNoBkup)) {
+ scene->setAction(&scene->_action4);
+ } else {
+ break;
+ }
+ }
+ return true;
+ case INV_TICKET_BOOK:
+ if (!BF_GLOBALS.getFlag(fDriverOutOfTruck)) {
+ return startAction(CURSOR_TALK, event);
+ } else if (!scene->_field1FC4) {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 2;
+ scene->setAction(&scene->_sequenceManager1, scene, 4120, &scene->_passenger, &BF_GLOBALS._player, NULL);
+ } else if ((scene->_field1FBC != 0) || (scene->_field1FC2 != 0)) {
+ break;
+ } else {
+ scene->_field1FC2 = 1;
+ T2_GLOBALS._uiElements.addScore(30);
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 4127;
+ scene->setAction(&scene->_sequenceManager1, scene, 4127, &BF_GLOBALS._player, &scene->_driver, NULL);
+ }
+ return true;
+ case INV_MIRANDA_CARD:
+ if (scene->_field1FBC == 0)
+ return false;
+
+ if (BF_GLOBALS.getFlag(readFrankRights)) {
+ SceneItem::display2(390, 15);
+ } else {
+ BF_GLOBALS.setFlag(readFrankRights);
+ T2_GLOBALS._uiElements.addScore(30);
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 0;
+
+ // TODO: Original code pushes a copy of the entirety of object1 onto stack
+ scene->setAction(&scene->_sequenceManager1, scene, 4126, &BF_GLOBALS._player, &scene->_driver, NULL);
+ }
+ return true;
+ default:
+ break;
+ }
+
+ return NamedObject::startAction(action, event);
+}
+
+bool Scene410::Passenger::startAction(CursorType action, Event &event) {
+ Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_USE:
+ if (!BF_GLOBALS.getFlag(fCalledBackup)) {
+ if (BF_GLOBALS.getFlag(fTalkedShooterNoBkup)) {
+ scene->setAction(&scene->_action3);
+ } else {
+ SceneItem::display2(410, 5);
+ }
+ } else if (!scene->_field1FBA) {
+ SceneItem::display2(410, 5);
+ } else if (!scene->_field1FBE) {
+ scene->_sceneMode = 4121;
+ scene->_field1FBE = 1;
+ T2_GLOBALS._uiElements.addScore(50);
+ scene->signal();
+ } else {
+ break;
+ }
+ return true;
+ case CURSOR_TALK:
+ scene->setAction(&scene->_action5);
+ return true;
+ case INV_HANDCUFFS:
+ if (BF_GLOBALS.getFlag(fCalledBackup)) {
+ if ((scene->_talkCount < 5) || (scene->_field1FBA != 0))
+ break;
+
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 9;
+ Common::Point destPos(195, 139);
+ PlayerMover *mover = new PlayerMover();
+ BF_GLOBALS._player.addMover(mover, &destPos, scene);
+ } else if (BF_GLOBALS.getFlag(fTalkedShooterNoBkup)) {
+ scene->setAction(&scene->_action3);
+ } else {
+ break;
+ }
+ return true;
+ case INV_MIRANDA_CARD:
+ if (!scene->_field1FBA)
+ break;
+
+ if (BF_GLOBALS.getFlag(readFrankRights)) {
+ SceneItem::display2(390, 15);
+ } else {
+ BF_GLOBALS.setFlag(readFrankRights);
+ T2_GLOBALS._uiElements.addScore(30);
+ BF_GLOBALS._player.disableControl();
+
+ scene->_sceneMode = 0;
+ scene->setAction(&scene->_sequenceManager1, scene, 4125, &BF_GLOBALS._player,
+ &scene->_passenger, NULL);
+ }
+ return true;
+ default:
+ break;
+ }
+
+ return NamedObject::startAction(action, event);
+}
+
+bool Scene410::Harrison::startAction(CursorType action, Event &event) {
+ Scene410 *scene = (Scene410 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_TALK:
+ if (BF_GLOBALS._bookmark == bStoppedFrankie) {
+ if (BF_GLOBALS.getFlag(fSearchedTruck)) {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 8;
+
+ Common::Point destPos(147, 143);
+ PlayerMover *mover = new PlayerMover();
+ BF_GLOBALS._player.addMover(mover, &destPos, scene);
+ } else {
+ SceneItem::display2(350, 13);
+ }
+ } else if ((scene->_field1FBA != 0) && (scene->_field1FBC != 0)) {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 4112;
+ scene->_stripManager.start(4113, scene);
+ BF_GLOBALS._bookmark = bStoppedFrankie;
+ BF_GLOBALS.set2Flags(f1098Frankie);
+ BF_GLOBALS.clearFlag(f1098Marina);
+ } else if ((BF_INVENTORY.getObjectScene(INV_HANDCUFFS) == 1) ||
+ (!scene->_field1FBA && (scene->_talkCount < 5))) {
+ SceneItem::display2(350, 13);
+ } else if (!scene->_field1FBA) {
+ if (scene->_field1FBA)
+ error("Error - want to cuff shooter, but he's cuffed already");
+
+ BF_GLOBALS._player.disableControl();
+ scene->_field1FBA = 1;
+ scene->_field1FBE = 1;
+ BF_GLOBALS._walkRegions.proc2(22);
+ scene->_sceneMode = 4122;
+ scene->_stripManager.start(4112, scene);
+ } else if (scene->_field1FB6 < 1) {
+ break;
+ } else if (scene->_field1FBC != 0) {
+ error("Error - want to cuff driver, but he's cuffed already");
+ } else {
+ BF_GLOBALS._player.disableControl();
+ scene->_field1FBC = 1;
+ scene->_field1FC0 = 1;
+ BF_GLOBALS._walkRegions.proc2(22);
+ scene->_sceneMode = 4109;
+ scene->_stripManager.start(4112, scene);
+ }
+ return true;
+ default:
+ break;
+ }
+
+ return NamedObject::startAction(action, event);
+}
+
+
+/*--------------------------------------------------------------------------*/
+
+Scene410::Scene410(): SceneExt() {
+ _field1FB6 = _talkCount = _field1FBA = _field1FBC = 0;
+ _field1FBE = _field1FC0 = _field1FC2 = _field1FC4 = 0;
+}
+
+void Scene410::synchronize(Serializer &s) {
+ SceneExt::synchronize(s);
+ s.syncAsSint16LE(_field1FB6);
+ s.syncAsSint16LE(_talkCount);
+ s.syncAsSint16LE(_field1FBA);
+ s.syncAsSint16LE(_field1FBC);
+ s.syncAsSint16LE(_field1FBE);
+ s.syncAsSint16LE(_field1FC0);
+ s.syncAsSint16LE(_field1FC2);
+ s.syncAsSint16LE(_field1FC4);
+}
+
+void Scene410::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+ loadScene(410);
+ setZoomPercents(74, 75, 120, 100);
+
+ if (BF_GLOBALS._sceneManager._previousScene != 60)
+ _sound1.fadeSound(11);
+ BF_GLOBALS._driveToScene = 64;
+ BF_GLOBALS._mapLocationId = 64;
+ BF_GLOBALS.setFlag(fArrivedAtGangStop);
+
+ _stripManager.addSpeaker(&_gameTextSpeaker);
+ _stripManager.addSpeaker(&_jakeUniformSpeaker);
+ _stripManager.addSpeaker(&_harrisonSpeaker);
+ _stripManager.addSpeaker(&_shooterSpeaker);
+ _stripManager.addSpeaker(&_driverSpeaker);
+
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.setVisage(1341);
+ BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
+ BF_GLOBALS._player.changeAngle(90);
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ BF_GLOBALS._player.setPosition(Common::Point(114, 133));
+ BF_GLOBALS._player.changeZoom(-1);
+
+ _motorcycle.setDetails(8, 410, 15, -1, -1, 1);
+
+ _passenger.postInit();
+ _passenger.setVisage(415);
+ _passenger.setStrip(1);
+ _passenger.setPosition(Common::Point(278, 92));
+ _passenger.setDetails(410, 4, -1, 5, 1, NULL);
+
+ _driver.postInit();
+ _driver.setVisage(416);
+ _driver.setStrip(2);
+ _driver.setPosition(Common::Point(244, 85));
+ _driver.setDetails(410, 6, -1, 7, 1, NULL);
+ _driver.changeZoom(-1);
+
+ _object5.postInit();
+ _object5.setVisage(410);
+ _object5.setStrip(2);
+ _object5.setPosition(Common::Point(282, 96));
+
+ _object6.postInit();
+ _object6.setVisage(410);
+ _object6.setStrip(4);
+ _object6.setPosition(Common::Point(240, 43));
+
+ _truckFront.setDetails(6, 410, 3, -1, -1, 1);
+ _truckBack.setDetails(7, 410, 3, -1, -1, 1);
+
+ switch (BF_GLOBALS._sceneManager._previousScene) {
+ case 415:
+ BF_GLOBALS.setFlag(fSearchedTruck);
+ BF_GLOBALS._player.setPosition(Common::Point(210, 90));
+
+ _passenger.remove();
+ _driver.remove();
+ BF_GLOBALS._walkRegions.proc1(21);
+ BF_GLOBALS._walkRegions.proc1(22);
+
+ _harrison.postInit();
+ _harrison.setVisage(343);
+ _harrison.setObjectWrapper(new SceneObjectWrapper());
+ _harrison.animate(ANIM_MODE_1, NULL);
+ _harrison.setDetails(350, 12, 13, 14, 1, NULL);
+ _harrison.setPosition(Common::Point(97, 185));
+ _harrison.changeZoom(-1);
+
+ _patrolCar.postInit();
+ _patrolCar.setVisage(410);
+ _patrolCar.setDetails(410, 8, 9, 10, 1, NULL);
+ _patrolCar.fixPriority(148);
+ _patrolCar.setPosition(Common::Point(39, 168));
+
+ _field1FC4 = 1;
+ _sceneMode = 0;
+ signal();
+ break;
+ case 60:
+ if (BF_GLOBALS.getFlag(fSearchedTruck)) {
+ _passenger.remove();
+ _driver.remove();
+ _sceneMode = 0;
+ } else {
+ _field1FC4 = BF_GLOBALS._v50CC8;
+ _field1FBA = BF_GLOBALS._v50CC2;
+ _talkCount = BF_GLOBALS._v50CC6;
+ _field1FB6 = BF_GLOBALS._v50CC4;
+
+ _passenger.setVisage(418);
+ _passenger.setStrip(6);
+ _passenger.setPosition(Common::Point(227, 137));
+
+ if (_talkCount > 0) {
+ _passenger.setVisage(415);
+ _passenger.setStrip(2);
+ _passenger.setFrame(5);
+ }
+ if (_field1FBA) {
+ _passenger.setVisage(415);
+ _passenger.setStrip(6);
+ _passenger.setFrame(8);
+ }
+
+ BF_GLOBALS._walkRegions.proc1(16);
+ if (BF_GLOBALS.getFlag(fDriverOutOfTruck)) {
+ _driver.setVisage(417);
+ _driver.setStrip(1);
+ _driver.setPosition(Common::Point(152, 97));
+
+ BF_GLOBALS._walkRegions.proc1(7);
+ }
+
+ if (BF_GLOBALS.getFlag(fCalledBackup)) {
+ BF_GLOBALS._walkRegions.proc1(21);
+ BF_GLOBALS._walkRegions.proc1(22);
+
+ _harrison.postInit();
+ _harrison.setVisage(343);
+ _harrison.setObjectWrapper(new SceneObjectWrapper());
+ _harrison.animate(ANIM_MODE_1, NULL);
+ _harrison.setDetails(350, 12, 13, 14, 1, NULL);
+ BF_GLOBALS._sceneItems.addBefore(&_driver, &_harrison);
+
+ _harrison.setPosition(Common::Point(-10, 124));
+ _harrison.changeZoom(-1);
+
+ _patrolCar.postInit();
+ _patrolCar.setVisage(410);
+ _patrolCar.setDetails(410, 8, 9, 10, 1, NULL);
+ _patrolCar.fixPriority(148);
+
+ if (_field1FC4) {
+ _harrison.setPosition(Common::Point(108, 112));
+ _patrolCar.fixPriority(148);
+ _patrolCar.setPosition(Common::Point(39, 168));
+
+ _sceneMode = 0;
+ } else {
+ _sceneMode = 4104;
+ }
+ } else {
+ _sceneMode = 0;
+ }
+
+ _field1FC4 = 1;
+ }
+ break;
+ case 50:
+ default:
+ BF_GLOBALS.setFlag(onDuty);
+ _sound1.play(21);
+ _sceneMode = 4100;
+ break;
+ }
+
+ signal();
+
+ _background.setDetails(Rect(0, 0, SCREEN_WIDTH, UI_INTERFACE_Y), 410, 0, 1, 2, 1, NULL);
+}
+
+void Scene410::signal() {
+ switch (_sceneMode) {
+ case 1:
+ BF_GLOBALS.set2Flags(f1097Frankie);
+ BF_GLOBALS.clearFlag(f1097Marina);
+
+ BF_GLOBALS._v50CC8 = _field1FC4;
+ BF_GLOBALS._v50CC2 = _field1FBA;
+ BF_GLOBALS._v50CC6 = _talkCount;
+ BF_GLOBALS._v50CC4 = _field1FB6;
+ BF_GLOBALS._sceneManager.changeScene(60);
+ break;
+ case 2:
+ BF_GLOBALS._deathReason = 3;
+ BF_GLOBALS._sound1.fadeOut2(NULL);
+ BF_GLOBALS._sceneManager.changeScene(666);
+ break;
+ case 3:
+ BF_GLOBALS._sceneManager.changeScene(415);
+ break;
+ case 5:
+ BF_INVENTORY.setObjectScene(INV_HANDCUFFS, 315);
+ _sceneMode = 0;
+ BF_GLOBALS.set2Flags(f1015Frankie);
+ BF_GLOBALS.clearFlag(f1015Marina);
+ signal();
+ break;
+ case 6:
+ BF_INVENTORY.setObjectScene(INV_22_SNUB, 1);
+ BF_INVENTORY.setObjectScene(INV_FRANKIE_ID, 1);
+ BF_GLOBALS.set2Flags(f1027Frankie);
+ BF_GLOBALS.clearFlag(f1027Marina);
+ _sceneMode = 0;
+ signal();
+ break;
+ case 7:
+ BF_INVENTORY.setObjectScene(INV_TYRONE_ID, 1);
+ signal();
+ break;
+ case 8:
+ BF_GLOBALS._walkRegions.proc2(22);
+ BF_GLOBALS._player.changeAngle(225);
+ _harrison.changeAngle(45);
+ _sceneMode = 4114;
+ _stripManager.start(4120, this);
+ break;
+ case 9:
+ _sceneMode = 4106;
+ _stripManager.start(4111, this);
+ _field1FBA = 1;
+ BF_GLOBALS.setFlag(fCuffedFrankie);
+ T2_GLOBALS._uiElements.addScore(30);
+ break;
+ case 10:
+ BF_GLOBALS._player.updateAngle(_harrison._position);
+ _sceneMode = 0;
+ break;
+ case 4100:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 0;
+ setAction(&_sequenceManager1, this, 4100, &_passenger, &_object5, NULL);
+ BF_GLOBALS._walkRegions.proc1(16);
+ break;
+ case 4101:
+ // Driver gets out of the car
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 0;
+ setAction(&_sequenceManager1, this, 4101, &_driver, &_object6, NULL);
+ BF_GLOBALS.setFlag(fDriverOutOfTruck);
+ BF_GLOBALS._walkRegions.proc1(7);
+ break;
+ case 4103:
+ // Click on moto to ask for backup
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 1;
+ setAction(&_sequenceManager1, this, 4103, &BF_GLOBALS._player, NULL);
+ break;
+ case 4104:
+ // After call for backup, patrol car is coming
+ _field1FC4 = 1;
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 0;
+ setAction(&_sequenceManager1, this, 4104, &_patrolCar, &_harrison, NULL);
+ break;
+ case 4105:
+ // Second guy gets nervous
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 0;
+ setAction(&_sequenceManager1, this, 4105, &_passenger, NULL);
+ break;
+ case 4106:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 4119;
+ setAction(&_sequenceManager1, this, 4106, &_passenger, NULL);
+ break;
+ case 4107:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 5;
+ setAction(&_sequenceManager1, this, 4107, &BF_GLOBALS._player, &_passenger, NULL);
+ break;
+ case 4108:
+ BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
+ BF_GLOBALS._player.updateAngle(Common::Point(100, 170));
+ BF_GLOBALS._walkRegions.proc2(22);
+ BF_GLOBALS._walkRegions.proc2(16);
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 0;
+ setAction(&_sequenceManager1, this, 4108, &_harrison, NULL);
+ break;
+ case 4109:
+ if ((BF_GLOBALS._player._position.x > 116) && (BF_GLOBALS._player._position.x != 195) &&
+ (BF_GLOBALS._player._position.y != 139)) {
+ ADD_PLAYER_MOVER(195, 139);
+ }
+
+ BF_GLOBALS._walkRegions.proc2(22);
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 0;
+ setAction(&_sequenceManager1, this, 4109, &_driver, &_harrison, NULL);
+ break;
+ case 4110:
+ // Harrisson takes care of the driver
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 0;
+ setAction(&_sequenceManager1, this, 4110, &_harrison, &_driver, NULL);
+ break;
+ case 4112:
+ BF_GLOBALS.setFlag(fGangInCar);
+ BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
+ BF_GLOBALS._player.updateAngle(Common::Point(100, 170));
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 4108;
+ setAction(&_sequenceManager1, this, 4112, &_driver, &_passenger, &_harrison, NULL);
+ break;
+ case 4114:
+ BF_GLOBALS._walkRegions.proc2(22);
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 4116;
+ setAction(&_sequenceManager1, this, 4114, &_harrison, &_patrolCar, NULL);
+ break;
+ case 4116:
+ BF_GLOBALS._walkRegions.proc2(21);
+ BF_GLOBALS._walkRegions.proc2(22);
+ _harrison.remove();
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 0;
+ setAction(&_sequenceManager1, this, 4116, &_patrolCar, NULL);
+ break;
+ case 4118:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 3;
+ setAction(&_sequenceManager1, this, 4118, &BF_GLOBALS._player, NULL);
+ break;
+ case 4119:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 4107;
+ setAction(&_sequenceManager1, this, 4119, &BF_GLOBALS._player, &_passenger, NULL);
+ break;
+ case 4121:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 6;
+ setAction(&_sequenceManager1, this, 4121, &BF_GLOBALS._player, &_passenger, NULL);
+ break;
+ case 4122:
+ BF_GLOBALS._walkRegions.proc2(22);
+ BF_INVENTORY.setObjectScene(INV_22_SNUB, 0);
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 0;
+ setAction(&_sequenceManager1, this, 4122, &_passenger, &_harrison, NULL);
+ break;
+ case 4123:
+ BF_INVENTORY.setObjectScene(INV_TYRONE_ID, 0);
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 5;
+ setAction(&_sequenceManager1, this, 4123, &_driver, &BF_GLOBALS._player, NULL);
+ break;
+ case 4124:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 7;
+ setAction(&_sequenceManager1, this, 4124, &_driver, &BF_GLOBALS._player, NULL);
+ break;
+ case 4127:
+ SceneItem::display2(410, 16);
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 0:
+ default:
+ BF_GLOBALS._player.enableControl();
+ break;
+ }
+}
+
+void Scene410::process(Event &event) {
+ // Check for gun being clicked on player
+ if ((event.eventType == EVENT_BUTTON_DOWN) && (BF_GLOBALS._events.getCursor() == INV_COLT45) &&
+ BF_GLOBALS._player.contains(event.mousePos) && !BF_GLOBALS.getFlag(fCalledBackup)) {
+ if (BF_GLOBALS.getFlag(fTalkedShooterNoBkup)) {
+ if (!_action) {
+ event.handled = true;
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 2;
+ setAction(&_sequenceManager1, this, 4102, &_passenger, &BF_GLOBALS._player, NULL);
+ }
+ } else if (BF_GLOBALS.getFlag(fTalkedDriverNoBkup)) {
+ if (!_action) {
+ _sceneMode = 1;
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 2;
+ setAction(&_sequenceManager1, this, 4120, &_passenger, &BF_GLOBALS._player, NULL);
+ }
+ }
+ }
+
+ if (!event.handled)
+ SceneExt::process(event);
+}
+
+void Scene410::dispatch() {
+ SceneExt::dispatch();
+ if ((_sceneMode == 4112) || (_sceneMode == 4101)) {
+ _harrison.updateAngle(_driver._position);
+ }
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 415 - Searching Truck
+ *
+ *--------------------------------------------------------------------------*/
+
+bool Scene415::GunInset::startAction(CursorType action, Event &event) {
+ Scene415 *scene = (Scene415 *)BF_GLOBALS._sceneManager._scene;
+
+ if (action == CURSOR_USE) {
+ if (BF_GLOBALS.getFlag(fGotAutoWeapon)) {
+ FocusObject::startAction(action, event);
+ } else {
+ remove();
+ scene->_gunAndWig.remove();
+ }
+ return true;
+ } else {
+ return FocusObject::startAction(action, event);
+ }
+}
+
+bool Scene415::GunAndWig::startAction(CursorType action, Event &event) {
+ Scene415 *scene = (Scene415 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_USE:
+ NamedObject::startAction(action, event);
+ BF_INVENTORY.setObjectScene(INV_AUTO_RIFLE, 1);
+ BF_INVENTORY.setObjectScene(INV_WIG, 1);
+ BF_GLOBALS.setFlag(fGotAutoWeapon);
+ T2_GLOBALS._uiElements.addScore(30);
+
+ remove();
+ return true;
+ case INV_FOREST_RAP:
+ if (scene->_fieldE14)
+ break;
+
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 0;
+ scene->_stripManager.start(4126, scene);
+ T2_GLOBALS._uiElements.addScore(50);
+ scene->_fieldE14 = true;
+ return true;
+ default:
+ break;
+ }
+
+ return NamedObject::startAction(action, event);
+}
+
+bool Scene415::BulletsInset::startAction(CursorType action, Event &event) {
+ Scene415 *scene = (Scene415 *)BF_GLOBALS._sceneManager._scene;
+
+ if (action == CURSOR_USE) {
+ if (BF_GLOBALS.getFlag(fGotAutoWeapon)) {
+ FocusObject::startAction(action, event);
+ } else {
+ remove();
+ scene->_theBullets.remove();
+ }
+ return true;
+ } else {
+ return FocusObject::startAction(action, event);
+ }
+}
+
+bool Scene415::DashDrawer::startAction(CursorType action, Event &event) {
+ Scene415 *scene = (Scene415 *)BF_GLOBALS._sceneManager._scene;
+
+ if ((action == CURSOR_LOOK) || (action == CURSOR_USE)) {
+ scene->showBullets();
+ return true;
+ } else {
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene415::TheBullets::startAction(CursorType action, Event &event) {
+ Scene415 *scene = (Scene415 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_USE:
+ NamedObject::startAction(action, event);
+ BF_INVENTORY.setObjectScene(INV_22_BULLET, 1);
+ BF_GLOBALS.setFlag(fGotBulletsFromDash);
+ T2_GLOBALS._uiElements.addScore(30);
+
+ remove();
+ scene->_dashDrawer.remove();
+ return true;
+ case INV_FOREST_RAP:
+ if (scene->_fieldE16) {
+ SceneItem::display2(415, 35);
+ return true;
+ } else {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 0;
+ scene->_stripManager.start(4122, scene);
+ T2_GLOBALS._uiElements.addScore(50);
+ scene->_fieldE16 = true;
+ }
+ break;
+ default:
+ break;
+ }
+
+ return NamedObject::startAction(action, event);
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene415::Lever::startAction(CursorType action, Event &event) {
+ Scene415 *scene = (Scene415 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_USE:
+ if (BF_GLOBALS.getFlag(fGotAutoWeapon)) {
+ SceneItem::display2(415, 20);
+ } else {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 2;
+ scene->setAction(&scene->_sequenceManager, scene, 4150, &scene->_object6, NULL);
+ }
+ return true;
+ default:
+ return NamedHotspot::startAction(action, event);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+Scene415::Scene415(): SceneExt() {
+ _fieldE14 = _fieldE16 = false;
+}
+
+void Scene415::synchronize(Serializer &s) {
+ SceneExt::synchronize(s);
+ s.syncAsSint16LE(_fieldE14);
+ s.syncAsSint16LE(_fieldE16);
+}
+
+void Scene415::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+ loadScene(415);
+
+ _stripManager.addSpeaker(&_jakeRadioSpeaker);
+
+ _dashDrawer.postInit();
+ _dashDrawer.setVisage(411);
+ _dashDrawer.setStrip(3);
+ _dashDrawer.setPosition(Common::Point(151, 97));
+ _dashDrawer.setDetails(415, 22, -1, -1, 1, NULL);
+
+ _object6.postInit();
+ _object6.setVisage(419);
+ _object6.setStrip(1);
+ _object6.setPosition(Common::Point(306, 116));
+ _object6.fixPriority(80);
+
+ _windowLever.setDetails(16, 415, 25, -1, 26, 1);
+ _item7.setDetails(17, 415, 32, -1, 33, 1);
+ _seatBelt.setDetails(14, 415, 29, -1, 30, 1);
+ _lever.setDetails(19, 415, 23, 24, -1, 1);
+ _seat.setDetails(18, 415, 3, 4, 2, 1);
+ _dashboard.setDetails(20, 415, 11, 12, 19, 1);
+ _steeringWheel.setDetails(15, 415, 5, 6, 7, 1);
+ _horn.setDetails(31, 415, 8, 9, 10, 1);
+ _item1.setDetails(Rect(0, 0, SCREEN_WIDTH, UI_INTERFACE_Y), 415, 0, 1, 2, 1, NULL);
+
+ BF_GLOBALS._player.enableControl();
+ BF_GLOBALS._player._canWalk = false;
+ BF_GLOBALS._events.setCursor(CURSOR_WALK);
+
+ signal();
+}
+
+void Scene415::signal() {
+ switch (_sceneMode) {
+ case 1:
+ BF_GLOBALS._sceneManager.changeScene(410);
+ break;
+ case 2:
+ showGunAndWig();
+ _sceneMode = 0;
+ signal();
+ break;
+ case 0:
+ default:
+ BF_GLOBALS._player.enableControl();
+ BF_GLOBALS._player._canWalk = false;
+ break;
+ }
+}
+
+void Scene415::dispatch() {
+ SceneExt::dispatch();
+ if (BF_GLOBALS.getFlag(fGotAutoWeapon) && BF_GLOBALS.getFlag(fGotBulletsFromDash)) {
+ _sceneMode = 1;
+ signal();
+ }
+}
+
+void Scene415::showBullets() {
+ _bulletsInset.postInit();
+ _bulletsInset.setVisage(411);
+ _bulletsInset.setStrip(1);
+ _bulletsInset.setPosition(Common::Point(158, 100));
+ _bulletsInset.setDetails(415, -1, -1, -1);
+
+ _theBullets.postInit();
+ _theBullets.setVisage(411);
+ _theBullets.setStrip(1);
+ _theBullets.setFrame(2);
+ _theBullets.setPosition(Common::Point(184, 86));
+ _theBullets.fixPriority(105);
+ _theBullets.setDetails(415, 16, 17, 18, 1, NULL);
+ BF_GLOBALS._sceneItems.remove(&_theBullets);
+ BF_GLOBALS._sceneItems.push_front(&_theBullets);
+}
+
+void Scene415::showGunAndWig() {
+ _gunInset.postInit();
+ _gunInset.setVisage(411);
+ _gunInset.setStrip(2);
+ _gunInset.setPosition(Common::Point(158, 100));
+ _gunInset.setDetails(415, -1, -1, -1);
+
+ _gunAndWig.postInit();
+ _gunAndWig.setVisage(411);
+ _gunAndWig.setStrip(2);
+ _gunAndWig.setFrame(2);
+ _gunAndWig.setPosition(Common::Point(159, 88));
+ _gunAndWig.fixPriority(105);
+ _gunAndWig.setDetails(415, 13, 14, 15, 1, NULL);
+
+ BF_GLOBALS._sceneItems.remove(&_gunAndWig);
+ BF_GLOBALS._sceneItems.push_front(&_gunAndWig);
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 440 - Outside Alleycat Bowl
+ *
+ *--------------------------------------------------------------------------*/
+
+bool Scene440::Doorway::startAction(CursorType action, Event &event) {
+ Scene440 *scene = (Scene440 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(440, 1);
+ return true;
+ case CURSOR_USE:
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 4400;
+ scene->setAction(&scene->_sequenceManager, scene, 4400, &BF_GLOBALS._player, this, &scene->_lyle, NULL);
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene440::Vechile::startAction(CursorType action, Event &event) {
+ Scene440 *scene = (Scene440 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ if (BF_GLOBALS.getFlag(fWithLyle)) {
+ SceneItem::display2(440, 3);
+ } else {
+ SceneItem::display2(440, 2);
+ }
+ return true;
+ case CURSOR_USE:
+ if (BF_GLOBALS.getFlag(fWithLyle)) {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 4403;
+ scene->setAction(&scene->_sequenceManager, scene, 4403, &BF_GLOBALS._player, &scene->_lyle, NULL);
+ } else {
+ BF_GLOBALS._sceneManager.changeScene(60);
+ }
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene440::Lyle::startAction(CursorType action, Event &event) {
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(440, 4);
+ return true;
+ case CURSOR_TALK:
+ SceneItem::display2(440, 5);
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene440::Item1::startAction(CursorType action, Event &event) {
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(440, 0);
+ return true;
+ default:
+ return NamedHotspot::startAction(action, event);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene440::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+ loadScene(440);
+ setZoomPercents(75, 60, 120, 100);
+ BF_GLOBALS._sound1.fadeSound(33);
+
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.setVisage(303);
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
+ BF_GLOBALS._player.changeZoom(-1);
+ BF_GLOBALS._player.disableControl();
+ BF_GLOBALS._player.setPosition(Common::Point(203, 113));
+
+ _vechile.postInit();
+
+ _lyle.postInit();
+ _lyle.setVisage(835);
+ _lyle.animate(ANIM_MODE_1, NULL);
+ _lyle.setObjectWrapper(new SceneObjectWrapper());
+ _lyle.setPosition(Common::Point(-40, -10));
+ _lyle.changeZoom(-1);
+ _lyle.hide();
+ BF_GLOBALS._sceneItems.push_back(&_lyle);
+
+ if (BF_GLOBALS.getFlag(fWithLyle)) {
+ _vechile.setVisage(444);
+ _vechile.setFrame(2);
+ _vechile.setPosition(Common::Point(147, 128));
+ _vechile.fixPriority(114);
+
+ BF_GLOBALS._player.setVisage(303);
+ BF_GLOBALS._player.setPosition(Common::Point(187, 104));
+
+ _lyle.setPosition(Common::Point(135, 128));
+ _lyle.show();
+
+ BF_GLOBALS._walkRegions.proc1(12);
+ BF_GLOBALS._walkRegions.proc1(13);
+ } else {
+ _vechile.setPosition(Common::Point(169, 121));
+ _vechile.fixPriority(117);
+
+ if (BF_GLOBALS.getFlag(onDuty)) {
+ _vechile.setVisage(440);
+ _vechile.setStrip(1);
+
+ BF_GLOBALS._player.setVisage(304);
+ BF_GLOBALS._player.setStrip(3);
+ } else {
+ _vechile.setVisage(580);
+ _vechile.setStrip(2);
+ _vechile.setFrame(3);
+
+ BF_GLOBALS._player.setVisage(303);
+ }
+ }
+
+ BF_GLOBALS._sceneItems.push_back(&_vechile);
+ BF_GLOBALS._walkRegions.proc1(11);
+
+ _doorway.postInit();
+ _doorway.setVisage(440);
+ _doorway.setStrip(5);
+ _doorway.setPosition(Common::Point(198, 91));
+ _doorway.fixPriority(80);
+ BF_GLOBALS._sceneItems.push_back(&_doorway);
+
+ if (BF_GLOBALS._sceneManager._previousScene == 450) {
+ _lyle.setPosition(Common::Point(143, 93));
+ _lyle.setStrip(5);
+ _lyle.fixPriority(90);
+
+ _doorway.setFrame(_doorway.getFrameCount());
+ _sceneMode = 4401;
+ setAction(&_sequenceManager, this, 4401, &BF_GLOBALS._player, &_doorway, NULL);
+ } else if (BF_GLOBALS.getFlag(fWithLyle)) {
+ _sceneMode = 4402;
+ setAction(&_sequenceManager, this, 4402, &_lyle, NULL);
+ } else {
+ BF_GLOBALS._player.enableControl();
+ }
+
+ _item1.setBounds(Rect(0, 0, SCREEN_WIDTH, UI_INTERFACE_Y - 1));
+ BF_GLOBALS._sceneItems.push_back(&_item1);
+}
+
+void Scene440::signal() {
+ switch (_sceneMode) {
+ case 4400:
+ BF_GLOBALS._sceneManager.changeScene(450);
+ break;
+ case 4401:
+ BF_GLOBALS._player.fixPriority(-1);
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 4402:
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 4403:
+ BF_GLOBALS._sceneManager.changeScene(60);
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 450 - Inside Alleycat Bowl
+ *
+ *--------------------------------------------------------------------------*/
+
+bool Scene450::Weasel::startAction(CursorType action, Event &event) {
+ Scene450 *scene = (Scene450 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(450, 0);
+ return true;
+ case CURSOR_USE:
+ SceneItem::display2(450, 1);
+ return true;
+ case CURSOR_TALK:
+ case INV_ID:
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 4504;
+ if (_flag) {
+ scene->setAction(&scene->_sequenceManager, scene, 4515, &BF_GLOBALS._player, this, NULL);
+ } else {
+ ++_flag;
+ scene->setAction(&scene->_sequenceManager, scene, 4504, &BF_GLOBALS._player, this, NULL);
+ }
+ return true;
+ case INV_FOREST_RAP:
+ BF_INVENTORY.setObjectScene(INV_FOREST_RAP, 450);
+ BF_GLOBALS._player.disableControl();
+ T2_GLOBALS._uiElements.addScore(30);
+
+ scene->_sceneMode = 4505;
+ scene->setAction(&scene->_sequenceManager, scene, 4505, &BF_GLOBALS._player, this,
+ &scene->_counterDoor, &scene->_object2, NULL);
+ return true;
+ default:
+ return NamedObjectExt::startAction(action, event);
+ }
+}
+
+bool Scene450::PinBoy::startAction(CursorType action, Event &event) {
+ Scene450 *scene = (Scene450 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(450, 4);
+ return true;
+ case CURSOR_USE:
+ SceneItem::display2(450, 5);
+ return true;
+ case CURSOR_TALK:
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 4502;
+ if (BF_GLOBALS.getFlag(onDuty)) {
+ scene->setAction(&scene->_sequenceManager, scene, 4516, &BF_GLOBALS._player, this, NULL);
+ } else {
+ scene->setAction(&scene->_sequenceManager, scene, 4502, &BF_GLOBALS._player, this, NULL);
+ }
+ return true;
+ case INV_NAPKIN:
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 4509;
+ scene->setAction(&scene->_sequenceManager, scene, 4509, &BF_GLOBALS._player, this, NULL);
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene450::Manager::startAction(CursorType action, Event &event) {
+ Scene450 *scene = (Scene450 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(450, 6);
+ return true;
+ case CURSOR_USE:
+ SceneItem::display2(450, 7);
+ return true;
+ case CURSOR_TALK:
+ BF_GLOBALS._player.disableControl();
+ if (BF_GLOBALS.getFlag(takenWeasel) && !BF_GLOBALS.getFlag(gotTrailer450)) {
+ BF_GLOBALS.setFlag(gotTrailer450);
+ scene->_sceneMode = 4517;
+ scene->setAction(&scene->_sequenceManager, scene, 4517, &BF_GLOBALS._player, this,
+ &scene->_door, NULL);
+ } else {
+ animate(ANIM_MODE_8, 1, NULL);
+
+ if (scene->_field19AC) {
+ scene->_sceneMode = 2;
+ if (scene->_field19AE) {
+ scene->_stripManager.start(4521, scene);
+ } else {
+ scene->_field19AE = 1;
+ scene->_stripManager.start(4512, scene);
+ }
+ } else {
+ scene->_sceneMode = 4506;
+ if (scene->_field19AE) {
+ scene->setAction(&scene->_sequenceManager, scene, 4518, &BF_GLOBALS._player, this, NULL);
+ } else {
+ scene->_sceneMode = 4506;
+ scene->_field19AE = 1;
+ scene->setAction(&scene->_sequenceManager, scene, 4506, &BF_GLOBALS._player, this, NULL);
+ }
+ }
+ }
+ return true;
+ case INV_FOREST_RAP:
+ SceneItem::display2(450, 19);
+ return true;
+ case INV_NAPKIN:
+ animate(ANIM_MODE_8, 1, NULL);
+ BF_GLOBALS._player.disableControl();
+
+ if (BF_GLOBALS.getFlag(showEugeneNapkin)) {
+ SceneItem::display2(450, 16);
+ BF_GLOBALS._player.enableControl();
+ } else {
+ BF_GLOBALS.setFlag(showEugeneNapkin);
+
+ if (!BF_GLOBALS.getFlag(showEugeneID)) {
+ scene->_sceneMode = 4513;
+ scene->setAction(&scene->_sequenceManager, scene, 4513, &BF_GLOBALS._player, this, NULL);
+ } else if (BF_GLOBALS.getFlag(fMgrCallsWeasel)) {
+ SceneItem::display2(450, 16);
+ BF_GLOBALS._player.enableControl();
+ } else {
+ T2_GLOBALS._uiElements.addScore(30);
+ scene->_sceneMode = 4510;
+ BF_INVENTORY.setObjectScene(INV_NAPKIN, 450);
+ scene->setAction(&scene->_sequenceManager, scene, 4510, &BF_GLOBALS._player, this, NULL);
+ }
+ }
+ return true;
+ case INV_ID:
+ if (BF_GLOBALS.getFlag(takenWeasel)) {
+ return startAction(CURSOR_TALK, event);
+ } else {
+ animate(ANIM_MODE_8, 1, NULL);
+ BF_GLOBALS._player.disableControl();
+
+ if (!BF_GLOBALS.getFlag(showEugeneID))
+ T2_GLOBALS._uiElements.addScore(30);
+ BF_GLOBALS.setFlag(showEugeneID);
+
+ if ((BF_GLOBALS.getFlag(showRapEugene) || BF_GLOBALS.getFlag(showEugeneNapkin)) &&
+ !BF_GLOBALS.getFlag(fMgrCallsWeasel)) {
+ T2_GLOBALS._uiElements.addScore(30);
+ scene->_sceneMode = 4511;
+ scene->setAction(&scene->_sequenceManager, scene, 4511, &BF_GLOBALS._player, this, NULL);
+ } else {
+ scene->_sceneMode = 4506;
+ scene->setAction(&scene->_sequenceManager, scene, 4512, &BF_GLOBALS._player, this, NULL);
+ }
+ }
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene450::Exit::startAction(CursorType action, Event &event) {
+ Scene450 *scene = (Scene450 *)BF_GLOBALS._sceneManager._scene;
+
+ if (event.eventType == EVENT_BUTTON_DOWN) {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 4501;
+ scene->signal();
+ return true;
+ } else {
+ return false;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+Scene450::Scene450(): SceneExt() {
+ _field19AC = _field19AE = 0;
+}
+
+void Scene450::synchronize(Serializer &s) {
+ SceneExt::synchronize(s);
+ s.syncAsSint16LE(_field19AC);
+ s.syncAsSint16LE(_field19AE);
+}
+
+void Scene450::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+ loadScene(450);
+ setZoomPercents(110, 90, 155, 115);
+ BF_GLOBALS._sound1.fadeSound(13);
+
+ _stripManager.addSpeaker(&_gameTextSpeaker);
+ _stripManager.addSpeaker(&_eugeneSpeaker);
+ _stripManager.addSpeaker(&_billySpeaker);
+ _stripManager.addSpeaker(&_weaselSpeaker);
+ _stripManager.addSpeaker(&_jakeJacketSpeaker);
+ _stripManager.addSpeaker(&_lyleHatSpeaker);
+ _stripManager.addSpeaker(&_jakeUniformSpeaker);
+
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.setVisage(BF_GLOBALS.getFlag(onDuty) ? 1341 : 129);
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
+ BF_GLOBALS._player.setPosition(Common::Point(-30, 155));
+ BF_GLOBALS._player.changeZoom(-1);
+ BF_GLOBALS._player.disableControl();
+
+ _door.postInit();
+ _door.setVisage(450);
+ _door.setStrip(2);
+ _door.setPosition(Common::Point(72, 80));
+ _door.setDetails(450, 15, -1, 13, 1, NULL);
+
+ _counterDoor.postInit();
+ _counterDoor.setVisage(450);
+ _counterDoor.setPosition(Common::Point(39, 104));
+ _counterDoor.fixPriority(100);
+ _counterDoor.setDetails(450, 12, -1, 13, 1, NULL);
+
+ if (BF_GLOBALS._dayNumber != 3) {
+ _pinBoy.postInit();
+ _pinBoy.setVisage(463);
+ _pinBoy.setPosition(Common::Point(138, 121));
+ _pinBoy.fixPriority(100);
+ _pinBoy.setFrame(_pinBoy.getFrameCount());
+ BF_GLOBALS._sceneItems.push_back(&_pinBoy);
+ } else if (!BF_GLOBALS.getFlag(fWithLyle) || !BF_GLOBALS.getFlag(fGivenNapkin) ||
+ (BF_INVENTORY.getObjectScene(INV_CARAVAN_KEY) == 1)) {
+ _pinBoy.postInit();
+ _pinBoy.setVisage(463);
+ _pinBoy.setPosition(Common::Point(138, 121));
+ _pinBoy.fixPriority(100);
+ _pinBoy.setFrame(_pinBoy.getFrameCount());
+ BF_GLOBALS._sceneItems.push_back(&_pinBoy);
+ } else {
+ _manager.postInit();
+ _manager.setVisage(467);
+ _manager.setPosition(Common::Point(138, 121));
+ _manager.changeZoom(-1);
+ _manager.fixPriority(100);
+ BF_GLOBALS._sceneItems.push_back(&_manager);
+
+ if (!BF_GLOBALS.getFlag(takenWeasel)) {
+ _object2.postInit();
+ _object2.setVisage(469);
+ _object2.animate(ANIM_MODE_1, NULL);
+ _object2.setObjectWrapper(new SceneObjectWrapper());
+ _object2.setPosition(Common::Point(-30, 126));
+ ADD_MOVER_NULL(_object2, 27, 126);
+ _object2.changeZoom(-1);
+ _object2.setDetails(450, 2, 18, 3, 1, NULL);
+
+ BF_GLOBALS._walkRegions.proc1(4);
+
+ _weasel.postInit();
+ _weasel.setVisage(466);
+ _weasel.animate(ANIM_MODE_1, NULL);
+ _weasel.setObjectWrapper(new SceneObjectWrapper());
+ _weasel.setPosition(Common::Point(70, 80));
+ _weasel.setStrip(5);
+ _weasel.changeZoom(90);
+ _weasel.fixPriority(65);
+ _weasel._flag = 0;
+ BF_GLOBALS._sceneItems.push_back(&_weasel);
+ }
+ }
+
+ _sceneMode = 4500;
+ setAction(&_sequenceManager, this, 4500, &BF_GLOBALS._player, NULL);
+
+ _exit.setDetails(Rect(0, 100, 4, 167), 450, -1, -1, -1, 1, NULL);
+ _counter.setDetails(8, 450, 8, -1, 9, 1);
+ _shelf.setDetails(Rect(114, 10, 179, 77), 450, 10, -1, 11, 1, NULL);
+ _interior.setDetails(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), 450, 14, -1, -1, 1, NULL);
+}
+
+void Scene450::signal() {
+ switch (_sceneMode) {
+ case 450:
+ case 451:
+ BF_GLOBALS._sceneManager.changeScene(440);
+ break;
+ case 4501:
+ if (BF_GLOBALS._sceneObjects->contains(&_object2)) {
+ _sceneMode = 450;
+ ADD_MOVER(_object2, -20, 135);
+ } else {
+ _sceneMode = 451;
+ ADD_PLAYER_MOVER(0, 160);
+ }
+ break;
+ case 4503:
+ _weasel.fixPriority(100);
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 4505:
+ BF_GLOBALS.setFlag(takenWeasel);
+ _weasel.remove();
+ _object2.remove();
+ BF_GLOBALS._walkRegions.proc2(4);
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 4507:
+ case 4510:
+ case 4511:
+ BF_GLOBALS.setFlag(fMgrCallsWeasel);
+ _field19AC = 1;
+ _sceneMode = 4503;
+ setAction(&_sequenceManager, this, 4503, &_weasel, &_door, &_manager, NULL);
+ break;
+ case 4508:
+ _manager.remove();
+ BF_GLOBALS._player.enableControl();
+ BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
+ break;
+ case 4517:
+ BF_GLOBALS.setFlag(gotTrailer450);
+ BF_INVENTORY.setObjectScene(INV_CARAVAN_KEY, 1);
+ _sceneMode = 4508;
+ setAction(&_sequenceManager, this, 4508, &BF_GLOBALS._player, &_manager, &_door, NULL);
+ break;
+ default:
+ BF_GLOBALS._player.enableControl();
+ break;
+ }
+}
+
+void Scene450::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(EXITFRAME_SW);
+ 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);
+ }
+ }
+}
+
+} // End of namespace BlueForce
+
+} // End of namespace TsAGE
diff --git a/engines/tsage/blue_force/blueforce_scenes4.h b/engines/tsage/blue_force/blueforce_scenes4.h
new file mode 100644
index 0000000000..6c40211f28
--- /dev/null
+++ b/engines/tsage/blue_force/blueforce_scenes4.h
@@ -0,0 +1,268 @@
+/* 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.
+ *
+ */
+
+#ifndef TSAGE_BLUEFORCE_SCENES4_H
+#define TSAGE_BLUEFORCE_SCENES4_H
+
+#include "common/scummsys.h"
+#include "tsage/blue_force/blueforce_logic.h"
+#include "tsage/blue_force/blueforce_speakers.h"
+#include "tsage/converse.h"
+#include "tsage/events.h"
+#include "tsage/core.h"
+#include "tsage/scenes.h"
+#include "tsage/globals.h"
+#include "tsage/sound.h"
+
+namespace TsAGE {
+
+namespace BlueForce {
+
+using namespace TsAGE;
+
+class Scene410: public SceneExt {
+ /* Actions */
+ class Action1: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action2: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action3: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action4: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action5: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action6: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action7: public Action {
+ public:
+ virtual void signal();
+ };
+
+ /* Objects */
+ class Driver: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Passenger: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Harrison: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Items */
+ class Motorcycle: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class TruckFront: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+public:
+ SequenceManager _sequenceManager1, _sequenceManager2, _sequenceManager3;
+ Driver _driver;
+ Passenger _passenger;
+ Harrison _harrison;
+ NamedObject _patrolCar, _object5, _object6;
+ NamedHotspot _background;
+ Motorcycle _motorcycle;
+ NamedHotspot _truckBack;
+ TruckFront _truckFront;
+ Action1 _action1;
+ Action2 _action2;
+ Action3 _action3;
+ Action4 _action4;
+ Action5 _action5;
+ Action6 _action6;
+ Action7 _action7;
+ SpeakerGameText _gameTextSpeaker;
+ SpeakerJakeUniform _jakeUniformSpeaker;
+ SpeakerHarrison _harrisonSpeaker;
+ SpeakerDriver _driverSpeaker;
+ SpeakerShooter _shooterSpeaker;
+ ASoundExt _sound1;
+ int _field1FB6, _talkCount, _field1FBA;
+ int _field1FBC, _field1FBE;
+ int _field1FC0, _field1FC2, _field1FC4;
+
+ Scene410();
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void synchronize(Serializer &s);
+ virtual void signal();
+ virtual void process(Event &event);
+ virtual void dispatch();
+};
+
+class Scene415: public SceneExt {
+ /* Objects */
+ class GunInset: public FocusObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class GunAndWig: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class BulletsInset: public FocusObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class DashDrawer: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class TheBullets: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Items */
+ class Lever: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+private:
+ void showBullets();
+ void showGunAndWig();
+public:
+ SequenceManager _sequenceManager;
+ GunInset _gunInset;
+ GunAndWig _gunAndWig;
+ BulletsInset _bulletsInset;
+ DashDrawer _dashDrawer;
+ TheBullets _theBullets;
+ NamedObject _object6;
+ NamedHotspot _item1, _steeringWheel, _horn, _dashboard;
+ NamedHotspot _seat, _windowLever, _item7, _seatBelt;
+ Lever _lever;
+ SpeakerJakeRadio _jakeRadioSpeaker;
+ bool _fieldE14, _fieldE16;
+
+ Scene415();
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void synchronize(Serializer &s);
+ virtual void signal();
+ virtual void dispatch();
+};
+
+class Scene440: public SceneExt {
+ /* Objects */
+ class Doorway: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Vechile: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Lyle: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Items */
+ class Item1: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+public:
+ SequenceManager _sequenceManager;
+ SpeakerGameText _gameTextSpeaker;
+ Doorway _doorway;
+ Vechile _vechile;
+ Lyle _lyle;
+ Item1 _item1;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+};
+
+class Scene450: public SceneExt {
+ /* Objects */
+ class Weasel: public NamedObjectExt {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Object2: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class PinBoy: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Manager: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Items */
+ class Exit: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+public:
+ SequenceManager _sequenceManager;
+ SpeakerGameText _gameTextSpeaker;
+ SpeakerLyleHat _lyleHatSpeaker;
+ SpeakerJakeJacket _jakeJacketSpeaker;
+ SpeakerJakeUniform _jakeUniformSpeaker;
+ SpeakerEugene _eugeneSpeaker;
+ SpeakerWeasel _weaselSpeaker;
+ SpeakerBilly _billySpeaker;
+ Weasel _weasel;
+ NamedObject _object2;
+ PinBoy _pinBoy;
+ Manager _manager;
+ NamedObject _door, _counterDoor;
+ Exit _exit;
+ NamedHotspot _interior, _shelf, _counter;
+ int _field19AC, _field19AE;
+
+ Scene450();
+ virtual void synchronize(Serializer &s);
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+ virtual void process(Event &event);
+};
+
+} // End of namespace BlueForce
+
+} // End of namespace TsAGE
+
+#endif
diff --git a/engines/tsage/blue_force/blueforce_scenes5.cpp b/engines/tsage/blue_force/blueforce_scenes5.cpp
new file mode 100644
index 0000000000..500cad60b1
--- /dev/null
+++ b/engines/tsage/blue_force/blueforce_scenes5.cpp
@@ -0,0 +1,2555 @@
+/* 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_scenes5.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 550 - Outside Bikini Hut
+ *
+ *--------------------------------------------------------------------------*/
+
+void Scene550::Action1::signal() {
+ Scene550 *scene = (Scene550 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ BF_GLOBALS._player.disableControl();
+ setDelay(5);
+ break;
+ case 1:
+ scene->_stripManager.start(scene->_sceneMode, this);
+ break;
+ case 2:
+ BF_GLOBALS._player.enableControl();
+ remove();
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene550::Lyle::startAction(CursorType action, Event &event) {
+ Scene550 *scene = (Scene550 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_TALK:
+ if ((BF_INVENTORY.getObjectScene(INV_SCHEDULE) == 1) ||
+ (BF_INVENTORY.getObjectScene(INV_9MM_BULLETS) == 1)) {
+ if ((BF_INVENTORY.getObjectScene(INV_SCHEDULE) == 1) &&
+ (BF_INVENTORY.getObjectScene(INV_9MM_BULLETS) == 1)) {
+ BF_GLOBALS.setFlag(fToldLyleOfSchedule);
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 5501;
+ scene->setAction(&scene->_sequenceManager, scene, 5514, &BF_GLOBALS._player, this, NULL);
+ } else {
+ scene->_sceneMode = 0;
+ scene->_stripManager.start(5509, scene);
+ }
+ } else if (BF_GLOBALS._sceneManager._previousScene == 930) {
+ scene->_sceneMode = 5512;
+ scene->setAction(&scene->_action1);
+ } else {
+ scene->_sceneMode = BF_INVENTORY.getObjectScene(INV_CARAVAN_KEY) == 1 ? 5513 : 5512;
+ scene->setAction(&scene->_action1);
+ }
+ return true;
+ case INV_SCHEDULE:
+ BF_GLOBALS.setFlag(fToldLyleOfSchedule);
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 5501;
+ scene->setAction(&scene->_sequenceManager, scene, 5514, &BF_GLOBALS._player, this, NULL);
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene550::CaravanDoor::startAction(CursorType action, Event &event) {
+ Scene550 *scene = (Scene550 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(550, 0);
+ return true;
+ case CURSOR_USE:
+ SceneItem::display2(550, 7);
+ return true;
+ case INV_CARAVAN_KEY:
+ if ((BF_GLOBALS._dayNumber != 3) || !BF_GLOBALS.getFlag(fWithLyle))
+ SceneItem::display2(550, 33);
+ else {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 5500;
+ scene->setAction(&scene->_sequenceManager, scene, 5500, &BF_GLOBALS._player, this, NULL);
+ }
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene550::Vechile::startAction(CursorType action, Event &event) {
+ Scene550 *scene = (Scene550 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(550, 3);
+ return true;
+ case CURSOR_USE:
+ if (!BF_GLOBALS.getFlag(fWithLyle)) {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 5510;
+ scene->setAction(&scene->_sequenceManager, scene, BF_GLOBALS.getFlag(fWithLyle) ? 5510 : 5515,
+ &BF_GLOBALS._player, this, NULL);
+ } else if (BF_GLOBALS.getFlag(fToldLyleOfSchedule)) {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 2;
+ scene->setAction(&scene->_sequenceManager, scene, 5501, &BF_GLOBALS._player, NULL);
+ } else if ((BF_INVENTORY.getObjectScene(INV_SCHEDULE) == 1) ||
+ (BF_INVENTORY.getObjectScene(INV_9MM_BULLETS) == 1)) {
+ if (BF_INVENTORY.getObjectScene(INV_9MM_BULLETS) == 1) {
+ scene->_sceneMode = 5501;
+ scene->_stripManager.start(5511, scene);
+ } else {
+ scene->_sceneMode = 0;
+ scene->_stripManager.start(5509, scene);
+ }
+ } else if (BF_GLOBALS._sceneManager._previousScene == 930) {
+ scene->_sceneMode = 5512;
+ scene->setAction(&scene->_action1);
+ } else {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 2;
+ scene->setAction(&scene->_sequenceManager, scene, 5501, &BF_GLOBALS._player, NULL);
+ }
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene550::postInit(SceneObjectList *OwnerList) {
+ BF_GLOBALS._sound1.fadeSound(16);
+
+ if ((BF_GLOBALS._bookmark == bInspectionDone) && !BF_GLOBALS.getFlag(fHasDrivenFromDrunk)) {
+ _sceneMode = 1;
+ signal();
+ return;
+ }
+
+ SceneExt::postInit();
+ loadScene(550);
+
+ _stripManager.addSpeaker(&_gameTextSpeaker);
+ _stripManager.addSpeaker(&_lyleHatSpeaker);
+ _stripManager.addSpeaker(&_jakeJacketSpeaker);
+
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
+ BF_GLOBALS._player.setPosition(Common::Point(160, 100));
+ BF_GLOBALS._player._moveDiff = Common::Point(2, 1);
+ BF_GLOBALS._player.enableControl();
+
+ _caravanDoor.postInit();
+ _caravanDoor.setVisage(550);
+ _caravanDoor.setPosition(Common::Point(34, 66));
+ BF_GLOBALS._sceneItems.push_back(&_caravanDoor);
+
+ _vechile.postInit();
+ _vechile.fixPriority(70);
+
+ if (BF_GLOBALS.getFlag(fWithLyle)) {
+ BF_GLOBALS._walkRegions.proc1(10);
+ BF_GLOBALS._walkRegions.proc1(11);
+
+ _vechile.setVisage(444);
+ _vechile.setStrip(4);
+ _vechile.setFrame2(2);
+ _vechile.setPosition(Common::Point(110, 85));
+ _vechile.fixPriority(76);
+
+ _lyle.postInit();
+ _lyle.setVisage(835);
+ _lyle.setPosition(Common::Point(139, 83));
+ _lyle.setDetails(550, 29, 30, 31, 1, NULL);
+ _lyle.setStrip(8);
+
+ BF_GLOBALS._player.setVisage(303);
+ BF_GLOBALS._player.setPosition(Common::Point(89, 76));
+ BF_GLOBALS._player.updateAngle(_lyle._position);
+ } else {
+ BF_GLOBALS._walkRegions.proc1(12);
+
+ _vechile.setPosition(Common::Point(205, 77));
+ _vechile.changeZoom(80);
+
+ if (BF_GLOBALS.getFlag(onDuty)) {
+ _vechile.setVisage(301);
+ _vechile.setStrip(1);
+
+ BF_GLOBALS._player.setVisage(304);
+ } else {
+ _vechile.setVisage(580);
+ _vechile.setStrip(2);
+ _vechile.setFrame(2);
+
+ BF_GLOBALS._player.setVisage(303);
+ }
+ }
+
+ BF_GLOBALS._sceneItems.push_back(&_vechile);
+
+ if (BF_GLOBALS._sceneManager._previousScene == 930) {
+ _caravanDoor.setFrame(_caravanDoor.getFrameCount());
+ BF_GLOBALS._player.disableControl();
+
+ _sceneMode = 0;
+ setAction(&_sequenceManager, this, 5512, &BF_GLOBALS._player, &_caravanDoor, NULL);
+ } else if (BF_GLOBALS.getFlag(onDuty)) {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 0;
+ setAction(&_sequenceManager, this, 5502, &BF_GLOBALS._player, &_vechile, NULL);
+ } else if (!BF_GLOBALS.getFlag(fWithLyle)) {
+ BF_GLOBALS._player.setPosition(Common::Point(185, 70));
+ } else if (BF_GLOBALS._bookmark == bFlashBackOne) {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 0;
+ setAction(&_sequenceManager, this, 5513, &_lyle, NULL);
+ } else {
+ _sceneMode = 0;
+ }
+
+ _item2.setDetails(Rect(0, 26, 53, 67), 550, 1, -1, 2, 1, NULL);
+ _item3.setDetails(Rect(53, 12, 173, 65), 550, 4, -1, 5, 1, NULL);
+ _item1.setDetails(Rect(0, 0, 320, 170), 550, 6, -1, -1, 1, NULL);
+}
+
+void Scene550::signal() {
+ switch (_sceneMode) {
+ case 0:
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 1:
+ BF_GLOBALS._sceneManager.changeScene(551);
+ break;
+ case 2:
+ case 5510:
+ BF_GLOBALS._sceneManager.changeScene(60);
+ break;
+ case 3:
+ BF_GLOBALS._driveFromScene = 16;
+ BF_GLOBALS._driveToScene = 128;
+ BF_GLOBALS._mapLocationId = 128;
+ BF_GLOBALS._sound1.fadeOut2(NULL);
+ BF_GLOBALS._sceneManager.changeScene(800);
+ break;
+ case 5500:
+ BF_GLOBALS._sceneManager.changeScene(930);
+ break;
+ case 5501:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 3;
+ setAction(&_sequenceManager, this, 5501, &BF_GLOBALS._player, NULL);
+ break;
+ default:
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 551 - Outside Bikini Hut (Drunk Stop)
+ *
+ *--------------------------------------------------------------------------*/
+
+void Scene551::Action2::signal() {
+ Scene551 *scene = (Scene551 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ BF_GLOBALS._walkRegions.proc2(18);
+ BF_GLOBALS._walkRegions.proc2(4);
+ scene->_field1CD2 = 1;
+
+ scene->_harrison.setObjectWrapper(new SceneObjectWrapper());
+ scene->_harrison.animate(ANIM_MODE_1, NULL);
+
+ BF_GLOBALS._player.setVisage(304);
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+
+ if (scene->_drunkStanding._flag != 1) {
+ ADD_PLAYER_MOVER_THIS(scene->_harrison, 126, 85);
+ } else {
+ ADD_PLAYER_MOVER_THIS(scene->_harrison, 88, 91);
+ }
+ break;
+ case 1:
+ scene->_harrison.updateAngle(BF_GLOBALS._player._position);
+
+ if (scene->_drunkStanding._flag == 1) {
+ BF_GLOBALS._walkRegions.proc1(4);
+ ADD_PLAYER_MOVER(71, 97);
+ } else {
+ ADD_PLAYER_MOVER(141, 87);
+ }
+ break;
+ case 2:
+ scene->_harrison.updateAngle(BF_GLOBALS._player._position);
+ BF_GLOBALS._player.updateAngle(scene->_harrison._position);
+ setDelay(10);
+ break;
+ case 3:
+ scene->_stripManager.start(scene->_harrison._flag, this);
+ break;
+ case 4:
+ scene->_field1CD2 = 0;
+ BF_GLOBALS._player.enableControl();
+ remove();
+ break;
+ default:
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene551::Vechile::startAction(CursorType action, Event &event) {
+ Scene551 *scene = (Scene551 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(550, 3);
+ return true;
+ case CURSOR_USE:
+ if (!BF_GLOBALS.getFlag(didDrunk)) {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 1;
+ scene->setAction(&scene->_sequenceManager, scene, 5510, &BF_GLOBALS._player, this, NULL);
+ } else if (BF_INVENTORY.getObjectScene(INV_CENTER_PUNCH) == 1) {
+ BF_INVENTORY.setObjectScene(INV_CENTER_PUNCH, 0);
+ scene->_harrison._flag = 5505;
+ scene->setAction(&scene->_action2, scene);
+ scene->_sceneMode = 5509;
+ } else {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 1;
+ scene->setAction(&scene->_sequenceManager, scene, 5510, &BF_GLOBALS._player, this, NULL);
+ }
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene551::DrunkStanding::startAction(CursorType action, Event &event) {
+ Scene551 *scene = (Scene551 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(550, 15);
+ return true;
+ case CURSOR_USE:
+ SceneItem::display2(550, 16);
+ return true;
+ case CURSOR_TALK:
+ SceneItem::display2(550, 17);
+ return true;
+ case INV_HANDCUFFS:
+ scene->_harrison.animate(ANIM_MODE_1, NULL);
+ BF_GLOBALS.set2Flags(f1098Drunk);
+ BF_GLOBALS.setFlag(didDrunk);
+ _flag = 2;
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 5509;
+
+ scene->setAction(&scene->_sequenceManager, scene, 5509, &BF_GLOBALS._player, this, &scene->_harrison, NULL);
+ BF_GLOBALS.set2Flags(f1015Drunk);
+ return true;
+ default:
+ return NamedObjectExt::startAction(action, event);
+ }
+}
+
+bool Scene551::Drunk::startAction(CursorType action, Event &event) {
+ Scene551 *scene = (Scene551 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ switch (_flag) {
+ case 0:
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 0;
+ scene->setAction(&scene->_sequenceManager, scene, 5505, &BF_GLOBALS._player, &scene->_object15, NULL);
+ break;
+ case 1:
+ SceneItem::display2(550, 11);
+ break;
+ case 2:
+ SceneItem::display2(550, 12);
+ break;
+ case 3:
+ SceneItem::display2(550, 27);
+ break;
+ }
+ return true;
+ case CURSOR_USE:
+ switch (_flag) {
+ case 0:
+ BF_GLOBALS._player.disableControl();
+ if (BF_GLOBALS.getFlag(fTalkedToDrunkInCar)) {
+ scene->_sceneMode = 5508;
+ scene->setAction(&scene->_sequenceManager, scene, 5508, &BF_GLOBALS._player, NULL);
+ } else {
+ BF_GLOBALS.setFlag(fTalkedToDrunkInCar);
+ scene->_sceneMode = 16;
+ scene->setAction(&scene->_sequenceManager, scene, 5504, &BF_GLOBALS._player, &scene->_object15, NULL);
+ }
+ break;
+ case 2:
+ SceneItem::display2(550, 13);
+ break;
+ case 3:
+ SceneItem::display2(550, 27);
+ break;
+ default:
+ break;
+ }
+ return true;
+ case CURSOR_TALK:
+ if (_flag)
+ break;
+ BF_GLOBALS._player.disableControl();
+
+ if (BF_GLOBALS.getFlag(fTalkedToDrunkInCar)) {
+ scene->_sceneMode = 5508;
+ scene->setAction(&scene->_sequenceManager, scene, 5508, &BF_GLOBALS._player, NULL);
+ } else {
+ BF_GLOBALS.setFlag(fTalkedToDrunkInCar);
+ scene->_sceneMode = 0;
+ scene->setAction(&scene->_sequenceManager, scene, 5504, &BF_GLOBALS._player, &scene->_object15, NULL);
+ }
+ return true;
+ case INV_CENTER_PUNCH:
+ if (_flag) {
+ SceneItem::display2(550, 14);
+ } else {
+ BF_GLOBALS.set2Flags(f1098Drunk);
+ BF_GLOBALS.setFlag(didDrunk);
+ _flag = 1;
+ T2_GLOBALS._uiElements.addScore(30);
+
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 5506;
+ scene->setAction(&scene->_sequenceManager, scene, 5506, &BF_GLOBALS._player, this,
+ &scene->_object12, NULL);
+ }
+ return true;
+ default:
+ break;
+ }
+
+ return NamedObjectExt::startAction(action, event);
+}
+
+bool Scene551::PatrolCarTrunk::startAction(CursorType action, Event &event) {
+ Scene551 *scene = (Scene551 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_USE:
+ if (BF_INVENTORY.getObjectScene(INV_CENTER_PUNCH) != 1) {
+ BF_GLOBALS._walkRegions.proc2(18);
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 2;
+ scene->setAction(&scene->_sequenceManager, scene, 5503, &BF_GLOBALS._player, &scene->_harrison, this, NULL);
+ return true;
+ }
+ break;
+ default:
+ break;
+ }
+
+ return NamedObject::startAction(action, event);
+}
+
+void Scene551::TrunkInset::remove() {
+ Scene551 *scene = (Scene551 *)BF_GLOBALS._sceneManager._scene;
+ scene->_trunkKits.remove();
+ BF_GLOBALS._player.disableControl();
+
+ scene->_sceneMode = 0;
+ scene->setAction(&scene->_sequenceManager, scene, 5516, &scene->_harrison,
+ &scene->_patrolCarTrunk, NULL);
+
+ FocusObject::remove();
+}
+
+bool Scene551::TrunkInset::startAction(CursorType action, Event &event) {
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(550, 18);
+ return true;
+ case CURSOR_USE:
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene551::TrunkKits::startAction(CursorType action, Event &event) {
+ Scene551 *scene = (Scene551 *)BF_GLOBALS._sceneManager._scene;
+
+ Rect tempRect = _bounds;
+ tempRect.collapse(10, 6);
+ if (!tempRect.contains(event.mousePos))
+ return false;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ switch (_frame) {
+ case 1:
+ SceneItem::display2(550, 19);
+ break;
+ case 2:
+ SceneItem::display2(550, 20);
+ break;
+ case 3:
+ SceneItem::display2(550, 21);
+ break;
+ default:
+ break;
+ }
+ return true;
+ case CURSOR_USE:
+ if (event.mousePos.y < _bounds.top) {
+ setFrame(1);
+ } else if ((event.mousePos.x < (_bounds.left - 25)) && (_frame > 1)) {
+ SceneItem::display2(550, 28);
+ } else {
+ switch (_frame) {
+ case 1:
+ setFrame(BF_INVENTORY.getObjectScene(INV_CENTER_PUNCH) == 1 ? 3 : 2);
+ break;
+ case 2:
+ if (!BF_GLOBALS.getFlag(fShowedBluePrint)) {
+ T2_GLOBALS._uiElements.addScore(30);
+ BF_GLOBALS.setFlag(fShowedBluePrint);
+ }
+
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 5520;
+ scene->setAction(&scene->_sequenceManager, scene, 5520, &BF_GLOBALS._player, NULL);
+ BF_INVENTORY.setObjectScene(INV_CENTER_PUNCH, 1);
+ setFrame(3);
+ break;
+ case 3:
+ setFrame(1);
+ break;
+ default:
+ break;
+ }
+ }
+ return true;
+ case INV_CENTER_PUNCH:
+ SceneItem::display2(550, 22);
+ BF_INVENTORY.setObjectScene(INV_CENTER_PUNCH, 0);
+ setFrame(2);
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene551::Harrison::startAction(CursorType action, Event &event) {
+ Scene551 *scene = (Scene551 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(550, 23);
+ return true;
+ case CURSOR_USE:
+ SceneItem::display2(550, 24);
+ return true;
+ case CURSOR_TALK:
+ BF_GLOBALS._player.disableControl();
+
+ if (scene->_drunkStanding._flag == 1) {
+ _flag = 5508;
+ } else if (!scene->_field1CD0) {
+ _flag = 5502;
+ } else {
+ scene->_field1CD0 = 1;
+ _flag = 5500;
+ }
+ scene->setAction(&scene->_action2);
+ return true;
+ default:
+ return NamedObjectExt::startAction(action, event);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene551::Item4::startAction(CursorType action, Event &event) {
+ Scene551 *scene = (Scene551 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(550, 34);
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 1;
+ scene->setAction(&scene->_sequenceManager, scene, 5510, &BF_GLOBALS._player, &scene->_vechile2, NULL);
+ return true;
+ default:
+ return false;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+Scene551::Scene551(): Scene550() {
+ _field1CD0 = _field1CD2 = 0;
+}
+
+void Scene551::synchronize(Serializer &s) {
+ Scene550::synchronize(s);
+ s.syncAsSint16LE(_field1CD0);
+ s.syncAsSint16LE(_field1CD2);
+}
+
+void Scene551::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+ loadScene(550);
+ BF_GLOBALS._walkRegions.load(551);
+ BF_GLOBALS._sound1.fadeSound(16);
+
+ _stripManager.addSpeaker(&_gameTextSpeaker);
+ _stripManager.addSpeaker(&_jakeUniformSpeaker);
+ _stripManager.addSpeaker(&_gigglesSpeaker);
+ _stripManager.addSpeaker(&_drunkSpeaker);
+
+ if (BF_GLOBALS.getFlag(fHasLeftDrunk)) {
+ _item4.setBounds(Rect(0, 0, 320, 170));
+ BF_GLOBALS._sceneItems.push_back(&_item4);
+ }
+
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
+ BF_GLOBALS._player.setPosition(Common::Point(160, 100));
+ BF_GLOBALS._player._moveDiff = Common::Point(2, 1);
+ BF_GLOBALS._player.enableControl();
+
+ _caravanDoor.postInit();
+ _caravanDoor.setVisage(550);
+ _caravanDoor.setPosition(Common::Point(34, 66));
+ BF_GLOBALS._sceneItems.push_back(&_caravanDoor);
+
+ _vechile2.postInit();
+ _vechile2.setVisage(301);
+ _vechile2.setStrip(1);
+ _vechile2.setPosition(Common::Point(205, 77));
+ _vechile2.fixPriority(70);
+ _vechile2.changeZoom(80);
+ BF_GLOBALS._sceneItems.push_back(&_vechile2);
+
+ BF_GLOBALS._walkRegions.proc1(14);
+
+ _drunk.postInit();
+ _drunk.setVisage(550);
+ _drunk.setStrip(3);
+ _drunk.fixPriority(84);
+ _drunk.setPosition(Common::Point(29, 92));
+ _drunk._flag = 0;
+ BF_GLOBALS._sceneItems.push_back(&_drunk);
+
+ _object12.postInit();
+ _object12.setVisage(550);
+ _object12.setStrip(7);
+ _object12.setPosition(Common::Point(29, 92));
+ _object12.hide();
+
+ _object13.postInit();
+ _object13.setVisage(550);
+ _object13.setStrip(2);
+ _object13.setPosition(Common::Point(29, 92));
+ _object13.fixPriority(82);
+ _object13.setDetails(550, 8, -1, 9, 1, NULL);
+
+ if (BF_GLOBALS.getFlag(didDrunk)) {
+ _drunk._flag = 3;
+ _drunk.setStrip(3);
+
+ _object12.show();
+ _object12.setDetails(550, 25, -1, 26, 1, NULL);
+ BF_GLOBALS._sceneItems.push_front(&_object12);
+
+ _harrison.postInit();
+ _harrison.setVisage(304);
+ _harrison.setPosition(Common::Point(67, 102));
+ _harrison.setStrip(8);
+ _harrison.setFrame(1);
+ _harrison._flag = 1;
+ BF_GLOBALS._sceneItems.push_back(&_harrison);
+
+ _object14.postInit();
+ _object14.setVisage(550);
+ _object14.setStrip(5);
+ _object14.animate(ANIM_MODE_2, NULL);
+ _object14.fixPriority(80);
+ _object14.setPosition(Common::Point(122, 57));
+
+ _object11.postInit();
+ _object11.setVisage(550);
+ _object11.setStrip(2);
+ _object11.setFrame(2);
+ _object11.setPosition(Common::Point(116, 84));
+ _object11.fixPriority(77);
+ _object11.setDetails(550, 32, -1, 10, 1, NULL);
+
+ _drunkStanding.postInit();
+ _drunkStanding._flag = 0;
+ _drunkStanding.setVisage(554);
+ _drunkStanding.setStrip(7);
+ _drunkStanding.setFrame(8);
+ _drunkStanding.fixPriority(83);
+ _drunkStanding.setPosition(Common::Point(57, 99));
+ } else {
+ _harrison.postInit();
+ _harrison.setVisage(304);
+ _harrison.setPosition(Common::Point(126, 83));
+ _harrison.setObjectWrapper(new SceneObjectWrapper());
+ _harrison._flag = 0;
+ _harrison._moveDiff = Common::Point(2, 1);
+ BF_GLOBALS._sceneItems.push_back(&_harrison);
+
+ _object14.postInit();
+ _object14.setVisage(550);
+ _object14.setStrip(5);
+ _object14.animate(ANIM_MODE_2, NULL);
+ _object14.fixPriority(80);
+ _object14.setPosition(Common::Point(122, 57));
+
+ _patrolCarTrunk.postInit();
+ _patrolCarTrunk.setVisage(550);
+ _patrolCarTrunk.setStrip(4);
+ _patrolCarTrunk.setFrame(1);
+ _patrolCarTrunk.setPosition(Common::Point(149, 69));
+ _patrolCarTrunk.fixPriority(79);
+ _patrolCarTrunk.setDetails(550, 18, -1, 9, 1, NULL);
+
+ _object11.postInit();
+ _object11.setVisage(550);
+ _object11.setStrip(2);
+ _object11.setFrame(2);
+ _object11.setPosition(Common::Point(116, 84));
+ _object11.fixPriority(77);
+ _object11.setDetails(550, 32, -1, 10, 1, NULL);
+
+ _drunkStanding.postInit();
+ _drunkStanding._flag = 0;
+ _drunkStanding.setVisage(554);
+ _drunkStanding.fixPriority(83);
+ _drunkStanding.setPosition(Common::Point(47, 93));
+
+ _object15.postInit();
+ _object15.setVisage(552);
+ _object15.setPosition(Common::Point(59, 94));
+ _object15.fixPriority(200);
+ _object15.hide();
+ }
+
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 3;
+ setAction(&_sequenceManager, this, 5502, &BF_GLOBALS._player, &_vechile2, NULL);
+
+ _item2.setDetails(Rect(0, 26, 53, 67), 550, 1, -1, 2, 1, NULL);
+ _item3.setDetails(Rect(53, 12, 173, 65), 550, 4, -1, 5, 1, NULL);
+ _item1.setDetails(Rect(0, 0, 320, 170), 550, 6, -1, -1, 1, NULL);
+}
+
+void Scene551::signal() {
+ switch (_sceneMode) {
+ case 0:
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 1:
+ BF_GLOBALS._sound1.fadeOut2(NULL);
+ BF_GLOBALS.set2Flags(f1027Drunk);
+ BF_GLOBALS.set2Flags(f1097Drunk);
+
+ if (BF_GLOBALS.getFlag(didDrunk))
+ BF_GLOBALS.setFlag(f1098Drunk);
+
+ BF_GLOBALS._sceneManager.changeScene(60);
+ break;
+ case 2:
+ BF_GLOBALS._walkRegions.proc1(18);
+
+ _trunkInset.postInit();
+ _trunkInset.setVisage(553);
+ _trunkInset.setPosition(Common::Point(59, 92));
+ _trunkInset.fixPriority(252);
+ BF_GLOBALS._sceneItems.push_front(&_trunkInset);
+
+ _trunkKits.postInit();
+ _trunkKits.setVisage(553);
+ _trunkKits.setStrip(2);
+ _trunkKits.setPosition(Common::Point(57, 73));
+ _trunkKits.fixPriority(254);
+ BF_GLOBALS._sceneItems.push_front(&_trunkKits);
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 3:
+ if (BF_GLOBALS.getFlag(talkedToHarrisAboutDrunk)) {
+ BF_GLOBALS._player.enableControl();
+ } else {
+ BF_GLOBALS.setFlag(talkedToHarrisAboutDrunk);
+ _harrison._flag = 5500;
+ setAction(&_action2);
+ }
+ break;
+ case 5506:
+ _harrison.setObjectWrapper(new SceneObjectWrapper());
+ ADD_PLAYER_MOVER_NULL(_harrison, 88, 91);
+
+ _object12.show();
+ _object12.setDetails(550, 25, -1, 26, 1, NULL);
+ BF_GLOBALS._sceneItems.push_front(&_object12);
+ BF_GLOBALS._player.enableControl();
+
+ _sceneMode = 5507;
+ setAction(&_sequenceManager, this, 5507, &BF_GLOBALS._player, &_drunk, &_drunkStanding, NULL);
+ break;
+ case 5507:
+ BF_GLOBALS._walkRegions.proc1(2);
+ BF_GLOBALS._walkRegions.proc1(4);
+
+ _drunkStanding._flag = 1;
+ BF_GLOBALS._sceneItems.push_front(&_drunkStanding);
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 5508:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 0;
+ setAction(&_sequenceManager, this, 5505, &BF_GLOBALS._player, &_object15, NULL);
+ break;
+ case 5509:
+ BF_INVENTORY.setObjectScene(INV_CENTER_PUNCH, 0);
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 5510;
+ setAction(&_sequenceManager, this, 5510, &BF_GLOBALS._player, &_vechile2, NULL);
+ break;
+ case 5510:
+ BF_GLOBALS._bookmark = bCalledToDrunkStop;
+ if (BF_GLOBALS.getFlag(didDrunk))
+ BF_GLOBALS.setFlag(fHasLeftDrunk);
+
+ BF_GLOBALS._sceneManager.changeScene(60);
+ break;
+ case 5520:
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ _harrison.animate(ANIM_MODE_1, NULL);
+ BF_GLOBALS._player.enableControl();
+ break;
+ default:
+ BF_GLOBALS._player.enableControl();
+ break;
+ }
+}
+
+void Scene551::dispatch() {
+ SceneExt::dispatch();
+
+ if ((_drunkStanding._flag != 2) && !_harrison._mover && !_field1CD2)
+ _harrison.updateAngle(BF_GLOBALS._player._position);
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 550 - Study
+ *
+ *--------------------------------------------------------------------------*/
+
+void Scene560::Action1::signal() {
+ Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ setDelay(10);
+ break;
+ case 1:
+ ADD_MOVER(BF_GLOBALS._player, 105, 140);
+ break;
+ case 2:
+ scene->_deskChair.hide();
+
+ BF_GLOBALS._player.changeZoom(81);
+ BF_GLOBALS._player.setVisage(561);
+ BF_GLOBALS._player.setStrip(2);
+ BF_GLOBALS._player.setFrame(1);
+ BF_GLOBALS._player.setPosition(Common::Point(96, 138));
+ BF_GLOBALS._player.animate(ANIM_MODE_5, this);
+ break;
+ case 3:
+ scene->_deskChair.setVisage(561);
+ scene->_deskChair.setFrame(BF_GLOBALS._player._frame);
+ scene->_deskChair.setStrip(BF_GLOBALS._player._strip);
+ scene->_deskChair.setPosition(BF_GLOBALS._player._position);
+
+ scene->_field380 = 1;
+ BF_GLOBALS._player.enableControl();
+ remove();
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene560::Action2::signal() {
+ Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ BF_GLOBALS._player.disableControl();
+ setDelay(10);
+ break;
+ case 1:
+ scene->_deskChair.hide();
+
+ BF_GLOBALS._player.setVisage(561);
+ BF_GLOBALS._player.setStrip(2);
+ BF_GLOBALS._player.setFrame(BF_GLOBALS._player.getFrameCount());
+ BF_GLOBALS._player.animate(ANIM_MODE_6, this);
+ break;
+ case 2:
+ scene->_field380 = 0;
+ scene->_deskChair.setPosition(Common::Point(81, 149));
+ scene->_deskChair.setVisage(561);
+ scene->_deskChair.setStrip(3);
+ scene->_deskChair.setFrame(1);
+ scene->_deskChair.fixPriority(151);
+ scene->_deskChair.show();
+
+ BF_GLOBALS._player.setVisage(563);
+ BF_GLOBALS._player.setPosition(Common::Point(105, 140));
+ BF_GLOBALS._player.fixPriority(-1);
+ BF_GLOBALS._player.changeZoom(-1);
+ BF_GLOBALS._player.animate(ANIM_MODE_1, this);
+ BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
+ BF_GLOBALS._player.enableControl();
+ ADD_PLAYER_MOVER(scene->_destPosition.x, scene->_destPosition.y);
+ remove();
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene560::Action3::signal() {
+ Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ BF_GLOBALS._player.disableControl();
+ setDelay(10);
+ break;
+ case 1:
+ if (scene->_field380) {
+ setDelay(10);
+ } else {
+ setAction(&scene->_action1, this);
+ }
+ break;
+ case 2:
+ BF_GLOBALS._sceneManager.changeScene(570);
+ break;
+ default:
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene560::PicturePart::startAction(CursorType action, Event &event) {
+ Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ if (scene->_field380) {
+ SceneItem::display2(560, 54);
+ } else if ((scene->_sceneMode != 4) && (scene->_sceneMode != 3)) {
+ scene->_sceneMode = _flag + 4;
+ PlayerMover *mover = new PlayerMover();
+ Common::Point destPos(139, 106);
+ BF_GLOBALS._player.addMover(mover, &destPos, scene);
+ }
+ return true;
+ default:
+ return NamedHotspotExt::startAction(action, event);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene560::DeskChair::startAction(CursorType action, Event &event) {
+ Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
+
+ if ((action == CURSOR_USE) && !scene->_field380) {
+ scene->setAction(&scene->_action1);
+ return true;
+ } else {
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene560::Box::startAction(CursorType action, Event &event) {
+ Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_USE:
+ if (scene->_field380) {
+ SceneItem::display2(560, 54);
+ } else {
+ scene->_sceneMode = 9;
+ Common::Point destPos(289, 108);
+ PlayerMover *mover = new PlayerMover();
+ BF_GLOBALS._player.addMover(mover, &destPos, scene);
+ }
+ return true;
+ default:
+ return NamedObjectExt::startAction(action, event);
+ }
+}
+
+void Scene560::SafeInset::postInit(SceneObjectList *OwnerList) {
+ Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
+ FocusObject::postInit();
+
+ _cursorVisage.setVisage(1, 5);
+
+ if (BF_GLOBALS._safeCombination == 172) {
+ setFrame(2);
+ if (BF_INVENTORY.getObjectScene(INV_NICKEL) == 560) {
+ scene->_nickel.postInit();
+ scene->_nickel.setVisage(560);
+ scene->_nickel.setStrip(2);
+ scene->_nickel.setFrame(3);
+ scene->_nickel.fixPriority(252);
+ scene->_nickel.setPosition(Common::Point(181, 140));
+ scene->_nickel.setDetails(560, 47, 48, -1, 1, NULL);
+ BF_GLOBALS._sceneItems.remove(&scene->_nickel);
+ BF_GLOBALS._sceneItems.push_front(&scene->_nickel);
+ }
+ } else {
+ setFrame(1);
+ _item1.setDetails(Rect(143, 68, 159, 85), 560, 49, 50, -1, 1, NULL);
+ _item2.setDetails(Rect(159, 68, 175, 85), 560, 49, 50, -1, 1, NULL);
+ _item3.setDetails(Rect(175, 68, 191, 85), 560, 49, 50, -1, 1, NULL);
+ _item4.setDetails(Rect(143, 86, 159, 102), 560, 49, 50, -1, 1, NULL);
+ _item5.setDetails(Rect(159, 86, 175, 102), 560, 49, 50, -1, 1, NULL);
+ _item6.setDetails(Rect(175, 86, 191, 102), 560, 49, 50, -1, 1, NULL);
+
+ BF_GLOBALS._sceneItems.remove(&_item1);
+ BF_GLOBALS._sceneItems.remove(&_item2);
+ BF_GLOBALS._sceneItems.remove(&_item3);
+ BF_GLOBALS._sceneItems.remove(&_item4);
+ BF_GLOBALS._sceneItems.remove(&_item5);
+ BF_GLOBALS._sceneItems.remove(&_item6);
+ BF_GLOBALS._sceneItems.push_front(&_item6);
+ BF_GLOBALS._sceneItems.push_front(&_item5);
+ BF_GLOBALS._sceneItems.push_front(&_item4);
+ BF_GLOBALS._sceneItems.push_front(&_item3);
+ BF_GLOBALS._sceneItems.push_front(&_item2);
+ BF_GLOBALS._sceneItems.push_front(&_item1);
+
+ _item1._flag = 1;
+ _item2._flag = 2;
+ _item3._flag = 3;
+ _item4._flag = 4;
+ _item5._flag = 5;
+ _item6._flag = 6;
+
+ _digit2.postInit();
+ _digit2.setVisage(560);
+ _digit2.setStrip(3);
+ _digit2.setPosition(Common::Point(151, 94));
+ _digit2.fixPriority(252);
+
+ _digit1.postInit();
+ _digit1.setVisage(560);
+ _digit1.setStrip(3);
+ _digit1.setPosition(Common::Point(167, 94));
+ _digit1.fixPriority(252);
+
+ _digit0.postInit();
+ _digit0.setVisage(560);
+ _digit0.setStrip(3);
+ _digit0.setPosition(Common::Point(183, 94));
+ _digit0.fixPriority(252);
+
+ int amount = (BF_GLOBALS._safeCombination != 0) ? BF_GLOBALS._safeCombination : 1000;
+
+ // Get digit 0 portion
+ int remainder = amount % 10;
+ amount /= 10;
+ _digit0.setFrame(!remainder ? 10 : remainder);
+
+ // Get digit 1 portion
+ remainder = amount % 10;
+ amount /= 10;
+ _digit1.setFrame(!remainder ? 10 : remainder);
+
+ // Get digit 2 portion
+ remainder = amount % 10;
+ _digit2.setFrame(!remainder ? 10 : remainder);
+ }
+}
+
+void Scene560::SafeInset::remove() {
+ Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
+
+ _item1.remove();
+ _item2.remove();
+ _item3.remove();
+ _item4.remove();
+ _item5.remove();
+ _item6.remove();
+ _digit2.remove();
+ _digit1.remove();
+ _digit0.remove();
+
+ scene->_nickel.remove();
+
+ if (BF_GLOBALS._events.getCursor() == CURSOR_USE) {
+ GfxSurface cursor = _cursorVisage.getFrame(2);
+ BF_GLOBALS._events.setCursor(cursor);
+ }
+
+ FocusObject::remove();
+}
+
+void Scene560::SafeInset::signal() {
+ Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
+
+ // Recalculate the new total
+ int total = 0;
+ if (_digit2._frame < 10)
+ total = _digit2._frame * 100;
+ if (_digit1._frame < 10)
+ total += _digit1._frame * 10;
+ if (_digit0._frame < 10)
+ total += _digit0._frame;
+
+ BF_GLOBALS._safeCombination = !total ? 1000 : total;
+
+ // Check if the combination is correct
+ if (total == 172) {
+ BF_GLOBALS._sceneObjects->draw();
+
+ if (!BF_GLOBALS.getFlag(fGotPointsForBank)) {
+ T2_GLOBALS._uiElements.addScore(50);
+ BF_GLOBALS.setFlag(fGotPointsForBank);
+ }
+
+ setFrame(2);
+ GfxSurface cursor = _cursorVisage.getFrame(2);
+ BF_GLOBALS._events.setCursor(cursor);
+
+ _item1.remove();
+ _item2.remove();
+ _item3.remove();
+ _item4.remove();
+ _item5.remove();
+ _item6.remove();
+ _digit2.remove();
+ _digit1.remove();
+ _digit0.remove();
+
+ if (BF_INVENTORY.getObjectScene(INV_NICKEL) == 560) {
+ // Nickel is still in the safe, show it
+ scene->_nickel.postInit();
+ scene->_nickel.setVisage(560);
+ scene->_nickel.setStrip(2);
+ scene->_nickel.setFrame(3);
+ scene->_nickel.fixPriority(252);
+ scene->_nickel.setPosition(Common::Point(181, 140));
+ scene->_nickel.setDetails(560, 47, 48, -1, 1, NULL);
+ BF_GLOBALS._sceneItems.remove(&scene->_nickel);
+ BF_GLOBALS._sceneItems.push_front(&scene->_nickel);
+ }
+ }
+}
+void Scene560::SafeInset::process(Event &event) {
+ if (_bounds.contains(event.mousePos)) {
+ CursorType cursorId = BF_GLOBALS._events.getCursor();
+ if (cursorId == CURSOR_USE) {
+ // Instead of standard cursor, use special hand cursor
+ GfxSurface cursor = _cursorVisage.getFrame(6);
+ BF_GLOBALS._events.setCursor(cursor);
+ } else {
+ // Set cursor again just in case Exit cursor was showing
+ BF_GLOBALS._events.setCursor(cursorId);
+ }
+
+ if ((event.eventType == EVENT_BUTTON_DOWN) && (BF_GLOBALS._events.getCursor() == CURSOR_WALK) &&
+ (event.btnState == 3)) {
+ BF_GLOBALS._events.setCursor(CURSOR_USE);
+ event.handled = true;
+ }
+ } else {
+ GfxSurface cursor = _cursorVisage.getFrame(7);
+ BF_GLOBALS._events.setCursor(cursor);
+
+ if ((event.mousePos.y < UI_INTERFACE_Y) && (event.eventType == EVENT_BUTTON_DOWN)) {
+ // Leave the safe view
+ event.handled = true;
+ remove();
+ }
+ }
+}
+
+bool Scene560::SafeInset::Item::startAction(CursorType action, Event &event) {
+ Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_USE:
+ switch (_flag) {
+ case 1: {
+ int newFrame = scene->_safeInset._digit2._frame + 1;
+ if (newFrame == 11)
+ newFrame = 1;
+
+ scene->_safeInset._digit2.setFrame(newFrame);
+ break;
+ }
+ case 2: {
+ int newFrame = scene->_safeInset._digit1._frame + 1;
+ if (newFrame == 11)
+ newFrame = 1;
+
+ scene->_safeInset._digit1.setFrame(newFrame);
+ break;
+ }
+ case 3: {
+ int newFrame = scene->_safeInset._digit0._frame + 1;
+ if (newFrame == 11)
+ newFrame = 1;
+
+ scene->_safeInset._digit0.setFrame(newFrame);
+ break;
+ }
+ case 4: {
+ int newFrame = scene->_safeInset._digit2._frame - 1;
+ if (newFrame == 0)
+ newFrame = 10;
+
+ scene->_safeInset._digit2.setFrame(newFrame);
+ break;
+ }
+ case 5: {
+ int newFrame = scene->_safeInset._digit1._frame - 1;
+ if (newFrame == 0)
+ newFrame = 10;
+
+ scene->_safeInset._digit1.setFrame(newFrame);
+ break;
+ }
+ case 6: {
+ int newFrame = scene->_safeInset._digit0._frame - 1;
+ if (newFrame == 0)
+ newFrame = 10;
+
+ scene->_safeInset._digit0.setFrame(newFrame);
+ break;
+ }
+ default:
+ break;
+ }
+
+ scene->_safeInset.signal();
+ scene->_sound1.play(75);
+ return true;
+ default:
+ return NamedHotspotExt::startAction(action, event);
+ }
+}
+
+bool Scene560::Nickel::startAction(CursorType action, Event &event) {
+ if (action == CURSOR_USE) {
+ BF_INVENTORY.setObjectScene(INV_NICKEL, 1);
+ T2_GLOBALS._uiElements.addScore(10);
+ remove();
+ return true;
+ } else {
+ return NamedObject::startAction(action, event);
+ }
+}
+
+void Scene560::BoxInset::postInit(SceneObjectList *OwnerList) {
+ FocusObject::postInit();
+ _item1.setDetails(Rect(110, 48, 189, 102), 560, 43, 44, -1, 1, NULL);
+ BF_GLOBALS._sceneItems.remove(&_item1);
+ BF_GLOBALS._sceneItems.push_front(&_item1);
+}
+
+void Scene560::BoxInset::remove() {
+ Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
+
+ if (scene->_sceneMode != 3)
+ scene->_sceneMode = 0;
+
+ _item1.remove();
+ FocusObject::remove();
+}
+
+bool Scene560::BoxInset::Item1::startAction(CursorType action, Event &event) {
+ Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
+
+ if (action == CURSOR_USE) {
+ if (!BF_GLOBALS.getFlag(fGotPointsForBox)) {
+ T2_GLOBALS._uiElements.addScore(10);
+ BF_GLOBALS.setFlag(fGotPointsForBox);
+ }
+
+ scene->_safeInset.postInit();
+ scene->_safeInset.setVisage(560);
+ scene->_safeInset.setStrip(2);
+ scene->_safeInset.setPosition(Common::Point(160, 141));
+ scene->_safeInset.fixPriority(251);
+ scene->_safeInset.setDetails(560, 45, 46, -1);
+
+ scene->_sceneMode = 3;
+ scene->_boxInset.remove();
+
+ GfxSurface cursor = surfaceFromRes(1, 5, 6);
+ BF_GLOBALS._events.setCursor(cursor);
+ return true;
+ } else {
+ return NamedHotspot::startAction(action, event);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene560::Computer::startAction(CursorType action, Event &event) {
+ Scene560 *scene = (Scene560 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_USE:
+ if (BF_GLOBALS._bookmark < bTalkedToGrannyAboutSkipsCard) {
+ SceneItem::display2(666, 24);
+ } else {
+ scene->setAction(&scene->_action3);
+ }
+ return true;
+ default:
+ return NamedHotspot::startAction(action, event);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+Scene560::Scene560(): SceneExt() {
+ _field380 = _field11EA = 0;
+}
+
+void Scene560::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+ loadScene(560);
+ setZoomPercents(100, 60, 168, 90);
+ _stripManager.addSpeaker(&_gameTextSpeaker);
+
+ _picture1.setDetails(Rect(121, 16, 139, 35), 560, -1, -1, -1, 1, NULL);
+ _picture2.setDetails(Rect(139, 16, 157, 35), 560, -1, -1, -1, 1, NULL);
+ _picture3.setDetails(Rect(121, 35, 139, 54), 560, -1, -1, -1, 1, NULL);
+ _picture4.setDetails(Rect(139, 35, 157, 54), 560, -1, -1, -1, 1, NULL);
+ _picture1._flag = 3;
+ _picture2._flag = 4;
+ _picture3._flag = 2;
+ _picture4._flag = 1;
+
+ if (BF_GLOBALS._dayNumber == 0)
+ BF_GLOBALS._dayNumber = 3;
+
+ if (BF_GLOBALS._bookmark >= bTalkedToGrannyAboutSkipsCard) {
+ _box.postInit();
+ _box.setVisage(560);
+ _box.setStrip(4);
+ _box.setFrame(1);
+ _box.setPosition(Common::Point(295, 37));
+ _box.setDetails(560, 41, 42, -1, 1, NULL);
+ }
+
+ _deskChair.postInit();
+ _deskChair.setVisage(561);
+ _deskChair.setStrip(3);
+ _deskChair.setPosition(Common::Point(81, 149));
+ _deskChair.fixPriority(151);
+ _deskChair.changeZoom(81);
+
+ if (BF_GLOBALS._sceneManager._previousScene == 570) {
+ // Returning from using computer
+ BF_GLOBALS._events.setCursor(CURSOR_USE);
+
+ _deskChair.hide();
+
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.setVisage(561);
+ BF_GLOBALS._player.setStrip(2);
+ BF_GLOBALS._player.setFrame(BF_GLOBALS._player.getFrameCount());
+ BF_GLOBALS._player._moveDiff.x = 11;
+ BF_GLOBALS._player.setPosition(Common::Point(96, 138));
+ BF_GLOBALS._player.changeZoom(81);
+
+ _deskChair.setFrame(BF_GLOBALS._player._frame);
+ _deskChair.setStrip(BF_GLOBALS._player._strip);
+ _deskChair.setPosition(BF_GLOBALS._player._position);
+
+ _field11EA = 0;
+ _field380 = 1;
+ } else {
+ // Entering study through doorway
+ _field11EA = 0;
+ _field380 = 0;
+
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.setVisage(563);
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
+ BF_GLOBALS._player.setPosition(Common::Point(79, 110));
+ BF_GLOBALS._player._moveDiff.x = 11;
+ BF_GLOBALS._player.changeZoom(-1);
+ BF_GLOBALS._player.disableControl();
+
+ _sceneMode = 10;
+ ADD_MOVER(BF_GLOBALS._player, 85, 115);
+ }
+
+ _computer.setDetails(Rect(16, 77, 58, 107), 560, 2, -1, -1, 1, NULL);
+ _deskChair.setDetails(560, 3, -1, -1, 1, NULL);
+ _chair.setDetails(Rect(163, 64, 196, 102), 560, 13, 25, 36, 1, NULL);
+ _lamp.setDetails(Rect(197, 43, 214, 56), 560, 7, 19, 30, 1, NULL);
+ _item4.setDetails(Rect(121, 18, 156, 54), 560, 8, 20, 31, 1, NULL);
+ _trophy.setDetails(Rect(259, 52, 275, 63), 560, 10, 22, 33, 1, NULL);
+ _watercolours.setDetails(Rect(214, 48, 239, 64), 560, 12, 24, 35, 1, NULL);
+ _fileCabinets.setDetails(Rect(0, 47, 49, 100), 560, 14, 26, 37, 1, NULL);
+ _certificate.setDetails(Rect(280, 51, 292, 62), 560, 11, 23, 34, 1, NULL);
+ _bookcase.setDetails(Rect(176, 0, 319, 103), 560, 9, 21, 32, 1, NULL);
+ _desk.setDetails(1, 560, 6, 10, 29, 1);
+ _item12.setDetails(Rect(62, 16, 96, 101), 560, 51, 52, 53, 1, NULL);
+ _carpet.setDetails(Rect(0, 103, 319, 167), 560, 5, 16, 28, 1, NULL);
+ _office.setDetails(Rect(0, 0, 320, 168), 560, 4, -1, -1, 1, NULL);
+
+ BF_GLOBALS._player.enableControl();
+}
+
+void Scene560::signal() {
+ switch (_sceneMode) {
+ case 1:
+ _object6.hide();
+ _object6.remove();
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 5:
+ case 6:
+ case 7:
+ case 8:
+ BF_GLOBALS._player._strip = 4;
+ BF_GLOBALS._player._frame = 1;
+ BF_GLOBALS._player.disableControl();
+
+ _object6.postInit();
+ _object6.setVisage(560);
+ _object6.setStrip(1);
+ _object6.setFrame(_sceneMode - 4);
+ _object6.setPosition(Common::Point(160, 141));
+ _object6.fixPriority(250);
+ _stripManager.start(_sceneMode + 5595, this);
+ _sceneMode = 1;
+ break;
+ case 9:
+ // Clicked on the Baseball Cards Box
+ _object6._strip = 4;
+ _object6._frame = 1;
+
+ if (BF_GLOBALS._safeCombination == 172) {
+ if (_sceneMode != 3) {
+ _safeInset.postInit();
+ _safeInset.setVisage(560);
+ _safeInset.setStrip(2);
+ _safeInset.setPosition(Common::Point(160, 141));
+ _safeInset.fixPriority(251);
+ _safeInset.setDetails(560, 45, 46, -1);
+
+ _sceneMode = 3;
+ }
+ } else if ((_sceneMode != 3) && (_sceneMode != 4)) {
+ if (!BF_GLOBALS.getFlag(fGotPointsForPunch)) {
+ T2_GLOBALS._uiElements.addScore(10);
+ BF_GLOBALS.setFlag(fGotPointsForPunch);
+ }
+
+ _boxInset.postInit();
+ _boxInset.setVisage(560);
+ _boxInset.setStrip(2);
+ _boxInset.setFrame(4);
+ _boxInset.setPosition(Common::Point(160, 141));
+ _boxInset.fixPriority(251);
+ _boxInset.setDetails(560, 43, 44, -1);
+
+ _sceneMode = 4;
+ }
+ break;
+ case 10:
+ _field11EA = 0;
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 11:
+ BF_GLOBALS._sceneManager.changeScene(270);
+ break;
+ }
+}
+
+void Scene560::process(Event &event) {
+ if ((event.eventType == EVENT_BUTTON_DOWN) && (BF_GLOBALS._events.getCursor() == CURSOR_WALK) &&
+ (_field380 == 1) && !_action) {
+ _destPosition = event.mousePos;
+ BF_GLOBALS._player.disableControl();
+ setAction(&_action2);
+
+ event.handled = true;
+ }
+
+ SceneExt::process(event);
+}
+
+void Scene560::dispatch() {
+ if (!_field11EA && (BF_GLOBALS._player._position.y < 105)) {
+ _field11EA = 1;
+ BF_GLOBALS._player.disableControl();
+ BF_GLOBALS._sceneManager.changeScene(270);
+ }
+
+ SceneExt::dispatch();
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 570 - Computer
+ *
+ *--------------------------------------------------------------------------*/
+
+Scene570::PasswordEntry::PasswordEntry(): EventHandler() {
+ _passwordStr = SCENE570_PASSWORD;
+}
+
+void Scene570::PasswordEntry::synchronize(Serializer &s) {
+ EventHandler::synchronize(s);
+ s.syncString(_entryBuffer);
+}
+
+void Scene570::PasswordEntry::postInit(SceneObjectList *OwnerList) {
+ Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene;
+
+ scene->_sceneMode = 10;
+ scene->_object3.setStrip(6);
+ scene->_object3.setFrame(1);
+ scene->_object3.fixPriority(3);
+
+ _passwordText._color1 = 22;
+ _passwordText._color2 = 9;
+ _passwordText._color3 = 9;
+ _passwordText._width = 128;
+ _passwordText._fontNumber = 9000;
+ _passwordText.setPosition(Common::Point(165, 40));
+ _passwordText.fixPriority(255);
+ _passwordText.setup(_passwordStr);
+
+ _entryText._color1 = 22;
+ _entryText._color2 = 9;
+ _entryText._color3 = 9;
+ _entryText._width = 128;
+ _entryText._fontNumber = 9000;
+ _entryText.setPosition(Common::Point(220, 40));
+ _entryText.fixPriority(255);
+ _entryText.setup(_entryBuffer);
+}
+
+void Scene570::PasswordEntry::process(Event &event) {
+ Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene;
+ bool entryChanged = false;
+
+ switch (event.eventType) {
+ case EVENT_KEYPRESS: {
+ int key = toupper(event.kbd.ascii);
+ scene->_sound1.play(72);
+
+ if ((event.kbd.keycode == Common::KEYCODE_BACKSPACE) || (event.kbd.keycode == Common::KEYCODE_DELETE)) {
+ // Delete a key from the entry
+ if (_entryBuffer.size() > 0)
+ _entryBuffer.deleteLastChar();
+ entryChanged = true;
+ } else if (event.kbd.keycode == Common::KEYCODE_RETURN) {
+ // Finished entering password
+ _passwordText.remove();
+ _entryText.remove();
+
+ checkPassword();
+ remove();
+ } else if ((key >= 32) || (key <= 126)) {
+ // Valid character pressed
+ if (_entryBuffer.size() < 10)
+ _entryBuffer += (char)key;
+ event.handled = true;
+ entryChanged = true;
+ }
+ break;
+ }
+ case EVENT_BUTTON_DOWN:
+ event.handled = true;
+ break;
+ default:
+ break;
+ }
+
+ if (entryChanged) {
+ _entryText._color1 = 22;
+ _entryText._color2 = 9;
+ _entryText._color3 = 9;
+ _entryText._width = 128;
+ _entryText._fontNumber = 9000;
+ _entryText.setPosition(Common::Point(213, 40));
+ _entryText.fixPriority(255);
+ _entryText.setup(_entryBuffer);
+
+ // Pad entered text with spaces to make up the allowed width and then display
+ Common::String msg = _entryBuffer;
+ while (msg.size() < 10)
+ msg += " ";
+ _entryText.setup(msg);
+ }
+}
+
+void Scene570::PasswordEntry::checkPassword() {
+ // Check if the password is correctly entered as 'JACKIE' or, as a nod to the
+ // reimplementation in ScummVM, as the project name.
+ Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene;
+
+ if (!_entryBuffer.compareTo("JACKIE") || !_entryBuffer.compareTo("SCUMMVM")) {
+ // Password was correct
+ T2_GLOBALS._uiElements.addScore(30);
+ BF_GLOBALS._player.disableControl();
+ scene->_sound1.play(73);
+
+ T2_GLOBALS._uiElements.hide();
+ T2_GLOBALS._uiElements._active = false;
+ scene->_sceneMode = 5701;
+ scene->setAction(&scene->_sequenceManager, scene, 5701, &scene->_object3, NULL);
+ } else {
+ // Password was incorrect
+ _entryBuffer = "";
+
+ scene->_object3.fixPriority(1);
+ scene->_iconManager.refreshList();
+ BF_GLOBALS._events.setCursor(CURSOR_USE);
+ scene->_sceneMode = 0;
+ }
+}
+
+Scene570::IconManager::IconManager(): EventHandler() {
+ _mode = _selectedFolder = _fieldAA = _fieldAC = 0;
+}
+
+void Scene570::IconManager::remove() {
+ _object1.remove();
+ EventHandler::remove();
+}
+
+void Scene570::IconManager::setup(int mode) {
+ _mode = mode;
+ _selectedFolder = 0;
+
+ _object1.postInit();
+ _object1.setVisage(572);
+ _object1.fixPriority(2);
+ _object1.setFrame((mode == 1) ? 4 : 5);
+ EventHandler::postInit();
+}
+
+void Scene570::IconManager::hideList() {
+ SynchronizedList<Icon *>::iterator i;
+ for (i = _list.begin(); i != _list.end(); ++i) {
+ (*i)->_sceneText.remove();
+ }
+}
+
+void Scene570::IconManager::refreshList() {
+ Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene;
+
+ _object1.setPosition(Common::Point(163, 19));
+ scene->_object3.setStrip(4);
+
+ // Clear any current icons
+ SynchronizedList<Icon *>::iterator i;
+ for (i = _list.begin(); i != _list.end(); ++i) {
+ Icon *item = *i;
+
+ item->setVisage(572);
+ item->setStrip(1);
+ item->fixPriority(2);
+ item->setPosition(Common::Point(330, 100));
+ item->_sceneText.remove();
+ }
+
+ // Refresh the list
+ int iconIndex = 0, folderIndex = 0;
+ for (i = _list.begin(); i != _list.end(); ++i) {
+ Icon *item = *i;
+
+ if (item->_iconId == 1) {
+ // Folder
+ int parentId = item->_parentFolderId;
+ item->setFrame((_selectedFolder == (item->_folderId - 1)) ? 1 : 8);
+ item->setPosition(Common::Point(168 + parentId * 11, folderIndex * 8 + 27));
+ item->_sceneText.setPosition(Common::Point(175 + parentId * 11, folderIndex * 8 + 21));
+ item->_sceneText.setup(item->_text);
+ ++folderIndex;
+ } else if (item->_parentFolderId == _selectedFolder) {
+ item->setPosition(Common::Point(229, 27 + iconIndex * 12));
+
+ switch (item->_iconId) {
+ case 2:
+ item->setFrame(9);
+ break;
+ case 3:
+ item->setFrame(7);
+ break;
+ case 5:
+ item->setFrame(10);
+ break;
+ case 6:
+ item->setFrame(11);
+ break;
+ case 7:
+ item->setFrame(12);
+ break;
+ default:
+ break;
+ }
+
+ item->_sceneText.setPosition(Common::Point(236, iconIndex * 12 + 22));
+ item->_sceneText.setup(item->_text);
+ ++iconIndex;
+ }
+ }
+}
+
+void Scene570::IconManager::addItem(Icon *item) {
+ item->_mode = _mode;
+ _list.push_back(item);
+}
+
+Scene570::Icon::Icon(): NamedObject() {
+ _iconId = _folderId = 0;
+}
+
+void Scene570::Icon::synchronize(Serializer &s) {
+ NamedObject::synchronize(s);
+ s.syncAsSint16LE(_iconId);
+ s.syncAsSint16LE(_folderId);
+ s.syncAsSint16LE(_parentFolderId);
+ s.syncAsSint16LE(_mode);
+}
+
+void Scene570::Icon::remove() {
+ _sceneText.remove();
+ NamedObject::remove();
+}
+
+bool Scene570::Icon::startAction(CursorType action, Event &event) {
+ Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ switch (_iconId) {
+ case 1:
+ SceneItem::display2(570, 9);
+ break;
+ case 2:
+ SceneItem::display2(570, 10);
+ break;
+ case 3:
+ SceneItem::display2(570, 4);
+ break;
+ case 5:
+ SceneItem::display2(570, 11);
+ break;
+ case 6:
+ SceneItem::display2(570, 12);
+ break;
+ case 7:
+ SceneItem::display2(570, 13);
+ break;
+ default:
+ break;
+ }
+ return true;
+ case CURSOR_USE:
+ // Select the given icon
+ scene->_sound1.play(73);
+ switch (_iconId) {
+ case 1:
+ // Folder, so select it
+ scene->_iconManager._selectedFolder = _folderId - 1;
+ scene->_iconManager.refreshList();
+ break;
+ case 2:
+ scene->_iconManager.hideList();
+ scene->_sceneMode = 5702;
+ scene->setAction(&scene->_sequenceManager, scene, 5702, &scene->_object3, NULL);
+ break;
+ case 3:
+ scene->_iconManager.hideList();
+ scene->_passwordEntry.postInit();
+ break;
+ case 5:
+ SceneItem::display2(570, 5);
+ break;
+ case 6:
+ scene->_iconManager.hideList();
+ switch (_folderId) {
+ case 8:
+ T2_GLOBALS._uiElements.hide();
+ T2_GLOBALS._uiElements._active = false;
+ scene->_sceneMode = 5705;
+ scene->setAction(&scene->_sequenceManager, scene, 5705, &scene->_object3, NULL);
+ break;
+ case 10:
+ T2_GLOBALS._uiElements.hide();
+ T2_GLOBALS._uiElements._active = false;
+ scene->_sceneMode = 5706;
+ scene->setAction(&scene->_sequenceManager, scene, 5706, &scene->_object3, NULL);
+ break;
+ case 12:
+ T2_GLOBALS._uiElements.hide();
+ T2_GLOBALS._uiElements._active = false;
+ scene->_sceneMode = 5707;
+ scene->setAction(&scene->_sequenceManager, scene, 5707, &scene->_object3, NULL);
+ break;
+ default:
+ break;
+ }
+ break;
+ case 7:
+ scene->_iconManager.hideList();
+ T2_GLOBALS._uiElements.hide();
+ T2_GLOBALS._uiElements._active = false;
+ scene->_sceneMode = 5704;
+ scene->setAction(&scene->_sequenceManager, scene, 5704, &scene->_object3, NULL);
+ break;
+ }
+ return true;
+ case CURSOR_TALK:
+ SceneItem::display2(570, 15);
+ return true;
+ case CURSOR_PRINTER:
+ switch (_iconId) {
+ case 1:
+ // Folder - "You can't print that"
+ SceneItem::display2(570, 8);
+ break;
+ case 7:
+ scene->_sound1.play(74);
+ if (BF_INVENTORY.getObjectScene(INV_PRINT_OUT) == 570) {
+ SceneItem::display2(570, 6);
+ T2_GLOBALS._uiElements.addScore(30);
+ BF_INVENTORY.setObjectScene(INV_PRINT_OUT, 1);
+ } else {
+ SceneItem::display2(570, 7);
+ }
+ break;
+ default:
+ // You don't want to print that
+ SceneItem::display2(570, 18);
+ break;
+ }
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+void Scene570::Icon::setDetails(int iconId, int folderId, int parentFolderId, int unused, const Common::String &msg) {
+ Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene;
+ NamedObject::postInit();
+
+ _iconId = iconId;
+ _folderId = folderId;
+ _parentFolderId = parentFolderId;
+ _text = msg;
+
+ _sceneText._color1 = 22;
+ _sceneText._color2 = 9;
+ _sceneText._color3 = 9;
+ _sceneText._width = 128;
+ _sceneText._fontNumber = 9000;
+ _sceneText.fixPriority(2);
+
+ BF_GLOBALS._sceneItems.push_front(this);
+ scene->_iconManager.addItem(this);
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene570::PowerSwitch::startAction(CursorType action, Event &event) {
+ Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_USE:
+ if (scene->_object4._flag == 1) {
+ setFrame(1);
+ scene->_object3.remove();
+ } else {
+ if (!BF_GLOBALS.getFlag(fGotPointsForCoin)) {
+ T2_GLOBALS._uiElements.addScore(10);
+ BF_GLOBALS.setFlag(fGotPointsForCoin);
+ }
+
+ scene->_sound1.play(70);
+ scene->_object4._flag = 1;
+ setFrame(2);
+
+ scene->_object3.postInit();
+ scene->_object3.fixPriority(1);
+ scene->_object3.setDetails(570, 16, 15, 17);
+ BF_GLOBALS._sceneItems.remove(&scene->_object3);
+ BF_GLOBALS._sceneItems.push_front(&scene->_object3);
+
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 5700;
+ setAction(&scene->_sequenceManager, scene, 5700, &scene->_object3, NULL);
+ }
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene570::PrinterIcon::startAction(CursorType action, Event &event) {
+ if (action == CURSOR_USE) {
+ BF_GLOBALS._events.setCursor(CURSOR_PRINTER);
+ return true;
+ } else {
+ return NamedObject::startAction(action, event);
+ }
+}
+
+void Scene570::Object3::remove() {
+ Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene;
+ scene->_object4._flag = 0;
+
+ scene->_printerIcon.remove();
+ scene->_iconManager.remove();
+ scene->_folder1.remove();
+ scene->_folder2.remove();
+ scene->_folder3.remove();
+ scene->_folder4.remove();
+ scene->_icon1.remove();
+ scene->_icon2.remove();
+ scene->_icon3.remove();
+ scene->_icon4.remove();
+ scene->_icon5.remove();
+ scene->_icon6.remove();
+ scene->_icon7.remove();
+ scene->_icon8.remove();
+ scene->_icon9.remove();
+
+ FocusObject::remove();
+ BF_GLOBALS._sceneManager.changeScene(560);
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene570::FloppyDrive::startAction(CursorType action, Event &event) {
+ Scene570 *scene = (Scene570 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_USE:
+ if (BF_INVENTORY.getObjectScene(INV_D_FLOPPY) == 571) {
+ BF_INVENTORY.setObjectScene(INV_D_FLOPPY, 1);
+ scene->_iconManager.refreshList();
+ SceneItem::display2(570, 2);
+ } else {
+ SceneItem::display2(570, 3);
+ }
+ return true;
+ case INV_D_FLOPPY:
+ BF_INVENTORY.setObjectScene(INV_D_FLOPPY, 571);
+ scene->_iconManager.refreshList();
+ return true;
+ default:
+ return NamedHotspot::startAction(action, event);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene570::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+ loadScene(570);
+
+ _stripManager.addSpeaker(&_gameTextSpeaker);
+ if (BF_GLOBALS._dayNumber == 0)
+ BF_GLOBALS._dayNumber = 1;
+
+ _object4._flag = 0;
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.enableControl();
+ BF_GLOBALS._player.hide();
+
+ _powerSwitch.postInit();
+ _powerSwitch.setVisage(570);
+ _powerSwitch.setStrip(4);
+ _powerSwitch.setFrame(1);
+ _powerSwitch.setPosition(Common::Point(163, 131));
+ _powerSwitch.setDetails(570, 1, 15, -1, 1, NULL);
+
+ _floppyDrive.setDetails(Rect(258, 111, 303, 120), 570, 0, 15, -1, 1, NULL);
+ _item11.setDetails(0, 570, 15, 15, 15, 1);
+ _monitor.setDetails(1, 570, 19, 20, 21, 1);
+ _item3.setDetails(2, 570, 22, 23, 24, 1);
+ _case.setDetails(3, 570, 25, 26, 27, 1);
+ _keyboard.setDetails(4, 570, 28, 29, 30, 1);
+ _desk.setDetails(5, 570, 31, 32, 33, 1);
+ _printer.setDetails(7, 570, 37, 38, 39, 1);
+ _window.setDetails(8, 570, 40, 41, 42, 1);
+ _plant.setDetails(9, 570, 43, 44, 45, 1);
+
+ if ((BF_GLOBALS._dayNumber == 1) && (BF_INVENTORY.getObjectScene(INV_CRATE1) == 1)) {
+ _object4.postInit();
+ _object4.setVisage(574);
+ _object4.setPosition(Common::Point(90, 84));
+ }
+}
+
+void Scene570::signal() {
+ switch (_sceneMode) {
+ case 5700:
+ _object3.setStrip(4);
+ _object3.setFrame(1);
+
+ _printerIcon.postInit();
+ _printerIcon.setVisage(572);
+ _printerIcon.setFrame(3);
+ _printerIcon.setPosition(Common::Point(172, 71));
+ _printerIcon.fixPriority(2);
+ _printerIcon.setDetails(570, 14, 15, -1, 2, NULL);
+
+ _iconManager.setup(2);
+ _folder1.setDetails(1, 1, 0, 2, SCENE570_C_DRIVE);
+ _folder2.setDetails(1, 2, 1, 2, SCENE570_RING);
+ _folder3.setDetails(1, 3, 1, 2, SCENE570_PROTO);
+ _folder4.setDetails(1, 4, 1, 2, SCENE570_WACKY);
+
+ if (!BF_GLOBALS.getFlag(fDecryptedBluePrints))
+ _icon1.setDetails(3, 5, 0, 2, SCENE570_COBB);
+ _icon2.setDetails(2, 7, 0, 2, SCENE570_LETTER);
+ if (BF_GLOBALS.getFlag(fDecryptedBluePrints))
+ _icon3.setDetails(7, 6, 0, 2, SCENE570_COBB);
+
+ _icon4.setDetails(6, 8, 1, 2, SCENE570_RINGEXE);
+ _icon5.setDetails(5, 9, 1, 2, SCENE570_RINGDATA);
+ _icon6.setDetails(6, 10, 2, 2, SCENE570_PROTOEXE);
+ _icon7.setDetails(5, 11, 2, 2, SCENE570_PROTODATA);
+ _icon8.setDetails(6, 12, 3, 2, SCENE570_WACKYEXE);
+ _icon9.setDetails(5, 13, 3, 2, SCENE570_WACKYDATA);
+
+ _iconManager.refreshList();
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 5701:
+ BF_GLOBALS.setFlag(fDecryptedBluePrints);
+ _iconManager._list.remove(&_icon1);
+ _icon1.remove();
+
+ _object3.setVisage(572);
+ _object3.setStrip(4);
+ _object3.setFrame(1);
+ _object3.fixPriority(1);
+
+ _icon3.setDetails(7, 6, 0, 2, SCENE570_COBB);
+ _iconManager.refreshList();
+ T2_GLOBALS._uiElements._active = true;
+ T2_GLOBALS._uiElements.show();
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 5704:
+ case 5705:
+ case 5706:
+ case 5707:
+ T2_GLOBALS._uiElements._active = true;
+ T2_GLOBALS._uiElements.show();
+ _object3.setPosition(Common::Point(220, 75));
+ _object3.setVisage(572);
+ _object3.setStrip(4);
+ _object3.setFrame(1);
+ // Deliberate fall-through
+ case 5702:
+ case 5703:
+ _object3.fixPriority(1);
+ _iconManager.refreshList();
+ BF_GLOBALS._player.enableControl();
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene570::process(Event &event) {
+ SceneExt::process(event);
+
+ if (!event.handled && (_sceneMode == 10))
+ // Password entry active, so pass events to it
+ _passwordEntry.process(event);
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 580 - Child Protective Services Parking Lot
+ *
+ *--------------------------------------------------------------------------*/
+
+bool Scene580::Vechile::startAction(CursorType action, Event &event) {
+ Scene580 *scene = (Scene580 *)BF_GLOBALS._sceneManager._scene;
+
+ if (action == CURSOR_USE) {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 1;
+ scene->setAction(&scene->_sequenceManager, scene, 5800, &BF_GLOBALS._player, NULL);
+ return true;
+ } else {
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene580::Door::startAction(CursorType action, Event &event) {
+ Scene580 *scene = (Scene580 *)BF_GLOBALS._sceneManager._scene;
+
+ if (action == CURSOR_USE) {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 5802;
+ scene->setAction(&scene->_sequenceManager, scene, 5802, &BF_GLOBALS._player, this, NULL);
+ return true;
+ } else {
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene580::Lyle::startAction(CursorType action, Event &event) {
+ if (action == CURSOR_LOOK) {
+ SceneItem::display2(580, 7);
+ return true;
+ } else {
+ return NamedObject::startAction(action, event);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene580::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+ loadScene(580);
+ setZoomPercents(45, 95, 55, 100);
+ BF_GLOBALS._sound1.changeSound(33);
+
+ if (BF_GLOBALS._dayNumber == 0)
+ BF_GLOBALS._dayNumber = 1;
+
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ BF_GLOBALS._player._moveDiff = Common::Point(2, 1);
+
+ _door.postInit();
+ _door.setVisage(580);
+ _door.setStrip(4);
+ _door.setPosition(Common::Point(168, 41));
+ _door.hide();
+ _door.setDetails(580, 5, -1, -1, 1, NULL);
+
+ _vechile.postInit();
+ _vechile.setVisage(580);
+ _vechile.fixPriority(65);
+
+ if (BF_GLOBALS.getFlag(fWithLyle)) {
+ _lyle.postInit();
+ _lyle.setVisage(835);
+ _lyle.setObjectWrapper(new SceneObjectWrapper());
+ _lyle.animate(ANIM_MODE_1, NULL);
+ _lyle._moveDiff = Common::Point(2, 1);
+ _lyle.setPosition(Common::Point(149, 70));
+ BF_GLOBALS._sceneItems.push_back(&_lyle);
+
+ _vechile.changeZoom(90);
+ _vechile.setStrip(3);
+ _vechile.setPosition(Common::Point(165, 76));
+ _vechile.setDetails(580, 2, 3, -1, 1, NULL);
+ _vechile.setVisage(303);
+
+ BF_GLOBALS._player.setVisage(303);
+
+ BF_GLOBALS._walkRegions.proc1(8);
+ BF_GLOBALS._walkRegions.proc1(9);
+ BF_GLOBALS._walkRegions.proc1(10);
+ BF_GLOBALS._walkRegions.proc1(11);
+ } else {
+ _vechile.setPosition(Common::Point(159, 72));
+
+ if (BF_GLOBALS.getFlag(onDuty)) {
+ _vechile.setStrip(1);
+ _vechile.setFrame(2);
+ _vechile.setDetails(300, 11, 13, -1, 1, NULL);
+
+ BF_GLOBALS._player.setVisage(304);
+ } else {
+ _vechile.setStrip(2);
+ _vechile.setFrame(3);
+ _vechile.setDetails(580, 0, 1, -1, 1, NULL);
+
+ BF_GLOBALS._player.setVisage(303);
+ }
+ }
+
+ BF_GLOBALS._player.updateAngle(_vechile._position);
+
+ if (BF_GLOBALS._sceneManager._previousScene == 590) {
+ // Leaving Services
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 0;
+ setAction(&_sequenceManager, this, 5801, &BF_GLOBALS._player, NULL);
+ } else {
+ // Arriving at parking lot
+ BF_GLOBALS._player.setPosition(Common::Point(177, 58));
+ signal();
+ }
+
+ _item1.setDetails(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), 580, 6, -1, -1, 1, NULL);
+}
+
+void Scene580::signal() {
+ switch (_sceneMode) {
+ case 1:
+ BF_GLOBALS._sceneManager.changeScene(60);
+ break;
+ case 5802:
+ BF_GLOBALS._sound1.fadeOut2(NULL);
+ BF_GLOBALS._sceneManager.changeScene(590);
+ break;
+ default:
+ BF_GLOBALS._player.enableControl();
+ break;
+ }
+}
+
+void Scene580::process(Event &event) {
+ if ((event.eventType == EVENT_BUTTON_DOWN) && (BF_GLOBALS._events.getCursor() == INV_COLT45) &&
+ BF_GLOBALS._player.contains(event.mousePos)) {
+ BF_GLOBALS._player.disableControl();
+ SceneItem::display2(350, 26);
+
+ _sceneMode = 0;
+ signal();
+ event.handled = true;
+ }
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 590 - Child Protective Services
+ *
+ *--------------------------------------------------------------------------*/
+
+bool Scene590::Laura::startAction(CursorType action, Event &event) {
+ Scene590 *scene = (Scene590 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_TALK:
+ if (!scene->_field17DC)
+ scene->_stripNumber = 5905;
+ else if (!scene->_field17DE) {
+ if (scene->_field17E2) {
+ scene->_stripNumber = 5907;
+ } else {
+ scene->_field17E2 = 1;
+ scene->_stripNumber = 5906;
+ }
+ }
+
+ scene->setAction(&scene->_action1);
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene590::Skip::startAction(CursorType action, Event &event) {
+ Scene590 *scene = (Scene590 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_TALK:
+ if (BF_INVENTORY.getObjectScene(INV_BASEBALL_CARD) == 1) {
+ scene->_stripNumber = !scene->_field17DC ? 5903 : 5902;
+ } else {
+ scene->_stripNumber = !scene->_field17DC ? 5901 : 5902;
+ }
+
+ scene->setAction(&scene->_action1);
+ scene->_field17DC = 1;
+ return true;
+ case INV_BASEBALL_CARD:
+ scene->_field17DE = 1;
+ T2_GLOBALS._uiElements.addScore(10);
+ BF_INVENTORY.setObjectScene(INV_BASEBALL_CARD, 2);
+ BF_GLOBALS._player.disableControl();
+
+ scene->_stripNumber = !scene->_field17DC ? 5900 : 5904;
+ scene->_field17DC = 1;
+ scene->setAction(&scene->_action2);
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene590::Exit::startAction(CursorType action, Event &event) {
+ ADD_PLAYER_MOVER(BF_GLOBALS._player._position.x - 100, BF_GLOBALS._player._position.y + 75);
+ return true;
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene590::Action1::signal() {
+ Scene590 *scene = (Scene590 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ BF_GLOBALS._player.disableControl();
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ ADD_PLAYER_MOVER(220, 132);
+ break;
+ case 1:
+ scene->_stripManager.start(scene->_stripNumber, this);
+ break;
+ case 2:
+ BF_GLOBALS._player.enableControl();
+ remove();
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene590::Action2::signal() {
+ Scene590 *scene = (Scene590 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0: {
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ ADD_PLAYER_MOVER_THIS(BF_GLOBALS._player, 220, 132);
+ break;
+ }
+ case 1:
+ ADD_PLAYER_MOVER_THIS(BF_GLOBALS._player, 220, 132);
+ break;
+ case 2:
+ BF_GLOBALS._player.setVisage(381);
+ BF_GLOBALS._player.setStrip(2);
+ BF_GLOBALS._player.setFrame(1);
+ BF_GLOBALS._player.setPosition(Common::Point(257, 130));
+ BF_GLOBALS._player.animate(ANIM_MODE_4, 3, 1, this);
+
+ scene->_skip.setStrip(2);
+ scene->_skip.animate(ANIM_MODE_5, NULL);
+ break;
+ case 3:
+ scene->_skip.animate(ANIM_MODE_6, NULL);
+ BF_GLOBALS._player.animate(ANIM_MODE_5, this);
+ break;
+ case 4:
+ scene->_skip.setStrip(1);
+ scene->_skip.animate(ANIM_MODE_1, NULL);
+
+ BF_GLOBALS._player.setVisage(368);
+ BF_GLOBALS._player.setStrip(7);
+ BF_GLOBALS._player.setPosition(Common::Point(238, 131));
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ scene->_stripManager.start(scene->_stripNumber, this);
+ break;
+ case 5:
+ scene->_sceneMode = 3;
+ scene->signal();
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+Scene590::Scene590(): PalettedScene() {
+ _field17DC = _field17DE = _stripNumber = _field17E2 = 0;
+}
+
+void Scene590::synchronize(Serializer &s) {
+ PalettedScene::synchronize(s);
+ s.syncAsSint16LE(_field17DC);
+ s.syncAsSint16LE(_field17DE);
+ s.syncAsSint16LE(_stripNumber);
+ s.syncAsSint16LE(_field17E2);
+}
+
+void Scene590::postInit(SceneObjectList *OwnerList) {
+ PalettedScene::postInit();
+ loadScene(590);
+
+ BF_GLOBALS._sound1.fadeOut2(NULL);
+ _sound1.play(18);
+ _sound1.fade(100, 5, 10, false, NULL);
+
+ if (BF_GLOBALS._dayNumber == 0) {
+ BF_GLOBALS._dayNumber = 1;
+ BF_GLOBALS._bookmark = bEndOfWorkDayOne;
+ BF_INVENTORY.setObjectScene(INV_BASEBALL_CARD, 1);
+ }
+
+ _exit.setDetails(Rect(0, 157, 182, 167), 590, -1, -1, -1, 1, NULL);
+
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ BF_GLOBALS._player.setPosition(Common::Point(0, 190));
+
+ _stripManager.addSpeaker(&_skipSpeaker);
+ _stripManager.addSpeaker(&_lauraSpeaker);
+ _stripManager.addSpeaker(&_jakeJacketSpeaker);
+
+ if (BF_GLOBALS.getFlag(onDuty)) {
+ BF_GLOBALS._player.setVisage(361);
+ BF_GLOBALS._player._moveDiff = Common::Point(6, 2);
+ } else {
+ BF_GLOBALS._player.setVisage(368);
+ BF_GLOBALS._player._moveDiff = Common::Point(6, 2);
+
+ if ((BF_GLOBALS._bookmark >= bEndOfWorkDayOne) && (BF_GLOBALS._bookmark < bLyleStoppedBy)) {
+ _skip.postInit();
+ _skip.setVisage(693);
+ _skip.setPosition(Common::Point(271, 117));
+ _skip.setDetails(590, 26, -1, 27, 1, NULL);
+
+ _laura.postInit();
+ _laura.setVisage(692);
+ _laura.setPosition(Common::Point(248, 115));
+ _laura.setDetails(590, 24, -1, 25, 1, NULL);
+ }
+ }
+
+ _item2.setDetails(1, 590, 0, -1, 12, 1);
+ _item3.setDetails(3, 590, 2, -1, 14, 1);
+ _item4.setDetails(20, 590, 3, -1, 15, 1);
+ _item5.setDetails(22, 590, 4, -1, 16, 1);
+ _item6.setDetails(7, 590, 6, -1, 17, 1);
+ _item7.setDetails(7, 590, 6, -1, 18, 1);
+ _item8.setDetails(9, 590, 7, -1, 19, 1);
+ _item9.setDetails(11, 590, 8, -1, 20, 1);
+ _item10.setDetails(13, 590, 9, -1, 21, 1);
+ _item11.setDetails(15, 590, 10, -1, 22, 1);
+ _item12.setDetails(17, 590, 11, -1, 23, 1);
+
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 0;
+ setAction(&_sequenceManager, this, 5900, &BF_GLOBALS._player, NULL);
+}
+
+void Scene590::signal() {
+ static uint32 black = 0;
+
+ switch (_sceneMode) {
+ case 1:
+ _sound1.fadeOut2(NULL);
+ BF_GLOBALS._sceneManager.changeScene(271);
+ break;
+ case 2:
+ _sound1.fadeOut2(NULL);
+ BF_GLOBALS._sceneManager.changeScene(580);
+ break;
+ case 3:
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 0, 170);
+
+ _skip.animate(ANIM_MODE_1, NULL);
+ ADD_MOVER_NULL(_skip, 0, 170);
+
+ _laura.animate(ANIM_MODE_1, NULL);
+ ADD_MOVER_NULL(_laura, 0, 170);
+
+ _sceneMode = 1;
+ addFader((byte *)&black, 2, this);
+ break;
+ default:
+ BF_GLOBALS._player.enableControl();
+ break;
+ }
+}
+
+void Scene590::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(EXITFRAME_SW);
+ 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 Scene590::dispatch() {
+ if (!_action && (BF_GLOBALS._player._position.x < 182) && (BF_GLOBALS._player._position.y > 158)) {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 2;
+ setAction(&_sequenceManager, this, 5901, &BF_GLOBALS._player, NULL);
+ }
+}
+
+} // End of namespace BlueForce
+
+} // End of namespace TsAGE
diff --git a/engines/tsage/blue_force/blueforce_scenes5.h b/engines/tsage/blue_force/blueforce_scenes5.h
new file mode 100644
index 0000000000..34328ab9e8
--- /dev/null
+++ b/engines/tsage/blue_force/blueforce_scenes5.h
@@ -0,0 +1,407 @@
+/* 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.
+ *
+ */
+
+#ifndef TSAGE_BLUEFORCE_SCENES5_H
+#define TSAGE_BLUEFORCE_SCENES5_H
+
+#include "common/scummsys.h"
+#include "tsage/blue_force/blueforce_logic.h"
+#include "tsage/blue_force/blueforce_speakers.h"
+#include "tsage/converse.h"
+#include "tsage/events.h"
+#include "tsage/core.h"
+#include "tsage/scenes.h"
+#include "tsage/globals.h"
+#include "tsage/sound.h"
+
+namespace TsAGE {
+
+namespace BlueForce {
+
+using namespace TsAGE;
+
+class Scene550: public SceneExt {
+ /* Objects */
+ class Lyle: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class CaravanDoor: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Vechile: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Actions */
+ class Action1: public ActionExt {
+ public:
+ virtual void signal();
+ };
+public:
+ SequenceManager _sequenceManager;
+ Lyle _lyle;
+ CaravanDoor _caravanDoor;
+ Vechile _vechile;
+ NamedHotspot _item1, _item2, _item3;
+ SpeakerGameText _gameTextSpeaker;
+ SpeakerLyleHat _lyleHatSpeaker;
+ SpeakerJakeJacket _jakeJacketSpeaker;
+ Action1 _action1;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+};
+
+class Scene551: public Scene550 {
+ /* Objects */
+ class Vechile: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class DrunkStanding: public NamedObjectExt {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Drunk: public NamedObjectExt {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class PatrolCarTrunk: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class TrunkInset: public FocusObject {
+ public:
+ virtual void remove();
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class TrunkKits: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Harrison: public NamedObjectExt {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Items */
+ class Item4: public SceneHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Actions */
+ class Action2: public Action {
+ public:
+ virtual void signal();
+ };
+public:
+ SpeakerDrunk _drunkSpeaker;
+ SpeakerJakeUniform _jakeUniformSpeaker;
+ SpeakerGiggles _gigglesSpeaker;
+ Vechile _vechile2;
+ DrunkStanding _drunkStanding;
+ Drunk _drunk;
+ PatrolCarTrunk _patrolCarTrunk;
+ TrunkInset _trunkInset;
+ TrunkKits _trunkKits;
+ Harrison _harrison;
+ NamedObject _object11, _object12, _object13;
+ SceneObject _object14, _object15;
+ Item4 _item4;
+ Action2 _action2;
+ int _field1CD0, _field1CD2;
+
+ Scene551();
+ virtual void synchronize(Serializer &s);
+ void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+ virtual void dispatch();
+};
+
+class Scene560: public SceneExt {
+ /* Objects */
+ class DeskChair: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Box: public NamedObjectExt {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class SafeInset: public FocusObject {
+ /* Items */
+ class Item: public NamedHotspotExt {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ public:
+ NamedObject _digit0, _digit1, _digit2;
+ Item _item1, _item2, _item3, _item4, _item5, _item6;
+ Visage _cursorVisage;
+
+ virtual Common::String getClassName() { return "Scene560_SafeInset"; }
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void remove();
+ virtual void signal();
+ virtual void process(Event &event);
+ };
+ class Nickel: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class BoxInset: public FocusObject {
+ /* Items */
+ class Item1: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ public:
+ Item1 _item1;
+
+ virtual Common::String getClassName() { return "Scene560_BoxInset"; }
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void remove();
+ };
+
+ /* Item groups */
+ class PicturePart: public NamedHotspotExt {
+ public:
+ virtual Common::String getClassName() { return "Scene560_PicturePart"; }
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Items */
+ class Computer: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Actions */
+ class Action1: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action2: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action3: public Action {
+ public:
+ virtual void signal();
+ };
+public:
+ Action1 _action1;
+ Action2 _action2;
+ Action3 _action3;
+ SpeakerGameText _gameTextSpeaker;
+ DeskChair _deskChair;
+ Box _box;
+ SafeInset _safeInset;
+ Nickel _nickel;
+ BoxInset _boxInset;
+ NamedObject _object6;
+ PicturePart _picture1, _picture2, _picture3, _picture4;
+ Computer _computer;
+ NamedHotspot _chair, _lamp, _item4, _trophy, _watercolours, _fileCabinets;
+ NamedHotspot _certificate, _bookcase, _desk, _carpet, _item12, _office;
+ ASound _sound1;
+ int _field380, _field11EA;
+ Common::Point _destPosition;
+
+ Scene560();
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+ virtual void process(Event &event);
+ virtual void dispatch();
+};
+
+class Scene570: public SceneExt {
+ /* Custom classes */
+ class PasswordEntry: public EventHandler {
+ private:
+ void checkPassword();
+ public:
+ SceneText _passwordText, _entryText;
+ Common::String _passwordStr, _entryBuffer;
+
+ PasswordEntry();
+ virtual Common::String getClassName() { return "Scene570_PasswordEntry"; }
+ virtual void synchronize(Serializer &s);
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void process(Event &event);
+ };
+ class Icon: public NamedObject {
+ public:
+ SceneText _sceneText;
+ int _iconId, _folderId, _parentFolderId, _mode;
+ Common::String _text;
+
+ Icon();
+ virtual Common::String getClassName() { return "Scene570_Custom2"; }
+ virtual void synchronize(Serializer &s);
+ virtual void remove();
+ virtual bool startAction(CursorType action, Event &event);
+
+ void setDetails(int iconId, int folderId, int parentFolderId, int unused, const Common::String &msg);
+ };
+ class IconManager: public EventHandler {
+ public:
+ NamedObject _object1;
+ SynchronizedList<Icon *> _list;
+ int _mode, _selectedFolder, _fieldAA, _fieldAC;
+
+ IconManager();
+ virtual void remove();
+
+ void setup(int mode);
+ void hideList();
+ void refreshList();
+ void addItem(Icon *item);
+ };
+
+ /* Objects */
+ class PowerSwitch: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class PrinterIcon: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Object3: public FocusObject {
+ public:
+ virtual void remove();
+ };
+
+ /* Items */
+ class FloppyDrive: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+public:
+ SequenceManager _sequenceManager;
+ SpeakerGameText _gameTextSpeaker;
+ PasswordEntry _passwordEntry;
+ PowerSwitch _powerSwitch;
+ PrinterIcon _printerIcon;
+ Object3 _object3;
+ NamedObjectExt _object4;
+ Icon _folder1, _folder2, _folder3, _folder4;
+ Icon _icon1, _icon2, _icon3, _icon4, _icon5;
+ Icon _icon6, _icon7, _icon8, _icon9;
+ IconManager _iconManager;
+ FloppyDrive _floppyDrive;
+ NamedHotspot _monitor, _item3, _case, _keyboard, _desk;
+ NamedHotspot _item7, _printer, _window, _plant, _item11;
+ ASound _sound1;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+ virtual void process(Event &event);
+};
+
+class Scene580: public SceneExt {
+ /* Objects */
+ class Vechile: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Door: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Lyle: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+public:
+ SequenceManager _sequenceManager;
+ Vechile _vechile;
+ Door _door;
+ Lyle _lyle;
+ NamedHotspot _item1;
+ SpeakerGameText _gameTextSpeaker;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+ virtual void process(Event &event);
+};
+
+class Scene590: public PalettedScene {
+ /* Objects */
+ class Laura: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Skip: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Items */
+ class Exit: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Actions */
+ class Action1: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action2: public Action {
+ public:
+ virtual void signal();
+ };
+public:
+ SequenceManager _sequenceManager;
+ Laura _laura;
+ Skip _skip;
+ SceneObject _object3;
+ Exit _exit;
+ NamedHotspot _item2, _item3, _item4, _item5, _item6, _item7;
+ NamedHotspot _item8, _item9, _item10, _item11, _item12;
+ SpeakerSkip _skipSpeaker;
+ SpeakerJakeJacket _jakeJacketSpeaker;
+ SpeakerLaura _lauraSpeaker;
+ ASoundExt _sound1;
+ Action1 _action1;
+ Action2 _action2;
+ int _field17DC, _field17DE, _stripNumber, _field17E2;
+
+ Scene590();
+ virtual void synchronize(Serializer &s);
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+ virtual void process(Event &event);
+ virtual void dispatch();
+};
+
+} // End of namespace BlueForce
+
+} // End of namespace TsAGE
+
+#endif
diff --git a/engines/tsage/blue_force/blueforce_scenes6.cpp b/engines/tsage/blue_force/blueforce_scenes6.cpp
new file mode 100644
index 0000000000..56fdec47cd
--- /dev/null
+++ b/engines/tsage/blue_force/blueforce_scenes6.cpp
@@ -0,0 +1,515 @@
+/* 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_scenes6.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 600 - Crash cut-scene
+ *
+ *--------------------------------------------------------------------------*/
+
+void Scene600::Action1::signal() {
+ Scene600 *scene = (Scene600 *)BF_GLOBALS._sceneManager._scene;
+ static const uint32 black = 0;
+
+ switch (_actionIndex++) {
+ case 0:
+ setDelay(2);
+ break;
+ case 1:
+ BF_GLOBALS._sound1.play(57);
+ setDelay(120);
+ break;
+ case 2:
+ scene->_sound1.play(59);
+ setAction(&scene->_sequenceManager, this, 600, &scene->_object2, &scene->_object1,
+ &BF_GLOBALS._player, &scene->_object3, NULL);
+ break;
+ case 3:
+ BF_GLOBALS._sound1.play(61);
+ setDelay(180);
+ break;
+ case 4:
+ setDelay(180);
+ break;
+ case 5: {
+ BF_GLOBALS._player.remove();
+ scene->_object1.remove();
+ scene->_object2.remove();
+ scene->_object3.remove();
+
+ for (int percent = 100; percent >= 0; percent -= 5) {
+ BF_GLOBALS._scenePalette.fade((const byte *)&black, false, percent);
+ g_system->delayMillis(10);
+ }
+
+ SynchronizedList<SceneObject *>::iterator i;
+ for (i = BF_GLOBALS._sceneObjects->begin(); i != BF_GLOBALS._sceneObjects->end(); ++i) {
+ SceneObject *pObj = *i;
+ pObj->addMover(NULL);
+ pObj->setObjectWrapper(NULL);
+ pObj->animate(ANIM_MODE_NONE, NULL);
+ }
+
+ BF_GLOBALS._screenSurface.fillRect(BF_GLOBALS._screenSurface.getBounds(), 0);
+ BF_GLOBALS._v51C44 = 1;
+ scene->loadScene(999);
+ setDelay(5);
+ break;
+ }
+ case 6:
+ setDelay(5);
+ break;
+ case 7:
+ BF_GLOBALS._v51C44 = 0;
+ remove();
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene600::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+ loadScene(600);
+ setZoomPercents(0, 100, 200, 100);
+ _sceneBounds.moveTo(320, 0);
+
+ _sound1.play(58);
+ _sound1.holdAt(1);
+
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.hide();
+ BF_GLOBALS._player.setPosition(Common::Point(639, 0));
+ BF_GLOBALS._player.disableControl();
+
+ _object3.postInit();
+ _object3.hide();
+ _object2.postInit();
+
+ _object1.postInit();
+ _object1.setVisage(600);
+ _object1.setStrip(7);
+ _object1.setPosition(Common::Point(417, 82));
+
+ BF_GLOBALS.clearFlag(onDuty);
+ BF_INVENTORY.setObjectScene(INV_TICKET_BOOK, 60);
+ BF_INVENTORY.setObjectScene(INV_MIRANDA_CARD, 60);
+ _sceneMode = 600;
+
+ setAction(&_action1, this);
+}
+
+void Scene600::signal() {
+ BF_GLOBALS._sceneManager.changeScene(620);
+}
+
+// WORKAROUND: Fix for original game bug where the global scrolling object follower
+// remains set to an object within the scene that is no longer active
+void Scene600::remove() {
+ BF_GLOBALS._scrollFollower = &BF_GLOBALS._player;
+
+ SceneExt::remove();
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 620 - Hospital cut-scene
+ *
+ *--------------------------------------------------------------------------*/
+
+void Scene620::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+ loadScene(999);
+
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.disableControl();
+ BF_GLOBALS._player.setVisage(621);
+ BF_GLOBALS._player.setPosition(Common::Point(47, 96));
+
+ static const uint32 black = 0;
+ add2Faders((const byte *)&black, 2, 621, this);
+}
+
+void Scene620::signal() {
+ static const uint32 black = 0;
+
+ switch (_sceneMode++) {
+ case 0:
+ case 3:
+ case 9:
+ case 12:
+ _timer1.set(60, this);
+ break;
+ case 1:
+ case 4:
+ case 7:
+ case 10:
+ case 13:
+ case 16:
+ case 19:
+ addFader((const byte *)&black, 2, this);
+ break;
+ case 2:
+ BF_GLOBALS._player.remove();
+ _object1.postInit();
+ _object1.setVisage(622);
+ _object1.setPosition(Common::Point(101, 41));
+ addFader((const byte *)&black, 2, this);
+ break;
+ case 5:
+ _object1.remove();
+
+ _object2.postInit();
+ _object2.setVisage(623);
+ _object2.setPosition(Common::Point(216, 4));
+ add2Faders((const byte *)&black, 2, 623, this);
+ break;
+ case 6:
+ _object2.animate(ANIM_MODE_5, this);
+ break;
+ case 8:
+ _object2.remove();
+
+ _object3.postInit();
+ _object3.setVisage(624);
+ _object3.setFrame(1);
+ _object3.setPosition(Common::Point(28, 88));
+ add2Faders((const byte *)&black, 2, 624, this);
+ break;
+ case 11:
+ _object3.remove();
+
+ _object4.postInit();
+ _object4.setVisage(625);
+ _object4.setPosition(Common::Point(168, 8));
+ add2Faders((const byte *)&black, 2, 625, this);
+ break;
+ case 14:
+ _object4.remove();
+
+ _object5.postInit();
+ _object5.setVisage(626);
+ _object5.setPosition(Common::Point(249, 183));
+ add2Faders((const byte *)&black, 2, 626, this);
+ break;
+ case 15:
+ _object5.animate(ANIM_MODE_5, this);
+ break;
+ case 17:
+ _object5.remove();
+
+ _object6.postInit();
+ _object6.setVisage(627);
+ _object6.setPosition(Common::Point(65, 24));
+ add2Faders((const byte *)&black, 2, 627, this);
+ break;
+ case 18:
+ _object6.animate(ANIM_MODE_5, this);
+ break;
+ case 20:
+ _object6.remove();
+ BF_GLOBALS._bookmark = bArrestedDrunk;
+ BF_GLOBALS._v4CEB6 = 0;
+ BF_GLOBALS._dayNumber = 3;
+ BF_GLOBALS._sceneManager.changeScene(271);
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 666 - Death Scene
+ *
+ *--------------------------------------------------------------------------*/
+
+void Scene666::Action1::signal() {
+ switch (_actionIndex++) {
+ case 0:
+ BF_GLOBALS._player.hide();
+ setDelay(6);
+ break;
+ case 1:
+ BF_GLOBALS._game->restartGame();
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene666::Item1::startAction(CursorType action, Event &event) {
+ return true;
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene666::postInit(SceneObjectList *OwnerList) {
+ BF_GLOBALS._sound1.play(27);
+ SceneExt::postInit();
+ BF_GLOBALS._interfaceY = 200;
+ loadScene(999);
+ BF_GLOBALS._screenSurface.fillRect(BF_GLOBALS._screenSurface.getBounds(), 0);
+
+ if (BF_GLOBALS._dayNumber == 0) {
+ BF_GLOBALS._dayNumber = 1;
+ BF_GLOBALS._deathReason = BF_GLOBALS._randomSource.getRandomNumber(23);
+ }
+
+ BF_GLOBALS._scenePalette.loadPalette(BF_GLOBALS._sceneManager._previousScene);
+ T2_GLOBALS._uiElements._active = false;
+
+ _item1.setDetails(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), 666, -1, -1, -1, 1, NULL);
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._events.setCursor(CURSOR_WALK);
+
+ if (BF_GLOBALS._sceneManager._previousScene == 271) {
+ setAction(&_action1);
+ } else {
+ switch (BF_GLOBALS._deathReason) {
+ case 4:
+ case 18:
+ case 19:
+ case 20:
+ BF_GLOBALS._scenePalette.loadPalette(668);
+ BF_GLOBALS._player.setVisage(668);
+ BF_GLOBALS._player.setStrip2(1);
+ BF_GLOBALS._player.setPosition(Common::Point(77, 155));
+ BF_GLOBALS._player.animate(ANIM_MODE_5, this);
+ break;
+ case 5:
+ BF_GLOBALS._scenePalette.loadPalette(900);
+ BF_GLOBALS._scenePalette.refresh();
+ BF_GLOBALS._player.setVisage(666);
+ BF_GLOBALS._player.setPosition(Common::Point(60, 160));
+ signal();
+ break;
+ case 7:
+ case 11:
+ case 12:
+ case 22:
+ BF_GLOBALS._scenePalette.loadPalette(667);
+ BF_GLOBALS._scenePalette.refresh();
+
+ _object1.postInit();
+ _object2.postInit();
+ _object3.postInit();
+ setAction(&_sequenceManager, this, 6660, &BF_GLOBALS._player, &_object1, &_object2,
+ &_object3, NULL);
+ break;
+ case 13:
+ case 14:
+ BF_GLOBALS._scenePalette.loadPalette(665);
+ BF_GLOBALS._scenePalette.refresh();
+ BF_GLOBALS._player.setVisage(665);
+ BF_GLOBALS._player.setPosition(Common::Point(80, 140));
+ signal();
+ break;
+ case 24:
+ BF_GLOBALS._player.setVisage(664);
+ BF_GLOBALS._player.setPosition(Common::Point(70, 160));
+ signal();
+ break;
+ default:
+ BF_GLOBALS._scenePalette.loadPalette(669);
+ BF_GLOBALS._scenePalette.refresh();
+ BF_GLOBALS._player.setVisage(669);
+ BF_GLOBALS._player.setStrip(1);
+ BF_GLOBALS._player.setPosition(Common::Point(27, 27));
+ BF_GLOBALS._player.animate(ANIM_MODE_5, this);
+ break;
+ }
+ }
+}
+
+void Scene666::remove() {
+ BF_GLOBALS._sound1.fadeOut2(NULL);
+ BF_GLOBALS._scrollFollower = &BF_GLOBALS._player;
+ SceneExt::remove();
+ T2_GLOBALS._uiElements._active = true;
+}
+
+void Scene666::signal() {
+ BF_GLOBALS._player.enableControl();
+ Rect textRect, sceneBounds;
+
+ _text._color1 = 19;
+ _text._color2 = 9;
+ _text._color3 = 13;
+ _text._fontNumber = 4;
+ _text._width = 150;
+
+ Common::String msg = g_resourceManager->getMessage(666, BF_GLOBALS._deathReason);
+ sceneBounds = BF_GLOBALS._sceneManager._scene->_sceneBounds;
+ sceneBounds.collapse(4, 2);
+ BF_GLOBALS.gfxManager()._font.getStringBounds(msg.c_str(), textRect, _text._width);
+ textRect.moveTo(160, 10);
+ textRect.contain(sceneBounds);
+
+ _text.setup(msg);
+ _text.setPosition(Common::Point(textRect.left, textRect.top));
+ _text.setPriority(255);
+ _text.show();
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 690 - Decking
+ *
+ *--------------------------------------------------------------------------*/
+
+bool Scene690::Object1::startAction(CursorType action, Event &event) {
+ Scene690 *scene = (Scene690 *)BF_GLOBALS._sceneManager._scene;
+
+ if ((action == CURSOR_USE) && (scene->_object2._strip == 1)) {
+ BF_GLOBALS._player.disableControl();
+ BF_GLOBALS._walkRegions.proc2(1);
+ BF_GLOBALS._walkRegions.proc2(6);
+ scene->_sceneMode = 6901;
+ scene->setAction(&scene->_sequenceManager, scene, 6901, &BF_GLOBALS._player,
+ &scene->_object2, &scene->_object1, &scene->_object4, &scene->_object5, NULL);
+ return true;
+ } else {
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene690::Object2::startAction(CursorType action, Event &event) {
+ Scene690 *scene = (Scene690 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_USE:
+ if (scene->_object2._strip == 3) {
+ scene->_object6.postInit();
+ scene->_object6.hide();
+ scene->_object6.fixPriority(1);
+ scene->_object6.setDetails(690, 21, 17, 23, 1, NULL);
+
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 6902;
+ scene->setAction(&scene->_sequenceManager, scene, 6902, &BF_GLOBALS._player,
+ &scene->_object2, &scene->_object6, NULL);
+ return true;
+ }
+ break;
+ case CURSOR_TALK:
+ scene->_stripManager.start(6900, &BF_GLOBALS._stripProxy);
+ return true;
+ default:
+ break;
+ }
+
+ return NamedObject::startAction(action, event);
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene690::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+ loadScene(690);
+ setZoomPercents(125, 80, 140, 100);
+ BF_GLOBALS._sound1.fadeSound(48);
+
+ if (BF_GLOBALS._dayNumber == 0)
+ BF_GLOBALS._dayNumber = 1;
+
+ _stripManager.addSpeaker(&_jakeSpeaker);
+
+ _object1.postInit();
+ _object1.setVisage(690);
+ _object1.setStrip2(2);
+ _object1.fixPriority(188);
+ _object1.setPosition(Common::Point(50, 166));
+ _object1.setDetails(690, 4, 17, 26, 1, NULL);
+
+ _object3.postInit();
+ _object3.setVisage(690);
+ _object3.fixPriority(100);
+ _object3.setPosition(Common::Point(238, 125));
+ _object3.setDetails(690, 7, 17, 28, 1, NULL);
+
+ _object2.postInit();
+ _object2.setVisage(694);
+ _object2.setStrip2(3);
+ _object2.fixPriority(125);
+ _object2.setPosition(Common::Point(100, 134));
+ _object2.setDetails(690, 12, -1, 11, 1, NULL);
+
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.disableControl();
+ BF_GLOBALS._player._moveDiff.x = 8;
+
+ _object4.postInit();
+ _object4.setDetails(690, 13, -1, -1, 1, NULL);
+
+ _object5.postInit();
+ _object5.setDetails(690, 14, -1, -1, 1, NULL);
+
+ _sceneMode = 6903;
+ setAction(&_sequenceManager, this, 6903, &BF_GLOBALS._player, &_object3, &_object4, &_object5, NULL);
+
+ _item1.setDetails(Rect(45, 28, 74, 48), 690, 0, 15, 20, 1, NULL);
+ _item2.setDetails(Rect(0, 0, 129, 78), 690, 1, 15, 20, 1, NULL);
+ _item9.setDetails(Rect(4, 26, 35, 143), 690, 29, 17, 22, 1, NULL);
+ _item10.setDetails(Rect(87, 29, 109, 112), 690, 29, 17, 22, 1, NULL);
+ _item11.setDetails(Rect(135, 30, 160, 120), 690, 29, 17, 22, 1, NULL);
+ _item3.setDetails(Rect(37, 89, 84, 117), 690, 2, 16, 21, 1, NULL);
+ _item4.setDetails(Rect(123, 98, 201, 131), 690, 5, -1, -1, 1, NULL);
+ _item7.setDetails(Rect(285, 95, 303, 133), 690, 8, -1, 25, 1, NULL);
+ _item16.setDetails(Rect(166, 35, 210, 116), 690, 32, -1, -1, 1, NULL);
+ _item6.setDetails(Rect(255, 44, 289, 130), 690, 7, 17, 24, 1, NULL);
+ _item8.setDetails(Rect(299, 44, 314, 53), 690, 27, 15, -1, 1, NULL);
+ _item5.setDetails(Rect(130, 20, 319, 135), 690, 6, 16, 28, 1, NULL);
+ _item12.setDetails(1, 690, 10, -1, -1, 1);
+ _item13.setDetails(2, 690, 30, -1, -1, 1);
+ _item14.setDetails(3, 690, 31, -1, -1, 1);
+ _item15.setDetails(4, 690, 9, -1, -1, 1);
+ _item17.setDetails(Rect(143, 0, 182, 14), 690, 33, -1, -1, 1, NULL);
+}
+
+void Scene690::signal() {
+ switch (_sceneMode) {
+ case 6901:
+ BF_GLOBALS._sound1.fadeOut2(NULL);
+ BF_GLOBALS._sceneManager.changeScene(710);
+ break;
+ case 6902:
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 6903:
+ BF_GLOBALS._walkRegions.proc1(1);
+ BF_GLOBALS._walkRegions.proc1(6);
+ BF_GLOBALS._player.enableControl();
+ break;
+ default:
+ break;
+ }
+}
+
+
+} // End of namespace BlueForce
+
+} // End of namespace TsAGE
diff --git a/engines/tsage/blue_force/blueforce_scenes6.h b/engines/tsage/blue_force/blueforce_scenes6.h
new file mode 100644
index 0000000000..e354e9e069
--- /dev/null
+++ b/engines/tsage/blue_force/blueforce_scenes6.h
@@ -0,0 +1,125 @@
+/* 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.
+ *
+ */
+
+#ifndef TSAGE_BLUEFORCE_SCENES6_H
+#define TSAGE_BLUEFORCE_SCENES6_H
+
+#include "common/scummsys.h"
+#include "tsage/blue_force/blueforce_logic.h"
+#include "tsage/blue_force/blueforce_speakers.h"
+#include "tsage/converse.h"
+#include "tsage/events.h"
+#include "tsage/core.h"
+#include "tsage/scenes.h"
+#include "tsage/globals.h"
+#include "tsage/sound.h"
+
+namespace TsAGE {
+
+namespace BlueForce {
+
+using namespace TsAGE;
+
+class Scene600 : public SceneExt {
+ /* Actions */
+ class Action1 : public Action {
+ public:
+ virtual void signal();
+ };
+public:
+ SequenceManager _sequenceManager;
+ Action1 _action1;
+ ASoundExt _sound1;
+ NamedObject _object1, _object2, _object3;
+ BackgroundSceneObject _object4, _object5;
+ BackgroundSceneObject _object6, _object7, _object8;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+ virtual void remove();
+};
+
+class Scene620 : public PalettedScene {
+public:
+ SequenceManager _sequenceManager;
+ Timer _timer1;
+ NamedObject _object1, _object2, _object3;
+ NamedObject _object4, _object5, _object6;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+};
+
+class Scene666 : public SceneExt {
+ /* Actions */
+ class Action1 : public Action {
+ public:
+ virtual void signal();
+ };
+
+ /* Items */
+ class Item1: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+public:
+ Action1 _action1;
+ SequenceManager _sequenceManager;
+ NamedObject _object1, _object2, _object3;
+ Item1 _item1;
+ SceneText _text;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void remove();
+ virtual void signal();
+};
+
+
+class Scene690 : public SceneExt {
+ /* Objects */
+ class Object1: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Object2: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+public:
+ SequenceManager _sequenceManager;
+ Object1 _object1;
+ Object2 _object2;
+ NamedObject _object3, _object4, _object5, _object6;
+ NamedHotspot _item1, _item2, _item3, _item4, _item5;
+ NamedHotspot _item6, _item7, _item8, _item9, _item10;
+ NamedHotspot _item11, _item12, _item13, _item14, _item15;
+ NamedHotspot _item16, _item17;
+ SpeakerJake _jakeSpeaker;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+};
+} // End of namespace BlueForce
+
+} // End of namespace TsAGE
+
+#endif
diff --git a/engines/tsage/blue_force/blueforce_scenes7.cpp b/engines/tsage/blue_force/blueforce_scenes7.cpp
new file mode 100644
index 0000000000..2ced7ce08c
--- /dev/null
+++ b/engines/tsage/blue_force/blueforce_scenes7.cpp
@@ -0,0 +1,277 @@
+/* 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_scenes7.h"
+#include "tsage/globals.h"
+#include "tsage/scenes.h"
+#include "tsage/tsage.h"
+#include "tsage/staticres.h"
+
+namespace TsAGE {
+
+namespace BlueForce {
+
+/*--------------------------------------------------------------------------
+ * Scene 710 - Beach
+ *
+ *--------------------------------------------------------------------------*/
+
+void Scene710::Timer1::signal() {
+ PaletteRotation *rotation = BF_GLOBALS._scenePalette.addRotation(136, 138, -1);
+ rotation->setDelay(25);
+ rotation = BF_GLOBALS._scenePalette.addRotation(146, 148, -1);
+ rotation->setDelay(30);
+ rotation = BF_GLOBALS._scenePalette.addRotation(187, 191, -1);
+ rotation->setDelay(35);
+ rotation = BF_GLOBALS._scenePalette.addRotation(245, 246, -1);
+ rotation->setDelay(20);
+ remove();
+}
+
+void Scene710::Action1::signal() {
+ Scene710 *scene = (Scene710 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ BF_GLOBALS._player.disableControl();
+ _state = 7104;
+ if (BF_INVENTORY.getObjectScene(INV_CRATE1) == 1)
+ _state = 7105;
+ setDelay(3);
+ break;
+ case 1: {
+ ADD_MOVER(BF_GLOBALS._player, scene->_laura._position.x + 8, scene->_laura._position.y + 8);
+ break;
+ }
+ case 2:
+ BF_GLOBALS._player._strip = 2;
+ scene->_stripManager.start(_state, this);
+ break;
+ case 3:
+ if (_state != 7105)
+ BF_GLOBALS._player.enableControl();
+ else {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 7106;
+ scene->setAction(&scene->_sequenceManager1, scene, 7106, &BF_GLOBALS._player, &scene->_laura, &scene->_kid, &scene->_dog, NULL);
+ }
+ if (_state < 7104) {
+ _state++;
+ if ((_state == 7104) && (BF_INVENTORY.getObjectScene(INV_CRATE1) == 1))
+ _state = 7105;
+ }
+ remove();
+ break;
+ default:
+ break;
+ }
+}
+
+// Laura
+bool Scene710::Object3::startAction(CursorType action, Event &event) {
+ Scene710 *scene = (Scene710 *)BF_GLOBALS._sceneManager._scene;
+
+ if (action == CURSOR_TALK) {
+ BF_GLOBALS._player.setAction(&scene->_action1);
+ return true;
+ } else
+ return NamedObject::startAction(action, event);
+}
+
+bool Scene710::Object4::startAction(CursorType action, Event &event) {
+ Scene710 *scene = (Scene710 *)BF_GLOBALS._sceneManager._scene;
+
+ if ((action == CURSOR_LOOK) && (scene->_kid._position.x < 0)) {
+ SceneItem::display2(710, 13);
+ return true;
+ } else
+ return NamedObject::startAction(action, event);
+}
+
+//Stick
+bool Scene710::Object5::startAction(CursorType action, Event &event) {
+ Scene710 *scene = (Scene710 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ if (scene->_v1D64 <= 2)
+ return NamedObject::startAction(action, event);
+ else {
+ SceneItem::display2(710, 3);
+ scene->_v1D66 = 1;
+ return true;
+ }
+ case CURSOR_USE:
+ if ((scene->_kid._position.x < 0) && (scene->_v1D62 == 1)) {
+ scene->_v1D64++;
+ if (scene->_v1D66 == 0) {
+ BF_GLOBALS._player.disableControl();
+ scene->_v1D62 = 0;
+ scene->_sceneMode = 7105;
+ scene->setAction(&scene->_sequenceManager1, scene, 7105, &BF_GLOBALS._player, &scene->_stick, &scene->_dog, NULL);
+ } else {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 7101;
+ scene->setAction(&scene->_sequenceManager1, scene, 7101, &BF_GLOBALS._player, &scene->_dog, &scene->_stick, NULL);
+ }
+ return true;
+ }
+ // No break on purpose
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+void Scene710::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+ loadScene(710);
+ _sceneBounds.moveTo(320, 0);
+
+ BF_GLOBALS._sound1.fadeSound(14);
+ _soundExt1.fadeSound(48);
+ _v51C34.set(40, 0, 280, 240);
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.hide();
+ BF_GLOBALS._player._moveDiff = Common::Point(4, 2);
+ BF_GLOBALS._player.disableControl();
+ if (BF_GLOBALS._dayNumber == 0)
+ BF_GLOBALS._dayNumber = 1;
+ _stripManager.addSpeaker(&_jakeSpeaker);
+ _stripManager.addSpeaker(&_skipSpeaker);
+ _stripManager.addSpeaker(&_lauraSpeaker);
+ _stripManager.addSpeaker(&_gameTextSpeaker);
+
+ _kid.postInit();
+ _kid._moveDiff = Common::Point(4, 2);
+ _laura.postInit();
+ _laura._moveDiff = Common::Point(4, 2);
+ _dog.postInit();
+ _dog._moveDiff = Common::Point(4, 2);
+ _stick.postInit();
+ _stick.setVisage(710);
+ _stick.setStrip(2);
+ _stick.animate(ANIM_MODE_2, NULL);
+ _stick.setPosition(Common::Point(650, 160));
+ _stick._moveDiff.x = 16;
+ _stick.setDetails(710, 4, -1, -1, 1, NULL);
+ _laura.setDetails(710, 2, -1, -1, 1, NULL);
+ _kid.setDetails(710, 6, -1, -1, 1, NULL);
+ _dog.setDetails(710, 0, -1, -1, 1, NULL);
+
+ _item1.setDetails(Rect(555, 68, 583, 101), 710, 7, 23, -1, 1, NULL);
+ _item2.setDetails(Rect(583, 46, 611, 78), 710, 7, 23, -1, 1, NULL);
+ _item3.setDetails(Rect(611, 24, 639, 56), 710, 7, 23, -1, 1, NULL);
+ _item6.setDetails(1, 710, 9, 1, -1, 1);
+ _item4.setDetails(2, 710, 8, 14, -1, 1);
+ _item5.setDetails(3, 710, 10, 16, -1, 1);
+ _item8.setDetails(Rect(222, 18, 249, 42), 710, 12, 18, -1, 1, NULL);
+ _item7.setDetails(Rect(0, 0, 640, 52), 710, 11, 17, -1, 1, NULL);
+ _item9.setDetails(Rect(0, 0, 640, 128), 710, 5, 15, -1, 1, NULL);
+
+ _v1D62 = _v1D64 = _v1D66 = _v1D68 = 0;
+ _action1._state = 7100;
+ _timer1.set(2, NULL);
+ _sceneMode = 7100;
+ setAction(&_sequenceManager1, this, 7100, &BF_GLOBALS._player, &_laura, &_kid, &_dog, NULL);
+}
+
+void Scene710::signal() {
+ switch (_sceneMode) {
+ case 0:
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 7100:
+ BF_GLOBALS._player.enableControl();
+ _sceneMode = 7102;
+ setAction(&_sequenceManager1, this, 7102, &_dog, NULL);
+ break;
+ case 7101:
+ BF_GLOBALS._player.enableControl();
+ BF_INVENTORY.setObjectScene(INV_CRATE1, 1);
+ _stick.remove();
+ BF_GLOBALS._walkRegions.proc2(2);
+ break;
+ case 7102:
+ _stick.setPosition(Common::Point(100, 122));
+ _stick.animate(ANIM_MODE_NONE, NULL);
+ _stick._strip = 2;
+ if (_v1D64 <= 2)
+ _stick._frame = 2;
+ else {
+ if (_v1D64 == 3) {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 0;
+ _stripManager.start(7108, this);
+ }
+ _stick._frame = 1;
+ }
+ _v1D62 = 1;
+ BF_GLOBALS._walkRegions.proc1(2);
+ if ((_v1D68 != 0) && (_sceneMode != 0))
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 7103:
+ if (BF_GLOBALS._player._position.x > 179) {
+ _sceneMode = 7102;
+ setAction(&_sequenceManager1, this, 7102, &_dog, NULL);
+ } else {
+ _sceneMode = 7104;
+ setAction(&_sequenceManager3, this, 7104, &_kid, NULL);
+ }
+ break;
+ case 7105:
+ _v1D68 = 1;
+ // No break on purpose
+ case 7104:
+ _sceneMode = 7102;
+ setAction(&_sequenceManager1, this, 7102, &_dog, NULL);
+ BF_GLOBALS._walkRegions.proc2(2);
+ break;
+ case 7106:
+ BF_GLOBALS._sound1.fadeOut2(NULL);
+ BF_GLOBALS._sceneManager.changeScene(270);
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene710::dispatch() {
+ if ((_kid._position.x > 0) && (_v1D62 == 1) && (_sceneMode != 7106)) {
+ _v1D62 = 0;
+ _sceneMode = 7103;
+ setAction(&_sequenceManager1, this, 7103, &_kid, &_stick, &_dog, NULL);
+ }
+ SceneExt::dispatch();
+}
+
+void Scene710::synchronize(Serializer &s) {
+ SceneExt::synchronize(s);
+ s.syncAsSint16LE(_v1D62);
+ s.syncAsSint16LE(_v1D64);
+ s.syncAsSint16LE(_v1D66);
+ s.syncAsSint16LE(_v1D68);
+}
+
+
+} // End of namespace BlueForce
+} // End of namespace TsAGE
diff --git a/engines/tsage/blue_force/blueforce_scenes7.h b/engines/tsage/blue_force/blueforce_scenes7.h
new file mode 100644
index 0000000000..91bd1e537f
--- /dev/null
+++ b/engines/tsage/blue_force/blueforce_scenes7.h
@@ -0,0 +1,103 @@
+/* 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.
+ *
+ */
+
+#ifndef TSAGE_BLUEFORCE_SCENES7_H
+#define TSAGE_BLUEFORCE_SCENES7_H
+
+#include "common/scummsys.h"
+#include "tsage/blue_force/blueforce_logic.h"
+#include "tsage/blue_force/blueforce_speakers.h"
+#include "tsage/converse.h"
+#include "tsage/events.h"
+#include "tsage/core.h"
+#include "tsage/scenes.h"
+#include "tsage/globals.h"
+#include "tsage/sound.h"
+
+namespace TsAGE {
+
+namespace BlueForce {
+
+using namespace TsAGE;
+
+class Scene710: public SceneExt {
+ // Actions
+ class Action1: public ActionExt {
+ public:
+ void signal();
+ };
+ // Timers
+ class Timer1: public Timer {
+ public:
+ void signal();
+ };
+ // Objects
+ class Object3: public NamedObject {
+ public:
+ bool startAction(CursorType action, Event &event);
+ };
+ class Object4: public NamedObject {
+ public:
+ bool startAction(CursorType action, Event &event);
+ };
+ class Object5: public NamedObject {
+ public:
+ bool startAction(CursorType action, Event &event);
+ };
+
+public:
+ SequenceManager _sequenceManager1;
+ SequenceManager _sequenceManager2;
+ SequenceManager _sequenceManager3;
+ Timer1 _timer1;
+ SpeakerJake _jakeSpeaker;
+ SpeakerLaura _lauraSpeaker;
+ SpeakerSkip _skipSpeaker;
+ SpeakerGameText _gameTextSpeaker;
+ Action1 _action1;
+ NamedObject _object1;
+ NamedObject _kid;
+ Object3 _laura;
+ Object4 _dog;
+ Object5 _stick;
+ ASoundExt _soundExt1;
+ NamedHotspot _item1;
+ NamedHotspot _item2;
+ NamedHotspot _item3;
+ NamedHotspot _item4;
+ NamedHotspot _item5;
+ NamedHotspot _item6;
+ NamedHotspot _item7;
+ NamedHotspot _item8;
+ NamedHotspot _item9;
+ int _v1D62, _v1D64, _v1D66, _v1D68;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+ virtual void dispatch();
+ virtual void synchronize(Serializer &s);
+};
+
+} // End of namespace BlueForce
+} // End of namespace TsAGE
+
+#endif
diff --git a/engines/tsage/blue_force/blueforce_scenes8.cpp b/engines/tsage/blue_force/blueforce_scenes8.cpp
new file mode 100644
index 0000000000..c81f3b8d65
--- /dev/null
+++ b/engines/tsage/blue_force/blueforce_scenes8.cpp
@@ -0,0 +1,3612 @@
+/* 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::display2(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();
+ T2_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, 8004, &_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();
+ BF_GLOBALS._player.enableControl();
+ break;
+ }
+}
+
+void Scene800::dispatch() {
+ SceneExt::dispatch();
+ if (BF_GLOBALS._player.getRegionIndex() == 7) {
+ BF_GLOBALS._player.updateZoom();
+ } else {
+ BF_GLOBALS._player.changeZoom(-1);
+ }
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 810 - Lyle's Office
+ *
+ *--------------------------------------------------------------------------*/
+
+void Scene810::Action1::signal() {
+ Scene810 *scene = (Scene810 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ if (scene->_lyle._position.x == 115) {
+ ADD_PLAYER_MOVER(174, 142);
+ } else if (scene->_lyle._position.x < 160) {
+ ADD_PLAYER_MOVER(scene->_lyle._position.x + 20, scene->_lyle._position.y + 15);
+ } else {
+ ADD_PLAYER_MOVER(scene->_lyle._position.x - 20, scene->_lyle._position.y + 15);
+ }
+ break;
+ case 1:
+ BF_GLOBALS._player.updateAngle(scene->_lyle._position);
+ scene->_stripManager.start(scene->_sceneMode, this);
+ break;
+ case 2:
+ if (BF_GLOBALS.getFlag(shownFax) && (BF_GLOBALS._dayNumber == 3) && !BF_GLOBALS.getFlag(fWithLyle))
+ BF_GLOBALS.setFlag(showMugAround);
+
+ BF_GLOBALS._player.enableControl();
+ remove();
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene810::Action2::signal() {
+ Scene810 *scene = (Scene810 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ if (!BF_GLOBALS.getFlag(shownLyleCrate1Day1))
+ T2_GLOBALS._uiElements.addScore(30);
+
+ if (scene->_lyle._position.x == 115) {
+ ADD_PLAYER_MOVER(174, 142);
+ } else {
+ ADD_PLAYER_MOVER(193, 105);
+ }
+ break;
+ case 1:
+ BF_GLOBALS._player.setStrip(8);
+ if (scene->_lyle._position.x != 115)
+ _actionIndex = 3;
+
+ if (BF_GLOBALS.getFlag(shownLyleCrate1Day1)) {
+ if (BF_GLOBALS.getFlag(onDuty)) {
+ scene->_stripManager.start(8138, this);
+ } else {
+ scene->_stripManager.start((BF_GLOBALS._dayNumber == 3) ? 8110 : 8126, this);
+ }
+ } else if (BF_GLOBALS._dayNumber >= 3) {
+ scene->_stripManager.start(8110, this);
+ } else {
+ scene->_stripManager.start(BF_GLOBALS.getFlag(onDuty) ? 8140 : 8128, this);
+ }
+ break;
+ case 2:
+ setAction(&scene->_sequenceManager1, this, 8117, &scene->_lyle, &scene->_chair, NULL);
+ break;
+ case 3:
+ BF_GLOBALS._walkRegions.proc2(4);
+ ADD_PLAYER_MOVER_THIS(scene->_lyle, 27, 124);
+ break;
+ case 4:
+ scene->_lyle.setVisage(813);
+ scene->_lyle.setStrip(2);
+ scene->_lyle.setFrame(1);
+
+ ADD_PLAYER_MOVER(84, 113);
+ break;
+ case 5:
+ BF_GLOBALS._player.setStrip(8);
+ scene->_lyle.animate(ANIM_MODE_4, 5, 1, this);
+ break;
+ case 6:
+ scene->_lyle.animate(ANIM_MODE_5, NULL);
+ scene->_stripManager.start(8111, this);
+ break;
+ case 7:
+ scene->_lyle.setVisage(845);
+ scene->_lyle.setStrip(1);
+ scene->_lyle.setFrame(1);
+ scene->_lyle.animate(ANIM_MODE_1, NULL);
+
+ scene->_stripManager.start(BF_GLOBALS.getFlag(onDuty) ? 8137 : 8112, this);
+ break;
+ case 8:
+ BF_GLOBALS._walkRegions.proc1(13);
+ BF_GLOBALS._player.enableControl();
+ remove();
+ break;
+ default:
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene810::Lyle::startAction(CursorType action, Event &event) {
+ Scene810 *scene = (Scene810 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(810, 26);
+ return true;
+
+ case CURSOR_TALK:
+ BF_GLOBALS._player.disableControl();
+ BF_GLOBALS._player.updateAngle(_position);
+
+ switch (BF_GLOBALS._dayNumber) {
+ case 4:
+ scene->_sceneMode = (BF_INVENTORY.getObjectScene(INV_AUTO_RIFLE) == 810) ? 8001 : 8123;
+ break;
+ case 2:
+ if (BF_GLOBALS.getFlag(shownFax))
+ scene->_sceneMode = 8151;
+ else if (BF_GLOBALS.getFlag(onDuty)) {
+ if (BF_GLOBALS.getFlag(shownLyleCrate1)) {
+ scene->_sceneMode = BF_GLOBALS.getFlag(shownLyleCrate1Day1) ? 8145 : 8154;
+ } else if (BF_GLOBALS.getFlag(shownLyleRapsheet) || BF_GLOBALS.getFlag(shownLylePO)) {
+ scene->_sceneMode = 8145;
+ } else if (!_flag) {
+ ++_flag;
+ scene->_sceneMode = 8139;
+ } else {
+ scene->_sceneMode = 8152;
+ }
+ } else {
+ if (BF_GLOBALS.getFlag(shownLyleCrate1)) {
+ scene->_sceneMode = BF_GLOBALS.getFlag(shownLyleCrate1Day1) ? 8133 : 8153;
+ } else if (BF_GLOBALS.getFlag(shownLyleRapsheet) || BF_GLOBALS.getFlag(shownLylePO)) {
+ scene->_sceneMode = 8133;
+ } else if (!_flag) {
+ ++_flag;
+ scene->_sceneMode = 8127;
+ } else {
+ scene->_sceneMode = 8152;
+ }
+ }
+ break;
+ default:
+ if (BF_GLOBALS.getFlag(shownFax))
+ scene->_sceneMode = 8146;
+ else if (BF_GLOBALS.getFlag(shownLylePO) || BF_GLOBALS.getFlag(shownLyleRapsheet) || BF_GLOBALS.getFlag(shownLyleCrate1))
+ scene->_sceneMode = 8108;
+ else if (BF_INVENTORY.getObjectScene(INV_COBB_RAP) == 1)
+ scene->_sceneMode = 8107;
+ else
+ scene->_sceneMode = 8155;
+ break;
+ }
+
+ scene->setAction(&scene->_action1);
+ return true;
+
+ case INV_FOREST_RAP:
+ if (BF_GLOBALS.getFlag(shownLyleRapsheet))
+ scene->_sceneMode = 8148;
+ else {
+ BF_GLOBALS.setFlag(shownLyleRapsheet);
+ if (BF_GLOBALS._dayNumber != 2) {
+ scene->_sceneMode = BF_GLOBALS.getFlag(shownLylePO) ? 8122 : 8101;
+ } else if (BF_GLOBALS.getFlag(onDuty)) {
+ scene->_sceneMode = BF_GLOBALS.getFlag(shownLylePO) ? 8142 : 8143;
+ } else {
+ scene->_sceneMode = BF_GLOBALS.getFlag(shownLylePO) ? 8130 : 8131;
+ }
+ }
+ BF_GLOBALS._player.disableControl();
+ scene->setAction(&scene->_action1);
+ return true;
+
+ case INV_COBB_RAP:
+ if (BF_GLOBALS.getFlag(shownFax)) {
+ scene->_sceneMode = 8151;
+ } else {
+ BF_GLOBALS.setFlag(shownFax);
+ scene->_sceneMode = 8118;
+ }
+
+ BF_GLOBALS._player.disableControl();
+ scene->setAction(&scene->_action1);
+ return true;
+
+ case INV_AUTO_RIFLE:
+ BF_INVENTORY.setObjectScene(INV_AUTO_RIFLE, 810);
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 8116;
+ scene->setAction(&scene->_sequenceManager1, scene, 8116, &BF_GLOBALS._player, NULL);
+ return true;
+
+ case INV_PRINT_OUT:
+ if (BF_GLOBALS.getFlag(shownLylePO)) {
+ scene->_sceneMode = 8149;
+ } else if (!BF_GLOBALS.getFlag(shownLylePO)) {
+ if (!BF_GLOBALS.getFlag(shownFax)) {
+ // WORKAROUND: Original did not do a 'not', but I think this is correct
+ BF_GLOBALS.setFlag(shownFax);
+ scene->_sceneMode = 8125;
+ } else if (BF_GLOBALS.getFlag(shownLyleRapsheet)) {
+ scene->_sceneMode = 8104;
+ } else {
+ scene->_sceneMode = 8121;
+ }
+ } else if (BF_GLOBALS.getFlag(onDuty)) {
+ scene->_sceneMode = 8141;
+ } else {
+ if (BF_GLOBALS.getFlag(shownLyleRapsheet) || BF_GLOBALS.getFlag(shownLyleCrate1))
+ scene->_sceneMode = 8129;
+ else
+ scene->_sceneMode = 8121;
+ }
+ BF_GLOBALS._player.disableControl();
+ scene->setAction(&scene->_action1);
+ return true;
+
+ case INV_CRATE1:
+ if (BF_GLOBALS.getFlag(shownLyleCrate1)) {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 8147;
+ scene->setAction(&scene->_action1);
+ } else {
+ BF_GLOBALS.setFlag(shownLyleCrate1);
+ BF_GLOBALS._player.disableControl();
+ scene->setAction(&scene->_action2);
+ }
+ return true;
+
+ default:
+ return NamedObjectExt::startAction(action, event);
+ }
+}
+
+bool Scene810::Chair::startAction(CursorType action, Event &event) {
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(810, 28);
+ return true;
+ case CURSOR_USE:
+ SceneItem::display2(810, 29);
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene810::Object3::startAction(CursorType action, Event &event) {
+ Scene810 *scene = (Scene810 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(810, 30);
+ return true;
+ case CURSOR_USE:
+ if (!BF_GLOBALS.getFlag(seenFolder)) {
+ BF_GLOBALS.setFlag(seenFolder);
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 8104;
+ scene->setAction(&scene->_sequenceManager1, scene, 8104, &BF_GLOBALS._player, this, NULL);
+ } else if (BF_INVENTORY.getObjectScene(INV_MICROFILM) == 810) {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 8114;
+ scene->setAction(&scene->_sequenceManager1, scene, 8114, &BF_GLOBALS._player, NULL);
+ } else {
+ SceneItem::display2(810, 38);
+ }
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene810::FaxMachineInset::startAction(CursorType action, Event &event) {
+ Scene810 *scene = (Scene810 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_WALK:
+ return true;
+ case CURSOR_LOOK:
+ SceneItem::display2(810, 32);
+ return true;
+ case CURSOR_USE:
+ if (scene->_rect3.contains(event.mousePos)) {
+ if (BF_INVENTORY.getObjectScene(INV_PRINT_OUT) == 811) {
+ T2_GLOBALS._uiElements.addScore(50);
+ scene->_sound1.play(77);
+ BF_GLOBALS._player.disableControl();
+
+ scene->_sceneMode = 8109;
+ scene->setAction(&scene->_sequenceManager1, scene, 8109, &BF_GLOBALS._player,
+ &scene->_object6, &scene->_object5, NULL);
+ scene->_fieldA70 = 1;
+ scene->_fieldA74 = 1;
+ remove();
+ } else {
+ SceneItem::display2(810, 39);
+ }
+ }
+
+ if (scene->_rect1.contains(event.mousePos) || scene->_rect2.contains(event.mousePos)) {
+ if (BF_INVENTORY.getObjectScene(INV_PRINT_OUT) == 811) {
+ scene->_sound1.play(77);
+ BF_GLOBALS._player.disableControl();
+
+ scene->_sceneMode = 8109;
+ scene->setAction(&scene->_sequenceManager1, scene, 8109, &BF_GLOBALS._player,
+ &scene->_object6, &scene->_object5, NULL);
+ scene->_fieldA74 = 1;
+ remove();
+ } else {
+ SceneItem::display2(810, 39);
+ }
+ }
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene810::Object5::startAction(CursorType action, Event &event) {
+ Scene810 *scene = (Scene810 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(810, 33);
+ return true;
+ case CURSOR_USE: {
+ scene->_sceneMode = 8195;
+ BF_GLOBALS._player.disableControl();
+
+ PlayerMover *mover = new PlayerMover();
+ Common::Point destPos(67, 111);
+ BF_GLOBALS._player.addMover(mover, &destPos, scene);
+ return true;
+ }
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene810::Object7::startAction(CursorType action, Event &event) {
+ Scene810 *scene = (Scene810 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ case CURSOR_USE:
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 8113;
+ scene->setAction(&scene->_sequenceManager1, scene, 8113, &BF_GLOBALS._player, NULL);
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene810::Map::startAction(CursorType action, Event &event) {
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(810, 0);
+ return true;
+ case CURSOR_USE:
+ SceneItem::display2(810, 1);
+ return true;
+ default:
+ return SceneHotspot::startAction(action, event);
+ }
+}
+
+bool Scene810::Window::startAction(CursorType action, Event &event) {
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(810, 2);
+ return true;
+ case CURSOR_USE:
+ SceneItem::display2(810, 3);
+ return true;
+ default:
+ return SceneHotspot::startAction(action, event);
+ }
+}
+
+bool Scene810::Bookcase::startAction(CursorType action, Event &event) {
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(810, 4);
+ return true;
+ case CURSOR_USE:
+ SceneItem::display2(810, 5);
+ return true;
+ default:
+ return SceneHotspot::startAction(action, event);
+ }
+}
+
+bool Scene810::FaxMachine::startAction(CursorType action, Event &event) {
+ Scene810 *scene = (Scene810 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(810, 6);
+ return true;
+ case CURSOR_USE:
+ if (scene->_fieldA74 == 1) {
+ scene->_object5.startAction(action, event);
+ } else {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 8105;
+
+ Common::Point destPos(67, 111);
+ PlayerMover *mover = new PlayerMover();
+ BF_GLOBALS._player.addMover(mover, &destPos, scene);
+ }
+ return true;
+ case INV_PRINT_OUT:
+ if (BF_INVENTORY.getObjectScene(INV_COBB_RAP) == 1)
+ SceneItem::display2(810, 31);
+ else {
+ BF_INVENTORY.setObjectScene(INV_PRINT_OUT, 811);
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 811;
+
+ if (BF_GLOBALS._sceneObjects->contains(&scene->_lyle)) {
+ scene->setAction(&scene->_sequenceManager1, scene, BF_GLOBALS.getFlag(onDuty) ? 8108 : 8105,
+ &BF_GLOBALS._player, &scene->_object6, NULL);
+ } else {
+ scene->setAction(&scene->_sequenceManager1, scene, 8111, &BF_GLOBALS._player,
+ &scene->_object6, NULL);
+ }
+ }
+ return true;
+ default:
+ return SceneHotspot::startAction(action, event);
+ }
+}
+
+bool Scene810::GarbageCan::startAction(CursorType action, Event &event) {
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(810, 8);
+ return true;
+ case CURSOR_USE:
+ SceneItem::display2(810, 9);
+ return true;
+ default:
+ return SceneHotspot::startAction(action, event);
+ }
+}
+
+bool Scene810::FileCabinets::startAction(CursorType action, Event &event) {
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(810, 10);
+ return true;
+ case CURSOR_USE:
+ SceneItem::display2(810, 11);
+ return true;
+ default:
+ return SceneHotspot::startAction(action, event);
+ }
+}
+
+bool Scene810::CoffeeMaker::startAction(CursorType action, Event &event) {
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(810, 12);
+ return true;
+ case CURSOR_USE:
+ SceneItem::display2(810, 13);
+ return true;
+ default:
+ return SceneHotspot::startAction(action, event);
+ }
+}
+
+bool Scene810::Shelves::startAction(CursorType action, Event &event) {
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(810, 14);
+ return true;
+ case CURSOR_USE:
+ SceneItem::display2(810, 15);
+ return true;
+ default:
+ return SceneHotspot::startAction(action, event);
+ }
+}
+
+bool Scene810::MicroficheReader::startAction(CursorType action, Event &event) {
+ Scene810 *scene = (Scene810 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(810, 16);
+ return true;
+ case CURSOR_USE:
+ SceneItem::display2(810, 17);
+ return true;
+ case INV_MICROFILM:
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 8106;
+ scene->setAction(&scene->_sequenceManager1, scene, 8106, &BF_GLOBALS._player, NULL);
+ return true;
+ default:
+ return SceneHotspot::startAction(action, event);
+ }
+}
+
+bool Scene810::Item10::startAction(CursorType action, Event &event) {
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(810, 18);
+ return true;
+ case CURSOR_USE:
+ SceneItem::display2(810, 19);
+ return true;
+ default:
+ return SceneHotspot::startAction(action, event);
+ }
+}
+
+bool Scene810::Pictures::startAction(CursorType action, Event &event) {
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(810, 20);
+ return true;
+ case CURSOR_USE:
+ SceneItem::display2(810, 21);
+ return true;
+ default:
+ return SceneHotspot::startAction(action, event);
+ }
+}
+
+bool Scene810::Item12::startAction(CursorType action, Event &event) {
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(810, 22);
+ return true;
+ case CURSOR_USE:
+ SceneItem::display2(810, 23);
+ return true;
+ default:
+ return SceneHotspot::startAction(action, event);
+ }
+}
+
+bool Scene810::Background::startAction(CursorType action, Event &event) {
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(810, 24);
+ return true;
+ default:
+ return SceneHotspot::startAction(action, event);
+ }
+}
+
+bool Scene810::Desk::startAction(CursorType action, Event &event) {
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(810, 36);
+ return true;
+ case CURSOR_USE:
+ SceneItem::display2(810, 37);
+ return true;
+ default:
+ return SceneHotspot::startAction(action, event);
+ }
+}
+
+bool Scene810::Exit::startAction(CursorType action, Event &event) {
+ ADD_PLAYER_MOVER(event.mousePos.x + 30, event.mousePos.y);
+ return true;
+}
+
+/*--------------------------------------------------------------------------*/
+
+Scene810::Scene810(): SceneExt() {
+ _fieldA70 = _fieldA74 = 0;
+ _rect1 = Rect(68, 12, 120, 22);
+ _rect2 = Rect(59, 27, 117, 37);
+ _rect3 = Rect(49, 43, 112, 54);
+}
+
+void Scene810::synchronize(Serializer &s) {
+ SceneExt::synchronize(s);
+ s.syncAsSint16LE(_fieldA70);
+ s.syncAsSint16LE(_fieldA72);
+ s.syncAsSint16LE(_fieldA74);
+}
+
+void Scene810::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+ loadScene(810);
+ setZoomPercents(90, 80, 135, 100);
+ if (BF_GLOBALS._sceneManager._previousScene != 820)
+ BF_GLOBALS._sound1.fadeSound(76);
+
+ _stripManager.addSpeaker(&_gameTextSpeaker);
+ _stripManager.addSpeaker(&_jakeJacketSpeaker);
+ _stripManager.addSpeaker(&_jakeUniformSpeaker);
+ _stripManager.addSpeaker(&_lyleHatSpeaker);
+
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.setVisage(BF_GLOBALS.getFlag(onDuty) ? 361 : 368);
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
+ BF_GLOBALS._player.changeZoom(-1);
+ BF_GLOBALS._player._moveDiff = Common::Point(5, 3);
+ BF_GLOBALS._player.enableControl();
+
+ if (BF_GLOBALS._dayNumber == 2)
+ BF_GLOBALS.setFlag(beenToJRDay2);
+
+ if (BF_GLOBALS._dayNumber == 3) {
+ _object3.postInit();
+ _object3.setVisage(810);
+ _object3.setStrip(3);
+ _object3.setPosition(Common::Point(154, 97));
+ _object3.fixPriority(128);
+ BF_GLOBALS._sceneItems.push_back(&_object3);
+ }
+
+ if (BF_GLOBALS._dayNumber == 4) {
+ BF_INVENTORY.setObjectScene(INV_FOREST_RAP, 0);
+ BF_INVENTORY.setObjectScene(INV_COBB_RAP, 0);
+ BF_INVENTORY.setObjectScene(INV_PRINT_OUT, 0);
+ BF_INVENTORY.setObjectScene(INV_CRATE1, 0);
+ }
+
+ _desk._sceneRegionId = 12;
+ BF_GLOBALS._sceneItems.push_back(&_desk);
+
+ _lyle.postInit();
+ _lyle.setVisage(812);
+ _lyle.setPosition(Common::Point(115, 112));
+ _lyle._moveDiff = Common::Point(4, 2);
+ _lyle.changeZoom(-1);
+ _lyle._flag = 0;
+ BF_GLOBALS._sceneItems.push_back(&_lyle);
+
+ _chair.postInit();
+ _chair.setVisage(810);
+ _chair.setStrip(2);
+ _chair.setPosition(Common::Point(113, 126));
+ _chair.hide();
+ BF_GLOBALS._sceneItems.push_back(&_chair);
+
+ _object6.postInit();
+ _object6.setVisage(810);
+ _object6.setStrip(6);
+ _object6.setPosition(Common::Point(51, 65));
+ _object6._numFrames = 3;
+ _object6.hide();
+
+ _object5.postInit();
+ _object5.setVisage(810);
+ _object5.setStrip(5);
+ _object5.setPosition(Common::Point(58, 82));
+ _object5._numFrames = 3;
+ _object5.fixPriority(108);
+ _object5.hide();
+
+ if (BF_INVENTORY.getObjectScene(INV_PRINT_OUT) == 811) {
+ _object5.show();
+ BF_GLOBALS._sceneItems.push_back(&_object5);
+ }
+
+ if ((BF_GLOBALS._dayNumber == 4) && (BF_GLOBALS._bookmark < bEndDayThree)) {
+ _lyle.remove();
+ _chair.show();
+ }
+
+ switch (BF_GLOBALS._sceneManager._previousScene) {
+ case 820:
+ BF_GLOBALS._player.setStrip(7);
+ BF_GLOBALS._player.setPosition(Common::Point(278, 116));
+
+ _lyle.setVisage(845);
+ _lyle.setPosition(Common::Point(340, 175));
+ _lyle.setObjectWrapper(new SceneObjectWrapper());
+ _lyle.animate(ANIM_MODE_1, NULL);
+
+ _chair.show();
+
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 8107;
+ setAction(&_sequenceManager1, this, 8107, &BF_GLOBALS._player, &_lyle, NULL);
+ break;
+ case 935:
+ BF_GLOBALS._v51C44 = 1;
+ BF_GLOBALS._scenePalette.loadPalette(2);
+ _lyle.remove();
+
+ BF_GLOBALS._player.setPosition(Common::Point(174, 142));
+ BF_GLOBALS._player.setStrip(8);
+ BF_GLOBALS._player.enableControl();
+
+ _chair.remove();
+ break;
+ default:
+ BF_GLOBALS._player.setPosition(Common::Point(340, 180));
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 8100;
+
+ if (BF_GLOBALS.getFlag(fWithLyle)) {
+ _lyle.setVisage(845);
+ _lyle.setPosition(Common::Point(340, 175));
+ _lyle.setObjectWrapper(new SceneObjectWrapper());
+ _lyle.animate(ANIM_MODE_1, NULL);
+
+ _chair.show();
+ _sceneMode = 8196;
+ setAction(&_sequenceManager1, NULL, 8100, &BF_GLOBALS._player, NULL);
+ _lyle.setAction(&_sequenceManager2, this, 8107, &BF_GLOBALS._player, &_lyle, NULL);
+ } else {
+ setAction(&_sequenceManager1, this, 8100, &BF_GLOBALS._player, NULL);
+ }
+ break;
+ }
+
+ _exit.setDetails(Rect(315, 117, 320, 154), 810, -1, -1, -1, 1, NULL);
+ _map.setBounds(Rect(10, 10, 81, 52));
+ _window.setBounds(Rect(96, 10, 155, 49));
+ _bookcase.setBounds(Rect(5, 70, 74, 105));
+ _garbageCan.setBounds(Rect(84, 118, 101, 142));
+ _fileCabinets.setBounds(Rect(203, 41, 255, 100));
+ _coffeeMaker.setBounds(Rect(182, 54, 202, 89));
+ _shelves.setBounds(Rect(265, 10, 319, 41));
+ _microficheReader.setBounds(Rect(283, 47, 314, 73));
+
+ _faxMachine._sceneRegionId = 8;
+ BF_GLOBALS._sceneItems.push_back(&_faxMachine);
+ _item10._sceneRegionId = 9;
+ BF_GLOBALS._sceneItems.push_back(&_item10);
+ _pictures._sceneRegionId = 10;
+ BF_GLOBALS._sceneItems.push_back(&_pictures);
+ _item12._sceneRegionId = 8;
+ BF_GLOBALS._sceneItems.push_back(&_item12);
+
+ BF_GLOBALS._sceneItems.addItems(&_microficheReader, &_map, &_window, &_bookcase, &_garbageCan,
+ &_fileCabinets, &_coffeeMaker, &_shelves, &_background, NULL);
+ _background.setBounds(Rect(0, 0, SCREEN_WIDTH, UI_INTERFACE_Y));
+}
+
+void Scene810::signal() {
+ switch (_sceneMode) {
+ case 811:
+ case 8105:
+ _faxMachineInset.postInit();
+ _faxMachineInset.setVisage(810);
+ _faxMachineInset.setPosition(Common::Point(77, 94));
+ _faxMachineInset.setStrip(8);
+ _faxMachineInset.fixPriority(250);
+ BF_GLOBALS._sceneItems.push_back(&_faxMachineInset);
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 8100:
+ if (BF_GLOBALS.getFlag(examinedFile810)) {
+ if ((BF_GLOBALS._dayNumber == 4) && BF_GLOBALS._sceneObjects->contains(&_lyle)) {
+ _sceneMode = 8115;
+ setAction(&_sequenceManager1, this, 8115, &BF_GLOBALS._player, NULL);
+ } else {
+ BF_GLOBALS._player.enableControl();
+ }
+ } else {
+ if ((BF_GLOBALS._dayNumber == 3) && BF_GLOBALS._sceneObjects->contains(&_lyle)) {
+ _sceneMode = 8103;
+ setAction(&_sequenceManager1, this, 8103, &BF_GLOBALS._player, &_lyle, &_chair, NULL);
+ } else if (BF_GLOBALS.getFlag(shownLyleCrate1Day1) && !BF_GLOBALS.getFlag(shownLyleCrate1)) {
+ BF_GLOBALS.setFlag(shownLyleCrate1);
+ setAction(&_action2);
+ } else {
+ BF_GLOBALS._player.enableControl();
+ }
+ }
+ break;
+ case 8101:
+ BF_GLOBALS._sound1.fadeOut2(NULL);
+ BF_GLOBALS._sceneManager.changeScene(800);
+ break;
+ case 8103:
+ _lyle.remove();
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 8104:
+ BF_GLOBALS.setFlag(examinedFile810);
+ _object7.postInit();
+ _object7.setVisage(810);
+ _object7.setPosition(Common::Point(54, 101));
+ _object7.fixPriority(200);
+ BF_GLOBALS._sceneItems.push_front(&_object7);
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 8106:
+ T2_GLOBALS._uiElements.addScore(30);
+ BF_INVENTORY.setObjectScene(INV_MICROFILM, 820);
+ BF_GLOBALS._sceneManager.changeScene(820);
+ break;
+ case 8107:
+ if (BF_GLOBALS.getFlag(shownFax)) {
+ BF_GLOBALS.setFlag(showMugAround);
+ } else {
+ BF_GLOBALS._walkRegions.proc1(4);
+ BF_GLOBALS._player.enableControl();
+ }
+ break;
+ case 8109:
+ _object6.setFrame(1);
+ BF_GLOBALS._sceneItems.push_front(&_object5);
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 8110:
+ case 8115:
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 8112:
+ BF_GLOBALS.setFlag(fWithLyle);
+ BF_GLOBALS._sceneManager.changeScene(800);
+ break;
+ case 8113:
+ BF_GLOBALS._sound1.fadeOut2(NULL);
+ BF_GLOBALS._sceneManager.changeScene(935);
+ break;
+ case 8114:
+ T2_GLOBALS._uiElements.addScore(10);
+ BF_INVENTORY.setObjectScene(INV_MICROFILM, 1);
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 8116:
+ BF_GLOBALS._bookmark = bDoneWithIsland;
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 8195:
+ BF_GLOBALS._player.setStrip(8);
+ BF_INVENTORY.setObjectScene(INV_PRINT_OUT, 1);
+ if (_fieldA70 == 1) {
+ BF_INVENTORY.setObjectScene(INV_COBB_RAP, 1);
+ _sceneMode = 8110;
+ if (BF_GLOBALS._sceneObjects->contains(&_lyle)) {
+ _sceneMode = 8198;
+ BF_GLOBALS.setFlag(shownFax);
+ _stripManager.start(BF_GLOBALS.getFlag(onDuty) ? 8135 : 8106, this);
+ } else {
+ _stripManager.start(8117, this);
+ }
+ } else {
+ SceneItem::display2(810, 34);
+ BF_GLOBALS._player.enableControl();
+ }
+
+ _fieldA74 = 0;
+ _object5.hide();
+ _object5.setFrame(1);
+ break;
+ case 8196:
+ BF_GLOBALS._walkRegions.proc1(4);
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 8198:
+ if (BF_GLOBALS._dayNumber == 3) {
+ BF_GLOBALS.setFlag(showMugAround);
+ } else {
+ BF_GLOBALS._player.enableControl();
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene810::process(Event &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(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);
+ }
+ }
+
+ if (!event.handled)
+ SceneExt::process(event);
+}
+
+void Scene810::dispatch() {
+ SceneExt::dispatch();
+
+ if (BF_GLOBALS._sceneObjects->contains(&_lyle) && (BF_GLOBALS._player._position.x != 115) && !_lyle._mover) {
+ _lyle.updateAngle(BF_GLOBALS._player._position);
+ }
+
+ if (BF_GLOBALS._sceneObjects->contains(&_faxMachineInset) && (BF_GLOBALS._player._position.x != 67) &&
+ (BF_GLOBALS._player._position.y != 111)) {
+ _faxMachineInset.remove();
+ }
+
+ if (!_action) {
+ if (BF_GLOBALS.getFlag(showMugAround)) {
+ if (_lyle._position.y == 115) {
+ BF_GLOBALS._player.disableControl();
+
+ _sceneMode = 8110;
+ setAction(&_sequenceManager1, this, 8117, &_lyle, &_chair, NULL);
+ } else {
+ BF_GLOBALS.clearFlag(showMugAround);
+ BF_GLOBALS._player.disableControl();
+ BF_GLOBALS._walkRegions.proc2(4);
+ BF_GLOBALS._walkRegions.proc2(13);
+
+ _sceneMode = 8112;
+ setAction(&_sequenceManager1, this, 8112, &BF_GLOBALS._player, &_lyle, NULL);
+ }
+ }
+
+ if (BF_GLOBALS._player._position.x >= 318) {
+ BF_GLOBALS._player.disableControl();
+
+ if ((BF_GLOBALS._dayNumber == 3) && !BF_GLOBALS.getFlag(examinedFile810)) {
+ SceneItem::display2(810, 35);
+ _sceneMode = 8100;
+ setAction(&_sequenceManager1, this, 8100, &BF_GLOBALS._player, NULL);
+ } else {
+ if (BF_GLOBALS.getFlag(fWithLyle)) {
+ BF_GLOBALS._walkRegions.proc2(4);
+ BF_GLOBALS._walkRegions.proc2(13);
+
+ ADD_MOVER_NULL(_lyle, 320, 155);
+ }
+
+ _sceneMode = 8101;
+ setAction(&_sequenceManager1, this, 8101, &BF_GLOBALS._player, NULL);
+ }
+ }
+ }
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 820 - Microfiche Reader
+ *
+ *--------------------------------------------------------------------------*/
+
+bool Scene820::PowerButton::startAction(CursorType action, Event &event) {
+ Scene820 *scene = (Scene820 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(820, 5);
+ return true;
+ case CURSOR_USE:
+ scene->_sound1.play(69);
+ if (_flags & OBJFLAG_HIDING) {
+ scene->_pageNumber = 0;
+ show();
+ BF_GLOBALS._scenePalette.loadPalette(821);
+ BF_GLOBALS._scenePalette.refresh();
+
+ SceneItem::display(820, scene->_pageNumber, SET_WIDTH, 240, SET_X, 41, SET_Y, 0,
+ SET_FONT, 50, SET_FG_COLOR, 18, SET_EXT_BGCOLOR, 12, SET_KEEP_ONSCREEN, true, LIST_END);
+ } else {
+ BF_GLOBALS._scenePalette.loadPalette(820);
+ BF_GLOBALS._scenePalette.refresh();
+
+ scene->_object4.remove();
+ scene->_object5.remove();
+
+ SceneItem::display(0, 0);
+ hide();
+
+ BF_GLOBALS._sceneManager.changeScene(810);
+ }
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene820::BackButton::startAction(CursorType action, Event &event) {
+ Scene820 *scene = (Scene820 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(820, 7);
+ return true;
+ case CURSOR_USE:
+ // WORKAROUND: The original game had a bug where you could see the microfiche text by directly
+ // using the paging buttons, but then you had to use the power button twice to 'turn on' the
+ // reader and then off again. This check prevents the paging buttons being used until the
+ // reader is properly turned on.
+ if (scene->_powerButton._flags & OBJFLAG_HIDING)
+ return true;
+
+ scene->_sound1.play(72);
+ show();
+ scene->_sceneMode = 8200;
+ scene->setAction(&scene->_sequenceManager, scene, 8200, NULL);
+
+ if (scene->_pageNumber)
+ --scene->_pageNumber;
+ if (scene->_pageNumber == 3) {
+ scene->_object4.hide();
+ scene->_object5.hide();
+ }
+
+ SceneItem::display(820, scene->_pageNumber, SET_WIDTH, 240, SET_X, 41, SET_Y, 0,
+ SET_FONT, 50, SET_FG_COLOR, 18, SET_EXT_BGCOLOR, 12, SET_KEEP_ONSCREEN, true, LIST_END);
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene820::ForwardButton::startAction(CursorType action, Event &event) {
+ Scene820 *scene = (Scene820 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(820, 6);
+ return true;
+ case CURSOR_USE:
+ // WORKAROUND: The original game had a bug where you could see the microfiche text by directly
+ // using the paging buttons, but then you had to use the power button twice to 'turn on' the
+ // reader and then off again. This check prevents the paging buttons being used until the
+ // reader is properly turned on.
+ if (scene->_powerButton._flags & OBJFLAG_HIDING)
+ return true;
+
+ scene->_sound1.play(72);
+ show();
+ scene->_sceneMode = 8200;
+ scene->setAction(&scene->_sequenceManager, scene, 8200, NULL);
+
+ if (scene->_pageNumber < 4)
+ ++scene->_pageNumber;
+
+ SceneItem::display(820, scene->_pageNumber, SET_WIDTH, 240, SET_X, 41, SET_Y, 0,
+ SET_FONT, 50, SET_FG_COLOR, 18, SET_EXT_BGCOLOR, 12, SET_KEEP_ONSCREEN, true, LIST_END);
+
+ if (scene->_pageNumber == 4) {
+ scene->_object4.show();
+ scene->_object5.show();
+ }
+
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+Scene820::Scene820(): SceneExt() {
+ _pageNumber = 0;
+}
+
+void Scene820::synchronize(Serializer &s) {
+ SceneExt::synchronize(s);
+ s.syncAsSint16LE(_pageNumber);
+}
+
+void Scene820::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+ loadScene(820);
+
+ _stripManager.addSpeaker(&_gameTextSpeaker);
+
+ _powerButton.postInit();
+ _powerButton.setVisage(820);
+ _powerButton.setPosition(Common::Point(42, 163));
+ _powerButton.hide();
+ BF_GLOBALS._sceneItems.push_back(&_powerButton);
+
+ _backButton.postInit();
+ _backButton.setVisage(820);
+ _backButton.setStrip(2);
+ _backButton.setPosition(Common::Point(278, 155));
+ _backButton.hide();
+ BF_GLOBALS._sceneItems.push_back(&_backButton);
+
+ _forwardButton.postInit();
+ _forwardButton.setVisage(820);
+ _forwardButton.setStrip(3);
+ _forwardButton.setPosition(Common::Point(278, 164));
+ _forwardButton.hide();
+ BF_GLOBALS._sceneItems.push_back(&_forwardButton);
+
+ _object4.postInit();
+ _object4.setVisage(821);
+ _object4.setPosition(Common::Point(96, 130));
+ _object4.hide();
+
+ _object5.postInit();
+ _object5.setVisage(821);
+ _object5.setStrip(2);
+ _object5.setPosition(Common::Point(223, 130));
+ _object5.hide();
+
+ BF_GLOBALS._player.enableControl();
+ BF_GLOBALS._player._canWalk = false;
+
+ _item1.setDetails(Rect(0, 0, SCREEN_WIDTH, UI_INTERFACE_Y), 820, -1, -1, -1, 1, NULL);
+}
+
+void Scene820::signal() {
+ if (_sceneMode == 8200) {
+ _forwardButton.hide();
+ _backButton.hide();
+ }
+}
+
+/*--------------------------------------------------------------------------
+ * 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::RentalBoat::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, 834, &BF_GLOBALS._player, &scene->_rentalBoat, 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) {
+ _rentalBoat.postInit();
+ _rentalBoat.setVisage(830);
+ _rentalBoat.setStrip(1);
+ _rentalBoat.setPosition(Common::Point(271, 146));
+ _rentalBoat.fixPriority(90);
+ _rentalBoat.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;
+
+ T2_GLOBALS._uiElements.addScore(30);
+ BF_INVENTORY.setObjectScene(INV_CARTER_NOTE, 1);
+ break;
+ case 8307:
+ BF_GLOBALS._player.enableControl();
+ _object5.remove();
+ T2_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;
+ }
+
+ SceneExt::process(event);
+
+ if (BF_GLOBALS._player._enabled && (event.mousePos.y < (UI_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::BoatKeysInset::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::BoatKeysInset::remove() {
+ Scene840 *scene = (Scene840 *)BF_GLOBALS._sceneManager._scene;
+
+ _rentalKeys.remove();
+ _waveKeys.remove();
+ FocusObject::remove();
+ BF_GLOBALS._player.disableControl();
+
+ scene->_sceneMode = 8412;
+ scene->setAction(&scene->_sequenceManager1, scene, 8412, &BF_GLOBALS._player, NULL);
+}
+
+void Scene840::BoatKeysInset::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::BoatKeysInset::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::display2(840, 47);
+ else {
+ T2_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::BoatKeysInset::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);
+ T2_GLOBALS._uiElements.addScore(30);
+
+ scene->_boatKeysInset._v1B4 = 1;
+ remove();
+ }
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene840::BoatKeysInset::WaveKeys::startAction(CursorType action, Event &event) {
+ Scene840 *scene = (Scene840 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_USE:
+ if (scene->_field1AC2) {
+ SceneItem::display2(840, 56);
+ BF_INVENTORY.setObjectScene(INV_WAVE_KEYS, 1);
+ T2_GLOBALS._uiElements.addScore(50);
+ scene->_boatKeysInset._v1B6 = 1;
+ remove();
+ } else {
+ SceneItem::display2(840, 9);
+ }
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene840::BoatKeys::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)) {
+ T2_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, UI_INTERFACE_Y), 840, 41, 42, 43, 1, NULL);
+
+ if (BF_INVENTORY.getObjectScene(INV_RENTAL_KEYS) == 1) {
+ _boatKeys.postInit();
+ _boatKeys.setVisage(840);
+ _boatKeys.setStrip(4);
+ _boatKeys.setFrame(1);
+ _boatKeys.setPosition(Common::Point(250, 83));
+ _boatKeys.fixPriority(120);
+ _boatKeys.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;
+ _boatKeys.postInit();
+ _boatKeys.setDetails(840, -1, 8, 9, 2, NULL);
+ setAction(&_sequenceManager1, this, 8403, &_carter, &_boatKeys, 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(&_boatKeys)) {
+ _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();
+ T2_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:
+ T2_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();
+ _boatKeysInset.postInit();
+ _boatKeysInset.setVisage(840);
+ _boatKeysInset.setStrip(2);
+ _boatKeysInset.setPosition(Common::Point(160, 140));
+ _boatKeysInset.fixPriority(254);
+ _boatKeysInset.setDetails(840, 50, 8, 51);
+ break;
+ case 8412:
+ if (_boatKeysInset._v1B6) {
+ _sceneMode = 8409;
+ setAction(&_sequenceManager1, this, 8409, &BF_GLOBALS._player, &_carter, &_doors, NULL);
+ } else if (!_boatKeysInset._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:
+ T2_GLOBALS._uiElements.addScore(50);
+ _sceneMode = 8409;
+ setAction(&_sequenceManager1, this, 8409, &BF_GLOBALS._player, &_carter, &_doors, NULL);
+ break;
+ case 8417:
+ _field1ABA = 1;
+ T2_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 < (UI_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);
+ }
+ }
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 850 - Boat Leaving/Entering Marina
+ *
+ *--------------------------------------------------------------------------*/
+
+void Scene850::Timer1::signal() {
+ PaletteRotation *rot = BF_GLOBALS._scenePalette.addRotation(240, 254, 1);
+ rot->setDelay(25);
+
+ remove();
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene850::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+ loadScene(850);
+ BF_GLOBALS._sound1.fadeSound(35);
+
+ BF_GLOBALS._player.disableControl();
+ _timer.set(2, NULL);
+
+ _object1.postInit();
+ if (BF_GLOBALS._sceneManager._previousScene == 830) {
+ _sceneMode = 8500;
+ setAction(&_sequenceManager, this, 8500, &_object1, NULL);
+ } else {
+ BF_GLOBALS._sound1.changeSound(10);
+ _sceneMode = 8501;
+ setAction(&_sequenceManager, this, 8501, &_object1, NULL);
+ }
+}
+
+void Scene850::remove() {
+ BF_GLOBALS._scenePalette.clearListeners();
+ SceneExt::remove();
+}
+
+void Scene850::signal() {
+ switch (_sceneMode) {
+ case 8500:
+ BF_GLOBALS._sceneManager.changeScene(860);
+ break;
+ case 8501:
+ BF_GLOBALS._sceneManager.changeScene(830);
+ break;
+ default:
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 860 - Boat Entering Cove
+ *
+ *--------------------------------------------------------------------------*/
+
+void Scene860::Action1::signal() {
+ Scene860 *scene = (Scene860 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ scene->_sound1.play(88);
+ scene->_sound1.holdAt(1);
+
+ if (scene->_field888 == scene->_field886) {
+ ++_actionIndex;
+ signal();
+ } else {
+ BF_GLOBALS._player.addMover(NULL);
+ BF_GLOBALS._player.setStrip((scene->_field886 == 1) ? 4 : 5);
+ scene->_field888 = scene->_field886;
+
+ BF_GLOBALS._player.setFrame(1);
+ BF_GLOBALS._player._numFrames = 9;
+ BF_GLOBALS._player.animate(ANIM_MODE_5, this);
+ }
+ break;
+ case 1:
+ if (scene->_field886 == 1) {
+ BF_GLOBALS._player._position.x += 5;
+ BF_GLOBALS._player.setStrip(3);
+ } else {
+ BF_GLOBALS._player._position.x -= 5;
+ BF_GLOBALS._player.setStrip(2);
+ }
+ signal();
+ // Deliberate fall-through
+ case 2:
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ ADD_MOVER_NULL(BF_GLOBALS._player, scene->_destPos.x, scene->_destPos.y);
+ remove();
+ break;
+ default:
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+Scene860::Scene860(): SceneExt() {
+ _field87E = _field880 = 0;
+ _destPos.x = _destPos.y = 0;
+ _field886 = _field888 = 0;
+
+ _swRect = Rect(37, 102, 175, 128);
+ _neRect = Rect(259, 50, 320, 84);
+}
+
+void Scene860::synchronize(Serializer &s) {
+ SceneExt::synchronize(s);
+ s.syncAsSint16LE(_field87E);
+ s.syncAsSint16LE(_field880);
+ s.syncAsSint16LE(_destPos.x);
+ s.syncAsSint16LE(_destPos.y);
+ s.syncAsSint16LE(_field886);
+ s.syncAsSint16LE(_field888);
+
+ _swRect.synchronize(s);
+ _neRect.synchronize(s);
+ _yachtRect.synchronize(s);
+}
+
+void Scene860::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+ loadScene(880);
+
+ BF_GLOBALS._sound1.changeSound(90);
+ if (BF_GLOBALS._dayNumber == 0) {
+ BF_GLOBALS._dayNumber = 1;
+ BF_GLOBALS.setFlag(fBlowUpGoon);
+ }
+
+ if (BF_GLOBALS.getFlag(fBlowUpGoon)) {
+ _deadBody.postInit();
+ _deadBody.setVisage(875);
+ _deadBody.setStrip(7);
+ _deadBody.setFrame2(_deadBody.getFrameCount());
+ _deadBody.fixPriority(130);
+ _deadBody.setPosition(Common::Point(255, 148));
+ }
+
+ if (BF_GLOBALS._dayNumber == 5) {
+ _object2.postInit();
+ _object2.setVisage(880);
+ _object2.setPosition(Common::Point(196, 81));
+ BF_GLOBALS._sceneItems.push_back(&_object2);
+ _object2.setDetails(860, 0, 1, -1, 1, NULL);
+ _object2.fixPriority(20);
+
+ _neRect = Rect(0, 0, 0, 0);
+ _yachtRect = Rect(180, 66, 219, 79);
+ }
+
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.setVisage(880);
+ BF_GLOBALS._player._moveDiff = Common::Point(1, 1);
+ BF_GLOBALS._player._moveRate = 20;
+
+ BF_GLOBALS._events.setCursor(CURSOR_WALK);
+ BF_GLOBALS._player.disableControl();
+ BF_GLOBALS._player._canWalk = false;
+
+ switch (BF_GLOBALS._sceneManager._previousScene) {
+ case 355:
+ if (BF_INVENTORY.getObjectScene(INV_GRENADES) == 860) {
+ _sceneMode = 8610;
+ setAction(&_sequenceManager, this, 8610, &BF_GLOBALS._player, NULL);
+ } else {
+ _sceneMode = 8609;
+ setAction(&_sequenceManager, this, 8609, &BF_GLOBALS._player, NULL);
+ _field87E = 0;
+ _field880 = 1;
+ _field888 = 1;
+ }
+ break;
+ case 870:
+ _sound1.play(89);
+ _sound1.holdAt(1);
+ _sceneMode = 8608;
+ setAction(&_sequenceManager, this, 8608, &BF_GLOBALS._player, NULL);
+ _field880 = 0;
+ _field87E = 2;
+ _field888 = 1;
+ break;
+ default:
+ _sound1.play(89);
+ _sound1.holdAt(1);
+ _sceneMode = 8607;
+ setAction(&_sequenceManager, this, 8607, &BF_GLOBALS._player, NULL);
+ _field87E = 0;
+ _field880 = 2;
+ _field888 = 1;
+ break;
+ }
+}
+
+void Scene860::signal() {
+ switch (_sceneMode) {
+ case 8601:
+ case 8606:
+ BF_GLOBALS._sceneManager.changeScene(870);
+ break;
+ case 8602:
+ case 8604:
+ BF_GLOBALS._sceneManager.changeScene(355);
+ break;
+ case 8603:
+ case 8605:
+ BF_GLOBALS._sceneManager.changeScene(850);
+ break;
+ case 8607:
+ case 8608:
+ case 8609:
+ BF_GLOBALS._player.enableControl();
+ BF_GLOBALS._player._canWalk = false;
+ break;
+ case 8610:
+ BF_GLOBALS._deathReason = 22;
+ BF_GLOBALS._sceneManager.changeScene(866);
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene860::process(Event &event) {
+ if (_swRect.contains(event.mousePos)) {
+ GfxSurface cursor = _cursorVisage.getFrame(EXITFRAME_SW);
+ BF_GLOBALS._events.setCursor(cursor);
+
+ if ((event.eventType == EVENT_BUTTON_DOWN) && !_action) {
+ event.handled = true;
+ _field886 = 2;
+ _destPos = Common::Point(119, 126);
+ _field87E = 0;
+ setAction(&_action1);
+ }
+ } else if (_neRect.contains(event.mousePos)) {
+ GfxSurface cursor = _cursorVisage.getFrame(EXITFRAME_NE);
+ BF_GLOBALS._events.setCursor(cursor);
+
+ if ((event.eventType == EVENT_BUTTON_DOWN) && !_action) {
+ event.handled = true;
+ _field886 = 1;
+ _destPos = Common::Point(266, 56);
+ _field87E = 2;
+ setAction(&_action1);
+ }
+ } else if (_yachtRect.contains(event.mousePos)) {
+ GfxSurface cursor = _cursorVisage.getFrame(EXITFRAME_NW);
+ BF_GLOBALS._events.setCursor(cursor);
+
+ if ((event.eventType == EVENT_BUTTON_DOWN) && !_action) {
+ event.handled = true;
+ _field886 = (BF_GLOBALS._player._position.y <= 78) ? 2 : 1;
+ _destPos = Common::Point(212, 78);
+ _field87E = 1;
+ setAction(&_action1);
+ }
+ } else {
+ CursorType cursorId = BF_GLOBALS._events.getCursor();
+ BF_GLOBALS._events.setCursor(cursorId);
+ }
+}
+
+void Scene860::dispatch() {
+ if (_action) {
+ _action->dispatch();
+ } else if (_swRect.contains(BF_GLOBALS._player._position) && (_field87E == 0)) {
+ _sound1.play(88);
+ BF_GLOBALS._sceneManager.changeScene(870);
+ } else if (_neRect.contains(BF_GLOBALS._player._position) && (_field87E == 2)) {
+ _sound1.release();
+ BF_GLOBALS._sceneManager.changeScene(850);
+ } else if (_yachtRect.contains(BF_GLOBALS._player._position) && (_field87E == 1)) {
+ _sound1.play(88);
+ BF_GLOBALS._sceneManager.changeScene(355);
+ }
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 870 - Cove Beach
+ *
+ *--------------------------------------------------------------------------*/
+
+bool Scene870::Lyle::startAction(CursorType action, Event &event) {
+ Scene870 *scene = (Scene870 *)BF_GLOBALS._sceneManager._scene;
+
+ if (action == CURSOR_TALK) {
+ if (BF_GLOBALS.getFlag(fTookTrailerAmmo)) {
+ scene->startStrip((BF_GLOBALS._bookmark >= bFinishedWGreen) ? 8704 : 8701);
+ } else {
+ scene->startStrip(8700);
+ }
+ return true;
+ } else {
+ return NamedObjectExt::startAction(action, event);
+ }
+}
+
+bool Scene870::Green::startAction(CursorType action, Event &event) {
+ Scene870 *scene = (Scene870 *)BF_GLOBALS._sceneManager._scene;
+
+ if (action == CURSOR_TALK) {
+ if (!BF_GLOBALS.getFlag(fLyleOnIsland) && !scene->_field1664 && (BF_GLOBALS._bookmark == bFinishedWGreen)) {
+ scene->startStrip(8703);
+ ++scene->_field1664;
+ } else {
+ scene->startStrip(8705);
+ }
+ return true;
+ } else {
+ return NamedObjectExt::startAction(action, event);
+ }
+}
+
+void Scene870::CrateInset::postInit(SceneObjectList *OwnerList) {
+ Scene870 *scene = (Scene870 *)BF_GLOBALS._sceneManager._scene;
+
+ FocusObject::postInit();
+ setVisage(870);
+ setStrip(5);
+ setFrame(scene->_field1662);
+ setPosition(Common::Point(160, 130));
+ fixPriority(250);
+
+ if (scene->_field1662 == 3) {
+ initContents();
+ }
+}
+
+void Scene870::CrateInset::initContents() {
+ Scene870 *scene = (Scene870 *)BF_GLOBALS._sceneManager._scene;
+
+ if (BF_INVENTORY.getObjectScene(INV_JAR) == 870) {
+ // Jar still in crate, so display it
+ _jar.postInit();
+ _jar.setVisage(870);
+ _jar.setStrip(4);
+ _jar.setFrame(5);
+ _jar.setPosition(Common::Point(scene->_crateInset._position.x + 5,
+ scene->_crateInset._position.y - 26));
+ _jar.fixPriority(251);
+ _jar.setDetails(870, 39, 40, 41, 1, NULL);
+ BF_GLOBALS._sceneItems.remove(&_jar);
+ BF_GLOBALS._sceneItems.push_front(&_jar);
+ }
+
+ if (BF_INVENTORY.getObjectScene(INV_RAGS) == 870) {
+ // Rags still in crate, so display it
+ _rags.postInit();
+ _rags.setVisage(870);
+ _rags.setStrip(4);
+ _rags.setFrame(6);
+ _rags.setPosition(Common::Point(scene->_crateInset._position.x - 18,
+ scene->_crateInset._position.y - 18));
+ _rags.fixPriority(251);
+ _rags.setDetails(870, 42, 43, 44, 1, NULL);
+ BF_GLOBALS._sceneItems.remove(&_rags);
+ BF_GLOBALS._sceneItems.push_front(&_rags);
+ }
+}
+
+void Scene870::CrateInset::remove() {
+ _jar.remove();
+ _rags.remove();
+ FocusObject::remove();
+}
+
+bool Scene870::CrateInset::startAction(CursorType action, Event &event) {
+ Scene870 *scene = (Scene870 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_WALK:
+ return true;
+ case CURSOR_LOOK:
+ if (scene->_field1662 != 2)
+ break;
+
+ scene->_field1662 = 3;
+ setFrame(3);
+ initContents();
+ return true;
+ case CURSOR_USE:
+ if (scene->_field1662 == 2) {
+ setFrame(1);
+ scene->_field1662 = 1;
+ } else {
+ setFrame(2);
+ scene->_field1662 = 2;
+ _jar.remove();
+ _rags.remove();
+ }
+ return true;
+ default:
+ break;
+ }
+
+ return FocusObject::startAction(action, event);
+}
+
+bool Scene870::CrateInset::Jar::startAction(CursorType action, Event &event) {
+ if (action == CURSOR_USE) {
+ BF_INVENTORY.setObjectScene(INV_JAR, 1);
+ remove();
+ T2_GLOBALS._uiElements.addScore(30);
+ return true;
+ } else {
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene870::CrateInset::Rags::startAction(CursorType action, Event &event) {
+ if (action == CURSOR_USE) {
+ BF_INVENTORY.setObjectScene(INV_RAGS, 1);
+ remove();
+ T2_GLOBALS._uiElements.addScore(30);
+ return true;
+ } else {
+ return NamedObject::startAction(action, event);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene870::Boat::startAction(CursorType action, Event &event) {
+ if (action == INV_RENTAL_KEYS) {
+ BF_GLOBALS._player.disableControl();
+ BF_GLOBALS._sceneManager.changeScene(860);
+ return true;
+ } else {
+ return NamedHotspot::startAction(action, event);
+ }
+}
+
+bool Scene870::Crate::startAction(CursorType action, Event &event) {
+ Scene870 *scene = (Scene870 *)BF_GLOBALS._sceneManager._scene;
+
+ if (action == CURSOR_USE) {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 1;
+ Common::Point destPos(163, 164);
+ PlayerMover *mover = new PlayerMover();
+ BF_GLOBALS._player.addMover(mover, &destPos, scene);
+ return true;
+ } else {
+ return NamedHotspot::startAction(action, event);
+ }
+}
+
+bool Scene870::Exit::startAction(CursorType action, Event &event) {
+ ADD_PLAYER_MOVER(event.mousePos.x, event.mousePos.y);
+ return true;
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene870::Action1::signal() {
+ Scene870 *scene = (Scene870 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ setDelay(30);
+ break;
+ case 1:
+ scene->_yacht.setStrip(6);
+ scene->_yacht.setFrame(1);
+ scene->_yacht._numFrames = 6;
+ scene->_yacht.animate(ANIM_MODE_5, this);
+ break;
+ case 2:
+ BF_GLOBALS._sceneManager.changeScene(666);
+ break;
+ default:
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+Scene870::Scene870(): SceneExt() {
+ _field1662 = 1;
+ _field1664 = 0;
+}
+
+void Scene870::synchronize(Serializer &s) {
+ SceneExt::synchronize(s);
+ s.syncAsSint16LE(_field1662);
+ s.syncAsSint16LE(_field1664);
+}
+
+void Scene870::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+ loadScene(870);
+ BF_GLOBALS._sound1.changeSound(90);
+
+ PaletteRotation *rot;
+ rot = BF_GLOBALS._scenePalette.addRotation(235, 235, 1);
+ rot->setDelay(10);
+ rot = BF_GLOBALS._scenePalette.addRotation(237, 238, 1);
+ rot->setDelay(40);
+ rot = BF_GLOBALS._scenePalette.addRotation(242, 243, 1);
+ rot->setDelay(30);
+
+ _stripManager.addSpeaker(&_gameTextSpeaker);
+ _stripManager.addSpeaker(&_greenSpeaker);
+ _stripManager.addSpeaker(&_jakeJacketSpeaker);
+ _stripManager.addSpeaker(&_lyleHatSpeaker);
+
+ if (BF_GLOBALS._dayNumber == 0)
+ BF_GLOBALS._dayNumber = 5;
+
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.setVisage(831);
+ BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ BF_GLOBALS._player._moveDiff = Common::Point(2, 1);
+
+ _exit.setDetails(Rect(305, 150, 320, 168), 870, -1, -1, -1, 1, NULL);
+ _lumber.setDetails(9, 870, 36, 37, 38, 1);
+ _firePit.setDetails(8, 870, 9, 10, 11, 1);
+
+ if (BF_GLOBALS._dayNumber == 5) {
+ if (!BF_GLOBALS.getFlag(fLyleOnIsland) && (BF_GLOBALS._bookmark != bFinishedWGreen) &&
+ (!BF_GLOBALS.getFlag(fTookTrailerAmmo) || (BF_GLOBALS._bookmark >= bInvestigateBoat))) {
+ _lyle.postInit();
+ _lyle.setVisage(835);
+ _lyle.setObjectWrapper(new SceneObjectWrapper());
+ _lyle.animate(ANIM_MODE_1, NULL);
+ _lyle._moveDiff = Common::Point(2, 1);
+ _lyle.setDetails(870, 27, 28, 29, 1, NULL);
+ }
+
+ _yacht.postInit();
+ _yacht.setVisage(870);
+ _yacht.setStrip(4);
+ _yacht.setFrame(4);
+ _yacht.setPosition(Common::Point(232, 19));
+ _yacht.setDetails(870, 30, 31, 32, 1, NULL);
+
+ if ((BF_INVENTORY.getObjectScene(INV_RAGS) == 0) && (BF_INVENTORY.getObjectScene(INV_FLARE) == 0) &&
+ (BF_INVENTORY.getObjectScene(INV_HANDCUFFS) == 355)) {
+ _green.postInit();
+ _green.setVisage(870);
+ _green.setStrip(7);
+ _green.setPosition(Common::Point(127, 109));
+
+ if (BF_GLOBALS._bookmark == bFinishedWGreen) {
+ _green.setDetails(870, 51, 54, 53, 1, NULL);
+ } else {
+ _green.setDetails(870, 51, 52, 53, 1, NULL);
+ }
+ }
+ }
+
+ switch (BF_GLOBALS._sceneManager._previousScene) {
+ case 355:
+ _object6.postInit();
+ _object6.setVisage(870);
+ _object6.setPosition(Common::Point(142, 154));
+ _object6.fixPriority(148);
+
+ BF_GLOBALS._player.remove();
+ _lyle.remove();
+ setAction(&_action1);
+ break;
+ case 880:
+ if (BF_GLOBALS._sceneObjects->contains(&_lyle)) {
+ _lyle.setPosition(Common::Point(330, 169));
+ ADD_PLAYER_MOVER_NULL(_lyle, 303, 169);
+ }
+
+ BF_GLOBALS._player.setPosition(Common::Point(330, 139));
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 8700;
+ setAction(&_sequenceManager, this, 8700, &BF_GLOBALS._player, NULL);
+ break;
+ default:
+ if (BF_GLOBALS._sceneObjects->contains(&_lyle)) {
+ _lyle.setPosition(Common::Point(156, 148));
+ _lyle.fixPriority(149);
+ }
+
+ if ((BF_INVENTORY.getObjectScene(INV_HANDCUFFS) != 1) &&
+ (BF_INVENTORY.getObjectScene(INV_GRENADES) == 355)) {
+ _object4.postInit();
+ _object4.hide();
+ _object5.postInit();
+ _object5.hide();
+
+ BF_GLOBALS._deathReason = 7;
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 2;
+ setAction(&_sequenceManager, this, 8703, &BF_GLOBALS._player, &_lyle, &_green,
+ &_object4, &_object5, NULL);
+ } else {
+ BF_GLOBALS._player.changeAngle(135);
+ BF_GLOBALS._player.setPosition(Common::Point(214, 139));
+ BF_GLOBALS._player.enableControl();
+ }
+ break;
+ }
+
+ _boat.setDetails(7, 870, 3, 4, 5, 1);
+ _crate.setDetails(14, 870, 12, 13, 14, 1);
+ _water.setDetails(5, 870, 24, 25, 26, 1);
+ _palmTrees.setDetails(4, 870, 45, 46, 47, 1);
+ _sand.setDetails(3, 870, 21, 22, 23, 1);
+ _boulders.setDetails(2, 870, 18, 19, 20, 1);
+ _farShore.setDetails(1, 870, 48, 49, 50, 1);
+}
+
+void Scene870::startStrip(int stripNumber) {
+ _sceneMode = 3;
+ BF_GLOBALS._player.disableControl();
+ _stripManager.start(stripNumber, this);
+}
+
+void Scene870::remove() {
+ BF_GLOBALS._scenePalette.clearListeners();
+ SceneExt::remove();
+}
+
+void Scene870::signal() {
+ switch (_sceneMode) {
+ case 0:
+ case 3:
+ case 8700:
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 1:
+ _crateInset.postInit();
+ _crateInset.setDetails(870, -1, -1, -1);
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 2:
+ _yacht.setStrip(6);
+ _yacht.setFrame(1);
+ _yacht._numFrames = 6;
+ _yacht.animate(ANIM_MODE_5, this);
+ BF_GLOBALS._sceneManager.changeScene(666);
+ break;
+ case 8701:
+ BF_GLOBALS._sceneManager.changeScene(880);
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene870::process(Event &event) {
+ SceneExt::process(event);
+
+ if (!event.handled && 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(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 Scene870::dispatch() {
+ SceneExt::dispatch();
+
+ if (BF_GLOBALS._sceneObjects->contains(&_lyle) && _lyle.isNoMover()) {
+ _lyle.updateAngle(BF_GLOBALS._player._position);
+ }
+
+ if (!_action && (BF_GLOBALS._player._position.x > 305)) {
+ if (BF_GLOBALS._sceneObjects->contains(&_lyle)) {
+ _lyle.animate(ANIM_MODE_1, NULL);
+ ADD_PLAYER_MOVER_NULL(_lyle, BF_GLOBALS._player._position.x, BF_GLOBALS._player._position.y + 5);
+ }
+
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 8701;
+ setAction(&_sequenceManager, this, 8701, &BF_GLOBALS._player, NULL);
+ }
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 880 - Beach Path
+ *
+ *--------------------------------------------------------------------------*/
+
+void Scene880::Action1::signal() {
+ Scene880 *scene = (Scene880 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ _actionIndex = 1 + BF_GLOBALS._randomSource.getRandomNumber(1);
+ setDelay(BF_GLOBALS._randomSource.getRandomNumber(90));
+ break;
+ case 1:
+ _actionIndex = 0;
+ scene->_sequenceManager2._onCallback = SequenceManager_callbackProc;
+ setAction(&scene->_sequenceManager2, this, 8811, &scene->_object4, NULL);
+ break;
+ case 2:
+ _actionIndex = 1;
+ setAction(&scene->_sequenceManager2, this, 8814, &scene->_object4, NULL);
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene880::Action1::SequenceManager_callbackProc(int v1, int v2) {
+ int idx = BF_GLOBALS._randomSource.getRandomNumber(2);
+ Scene880 *scene = (Scene880 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (idx) {
+ case 0:
+ scene->_object5.show();
+ break;
+ case 1:
+ scene->_object6.show();
+ break;
+ case 2:
+ scene->_object7.show();
+ break;
+ default:
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene880::Object4::startAction(CursorType action, Event &event) {
+ Scene880 *scene = (Scene880 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_USE:
+ if (!scene->_seqNumber)
+ break;
+
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 8815;
+ scene->setAction(&scene->_sequenceManager1, scene, scene->_seqNumber, &BF_GLOBALS._player, NULL);
+ return true;
+ case CURSOR_TALK:
+ if (scene->_sceneMode != 2)
+ break;
+
+ scene->_stripManager.start(8800, &BF_GLOBALS._stripProxy);
+ return true;
+ case INV_COLT45:
+ if (scene->_sceneMode != 2)
+ break;
+
+ scene->gunDisplay();
+ return true;
+ default:
+ break;
+ }
+
+ return NamedObject::startAction(action, event);
+}
+
+/*--------------------------------------------------------------------------*/
+
+bool Scene880::NorthExit::startAction(CursorType action, Event &event) {
+ ADD_PLAYER_MOVER(40, 113);
+ return true;
+}
+
+bool Scene880::SouthEastExit::startAction(CursorType action, Event &event) {
+ Scene880 *scene = (Scene880 *)BF_GLOBALS._sceneManager._scene;
+
+ if (scene->_sceneMode == 2)
+ return false;
+ else {
+ ADD_PLAYER_MOVER(300, 158);
+ return true;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+Scene880::Scene880(): SceneExt() {
+ _seqNumber = 0;
+}
+
+void Scene880::synchronize(Serializer &s) {
+ SceneExt::synchronize(s);
+ s.syncAsSint16LE(_seqNumber);
+}
+
+void Scene880::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+ loadScene(880);
+
+ if (BF_GLOBALS._dayNumber == 0)
+ BF_GLOBALS._dayNumber = 5;
+
+ _stripManager.addSpeaker(&_gameTextSpeaker);
+ _stripManager.addSpeaker(&_jakeJacketSpeaker);
+ _stripManager.addSpeaker(&_lyleHatSpeaker);
+
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.setVisage(1358);
+ BF_GLOBALS._player._moveDiff = Common::Point(3, 2);
+ BF_GLOBALS._player.disableControl();
+
+ _northExit.setDetails(Rect(25, 99, 54, 127), 880, -1, -1, -1, 1, NULL);
+ _seExit.setDetails(Rect(279, 150, 320, 167), 880, -1, -1, -1, 1, NULL);
+
+ if (BF_GLOBALS._dayNumber == 5) {
+ BF_GLOBALS._sound1.changeSound(107);
+ _object1.postInit();
+ _object1.hide();
+
+ if ((BF_GLOBALS._bookmark != bFinishedWGreen) && (BF_GLOBALS._bookmark >= bInvestigateBoat) &&
+ BF_GLOBALS.getFlag(fTookTrailerAmmo)) {
+ BF_GLOBALS.setFlag(fLyleOnIsland);
+ }
+
+ _object2.postInit();
+ _object2.setVisage(880);
+ _object2.setPosition(Common::Point(209, 76));
+ _object2.setDetails(880, 4, 5, 6, 1, NULL);
+
+ _object4.postInit();
+ _object4.setVisage(875);
+ _object4.setDetails(880, 7, -1, 9, 1, NULL);
+
+ _object5.postInit();
+ _object5.setVisage(874);
+ _object5.setStrip(2);
+ _object5.setFrame(2);
+ _object5.fixPriority(118);
+ _object5.setPosition(Common::Point(55, 117));
+ _object5.hide();
+
+ _object6.postInit();
+ _object6.setVisage(874);
+ _object6.setStrip(3);
+ _object6.setFrame(2);
+ _object6.fixPriority(118);
+ _object6.setPosition(Common::Point(60, 109));
+ _object6.hide();
+
+ _object7.postInit();
+ _object7.setVisage(874);
+ _object7.setStrip(4);
+ _object7.setFrame(2);
+ _object7.fixPriority(118);
+ _object7.setPosition(Common::Point(57, 100));
+ _object7.hide();
+
+ if (BF_GLOBALS.getFlag(fShootGoon)) {
+ _object4.setStrip(6);
+ _object4.setFrame2(_object4.getFrameCount());
+ _object4.fixPriority(160);
+ _object4.setPosition(Common::Point(255, 148));
+
+ _seqNumber = 8816;
+ } else if (BF_GLOBALS.getFlag(fBlowUpGoon)) {
+ _object4.setStrip(7);
+ _object4.setFrame2(_object4.getFrameCount());
+ _object4.fixPriority(130);
+ _object4.setPosition(Common::Point(255, 148));
+
+ _seqNumber = 8815;
+ } else {
+ _object4.setStrip(2);
+ _object4.setPosition(Common::Point(258, 147));
+
+ _object3.postInit();
+ _object3.setVisage(871);
+ _object3.setStrip(4);
+ _object3.hide();
+
+ _seqNumber = 0;
+ }
+ } else if (BF_GLOBALS._sceneManager._previousScene != 900) {
+ BF_GLOBALS._sound1.changeSound(91);
+ }
+
+ switch (BF_GLOBALS._sceneManager._previousScene) {
+ case 900:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 0;
+ setAction(&_sequenceManager1, this, 8802, &BF_GLOBALS._player, NULL);
+ break;
+ default:
+ BF_GLOBALS._player.disableControl();
+
+ if (BF_GLOBALS._dayNumber != 5) {
+ _sceneMode = 0;
+ setAction(&_sequenceManager1, this, 8800, &BF_GLOBALS._player, NULL);
+ } else if ((BF_GLOBALS._bookmark > bFinishedWGreen) || (_seqNumber != 0)) {
+ _sceneMode = 0;
+ setAction(&_sequenceManager1, this, 8800, &BF_GLOBALS._player, NULL);
+ } else {
+ BF_GLOBALS._bookmark = bFinishedWGreen;
+ _sceneMode = 8805;
+ setAction(&_sequenceManager1, this, 8805, &BF_GLOBALS._player, &_object1, &_object4, NULL);
+ }
+ break;
+ }
+
+ _background.setDetails(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), 880, 0, -1, -1, 1, NULL);
+}
+
+void Scene880::signal() {
+ switch (_sceneMode) {
+ case 0:
+ case 2:
+ BF_GLOBALS._player._moveDiff = Common::Point(3, 2);
+ BF_GLOBALS._player.fixPriority(-1);
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 1:
+ BF_GLOBALS._sceneManager.changeScene(666);
+ break;
+ case 3:
+ T2_GLOBALS._uiElements.addScore(50);
+ BF_GLOBALS.clearFlag(gunDrawn);
+ BF_INVENTORY.setObjectScene(INV_GRENADES, 880);
+ _sceneMode = 0;
+ signal();
+ break;
+ case 4:
+ T2_GLOBALS._uiElements.addScore(30);
+ BF_GLOBALS.clearFlag(gunDrawn);
+ _sceneMode = 0;
+ signal();
+ break;
+ case 6:
+ BF_GLOBALS._deathReason = 10;
+ BF_GLOBALS.clearFlag(gunDrawn);
+
+ if (_object4._action) {
+ handleAction(_object4._action);
+ }
+
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 1;
+ setAction(&_sequenceManager1, this, 8806, &BF_GLOBALS._player, &_object4, NULL);
+ break;
+ case 7:
+ BF_GLOBALS.clearFlag(gunDrawn);
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 8801;
+ setAction(&_sequenceManager1, this, 8801, &BF_GLOBALS._player, NULL);
+ break;
+ case 8801:
+ BF_GLOBALS._sceneManager.changeScene(870);
+ break;
+ case 8803:
+ BF_GLOBALS._sceneManager.changeScene(900);
+ break;
+ case 8805:
+ _object4.setAction(&_action1);
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 2;
+ setAction(&_sequenceManager1, this, 8807, &BF_GLOBALS._player, NULL);
+ BF_GLOBALS.setFlag(gunDrawn);
+ break;
+ case 8815:
+ if (BF_INVENTORY.getObjectScene(INV_DOG_WHISTLE) == 880) {
+ BF_INVENTORY.setObjectScene(INV_DOG_WHISTLE, 1);
+ T2_GLOBALS._uiElements.addScore(30);
+
+ SceneItem::display2(880, 13);
+ } else {
+ SceneItem::display2(880, 12);
+ }
+ BF_GLOBALS._player.enableControl();
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene880::process(Event &event) {
+ if (BF_GLOBALS._player._enabled && !_focusObject && (event.mousePos.y < (UI_INTERFACE_Y - 1))) {
+ // Check if the cursor is on an exit
+ if (_northExit.contains(event.mousePos)) {
+ GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_N);
+ BF_GLOBALS._events.setCursor(surface);
+ } else if (_seExit.contains(event.mousePos) && (_sceneMode != 2)) {
+ 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);
+ }
+ }
+
+ if (event.eventType == EVENT_BUTTON_DOWN) {
+ switch (BF_GLOBALS._events.getCursor()) {
+ case INV_COLT45:
+ if (_sceneMode != 2) {
+ _sceneMode = 0;
+ SceneItem::display2(880, 11);
+ signal();
+ } else if (BF_GLOBALS.getFlag(gunDrawn)) {
+ BF_GLOBALS.clearFlag(gunDrawn);
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 6;
+ setAction(&_sequenceManager1, this, 8812, &BF_GLOBALS._player, NULL);
+ } else {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 2;
+ setAction(&_sequenceManager1, this, 8807, &BF_GLOBALS._player, NULL);
+ }
+
+ event.handled = true;
+ break;
+ case INV_GRENADES:
+ if (_sceneMode == 2) {
+ if (event.mousePos.x >= 150) {
+ BF_GLOBALS.setFlag(fBlowUpGoon);
+ _seqNumber = 8815;
+ if (_object4._action)
+ handleAction(_object4._action);
+
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 3;
+ setAction(&_sequenceManager1, this, 8809, &BF_GLOBALS._player, &_object3, &_object4, NULL);
+ } else {
+ if (_object4._action)
+ handleAction(_object4._action);
+
+ BF_GLOBALS._player.disableControl();
+ BF_GLOBALS._deathReason = 11;
+ _sceneMode = 1;
+ setAction(&_sequenceManager1, this, 8810, &BF_GLOBALS._player, &_object3, NULL);
+ }
+ event.handled = true;
+ }
+ break;
+ case CURSOR_WALK:
+ if (_sceneMode == 2) {
+ event.handled = true;
+ BF_GLOBALS._player.disableControl();
+
+ _sceneMode = (event.mousePos.y <= BF_GLOBALS._player._position.y) ? 7 : 6;
+ setAction(&_sequenceManager1, this, 8812, &BF_GLOBALS._player, NULL);
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+ SceneExt::process(event);
+}
+
+void Scene880::handleAction(Action *action) {
+ if (action->_action)
+ // Work down into sub-actions
+ handleAction(action->_action);
+
+ if (action->_owner) {
+ action->_owner->_action = NULL;
+ action->_owner = NULL;
+ }
+}
+
+void Scene880::dispatch() {
+ SceneExt::dispatch();
+
+ if (!_action) {
+ if ((BF_GLOBALS._player._position.y <= 123) && (BF_GLOBALS._player._priority != 5)) {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 8801;
+ setAction(&_sequenceManager1, this, 8801, &BF_GLOBALS._player, NULL);
+ }
+
+ if ((BF_GLOBALS._player._position.x >= 275) && (BF_GLOBALS._player._position.y > 155)) {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 8803;
+ setAction(&_sequenceManager1, this, 8803, &BF_GLOBALS._player, NULL);
+ }
+ }
+}
+
+} // End of namespace BlueForce
+
+} // End of namespace TsAGE
diff --git a/engines/tsage/blue_force/blueforce_scenes8.h b/engines/tsage/blue_force/blueforce_scenes8.h
new file mode 100644
index 0000000000..ef5ef81563
--- /dev/null
+++ b/engines/tsage/blue_force/blueforce_scenes8.h
@@ -0,0 +1,568 @@
+/* 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.
+ *
+ */
+
+#ifndef TSAGE_BLUEFORCE_SCENES8_H
+#define TSAGE_BLUEFORCE_SCENES8_H
+
+#include "common/scummsys.h"
+#include "tsage/blue_force/blueforce_logic.h"
+#include "tsage/blue_force/blueforce_speakers.h"
+#include "tsage/converse.h"
+#include "tsage/events.h"
+#include "tsage/core.h"
+#include "tsage/scenes.h"
+#include "tsage/globals.h"
+#include "tsage/sound.h"
+
+namespace TsAGE {
+
+namespace BlueForce {
+
+using namespace TsAGE;
+
+class Scene800: public SceneExt {
+ /* Actions */
+ class Action1 : public Action {
+ public:
+ virtual void signal();
+ };
+
+ /* Items */
+ class Item1: public SceneHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Item2: public SceneHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Objects */
+ class Doorway: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Car1: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Motorcycle: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Lyle: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Car2: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+public:
+ Action1 _action1;
+ SequenceManager _sequenceManager;
+ SpeakerJakeJacket _jakeJacketSpeaker;
+ SpeakerLyleHat _lyleHatSpeaker;
+ SpeakerGameText _gameTextSpeaker;
+ Doorway _doorway;
+ Car1 _car1;
+ Motorcycle _motorcycle;
+ Lyle _lyle;
+ Car2 _car2;
+ NamedObject _object6;
+ Item1 _item1;
+ Item2 _item2;
+ SceneText _text;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+ virtual void dispatch();
+};
+
+class Scene810: public SceneExt {
+ /* Actions */
+ class Action1: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action2: public Action {
+ public:
+ virtual void signal();
+ };
+
+ /* Items */
+ class Map: public SceneHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Window: public SceneHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Bookcase: public SceneHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class FaxMachine: public SceneHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class GarbageCan: public SceneHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class FileCabinets: public SceneHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class CoffeeMaker: public SceneHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Shelves: public SceneHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class MicroficheReader: public SceneHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Item10: public SceneHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Pictures: public SceneHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Item12: public SceneHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Background: public SceneHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Desk: public SceneHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Exit: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Objects */
+ class Lyle: public NamedObjectExt {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Chair: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Object3: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class FaxMachineInset: public FocusObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Object5: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Object7: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+public:
+ Action1 _action1;
+ Action2 _action2;
+ SequenceManager _sequenceManager1, _sequenceManager2;
+ SpeakerGameText _gameTextSpeaker;
+ SpeakerJakeJacket _jakeJacketSpeaker;
+ SpeakerJakeUniform _jakeUniformSpeaker;
+ SpeakerLyleHat _lyleHatSpeaker;
+ Lyle _lyle;
+ Chair _chair;
+ Object3 _object3;
+ FaxMachineInset _faxMachineInset;
+ Object5 _object5;
+ NamedObject _object6;
+ Object7 _object7;
+ Map _map;
+ Window _window;
+ Bookcase _bookcase;
+ FaxMachine _faxMachine;
+ GarbageCan _garbageCan;
+ FileCabinets _fileCabinets;
+ CoffeeMaker _coffeeMaker;
+ Shelves _shelves;
+ MicroficheReader _microficheReader;
+ Item10 _item10;
+ Pictures _pictures;
+ Item12 _item12;
+ Background _background;
+ Desk _desk;
+ Exit _exit;
+ ASoundExt _sound1;
+ Rect _rect1, _rect2, _rect3;
+ int _fieldA70, _fieldA72, _fieldA74;
+
+ Scene810();
+ virtual void synchronize(Serializer &s);
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+ virtual void process(Event &event);
+ virtual void dispatch();
+};
+
+class Scene820: public SceneExt {
+ /* Objects */
+ class PowerButton: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class ForwardButton: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class BackButton: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+public:
+ SequenceManager _sequenceManager;
+ ASoundExt _sound1;
+ SpeakerGameText _gameTextSpeaker;
+ PowerButton _powerButton;
+ BackButton _backButton;
+ ForwardButton _forwardButton;
+ NamedObject _object4, _object5;
+ NamedHotspot _item1;
+ int _pageNumber;
+
+ Scene820();
+ virtual void synchronize(Serializer &s);
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+};
+
+class Scene830: public PalettedScene {
+ /* Items */
+ class SouthEastExit: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class NoteBoard: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Objects */
+ class Lyle: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Door: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class RentalBoat: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Object5: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+public:
+ SequenceManager _sequenceManager;
+ SpeakerGameText _gameTextSpeaker;
+ SpeakerJakeJacket _jakeJacketSpeaker;
+ SpeakerLyleHat _lyleHatSpeaker;
+ NamedObject _object1, _lyle, _object6;
+ Door _door;
+ RentalBoat _rentalBoat;
+ Object5 _object5;
+ SouthEastExit _seExit;
+ NoteBoard _noteBoard;
+ NamedHotspot _item2, _item4, _item5;
+ NamedHotspot _item6, _item7, _item8;
+ ASoundExt _sound1;
+ int _field18A4, _field18A6, _field18A8, _field18AA, _field18AC;
+
+ Scene830();
+ virtual void synchronize(Serializer &s);
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void remove();
+ virtual void signal();
+ virtual void process(Event &event);
+ virtual void dispatch();
+};
+
+class Scene840: public PalettedScene {
+ /* Items */
+ class Coins: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Exit: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Objects */
+ class BoatKeysInset: public FocusObject {
+ class RentalKeys: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class WaveKeys: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ public:
+ RentalKeys _rentalKeys;
+ WaveKeys _waveKeys;
+ int _v1B4, _v1B6;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void remove();
+ virtual void process(Event &event);
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class BoatKeys: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Carter: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+public:
+ SequenceManager _sequenceManager1, _sequenceManager2;
+ NamedObject _object1;
+ BoatKeysInset _boatKeysInset;
+ NamedObject _doors;
+ BoatKeys _boatKeys;
+ Carter _carter;
+ NamedObject _lyle;
+ Coins _coins;
+ NamedHotspot _item2, _item3, _item4, _item5, _item6;
+ NamedHotspot _item7, _item8, _item9, _item10, _item11;
+ NamedHotspot _item12, _item13, _item14, _item15;
+ NamedHotspot _item16, _item17, _item18;
+ Exit _exit;
+ SpeakerGameText _gameTextSpeaker;
+ SpeakerJakeJacket _jakeJacketSpeaker;
+ SpeakerJakeUniform _jakeUniformSpeaker;
+ SpeakerCarter _carterSpeaker;
+ int _field1ABA, _field1ABC, _field1ABE, _field1AC0;
+ int _field1AC2, _field1AC4, _field1AC6;
+
+ Scene840();
+ virtual void synchronize(Serializer &s);
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+ virtual void process(Event &event);
+ virtual void dispatch();
+};
+
+class Scene850: public SceneExt {
+ /* Timers */
+ class Timer1: public Timer {
+ public:
+ virtual void signal();
+ };
+public:
+ SequenceManager _sequenceManager;
+ Timer1 _timer;
+ NamedObject _object1;
+ ASoundExt _sound1;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void remove();
+ virtual void signal();
+};
+
+class Scene860: public SceneExt {
+ /* Actions */
+ class Action1: public Action {
+ public:
+ virtual void signal();
+ };
+public:
+ SequenceManager _sequenceManager;
+ NamedObject _deadBody, _object2;
+ NamedHotspot _item1;
+ Action1 _action1;
+ Rect _swRect, _neRect, _yachtRect;
+ ASoundExt _sound1;
+ int _field87E, _field880, _field886, _field888;
+ Common::Point _destPos;
+
+ Scene860();
+ virtual void synchronize(Serializer &s);
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+ virtual void process(Event &event);
+ virtual void dispatch();
+};
+
+class Scene870: public SceneExt {
+ /* Actions */
+ class Action1: public Action {
+ public:
+ virtual void signal();
+ };
+
+ /* Objects */
+ class Lyle: public NamedObjectExt {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Green: public NamedObjectExt {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class CrateInset: public FocusObject {
+ class Jar: public NamedObjectExt {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Rags: public NamedObjectExt {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ private:
+ void initContents();
+ public:
+ Jar _jar;
+ Rags _rags;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void remove();
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Items */
+ class Boat: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Crate: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Exit: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+public:
+ SequenceManager _sequenceManager;
+ SpeakerGameText _gameTextSpeaker;
+ SpeakerJakeJacket _jakeJacketSpeaker;
+ SpeakerLyleHat _lyleHatSpeaker;
+ SpeakerGreen _greenSpeaker;
+ Boat _boat;
+ Crate _crate;
+ Exit _exit;
+ NamedObject _yacht;
+ Lyle _lyle;
+ Green _green;
+ NamedObject _object4, _object5, _object6;
+ CrateInset _crateInset;
+ NamedHotspot _lumber, _firePit, _water, _boulders;
+ NamedHotspot _palmTrees, _sand, _farShore, _item11;
+ Action1 _action1;
+ int _field1662, _field1664;
+
+ Scene870();
+ virtual void synchronize(Serializer &s);
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void remove();
+ virtual void signal();
+ virtual void process(Event &event);
+ virtual void dispatch();
+
+ void startStrip(int stripNumber);
+};
+
+class Scene880: public SceneExt {
+ /* Actions */
+ class Action1: public Action {
+ private:
+ static void SequenceManager_callbackProc(int v1, int v2);
+ public:
+ virtual void signal();
+ };
+
+ /* Objects */
+ class Object4: public NamedObjectExt {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Items */
+ class NorthExit: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class SouthEastExit: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+private:
+ static void handleAction(Action *action);
+public:
+ SequenceManager _sequenceManager1, _sequenceManager2, _sequenceManager3;
+ SpeakerGameText _gameTextSpeaker;
+ SpeakerJakeJacket _jakeJacketSpeaker;
+ SpeakerLyleHat _lyleHatSpeaker;
+ Action1 _action1;
+ NamedObject _object1, _object2, _object3;
+ Object4 _object4;
+ NamedObject _object5, _object6, _object7;
+ NamedHotspot _background;
+ NorthExit _northExit;
+ SouthEastExit _seExit;
+ int _seqNumber;
+
+ Scene880();
+ virtual void synchronize(Serializer &s);
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+ virtual void process(Event &event);
+ virtual void dispatch();
+};
+
+} // End of namespace BlueForce
+
+} // End of namespace TsAGE
+
+#endif
diff --git a/engines/tsage/blue_force/blueforce_scenes9.cpp b/engines/tsage/blue_force/blueforce_scenes9.cpp
new file mode 100644
index 0000000000..545edb91d6
--- /dev/null
+++ b/engines/tsage/blue_force/blueforce_scenes9.cpp
@@ -0,0 +1,3892 @@
+/* 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_scenes9.h"
+#include "tsage/globals.h"
+#include "tsage/scenes.h"
+#include "tsage/tsage.h"
+#include "tsage/staticres.h"
+
+namespace TsAGE {
+
+namespace BlueForce {
+
+/*--------------------------------------------------------------------------
+ * Scene 900 - Outside Warehouse
+ *
+ *--------------------------------------------------------------------------*/
+
+bool Scene900::Item1::startAction(CursorType action, Event &event) {
+ if (action == CURSOR_LOOK) {
+ SceneItem::display2(900, 6);
+ return true;
+ } else {
+ return SceneHotspot::startAction(action, event);
+ }
+}
+
+bool Scene900::Item4::startAction(CursorType action, Event &event) {
+ Scene900 *scene = (Scene900 *)BF_GLOBALS._sceneManager._scene;
+
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 9001;
+ Common::Point pt(0, 117);
+ PlayerMover *mover = new PlayerMover();
+ BF_GLOBALS._player.addMover(mover, &pt, scene);
+
+ return true;
+}
+
+/*--------------------------------------------------------------------------*/
+bool Scene900::Gate::startAction(CursorType action, Event &event) {
+ Scene900 *scene = (Scene900 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_USE:
+ if (BF_GLOBALS._v4CEC0 == 0) {
+ return NamedObject::startAction(action, event);
+ } else {
+ BF_GLOBALS._player.disableControl();
+ if (BF_GLOBALS._v4CEC0 == 2) {
+ scene->_sceneMode = 9006;
+ BF_GLOBALS._v4CEC0 = 1;
+ scene->setAction(&scene->_sequenceManager1, scene, 9006, &BF_GLOBALS._player, this, NULL);
+ } else {
+ BF_GLOBALS._v4CEC0 = 2;
+ if (scene->_dog._flag == false) {
+ BF_GLOBALS._player.setAction(&scene->_action4);
+ } else {
+ scene->_sceneMode = 9005;
+ scene->setAction(&scene->_sequenceManager1, scene, 9005, &BF_GLOBALS._player, this, NULL);
+ BF_GLOBALS._walkRegions.proc2(24);
+ }
+ }
+ return true;
+ }
+ break;
+ case INV_WAREHOUSE_KEYS:
+ if (BF_GLOBALS._v4CEC0 == 2) {
+ SceneItem::display2(900, 14);
+ } else {
+ if (BF_GLOBALS._v4CEC0 == 0) {
+ if (!BF_GLOBALS.getFlag(fGotPointsForUnlockGate)) {
+ BF_GLOBALS.setFlag(fGotPointsForUnlockGate);
+ T2_GLOBALS._uiElements.addScore(30);
+ }
+ BF_GLOBALS._v4CEC0 = 1;
+ } else {
+ if (!BF_GLOBALS.getFlag(fGotPointsForLockGate)) {
+ if (BF_GLOBALS._bookmark == bEndDayThree) {
+ BF_GLOBALS.setFlag(fGotPointsForLockGate);
+ T2_GLOBALS._uiElements.addScore(30);
+ }
+ }
+ BF_GLOBALS._v4CEC0 = 0;
+ }
+ scene->_sceneMode = 9004;
+ BF_GLOBALS._player.disableControl();
+ scene->setAction(&scene->_sequenceManager1, scene, 9004, &BF_GLOBALS._player, NULL);
+ }
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene900::Door::startAction(CursorType action, Event &event) {
+ Scene900 *scene = (Scene900 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_USE:
+ if (BF_GLOBALS._v4CEC0 == 2) {
+ if (_flag) {
+ SceneItem::display2(900, 1);
+ } else {
+ BF_GLOBALS._player.disableControl();
+ BF_GLOBALS._walkRegions.proc2(26);
+ scene->_sceneMode = 9007;
+ scene->setAction(&scene->_sequenceManager1, scene, 9007, &BF_GLOBALS._player, &scene->_door, this, NULL);
+ }
+ return true;
+ } else
+ return NamedObject::startAction(action, event);
+ break;
+ case INV_WAREHOUSE_KEYS:
+ if (BF_GLOBALS._v4CEC0 == 2) {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 9012;
+ scene->setAction(&scene->_sequenceManager1, scene, 9012, &BF_GLOBALS._player, &scene->_door, NULL);
+ } else
+ SceneItem::display2(900, 5);
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene900::Dog::startAction(CursorType action, Event &event) {
+ Scene900 *scene = (Scene900 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(900, 8);
+ return true;
+ case CURSOR_USE:
+ SceneItem::display2(900, 9);
+ return true;
+ case INV_HOOK:
+ if (_flag) {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 9010;
+ scene->setAction(&scene->_sequenceManager1, scene, 9010, &BF_GLOBALS._player, &scene->_object5, this, NULL);
+ } else
+ SceneItem::display2(900, 23);
+ return true;
+ case INV_FISHING_NET:
+ BF_GLOBALS._player.disableControl();
+ BF_GLOBALS._player.setAction(&scene->_action2);
+ return true;
+ case INV_DOG_WHISTLE:
+ BF_GLOBALS._player.disableControl();
+ BF_GLOBALS._player.setAction(&scene->_action3);
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene900::Lyle::startAction(CursorType action, Event &event) {
+ Scene900 *scene = (Scene900 *)BF_GLOBALS._sceneManager._scene;
+
+ if (action == CURSOR_TALK) {
+ if (!_action) {
+ if (scene->_dog._flag) {
+ if (BF_GLOBALS._v4CEC0 == 0)
+ scene->_stripManager.start(9004, &BF_GLOBALS._stripProxy);
+ else {
+ if (scene->_door._flag == 1) {
+ if (BF_GLOBALS._v4CEC0 == 2)
+ scene->_stripManager.start(9005, &BF_GLOBALS._stripProxy);
+ else
+ scene->_stripManager.start(9001, &BF_GLOBALS._stripProxy);
+ } else
+ scene->_stripManager.start(9001, &BF_GLOBALS._stripProxy);
+ }
+ } else {
+ if (scene->_field1974)
+ scene->_stripManager.start(9003, &BF_GLOBALS._stripProxy);
+ else {
+ ++scene->_field1974;
+ scene->_stripManager.start(9002, &BF_GLOBALS._stripProxy);
+ }
+ }
+ }
+ return true;
+ } else
+ return NamedObject::startAction(action, event);
+}
+
+bool Scene900::Body::startAction(CursorType action, Event &event) {
+ Scene900 *scene = (Scene900 *)BF_GLOBALS._sceneManager._scene;
+
+ if (action == CURSOR_USE) {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 9016;
+ scene->setAction(&scene->_sequenceManager1, scene, 9016, &BF_GLOBALS._player, NULL);
+ return true;
+ } else
+ return NamedObject::startAction(action, event);
+}
+
+/*--------------------------------------------------------------------------*/
+void Scene900::Action1::signal() {
+ Scene900 *scene = (Scene900 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ if (scene->_dog._flag == 0) {
+ scene->_dog.setStrip(3);
+ if ((BF_GLOBALS._randomSource.getRandomNumber(3) == 1) || (BF_GLOBALS._player._position.x > 790) || (scene->_field1976 != 0)) {
+ Common::Point pt(864, 130);
+ NpcMover *mover = new NpcMover();
+ scene->_dog.addMover(mover, &pt, this);
+ } else {
+ _actionIndex = 4;
+ Common::Point pt(775, 107);
+ NpcMover *mover = new NpcMover();
+ scene->_dog.addMover(mover, &pt, this);
+ }
+ }
+ break;
+ case 1:
+ scene->_dog.setPosition(Common::Point(864, 117));
+ scene->_dog.setStrip(7);
+ scene->_dog.setFrame(1);
+ scene->_dog.animate(ANIM_MODE_5, this);
+ if (BF_GLOBALS._randomSource.getRandomNumber(3) == 1)
+ scene->_sound1.play(92);
+ else
+ scene->_sound1.play(44);
+ if ((BF_GLOBALS._player._position.x > 750) || (scene->_field1976 != 0))
+ _actionIndex = 7;
+ break;
+ case 2:
+ scene->_dog.animate(ANIM_MODE_6, this);
+ break;
+ case 3: {
+ scene->_dog.setStrip(3);
+ scene->_dog.setPosition(Common::Point(864, 130));
+ scene->_dog.fixPriority(122);
+ scene->_dog.animate(ANIM_MODE_1, NULL);
+ Common::Point pt(775, 107);
+ NpcMover *mover = new NpcMover();
+ scene->_dog.addMover(mover, &pt, this);
+ break;
+ }
+ case 6:
+ _actionIndex = 0;
+ // No break on purpose
+ case 4:
+ setDelay(30);
+ break;
+ case 5: {
+ scene->_dog.setStrip(4);
+ Common::Point pt(940, 145);
+ NpcMover *mover = new NpcMover();
+ scene->_dog.addMover(mover, &pt, this);
+ break;
+ }
+ case 7:
+ _actionIndex = 7;
+ setDelay(5);
+ if (BF_GLOBALS._player._position.x < 790)
+ _actionIndex = 2;
+ if (scene->_field1976 != 0)
+ _actionIndex = 8;
+ break;
+ case 8:
+ scene->_dog.setStrip(1);
+ scene->_dog.setFrame(7);
+ scene->_dog.animate(ANIM_MODE_6, NULL);
+ break;
+ case 9:
+ scene->_field1976 = 0;
+ scene->_dog._flag = 0;
+ _actionIndex = 7;
+ scene->_dog.setStrip(1);
+ scene->_dog.setFrame(1);
+ scene->_dog.animate(ANIM_MODE_5, this);
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene900::Action2::signal() {
+ Scene900 *scene = (Scene900 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ scene->_field1976 = 1;
+ if (scene->_dog._action->getActionIndex() != 8)
+ _actionIndex = 0;
+ setDelay(5);
+ break;
+ case 1:
+ scene->_object5.postInit();
+ scene->_object5.setVisage(902);
+ scene->_object5.setStrip(2);
+ scene->_object5.setPosition(Common::Point(-20, -20));
+ scene->_object5._moveDiff.y = 10;
+ setAction(&scene->_sequenceManager1, this, 9009, &BF_GLOBALS._player, &scene->_object5, &scene->_dog, NULL);
+ BF_INVENTORY.setObjectScene(INV_FISHING_NET, 900);
+ break;
+ case 2:
+ BF_GLOBALS._player._strip = 7;
+ if (!BF_GLOBALS.getFlag(fGotPointsForTrapDog)) {
+ BF_GLOBALS.setFlag(fGotPointsForTrapDog);
+ T2_GLOBALS._uiElements.addScore(50);
+ }
+ SceneItem::display2(900, 10);
+ scene->_dog._flag = 1;
+ scene->_dog.fixPriority(130);
+ BF_GLOBALS._player.enableControl();
+ remove();
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene900::Action3::signal() {
+ Scene900 *scene = (Scene900 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ if ((BF_GLOBALS._player._position.x < 790) && (!BF_GLOBALS._player._mover)) {
+ Common::Point pt(821, 136);
+ PlayerMover *mover = new PlayerMover();
+ BF_GLOBALS._player.addMover(mover, &pt, 0);
+ }
+ if (scene->_dog._action->getActionIndex() != 7) {
+ _actionIndex = 0;
+ }
+ setDelay(5);
+ break;
+ case 1:
+ if (scene->_dog._strip == 3) {
+ _actionIndex = 3;
+ Common::Point pt(775, 107);
+ NpcMover *mover = new NpcMover();
+ scene->_dog.addMover(mover, &pt, this);
+ } else
+ scene->_dog.animate(ANIM_MODE_6, this);
+ break;
+ case 2: {
+ scene->_dog.setStrip(3);
+ scene->_dog.setPosition(Common::Point(864, 130));
+ scene->_dog.fixPriority(122);
+ scene->_dog.animate(ANIM_MODE_1, NULL);
+ Common::Point pt(775, 107);
+ NpcMover *mover = new NpcMover();
+ scene->_dog.addMover(mover, &pt, this);
+ break;
+ }
+ case 3:
+ scene->_dog.remove();
+ scene->_dog._flag = 1;
+ SceneItem::display2(900, 24);
+ if (!BF_GLOBALS.getFlag(fGotPointsForLockWarehouse)) {
+ BF_GLOBALS.setFlag(fGotPointsForLockWarehouse);
+ T2_GLOBALS._uiElements.addScore(10);
+ }
+ BF_GLOBALS._player.enableControl();
+ remove();
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene900::Action4::signal() {
+ Scene900 *scene = (Scene900 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ scene->_field1976 = 1;
+ if (scene->_dog._action->getActionIndex() != 8)
+ _actionIndex = 0;
+ setDelay(5);
+ break;
+ case 1:
+ scene->setAction(&scene->_sequenceManager1, this, 9005, &BF_GLOBALS._player, &scene->_gate, NULL);
+ break;
+ case 2:
+ scene->setAction(&scene->_sequenceManager1, this, 9008, &BF_GLOBALS._player, &scene->_dog, NULL);
+ break;
+ case 3:
+ BF_GLOBALS._deathReason = 5;
+ BF_GLOBALS._sceneManager.changeScene(666);
+ remove();
+ break;
+ default:
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+Scene900::Scene900(): PalettedScene() {
+ _field1974 = _field1976 = 0;
+}
+
+void Scene900::postInit(SceneObjectList *OwnerList) {
+ PalettedScene::postInit(OwnerList);
+ loadScene(900);
+
+ if (BF_GLOBALS._sceneManager._previousScene == 910)
+ BF_GLOBALS._sound1.changeSound(91);
+ _field1974 = 0;
+ _field1976 = 0;
+ T2_GLOBALS._uiElements._active = true;
+ BF_GLOBALS.clearFlag(fCanDrawGun);
+ if (BF_GLOBALS._dayNumber == 0) {
+ BF_GLOBALS._dayNumber = 4;
+ BF_INVENTORY.setObjectScene(INV_FISHING_NET, 1);
+ BF_INVENTORY.setObjectScene(INV_HOOK, 1);
+ }
+ _dog._flag = 0;
+ if (BF_GLOBALS._bookmark >= bFinishedWGreen) {
+ _body.postInit();
+ _body.fixPriority(120);
+ _body.setVisage(901);
+ _body.setPosition(Common::Point(159,128));
+ _body.setDetails(900, 15, 16, 17, ANIM_MODE_1, NULL);
+ }
+ if (BF_GLOBALS._sceneManager._previousScene == 910) {
+ _sceneBounds.moveTo(639, 0);
+
+ BF_GLOBALS._v4CEC0 = 2;
+ BF_INVENTORY.setObjectScene(INV_FISHING_NET, 900);
+ _dog._flag = 1;
+ }
+ if (BF_INVENTORY.getObjectScene(INV_FISHING_NET) == 900)
+ _dog._flag = 1;
+
+ _stripManager.addSpeaker(&_gameTextSpeaker);
+ _stripManager.addSpeaker(&_jakeJacketSpeaker);
+ _stripManager.addSpeaker(&_lyleHatSpeaker);
+
+ _item4.setDetails(Rect(0, 85, 20, 130), 900, -1, -1, -1, 1, 0);
+ BF_GLOBALS._player.postInit();
+
+ _dog.postInit();
+ _dog.setVisage(902);
+ _dog.setPosition(Common::Point(845, 135));
+ _dog.fixPriority(122);
+ _dog.setDetails(900, 8, -1, 9, 1, NULL);
+
+ if (_dog._flag == 0) {
+ _dog.animate(ANIM_MODE_1, NULL);
+ _dog.setAction(&_action1);
+ } else {
+ _dog.setAction(&_action1);
+ _dog.fixPriority(130);
+ if (BF_GLOBALS._dayNumber == 4) {
+ _dog.setPosition(Common::Point(879, 120));
+ _dog.setStrip(2);
+ } else {
+ _dog.setPosition(Common::Point(864, 117));
+ _dog.setStrip(6);
+ _dog.setFrame(6);
+ }
+ }
+
+ _gate.postInit();
+ _gate.setVisage(900);
+ _gate.setStrip(2);
+
+ if (BF_GLOBALS._v4CEC0 == 2)
+ _gate.setPosition(Common::Point(758, 127));
+ else {
+ BF_GLOBALS._walkRegions.proc1(24);
+ _gate.setPosition(Common::Point(804, 132));
+ }
+
+ if (BF_GLOBALS._dayNumber == 5)
+ BF_GLOBALS._v4CEC8 = 0;
+
+ if ((BF_GLOBALS._v4CEC8 == 0) && (BF_GLOBALS.getFlag(fWithLyle))) {
+ _object4.postInit();
+ _object4.setVisage(900);
+ _object4.setStrip(3);
+ _object4.fixPriority(1);
+ _object4.setPosition(Common::Point(866, 117));
+ }
+
+ _door.postInit();
+ _door.setVisage(900);
+
+ if (BF_GLOBALS._v4CEC8 == 0)
+ _door.setStrip(4);
+ else
+ _door.setStrip(1);
+
+ _door.setPosition(Common::Point(847, 45));
+ _door._flag = 1;
+
+ if ((BF_GLOBALS._sceneManager._previousScene == 880) || (BF_GLOBALS._sceneManager._previousScene != 910)) {
+ BF_GLOBALS._walkRegions.proc1(26);
+ BF_GLOBALS._player.disableControl();
+ if (BF_GLOBALS._bookmark == bFinishedWGreen) {
+ _sceneMode = 9013;
+ _lyle.postInit();
+ _lyle._moveDiff.y = 7;
+ _lyle._flags |= OBJFLAG_CHECK_REGION;
+ _lyle.setDetails(900, 19, 20, 21, ANIM_MODE_1, NULL);
+ _lyleHatSpeaker._xp = 210;
+ _jakeJacketSpeaker._xp = 75;
+ setAction(&_sequenceManager1, this, 9013, &BF_GLOBALS._player, &_lyle, NULL);
+ BF_GLOBALS._bookmark = bAmbushed;
+ BF_GLOBALS.setFlag(fWithLyle);
+ } else {
+ if (BF_GLOBALS._bookmark > bFinishedWGreen) {
+ _lyle.postInit();
+ _lyle.setVisage(811);
+ _lyle.setPosition(Common::Point(780, 153));
+ _lyle._moveDiff.y = 7;
+ _lyle._flags |= 0x1000;
+ _lyle.setDetails(900, 19, 20, 21, ANIM_MODE_1, NULL);
+ _lyle.animate(ANIM_MODE_1, NULL);
+ _lyle.setObjectWrapper(new SceneObjectWrapper());
+ }
+
+ _sceneMode = 9000;
+ setAction(&_sequenceManager1, this, 9000, &BF_GLOBALS._player, NULL);
+ }
+ } else {
+ _door._flag = 0;
+ _door.setFrame(_door.getFrameCount());
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 9002;
+ if (BF_GLOBALS.getFlag(fWithLyle)) {
+ _lyle.postInit();
+ _lyle._flags |= 0x1000;
+ _lyle.setDetails(900, 19, 20, 21, ANIM_MODE_1, NULL);
+ setAction(&_sequenceManager1, this, 9014, &BF_GLOBALS._player, &_door, &_lyle, NULL);
+ } else
+ setAction(&_sequenceManager1, this, 9002, &BF_GLOBALS._player, &_door, NULL);
+ }
+
+ _gate.setDetails(900, 0, -1, 1, 1, 0);
+ _door.setDetails(900, 2, -1, 5, 1, 0);
+ _item2.setDetails(Rect(0, 0, 225, 21), 666, 25, -1, -1, 1, NULL);
+ _item3.setDetails(Rect(37, 21, 324, 50), 666, 26, -1, -1, 1, NULL);
+ _item1.setDetails(Rect(0, 0, 960, 200), 900, 7, -1, -1, 1, NULL);
+}
+
+void Scene900::signal() {
+ static uint32 v50E8B = 0;
+
+ switch (_sceneMode++) {
+ case 1:
+ BF_GLOBALS._sceneManager.changeScene(910);
+ break;
+ case 3:
+ BF_GLOBALS._walkRegions.proc1(24);
+ _sceneMode = 9004;
+ setAction(&_sequenceManager1, this, 9006, &BF_GLOBALS._player, &_gate, NULL);
+ break;
+ case 9000:
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 9001:
+ if ((BF_INVENTORY.getObjectScene(INV_FISHING_NET) == 900) || (BF_GLOBALS._v4CEC0 != 0) ||
+ (_door._flag == 0))
+ BF_GLOBALS.setFlag(fLeftTraceIn900);
+ else
+ BF_GLOBALS.clearFlag(fLeftTraceIn900);
+
+ BF_GLOBALS._sceneManager.changeScene(880);
+ break;
+ case 9002:
+ BF_GLOBALS._walkRegions.proc1(26);
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 9004:
+ if (BF_GLOBALS._v4CEC0 == 0)
+ SceneItem::display2(900, 3);
+ else
+ SceneItem::display2(900, 4);
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 9005:
+ if (_dog._flag == 0)
+ BF_GLOBALS._player.setAction(&_action4);
+ else
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 9006:
+ BF_GLOBALS._walkRegions.proc1(24);
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 9007:
+ if (BF_GLOBALS.getFlag(fWithLyle)) {
+ Common::Point pt(862, 119);
+ PlayerMover *mover = new PlayerMover();
+ _lyle.addMover(mover, &pt, NULL);
+ _sceneMode = 1;
+ addFader((const byte *)&v50E8B, 5, this);
+ } else
+ BF_GLOBALS._sceneManager.changeScene(910);
+ break;
+ case 9008:
+ BF_GLOBALS._deathReason = 5;
+ BF_GLOBALS._sceneManager.changeScene(666);
+ break;
+ case 9010:
+ _sound1.play(92);
+ if (BF_GLOBALS._v4CEC0 == 2) {
+ _sceneMode = 9008;
+ setAction(&_sequenceManager1, this, 9008, &BF_GLOBALS._player, &_dog, NULL);
+ } else {
+ BF_GLOBALS._player._strip = 7;
+ _action1.setActionIndex(9);
+ _dog.signal();
+ if ((!BF_GLOBALS.getFlag(fGotPointsForFreeDog)) && (BF_GLOBALS._bookmark == bEndDayThree)) {
+ BF_GLOBALS.setFlag(fGotPointsForFreeDog);
+ T2_GLOBALS._uiElements.addScore(50);
+ }
+ BF_INVENTORY.setObjectScene(INV_FISHING_NET, 1);
+ SceneItem::display2(900, 11);
+ BF_GLOBALS._player.enableControl();
+ }
+ break;
+ case 9012:
+ if (_door._flag == 0) {
+ SceneItem::display2(900, 12);
+ _door._flag = 1;
+ if ((!BF_GLOBALS.getFlag(fGotPointsForLockWarehouse)) && (BF_GLOBALS._bookmark == bEndDayThree)) {
+ BF_GLOBALS.setFlag(fGotPointsForLockWarehouse);
+ T2_GLOBALS._uiElements.addScore(30);
+ }
+ } else {
+ SceneItem::display2(900, 13);
+ _door._flag = 0;
+ if (!BF_GLOBALS.getFlag(fGotPointsForUnlockWarehouse)) {
+ BF_GLOBALS.setFlag(fGotPointsForUnlockWarehouse);
+ T2_GLOBALS._uiElements.addScore(30);
+ }
+ }
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 9013:
+ _lyleHatSpeaker._xp = 75;
+ _jakeJacketSpeaker._xp = 210;
+ _lyle.setAction(&_sequenceManager2, &_lyle, 9015, &_lyle, NULL);
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 9016:
+ if ((BF_GLOBALS._clip1Bullets == 0) && (BF_GLOBALS._clip2Bullets == 0)){
+ BF_GLOBALS._clip1Bullets = 8;
+ BF_GLOBALS._clip1Bullets = 8;
+ SceneItem::display2(900, 25);
+ } else if (BF_GLOBALS._clip1Bullets == 0) {
+ BF_GLOBALS._clip1Bullets = 8;
+ SceneItem::display2(900, 26);
+ } else if (BF_GLOBALS._clip2Bullets == 0) {
+ BF_GLOBALS._clip2Bullets = 8;
+ SceneItem::display2(900, 26);
+ } else
+ SceneItem::display2(900, 27);
+
+ BF_GLOBALS._player.enableControl();
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene900::process(Event &event) {
+ SceneExt::process(event);
+
+ if (BF_GLOBALS._player._enabled && !_focusObject && (event.mousePos.y < (UI_INTERFACE_Y - 1))) {
+ if (_item4.contains(event.mousePos)) {
+ GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_W);
+ BF_GLOBALS._events.setCursor(surface);
+ } else {
+ CursorType cursorId = BF_GLOBALS._events.getCursor();
+ BF_GLOBALS._events.setCursor(cursorId);
+ }
+ }
+}
+
+void Scene900::dispatch() {
+ SceneExt::dispatch();
+
+ if (BF_GLOBALS.getFlag(fWithLyle) && _lyle.isNoMover()) {
+ _lyle.updateAngle(BF_GLOBALS._player._position);
+ }
+
+ if (!_action) {
+ if ((BF_GLOBALS._player._position.x <= 20) && (BF_GLOBALS._player._position.y < 130)) {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 9001;
+ setAction(&_sequenceManager1, this, 9001, &BF_GLOBALS._player, NULL);
+ }
+ }
+}
+
+void Scene900::synchronize(Serializer &s) {
+ SceneExt::synchronize(s);
+ s.syncAsSint16LE(_field1974);
+ s.syncAsSint16LE(_field1976);
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 910 - Inside the warehouse
+ *
+ *--------------------------------------------------------------------------*/
+/* Actions */
+void Scene910::Action1::signal() {
+ Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex - 1) {
+ case 0:
+ scene->_vent.setStrip(1);
+ scene->_vent.animate(ANIM_MODE_5, this);
+ break;
+ case 1:
+ if (scene->_vent._strip == 2)
+ scene->_vent.setFrame(4);
+ scene->_vent.setStrip(1);
+ scene->_vent.animate(ANIM_MODE_6, NULL);
+ break;
+ case 2:
+ scene->_vent.setStrip(2);
+ scene->_vent.animate(ANIM_MODE_2, NULL);
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene910::Action2::signal() {
+ Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ scene->_object7.postInit();
+ scene->_object7.setVisage(919);
+ scene->_object7.setPosition(Common::Point(267, 51));
+ scene->_object7.fixPriority(40);
+ signal();
+ break;
+ case 1:
+ scene->_object7.hide();
+ setDelay(600);
+ break;
+ case 2:
+ scene->_object7.setStrip(BF_GLOBALS._randomSource.getRandomNumber(3) + 2);
+ scene->_object7.setFrame(1);
+ scene->_object7.show();
+ setDelay(6);
+ break;
+ case 3:
+ _actionIndex = 1;
+ scene->_object7.setStrip(BF_GLOBALS._randomSource.getRandomNumber(3) + 2);
+ scene->_object7.animate(ANIM_MODE_5, this);
+ break;
+ default:
+ break;
+ }
+}
+
+/* Objects */
+
+void Scene910::Lyle::synchronize(Serializer &s) {
+ NamedObject::synchronize(s);
+ s.syncAsSint16LE(_field90);
+}
+
+bool Scene910::Lyle::startAction(CursorType action, Event &event) {
+ Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
+
+ if (action == CURSOR_USE) {
+ if (BF_GLOBALS._v4CEE2 == 0)
+ return NamedObject::startAction(action, event);
+ else
+ return false;
+ } else if (action == CURSOR_TALK) {
+ if ((BF_GLOBALS._v4CEE0 != 0) || (BF_GLOBALS._v4CEE2 != 0)) {
+ scene->_stripManager.start(9100 + _field90, &BF_GLOBALS._stripProxy);
+ if (_field90 < 1)
+ _field90++;
+ return true;
+ } else {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 9130;
+ if (BF_GLOBALS.getFlag(gunDrawn))
+ scene->setAction(&scene->_sequenceManager1, scene, 9138, &BF_GLOBALS._player, &scene->_lyle, NULL);
+ else
+ scene->setAction(&scene->_sequenceManager1, scene, 9130, &BF_GLOBALS._player, &scene->_lyle, NULL);
+ return true;
+ }
+ } else {
+ return NamedObject::startAction(action, event);
+ }
+}
+
+bool Scene910::Nico::startAction(CursorType action, Event &event) {
+ Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_USE:
+ BF_GLOBALS._player.disableControl();
+ scene->_field2DDA = 6;
+ scene->_sceneMode = 9123;
+ if (BF_GLOBALS._player._visage == 1911)
+ scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL);
+ else
+ scene->signal();
+ return true;
+ break;
+ case CURSOR_TALK:
+ if (BF_GLOBALS._v4CEE2 >= 4)
+ return NamedObject::startAction(action, event);
+
+ if (BF_GLOBALS._v4CEE6 < 4)
+ BF_GLOBALS._v4CEE6++;
+
+ if (BF_GLOBALS._v4CEE6 == 2) {
+ scene->_sceneMode = 13;
+ scene->_stripManager.start(9105, scene);
+ } else
+ scene->_stripManager.start(9103 + BF_GLOBALS._v4CEE6, &BF_GLOBALS._stripProxy);
+ return true;
+ break;
+ case 1:
+ if (BF_GLOBALS._v4CEE2 > 1) {
+ if (BF_GLOBALS._v4CEE2 != 4) {
+ if ((BF_GLOBALS.getFlag(gunDrawn)) && (BF_GLOBALS.getFlag(25)) && (BF_GLOBALS.getHasBullets())) {
+ if (scene->_field2DE0 == 0) {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 9126;
+ scene->setAction(&scene->_sequenceManager1, scene, 9126, &scene->_nico, NULL);
+ return NamedObject::startAction(action, event);
+ } else {
+ scene->_stripManager.start(9117, &BF_GLOBALS._stripProxy);
+ return NamedObject::startAction(action, event);
+ }
+ } else
+ return NamedObject::startAction(action, event);
+ } else {
+ SceneItem::display(910, 90, 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 {
+ if ((BF_GLOBALS.getFlag(gunDrawn)) && (BF_GLOBALS.getFlag(25)) && (BF_GLOBALS.getHasBullets())) {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 9125;
+ scene->setAction(&scene->_sequenceManager1, scene, 9125, &scene->_nico, NULL);
+ }
+ return NamedObject::startAction(action, event);
+ }
+ break;
+ case 39:
+ case 53:
+ if (BF_GLOBALS._v4CEE2 >= 4)
+ return NamedObject::startAction(action, event);
+
+ if (BF_GLOBALS._v4CEE6 < 4)
+ BF_GLOBALS._v4CEE6++;
+
+ if (BF_GLOBALS._v4CEE6 == 2) {
+ scene->_sceneMode = 13;
+ scene->_stripManager.start(9105, scene);
+ } else
+ scene->_stripManager.start(9103 + BF_GLOBALS._v4CEE6, &BF_GLOBALS._stripProxy);
+
+ return true;
+ break;
+ case 57:
+ if (BF_GLOBALS._v4CEE2 < 4) {
+ BF_GLOBALS._player.disableControl();
+ scene->_yellowCord.fixPriority(121);
+ scene->_field2DDA = 10;
+ scene->_sceneMode = 9123;
+ if (BF_GLOBALS._player._visage == 1911)
+ scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL);
+ else
+ scene->signal();
+
+ return true;
+ } else {
+ SceneItem::display(910, 95, 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;
+ }
+ break;
+ case 58:
+ if (BF_GLOBALS._v4CECC == 1)
+ SceneItem::display(910, 84, 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(910, 82, 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;
+ break;
+ case 59:
+ case 61:
+ SceneItem::display(910, 83, 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;
+ break;
+ default:
+ return NamedObject::startAction(action, event);
+ break;
+ }
+}
+
+bool Scene910::Stuart::startAction(CursorType action, Event &event) {
+ Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_USE:
+ BF_GLOBALS._player.disableControl();
+ scene->_field2DDA = 7;
+ scene->_sceneMode = 9123;
+ if (BF_GLOBALS._player._visage == 1911)
+ scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL);
+ else
+ scene->signal();
+ return true;
+ break;
+ case CURSOR_TALK:
+ if (BF_GLOBALS._v4CEE8 < 3)
+ BF_GLOBALS._v4CEE8++;
+
+ scene->_stripManager.start(9107 + BF_GLOBALS._v4CEE8, &BF_GLOBALS._stripProxy);
+ return true;
+ break;
+ case 1:
+ if ((BF_GLOBALS.getFlag(gunDrawn)) && (BF_GLOBALS.getFlag(25)) && (BF_GLOBALS.getHasBullets())){
+ BF_GLOBALS._player.disableControl();
+ if (BF_GLOBALS._v4CEE4 == 2) {
+ scene->_sceneMode = 9132;
+ scene->setAction(&scene->_sequenceManager1, scene, 9132, &scene->_stuart, NULL);
+ return NamedObject::startAction(action, event);
+ } else {
+ if (scene->_field2DE0 == 0) {
+ scene->_sceneMode = 9132;
+ scene->setAction(&scene->_sequenceManager1, scene, 9132, &scene->_stuart, NULL);
+ } else
+ scene->_stripManager.start(9117, &BF_GLOBALS._stripProxy);
+ return NamedObject::startAction(action, event);
+ }
+ } else
+ return NamedObject::startAction(action, event);
+ break;
+ case 57:
+ if (BF_GLOBALS._v4CECC == 1) {
+ SceneItem::display(910, 84, 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 {
+ BF_GLOBALS._player.disableControl();
+ if (BF_GLOBALS._v4CEE2 == 4) {
+ scene->_field2DDA = 11;
+ scene->_sceneMode = 9123;
+ if (BF_GLOBALS._player._visage == 1911)
+ scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL);
+ else
+ scene->signal();
+ return true;
+ } else {
+ scene->_field2DDA = 12;
+ scene->_sceneMode = 9123;
+ if (BF_GLOBALS._player._visage == 1911)
+ scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL);
+ else
+ scene->signal();
+ return true;
+ }
+ }
+ break;
+ case 58:
+ if (BF_GLOBALS._v4CECC == 1) {
+ SceneItem::display(910, 84, 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 {
+ BF_GLOBALS._player.disableControl();
+ scene->_field2DDA = 11;
+ scene->_sceneMode = 9123;
+ if (BF_GLOBALS._player._visage == 1911)
+ scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL);
+ else
+ scene->signal();
+ return true;
+ }
+ break;
+ case 59:
+ case 61:
+ SceneItem::display(910, 83, 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;
+ break;
+ default:
+ return NamedObject::startAction(action, event);
+ break;
+ }
+}
+
+bool Scene910::Forbes::startAction(CursorType action, Event &event) {
+ Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
+
+ if (action == CURSOR_TALK) {
+ BF_GLOBALS._player.disableControl();
+ BF_GLOBALS._walkRegions.proc2(1);
+ BF_GLOBALS._walkRegions.proc2(16);
+ scene->_sceneMode = 9140;
+ scene->setAction(&scene->_sequenceManager1, scene, 9140, &scene->_forbes, &BF_GLOBALS._player, &scene->_lyle, NULL);
+ return true;
+ } else
+ return NamedObject::startAction(action, event);
+}
+
+void Scene910::PowerCord::synchronize(Serializer &s) {
+ NamedObject::synchronize(s);
+ s.syncAsSint16LE(_field90);
+ s.syncAsSint16LE(_field92);
+}
+
+bool Scene910::PowerCord::startAction(CursorType action, Event &event) {
+ Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
+
+ // the last check is used in order to replace a check on CURSOR_1000, which is replaced
+ // directly by its sub-check. All items have an id inferior to 100h.
+ if ((action == CURSOR_LOOK) || (action == CURSOR_TALK) || (action < CURSOR_WALK)) {
+ if (_field90 == 1)
+ return false;
+ if ((_field92 != 1) || (BF_GLOBALS._v4CEE0 == 0 ))
+ return NamedObject::startAction(action, event);
+ return false;
+ } else if (action == CURSOR_USE) {
+ if (_field90 == 0) {
+ if ((BF_GLOBALS._v4CEE0 == 0) || (_field92 != 1)) {
+ BF_GLOBALS._player.disableControl();
+ if (_field92 == 1) {
+ scene->_field2DDA = 8;
+ scene->_sceneMode = 9123;
+ if (BF_GLOBALS._player._visage == 1911)
+ scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL);
+ else
+ scene->signal();
+ _field90 = 1;
+ return true;
+ } else {
+ scene->_destPos = Common::Point(151, 186);
+ scene->_field2DDA = 4;
+ scene->_sceneMode = 9123;
+ if (BF_GLOBALS._player._visage == 1911)
+ scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL);
+ else
+ scene->signal();
+ _field90 = 1;
+ return true;
+ }
+ } else
+ return false;
+ } else if (_field90 == 1)
+ return false;
+ else
+ return true;
+ } else
+ return NamedObject::startAction(action, event);
+}
+
+void Scene910::PowerCord::init(int val) {
+ NamedObject::postInit();
+
+ _field92 = val;
+ _field90 = 0;
+}
+
+bool Scene910::BreakerBox::startAction(CursorType action, Event &event) {
+ Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ if (BF_GLOBALS._v4CEC8 == 0)
+ SceneItem::display2(910, 7);
+ else
+ SceneItem::display2(910, 6);
+ return true;
+ break;
+ case CURSOR_USE:
+ if (scene->_lyle._position.x == 115) {
+ SceneItem::display2(910, 62);
+ return true;
+ } else if (scene->_sceneMode != 9120) {
+ if (BF_GLOBALS._v4CEE2 == 1) {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 9118;
+ scene->setAction(&scene->_sequenceManager1, scene, 9118, &BF_GLOBALS._player, &scene->_nico, NULL);
+ return true;
+ } else {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 9102;
+ if (BF_GLOBALS.getFlag(gunDrawn)) {
+ scene->_field2DDA = 1;
+ scene->_sceneMode = 9123;
+ scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL);
+ return true;
+ } else {
+ scene->setAction(&scene->_sequenceManager1, scene, 9102, &BF_GLOBALS._player, NULL);
+ return true;
+ }
+ }
+ } else {
+ SceneItem::display(910, 62, 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;
+ }
+ break;
+ default:
+ return NamedObject::startAction(action, event);
+ break;
+ }
+}
+
+bool Scene910::FakeWall::startAction(CursorType action, Event &event) {
+ Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
+
+ if (action == INV_YELLOW_CORD) {
+ BF_GLOBALS._player.disableControl();
+ scene->_destPos = Common::Point(285, 114);
+ scene->_field2DDA = 9;
+ scene->_sceneMode = 9123;
+ if (BF_GLOBALS._player._visage == 1911)
+ scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL);
+ else
+ scene->signal();
+ return true;
+ } else
+ return NamedObject::startAction(action, event);
+}
+
+void Scene910::BreakerBoxInset::postInit(SceneObjectList *OwnerList) {
+ Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
+
+ FocusObject::postInit();
+ _resNum = 910;
+ _lookLineNum = 7;
+ _useLineNum = 8;
+ BF_GLOBALS._sceneItems.push_back(this);
+ scene->_field2DD8 = 0;
+
+ _object13.setupBreaker(115, 44, 1, BF_GLOBALS._v4CECE[0]);
+ _object14.setupBreaker(116, 63, 2, BF_GLOBALS._v4CECE[1]);
+ _object15.setupBreaker(116, 69, 2, BF_GLOBALS._v4CECE[2]);
+ _object16.setupBreaker(115, 76, 1, BF_GLOBALS._v4CECE[3]);
+ _object17.setupBreaker(115, 95, 1, BF_GLOBALS._v4CECE[4]);
+ _object18.setupBreaker(116, 114, 2, BF_GLOBALS._v4CECE[5]);
+ _object19.setupBreaker(116, 120, 2, BF_GLOBALS._v4CECE[6]);
+ _object20.setupBreaker(188, 45, 2, BF_GLOBALS._v4CECE[7]);
+ _object21.setupBreaker(188, 51, 2, BF_GLOBALS._v4CECE[8]);
+ _object22.setupBreaker(179, 59, 1, BF_GLOBALS._v4CECE[9]);
+ _object23.setupBreaker(187, 78, 2, BF_GLOBALS._v4CECE[10]);
+ _object24.setupBreaker(187, 84, 2, BF_GLOBALS._v4CECE[11]);
+
+ _object25.subEBBDC(178, 90, 1, BF_GLOBALS._v4CECE[12]);
+ _object26.subEBBDC(178, 108, 2, BF_GLOBALS._v4CECE[13]);
+}
+
+void Scene910::BreakerBoxInset::remove() {
+ Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
+
+ _object13.remove();
+ _object14.remove();
+ _object15.remove();
+ _object16.remove();
+ _object17.remove();
+ _object18.remove();
+ _object19.remove();
+ _object20.remove();
+ _object21.remove();
+ _object22.remove();
+ _object23.remove();
+ _object24.remove();
+ _object25.remove();
+ _object26.remove();
+ _object27.remove();
+ _object28.remove();
+
+ if ((BF_GLOBALS._v4CECE[13] < 4) && (scene->_breakerBox._frame > 1))
+ scene->_breakerBox.animate(ANIM_MODE_6, NULL);
+
+ FocusObject::remove();
+}
+
+void Scene910::Object13::synchronize(Serializer &s) {
+ NamedObject::synchronize(s);
+ s.syncAsSint16LE(_field90);
+ s.syncAsSint16LE(_field92);
+}
+
+bool Scene910::Object13::startAction(CursorType action, Event &event) {
+ static uint32 black = 0;
+ Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
+
+ int8 var2;
+
+ if (_field92 == 1)
+ var2 = 12;
+ else
+ var2 = 7;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display(910, 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:
+ scene->_sound2.play(101);
+ if (event.mousePos.x <= _position.x + var2) {
+ if (_field92 != 1) {
+ if (_frame > 6)
+ setFrame(_frame - 1);
+ } else {
+ if (_frame > 1)
+ setFrame(_frame - 1);
+ }
+ } else {
+ if (_field92 == 1) {
+ if (_frame < 3)
+ setFrame(_frame + 1);
+ } else {
+ if (_frame < 8)
+ setFrame(_frame + 1);
+ }
+ }
+
+ if (_field92 != 1)
+ BF_GLOBALS._v4CECE[_field90 - 1] = (_field90 + 251) % 256;
+ else
+ BF_GLOBALS._v4CECE[_field90 - 1] = _field90;
+
+ switch (_field90) {
+ case 1:
+ if (BF_GLOBALS._v4CEE2 < 1) {
+ if (_frame == 2) {
+ if (!BF_GLOBALS.getFlag(81)) {
+ T2_GLOBALS._uiElements.addScore(30);
+ BF_GLOBALS.setFlag(81);
+ }
+ scene->_sceneMode = 0;
+ if (BF_GLOBALS._dayNumber == 5) {
+ if (BF_GLOBALS._v4CEE2 == 0) {
+ scene->_breakerBoxInset.remove();
+ // _objectList.draw();
+ BF_GLOBALS._player.disableControl();
+ scene->_lyle.setVisage(912);
+ scene->_object7.remove();
+ scene->_action2.remove();
+ scene->_nico.postInit();
+ scene->_sceneMode = 9129;
+ scene->setAction(&scene->_sequenceManager1, scene, 9129, &BF_GLOBALS._player, &scene->_nico, NULL);
+ } else if (BF_GLOBALS._v4CEE2 == 2) {
+ scene->_breakerBoxInset.remove();
+ // _objectList.draw();
+ BF_GLOBALS._player.disableControl();
+ scene->_lyle.setVisage(911);
+ scene->_lyle.setStrip(4);
+ scene->_nico.setVisage(923);
+ scene->_nico.setStrip(2);
+ scene->_stuart.setVisage(923);
+ scene->_stuart.setStrip(3);
+ scene->_sceneMode = 9134;
+ scene->setAction(&scene->_sequenceManager1, scene, 9134, &BF_GLOBALS._player, &scene->_nico, &scene->_lyle, NULL);
+ }
+ }
+ BF_GLOBALS._v4CEC8 = 1;
+ scene->_object5.show();
+ if (scene->_sceneMode == 0) {
+ BF_GLOBALS._player.setVisage(911);
+ scene->_lyle.setVisage(912);
+ }
+ scene->transition((const byte *)&black, 25, 910, NULL, 0, 111, 112, 255, 0);
+ BF_GLOBALS._scenePalette.signalListeners();
+ // _objectList.draw();
+ } else {
+ if (BF_GLOBALS._v4CEC8 == 1) {
+ if (!BF_GLOBALS.getFlag(78)) {
+ T2_GLOBALS._uiElements.addScore(30);
+ BF_GLOBALS.setFlag(78);
+ }
+ BF_GLOBALS._player.disableControl();
+ BF_GLOBALS._v4CEC8 = 0;
+ scene->_sceneMode = 2;
+ scene->transition((const byte *)&black, 30, 910, scene, 0, 111, 112, 255, 0);
+ }
+ }
+ } else
+ SceneItem::display(910, 97, 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 4:
+ if (_frame == 2) {
+ if (BF_GLOBALS._v4CECE[4] == 2) {
+ scene->_action1.setActionIndex(2);
+ scene->_action1.signal();
+ }
+ } else if (scene->_action1.getActionIndex() == 2) {
+ scene->_action1.setActionIndex(1);
+ scene->_action1.signal();
+ }
+ return true;
+ case 5:
+ if (_frame == 2) {
+ if (BF_GLOBALS._v4CECE[3] == 2) {
+ scene->_action1.setActionIndex(2);
+ scene->_action1.signal();
+ }
+ } else if (scene->_action1.getActionIndex() == 2) {
+ scene->_action1.setActionIndex(1);
+ scene->_action1.signal();
+ }
+ return true;
+ case 15:
+ if ((BF_GLOBALS._v4CECA == 2) && (BF_GLOBALS._v4CECE[17] == 1)) {
+ if (_frame == 7)
+ scene->subE83E1();
+ else
+ scene->subE82BD();
+ }
+ return true;
+ default:
+ return true;
+ }
+ default:
+ return NamedObject::startAction(action, event);
+ break;
+ }
+}
+
+void Scene910::Object13::remove() {
+ BF_GLOBALS._sceneItems.remove(this);
+ SceneObject::remove();
+}
+
+void Scene910::Object13::setupBreaker(int x, int y, int mode, int8 frameNumber) {
+ Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
+
+ NamedObject::postInit();
+ _field92 = mode;
+ scene->_field2DD8++;
+ _field90 = scene->_field2DD8;
+ setVisage(910);
+
+ if (mode == 1) {
+ setStrip(8);
+ setFrame(frameNumber);
+ } else if (mode == 2) {
+ setStrip(7);
+ setFrame(frameNumber + 5);
+ }
+
+ fixPriority(252);
+ setPosition(Common::Point(x, y));
+ BF_GLOBALS._sceneItems.push_front(this);
+}
+
+void Scene910::Object25::synchronize(Serializer &s) {
+ NamedObject::synchronize(s);
+ s.syncAsSint16LE(_field90);
+ s.syncAsSint16LE(_field92);
+}
+
+bool Scene910::Object25::startAction(CursorType action, Event &event) {
+ Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ if (_field92 == 1)
+ SceneItem::display2(910, 10);
+ else
+ SceneItem::display2(910, 11);
+ return true;
+ case CURSOR_USE:
+ _field92 = BF_GLOBALS._v4CECE[_field90 + 11];
+ switch (_field92 - 1) {
+ case 0:
+ _field92 = 2;
+ setStrip(7);
+ setFrame(1);
+ if (_field90 == 1) {
+ scene->_field2DD8 = 14;
+ scene->_breakerBoxInset._object27.setupBreaker(182, 92, 2, BF_GLOBALS._v4CECE[14]);
+ } else {
+ scene->_field2DD8 = 15;
+ scene->_breakerBoxInset._object28.init(178, 108, 0, BF_GLOBALS._v4CECE[15]);
+ }
+ SceneItem::display2(910, 12);
+ break;
+ case 1:
+ _field92 = 3;
+ setStrip(6);
+ setFrame(3);
+ if (_field90 == 1)
+ scene->_breakerBoxInset._object27.remove();
+ else
+ scene->_breakerBoxInset._object28.remove();
+ break;
+ case 2:
+ _field92 = 2;
+ setStrip(7);
+ setFrame(1);
+ if (_field90 == 1) {
+ scene->_field2DD8 = 14;
+ scene->_breakerBoxInset._object27.setupBreaker(182, 96, 2, BF_GLOBALS._v4CECE[14]);
+ } else {
+ scene->_field2DD8 = 15;
+ scene->_breakerBoxInset._object28.init(178, 108, 0, BF_GLOBALS._v4CECE[15]);
+ }
+ break;
+ case 3:
+ SceneItem::display2(910, 13);
+ break;
+ default:
+ break;
+ }
+
+ BF_GLOBALS._v4CECE[_field90 + 11] = _field92;
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ break;
+ }
+}
+
+void Scene910::Object25::remove() {
+ BF_GLOBALS._sceneItems.remove(this);
+ SceneObject::remove();
+}
+
+void Scene910::Object25::subEBBDC(int x, int y, int arg8, int argA) {
+ Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
+
+ NamedObject::postInit();
+ scene->_field2DD8++;
+ _field90 = arg8;
+ _field92 = argA;
+ setVisage(910);
+
+ if ((_field92 != 2) && (_field92 != 4)) {
+ setStrip(6);
+ setFrame(3);
+ } else {
+ setStrip(7);
+ setFrame(1);
+ if (_field90 == 1) {
+ scene->_field2DD8 = 14;
+ scene->_breakerBoxInset._object27.setupBreaker(182, 96, 2, BF_GLOBALS._v4CECE[14]);
+ } else {
+ scene->_field2DD8 = 15;
+ scene->_breakerBoxInset._object28.init(178, 108, 0, BF_GLOBALS._v4CECE[15]);
+ }
+ }
+
+ fixPriority(251);
+ setPosition(Common::Point(x, y));
+ BF_GLOBALS._sceneItems.push_front(this);
+}
+
+bool Scene910::BlackPlug::startAction(CursorType action, Event &event) {
+ Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display(910, 14, 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:
+ switch (_frame - _field90 - 2) {
+ case 0:
+ SceneItem::display(910, 15, 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);
+ break;
+ case 1:
+ if (BF_GLOBALS._v4CECA == 1) {
+ BF_GLOBALS._v4CECA = 0;
+ BF_INVENTORY.setObjectScene(INV_BLACK_CORD, 1);
+ BF_INVENTORY.setObjectScene(INV_HALF_BLACK_CORD, 910);
+ } else if (BF_GLOBALS._v4CECA == 2) {
+ BF_GLOBALS._v4CECA = 1;
+ BF_INVENTORY.setObjectScene(INV_BLACK_CORD, 3 - _field90);
+ BF_INVENTORY.setObjectScene(INV_HALF_BLACK_CORD, 1);
+ scene->_blackCord.setPosition(Common::Point(540, 100));
+ }
+ setFrame(_field90 + 2);
+ break;
+ case 2:
+ if (BF_GLOBALS._v4CECC == 1) {
+ BF_GLOBALS._v4CECC = 0;
+ BF_INVENTORY.setObjectScene(INV_YELLOW_CORD, 1);
+ BF_INVENTORY.setObjectScene(INV_HALF_YELLOW_CORD, 910);
+ } else if (BF_GLOBALS._v4CECC == 2) {
+ BF_GLOBALS._v4CECC = 1;
+ BF_INVENTORY.setObjectScene(INV_YELLOW_CORD, 3 - _field90);
+ BF_INVENTORY.setObjectScene(INV_HALF_YELLOW_CORD, 1);
+ scene->_yellowCord.setPosition(Common::Point(540, 100));
+ }
+ setFrame(_field90 + 2);
+ break;
+ case 3:
+ if ((_position.x - 12) - (5 * _field90) < event.mousePos.x) {
+ if (BF_GLOBALS._v4CECA == 1) {
+ BF_GLOBALS._v4CECA = 0;
+ BF_INVENTORY.setObjectScene(INV_BLACK_CORD, 1);
+ BF_INVENTORY.setObjectScene(INV_HALF_BLACK_CORD, 910);
+ scene->_blackCord.setPosition(Common::Point(540, 100));
+ } else if (BF_GLOBALS._v4CECA == 2) {
+ BF_GLOBALS._v4CECA = 1;
+ BF_INVENTORY.setObjectScene(INV_BLACK_CORD, 3 - _field90);
+ BF_INVENTORY.setObjectScene(INV_HALF_BLACK_CORD, 1);
+ scene->_blackCord.setPosition(Common::Point(540, 100));
+ }
+ setFrame(_field90 + 4);
+ } else {
+ if (BF_GLOBALS._v4CECC == 1) {
+ BF_GLOBALS._v4CECC = 0;
+ BF_INVENTORY.setObjectScene(INV_YELLOW_CORD, 1);
+ BF_INVENTORY.setObjectScene(INV_HALF_YELLOW_CORD, 910);
+ } else if (BF_GLOBALS._v4CECC == 2) {
+ BF_GLOBALS._v4CECC = 1;
+ BF_INVENTORY.setObjectScene(INV_YELLOW_CORD, 3 - _field90);
+ BF_INVENTORY.setObjectScene(INV_HALF_YELLOW_CORD, 1);
+ scene->_yellowCord.setPosition(Common::Point(540, 100));
+ }
+ setFrame(_field90 + 3);
+ }
+ default:
+ break;
+ }
+ BF_GLOBALS._v4CECE[_field90 + 15] = _frame;
+ if (_field90 == 0) {
+ if (_frame == 2)
+ BF_GLOBALS._v4CECE[13] = 2;
+ else
+ BF_GLOBALS._v4CECE[13] = 4;
+ }
+ return true;
+ case INV_HALF_YELLOW_CORD:
+ if (BF_INVENTORY.getObjectScene(INV_YELLOW_CORD) == _field90 + 2) {
+ SceneItem::display(910, 85, 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;
+ }
+ if (BF_GLOBALS._v4CEE2 == 3) {
+ SceneItem::display(910, 84, 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;
+ }
+ // no break on purpose
+ case INV_YELLOW_CORD:
+ if (BF_GLOBALS._v4CECC == 0) {
+ BF_GLOBALS._v4CECC = 1;
+ BF_INVENTORY.setObjectScene(INV_YELLOW_CORD, _field90 + 2);
+ BF_INVENTORY.setObjectScene(INV_HALF_YELLOW_CORD, 1);
+ } else if (BF_GLOBALS._v4CECC == 1) {
+ BF_GLOBALS._v4CECC = 2;
+ BF_INVENTORY.setObjectScene(INV_HALF_YELLOW_CORD, _field90 + 2);
+ scene->_yellowCord.setStrip(4);
+ scene->_yellowCord.setFrame(2);
+ scene->_yellowCord.setPosition(Common::Point(135, 93));
+ scene->_yellowCord.fixPriority(50);
+ }
+ if (_frame - _field90 == 2)
+ setFrame(_field90 + 4);
+ else if (_frame - _field90 == 3)
+ setFrame(_field90 + 5);
+ BF_GLOBALS._v4CECE[15 + _field90] = _frame;
+ BF_GLOBALS._v4CECE[_field90 + 15] = _frame;
+ if (_field90 == 0) {
+ if (_frame == 2)
+ BF_GLOBALS._v4CECE[13] = 2;
+ else
+ BF_GLOBALS._v4CECE[13] = 4;
+ }
+ return true;
+ case INV_HALF_BLACK_CORD:
+ if (BF_INVENTORY.getObjectScene(INV_BLACK_CORD) == _field90 + 2) {
+ SceneItem::display(910, 85, 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;
+ }
+ //No break on purpose
+ case INV_BLACK_CORD:
+ if (BF_GLOBALS._v4CECA == 0) {
+ if (_field90 == 1) {
+ if (!BF_GLOBALS.getFlag(fGotPointsForBlackCord)) {
+ T2_GLOBALS._uiElements.addScore(30);
+ BF_GLOBALS.setFlag(fGotPointsForBlackCord);
+ }
+ } else {
+ if (!BF_GLOBALS.getFlag(fGotPointsForGeneratorPlug)) {
+ T2_GLOBALS._uiElements.addScore(30);
+ BF_GLOBALS.setFlag(fGotPointsForGeneratorPlug);
+ }
+ }
+ BF_GLOBALS._v4CECA = 1;
+ BF_INVENTORY.setObjectScene(INV_BLACK_CORD, _field90 + 2);
+ BF_INVENTORY.setObjectScene(INV_HALF_BLACK_CORD, 1);
+ } else if (BF_GLOBALS._v4CECA == 1) {
+ if (_field90 == 1) {
+ if (!BF_GLOBALS.getFlag(fGotPointsForBlackCord)) {
+ T2_GLOBALS._uiElements.addScore(30);
+ BF_GLOBALS.setFlag(fGotPointsForBlackCord);
+ }
+ } else {
+ if (!BF_GLOBALS.getFlag(fGotPointsForGeneratorPlug)) {
+ T2_GLOBALS._uiElements.addScore(30);
+ BF_GLOBALS.setFlag(fGotPointsForGeneratorPlug);
+ }
+ }
+ BF_GLOBALS._v4CECA = 2;
+ BF_INVENTORY.setObjectScene(INV_HALF_BLACK_CORD, _field90 + 2);
+ scene->_blackCord.setStrip(4);
+ scene->_blackCord.setFrame(1);
+ scene->_blackCord.setPosition(Common::Point(135, 93));
+ scene->_blackCord.fixPriority(50);
+ scene->_blackCord.show();
+ scene->_blackCord._field90 = 1;
+ if (BF_GLOBALS._v4CECE[17] == 1) {
+ if (BF_GLOBALS._v4CECE[14] == 2)
+ scene->subE83E1();
+ else
+ scene->subE82BD();
+ }
+ }
+ if (_frame - _field90 == 2)
+ setFrame(_field90 + 3);
+ else if (_frame - _field90 == 4)
+ setFrame(_field90 + 5);
+ BF_GLOBALS._v4CECE[15 + _field90] = _frame;
+ BF_GLOBALS._v4CECE[_field90 + 15] = _frame;
+ if (_field90 == 0) {
+ if (_frame == 2)
+ BF_GLOBALS._v4CECE[13] = 2;
+ else
+ BF_GLOBALS._v4CECE[13] = 4;
+ }
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ }
+}
+
+void Scene910::BlackPlug::init(int x, int y, int arg8, int8 argA) {
+ NamedObject::postInit();
+ _field90 = arg8;
+ _field92 = argA;
+ setVisage(910);
+ if (_field90 == 0)
+ setStrip(7);
+ else
+ setStrip(3);
+ setFrame(argA);
+ fixPriority(251);
+ setPosition(Common::Point(x, y));
+ BF_GLOBALS._sceneItems.push_front(this);
+}
+
+void Scene910::BlackPlug::remove() {
+ BF_GLOBALS._sceneItems.remove(this);
+ SceneObject::remove();
+}
+
+void Scene910::GeneratorInset::postInit(SceneObjectList *OwnerList) {
+ Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
+
+ FocusObject::postInit();
+ _resNum = 910;
+ _lookLineNum = 99;
+ _useLineNum = 87;
+ BF_GLOBALS._sceneItems.push_front(this);
+
+ scene->_field2DD8 = 16;
+ _blackPlug.init(142, 86, 1, BF_GLOBALS._v4CECE[16]);
+
+ scene->_field2DD8 = 17;
+ _powerButton.init(BF_GLOBALS._v4CECE[17]);
+}
+
+void Scene910::GeneratorInset::remove() {
+ Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
+
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 12;
+ BF_GLOBALS._player.animate(ANIM_MODE_6, scene);
+ _blackPlug.remove();
+ _powerButton.remove();
+ FocusObject::remove();
+}
+
+bool Scene910::PowerButton::startAction(CursorType action, Event &event) {
+ Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
+
+ if (action == CURSOR_USE) {
+ if (_frame == 4) {
+ scene->_sound1.play(100);
+ scene->_sound1.holdAt(1);
+ if (!BF_GLOBALS.getFlag(77)) {
+ T2_GLOBALS._uiElements.addScore(30);
+ BF_GLOBALS.setFlag(77);
+ }
+ setFrame(5);
+ _object32.setFrame(7);
+ if (BF_GLOBALS._v4CECA == 2) {
+ if (BF_GLOBALS._v4CECE[14] == 2)
+ scene->subE83E1();
+ else
+ scene->subE82BD();
+ }
+ } else {
+ scene->_sound1.release();
+ if (BF_GLOBALS._bookmark == 21) {
+ if (!BF_GLOBALS.getFlag(82)) {
+ T2_GLOBALS._uiElements.addScore(30);
+ BF_GLOBALS.setFlag(82);
+ }
+ }
+ setFrame(4);
+ _object32.setFrame(6);
+ }
+ BF_GLOBALS._v4CECE[17] = (_frame + 252) % 256;
+ return true;
+ } else
+ return NamedObject::startAction(action, event);
+}
+
+void Scene910::PowerButton::remove() {
+ _object32.remove();
+ SceneObject::remove();
+}
+
+void Scene910::PowerButton::init(int frame) {
+ NamedObject::postInit();
+ setVisage(910);
+ setStrip(6);
+ setFrame(frame + 4);
+ setPosition(Common::Point(159, 83));
+ fixPriority(251);
+ _object32.postInit();
+ _object32.setVisage(910);
+ _object32.setStrip(6);
+ _object32.setFrame(6 + frame);
+ _object32.setPosition(Common::Point(166, 84));
+ _object32.fixPriority(251);
+ BF_GLOBALS._sceneItems.push_front(this);
+}
+
+bool Scene910::Generator::startAction(CursorType action, Event &event) {
+ Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
+
+ if (action == CURSOR_USE) {
+ if (scene->_lyle._position.x == 115)
+ SceneItem::display(910, 62, 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 if (BF_GLOBALS._v4CEE2 == 1) {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 9118;
+ scene->setAction(&scene->_sequenceManager1, scene, 9118, &BF_GLOBALS._player, &scene->_nico, NULL);
+ } else {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 9103;
+ if (BF_GLOBALS.getFlag(gunDrawn)) {
+ scene->_sceneMode = 9123;
+ scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL);
+ } else
+ scene->setAction(&scene->_sequenceManager1, scene, 9103, &BF_GLOBALS._player, NULL);
+ }
+ return true;
+ } else {
+ return NamedHotspot::startAction(action, event);
+ }
+}
+
+bool Scene910::Item2::startAction(CursorType action, Event &event) {
+ Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
+
+ if (action == 59) {
+ BF_GLOBALS._player.disableControl();
+ scene->_destPos = Common::Point(151, 186);
+ scene->_field2DDA = 5;
+ scene->_sceneMode = 9123;
+ if (BF_GLOBALS._player._visage == 1911)
+ scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL);
+ else
+ scene->signal();
+ return true;
+ } else
+ return NamedHotspot::startAction(action, event);
+}
+
+bool Scene910::Item3::startAction(CursorType action, Event &event) {
+ Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
+
+ if ((action == CURSOR_TALK) && (BF_GLOBALS._v4CEE2 == 4) && (BF_GLOBALS._v4CEE4 == 0)) {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 15;
+ scene->_stripManager.start(9102, scene);
+ return true;
+ } else {
+ return NamedHotspot::startAction(action, event);
+ }
+}
+
+bool Scene910::Item9::startAction(CursorType action, Event &event) {
+ if (BF_GLOBALS._v4CEE0 == 0)
+ return NamedHotspot::startAction(action, event);
+ else
+ return false;
+}
+
+bool Scene910::Item15::startAction(CursorType action, Event &event) {
+ if (BF_GLOBALS._v4CEC8 == 0)
+ return false;
+
+ if ((action == CURSOR_LOOK) || (action == CURSOR_USE) || (action == CURSOR_TALK))
+ return NamedHotspot::startAction(action, event);
+
+ if (action >= CURSOR_WALK)
+ return false;
+
+ SceneItem::display(910, 2, 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;
+}
+
+bool Scene910::Item16::startAction(CursorType action, Event &event) {
+ Scene910 *scene = (Scene910 *)BF_GLOBALS._sceneManager._scene;
+
+ if ((BF_GLOBALS._v4CEE0 == 0) || (BF_GLOBALS._v4CEE2 != 0))
+ return false;
+
+ if (BF_GLOBALS._player._visage == 1911) {
+ BF_GLOBALS._player.disableControl();
+ scene->_destPos = Common::Point(292, 100);
+ scene->_field2DDA = 0;
+ scene->_sceneMode = 9123;
+ scene->setAction(&scene->_sequenceManager1, scene, 9123, &BF_GLOBALS._player, NULL);
+ } else {
+ Common::Point pt(292, 100);
+ PlayerMover *mover = new PlayerMover();
+ BF_GLOBALS._player.addMover(mover, &pt, NULL);
+ }
+
+ return true;
+}
+
+bool Scene910::Item17::startAction(CursorType action, Event &event) {
+ Common::Point pt(15, 159);
+ PlayerMover *mover = new PlayerMover();
+ BF_GLOBALS._player.addMover(mover, &pt, NULL);
+
+ return true;
+}
+
+void Scene910::remove() {
+ PalettedScene::remove();
+}
+
+void Scene910::synchronize(Serializer &s) {
+ PalettedScene::synchronize(s);
+
+ s.syncAsSint16LE(_field2DDA);
+ s.syncAsSint16LE(_field2DD8);
+ s.syncAsSint16LE(_field2DE0);
+ s.syncAsSint16LE(_field2DE2);
+ s.syncAsSint16LE(_field2DE4);
+ s.syncAsSint16LE(_destPos.x);
+ s.syncAsSint16LE(_destPos.y);
+}
+
+void Scene910::postInit(SceneObjectList *OwnerList) {
+ uint32 unk_50E94 = 0, unk_50E90 = 0;
+ uint32 unk_50E98 = 0, unk_50E9C = 0;
+
+ PalettedScene::postInit(OwnerList);
+ loadScene(910);
+
+ BF_GLOBALS._sound1.changeSound(99);
+ BF_GLOBALS._v51C44 = 0;
+
+ _stripManager.addSpeaker(&_gameTextSpeaker);
+ _stripManager.addSpeaker(&_jakeJacketSpeaker);
+ _stripManager.addSpeaker(&_lyleHatSpeaker);
+ _stripManager.addSpeaker(&_fbiSpeaker);
+ _stripManager.addSpeaker(&_nicoSpeaker);
+ _stripManager.addSpeaker(&_daSpeaker);
+ BF_GLOBALS._player.postInit();
+
+ if (BF_GLOBALS._v4CEC8 == 0)
+ BF_GLOBALS._player.setVisage(129);
+ else
+ BF_GLOBALS._player.setVisage(911);
+
+ BF_GLOBALS._player.setPosition(Common::Point(330, 190));
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
+ BF_GLOBALS._player.disableControl();
+
+ _vent.postInit();
+ _vent.setVisage(910);
+ if ((BF_GLOBALS._v4CECE[3] == 2) && (BF_GLOBALS._v4CECE[4] == 2)) {
+ _action1.setActionIndex(4);
+ } else {
+ _vent.animate(ANIM_MODE_2, NULL);
+ _vent.setStrip(2);
+ }
+ _vent.setPosition(Common::Point(98, 34));
+ _vent.setAction(&_action1);
+
+ _breakerBox.postInit();
+ _breakerBox.setVisage(910);
+ _breakerBox.setStrip(5);
+ _breakerBox.setFrame(1);
+ _breakerBox.setPosition(Common::Point(91, 66));
+
+ _fakeWall.postInit();
+ _fakeWall.setVisage(910);
+ _fakeWall.setStrip(8);
+ _fakeWall.setFrame(4);
+ _fakeWall.fixPriority(48);
+
+ _yellowCord.init(1);
+ _yellowCord.setVisage(910);
+ _yellowCord.setStrip(6);
+ _yellowCord.setFrame(2);
+ _yellowCord.fixPriority(50);
+
+ _blackCord.init(2);
+ _blackCord.setVisage(910);
+ _blackCord.setStrip(6);
+ _blackCord.setFrame(1);
+ _blackCord.setPosition(Common::Point(114, 149));
+ _blackCord.fixPriority(246);
+
+ if (BF_GLOBALS._dayNumber < 5)
+ _item17.setDetails(Rect(0, 149, 29, 167), 910, -1, -1, -1, 1, NULL);
+
+ if (BF_GLOBALS._v4CEE2 == 0)
+ _item16.setDetails(Rect(265, 18, 319, 102), 910, -1, -1, -1, 1, NULL);
+
+ _breakerBox.setDetails(910, 6, -1, -1, 1, NULL);
+ _item15.setDetails(Rect(0, 0, 320, 170), 910, 0, 1, 2, 1, NULL);
+ _yellowCord.setDetails(910, 52, 53, -1, 1, NULL);
+ _blackCord.setDetails(910, 54, 55, -1, 1, NULL);
+ _item2.setDetails(3, 910, 22, -1, 24, 1);
+ _item4.setDetails(1, 910, 16, 17, 18, 1);
+ _item8.setDetails(4, 910, 25, 26, 27, 1);
+ _item6.setDetails(Rect(37, 58, 42, 67), 910, 34, 35, 36, 1, NULL);
+ _item7.setDetails(Rect(114, 53, 135, 87), 910, 37, 38, 39, 1, NULL);
+ _generator.setDetails(Rect(146, 67, 184, 93), 910, 40, 41, 42, 1, NULL);
+ _item9.setDetails(Rect(266, 39, 274, 70), 910, 43, 44, 45, 1, NULL);
+ _item10.setDetails(Rect(276, 27, 288, 83), 910, 46, 47, 48, 1, NULL);
+ _item11.setDetails(Rect(295, 42, 312, 87), 910, 49, 50, 51, 1, NULL);
+ _fakeWall.setDetails(910, 28, -1, 30, 1, NULL);
+ _item3.setDetails(7, 910, 59, 60, 61, 1);
+ _item5.setDetails(2, 910, 19, 20, 21, 1);
+ _backWall.setDetails(6, 910, 28, 29, 30, 1);
+ _item13.setDetails(5, 910, 31, 32, 33, 1);
+ _item14.setDetails(Rect(0, 0, 320, 170), 910, 3, 4, 5, 1, NULL);
+ if (BF_GLOBALS._dayNumber == 0) {
+ BF_GLOBALS._dayNumber = 5;
+ BF_GLOBALS._sceneManager._previousScene = 900;
+ BF_GLOBALS.setFlag(7);
+ }
+
+ if ( (BF_GLOBALS._sceneManager._previousScene == 910)
+ || (BF_GLOBALS._sceneManager._previousScene == 190)
+ || (BF_GLOBALS._sceneManager._previousScene == 300)) {
+ BF_GLOBALS._sceneManager._previousScene = 900;
+ BF_GLOBALS._v4CEE2 = 0;
+ BF_GLOBALS._v4CEE4 = 0;
+ }
+
+ _field2DE0 = 0;
+ _field2DE2 = 0;
+ _field2DE4 = 0;
+ BF_GLOBALS.clearFlag(34);
+ _lyle._position.x = 0;
+
+ if ((BF_GLOBALS._dayNumber == 5) && (BF_GLOBALS._sceneManager._previousScene == 900)){
+ BF_GLOBALS.setFlag(34);
+ BF_GLOBALS._v4CEC8 = 0;
+ BF_GLOBALS._player.setVisage(129);
+
+ _lyle.postInit();
+ _lyle.setVisage(811);
+ _lyle.setPosition(Common::Point(-52, 217));
+ _lyle.animate(ANIM_MODE_1, NULL);
+ _lyle.setObjectWrapper(new SceneObjectWrapper());
+ _lyle._field90 = 0;
+ _lyle.setDetails(910, 69, 70, 71, 5, &_item4);
+
+ BF_GLOBALS._v4CECE[0] = 3;
+ BF_GLOBALS._v4CECE[12] = 2;
+ BF_GLOBALS._v4CECE[13] = 4;
+ BF_GLOBALS._v4CECE[14] = 3;
+ BF_GLOBALS._v4CECE[15] = 3;
+ BF_GLOBALS._v4CECE[16] = 4;
+ BF_GLOBALS._v4CECE[17] = 1;
+ BF_GLOBALS._v4CECA = 2;
+ BF_GLOBALS._v4CEE0 = 1;
+ _yellowCord.setPosition(Common::Point(291, -30));
+ BF_GLOBALS._v4CECC = 0;
+ }
+
+ if (BF_GLOBALS._sceneManager._previousScene == 920) {
+ BF_GLOBALS.setFlag(34);
+ BF_GLOBALS._player.setPosition(Common::Point(276, 119));
+ BF_GLOBALS._player.setStrip(6);
+ if (BF_GLOBALS._v4CECC == 0)
+ _yellowCord.setPosition(Common::Point(291, -30));
+
+ if (BF_GLOBALS._dayNumber == 5) {
+ _nico.postInit();
+ _nico.setVisage(914);
+ _nico.setStrip(5);
+ _nico.setFrame(8);
+ _nico.setPosition(Common::Point(263, 120));
+ _nico.setDetails(910, 63, 64, 65, 5, &_item4);
+
+ _stuart.postInit();
+ _stuart.setVisage(918);
+ _stuart.setStrip(4);
+ _stuart.setFrame(1);
+ _stuart.setPosition(Common::Point(291, 127));
+ _stuart.setDetails(910, 66, 67, 68, 5, &_nico);
+
+ _lyle.postInit();
+ _lyle.setVisage(916);
+ _lyle.setPosition(Common::Point(155, 113));
+ _lyle.setStrip(3);
+ _lyle.setFrame(3);
+ _lyle._field90 = 1;
+ _lyle.setDetails(910, 69, 70, 71, 5, &_item4);
+ }
+ BF_GLOBALS._player.enableControl();
+ } else if (BF_GLOBALS._sceneManager._previousScene == 935) {
+ BF_GLOBALS.setFlag(34);
+ BF_GLOBALS._v4CEC8 = 0;
+ _lyle.postInit();
+ _lyle.setVisage(916);
+ _lyle.setPosition(Common::Point(155, 113));
+ _lyle.setStrip(3);
+ _lyle.setFrame(3);
+ _lyle._field90 = 1;
+ _lyle.setDetails(910, 69, 70 ,71 , 5, &_item4);
+
+ BF_GLOBALS._walkRegions.proc1(15);
+ BF_GLOBALS._walkRegions.proc1(16);
+ BF_GLOBALS._walkRegions.proc1(14);
+ BF_GLOBALS._walkRegions.proc1(10);
+ if (BF_GLOBALS.getFlag(gunDrawn)) {
+ BF_GLOBALS._player.setVisage(1911);
+ BF_GLOBALS._player.animate(ANIM_MODE_NONE, 0, NULL);
+ BF_GLOBALS._player.setFrame(7);
+ }
+ BF_GLOBALS._player.setPosition(Common::Point(174, 157));
+ BF_GLOBALS._player._strip = 7;
+ _nico.postInit();
+ _nico.setVisage(913);
+ _nico.setPosition(Common::Point(262, 124));
+ _nico.setStrip(6);
+ BF_GLOBALS._v4CEE6 = 0;
+ BF_GLOBALS._v4CEE2 = 1;
+ _nico.setDetails(910, 63, 64, 67, 5, &_item4);
+ BF_GLOBALS._v4CECA = 2;
+ if (BF_GLOBALS._v4CECC == 0)
+ _yellowCord.setPosition(Common::Point(291, -30));
+ _sceneMode = 11;
+ if (BF_GLOBALS._v4CEC8 == 0)
+ add2Faders((const byte *)&unk_50E94, 2, 913, this);
+ else
+ add2Faders((const byte *)&unk_50E90, 2, 911, this);
+ } else {
+ BF_GLOBALS.clearFlag(8);
+ BF_GLOBALS._player.disableControl();
+ }
+
+ if ((BF_GLOBALS._dayNumber == 5) && (BF_GLOBALS._v4CEE2 == 0)){
+ _object7.postInit();
+ _object7.setAction(&_action2);
+ }
+
+ if (BF_INVENTORY.getObjectScene(INV_YELLOW_CORD) == 1)
+ _yellowCord.setPosition(Common::Point(540, 100));
+
+ if (BF_INVENTORY.getObjectScene(INV_BLACK_CORD) == 1)
+ _blackCord.setPosition(Common::Point(540, 100));
+
+ if (BF_GLOBALS._v4CECC == 2) {
+ _yellowCord.setStrip(4);
+ _yellowCord.setFrame(2);
+ _yellowCord.setPosition(Common::Point(135, 93));
+ _yellowCord.setPriority(50);
+ _yellowCord._field90 = 1;
+
+ _breakerBox.setFrame(3);
+ }
+
+ if (BF_GLOBALS._v4CECA == 2) {
+ _blackCord.setStrip(4);
+ _blackCord.setFrame(1);
+ _blackCord.setPosition(Common::Point(135, 93));
+ _blackCord.fixPriority(50);
+ _blackCord._field90 = 1;
+
+ _breakerBox.setFrame(3);
+ }
+
+ _object5.postInit();
+ _object5.setVisage(919);
+ _object5.setStrip(5);
+ _object5.setPosition(Common::Point(286, 129));
+ _object5.fixPriority(1);
+
+ if (BF_GLOBALS._v4CEC8 == 0)
+ _object5.hide();
+
+ if (BF_GLOBALS._v4CEE0 == 0) {
+ _object5.setFrame(1);
+ _fakeWall.setPosition(Common::Point(292, 107));
+ if (BF_GLOBALS._v4CECC != 2)
+ _yellowCord.setPosition(Common::Point(288, 57));
+ BF_GLOBALS._walkRegions.proc1(10);
+ } else {
+ _object5.setFrame(6);
+ _fakeWall.setPosition(Common::Point(295, 20));
+ _fakeWall.hide();
+ if (BF_GLOBALS._v4CECC != 2)
+ _yellowCord.setPosition(Common::Point(291, -30));
+ BF_GLOBALS._walkRegions.proc1(10);
+ }
+
+ if (BF_GLOBALS._v4CECE[17] != 0) {
+ _sound1.play(100);
+ _sound1.holdAt(1);
+ }
+
+ if (BF_GLOBALS._sceneManager._previousScene != 935) {
+ _sceneMode = 11;
+ if (BF_GLOBALS._v4CEC8 == 0)
+ add2Faders((const byte *)&unk_50E9C, 10, 910, this);
+ else
+ add2Faders((const byte *)&unk_50E98, 10, 911, this);
+ }
+}
+
+void Scene910::signal() {
+ static uint32 black = 0;
+
+ switch (_sceneMode) {
+ case 2:
+ _sceneMode = 3;
+ _timer1.set(60, this);
+ break;
+ case 3:
+ _sceneMode = 4;
+ transition((const byte *)&black, 35, 910, this, 0, 111, 112, 255, false);
+ break;
+ case 4:
+ _sceneMode = 5;
+ _timer1.set(30, this);
+ break;
+ case 5:
+ _sceneMode = 6;
+ transition((const byte *)&black, 40, 910, this, 0, 111, 112, 255, false);
+ break;
+ case 6:
+ _sceneMode = 7;
+ _timer1.set(60, this);
+ break;
+ case 7:
+ BF_GLOBALS._player.setVisage(129);
+ _lyle.setVisage(811);
+ _object5.hide();
+ _sceneMode = 8;
+ transition((const byte *)&black, 95, 910, this, 0, 111, 112, 255, false);
+ break;
+ case 8:
+ _sceneMode = 9;
+ _timer1.set(30, this);
+ break;
+ case 9:
+ _sceneMode = 0;
+ transition((const byte *)&black, 100, 910, this, 0, 111, 112, 255, false);
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 10:
+ BF_GLOBALS._player.disableControl();
+ BF_GLOBALS._v51C44 = 0;
+ BF_GLOBALS._sceneManager.changeScene(935);
+ break;
+ case 11:
+ if (BF_GLOBALS._sceneManager._previousScene == 900) {
+ if (BF_GLOBALS._v4CEC8 != 0)
+ transition((const byte *)&black, 25, 910, NULL, 0, 111, 112, 255, false);
+ if (BF_GLOBALS.getFlag(fWithLyle)) {
+ NpcMover *mover = new NpcMover();
+ Common::Point destPos(22, 157);
+ _lyle.addMover(mover, &destPos, NULL);
+ }
+
+ _sceneMode = 9100;
+ setAction(&_sequenceManager1, this, 9100, &BF_GLOBALS._player, NULL);
+ } else if (BF_GLOBALS._sceneManager._previousScene == 935) {
+ _sceneMode = 9146;
+ _stripManager.start(9103, this);
+ }
+ break;
+ case 12:
+ BF_GLOBALS._player.setVisage(129);
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ BF_GLOBALS._player.setStrip(7);
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 13:
+ BF_GLOBALS._player.disableControl();
+ BF_GLOBALS._player.setAction(&_sequenceManager2, NULL, 9117, &_nico, NULL);
+ BF_GLOBALS._v4CEE2 = 2;
+ // No break on purpose
+ case 15:
+ _stuart.postInit();
+ _stuart.setDetails(910, 66, 67, 68, 5, &_nico);
+ BF_GLOBALS._v4CEE8 = 0;
+ _sceneMode = 9121;
+ setAction(&_sequenceManager1, this, 9121, &_stuart, NULL);
+ break;
+ case 14:
+ BF_GLOBALS._v51C44 = 1;
+ BF_GLOBALS._sceneManager.changeScene(940);
+ break;
+ case 16:
+ _lyle._field90 = 1;
+ _sceneMode = 10;
+ addFader((const byte *)&black, 2, this);
+ BF_GLOBALS._v4CEE2 = 1;
+ BF_GLOBALS._walkRegions.proc1(16);
+ BF_GLOBALS._walkRegions.proc1(14);
+ BF_GLOBALS._sceneItems.remove(&_item16);
+ break;
+ case 17:
+ BF_GLOBALS._player._strip = 7;
+ BF_GLOBALS._player._frame = 1;
+ if (_field2DE2 == 0) {
+ _field2DE2 = 1;
+ if (BF_GLOBALS._v4CEE2 == 4) {
+ _sceneMode = 9149;
+ setAction(&_sequenceManager1, this, 9149, &BF_GLOBALS._player, NULL);
+ } else {
+ _sceneMode = 9141;
+ setAction(&_sequenceManager1, this, 9141, &BF_GLOBALS._player, &_nico, NULL);
+ }
+ } else {
+ SceneItem::display(910, 91, 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);
+ BF_GLOBALS._player.enableControl();
+ }
+ break;
+ case 18:
+ BF_GLOBALS._player._strip = 7;
+ BF_GLOBALS._player._frame = 1;
+ if (BF_GLOBALS._v4CEE4 == 3) {
+ if (_field2DE4 == 0) {
+ _field2DE4 = 1;
+ _sceneMode = 9142;
+ setAction(&_sequenceManager1, this, 9142, &BF_GLOBALS._player, &_stuart, NULL);
+ } else {
+ SceneItem::display(910, 92, 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);
+ BF_GLOBALS._player.enableControl();
+ }
+ } else {
+ SceneItem::display(910, 94, 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);
+ BF_GLOBALS._player.enableControl();
+ }
+ break;
+ case 19:
+ BF_GLOBALS._deathReason = 14;
+ BF_GLOBALS._v51C44 = 1;
+ BF_GLOBALS._sceneManager.changeScene(666);
+ break;
+ case 20:
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 9100:
+ if (BF_GLOBALS._dayNumber == 5)
+ BF_GLOBALS._walkRegions.proc1(1);
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 9101:
+ if ((BF_GLOBALS._v4CEE0 == 0) && (BF_GLOBALS._v4CEC8 != 0) && (BF_GLOBALS._v4CECE[17] == 0) && (BF_INVENTORY.getObjectScene(INV_YELLOW_CORD) == 910) && (BF_INVENTORY.getObjectScene(INV_BLACK_CORD) == 910))
+ BF_GLOBALS.clearFlag(fGotPointsForSearchingDA);
+ else
+ BF_GLOBALS.setFlag(fGotPointsForSearchingDA);
+ BF_GLOBALS._v51C44 = 1;
+ BF_GLOBALS._sceneManager.changeScene(900);
+ break;
+ case 9102:
+ if ((BF_GLOBALS._v4CECE[13] < 4) && (_breakerBox._frame == 1))
+ _breakerBox.animate(ANIM_MODE_5, NULL);
+
+ BF_GLOBALS._player.enableControl();
+ _breakerBoxInset.postInit();
+ _breakerBoxInset.setVisage(910);
+ _breakerBoxInset.setStrip(3);
+ _breakerBoxInset.setFrame(1);
+ _breakerBoxInset.setPosition(Common::Point(160, 130));
+ _breakerBoxInset.fixPriority(250);
+ break;
+ case 9103:
+ BF_GLOBALS._player.enableControl();
+ _generatorInset.postInit();
+ _generatorInset.setVisage(910);
+ _generatorInset.setStrip(3);
+ _generatorInset.setFrame(2);
+ _generatorInset.setPosition(Common::Point(160, 130));
+ _generatorInset.fixPriority(250);
+ break;
+ case 9110:
+ if (!BF_GLOBALS.getFlag(fGotPointsForCrate)) {
+ T2_GLOBALS._uiElements.addScore(30);
+ BF_GLOBALS.setFlag(fGotPointsForCrate);
+ }
+ BF_INVENTORY.setObjectScene(INV_BLACK_CORD, 1);
+ _blackCord.setPosition(Common::Point(540, 100));
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 9111:
+ if ((BF_GLOBALS._bookmark == bEndDayThree) && (!BF_GLOBALS.getFlag(fGotPointsForGeneratorOff))) {
+ T2_GLOBALS._uiElements.addScore(30);
+ BF_GLOBALS.setFlag(fGotPointsForGeneratorOff);
+ }
+ BF_INVENTORY.setObjectScene(INV_BLACK_CORD, 910);
+ _blackCord.setStrip(6);
+ _blackCord.setFrame(1);
+ _blackCord.setPosition(Common::Point(114, 149));
+ _blackCord.fixPriority(249);
+ BF_GLOBALS._v4CECA = 0;
+ _blackCord._field90 = 0;
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 9112:
+ BF_GLOBALS._player._strip = 4;
+ BF_GLOBALS._player._frame = 1;
+ BF_INVENTORY.setObjectScene(INV_YELLOW_CORD, 1);
+ _yellowCord.setPosition(Common::Point(540, 100));
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 9113:
+ BF_GLOBALS._player._strip = 4;
+ BF_GLOBALS._player._frame = 1;
+ BF_INVENTORY.setObjectScene(INV_YELLOW_CORD, 910);
+ _yellowCord.setStrip(6);
+ _yellowCord.setFrame(2);
+ _yellowCord.setPosition(Common::Point(_fakeWall._position.x - 4, _fakeWall._position.y - 50));
+ _yellowCord.fixPriority(50);
+ BF_GLOBALS._v4CECC = 0;
+ _yellowCord._field90 = 0;
+ _yellowCord.show();
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 9114:
+ _fakeWall.hide();
+ if ((BF_GLOBALS._dayNumber == 5) && (BF_GLOBALS._v4CEE2 == 0)) {
+ BF_GLOBALS._player.disableControl();
+ _nico.postInit();
+ _nico.setDetails(910, 63, 64, 65, 5, &_item4);
+ BF_GLOBALS._v4CEE6 = 0;
+ _object7.postInit();
+ _action2.remove();
+ _sceneMode = 9116;
+ setAction(&_sequenceManager1, this, 9116, &_nico, NULL);
+ } else {
+ BF_GLOBALS._player.enableControl();
+ }
+ break;
+ case 9115:
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 9116:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 16;
+ _stripManager.start(9119, this);
+ break;
+ case 9118:
+ // No break on purpose
+ case 9137:
+ BF_GLOBALS._deathReason = 16;
+ BF_GLOBALS._v51C44 = 1;
+ BF_GLOBALS._sceneManager.changeScene(666);
+ break;
+ case 9119:
+ if (!BF_GLOBALS.getFlag(fGotPointsForCordOnForklift)) {
+ T2_GLOBALS._uiElements.addScore(30);
+ BF_GLOBALS.setFlag(fGotPointsForCordOnForklift);
+ }
+ BF_INVENTORY.setObjectScene(INV_YELLOW_CORD, 0);
+ BF_INVENTORY.setObjectScene(INV_HALF_YELLOW_CORD, 1);
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 9120:
+ BF_GLOBALS._walkRegions.proc1(7);
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 9121:
+ _item3.setDetails(7, 910, 96, 60, 61, 3);
+ BF_GLOBALS._v4CEE4 = 2;
+ if (BF_GLOBALS._v4CEE2 == 4) {
+ _sceneMode = 20;
+ _stripManager.start(9115, this);
+ } else {
+ BF_GLOBALS._player.enableControl();
+ }
+ break;
+ case 9123:
+ BF_GLOBALS.clearFlag(gunDrawn);
+ switch (_field2DDA - 1) {
+ case 0:
+ _sceneMode = 9102;
+ setAction(&_sequenceManager1, this, 9102, &BF_GLOBALS._player, NULL);
+ break;
+ case 1:
+ _sceneMode = 9103;
+ setAction(&_sequenceManager1, this, 9103, &BF_GLOBALS._player, NULL);
+ break;
+ case 2:
+ _sceneMode = 9143;
+ setAction(&_sequenceManager1, this, 9143, &BF_GLOBALS._player, NULL);
+ break;
+ case 3:
+ _sceneMode = 9110;
+ setAction(&_sequenceManager1, this, 9110, &BF_GLOBALS._player, &_blackCord, NULL);
+ break;
+ case 4:
+ _sceneMode = 9111;
+ setAction(&_sequenceManager1, this, 9111, &BF_GLOBALS._player, &_blackCord, NULL);
+ break;
+ case 5:
+ switch (BF_GLOBALS._v4CEE2 - 1) {
+ case 0:
+ _sceneMode = 9118;
+ setAction(&_sequenceManager1, this, 9118, &BF_GLOBALS._player, &_nico, NULL);
+ break;
+ case 1:
+ _sceneMode = 9148;
+ setAction(&_sequenceManager1, this, 9148, &BF_GLOBALS._player, &_nico, NULL);
+ break;
+ case 2:
+ // No break on purpose
+ case 3: {
+ _sceneMode = 17;
+ PlayerMover *mover = new PlayerMover();
+ Common::Point destPos(232, 138);
+ BF_GLOBALS._player.addMover(mover, &destPos, this);
+ }
+ default:
+ break;
+ }
+ break;
+ case 6: {
+ _sceneMode = 18;
+ PlayerMover *mover = new PlayerMover();
+ Common::Point destPos(248, 137);
+ BF_GLOBALS._player.addMover(mover, &destPos, this);
+ break;
+ }
+ case 7: {
+ _sceneMode = 9112;
+ PlayerMover *mover = new PlayerMover();
+ Common::Point destPos(285, 114);
+ BF_GLOBALS._player.addMover(mover, &destPos, this);
+ break;
+ }
+ case 8: {
+ _sceneMode = 9113;
+ PlayerMover *mover = new PlayerMover();
+ Common::Point destPos(285, 114);
+ BF_GLOBALS._player.addMover(mover, &destPos, this);
+ break;
+ }
+ case 9:
+ _sceneMode = 9119;
+ setAction(&_sequenceManager1, this, 9119, &BF_GLOBALS._player, &_nico, &_yellowCord, NULL);
+ break;
+ case 10:
+ _yellowCord.fixPriority(127);
+ if (_yellowCord._position.x != 267)
+ _yellowCord.hide();
+ _sceneMode = 9136;
+ setAction(&_sequenceManager1, this, 9136, &BF_GLOBALS._player, &_stuart, &_yellowCord, NULL);
+ BF_GLOBALS._v4CEE4 = 3;
+ break;
+ case 11:
+ _sceneMode = 9137;
+ setAction(&_sequenceManager1, this, 9137, &BF_GLOBALS._player, &_nico, NULL);
+ break;
+ default:
+ BF_GLOBALS._player.enableControl();
+ PlayerMover *mover = new PlayerMover();
+ BF_GLOBALS._player.addMover(mover, &_destPos, NULL);
+ break;
+ }
+ break;
+ case 9124:
+ BF_GLOBALS._player.enableControl();
+ BF_GLOBALS.setFlag(gunDrawn);
+ break;
+ case 9125:
+ BF_GLOBALS.setFlag(fBackupAt340);
+ BF_GLOBALS._v4CEE2 = 4;
+ _stuart.postInit();
+ _nico.setDetails(910, 72, 73, 74, 3, NULL);
+ _stuart.setDetails(910, 66, 67, 68, 5, &_nico);
+ BF_GLOBALS._v4CEE8 = 0;
+ _sceneMode = 9121;
+ setAction(&_sequenceManager1, this, 9121, &_stuart, NULL);
+ break;
+ case 9126:
+ _sceneMode = 19;
+ if (BF_GLOBALS._v4CEE4 == 0)
+ signal();
+ else
+ _stripManager.start(9115, this);
+ break;
+ case 9129:
+ // No break on purpose
+ case 9134:
+ BF_GLOBALS._deathReason = 17;
+ BF_GLOBALS._v51C44 = 1;
+ BF_GLOBALS._sceneManager.changeScene(666);
+ break;
+ case 9130:
+ _lyle.setAction(&_sequenceManager2, NULL, 9133, &_lyle, NULL);
+ BF_GLOBALS._v4CECE[14] = 3;
+ subE82BD();
+ BF_GLOBALS._walkRegions.proc1(15);
+ break;
+ case 9132:
+ BF_GLOBALS._player.enableControl();
+ BF_GLOBALS._v4CEE4 = 4;
+ BF_GLOBALS._deathReason = 13;
+ BF_GLOBALS._v51C44 = 1;
+ BF_GLOBALS._sceneManager.changeScene(666);
+ break;
+ case 9135:
+ BF_GLOBALS._deathReason = 15;
+ BF_GLOBALS._v51C44 = 1;
+ BF_GLOBALS._sceneManager.changeScene(666);
+ break;
+ case 9136:
+ if (!BF_GLOBALS.getFlag(fGotPointsForCuffingNico)) {
+ T2_GLOBALS._uiElements.addScore(30);
+ BF_GLOBALS.setFlag(fGotPointsForCuffingNico);
+ }
+ _lyle.setAction(&_sequenceManager2, NULL, 9131, &_lyle, NULL);
+ BF_GLOBALS._walkRegions.proc2(16);
+ if (BF_GLOBALS._v4CEE2 == 4)
+ BF_INVENTORY.setObjectScene(INV_YELLOW_CORD, 0);
+ else
+ BF_INVENTORY.setObjectScene(INV_HALF_YELLOW_CORD, 910);
+ _forbes.postInit();
+ _forbes.setDetails(910, 86, 87, 88, 4, &_item8);
+ _sceneMode = 9139;
+ setAction(&_sequenceManager1, this, 9139, &_forbes, &BF_GLOBALS._player, NULL);
+ break;
+ case 9139:
+ BF_GLOBALS._walkRegions.proc1(4);
+ _field2DE0 = 1;
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 9140:
+ _sceneMode = 14;
+ addFader((const byte *)&black, 2, this);
+ break;
+ case 9141:
+ BF_INVENTORY.setObjectScene(INV_22_SNUB, 1);
+ if (!BF_GLOBALS.getFlag(fGotPointsForCuffingDA)) {
+ T2_GLOBALS._uiElements.addScore(30);
+ BF_GLOBALS.setFlag(fGotPointsForCuffingDA);
+ }
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 9142:
+ BF_GLOBALS._player.enableControl();
+ if (!BF_GLOBALS.getFlag(fGotPointsForSearchingNico)) {
+ T2_GLOBALS._uiElements.addScore(30);
+ BF_GLOBALS.setFlag(fGotPointsForSearchingNico);
+ }
+ break;
+ case 9143:
+ if (BF_GLOBALS._v4CEE2 == 0) {
+ BF_GLOBALS._v51C44 = 1;
+ BF_GLOBALS._sceneManager.changeScene(920);
+ } else {
+ SceneItem::display(910, 89, 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);
+ _sceneMode = 9144;
+ setAction(&_sequenceManager1, this, 9144, &BF_GLOBALS._player, NULL);
+ }
+ break;
+ case 9144:
+ // No break on purpose
+ case 9146:
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 9148:
+ BF_GLOBALS._deathReason = 23;
+ BF_GLOBALS._v51C44 = 1;
+ BF_GLOBALS._sceneManager.changeScene(666);
+ break;
+ case 9149:
+ SceneItem::display(910, 74, 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);
+ BF_INVENTORY.setObjectScene(INV_22_SNUB, 1);
+ BF_GLOBALS._player.enableControl();
+ BF_GLOBALS._player.setVisage(129);
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
+ BF_GLOBALS._player._strip = 7;
+ BF_GLOBALS._player._frame = 1;
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene910::process(Event &event) {
+ SceneExt::process(event);
+ if ((!BF_GLOBALS._player._enabled) || (event.mousePos.y >= 167))
+ return;
+
+ if (!_focusObject) {
+ if (_item17._bounds.contains(event.mousePos)) {
+ GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_SW);
+ BF_GLOBALS._events.setCursor(surface);
+ } else if ((BF_GLOBALS._v4CEE0 == 0) || (BF_GLOBALS._v4CEE2 != 0)) {
+ CursorType cursorId = BF_GLOBALS._events.getCursor();
+ BF_GLOBALS._events.setCursor(cursorId);
+ } else if (!_item16._bounds.contains(event.mousePos)) {
+ CursorType cursorId = BF_GLOBALS._events.getCursor();
+ BF_GLOBALS._events.setCursor(cursorId);
+ } else {
+ GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_NW);
+ BF_GLOBALS._events.setCursor(surface);
+ }
+ }
+
+ if (event.eventType != EVENT_BUTTON_DOWN)
+ return;
+
+ switch (BF_GLOBALS._events.getCursor()) {
+ case INV_COLT45:
+ if (!BF_GLOBALS._player._bounds.contains(event.mousePos))
+ break;
+ if (BF_GLOBALS.getFlag(gunDrawn)) {
+ BF_GLOBALS._player.disableControl();
+ _destPos = BF_GLOBALS._player._position;
+ _sceneMode = 9123;
+ setAction(&_sequenceManager1, this, 9123, &BF_GLOBALS._player, NULL);
+ event.handled = true;
+ } else if (BF_GLOBALS._v4CEE2 <= 1) {
+ if (BF_GLOBALS.getFlag(fCanDrawGun)) {
+ BF_GLOBALS._player.addMover(NULL);
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 9124;
+ setAction(&_sequenceManager1, this, 9124, &BF_GLOBALS._player, NULL);
+ } else
+ SceneItem::display(1, 4, 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(910, 81, 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);
+ event.handled = true;
+ break;
+ case CURSOR_WALK:
+ if (BF_GLOBALS._v4CEE2 == 1) {
+ BF_GLOBALS._player.disableControl();
+ if (BF_GLOBALS._player._visage == 1911) {
+ BF_GLOBALS._player.disableControl();
+ _destPos = event.mousePos;
+ _field2DDA = 0;
+ _sceneMode = 9123;
+ setAction(&_sequenceManager1, this, 9123, &BF_GLOBALS._player, NULL);
+ } else {
+ _sceneMode = 9118;
+ setAction(&_sequenceManager1, this, 9118, &BF_GLOBALS._player, &_nico, NULL);
+ event.handled = true;
+ }
+ } else if (BF_GLOBALS._player._visage == 1911) {
+ BF_GLOBALS._player.disableControl();
+ _destPos = event.mousePos;
+ _field2DDA = 0;
+ _sceneMode = 9123;
+ setAction(&_sequenceManager1, this, 9123, &BF_GLOBALS._player, NULL);
+ }
+ default:
+ break;
+ }
+}
+
+void Scene910::dispatch() {
+ SceneExt::dispatch();
+ if (_action)
+ return;
+
+ if ((_sceneMode != 14) && (BF_GLOBALS._player._position.x < 30) && (BF_GLOBALS._player._position.y > 148)) {
+ BF_GLOBALS._player.disableControl();
+ if (BF_GLOBALS._dayNumber != 5) {
+ _sceneMode = 9101;
+ setAction(&_sequenceManager1, this, 9101, &BF_GLOBALS._player, NULL);
+ } else {
+ _sceneMode = 9146;
+ if (BF_GLOBALS._v4CEE0 == 0)
+ setAction(&_sequenceManager1, this, 9146, &BF_GLOBALS._player, NULL);
+ else
+ setAction(&_sequenceManager1, this, 9145, &BF_GLOBALS._player, NULL);
+ }
+ }
+
+ if ((BF_GLOBALS._player._position.x > 265) && (BF_GLOBALS._player._position.y < 102) && (BF_GLOBALS._v4CEE0 != 0) && (_sceneMode != 9143)) {
+ BF_GLOBALS._player.disableControl();
+ if (BF_GLOBALS.getFlag(gunDrawn)) {
+ _field2DDA = 3;
+ _sceneMode = 9123;
+ setAction(&_sequenceManager1, this, 9123, &BF_GLOBALS._player, NULL);
+ } else if (BF_GLOBALS._v4CEE2 == 0) {
+ _sceneMode = 9143;
+ setAction(&_sequenceManager1, this, 9143, &BF_GLOBALS._player, NULL);
+ } else {
+ SceneItem::display(910, 98, 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);
+ _sceneMode = 9144;
+ setAction(&_sequenceManager1, this, 9144, &BF_GLOBALS._player, NULL);
+ }
+ }
+
+ if ((BF_GLOBALS._dayNumber == 5) && (BF_GLOBALS._player._position.x > 250) && (_sceneMode != 9135) && (_sceneMode != 11) && (BF_GLOBALS._v4CEE0 != 0) && (BF_GLOBALS._v4CEE2 == 0)) {
+ BF_GLOBALS._player.disableControl();
+ _object7.remove();
+ _nico.remove();
+ _nico.postInit();
+ _nico.setDetails(910, 63, 64, 65, 5, &_item4);
+ _sceneMode = 9135;
+ setAction(&_sequenceManager1, this, 9135, &BF_GLOBALS._player, &_nico, NULL);
+ }
+
+}
+
+void Scene910::checkGun() {
+ if ((BF_GLOBALS._dayNumber == 5) && (BF_GLOBALS._v4CEE2 == 0) && (BF_GLOBALS._v4CEE0 != 0))
+ SceneItem::display(910, 70, 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
+ SceneExt::checkGun();
+}
+
+void Scene910::subE82BD() {
+ if (BF_GLOBALS._v4CEE0 != 0)
+ return;
+
+ if (! BF_GLOBALS.getFlag(fGotPointsForLightsOn)) {
+ T2_GLOBALS._uiElements.addScore(50);
+ BF_GLOBALS.setFlag(fGotPointsForLightsOn);
+ }
+ BF_GLOBALS._v4CEE0 = 1;
+ BF_GLOBALS._player.disableControl();
+ BF_GLOBALS._walkRegions.proc2(10);
+ _sceneMode = 9114;
+ _sound2.play(42);
+ if ((BF_GLOBALS._v4CECC == 0) && (BF_INVENTORY.getObjectScene(INV_YELLOW_CORD) == 910))
+ setAction(&_sequenceManager1, this, 9127, &_fakeWall, &_yellowCord, &_object5, NULL);
+ else
+ setAction(&_sequenceManager1, this, 9114, &_fakeWall, &_object5, NULL);
+}
+
+void Scene910::subE83E1() {
+ if (BF_GLOBALS._v4CEE0 != 0) {
+ _fakeWall.show();
+ if ((BF_GLOBALS._bookmark == 21) && (!BF_GLOBALS.getFlag(80))) {
+ T2_GLOBALS._uiElements.addScore(30);
+ BF_GLOBALS.setFlag(80);
+ }
+ BF_GLOBALS._v4CEE0 = 0;
+ BF_GLOBALS._walkRegions.proc1(10);
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 9115;
+ _sound2.play(42);
+ if ((BF_GLOBALS._v4CECC == 0) && (BF_INVENTORY.getObjectScene(57) == 910))
+ setAction(&_sequenceManager1, this, 9128, &_fakeWall, &_yellowCord, &_object5, NULL);
+ else
+ setAction(&_sequenceManager1, this, 9115, &_fakeWall, &_object5, NULL);
+ }
+
+ if ((BF_GLOBALS._dayNumber == 5) && (BF_GLOBALS._v4CEE2 == 0)) {
+ // _objectList.draw();
+ if (BF_GLOBALS._sceneObjects->contains(&_breakerBoxInset))
+ _breakerBoxInset.remove();
+ if (BF_GLOBALS._sceneObjects->contains(&_generatorInset))
+ _generatorInset.remove();
+
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 9120;
+ BF_GLOBALS._player.setAction(&_sequenceManager2, NULL, 9120, &BF_GLOBALS._player, &_lyle, NULL);
+ BF_GLOBALS._walkRegions.proc2(1);
+ }
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 920 - Inside Warehouse: Secret Room
+ *
+ *--------------------------------------------------------------------------*/
+// Crate
+bool Scene920::Item1::startAction(CursorType action, Event &event) {
+ Scene920 *scene = (Scene920 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ if ((BF_GLOBALS.getFlag(fCrateOpen)) && (BF_GLOBALS._player._visage == 921)) {
+ BF_GLOBALS._player.disableControl();
+ scene->_crateWindow.postInit();
+ scene->_sceneMode = 9204;
+ if (!BF_GLOBALS.getFlag(fGotPointsForBoots)) {
+ T2_GLOBALS._uiElements.addScore(30);
+ BF_GLOBALS.setFlag(fGotPointsForBoots);
+ }
+ scene->setAction(&scene->_sequenceManager1, scene, 9204, &BF_GLOBALS._player, &scene->_crateWindow, NULL);
+ return true;
+ } else
+ return NamedHotspot::startAction(action, event);
+ break;
+ case CURSOR_USE:
+ BF_GLOBALS._player.disableControl();
+ if (BF_GLOBALS.getFlag(fCrateOpen)) {
+ if (BF_GLOBALS._player._visage == 921) {
+ if ((BF_INVENTORY.getObjectScene(15) != 1) && (BF_GLOBALS.getFlag(fSawGuns))) {
+ scene->_sceneMode = 9207;
+ scene->setAction(&scene->_sequenceManager1, scene, 9207, &BF_GLOBALS._player, NULL);
+ } else {
+ scene->_sceneMode = 9203;
+ scene->setAction(&scene->_sequenceManager1, scene, 9203, &BF_GLOBALS._player, &scene->_crateTop, NULL);
+ BF_GLOBALS.clearFlag(fCrateOpen);
+ }
+ } else {
+ scene->_sceneMode = 9205;
+ scene->setAction(&scene->_sequenceManager1, scene, 9205, &BF_GLOBALS._player, NULL);
+ }
+ } else {
+ scene->_sceneMode = 9202;
+ scene->setAction(&scene->_sequenceManager1, scene, 9202, &BF_GLOBALS._player, &scene->_crateTop, NULL);
+ BF_GLOBALS.setFlag(fCrateOpen);
+ }
+ return true;
+ break;
+ default:
+ return NamedHotspot::startAction(action, event);
+ break;
+ }
+}
+
+// North Exit
+bool Scene920::Item8::startAction(CursorType action, Event &event) {
+ Scene920 *scene = (Scene920 *)BF_GLOBALS._sceneManager._scene;
+
+ BF_GLOBALS._player.disableControl();
+ if (BF_GLOBALS._player._visage == 921) {
+ scene->_sceneMode = 10;
+ scene->setAction(&scene->_sequenceManager1, scene, 9206, &BF_GLOBALS._player, NULL);
+ // TO BE CHECKED: Original code uses a variable to store the address of scene instance.
+ // As it's used later a coordinates to create a playermover, I don't understand.
+ // On the other hand, it's not really important as just after the hero leaves the scene
+ // so the variable is no longer used.
+ // scene->_oldCoord = &scene;
+ _field10 = 1;
+ } else {
+ scene->_sceneMode = 9201;
+ scene->setAction(&scene->_sequenceManager1, scene, 9201, &BF_GLOBALS._player, NULL);
+ }
+ return true;
+}
+
+void Scene920::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+ loadScene(920);
+
+ _stripManager.addSpeaker(&_gameTextSpeaker);
+ _stripManager.addSpeaker(&_jakeJacketSpeaker);
+ if (BF_GLOBALS._dayNumber == 0)
+ BF_GLOBALS._dayNumber = 4;
+ BF_GLOBALS._player.postInit();
+ if (BF_GLOBALS._v4CEC8 != 0) {
+ _doorway.postInit();
+ _doorway.setVisage(922);
+ _doorway.setStrip(2);
+ _doorway.fixPriority(1);
+ _doorway.setPosition(Common::Point(145, 82));
+ }
+
+ _crateTop.postInit();
+ _crateTop.setVisage(922);
+ if (BF_GLOBALS.getFlag(fCrateOpen)) {
+ _crateTop.setStrip(3);
+ _crateTop.setFrame(5);
+ }
+
+ _crateTop.setPosition(Common::Point(158, 107));
+ _crateTop.fixPriority(130);
+
+ _exitN.setDetails(Rect(116, 12, 165, 81), 920, -1, -1, -1, 1, NULL);
+ _item6.setDetails(6, 920, 15, 16, 17, 1);
+ _item4.setDetails(5, 920, 12, 13, 14, 1);
+ _item7.setDetails(4, 920, 9, 10, 11, 1);
+ _item5.setDetails(3, 920, 6, 7, 8, 1);
+ _crate.setDetails(2, 920, 3, 4, 5, 1);
+ _item3.setDetails(1, 920, 3, 4, 5, 1);
+ _item2.setDetails(Rect(0, 0, 320, 200), 920, 0, 1, 2, 1, NULL);
+
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 9200;
+ setAction(&_sequenceManager1, this, 9200, &BF_GLOBALS._player, NULL);
+}
+
+void Scene920::signal() {
+ switch (_sceneMode) {
+ case 10:
+ _sceneMode = 9201;
+ setAction(&_sequenceManager1, this, 9201, &BF_GLOBALS._player, NULL);
+ break;
+ case 9201:
+ if (BF_GLOBALS.getFlag(fCrateOpen))
+ BF_GLOBALS.setFlag(fLeftTraceIn920);
+ else
+ BF_GLOBALS.clearFlag(fLeftTraceIn920);
+ BF_GLOBALS._sceneManager.changeScene(910);
+ break;
+ case 9204:
+ _crateWindow.remove();
+ BF_GLOBALS.setFlag(fSawGuns);
+ BF_GLOBALS._player.enableControl();
+ break;
+ case 9206: {
+ BF_GLOBALS._player.enableControl();
+ PlayerMover *mover = new PlayerMover();
+ BF_GLOBALS._player.addMover(mover, &_oldCoord, NULL);
+ break;
+ }
+ case 9207:
+ BF_GLOBALS._player.enableControl();
+ T2_GLOBALS._uiElements.addScore(30);
+ BF_INVENTORY.setObjectScene(15, 1);
+ BF_GLOBALS._bookmark = bEndDayThree;
+ break;
+ default:
+ BF_GLOBALS._player.enableControl();
+ break;
+ }
+}
+void Scene920::process(Event &event) {
+ SceneExt::process(event);
+ if (BF_GLOBALS._player._enabled && !_focusObject && (event.mousePos.y < (UI_INTERFACE_Y - 1))) {
+ if (_exitN.contains(event.mousePos)) {
+ GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_N);
+ BF_GLOBALS._events.setCursor(surface);
+ } else {
+ CursorType cursorId = BF_GLOBALS._events.getCursor();
+ BF_GLOBALS._events.setCursor(cursorId);
+ }
+ }
+ if ((event.eventType == EVENT_BUTTON_DOWN) && (BF_GLOBALS._events.getCursor() == CURSOR_WALK) && (BF_GLOBALS._player._visage == 921)) {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 9206;
+ setAction(&_sequenceManager1, this, 9206, &BF_GLOBALS._player, NULL);
+ _oldCoord = event.mousePos;
+ event.handled = true;
+ }
+}
+
+void Scene920::dispatch() {
+ SceneExt::dispatch();
+ if ((_action == 0) && (BF_GLOBALS._player._position.y < 75)) {
+ BF_GLOBALS._player.disableControl();
+ BF_GLOBALS._sceneManager.changeScene(910);
+ }
+}
+
+void Scene920::synchronize(Serializer &s) {
+ SceneExt::synchronize(s);
+ s.syncAsSint16LE(_oldCoord.x);
+ s.syncAsSint16LE(_oldCoord.y);
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 930 - Inside the caravan
+ *
+ *--------------------------------------------------------------------------*/
+/* Objects */
+bool Scene930::Object1::startAction(CursorType action, Event &event) {
+// Small box
+ Scene930 *scene = (Scene930 *)BF_GLOBALS._sceneManager._scene;
+ bool result;
+
+ if ((action == CURSOR_USE) && (!BF_GLOBALS.getFlag(93))) {
+ scene->setAction(&scene->_action2);
+ result = true;
+ } else
+ result = NamedObject::startAction(action, event);
+
+ return result;
+}
+
+bool Scene930::Object2::startAction(CursorType action, Event &event) {
+ Scene930 *scene = (Scene930 *)BF_GLOBALS._sceneManager._scene;
+
+ if (action != CURSOR_USE)
+ return NamedObject::startAction(action, event);
+
+ NamedObject::startAction(action, event);
+ T2_GLOBALS._uiElements.addScore(30);
+ BF_INVENTORY.setObjectScene(54, 1);
+ BF_GLOBALS.setFlag(93);
+ remove();
+ scene->_box.remove();
+ return true;
+}
+
+bool Scene930::Object3::startAction(CursorType action, Event &event) {
+// Boots
+ Scene930 *scene = (Scene930 *)BF_GLOBALS._sceneManager._scene;
+
+ if (action != CURSOR_USE)
+ return NamedObject::startAction(action, event);
+
+ if (scene->_v141C == 0)
+ scene->setAction(&scene->_action1);
+ return true;
+}
+
+bool Scene930::Object4::startAction(CursorType action, Event &event) {
+// Boot window
+ Scene930 *scene = (Scene930 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_WALK:
+ return true;
+ case CURSOR_LOOK:
+ if (BF_GLOBALS._bookmark >= bFlashBackTwo) {
+ _lookLineNum = 94;
+ return NamedObject::startAction(action, event);
+ } else {
+ BF_GLOBALS._player.disableControl();
+ NamedObject::startAction(action, event);
+ BF_GLOBALS._bookmark = bFlashBackTwo;
+ scene->_sceneMode = 2;
+ scene->signal();
+ return true;
+ }
+ break;
+ case CURSOR_USE:
+ if (BF_GLOBALS._bookmark >= bFlashBackTwo) {
+ _lookLineNum = 71;
+ NamedObject::startAction(action, event);
+ scene->subF3D6F();
+ remove();
+ } else
+ NamedObject::startAction(action, event);
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ break;
+ }
+}
+
+void Scene930::Object4::remove() {
+ Scene930 *scene = (Scene930 *)BF_GLOBALS._sceneManager._scene;
+
+ if (scene->_v141C && !BF_GLOBALS._sceneObjects->contains(&scene->_object5)) {
+ scene->_boots.setAction(&scene->_action3);
+ }
+
+ FocusObject::remove();
+}
+
+bool Scene930::Object5::startAction(CursorType action, Event &event) {
+ Scene930 *scene = (Scene930 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_WALK:
+ return true;
+ case CURSOR_USE:
+ if (BF_INVENTORY.getObjectScene(55) == 1)
+ return NamedObject::startAction(action, event);
+ if (scene->_v141A == 0) {
+ animate(ANIM_MODE_4, getFrameCount() - 1, 1, NULL);
+ scene->_v141A = 1;
+ _lookLineNum = 76;
+ _useLineNum = 78;
+ } else {
+ T2_GLOBALS._uiElements.addScore(50);
+ BF_INVENTORY.setObjectScene(55, 1);
+ setFrame2(getFrameCount());
+ _lookLineNum = 92;
+ _useLineNum = -1;
+ }
+ return true;
+ default:
+ return NamedObject::startAction(action, event);
+ break;
+ }
+}
+
+void Scene930::Object5::remove() {
+ Scene930 *scene = (Scene930 *)BF_GLOBALS._sceneManager._scene;
+ scene->_boots.setAction(&scene->_action3);
+
+ FocusObject::remove();
+}
+
+/* Items */
+bool Scene930::Item1::startAction(CursorType action, Event &event) {
+ Scene930 *scene = (Scene930 *)BF_GLOBALS._sceneManager._scene;
+
+ if ((action == CURSOR_WALK) || (action == CURSOR_USE)) {
+ BF_GLOBALS._player.disableControl();
+ scene->_sceneMode = 1;
+ scene->setAction(&scene->_sequenceManager1, scene, 9301, &BF_GLOBALS._player, NULL);
+ return true;
+ } else
+ return NamedHotspot::startAction(action, event);
+}
+
+/* Actions */
+void Scene930::Action1::signal() {
+ Scene930 *scene = (Scene930 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ setDelay(10);
+ BF_GLOBALS._player.disableControl();
+ scene->_v141C = 1;
+ break;
+ case 1: {
+ Common::Point pt(50, 142);
+ PlayerMover *mover = new PlayerMover();
+ BF_GLOBALS._player.addMover(mover, &pt, this);
+ break;
+ }
+ case 2:
+ BF_GLOBALS._player.changeAngle(270);
+ setDelay(10);
+ break;
+ case 3:
+ BF_GLOBALS._player.changeZoom(110);
+ BF_GLOBALS._player.setVisage(931);
+ BF_GLOBALS._player.setStrip(1);
+ BF_GLOBALS._player.setFrame(1);
+ BF_GLOBALS._player.animate(ANIM_MODE_4, 4, 1, this);
+ break;
+ case 4:
+ scene->_boots.setFrame(2);
+ BF_GLOBALS._player.animate(ANIM_MODE_5, this);
+ break;
+ case 5:
+ scene->showBootWindow();
+ if (!BF_GLOBALS.getFlag(72)) {
+ T2_GLOBALS._uiElements.addScore(30);
+ BF_GLOBALS.setFlag(72);
+ }
+ SceneItem::display(0, 312);
+ BF_GLOBALS._player.enableControl();
+ remove();
+ break;
+ default:
+ break;
+ }
+}
+void Scene930::Action2::signal() {
+ Scene930 *scene = (Scene930 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ setDelay(10);
+ BF_GLOBALS._player.disableControl();
+ break;
+ case 1: {
+ Common::Point pt(176, 137);
+ PlayerMover *mover = new PlayerMover();
+ BF_GLOBALS._player.addMover(mover, &pt, this);
+ break;
+ }
+ case 2:
+ setDelay(10);
+ break;
+ case 3:
+ SceneItem::display(930, scene->_box._useLineNum, 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->subF3C07();
+ BF_GLOBALS._player.enableControl();
+ remove();
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene930::Action3::signal() {
+ Scene930 *scene = (Scene930 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ BF_GLOBALS._player.disableControl();
+ BF_GLOBALS._player.animate(ANIM_MODE_4, 4, -1, this);
+ break;
+ case 1:
+ scene->_boots.setFrame(1);
+ BF_GLOBALS._player.animate(ANIM_MODE_6, this);
+ break;
+ case 2:
+ BF_GLOBALS._player.changeZoom(-1);
+ BF_GLOBALS._player.setVisage(368);
+ BF_GLOBALS._player.setStrip(6);
+ BF_GLOBALS._player.setFrame(1);
+ scene->_v141C = 0;
+ remove();
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ BF_GLOBALS._player.enableControl();
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene930::postInit(SceneObjectList *OwnerList) {
+ PalettedScene::postInit();
+ loadScene(930);
+
+ BF_GLOBALS._sound1.changeSound(85);
+ if (BF_GLOBALS._dayNumber == 0)
+ BF_GLOBALS._dayNumber = 1;
+ setZoomPercents(83, 75, 140, 100);
+ _v141A = 0;
+ _v141C = 0;
+ if (BF_INVENTORY.getObjectScene(54) != 1) {
+ _box.postInit();
+ _box.setVisage(930);
+ _box.setStrip(1);
+ _box.setPosition(Common::Point(223, 21));
+ _box.setDetails(930, 66, 67, 68, 1, NULL);
+ }
+ _boots.postInit();
+ _boots.setVisage(930);
+ _boots.setStrip(2);
+ _boots.setPosition(Common::Point(9, 161));
+ _boots.fixPriority(120);
+ _boots.setDetails(930, 62, 63, 64, 1, NULL);
+
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.setVisage(368);
+ BF_GLOBALS._player.setObjectWrapper(new SceneObjectWrapper());
+ BF_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ BF_GLOBALS._player.setPosition(Common::Point(170, 92));
+ BF_GLOBALS._player.fixPriority(80);
+ BF_GLOBALS._player.changeZoom(-1);
+ BF_GLOBALS._player.enableControl();
+
+ _item1.setDetails( 1, 930, 0, 1, 2, 1);
+ _item2.setDetails( 2, 930, 4, 5, 6, 1);
+ _item3.setDetails( 3, 930, 8, 9, 10, 1);
+ _item4.setDetails( 4, 930, 12, 13, 14, 1);
+ _item5.setDetails( 5, 930, 16, 17, 18, 1);
+ _item6.setDetails( 20, 930, 20, 21, 22, 1);
+ _item7.setDetails( 6, 930, 23, 24, 25, 1);
+ _item8.setDetails( 7, 930, 26, 27, 28, 1);
+ _item21.setDetails( 8, 930, 89, 90, 91, 1);
+ _item9.setDetails( 9, 930, 29, 30, 31, 1);
+ _item20.setDetails(10, 930, 86, 87, 88, 1);
+ _item10.setDetails(11, 930, 33, 34, 35, 1);
+ _item11.setDetails(12, 930, 37, 38, 39, 1);
+ _item13.setDetails(13, 930, 40, 41, 42, 1);
+ _item14.setDetails(14, 930, 44, 45, 46, 1);
+ _item15.setDetails(15, 930, 48, 49, 50, 1);
+ _item16.setDetails(16, 930, 52, 53, 54, 1);
+ _item17.setDetails(17, 930, 56, 57, 58, 1);
+ _item12.setDetails(18, 930, 59, 60, 61, 1);
+ _item18.setDetails(19, 930, 80, 81, 82, 1);
+ _item19.setDetails(21, 930, 83, 84, 85, 1);
+
+ if (BF_GLOBALS._sceneManager._previousScene != 935) {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 0;
+ setAction(&_sequenceManager1, this, 9300, &BF_GLOBALS._player, NULL);
+ } else {
+ _v141C = 1;
+ BF_GLOBALS._player.animate(ANIM_MODE_NONE);
+ BF_GLOBALS._player.setPosition(Common::Point(50, 142));
+ BF_GLOBALS._player.setVisage(931);
+ BF_GLOBALS._player.setStrip(1);
+ BF_GLOBALS._player.setFrame(9);
+ BF_GLOBALS._player.fixPriority(-1);
+ BF_GLOBALS._player.enableControl();
+ BF_GLOBALS._player.changeZoom(110);
+ _boots.setFrame(2);
+ showBootWindow();
+ }
+
+}
+
+void Scene930::signal() {
+ static uint32 v50EC4 = 0;
+
+ switch (_sceneMode++) {
+ case 1:
+ BF_GLOBALS._sceneManager.changeScene(550);
+ break;
+ case 2:
+ _sceneMode = 3;
+ SceneItem::display(930, 95, 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);
+ signal();
+ break;
+ case 3:
+ _sceneMode = 4;
+ addFader((const byte *)&v50EC4, 5, this);
+ break;
+ case 4:
+ BF_GLOBALS._sceneManager.changeScene(935);
+ break;
+ default:
+ BF_GLOBALS._player.enableControl();
+ break;
+ }
+}
+
+void Scene930::dispatch() {
+ SceneExt::dispatch();
+}
+
+void Scene930::showBootWindow() {
+ _bootsWindow.postInit();
+ _bootsWindow.setVisage(930);
+ _bootsWindow.setStrip(3);
+ _bootsWindow.setFrame2(1);
+ _bootsWindow.fixPriority(260);
+ _bootsWindow.setPosition(Common::Point(147, 128));
+ _bootsWindow.setDetails(930, 69, 70, 93);
+}
+
+void Scene930::subF3C07() {
+ _object2.postInit();
+ _object2.setVisage(930);
+ _object2.setStrip(1);
+ _object2.setFrame2(2);
+ _object2.fixPriority(260);
+ _object2.setPosition(Common::Point(147, 128));
+ _object2.setDetails(930, 73, 74, 75);
+}
+
+void Scene930::subF3D6F() {
+ _object5.postInit();
+ _object5.setVisage(930);
+ _object5.setStrip(3);
+ if (BF_INVENTORY.getObjectScene(INV_SCHEDULE) == 1) {
+ _object5.setFrame(_object5.getFrameCount());
+ _object5.setDetails(930, 92, 77, -1);
+ } else if (_v141A == 0) {
+ _object5.setFrame(2);
+ _object5.setDetails(930, 93, 77, -1);
+ } else {
+ _object5.setFrame(_object5.getFrameCount());
+ _object5.setDetails(930, 76, 77, 78);
+ }
+
+ _object5.fixPriority(260);
+ _object5.setPosition(Common::Point(147, 128));
+}
+
+void Scene930::synchronize(Serializer &s) {
+ SceneExt::synchronize(s);
+ s.syncAsSint16LE(_v141A);
+ s.syncAsSint16LE(_v141C);
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 935 - Hidden in the wardrobe
+ *
+ *--------------------------------------------------------------------------*/
+
+void Scene935::Action1::signal() {
+ Scene935 *scene = (Scene935 *)BF_GLOBALS._sceneManager._scene;
+ static uint32 v50ECC = 0, v50EEA = 0, v50EEE = 0, v50F26 = 0, v50F2A = 0, v50F62 = 0, v50F66 = 0, v50F6A = 0;
+
+ switch (_actionIndex++) {
+ case 0:
+ scene->addFader((const byte *)&v50ECC, 100, this);
+ break;
+ case 1:
+ scene->_visualSpeaker.setText("Jake! Hide in the closet!");
+ for (int i = 1; i < 21; i++)
+ scene->transition((const byte *)&v50EEA, 5 * i, 935, NULL, 0, 255, 249, 255, 1);
+ setDelay(3);
+ break;
+ case 2:
+ scene->addFader((const byte *)&v50EEE, 5, this);
+ break;
+ case 3:
+ scene->_visualSpeaker.removeText();
+ scene->_visualSpeaker._textPos.y = scene->_sceneBounds.top + 80;
+ scene->_visualSpeaker._color1 = 252;
+ scene->_visualSpeaker._color1 = 251;
+ scene->_visualSpeaker.setText("Jake! Hide in the closet!");
+ setDelay(3);
+ break;
+ case 4:
+ scene->_visualSpeaker.setText("Jake! Hide in the closet!");
+ for (int i = 1; i < 21; i++)
+ scene->transition((const byte *)&v50F26, 5 * i, 935, NULL, 0, 255, 249, 255, 1);
+ setDelay(3);
+ break;
+ case 5:
+ scene->addFader((const byte *)&v50F2A, 5, this);
+ break;
+ case 6:
+ scene->_visualSpeaker.removeText();
+ scene->_visualSpeaker._textPos.y = scene->_sceneBounds.top + 150;
+ scene->_visualSpeaker._color1 = 250;
+ scene->_visualSpeaker._color1 = 249;
+ scene->_visualSpeaker.setText("Jake! Hide in the closet!");
+ setDelay(3);
+ break;
+ case 7:
+ scene->_visualSpeaker.setText("Jake! Hide in the closet!");
+ for (int i = 1; i < 21; i++)
+ scene->transition((const byte *)&v50F62, 5 * i, 935, NULL, 0, 255, 249, 255, 1);
+ setDelay(3);
+ break;
+ case 8:
+ scene->addFader((const byte *)&v50F66, 5, this);
+ break;
+ case 9:
+ scene->_visualSpeaker.removeText();
+ setDelay(3);
+ break;
+ case 10:
+ scene->_sceneMode = 1;
+ scene->add2Faders((const byte *)&v50F6A, 5, 935, scene);
+ remove();
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene935::postInit(SceneObjectList *OwnerList) {
+ PalettedScene::postInit();
+ loadScene(935);
+
+ BF_GLOBALS._interfaceY = 200;
+ BF_GLOBALS._player.disableControl();
+ _visualSpeaker._textMode = ALIGN_CENTER;
+ _visualSpeaker._hideObjects = false;
+ _visualSpeaker._color1 = 254;
+ _visualSpeaker._color2 = 253;
+ _visualSpeaker._textPos.y = _sceneBounds.top + 18;
+ _visualSpeaker._textWidth = 300;
+ _visualSpeaker._textPos.x = _sceneBounds.left + 10;
+ setAction(&_action1);
+ BF_GLOBALS._sound1.fadeSound(67);
+}
+
+void Scene935::remove() {
+ BF_GLOBALS._sound1.fadeOut2(NULL);
+ BF_GLOBALS._scrollFollower = &BF_GLOBALS._player;
+ PalettedScene::remove();
+}
+
+void Scene935::signal() {
+ static uint32 v50EC8 = 0;
+
+ switch (_sceneMode) {
+ case 1:
+ _object1.postInit();
+ if (BF_GLOBALS._sceneManager._previousScene == 810) {
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 9352;
+ setAction(&_sequenceManager, this, 9350, &_object1, NULL);
+ } else if (BF_GLOBALS._sceneManager._previousScene == 930) {
+ _object3.postInit();
+ _object3.setVisage(938);
+ _object3.fixPriority(255);
+ _object3.setPosition(Common::Point(260, -4));
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 0;
+ setAction(&_sequenceManager, this, 9354, &_object1, &_object3, NULL);
+ } else {
+ _sceneMode = 9351;
+ setAction(&_sequenceManager, this, 9350, &_object1, NULL);
+ }
+ break;
+ case 2:
+ BF_GLOBALS._sound1.play(68);
+ _sceneMode = 0;
+ addFader((const byte *)&v50EC8, 5, this);
+ break;
+ case 3:
+ _sceneMode = 2;
+ _object1.animate(ANIM_MODE_6, NULL);
+ signal();
+ break;
+ case 9351:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 2;
+ setAction(&_sequenceManager, this, 9351, &_object1, NULL);
+ if (BF_GLOBALS._sceneManager._previousScene == 910)
+ _sceneMode = 9353;
+ break;
+ case 9352:
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 2;
+ setAction(&_sequenceManager, this, 9352, &_object1, NULL);
+ break;
+ case 9353:
+ _object2.postInit();
+ BF_GLOBALS._player.disableControl();
+ _sceneMode = 3;
+ setAction(&_sequenceManager, this, 9353, &_object1, &_object2, NULL);
+ break;
+ default:
+ BF_GLOBALS._sceneManager.changeScene(BF_GLOBALS._sceneManager._previousScene);
+ break;
+ }
+}
+
+void Scene935::dispatch() {
+ SceneExt::dispatch();
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 940 - Jail ending animation
+ *
+ *--------------------------------------------------------------------------*/
+
+bool Scene940::Item1::startAction(CursorType action, Event &event) {
+ return true;
+}
+
+void Scene940::Action1::signal() {
+ Scene940 *scene = (Scene940 *)BF_GLOBALS._sceneManager._scene;
+
+ switch (_actionIndex) {
+ case 0:
+ _actionIndex = 2;
+ setDelay(60);
+ break;
+ case 2:
+ _actionIndex = 941;
+ if (BF_GLOBALS.getFlag(fBackupAt340)) {
+ // WORKAROUND: If the player shot Nico, the alternate text was previously going off-screen
+ scene->_gameTextSpeaker1._offsetPos.y -= 10;
+ scene->_stripManager.start(9408, this);
+ } else
+ scene->_stripManager.start(9400, this);
+ break;
+ case 5:
+ setActionIndex(948);
+ setDelay(90);
+ scene->_object2.remove();
+ scene->_object3.remove();
+ scene->_object4.remove();
+ scene->_object5.remove();
+ scene->_object6.remove();
+ scene->_object7.remove();
+ scene->_object8.remove();
+ scene->_object9.remove();
+ scene->_object10.remove();
+ break;
+ case 99:
+ BF_GLOBALS._sound1.play(117);
+ BF_GLOBALS._sceneManager.changeScene(100);
+ remove();
+ break;
+ case 941:
+ scene->_gameTextSpeaker1._textWidth = 312;
+ _actionIndex = 944;
+ setAction(&scene->_sequenceManager1, this, 941, &BF_GLOBALS._player, NULL);
+ break;
+ case 942:
+ _actionIndex = 955;
+ setAction(&scene->_sequenceManager1, this, 942, &scene->_object2, NULL);
+ break;
+ case 943:
+ _actionIndex = 946;
+ setAction(&scene->_sequenceManager1, this, 943, &scene->_object3, NULL);
+ break;
+ case 944:
+ scene->_object4.setAction(&scene->_sequenceManager2, NULL, 944, &scene->_object4, &scene->_object5);
+ _actionIndex = 945;
+ setDelay(3);
+ break;
+ case 945:
+ scene->_object6.setAction(&scene->_sequenceManager3, NULL, 945, &scene->_object6, &scene->_object10, NULL);
+ _actionIndex = 943;
+ setDelay(3);
+ break;
+ case 946:
+ _actionIndex = 942;
+ setAction(&scene->_sequenceManager1, this, 946, &scene->_object7, &scene->_object8, NULL);
+ break;
+ case 947:
+ _actionIndex = 5;
+ setAction(&scene->_sequenceManager1, this, 947, &scene->_object1, &scene->_object11, &scene->_object12, &scene->_object13, NULL);
+ break;
+ case 948:
+ scene->_gameTextSpeaker1._textPos.x = scene->_sceneBounds.left + 10;
+ scene->_object17.postInit();
+ scene->_object17.hide();
+ scene->_object18.postInit();
+ scene->_object18.hide();
+ _actionIndex = 960;
+ setAction(&scene->_sequenceManager1, this, 948, &scene->_object11, &scene->_object12, &scene->_object13, &scene->_object1, &scene->_object14, NULL);
+ break;
+ case 949:
+ _actionIndex = 950;
+ setAction(&scene->_sequenceManager1, this, 949, &scene->_object17, &scene->_object18, &scene->_object1, &scene->_object12, &scene->_object13, &scene->_object15, NULL);
+ scene->_object11.setAction(&scene->_sequenceManager2, NULL, 952, &scene->_object11, NULL);
+ break;
+ case 950:
+ _actionIndex = 951;
+ setAction(&scene->_sequenceManager1, this, 950, &scene->_object17, &scene->_object18, &scene->_object1, &scene->_object13, &scene->_object16, NULL);
+ scene->_object12.setAction(&scene->_sequenceManager3, NULL, 953, &scene->_object12, NULL);
+ break;
+ case 951:
+ scene->_object13.setAction(&scene->_sequenceManager4, NULL, 954, &scene->_object13, NULL);
+ scene->_object11.setAction(&scene->_sequenceManager2, NULL, 952, &scene->_object11, NULL);
+ scene->_stripManager.start(9407, this);
+ setActionIndex(99);
+ break;
+ case 955:
+ scene->_object2.remove();
+ _actionIndex = 956;
+ setAction(&scene->_sequenceManager1, this, 955, &BF_GLOBALS._player, NULL);
+ break;
+ case 956:
+ _actionIndex = 947;
+ setAction(&scene->_sequenceManager1, this, 956, &scene->_object3, NULL);
+ scene->_object11.postInit();
+ scene->_object11.setVisage(943);
+ scene->_object11.setStrip(1);
+ scene->_object11.setPosition(Common::Point(-8, 178));
+ scene->_object12.postInit();
+ scene->_object12.setVisage(942);
+ scene->_object12.setStrip(1);
+ scene->_object12.setPosition(Common::Point(-41, 181));
+ scene->_object13.postInit();
+ scene->_object13.setVisage(944);
+ scene->_object13.setStrip(2);
+ scene->_object13.setPosition(Common::Point(-74, 179));
+ scene->_object1.postInit();
+ scene->_object1.setVisage(948);
+ scene->_object1.setStrip(2);
+ scene->_object1.setPosition(Common::Point(-107, 180));
+ scene->_object14.postInit();
+ scene->_object14.setVisage(949);
+ scene->_object14.setStrip(1);
+ scene->_object14.setFrame(3);
+ scene->_object14.setPosition(Common::Point(234, 75));
+ scene->_object15.postInit();
+ scene->_object15.setVisage(949);
+ scene->_object15.setStrip(1);
+ scene->_object15.setFrame(2);
+ scene->_object15.setPosition(Common::Point(144, 76));
+ scene->_object16.postInit();
+ scene->_object16.setVisage(949);
+ scene->_object16.setStrip(1);
+ scene->_object16.setFrame(1);
+ scene->_object16.setPosition(Common::Point(45, 77));
+ break;
+ case 960:
+ _actionIndex = 949;
+ setAction(&scene->_sequenceManager1, this, 960, &scene->_object11, &scene->_object17, &scene->_object18, &scene->_object1, &scene->_object14, NULL);
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene940::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+ loadScene(940);
+
+ BF_GLOBALS._sound1.play(115);
+ BF_GLOBALS._dayNumber = 6;
+ BF_GLOBALS._interfaceY = 200;
+ T2_GLOBALS._uiElements._active = false;
+
+ _gameTextSpeaker2._speakerName = "SENTTEXT";
+ _gameTextSpeaker2._color1 = 104;
+ _gameTextSpeaker2._textMode = ALIGN_CENTER;
+ _stripManager.addSpeaker(&_gameTextSpeaker1);
+ _stripManager.addSpeaker(&_gameTextSpeaker2);
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.setVisage(941);
+ BF_GLOBALS._player.setStrip(1);
+ BF_GLOBALS._player.setFrame(7);
+ BF_GLOBALS._player.setPosition(Common::Point(563, 80));
+ BF_GLOBALS._player.disableControl();
+ _object3.postInit();
+ _object3.setVisage(944);
+ _object3.setStrip(3);
+ _object3.setFrame(3);
+ _object3.setPosition(Common::Point(626, 78));
+ _object3.fixPriority(0);
+ _object2.postInit();
+ _object2.setVisage(944);
+ _object2.setStrip(3);
+ _object2.setFrame(6);
+ _object2.setPosition(Common::Point(378, 136));
+ _object2.setZoom(80);
+ _object2.fixPriority(0);
+ _object4.postInit();
+ _object4.setVisage(945);
+ _object4.setStrip(6);
+ _object4.setPosition(Common::Point(361, 70));
+ _object4.setZoom(80);
+ _object4.fixPriority(0);
+ _object5.postInit();
+ _object5.setVisage(945);
+ _object5.setStrip(7);
+ _object5.setPosition(Common::Point(366, 39));
+ _object5.setZoom(80);
+ _object5.fixPriority(3);
+ _object6.postInit();
+ _object6.setVisage(945);
+ _object6.setStrip(4);
+ _object6.setPosition(Common::Point(432, 70));
+ _object6.setZoom(65);
+ _object6.fixPriority(0);
+ _object7.postInit();
+ _object7.setVisage(945);
+ _object7.setStrip(1);
+ _object7.setPosition(Common::Point(423, 131));
+ _object7.setZoom(65);
+ _object7.fixPriority(0);
+ _object8.postInit();
+ _object8.setVisage(945);
+ _object8.setStrip(2);
+ _object8.setPosition(Common::Point(420, 99));
+ _object8.setZoom(65);
+ _object8.fixPriority(3);
+ _object9.postInit();
+ _object9.setVisage(945);
+ _object9.setStrip(3);
+ _object9.setPosition(Common::Point(458, 65));
+ _object9.setZoom(55);
+ _object9.fixPriority(0);
+ _object10.postInit();
+ _object10.setVisage(945);
+ _object10.setStrip(3);
+ _object10.setFrame(2);
+ _object10.setPosition(Common::Point(465, 118));
+ _object10.setZoom(55);
+ _object10.fixPriority(0);
+ _item1.setBounds(Rect(0, 0, 320, 200));
+ BF_GLOBALS._sceneItems.push_back(&_item1);
+ _sceneBounds.moveTo(320, 0);
+ _gameTextSpeaker1._textPos.x = _sceneBounds.left + 10;
+ _gameTextSpeaker1._color1 = 16;
+ _gameTextSpeaker1._textWidth = 265;
+ setAction(&_action1);
+}
+
+void Scene940::remove() {
+ // clearScren();
+ BF_GLOBALS._scrollFollower = &BF_GLOBALS._player;
+ SceneExt::remove();
+ T2_GLOBALS._uiElements._active = true;
+}
+
+} // End of namespace BlueForce
+} // End of namespace TsAGE
diff --git a/engines/tsage/blue_force/blueforce_scenes9.h b/engines/tsage/blue_force/blueforce_scenes9.h
new file mode 100644
index 0000000000..b0761713b1
--- /dev/null
+++ b/engines/tsage/blue_force/blueforce_scenes9.h
@@ -0,0 +1,498 @@
+/* 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.
+ *
+ */
+
+#ifndef TSAGE_BLUEFORCE_SCENES9_H
+#define TSAGE_BLUEFORCE_SCENES9_H
+
+#include "common/scummsys.h"
+#include "tsage/blue_force/blueforce_logic.h"
+#include "tsage/blue_force/blueforce_speakers.h"
+#include "tsage/converse.h"
+#include "tsage/events.h"
+#include "tsage/core.h"
+#include "tsage/scenes.h"
+#include "tsage/globals.h"
+#include "tsage/sound.h"
+
+namespace TsAGE {
+
+namespace BlueForce {
+
+using namespace TsAGE;
+
+class Scene900: public PalettedScene {
+ /* Items */
+ class Item1: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Item4: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ /* Objects */
+ class Gate: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Door: public NamedObjectExt {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Dog: public NamedObjectExt {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Lyle: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Body: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ /* Actions */
+ class Action1 : public Action {
+ public:
+ virtual void signal();
+ };
+ class Action2 : public Action {
+ public:
+ virtual void signal();
+ };
+ class Action3 : public Action {
+ public:
+ virtual void signal();
+ };
+ class Action4 : public Action {
+ public:
+ virtual void signal();
+ };
+
+public:
+ SequenceManager _sequenceManager1, _sequenceManager2;
+ SpeakerGameText _gameTextSpeaker;
+ SpeakerJakeJacket _jakeJacketSpeaker;
+ SpeakerLyleHat _lyleHatSpeaker;
+ Item1 _item1;
+ Gate _gate;
+ Door _door;
+ Dog _dog;
+ NamedHotspot _item2;
+ NamedHotspot _item3;
+ NamedObject _object4;
+ NamedObject _object5;
+ Lyle _lyle;
+ Body _body;
+ Item4 _item4;
+ ASoundExt _sound1;
+ Action1 _action1;
+ Action2 _action2;
+ Action3 _action3;
+ Action4 _action4;
+ int _field1974;
+ int _field1976;
+
+ Scene900();
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+ virtual void process(Event &event);
+ virtual void dispatch();
+ virtual void synchronize(Serializer &s);
+};
+
+class Scene910: public PalettedScene {
+ /* Actions */
+ class Action1 : public Action {
+ public:
+ virtual void signal();
+ };
+ class Action2 : public Action {
+ public:
+ virtual void signal();
+ };
+ /* Objects */
+ class Lyle: public NamedObject {
+ public:
+ int _field90;
+ virtual void synchronize(Serializer &s);
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Nico: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Stuart: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Forbes: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class PowerCord: public NamedObject {
+ public:
+ int _field90, _field92;
+
+ virtual void synchronize(Serializer &s);
+ virtual bool startAction(CursorType action, Event &event);
+ void init(int val);
+
+ };
+ class BreakerBox: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class FakeWall: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ class Object13: public NamedObject {
+ protected:
+ int _field90, _field92;
+ public:
+ void setupBreaker(int x, int y, int mode, int8 frameNumber);
+ virtual void synchronize(Serializer &s);
+ virtual bool startAction(CursorType action, Event &event);
+ virtual void remove();
+ };
+
+ class BlackPlug: public Object13 {
+ public:
+ void init(int x, int y, int arg8, int8 argA);
+ virtual bool startAction(CursorType action, Event &event);
+ virtual void remove();
+ };
+
+ class Object25: public NamedObject {
+ int _field90, _field92;
+ public:
+ void subEBBDC(int x, int y, int arg8, int argA);
+ virtual void synchronize(Serializer &s);
+ virtual bool startAction(CursorType action, Event &event);
+ virtual void remove();
+ };
+
+ class BreakerBoxInset: public FocusObject {
+ Object13 _object13, _object14, _object15, _object16, _object17, _object18;
+ Object13 _object19, _object20, _object21, _object22, _object23, _object24;
+ Object25 _object25, _object26;
+ public:
+ Object13 _object27;
+ BlackPlug _object28;
+ virtual Common::String getClassName() { return "Scene910_object12"; }
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void remove();
+ };
+
+ class PowerButton: public NamedObject {
+ public:
+ NamedObject _object32;
+ virtual void remove();
+ virtual bool startAction(CursorType action, Event &event);
+ void init(int frame);
+ };
+
+ class GeneratorInset: public FocusObject {
+ BlackPlug _blackPlug;
+ PowerButton _powerButton;
+ public:
+ virtual Common::String getClassName() { return "Scene910_object29"; }
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void remove();
+ };
+
+ /* Items */
+ class Generator: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Item2: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Item3: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Item9: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Item15: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Item16: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Item17: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ int _field2DDA, _field2DD8, _field2DE0, _field2DE2, _field2DE4;
+ Common::Point _destPos;
+public:
+ SequenceManager _sequenceManager1, _sequenceManager2;
+ SpeakerGameText _gameTextSpeaker;
+ SpeakerJakeJacket _jakeJacketSpeaker;
+ SpeakerLyleHat _lyleHatSpeaker;
+ SpeakerFBI _fbiSpeaker;
+ SpeakerNico _nicoSpeaker;
+ SpeakerDA _daSpeaker;
+ Action1 _action1;
+ Action2 _action2;
+ Timer _timer1;
+ Lyle _lyle;
+ Nico _nico;
+ Stuart _stuart;
+ Forbes _forbes;
+ NamedObject _object5, _vent, _object7;
+ PowerCord _blackCord, _yellowCord;
+ BreakerBox _breakerBox;
+ FakeWall _fakeWall;
+ BreakerBoxInset _breakerBoxInset;
+ GeneratorInset _generatorInset;
+ NamedObject _object30, _object31, _object32;
+ Generator _generator;
+ Item2 _item2;
+ Item3 _item3;
+ NamedHotspot _item4, _item5, _item6, _item7, _item8;
+ Item9 _item9, _item10;
+ NamedHotspot _item11, _backWall, _item13, _item14;
+ Item15 _item15;
+ Item16 _item16;
+ Item17 _item17;
+ ASoundExt _sound1, _sound2;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void synchronize(Serializer &s);
+ virtual void remove();
+ virtual void signal();
+ virtual void process(Event &event);
+ virtual void dispatch();
+ virtual void checkGun();
+ void subE82BD();
+ void subE83E1();
+};
+
+class Scene920: public SceneExt {
+ /* Items */
+ class Item1: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Item8: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+public:
+ SequenceManager _sequenceManager1;
+ SpeakerGameText _gameTextSpeaker;
+ SpeakerJakeJacket _jakeJacketSpeaker;
+
+ Item1 _crate;
+ NamedHotspot _item2;
+ NamedHotspot _item3;
+ NamedHotspot _item4;
+ NamedHotspot _item5;
+ NamedHotspot _item6;
+ NamedHotspot _item7;
+ NamedObject _crateTop;
+ NamedObject _crateWindow;
+ NamedObject _doorway;
+ Item8 _exitN;
+ Common::Point _oldCoord;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+ virtual void process(Event &event);
+ virtual void dispatch();
+ virtual void synchronize(Serializer &s);
+};
+
+class Scene930: public PalettedScene {
+ /* Objects */
+ class Object1: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Object2: public FocusObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Object3: public NamedObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Object4: public FocusObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ virtual void remove();
+ };
+ class Object5: public FocusObject {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ virtual void remove();
+ };
+ /* Items */
+ class Item1: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ /* Actions */
+ class Action1 : public Action {
+ public:
+ virtual void signal();
+ };
+ class Action2 : public Action {
+ public:
+ virtual void signal();
+ };
+ class Action3 : public Action {
+ public:
+ virtual void signal();
+ };
+
+ void showBootWindow();
+ void subF3C07();
+ void subF3D6F();
+public:
+ SequenceManager _sequenceManager1;
+ Object1 _box;
+ Object2 _object2;
+ Object3 _boots;
+ Object4 _bootsWindow;
+ Object5 _object5;
+
+ Item1 _item1;
+ NamedHotspot _item2;
+ NamedHotspot _item3;
+ NamedHotspot _item4;
+ NamedHotspot _item5;
+ NamedHotspot _item6;
+ NamedHotspot _item7;
+ NamedHotspot _item8;
+ NamedHotspot _item9;
+ NamedHotspot _item10;
+ NamedHotspot _item11;
+ NamedHotspot _item12;
+ NamedHotspot _item13;
+ NamedHotspot _item14;
+ NamedHotspot _item15;
+ NamedHotspot _item16;
+ NamedHotspot _item17;
+ NamedHotspot _item18;
+ NamedHotspot _item19;
+ NamedHotspot _item20;
+ NamedHotspot _item21;
+
+ Action1 _action1;
+ Action2 _action2;
+ Action3 _action3;
+
+ SpeakerGameText gameTextSpeaker;
+
+ int _v141A;
+ int _v141C;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+ virtual void dispatch();
+ virtual void synchronize(Serializer &s);
+};
+
+class Scene935: public PalettedScene {
+ /* Actions */
+ class Action1 : public Action {
+ public:
+ virtual void signal();
+ };
+
+public:
+ SequenceManager _sequenceManager;
+ NamedObject _object1;
+ NamedObject _object2;
+ NamedObject _object3;
+ Action1 _action1;
+ VisualSpeaker _visualSpeaker;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void remove();
+ virtual void signal();
+ virtual void dispatch();
+};
+
+class Scene940: public SceneExt {
+ /* Items */
+ class Item1: public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ /* Actions */
+ class Action1 : public Action {
+ public:
+ virtual void signal();
+ };
+
+public:
+ SequenceManager _sequenceManager1;
+ SequenceManager _sequenceManager2;
+ SequenceManager _sequenceManager3;
+ SequenceManager _sequenceManager4;
+ NamedObject _object1;
+ NamedObject _object2;
+ NamedObject _object3;
+ NamedObject _object4;
+ NamedObject _object5;
+ NamedObject _object6;
+ NamedObject _object7;
+ NamedObject _object8;
+ NamedObject _object9;
+ NamedObject _object10;
+ NamedObject _object11;
+ NamedObject _object12;
+ NamedObject _object13;
+ NamedObject _object14;
+ NamedObject _object15;
+ NamedObject _object16;
+ NamedObject _object17;
+ NamedObject _object18;
+ Item1 _item1;
+ Action1 _action1;
+
+ SpeakerGameText _gameTextSpeaker1;
+ SpeakerGameText _gameTextSpeaker2;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void remove();
+};
+
+} // End of namespace BlueForce
+} // End of namespace TsAGE
+
+#endif
diff --git a/engines/tsage/blue_force/blueforce_speakers.cpp b/engines/tsage/blue_force/blueforce_speakers.cpp
new file mode 100644
index 0000000000..8af18b43b8
--- /dev/null
+++ b/engines/tsage/blue_force/blueforce_speakers.cpp
@@ -0,0 +1,1023 @@
+/* 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_speakers.h"
+#include "tsage/scenes.h"
+#include "tsage/tsage.h"
+#include "tsage/graphics.h"
+#include "tsage/staticres.h"
+
+namespace TsAGE {
+
+namespace BlueForce {
+
+VisualSpeaker::VisualSpeaker(): Speaker() {
+ _textWidth = 312;
+ _color1 = 19;
+ _hideObjects = false;
+ _removeObject1 = false;
+ _removeObject2 = false;
+ _xp = 160;
+ _fontNumber = 4;
+ _color2 = 82;
+ _offsetPos = Common::Point(4, 170);
+ _numFrames = 0;
+}
+
+void VisualSpeaker::remove() {
+ if (_removeObject2)
+ _object2.remove();
+ if (_removeObject1)
+ _object1.remove();
+
+ Speaker::remove();
+}
+
+void VisualSpeaker::synchronize(Serializer &s) {
+ Speaker::synchronize(s);
+
+ s.syncAsByte(_removeObject1);
+ s.syncAsByte(_removeObject2);
+ s.syncAsSint16LE(_xp);
+ s.syncAsSint16LE(_numFrames);
+ s.syncAsSint16LE(_offsetPos.x);
+ s.syncAsSint16LE(_offsetPos.y);
+}
+
+void VisualSpeaker::proc12(Action *action) {
+ Speaker::proc12(action);
+ _textPos = Common::Point(_offsetPos.x + BF_GLOBALS._sceneManager._scene->_sceneBounds.left,
+ _offsetPos.y + BF_GLOBALS._sceneManager._scene->_sceneBounds.top);
+ _numFrames = 0;
+}
+
+void VisualSpeaker::setText(const Common::String &msg) {
+ _objectList.draw();
+ BF_GLOBALS._sceneObjects->draw();
+
+ _sceneText._color1 = _color1;
+ _sceneText._color2 = _color2;
+ _sceneText._color3 = _color3;
+ _sceneText._width = _textWidth;
+ _sceneText._fontNumber = _fontNumber;
+ _sceneText._textMode = _textMode;
+ _sceneText.setup(msg);
+
+ // Get the string bounds
+ GfxFont f;
+ f.setFontNumber(_fontNumber);
+ Rect bounds;
+ f.getStringBounds(msg.c_str(), bounds, _textWidth);
+
+ // Set the position for the text
+ switch (_textMode) {
+ case ALIGN_LEFT:
+ case ALIGN_JUSTIFIED:
+ _sceneText.setPosition(_textPos);
+ break;
+ case ALIGN_CENTER:
+ _sceneText.setPosition(Common::Point(_textPos.x + (_textWidth - bounds.width()) / 2, _textPos.y));
+ break;
+ case ALIGN_RIGHT:
+ _sceneText.setPosition(Common::Point(_textPos.x + _textWidth - bounds.width(), _textPos.y));
+ break;
+ default:
+ break;
+ }
+
+ // Ensure the text is in the foreground
+ _sceneText.fixPriority(256);
+
+ // Count the number of words (by spaces) in the string
+ const char *s = msg.c_str();
+ int spaceCount = 0;
+ while (*s) {
+ if (*s++ == ' ')
+ ++spaceCount;
+ }
+
+ _numFrames = spaceCount * 3 + 2;
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerGameText::SpeakerGameText(): VisualSpeaker() {
+ _speakerName = "GAMETEXT";
+ _color1 = 8;
+ _color2 = 19;
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerSutter::SpeakerSutter() {
+ _speakerName = "SUTTER";
+ _color1 = 20;
+ _color2 = 22;
+ _textMode = ALIGN_CENTER;
+}
+
+void SpeakerSutter::setText(const Common::String &msg) {
+ _removeObject1 = _removeObject2 = true;
+
+ _object1.postInit();
+ _object1.setVisage(329);
+ _object1.setStrip2(2);
+ _object1.fixPriority(254);
+ _object1.changeZoom(100);
+ _object1.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 45,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ _object2.postInit();
+ _object2.setVisage(329);
+ _object2.setStrip2(1);
+ _object2.fixPriority(255);
+ _object2.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 45,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ VisualSpeaker::setText(msg);
+ _object2.fixCountdown(8, _numFrames);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerDoug::SpeakerDoug(): VisualSpeaker() {
+ _color1 = 32;
+ _speakerName = "DOUG";
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerJakeNoHead::SpeakerJakeNoHead(): VisualSpeaker() {
+ _color1 = 13;
+ _speakerName = "JAKE_NO_HEAD";
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerHarrison::SpeakerHarrison(): VisualSpeaker() {
+ _color1 = 32;
+ _speakerName = "HARRISON";
+}
+
+void SpeakerHarrison::setText(const Common::String &msg) {
+ _removeObject1 = _removeObject2 = true;
+
+ _object1.postInit();
+ _object1.setVisage(325);
+ _object1.setStrip2(7);
+ _object1.fixPriority(254);
+ _object1.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 277,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ _object2.postInit();
+ _object2.fixPriority(255);
+ _object2.setVisage(325);
+ _object2.setStrip2(6);
+ _object2.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 277,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ VisualSpeaker::setText(msg);
+ _object2.fixCountdown(8, _numFrames);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerJake::SpeakerJake(): VisualSpeaker() {
+ _color1 = 13;
+ _color2 = 7;
+ _speakerName = "JAKE";
+}
+
+void SpeakerJake::setText(const Common::String &msg) {
+ _removeObject1 = _removeObject2 = true;
+
+ _object1.postInit();
+ _object1.setVisage(1001);
+ _object1.setStrip2(2);
+ _object1.fixPriority(254);
+ _object1.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 38,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ _object2.postInit();
+ _object2.setVisage(1001);
+ _object2.setStrip2(1);
+ _object2.fixPriority(255);
+ _object2.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 38,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ VisualSpeaker::setText(msg);
+ _object2.fixCountdown(8, _numFrames);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerJakeJacket::SpeakerJakeJacket(): VisualSpeaker() {
+ _color1 = 13;
+ _color2 = 7;
+ _speakerName = "JAKEJACKET";
+}
+
+void SpeakerJakeJacket::setText(const Common::String &msg) {
+ _removeObject1 = _removeObject2 = true;
+
+ _object1.postInit();
+ _object1.setVisage(1001);
+ _object1.setStrip2(4);
+ _object1.fixPriority(254);
+ _object1.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + _xp,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ _object2.postInit();
+ _object2.setVisage(1001);
+ _object2.setStrip2(1);
+ _object2.fixPriority(255);
+ _object2.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + _xp,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ VisualSpeaker::setText(msg);
+ _object2.fixCountdown(8, _numFrames);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerJakeUniform::SpeakerJakeUniform(): VisualSpeaker() {
+ _color1 = 13;
+ _color2 = 7;
+ _speakerName = "JAKEUNIFORM";
+}
+
+void SpeakerJakeUniform::setText(const Common::String &msg) {
+ _removeObject1 = _removeObject2 = true;
+
+ _object1.postInit();
+ _object1.setVisage(1001);
+ _object1.setStrip2(3);
+ _object1.fixPriority(254);
+ _object1.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 45,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ _object2.postInit();
+ _object2.setVisage(1001);
+ _object2.setStrip2(1);
+ _object2.fixPriority(255);
+ _object2.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 45,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ VisualSpeaker::setText(msg);
+ _object2.fixCountdown(8, _numFrames);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerJailer::SpeakerJailer(): VisualSpeaker() {
+ _color1 = 13;
+ _color2 = 7;
+ _speakerName = "JAILER";
+}
+
+void SpeakerJailer::setText(const Common::String &msg) {
+ _removeObject1 = _removeObject2 = true;
+
+ _object1.postInit();
+ _object1.setVisage(395);
+ _object1.setStrip(6);
+ _object1.fixPriority(254);
+ _object1.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 40,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ _object2.postInit();
+ _object2.setVisage(395);
+ _object2.setStrip(5);
+ _object2.fixPriority(255);
+ _object2.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 40,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ VisualSpeaker::setText(msg);
+ _object2.fixCountdown(8, _numFrames);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerGreen::SpeakerGreen(): VisualSpeaker() {
+ _color1 = 96;
+ _color2 = 99;
+ _speakerName = "GREEN";
+}
+
+void SpeakerGreen::setText(const Common::String &msg) {
+ _removeObject2 = true;
+
+ _object2.postInit();
+ _object2.setVisage(373);
+ _object2.setStrip2(1);
+ _object2.fixPriority(255);
+ _object2.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 40,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ VisualSpeaker::setText(msg);
+ _object2.fixCountdown(8, _numFrames);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerPSutter::SpeakerPSutter(): VisualSpeaker() {
+ _color1 = 20;
+ _color2 = 22;
+ _speakerName = "PSUTTER";
+}
+
+void SpeakerPSutter::setText(const Common::String &msg) {
+ _removeObject2 = true;
+
+ _object2.postInit();
+ _object2.setVisage(335);
+ _object2.setStrip2(3);
+ _object2.fixPriority(200);
+ _object2.setPosition(Common::Point(202, 48));
+
+ VisualSpeaker::setText(msg);
+ _object2.fixCountdown(8, _numFrames);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerJakeRadio::SpeakerJakeRadio(): VisualSpeaker() {
+ _color1 = 13;
+ _color2 = 7;
+ _speakerName = "JAKE_RADIO";
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerLyleHat::SpeakerLyleHat(): VisualSpeaker() {
+ _color1 = 29;
+ _color2 = 89;
+ _xp = 75;
+ _speakerName = "LYLEHAT";
+}
+
+void SpeakerLyleHat::setText(const Common::String &msg) {
+ _removeObject1 = _removeObject2 = true;
+
+ _object1.postInit();
+ _object1.setVisage(278);
+ _object1.setStrip2(4);
+ _object1.fixPriority(254);
+ _object1.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + _xp,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ _object2.postInit();
+ _object2.setVisage(278);
+ _object2.setStrip2(2);
+ _object2.fixPriority(255);
+ _object2.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + _xp,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ VisualSpeaker::setText(msg);
+ _object2.fixCountdown(8, _numFrames);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerJordan::SpeakerJordan(): VisualSpeaker() {
+ _color1 = 96;
+ _color2 = 93;
+ _speakerName = "JORDAN";
+}
+
+void SpeakerJordan::setText(const Common::String &msg) {
+ _removeObject2 = true;
+
+ _object2.postInit();
+ _object2.setVisage(344);
+ _object2.setStrip2(1);
+ _object2.fixPriority(255);
+ _object2.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 78));
+
+ VisualSpeaker::setText(msg);
+ _object2.fixCountdown(8, _numFrames);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerSkip::SpeakerSkip(): VisualSpeaker() {
+ _color1 = 80;
+ _color2 = 82;
+ _speakerName = "SKIP";
+}
+
+void SpeakerSkip::setText(const Common::String &msg) {
+ _removeObject1 = _removeObject2 = true;
+
+ _object1.postInit();
+ _object1.setVisage(345);
+ _object1.setStrip2(4);
+ _object1.fixPriority(254);
+ _object1.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 282,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ _object2.postInit();
+ _object2.setVisage(345);
+ _object2.setStrip2(1);
+ _object2.fixPriority(255);
+ _object2.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 282,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ VisualSpeaker::setText(msg);
+ _object2.fixCountdown(8, _numFrames);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerSkipB::SpeakerSkipB(): VisualSpeaker() {
+ _color1 = 80;
+ _color2 = 82;
+ _speakerName = "SKIPB";
+}
+
+void SpeakerSkipB::setText(const Common::String &msg) {
+ _removeObject1 = _removeObject2 = true;
+
+ _object1.postInit();
+ _object1.setVisage(347);
+ _object1.setStrip2(2);
+ _object1.setFrame2(3);
+ _object1.fixPriority(254);
+ _object1.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 37,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ _object2.postInit();
+ _object2.setVisage(347);
+ _object2.setStrip2(1);
+ _object2.fixPriority(255);
+ _object2.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 37,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ VisualSpeaker::setText(msg);
+ _object2.fixCountdown(8, _numFrames);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerCarter::SpeakerCarter(): VisualSpeaker() {
+ _color1 = 89;
+ _color2 = 95;
+ _speakerName = "CARTER";
+}
+
+void SpeakerCarter::setText(const Common::String &msg) {
+ _removeObject1 = _removeObject2 = true;
+
+ _object1.postInit();
+ _object1.setVisage(844);
+ _object1.setStrip2(8);
+ _object1.fixPriority(254);
+ _object1.setPosition(Common::Point(78, 166));
+
+ _object2.postInit();
+ _object2.setVisage(844);
+ _object2.fixPriority(255);
+ _object2.setPosition(Common::Point(78, 166));
+
+ VisualSpeaker::setText(msg);
+ _object2.fixCountdown(8, _numFrames);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerDriver::SpeakerDriver(): VisualSpeaker() {
+ _color1 = 43;
+ _color2 = 70;
+ _speakerName = "DRIVER";
+}
+
+void SpeakerDriver::setText(const Common::String &msg) {
+ _removeObject1 = _removeObject2 = true;
+
+ _object1.postInit();
+ _object1.setVisage(416);
+ _object1.setStrip2(8);
+ _object1.fixPriority(254);
+ _object1.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 263,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ _object2.postInit();
+ _object2.setVisage(416);
+ _object2.setStrip2(1);
+ _object2.fixPriority(255);
+ _object2.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 263,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ VisualSpeaker::setText(msg);
+ _object2.fixCountdown(8, _numFrames);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerShooter::SpeakerShooter(): VisualSpeaker() {
+ _color1 = 43;
+ _color2 = 70;
+ _speakerName = "SHOOTER";
+}
+
+void SpeakerShooter::setText(const Common::String &msg) {
+ _removeObject1 = _removeObject2 = true;
+
+ _object1.postInit();
+ _object1.setVisage(418);
+ _object1.setStrip2(7);
+ _object1.fixPriority(254);
+ _object1.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 268,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ _object2.postInit();
+ _object2.setVisage(418);
+ _object2.setStrip2(1);
+ _object2.fixPriority(255);
+ _object2.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 268,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ VisualSpeaker::setText(msg);
+ _object2.fixCountdown(8, _numFrames);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerJim::SpeakerJim(): VisualSpeaker() {
+ _color1 = 32;
+ _speakerName = "JIM";
+}
+
+void SpeakerJim::setText(const Common::String &msg) {
+ _removeObject1 = _removeObject2 = true;
+
+ _object1.postInit();
+ _object1.setVisage(385);
+ _object1.setStrip(7);
+ _object1.fixPriority(254);
+ _object1.setPosition(Common::Point(262, 166));
+
+ _object2.postInit();
+ _object2.setVisage(385);
+ _object2.setStrip2(6);
+ _object2.fixPriority(255);
+ _object2.setPosition(Common::Point(262, 166));
+
+ VisualSpeaker::setText(msg);
+ _object2.fixCountdown(8, _numFrames);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerDezi::SpeakerDezi(): VisualSpeaker() {
+ _color1 = 21;
+ _speakerName = "DEZI";
+}
+
+void SpeakerDezi::setText(const Common::String &msg) {
+ _removeObject2 = true;
+
+ _object2.postInit();
+ _object2.setVisage(385);
+ _object2.setStrip2(5);
+ _object2.fixPriority(255);
+ _object2.setPosition(Common::Point(252, 166));
+
+ VisualSpeaker::setText(msg);
+ _object2.fixCountdown(8, _numFrames);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerJake385::SpeakerJake385(): VisualSpeaker() {
+ _color1 = 13;
+ _speakerName = "JAKE_385";
+}
+
+void SpeakerJake385::setText(const Common::String &msg) {
+ _removeObject1 = _removeObject2 = true;
+
+ _object1.postInit();
+ _object1.setVisage(1001);
+ _object1.setStrip2(BF_GLOBALS.getFlag(onDuty) ? 3 : 4);
+ _object1.fixPriority(254);
+ _object1.setPosition(Common::Point(42, 166));
+
+ _object2.postInit();
+ _object2.setVisage(1001);
+ _object2.fixPriority(255);
+ _object2.setPosition(Common::Point(42, 166));
+
+ VisualSpeaker::setText(msg);
+ _object2.fixCountdown(8, _numFrames);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerLaura::SpeakerLaura(): VisualSpeaker() {
+ _color1 = 97;
+ _color2 = 105;
+ _speakerName = "LAURA";
+}
+
+void SpeakerLaura::setText(const Common::String &msg) {
+ _removeObject2 = true;
+
+ _object2.postInit();
+ _object2.setVisage(345);
+ _object2.setStrip2(2);
+ _object2.fixPriority(255);
+ _object2.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 38,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ VisualSpeaker::setText(msg);
+ _object2.fixCountdown(8, _numFrames);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerLauraHeld::SpeakerLauraHeld(): VisualSpeaker() {
+ _color1 = 97;
+ _color2 = 105;
+ _speakerName = "LAURAHELD";
+}
+
+void SpeakerLauraHeld::setText(const Common::String &msg) {
+ _removeObject2 = true;
+
+ _object2.postInit();
+ _object2.setVisage(374);
+ _object2.setStrip2(1);
+ _object2.fixPriority(255);
+ _object2.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 120,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 120));
+
+ VisualSpeaker::setText(msg);
+ _object2.fixCountdown(8, _numFrames);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerEugene::SpeakerEugene(): VisualSpeaker() {
+ _color1 = 20;
+ _color2 = 22;
+ _speakerName = "EUGENE";
+}
+
+void SpeakerEugene::setText(const Common::String &msg) {
+ _removeObject1 = _removeObject2 = true;
+
+ _object1.postInit();
+ _object1.setVisage(465);
+ _object1.setStrip2(3);
+ _object1.fixPriority(254);
+ _object1.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 40,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ _object2.postInit();
+ _object2.setVisage(465);
+ _object2.setStrip2(1);
+ _object2.fixPriority(255);
+ _object2.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 40,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ VisualSpeaker::setText(msg);
+ _object2.fixCountdown(8, _numFrames);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerWeasel::SpeakerWeasel(): VisualSpeaker() {
+ _color1 = 8;
+ _color2 = 5;
+ _speakerName = "WEASEL";
+}
+
+void SpeakerWeasel::setText(const Common::String &msg) {
+ _removeObject1 = _removeObject2 = true;
+
+ _object1.postInit();
+ _object1.setVisage(464);
+ _object1.setStrip2(3);
+ _object1.fixPriority(254);
+ _object1.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 40,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ _object2.postInit();
+ _object2.setVisage(464);
+ _object2.fixPriority(255);
+ _object2.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 40,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ VisualSpeaker::setText(msg);
+ _object2.fixCountdown(8, _numFrames);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerBilly::SpeakerBilly(): VisualSpeaker() {
+ _color1 = 20;
+ _color2 = 22;
+ _speakerName = "BILLY";
+}
+
+void SpeakerBilly::setText(const Common::String &msg) {
+ _removeObject1 = _removeObject2 = true;
+
+ _object1.postInit();
+ _object1.setVisage(463);
+ _object1.setStrip2(7);
+ _object1.fixPriority(254);
+ _object1.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 40,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ _object2.postInit();
+ _object2.setVisage(463);
+ _object2.setStrip2(6);
+ _object2.fixPriority(255);
+ _object2.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 40,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 167));
+
+ VisualSpeaker::setText(msg);
+ _object2.fixCountdown(8, _numFrames);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerDrunk::SpeakerDrunk(): VisualSpeaker() {
+ _color1 = 21;
+ _speakerName = "DRUNK";
+}
+
+void SpeakerDrunk::setText(const Common::String &msg) {
+ _removeObject2 = true;
+
+ _object2.postInit();
+ _object2.setVisage(556);
+ _object2.fixPriority(255);
+ _object2.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 52,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ VisualSpeaker::setText(msg);
+ _object2.fixCountdown(8, _numFrames);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerGiggles::SpeakerGiggles(): VisualSpeaker() {
+ _color1 = 32;
+
+ _speakerName = "GIGGLES";
+}
+
+void SpeakerGiggles::setText(const Common::String &msg) {
+ _removeObject2 = true;
+
+ _object2.postInit();
+ _object2.setVisage(557);
+ _object2.setStrip2(1);
+ _object2.fixPriority(255);
+ _object2.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 262,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ VisualSpeaker::setText(msg);
+ _object2.fixCountdown(8, _numFrames);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerFBI::SpeakerFBI(): VisualSpeaker() {
+ _color1 = 27;
+ _color2 = 89;
+
+ _speakerName = "FBI";
+}
+
+void SpeakerFBI::setText(const Common::String &msg) {
+ _removeObject2 = true;
+
+ _object2.postInit();
+ _object2.setVisage(837);
+ _object2.setStrip2(1);
+ _object2.fixPriority(255);
+ _object2.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 267,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ VisualSpeaker::setText(msg);
+ _object2.fixCountdown(8, _numFrames);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerNico::SpeakerNico(): VisualSpeaker() {
+ _color1 = 105;
+ _color2 = 102;
+
+ _speakerName = "NICO";
+}
+
+void SpeakerNico::setText(const Common::String &msg) {
+ _removeObject1 = _removeObject2 = true;
+
+ _object1.postInit();
+ _object1.setVisage(905);
+ _object1.setStrip2(2);
+ _object1.fixPriority(254);
+ _object1.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 262,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ _object2.postInit();
+ _object2.setVisage(905);
+ _object2.setStrip2(1);
+ _object2.fixPriority(255);
+ _object2.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 262,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ VisualSpeaker::setText(msg);
+ _object2.fixCountdown(8, _numFrames);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerDA::SpeakerDA(): VisualSpeaker() {
+ _color1 = 82;
+ _color2 = 80;
+
+ _speakerName = "DA";
+}
+
+void SpeakerDA::setText(const Common::String &msg) {
+ _removeObject1 = _removeObject2 = true;
+
+ _object1.postInit();
+ _object1.setVisage(915);
+ _object1.setStrip2(8);
+ _object1.fixPriority(254);
+ _object1.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 84,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ _object2.postInit();
+ _object2.setVisage(915);
+ _object2.setStrip2(1);
+ _object2.fixPriority(255);
+ _object2.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 84,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ VisualSpeaker::setText(msg);
+ _object2.fixCountdown(8, _numFrames);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerGrandma::SpeakerGrandma(): VisualSpeaker() {
+ _color1 = 20;
+ _color2 = 23;
+
+ _speakerName = "GRANDMA";
+}
+
+void SpeakerGrandma::setText(const Common::String &msg) {
+ _removeObject1 = _removeObject2 = true;
+
+ _object1.postInit();
+ _object1.setVisage(274);
+ _object1.setStrip2(4);
+ _object1.fixPriority(254);
+ _object1.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 43,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ _object2.postInit();
+ _object2.setVisage(274);
+ _object2.setStrip2(3);
+ _object2.fixPriority(255);
+ _object2.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 43,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ VisualSpeaker::setText(msg);
+ _object2.fixCountdown(8, _numFrames);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerLyle::SpeakerLyle(): VisualSpeaker() {
+ _color1 = 29;
+ _color2 = 89;
+
+ _speakerName = "LYLE";
+}
+
+void SpeakerLyle::setText(const Common::String &msg) {
+ _removeObject1 = _removeObject2 = true;
+
+ _object1.postInit();
+ _object1.setVisage(278);
+ _object1.setStrip2(3);
+ _object1.fixPriority(254);
+ _object1.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 75,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ _object2.postInit();
+ _object2.setVisage(278);
+ _object2.setStrip2(1);
+ _object2.fixPriority(255);
+ _object2.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 75,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ VisualSpeaker::setText(msg);
+ _object2.fixCountdown(8, _numFrames);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerGranText::SpeakerGranText(): VisualSpeaker() {
+ _color1 = 20;
+ _color2 = 23;
+
+ _speakerName = "GRANTEXT";
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerLyleText::SpeakerLyleText(): VisualSpeaker() {
+ _color1 = 29;
+ _color2 = 89;
+
+ _speakerName = "LYLETEXT";
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerKate::SpeakerKate(): VisualSpeaker() {
+ _color1 = 108;
+
+ _speakerName = "KATE";
+}
+
+void SpeakerKate::setText(const Common::String &msg) {
+ _removeObject1 = _removeObject2 = true;
+
+ _object1.postInit();
+ _object1.setVisage(122);
+ _object1.setStrip2(8);
+ _object1.fixPriority(254);
+ _object1.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 270,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ _object2.postInit();
+ _object2.setVisage(122);
+ _object2.setStrip2(1);
+ _object2.fixPriority(255);
+ _object2.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 270,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ _object2._numFrames = 7;
+ VisualSpeaker::setText(msg);
+ _object2.fixCountdown(8, _numFrames);
+}
+
+/*--------------------------------------------------------------------------*/
+
+SpeakerTony::SpeakerTony(): VisualSpeaker() {
+ _color1 = 108;
+ _color2 = 8;
+
+ _speakerName = "TONY";
+}
+
+void SpeakerTony::setText(const Common::String &msg) {
+ _removeObject2 = true;
+
+ _object2.postInit();
+ _object2.setVisage(132);
+ _object2.setStrip2(1);
+ _object2.fixPriority(255);
+ _object2.setPosition(Common::Point(BF_GLOBALS._sceneManager._scene->_sceneBounds.left + 62,
+ BF_GLOBALS._sceneManager._scene->_sceneBounds.top + 166));
+
+ VisualSpeaker::setText(msg);
+ _object2.fixCountdown(8, _numFrames);
+}
+
+} // End of namespace BlueForce
+
+} // End of namespace TsAGE
diff --git a/engines/tsage/blue_force/blueforce_speakers.h b/engines/tsage/blue_force/blueforce_speakers.h
new file mode 100644
index 0000000000..508279a929
--- /dev/null
+++ b/engines/tsage/blue_force/blueforce_speakers.h
@@ -0,0 +1,359 @@
+/* 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.
+ *
+ */
+
+#ifndef TSAGE_BLUEFORCE_SPEAKERS_H
+#define TSAGE_BLUEFORCE_SPEAKERS_H
+
+#include "common/scummsys.h"
+#include "tsage/converse.h"
+#include "tsage/events.h"
+#include "tsage/core.h"
+#include "tsage/scenes.h"
+#include "tsage/globals.h"
+#include "tsage/blue_force/blueforce_logic.h"
+
+namespace TsAGE {
+
+namespace BlueForce {
+
+using namespace TsAGE;
+
+class VisualSpeaker: public Speaker {
+public:
+ NamedObject _object1;
+ CountdownObject _object2;
+ bool _removeObject1, _removeObject2;
+ int _xp;
+ int _numFrames;
+ Common::Point _offsetPos;
+public:
+ VisualSpeaker();
+
+ virtual Common::String getClassName() { return "VisualSpeaker"; }
+ virtual void synchronize(Serializer &s);
+ virtual void remove();
+ virtual void proc12(Action *action);
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerGameText: public VisualSpeaker {
+public:
+ SpeakerGameText();
+
+ virtual Common::String getClassName() { return "SpeakerGameText"; }
+};
+
+class SpeakerSutter: public VisualSpeaker {
+public:
+ SpeakerSutter();
+
+ virtual Common::String getClassName() { return "SpeakerSutter"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerDoug: public VisualSpeaker {
+public:
+ SpeakerDoug();
+
+ virtual Common::String getClassName() { return "SpeakerDoug"; }
+};
+
+class SpeakerJakeNoHead: public VisualSpeaker {
+public:
+ SpeakerJakeNoHead();
+
+ virtual Common::String getClassName() { return "SpeakerJakeNoHead"; }
+};
+
+class SpeakerHarrison: public VisualSpeaker {
+public:
+ SpeakerHarrison();
+
+ virtual Common::String getClassName() { return "SpeakerHarrison"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerJake: public VisualSpeaker {
+public:
+ SpeakerJake();
+
+ virtual Common::String getClassName() { return "SpeakerJake"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerJakeJacket: public VisualSpeaker {
+public:
+ SpeakerJakeJacket();
+
+ virtual Common::String getClassName() { return "SpeakerJakeJacket"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerJakeUniform: public VisualSpeaker {
+public:
+ SpeakerJakeUniform();
+
+ virtual Common::String getClassName() { return "SpeakerJakeUniform"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerJailer: public VisualSpeaker {
+public:
+ SpeakerJailer();
+
+ virtual Common::String getClassName() { return "SpeakerJailer"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerGreen: public VisualSpeaker {
+public:
+ SpeakerGreen();
+
+ virtual Common::String getClassName() { return "SpeakerGreen"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerPSutter: public VisualSpeaker {
+public:
+ SpeakerPSutter();
+
+ virtual Common::String getClassName() { return "SpeakerPSutter"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerJakeRadio: public VisualSpeaker {
+public:
+ SpeakerJakeRadio();
+
+ virtual Common::String getClassName() { return "SpeakerJakeRadio"; }
+};
+
+class SpeakerLyleHat: public VisualSpeaker {
+public:
+ SpeakerLyleHat();
+
+ virtual Common::String getClassName() { return "SpeakerLyleHat"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerJordan: public VisualSpeaker {
+public:
+ SpeakerJordan();
+
+ virtual Common::String getClassName() { return "SpeakerJordan"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerSkip: public VisualSpeaker {
+public:
+ SpeakerSkip();
+
+ virtual Common::String getClassName() { return "SpeakerSkip"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerSkipB: public VisualSpeaker {
+public:
+ SpeakerSkipB();
+
+ virtual Common::String getClassName() { return "SpeakerSkipB"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerCarter: public VisualSpeaker {
+public:
+ SpeakerCarter();
+
+ virtual Common::String getClassName() { return "SpeakerCarter"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerDriver: public VisualSpeaker {
+public:
+ SpeakerDriver();
+
+ virtual Common::String getClassName() { return "SpeakerDriver"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerShooter: public VisualSpeaker {
+public:
+ SpeakerShooter();
+
+ virtual Common::String getClassName() { return "SpeakerShooter"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerJim: public VisualSpeaker {
+public:
+ SpeakerJim();
+
+ virtual Common::String getClassName() { return "SpeakerJim"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerDezi: public VisualSpeaker {
+public:
+ SpeakerDezi();
+
+ virtual Common::String getClassName() { return "SpeakerDezi"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerJake385: public VisualSpeaker {
+public:
+ SpeakerJake385();
+
+ virtual Common::String getClassName() { return "SpeakerJake385"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerLaura: public VisualSpeaker {
+public:
+ SpeakerLaura();
+
+ virtual Common::String getClassName() { return "SpeakerLaura"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerLauraHeld: public VisualSpeaker {
+public:
+ SpeakerLauraHeld();
+
+ virtual Common::String getClassName() { return "SpeakerLaura"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerEugene: public VisualSpeaker {
+public:
+ SpeakerEugene();
+
+ virtual Common::String getClassName() { return "SpeakerEugene"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerWeasel: public VisualSpeaker {
+public:
+ SpeakerWeasel();
+
+ virtual Common::String getClassName() { return "SpeakerWeasel"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerBilly: public VisualSpeaker {
+public:
+ SpeakerBilly();
+
+ virtual Common::String getClassName() { return "SpeakerBilly"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerDrunk: public VisualSpeaker {
+public:
+ SpeakerDrunk();
+
+ virtual Common::String getClassName() { return "SpeakerDrunk"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerGiggles: public VisualSpeaker {
+public:
+ SpeakerGiggles();
+
+ virtual Common::String getClassName() { return "SpeakerGiggles"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerFBI: public VisualSpeaker {
+public:
+ SpeakerFBI();
+
+ virtual Common::String getClassName() { return "FBI"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerNico: public VisualSpeaker {
+public:
+ SpeakerNico();
+
+ virtual Common::String getClassName() { return "NICO"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerDA: public VisualSpeaker {
+public:
+ SpeakerDA();
+
+ virtual Common::String getClassName() { return "DA"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerGrandma: public VisualSpeaker {
+public:
+ SpeakerGrandma();
+
+ virtual Common::String getClassName() { return "SpeakerGrandma"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerLyle: public VisualSpeaker {
+public:
+ SpeakerLyle();
+
+ virtual Common::String getClassName() { return "SpeakerLyle"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerGranText: public VisualSpeaker {
+public:
+ SpeakerGranText();
+
+ virtual Common::String getClassName() { return "SpeakerGranText"; }
+};
+
+class SpeakerLyleText: public VisualSpeaker {
+public:
+ SpeakerLyleText();
+
+ virtual Common::String getClassName() { return "SpeakerLyleText"; }
+};
+
+class SpeakerKate: public VisualSpeaker {
+public:
+ SpeakerKate();
+
+ virtual Common::String getClassName() { return "SpeakerKate"; }
+ virtual void setText(const Common::String &msg);
+};
+
+class SpeakerTony: public VisualSpeaker {
+public:
+ SpeakerTony();
+
+ virtual Common::String getClassName() { return "SpeakerTony"; }
+ virtual void setText(const Common::String &msg);
+};
+} // End of namespace BlueForce
+
+} // End of namespace TsAGE
+
+#endif
diff --git a/engines/tsage/blueforce_logic.cpp b/engines/tsage/blueforce_logic.cpp
deleted file mode 100644
index d266d5e1d9..0000000000
--- a/engines/tsage/blueforce_logic.cpp
+++ /dev/null
@@ -1,120 +0,0 @@
-/* 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/blueforce_logic.h"
-#include "tsage/scenes.h"
-#include "tsage/tsage.h"
-#include "tsage/staticres.h"
-
-namespace tSage {
-
-void BlueForceGame::start() {
- // Start the game
- _globals->_sceneManager.changeScene(20);
-
- _globals->_events.setCursor(CURSOR_WALK);
-}
-
-Scene *BlueForceGame::createScene(int sceneNumber) {
- switch (sceneNumber) {
- case 20:
- case 50:
- case 60:
- error("Scene group 0 not implemented");
- case 100:
- case 109:
- case 110:
- case 114:
- case 115:
- case 125:
- case 140:
- case 150:
- case 160:
- case 180:
- case 190:
- error("Scene group 1 not implemented");
- case 200:
- case 210:
- case 220:
- case 225:
- case 265:
- case 270:
- case 271:
- case 280:
- error("Scene group 2 not implemented");
- case 300:
- case 315:
- case 325:
- case 330:
- case 340:
- case 342:
- case 350:
- case 355:
- case 360:
- case 370:
- case 380:
- case 385:
- case 390:
- error("Scene group 3 not implemented");
- case 410:
- case 415:
- case 440:
- case 450:
- error("Scene group 4 not implemented");
- case 550:
- case 551:
- case 560:
- case 570:
- case 580:
- case 590:
- error("Scene group 5 not implemented");
- case 600:
- case 620:
- case 666:
- case 690:
- error("Scene group 6 not implemented");
- case 710:
- error("Scene group 7 not implemented");
- case 800:
- case 810:
- case 820:
- case 830:
- case 840:
- case 850:
- case 860:
- case 870:
- case 880:
- error("Scene group 8 not implemented");
- case 900:
- case 910:
- case 920:
- case 930:
- case 935:
- case 940:
- error("Scene group 9 not implemented");
- default:
- error("Unknown scene number - %d", sceneNumber);
- break;
- }
-}
-
-} // End of namespace tSage
diff --git a/engines/tsage/converse.cpp b/engines/tsage/converse.cpp
index b475310533..d86548bd4b 100644
--- a/engines/tsage/converse.cpp
+++ b/engines/tsage/converse.cpp
@@ -26,7 +26,7 @@
#include "tsage/globals.h"
#include "tsage/staticres.h"
-namespace tSage {
+namespace TsAGE {
#define STRIP_WORD_DELAY 30
@@ -34,12 +34,13 @@ namespace tSage {
SequenceManager::SequenceManager() : Action() {
Common::set_to(&_objectList[0], &_objectList[6], (SceneObject *)NULL);
_sequenceData.clear();
- _field24 = 0;
+ _fontNum = 0;
_sequenceOffset = 0;
_resNum = 0;
_field26 = 0;
_objectIndex = 0;
_keepActive = false;
+ _onCallback = NULL;
setup();
}
@@ -56,7 +57,7 @@ void SequenceManager::synchronize(Serializer &s) {
s.syncAsSint32LE(_resNum);
s.syncAsSint32LE(_sequenceOffset);
s.syncAsByte(_keepActive);
- s.syncAsSint32LE(_field24);
+ s.syncAsSint32LE(_fontNum);
s.syncAsSint32LE(_field26);
s.syncAsSint32LE(_objectIndex);
@@ -77,7 +78,7 @@ void SequenceManager::remove() {
_sequenceData.clear();
}
- if (_globals->_sceneObjects->contains(&_sceneText))
+ if (g_globals->_sceneObjects->contains(&_sceneText))
_sceneText.remove();
Common::set_to(&_objectList[0], &_objectList[6], (SceneObject *)NULL);
@@ -85,7 +86,7 @@ void SequenceManager::remove() {
}
void SequenceManager::signal() {
- if (_globals->_sceneObjects->contains(&_sceneText))
+ if (g_globals->_sceneObjects->contains(&_sceneText))
_sceneText.hide();
bool continueFlag = true;
@@ -98,8 +99,6 @@ void SequenceManager::signal() {
}
uint16 idx = static_cast<uint16>(getNextValue() - 32000);
- if (idx > 34)
- continue;
int16 v1, v2, v3;
switch (idx) {
@@ -144,8 +143,8 @@ void SequenceManager::signal() {
v1 = getNextValue();
v3 = getNextValue();
v2 = getNextValue();
- _globals->_sceneManager._scene->_sceneBounds.moveTo(v3, v2);
- _globals->_sceneManager._scene->loadScene(v1);
+ g_globals->_sceneManager._scene->_sceneBounds.moveTo(v3, v2);
+ g_globals->_sceneManager._scene->loadScene(v1);
break;
case 10: {
int resNum= getNextValue();
@@ -225,7 +224,7 @@ void SequenceManager::signal() {
int minPercent = getNextValue();
int yEnd = getNextValue();
int maxPercent = getNextValue();
- _globals->_sceneManager._scene->setZoomPercents(yStart, minPercent, yEnd, maxPercent);
+ g_globals->_sceneManager._scene->setZoomPercents(yStart, minPercent, yEnd, maxPercent);
break;
}
case 26:
@@ -253,7 +252,7 @@ void SequenceManager::signal() {
break;
case 30:
v1 = getNextValue();
- _globals->_scrollFollower = (v1 == -1) ? NULL : _objectList[v1];
+ g_globals->_scrollFollower = (v1 == -1) ? NULL : _objectList[v1];
break;
case 31:
_sceneObject->setObjectWrapper(new SceneObjectWrapper());
@@ -267,7 +266,7 @@ void SequenceManager::signal() {
setDelay(1);
else {
_sceneText.remove();
- _globals->_sceneManager._scene->_stripManager.start(v1, this);
+ g_globals->_sceneManager._scene->_stripManager.start(v1, this);
}
break;
case 34: {
@@ -284,6 +283,33 @@ void SequenceManager::signal() {
_objectList[objIndex3], _objectList[objIndex4], _objectList[objIndex5], _objectList[objIndex6], NULL);
break;
}
+ /* Following indexes were introduced for Blue Force */
+ case 35:
+ v1 = getNextValue();
+ _sceneObject->updateAngle(_objectList[v1]->_position);
+ break;
+ case 36:
+ _sceneObject->animate(ANIM_MODE_9, NULL);
+ break;
+ case 37:
+ v1 = getNextValue();
+ v2 = getNextValue();
+ if (_onCallback)
+ _onCallback(v1, v2);
+ break;
+ case 38: {
+ int resNum = getNextValue();
+ int lineNum = getNextValue();
+ int fontNum = getNextValue();
+ int color1 = getNextValue();
+ int color2 = getNextValue();
+ int color3 = getNextValue();
+ int xp = getNextValue();
+ int yp = getNextValue();
+ int width = getNextValue();
+ setMessage(resNum, lineNum, fontNum, color1, color2, color3, Common::Point(xp, yp), width);
+ break;
+ }
default:
error("SequenceManager::signal - Unknown action %d at offset %xh", idx, _sequenceOffset - 2);
break;
@@ -293,7 +319,7 @@ void SequenceManager::signal() {
void SequenceManager::process(Event &event) {
if (((event.eventType == EVENT_BUTTON_DOWN) || (event.eventType == EVENT_KEYPRESS)) &&
- !event.handled && _globals->_sceneObjects->contains(&_sceneText)) {
+ !event.handled && g_globals->_sceneObjects->contains(&_sceneText)) {
// Remove the text item
_sceneText.remove();
setDelay(2);
@@ -308,8 +334,8 @@ void SequenceManager::attached(EventHandler *newOwner, EventHandler *endHandler,
// Get the sequence number to use
_resNum = va_arg(va, int);
- byte *seqData = _resourceManager->getResource(RES_SEQUENCE, _resNum, 0);
- uint seqSize = _vm->_memoryManager.getSize(seqData);
+ byte *seqData = g_resourceManager->getResource(RES_SEQUENCE, _resNum, 0);
+ uint seqSize = g_vm->_memoryManager.getSize(seqData);
_sequenceData.resize(seqSize);
Common::copy(seqData, seqData + seqSize, &_sequenceData[0]);
@@ -337,21 +363,26 @@ uint16 SequenceManager::getNextValue() {
}
void SequenceManager::setMessage(int resNum, int lineNum, int color, const Common::Point &pt, int width) {
- _sceneText._color1 = color;
- _sceneText._color2 = 0;
- _sceneText._color3 = 0;
- _sceneText._fontNumber = 2;
+ setMessage(resNum, lineNum, 2, color, 0, 0, pt, width);
+}
+
+void SequenceManager::setMessage(int resNum, int lineNum, int fontNum, int color1, int color2, int color3,
+ const Common::Point &pt, int width) {
+ _sceneText._color1 = color1;
+ _sceneText._color2 = color2;
+ _sceneText._color3 = color3;
+ _sceneText._fontNumber = fontNum;
_sceneText._width = width;
// Get the display message
- Common::String msg = _resourceManager->getMessage(resNum, lineNum);
+ Common::String msg = g_resourceManager->getMessage(resNum, lineNum);
// Set the text message
_sceneText.setup(msg);
// Move the text to the correct position
Rect textRect = _sceneText._bounds;
- Rect sceneBounds = _globals->_sceneManager._scene->_sceneBounds;
+ Rect sceneBounds = g_globals->_sceneManager._scene->_sceneBounds;
sceneBounds.collapse(4, 2);
textRect.moveTo(pt);
textRect.contain(sceneBounds);
@@ -374,14 +405,14 @@ void SequenceManager::setMessage(int resNum, int lineNum, int color, const Commo
}
SequenceManager *SequenceManager::globalManager() {
- return &_globals->_sequenceManager;
+ return &g_globals->_sequenceManager;
}
/*--------------------------------------------------------------------------*/
ConversationChoiceDialog::ConversationChoiceDialog() {
_stdColor = 23;
- _highlightColor = _globals->_scenePalette._colors.background;
+ _highlightColor = g_globals->_scenePalette._colors.background;
_fontNumber = 1;
}
@@ -412,17 +443,17 @@ int ConversationChoiceDialog::execute(const Common::StringArray &choiceList) {
// Draw the dialog
draw();
- _globals->_events.showCursor();
+ g_globals->_events.showCursor();
// Event handling loop
Event event;
- while (!_vm->getEventManager()->shouldQuit()) {
- while (!_globals->_events.getEvent(event, EVENT_KEYPRESS | EVENT_BUTTON_DOWN | EVENT_MOUSE_MOVE) &&
- !_vm->getEventManager()->shouldQuit()) {
+ while (!g_vm->shouldQuit()) {
+ while (!g_globals->_events.getEvent(event, EVENT_KEYPRESS | EVENT_BUTTON_DOWN | EVENT_MOUSE_MOVE) &&
+ !g_vm->shouldQuit()) {
g_system->delayMillis(10);
g_system->updateScreen();
}
- if (_vm->getEventManager()->shouldQuit())
+ if (g_vm->shouldQuit())
break;
if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode >= Common::KEYCODE_1) &&
@@ -473,7 +504,7 @@ void ConversationChoiceDialog::draw() {
// Make a backup copy of the area the dialog will occupy
Rect tempRect = _bounds;
tempRect.collapse(-10, -10);
- _savedArea = Surface_getArea(_globals->_gfxManagerInstance.getSurface(), tempRect);
+ _savedArea = Surface_getArea(g_globals->_gfxManagerInstance.getSurface(), tempRect);
// Fill in the contents of the entire dialog
_gfxManager._bounds = Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
@@ -527,6 +558,8 @@ void Obj44::synchronize(Serializer &s) {
StripManager::StripManager() {
_callbackObject = NULL;
_activeSpeaker = NULL;
+ _onBegin = NULL;
+ _onEnd = NULL;
reset();
}
@@ -534,12 +567,14 @@ StripManager::~StripManager() {
}
void StripManager::start(int stripNum, EventHandler *owner, StripCallback *callback) {
+ if (_onBegin)
+ _onBegin();
reset();
_stripNum = stripNum;
_callbackObject = callback;
- _sceneNumber = _globals->_sceneManager._scene->_screenNumber;
- _sceneBounds = _globals->_sceneManager._scene->_sceneBounds;
+ _sceneNumber = g_globals->_sceneManager._scene->_screenNumber;
+ _sceneBounds = g_globals->_sceneManager._scene->_sceneBounds;
_script.clear();
assert(owner);
@@ -568,8 +603,8 @@ void StripManager::reset() {
void StripManager::load() {
// Get the script
- byte *script = _resourceManager->getResource(RES_STRIP, _stripNum, 2);
- uint scriptSize = _vm->_memoryManager.getSize(script);
+ byte *script = g_resourceManager->getResource(RES_STRIP, _stripNum, 2);
+ uint scriptSize = g_vm->_memoryManager.getSize(script);
_script.resize(scriptSize);
Common::copy(script, script + scriptSize, &_script[0]);
@@ -577,8 +612,8 @@ void StripManager::load() {
DEALLOCATE(script);
// Get the object list
- byte *obj44List = _resourceManager->getResource(RES_STRIP, _stripNum, 1);
- int dataSize = _vm->_memoryManager.getSize(obj44List);
+ byte *obj44List = g_resourceManager->getResource(RES_STRIP, _stripNum, 1);
+ int dataSize = g_vm->_memoryManager.getSize(obj44List);
assert((dataSize % 0x44) == 0);
byte *dataP = obj44List;
@@ -642,11 +677,14 @@ void StripManager::remove() {
if (_activeSpeaker)
_activeSpeaker->remove();
- if (_sceneNumber != _globals->_sceneManager._scene->_screenNumber) {
- _globals->_sceneManager._scene->_sceneBounds = _sceneBounds;
- _globals->_sceneManager._scene->loadScene(_sceneNumber);
+ if (_sceneNumber != g_globals->_sceneManager._scene->_screenNumber) {
+ g_globals->_sceneManager._scene->_sceneBounds = _sceneBounds;
+ g_globals->_sceneManager._scene->loadScene(_sceneNumber);
}
+ if (_onEnd)
+ _onEnd();
+
Action::remove();
}
@@ -706,9 +744,9 @@ void StripManager::signal() {
_activeSpeaker->remove();
_activeSpeaker = speakerP;
- if ((_activeSpeaker->_newSceneNumber == -1) && (_globals->_sceneManager._scene->_screenNumber != _sceneNumber)) {
- _globals->_sceneManager._scene->_sceneBounds = _sceneBounds;
- _globals->_sceneManager._scene->loadScene(_sceneNumber);
+ if ((_activeSpeaker->_newSceneNumber == -1) && (g_globals->_sceneManager._scene->_screenNumber != _sceneNumber)) {
+ g_globals->_sceneManager._scene->_sceneBounds = _sceneBounds;
+ g_globals->_sceneManager._scene->loadScene(_sceneNumber);
}
_activeSpeaker->proc12(this);
@@ -801,7 +839,7 @@ Speaker::Speaker() : EventHandler() {
_textPos = Common::Point(10, 20);
_fontNumber = 2;
_textMode = ALIGN_LEFT;
- _color1 = _color2 = _color3 = _globals->_scenePalette._colors.foreground;
+ _color1 = _color2 = _color3 = g_globals->_scenePalette._colors.foreground;
_action = NULL;
_speakerName = "SPEAKER";
}
@@ -834,9 +872,9 @@ void Speaker::remove() {
void Speaker::proc12(Action *action) {
_action = action;
if (_newSceneNumber != -1) {
- _oldSceneNumber = _globals->_sceneManager._sceneNumber;
- _sceneBounds = _globals->_sceneManager._scene->_sceneBounds;
- _globals->_sceneManager._scene->loadScene(_newSceneNumber);
+ _oldSceneNumber = g_globals->_sceneManager._sceneNumber;
+ _sceneBounds = g_globals->_sceneManager._scene->_sceneBounds;
+ g_globals->_sceneManager._scene->loadScene(_newSceneNumber);
}
if (_hideObjects)
@@ -844,14 +882,14 @@ void Speaker::proc12(Action *action) {
_objectList.activate();
// Draw the speaker objects without any fading
- FadeMode fadeMode = _globals->_sceneManager._fadeMode;
- _globals->_sceneManager._fadeMode = FADEMODE_IMMEDIATE;
- _globals->_sceneObjects->draw();
- _globals->_sceneManager._fadeMode = fadeMode;
+ FadeMode fadeMode = g_globals->_sceneManager._fadeMode;
+ g_globals->_sceneManager._fadeMode = FADEMODE_IMMEDIATE;
+ g_globals->_sceneObjects->draw();
+ g_globals->_sceneManager._fadeMode = fadeMode;
}
void Speaker::setText(const Common::String &msg) {
- _globals->_sceneObjects->draw();
+ g_globals->_sceneObjects->draw();
_sceneText._color1 = _color1;
_sceneText._color2 = _color2;
@@ -904,16 +942,16 @@ void ScreenSpeaker::setText(const Common::String &msg) {
gfxMan._font.setFontNumber(_fontNumber);
Rect textRect;
- _globals->gfxManager().getStringBounds(msg.c_str(), textRect, _textWidth);
+ g_globals->gfxManager().getStringBounds(msg.c_str(), textRect, _textWidth);
if (_npc) {
textRect.center(_npc->_position.x, _npc->_bounds.top - (textRect.height() / 2 + 10));
} else {
- textRect.center(_globals->_sceneManager._scene->_sceneBounds.left +
- (_globals->_sceneManager._scene->_sceneBounds.width() / 2),
- _globals->_sceneManager._scene->_sceneBounds.top);
+ textRect.center(g_globals->_sceneManager._scene->_sceneBounds.left +
+ (g_globals->_sceneManager._scene->_sceneBounds.width() / 2),
+ g_globals->_sceneManager._scene->_sceneBounds.top);
}
- Rect rect2 = _globals->_sceneManager._scene->_sceneBounds;
+ Rect rect2 = g_globals->_sceneManager._scene->_sceneBounds;
rect2.collapse(10, 6);
textRect.contain(rect2);
@@ -929,14 +967,14 @@ void ScreenSpeaker::setText(const Common::String &msg) {
void SpeakerAction::signal() {
switch (_actionIndex++) {
case 0:
- setDelay(_globals->_randomSource.getRandomNumber(60) + 60);
+ setDelay(g_globals->_randomSource.getRandomNumber(60) + 60);
break;
case 1:
static_cast<SceneObject *>(_owner)->setFrame(1);
static_cast<SceneObject *>(_owner)->animate(ANIM_MODE_5, this, NULL);
break;
case 2:
- setDelay(_globals->_randomSource.getRandomNumber(10));
+ setDelay(g_globals->_randomSource.getRandomNumber(10));
_actionIndex = 0;
break;
default:
@@ -954,4 +992,4 @@ void AnimatedSpeaker::removeText() {
_objectList.draw();
}
-} // end of namespace tSage
+} // end of namespace TsAGE
diff --git a/engines/tsage/converse.h b/engines/tsage/converse.h
index 13c490e995..f82c07a7dd 100644
--- a/engines/tsage/converse.h
+++ b/engines/tsage/converse.h
@@ -27,31 +27,36 @@
#include "tsage/dialogs.h"
#include "tsage/sound.h"
-namespace tSage {
+namespace TsAGE {
class StripCallback : public Action {
public:
virtual void stripCallback(int v) = 0;
};
+typedef void (*SequenceCallback)(int v1, int v2);
+
class SequenceManager : public Action {
private:
void setup();
uint16 getNextValue();
void setMessage(int resNum, int lineNum, int color, const Common::Point &pt, int width);
+ void setMessage(int resNum, int lineNum, int fontNum, int color1, int color2, int color3,
+ const Common::Point &pt, int width);
SequenceManager *globalManager();
public:
SceneText _sceneText;
int _resNum;
uint _sequenceOffset;
bool _keepActive;
- int _field24;
+ int _fontNum;
int _field26;
Common::Array<byte> _sequenceData;
int _objectIndex;
SceneObject *_sceneObject;
SceneObject *_objectList[6];
ASound _soundHandler;
+ SequenceCallback _onCallback;
public:
SequenceManager();
@@ -185,6 +190,8 @@ public:
virtual void synchronize(Serializer &s);
};
+typedef void (*StripProc)();
+
class StripManager : public Action {
private:
void reset();
@@ -206,6 +213,8 @@ public:
int _field2E8;
Common::Array<Obj44> _obj44List;
Common::Array<byte> _script;
+ StripProc _onBegin;
+ StripProc _onEnd;
public:
StripManager();
virtual ~StripManager();
@@ -222,6 +231,6 @@ public:
void addSpeaker(Speaker *speaker);
};
-} // End of namespace tSage
+} // End of namespace TsAGE
#endif
diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp
index 76714a6f10..a56b30ad4d 100644
--- a/engines/tsage/core.cpp
+++ b/engines/tsage/core.cpp
@@ -22,6 +22,7 @@
#include "common/system.h"
#include "common/config-manager.h"
+#include "common/util.h"
#include "engines/engine.h"
#include "graphics/palette.h"
#include "tsage/tsage.h"
@@ -32,8 +33,9 @@
#include "tsage/staticres.h"
#include "tsage/globals.h"
#include "tsage/sound.h"
+#include "tsage/blue_force/blueforce_logic.h"
-namespace tSage {
+namespace TsAGE {
// The engine uses ScumMVM screen buffering, so all logic is hardcoded to use pane buffer 0
#define CURRENT_PANENUM 0
@@ -48,21 +50,47 @@ InvObject::InvObject(int sceneNumber, int rlbNum, int cursorNum, CursorType curs
// Decode the image for the inventory item to get it's display bounds
uint size;
- byte *imgData = _resourceManager->getSubResource(_displayResNum, _rlbNum, _cursorNum, &size);
+ byte *imgData = g_resourceManager->getSubResource(_displayResNum, _rlbNum, _cursorNum, &size);
GfxSurface s = surfaceFromRes(imgData);
_bounds = s.getBounds();
DEALLOCATE(imgData);
}
+InvObject::InvObject(int visage, int strip, int frame) {
+ assert(g_vm->getGameID() == GType_BlueForce);
+ _visage = visage;
+ _strip = strip;
+ _frame = frame;
+ _sceneNumber = 0;
+ _iconResNum = 10;
+}
+
+InvObject::InvObject(int strip, int frame) {
+ assert(g_vm->getGameID() == GType_Ringworld2);
+ _strip = strip;
+ _frame = frame;
+
+ _visage = 0;
+ _sceneNumber = 0;
+ _iconResNum = 10;
+}
+
void InvObject::setCursor() {
- _globals->_events._currentCursor = _cursorId;
+ if (g_vm->getGameID() == GType_BlueForce) {
+ // Blue Force cursor handling
+ _cursorId = (CursorType)BF_GLOBALS._inventory->indexOf(this);
+ g_globals->_events.setCursor(_cursorId);
+ } else {
+ // Ringworld cursor handling
+ g_globals->_events._currentCursor = _cursorId;
- if (_iconResNum != -1) {
- GfxSurface s = surfaceFromRes(_iconResNum, _rlbNum, _cursorNum);
+ if (_iconResNum != -1) {
+ GfxSurface s = surfaceFromRes(_iconResNum, _rlbNum, _cursorNum);
- Graphics::Surface src = s.lockSurface();
- _globals->_events.setCursor(src, s._transColor, s._centroid, _cursorId);
+ Graphics::Surface src = s.lockSurface();
+ g_globals->_events.setCursor(src, s._transColor, s._centroid, _cursorId);
+ }
}
}
@@ -77,6 +105,31 @@ void InvObjectList::synchronize(Serializer &s) {
SYNC_POINTER(_selectedItem);
}
+int InvObjectList::indexOf(InvObject *obj) const {
+ int idx = 0;
+ SynchronizedList<InvObject *>::const_iterator i;
+
+ for (i = _itemList.begin(); i != _itemList.end(); ++i, ++idx) {
+ if ((*i) == obj)
+ return idx;
+ }
+
+ return -1;
+}
+
+InvObject *InvObjectList::getItem(int objectNum) {
+ SynchronizedList<InvObject *>::const_iterator i = _itemList.begin();
+ while (objectNum-- > 0)
+ ++i;
+
+ return *i;
+}
+
+int InvObjectList::getObjectScene(int objectNum) {
+ InvObject *obj = getItem(objectNum);
+ return obj->_sceneNumber;
+}
+
/*--------------------------------------------------------------------------*/
void EventHandler::dispatch() {
@@ -128,7 +181,7 @@ void Action::remove() {
_owner->_action = NULL;
_owner = NULL;
} else {
- _globals->_sceneManager.removeAction(this);
+ g_globals->_sceneManager.removeAction(this);
}
_attached = false;
@@ -146,7 +199,7 @@ void Action::dispatch() {
_action->dispatch();
if (_delayFrames) {
- uint32 frameNumber = _globals->_events.getFrameNumber();
+ uint32 frameNumber = g_globals->_events.getFrameNumber();
if (frameNumber >= _startFrame) {
_delayFrames -= frameNumber - _startFrame;
@@ -162,7 +215,7 @@ void Action::dispatch() {
void Action::attached(EventHandler *newOwner, EventHandler *endHandler, va_list va) {
_actionIndex = 0;
_delayFrames = 0;
- _startFrame = _globals->_events.getFrameNumber();
+ _startFrame = g_globals->_events.getFrameNumber();
_owner = newOwner;
_endHandler = endHandler;
_attached = true;
@@ -171,7 +224,7 @@ void Action::attached(EventHandler *newOwner, EventHandler *endHandler, va_list
void Action::setDelay(int numFrames) {
_delayFrames = numFrames;
- _startFrame = _globals->_events.getFrameNumber();
+ _startFrame = g_globals->_events.getFrameNumber();
}
/*--------------------------------------------------------------------------*/
@@ -279,8 +332,12 @@ void ObjectMover::dispatch() {
void ObjectMover::setup(const Common::Point &destPos) {
_sceneObject->calcAngle(destPos);
- if ((_sceneObject->_objectWrapper) && !(_sceneObject->_flags & OBJFLAG_SUPPRESS_DISPATCH))
- _sceneObject->_objectWrapper->dispatch();
+ if ((_sceneObject->_objectWrapper) && !(_sceneObject->_flags & OBJFLAG_SUPPRESS_DISPATCH)) {
+ if (g_vm->getGameID() == GType_Ringworld)
+ _sceneObject->_objectWrapper->dispatch();
+ else
+ _sceneObject->updateAngle(destPos);
+ }
// Get the difference
int diffX = destPos.x - _sceneObject->_position.x;
@@ -439,8 +496,8 @@ void PlayerMover::endMove() {
}
// Set up the new interim destination along the route
- _globals->_walkRegions._routeEnds.moveSrc = _globals->_walkRegions._routeEnds.moveDest;
- _globals->_walkRegions._routeEnds.moveDest = _routeList[_routeIndex];
+ g_globals->_walkRegions._routeEnds.moveSrc = g_globals->_walkRegions._routeEnds.moveDest;
+ g_globals->_walkRegions._routeEnds.moveDest = _routeList[_routeIndex];
setup(_routeList[_routeIndex]);
dispatch();
}
@@ -448,18 +505,18 @@ void PlayerMover::endMove() {
void PlayerMover::setDest(const Common::Point &destPos) {
_routeList[0] = _sceneObject->_position;
- if (_globals->_walkRegions._resNum == -1) {
+ if (g_globals->_walkRegions._resNum == -1) {
// Scene has no walk regions defined, so player can walk anywhere directly
_routeList[0] = destPos;
_routeList[1] = Common::Point(ROUTE_END_VAL, ROUTE_END_VAL);
} else {
// Figure out a path to the destination (or as close as possible to it)
- pathfind(_routeList, _sceneObject->_position, destPos, _globals->_walkRegions._routeEnds);
+ pathfind(_routeList, _sceneObject->_position, destPos, g_globals->_walkRegions._routeEnds);
}
_routeIndex = 0;
- _globals->_walkRegions._routeEnds.moveSrc = _sceneObject->_position;
- _globals->_walkRegions._routeEnds.moveDest = _routeList[0];
+ g_globals->_walkRegions._routeEnds.moveSrc = _sceneObject->_position;
+ g_globals->_walkRegions._routeEnds.moveDest = _routeList[0];
setup(_routeList[0]);
}
@@ -472,7 +529,7 @@ void PlayerMover::pathfind(Common::Point *routeList, Common::Point srcPos, Commo
Common::Point objPos;
// Get the region the source is in
- int srcRegion = _globals->_walkRegions.indexOf(srcPos);
+ int srcRegion = g_globals->_walkRegions.indexOf(srcPos);
if (srcRegion == -1) {
srcRegion = findClosestRegion(srcPos, regionIndexes);
}
@@ -481,7 +538,7 @@ void PlayerMover::pathfind(Common::Point *routeList, Common::Point srcPos, Commo
routeRegions[0] = 0;
while (!routeRegions[0]) {
// Check the destination region
- int destRegion = _globals->_walkRegions.indexOf(destPos, &regionIndexes);
+ int destRegion = g_globals->_walkRegions.indexOf(destPos, &regionIndexes);
if ((srcRegion == -1) && (destRegion == -1)) {
// Both source and destination are outside walkable areas
@@ -492,14 +549,14 @@ void PlayerMover::pathfind(Common::Point *routeList, Common::Point srcPos, Commo
Common::Point newPos;
findLinePoint(&tempRouteEnds, &objPos, 1, &newPos);
- int srcId = _globals->_walkRegions.indexOf(newPos);
+ int srcId = g_globals->_walkRegions.indexOf(newPos);
if (srcId == -1) {
tempRouteEnds.moveDest = tempRouteEnds.moveSrc;
tempRouteEnds.moveSrc = routeEnds.moveDest;
findLinePoint(&tempRouteEnds, &objPos, 1, &newPos);
- srcRegion = _globals->_walkRegions.indexOf(newPos);
+ srcRegion = g_globals->_walkRegions.indexOf(newPos);
if (srcRegion == -1)
srcRegion = checkMover(srcPos, destPos);
@@ -532,8 +589,8 @@ void PlayerMover::pathfind(Common::Point *routeList, Common::Point srcPos, Commo
}
// field 0 holds the start, and field 1 holds the destination
- WRField18 &currSrcField = _globals->_walkRegions._field18[0];
- WRField18 &currDestField = _globals->_walkRegions._field18[1];
+ WRField18 &currSrcField = g_globals->_walkRegions._field18[0];
+ WRField18 &currDestField = g_globals->_walkRegions._field18[1];
currSrcField._pt1 = srcPos;
currSrcField._pt2 = srcPos;
@@ -551,11 +608,11 @@ void PlayerMover::pathfind(Common::Point *routeList, Common::Point srcPos, Commo
int breakEntry2 = routeRegions[idx + 1];
int listIndex = 0;
- while (_globals->_walkRegions._idxList[_globals->_walkRegions[breakEntry]._idxListIndex + listIndex] !=
+ while (g_globals->_walkRegions._idxList[g_globals->_walkRegions[breakEntry]._idxListIndex + listIndex] !=
breakEntry2)
++listIndex;
- tempList[idx] = _globals->_walkRegions._idxList2[_globals->_walkRegions[breakEntry]._idxList2Index
+ tempList[idx] = g_globals->_walkRegions._idxList2[g_globals->_walkRegions[breakEntry]._idxList2Index
+ listIndex];
++endIndex;
@@ -566,8 +623,8 @@ void PlayerMover::pathfind(Common::Point *routeList, Common::Point srcPos, Commo
int thisIdx = tempList[listIndex];
int nextIdx = tempList[listIndex + 1];
- WRField18 &thisField = _globals->_walkRegions._field18[thisIdx];
- WRField18 &nextField = _globals->_walkRegions._field18[nextIdx];
+ WRField18 &thisField = g_globals->_walkRegions._field18[thisIdx];
+ WRField18 &nextField = g_globals->_walkRegions._field18[nextIdx];
if (sub_F8E5_calculatePoint(currSrcField._pt1, nextField._pt1,
thisField._pt1, thisField._pt2) &&
@@ -616,8 +673,8 @@ void PlayerMover::pathfind(Common::Point *routeList, Common::Point srcPos, Commo
}
int PlayerMover::regionIndexOf(const Common::Point &pt) {
- for (uint idx = 0; idx < _globals->_walkRegions._regionList.size(); ++idx) {
- if (_globals->_walkRegions._regionList[idx].contains(pt))
+ for (uint idx = 0; idx < g_globals->_walkRegions._regionList.size(); ++idx) {
+ if (g_globals->_walkRegions._regionList[idx].contains(pt))
return idx + 1;
}
@@ -737,14 +794,14 @@ int PlayerMover::checkMover(Common::Point &srcPos, const Common::Point &destPos)
_sceneObject->_mover->dispatch();
// Scan walk regions for point
- for (uint idx = 0; idx < _globals->_walkRegions._regionList.size(); ++idx) {
- if (_globals->_walkRegions[idx].contains(_sceneObject->_position)) {
+ for (uint idx = 0; idx < g_globals->_walkRegions._regionList.size(); ++idx) {
+ if (g_globals->_walkRegions[idx].contains(_sceneObject->_position)) {
regionIndex = idx + 1;
srcPos = _sceneObject->_position;
break;
}
}
- } while ((regionIndex == 0) && (_sceneObject->_mover) && !_vm->shouldQuit());
+ } while ((regionIndex == 0) && (_sceneObject->_mover) && !g_vm->shouldQuit());
_sceneObject->_position = objPos;
_sceneObject->_regionBitList = regionBitList;
@@ -799,14 +856,14 @@ int PlayerMover::calculateRestOfRoute(int *routeList, int srcRegion, int destReg
return 32000;
}
- WalkRegion &srcWalkRegion = _globals->_walkRegions[srcRegion];
+ WalkRegion &srcWalkRegion = g_globals->_walkRegions[srcRegion];
int distance;
if (!routeList[0]) {
// The route is empty (new route).
distance = 0;
} else {
// Find the distance from the last region in the route.
- WalkRegion &region = _globals->_walkRegions[routeList[*routeList]];
+ WalkRegion &region = g_globals->_walkRegions[routeList[*routeList]];
distance = findDistance(srcWalkRegion._pt, region._pt);
}
@@ -827,7 +884,7 @@ int PlayerMover::calculateRestOfRoute(int *routeList, int srcRegion, int destReg
int foundIndex = 0;
int idx = 0;
int currDest;
- while ((currDest = _globals->_walkRegions._idxList[srcWalkRegion._idxListIndex + idx]) != 0) {
+ while ((currDest = g_globals->_walkRegions._idxList[srcWalkRegion._idxListIndex + idx]) != 0) {
if (currDest == destRegion) {
foundIndex = idx;
break;
@@ -838,7 +895,7 @@ int PlayerMover::calculateRestOfRoute(int *routeList, int srcRegion, int destReg
// Check every connected region until we find a route to the destination (or we have no more to check).
int bestDistance = 31990;
- while (((currDest = _globals->_walkRegions._idxList[srcWalkRegion._idxListIndex + foundIndex]) != 0) && (!foundRoute)) {
+ while (((currDest = g_globals->_walkRegions._idxList[srcWalkRegion._idxListIndex + foundIndex]) != 0) && (!foundRoute)) {
int newDistance = calculateRestOfRoute(tempList, currDest, destRegion, foundRoute);
if ((newDistance <= bestDistance) || foundRoute) {
@@ -999,7 +1056,7 @@ void PaletteModifierCached::synchronize(Serializer &s) {
PaletteRotation::PaletteRotation() : PaletteModifierCached() {
_percent = 0;
_delayCtr = 0;
- _frameNumber = _globals->_events.getFrameNumber();
+ _frameNumber = g_globals->_events.getFrameNumber();
}
void PaletteRotation::synchronize(Serializer &s) {
@@ -1017,7 +1074,7 @@ void PaletteRotation::synchronize(Serializer &s) {
void PaletteRotation::signal() {
if (_delayCtr) {
- uint32 frameNumber = _globals->_events.getFrameNumber();
+ uint32 frameNumber = g_globals->_events.getFrameNumber();
if (frameNumber >= _frameNumber) {
_delayCtr = frameNumber - _frameNumber;
@@ -1161,6 +1218,20 @@ void PaletteFader::remove() {
action->signal();
}
+void PaletteFader::setPalette(ScenePalette *palette, int step) {
+ if (step < 0) {
+ // Reverse step means moving from dest palette to source, so swap the two palettes
+ byte tempPal[256 * 3];
+ Common::copy(&palette->_palette[0], &palette->_palette[256 * 3], &tempPal[0]);
+ Common::copy(&this->_palette[0], &this->_palette[256 * 3], &palette->_palette[0]);
+ Common::copy(&tempPal[0], &tempPal[256 * 3], &this->_palette[0]);
+
+ step = -step;
+ }
+
+ PaletteModifierCached::setPalette(palette, step);
+}
+
/*--------------------------------------------------------------------------*/
ScenePalette::ScenePalette() {
@@ -1184,7 +1255,7 @@ ScenePalette::ScenePalette(int paletteNum) {
}
bool ScenePalette::loadPalette(int paletteNum) {
- byte *palData = _resourceManager->getResource(RES_PALETTE, paletteNum, 0, true);
+ byte *palData = g_resourceManager->getResource(RES_PALETTE, paletteNum, 0, true);
if (!palData)
return false;
@@ -1224,6 +1295,15 @@ void ScenePalette::setPalette(int index, int count) {
}
/**
+ * Set a palette entry
+ */
+void ScenePalette::setEntry(int index, uint r, uint g, uint b) {
+ _palette[index * 3] = r;
+ _palette[index * 3 + 1] = g;
+ _palette[index * 3 + 2] = b;
+}
+
+/**
* Returns the palette index with the closest matching color to that specified
* @param r R component
* @param g G component
@@ -1314,7 +1394,7 @@ PaletteRotation *ScenePalette::addRotation(int start, int end, int rotationMode,
return obj;
}
-PaletteFader *ScenePalette::addFader(const byte *arrBufferRGB, int palSize, int percent, Action *action) {
+PaletteFader *ScenePalette::addFader(const byte *arrBufferRGB, int palSize, int step, Action *action) {
PaletteFader *fader = new PaletteFader();
fader->_action = action;
for (int i = 0; i < 256 * 3; i += 3) {
@@ -1326,8 +1406,8 @@ PaletteFader *ScenePalette::addFader(const byte *arrBufferRGB, int palSize, int
arrBufferRGB += 3;
}
- fader->setPalette(this, percent);
- _globals->_scenePalette._listeners.push_back(fader);
+ fader->setPalette(this, step);
+ g_globals->_scenePalette._listeners.push_back(fader);
return fader;
}
@@ -1335,7 +1415,7 @@ PaletteFader *ScenePalette::addFader(const byte *arrBufferRGB, int palSize, int
void ScenePalette::changeBackground(const Rect &bounds, FadeMode fadeMode) {
ScenePalette tempPalette;
- if (_globals->_sceneManager._hasPalette) {
+ if (g_globals->_sceneManager._hasPalette) {
if ((fadeMode == FADEMODE_GRADUAL) || (fadeMode == FADEMODE_IMMEDIATE)) {
// Fade out any active palette
tempPalette.getPalette();
@@ -1348,13 +1428,17 @@ void ScenePalette::changeBackground(const Rect &bounds, FadeMode fadeMode) {
g_system->delayMillis(10);
}
} else {
- _globals->_scenePalette.refresh();
- _globals->_sceneManager._hasPalette = false;
+ g_globals->_scenePalette.refresh();
+ g_globals->_sceneManager._hasPalette = false;
}
}
- _globals->_screenSurface.copyFrom(_globals->_sceneManager._scene->_backSurface,
- bounds, Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), NULL);
+ Rect tempRect = bounds;
+ if (g_vm->getGameID() != GType_Ringworld)
+ tempRect.setHeight(BF_GLOBALS._interfaceY);
+
+ g_globals->_screenSurface.copyFrom(g_globals->_sceneManager._scene->_backSurface,
+ tempRect, Rect(0, 0, tempRect.width(), tempRect.height()), NULL);
for (SynchronizedList<PaletteModifier *>::iterator i = tempPalette._listeners.begin(); i != tempPalette._listeners.end(); ++i)
delete *i;
@@ -1395,7 +1479,20 @@ void SceneItem::synchronize(Serializer &s) {
}
void SceneItem::remove() {
- _globals->_sceneItems.remove(this);
+ g_globals->_sceneItems.remove(this);
+}
+
+bool SceneItem::startAction(CursorType action, Event &event) {
+ if (g_vm->getGameID() == GType_Ringworld) {
+ doAction(action);
+ return true;
+ } else if ((action == CURSOR_LOOK) || (action == CURSOR_USE) || (action == CURSOR_TALK) ||
+ (action < CURSOR_LOOK)) {
+ doAction(action);
+ return true;
+ } else {
+ return false;
+ }
}
void SceneItem::doAction(int action) {
@@ -1423,21 +1520,25 @@ void SceneItem::doAction(int action) {
}
bool SceneItem::contains(const Common::Point &pt) {
- const Rect &sceneBounds = _globals->_sceneManager._scene->_sceneBounds;
+ const Rect &sceneBounds = g_globals->_sceneManager._scene->_sceneBounds;
if (_sceneRegionId == 0)
return _bounds.contains(pt.x + sceneBounds.left, pt.y + sceneBounds.top);
else
- return _globals->_sceneRegions.indexOf(Common::Point(pt.x + sceneBounds.left,
+ return g_globals->_sceneRegions.indexOf(Common::Point(pt.x + sceneBounds.left,
pt.y + sceneBounds.top)) == _sceneRegionId;
}
void SceneItem::display(int resNum, int lineNum, ...) {
- Common::String msg = !resNum ? Common::String() : _resourceManager->getMessage(resNum, lineNum);
+ Common::String msg = (!resNum || (resNum == -1)) ? Common::String() :
+ g_resourceManager->getMessage(resNum, lineNum);
- if (_globals->_sceneObjects->contains(&_globals->_sceneText)) {
- _globals->_sceneText.remove();
- _globals->_sceneObjects->draw();
+ if ((g_vm->getGameID() != GType_Ringworld) && T2_GLOBALS._uiElements._active)
+ T2_GLOBALS._uiElements.hide();
+
+ if (g_globals->_sceneObjects->contains(&g_globals->_sceneText)) {
+ g_globals->_sceneText.remove();
+ g_globals->_sceneObjects->draw();
}
GfxFontBackup font;
@@ -1445,12 +1546,15 @@ void SceneItem::display(int resNum, int lineNum, ...) {
Rect textRect;
int maxWidth = 120;
bool keepOnscreen = false;
- bool centerText = true;
+ bool centerText = g_vm->getGameID() == GType_Ringworld;
- if (resNum) {
+ if (resNum != 0) {
va_list va;
va_start(va, lineNum);
+ if (resNum == -1)
+ msg = Common::String(va_arg(va, const char *));
+
int mode;
do {
// Get next instruction
@@ -1460,7 +1564,7 @@ void SceneItem::display(int resNum, int lineNum, ...) {
case SET_WIDTH:
// Set width
maxWidth = va_arg(va, int);
- _globals->_sceneText._width = maxWidth;
+ g_globals->_sceneText._width = maxWidth;
break;
case SET_X:
// Set the X Position
@@ -1472,21 +1576,21 @@ void SceneItem::display(int resNum, int lineNum, ...) {
break;
case SET_FONT:
// Set the font number
- _globals->_sceneText._fontNumber = va_arg(va, int);
- _globals->gfxManager()._font.setFontNumber(_globals->_sceneText._fontNumber);
+ g_globals->_sceneText._fontNumber = va_arg(va, int);
+ g_globals->gfxManager()._font.setFontNumber(g_globals->_sceneText._fontNumber);
break;
case SET_BG_COLOR: {
// Set the background color
int bgColor = va_arg(va, int);
- _globals->gfxManager()._font._colors.background = bgColor;
+ g_globals->gfxManager()._font._colors.background = bgColor;
if (!bgColor)
- _globals->gfxManager().setFillFlag(false);
+ g_globals->gfxManager().setFillFlag(false);
break;
}
case SET_FG_COLOR:
// Set the foreground color
- _globals->_sceneText._color1 = va_arg(va, int);
- _globals->gfxManager()._font._colors.foreground = _globals->_sceneText._color1;
+ g_globals->_sceneText._color1 = va_arg(va, int);
+ g_globals->gfxManager()._font._colors.foreground = g_globals->_sceneText._color1;
break;
case SET_KEEP_ONSCREEN:
// Suppresses immediate display
@@ -1495,15 +1599,15 @@ void SceneItem::display(int resNum, int lineNum, ...) {
case SET_EXT_BGCOLOR: {
// Set secondary bg color
int v = va_arg(va, int);
- _globals->_sceneText._color2 = v;
- _globals->gfxManager()._font._colors2.background = v;
+ g_globals->_sceneText._color2 = v;
+ g_globals->gfxManager()._font._colors2.background = v;
break;
}
case SET_EXT_FGCOLOR: {
// Set secondary fg color
int v = va_arg(va, int);
- _globals->_sceneText._color3 = v;
- _globals->gfxManager()._font._colors.foreground = v;
+ g_globals->_sceneText._color3 = v;
+ g_globals->gfxManager()._font._colors.foreground = v;
break;
}
case SET_POS_MODE:
@@ -1512,7 +1616,7 @@ void SceneItem::display(int resNum, int lineNum, ...) {
break;
case SET_TEXT_MODE:
// Set the text mode
- _globals->_sceneText._textMode = (TextAlign)va_arg(va, int);
+ g_globals->_sceneText._textMode = (TextAlign)va_arg(va, int);
break;
default:
break;
@@ -1524,27 +1628,27 @@ void SceneItem::display(int resNum, int lineNum, ...) {
if (resNum) {
// Get required bounding size
- _globals->gfxManager().getStringBounds(msg.c_str(), textRect, maxWidth);
+ g_globals->gfxManager().getStringBounds(msg.c_str(), textRect, maxWidth);
textRect.center(pos.x, pos.y);
- textRect.contain(_globals->gfxManager()._bounds);
+ textRect.contain(g_globals->gfxManager()._bounds);
if (centerText) {
- _globals->_sceneText._color1 = _globals->_sceneText._color2;
- _globals->_sceneText._color2 = 0;
- _globals->_sceneText._color3 = 0;
+ g_globals->_sceneText._color1 = g_globals->_sceneText._color2;
+ g_globals->_sceneText._color2 = 0;
+ g_globals->_sceneText._color3 = 0;
}
- _globals->_sceneText.setup(msg);
+ g_globals->_sceneText.setup(msg);
if (centerText) {
- _globals->_sceneText.setPosition(Common::Point(
- _globals->_sceneManager._scene->_sceneBounds.left + textRect.left,
- _globals->_sceneManager._scene->_sceneBounds.top + textRect.top), 0);
+ g_globals->_sceneText.setPosition(Common::Point(
+ g_globals->_sceneManager._scene->_sceneBounds.left + textRect.left,
+ g_globals->_sceneManager._scene->_sceneBounds.top + textRect.top), 0);
} else {
- _globals->_sceneText.setPosition(pos, 0);
+ g_globals->_sceneText.setPosition(pos, 0);
}
- _globals->_sceneText.fixPriority(255);
- _globals->_sceneObjects->draw();
+ g_globals->_sceneText.fixPriority(255);
+ g_globals->_sceneObjects->draw();
}
// Unless the flag is set to keep the message on-screen, show it until a mouse or keypress, then remove it
@@ -1552,77 +1656,98 @@ void SceneItem::display(int resNum, int lineNum, ...) {
Event event;
// Keep event on-screen until a mouse or keypress
- while (!_vm->getEventManager()->shouldQuit() && !_globals->_events.getEvent(event,
+ while (!g_vm->shouldQuit() && !g_globals->_events.getEvent(event,
EVENT_BUTTON_DOWN | EVENT_KEYPRESS)) {
g_system->updateScreen();
g_system->delayMillis(10);
}
- _globals->_sceneText.remove();
+ g_globals->_sceneText.remove();
}
-}
-/*--------------------------------------------------------------------------*/
+ if ((g_vm->getGameID() != GType_Ringworld) && T2_GLOBALS._uiElements._active) {
+ // Show user interface
+ T2_GLOBALS._uiElements.show();
-void SceneHotspot::doAction(int action) {
- switch ((int)action) {
- case CURSOR_LOOK:
- display(1, 0, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
- break;
- case CURSOR_USE:
- display(1, 5, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
- break;
- case CURSOR_TALK:
- display(1, 15, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
+ // Re-show the cursor
+ BF_GLOBALS._events.setCursor(BF_GLOBALS._events.getCursor());
+ }
+}
+
+void SceneItem::display2(int resNum, int lineNum) {
+ switch (g_vm->getGameID()) {
+ case GType_BlueForce:
+ display(resNum, lineNum, SET_WIDTH, 312,
+ SET_X, 4 + GLOBALS._sceneManager._scene->_sceneBounds.left,
+ 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);
break;
- case CURSOR_WALK:
+ case GType_Ringworld2:
+ display(resNum, lineNum, SET_WIDTH, 280, SET_X, 20, SET_Y, 20, SET_EXT_BGCOLOR, 60, LIST_END);
break;
default:
- display(2, action, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
+ display(resNum, lineNum, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
break;
}
}
+void SceneItem::display(const Common::String &msg) {
+ assert(g_vm->getGameID() == GType_BlueForce);
+
+ display(-1, -1, msg.c_str(),
+ SET_WIDTH, 312,
+ SET_X, 4 + GLOBALS._sceneManager._scene->_sceneBounds.left,
+ 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);
+}
+
/*--------------------------------------------------------------------------*/
-void NamedHotspot::doAction(int action) {
+bool SceneHotspot::startAction(CursorType action, Event &event) {
switch (action) {
- case CURSOR_WALK:
- // Nothing
- break;
+ case GType_BlueForce: {
+ BlueForce::SceneExt *scene = (BlueForce::SceneExt *)BF_GLOBALS._sceneManager._scene;
+ assert(scene);
+ return scene->display(action);
+ }
+ default:
+ return SceneItem::startAction(action, event);
+ }
+}
+
+void SceneHotspot::doAction(int action) {
+ switch ((int)action) {
case CURSOR_LOOK:
- if (_lookLineNum == -1)
- SceneHotspot::doAction(action);
+ if (g_vm->getGameID() == GType_BlueForce)
+ SceneItem::display(LOOK_SCENE_HOTSPOT);
else
- SceneItem::display(_resnum, _lookLineNum, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
+ display(1, 0, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
break;
case CURSOR_USE:
- if (_useLineNum == -1)
- SceneHotspot::doAction(action);
+ if (g_vm->getGameID() == GType_BlueForce)
+ SceneItem::display(USE_SCENE_HOTSPOT);
+ else
+ display(1, 5, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
+ break;
+ case CURSOR_TALK:
+ if (g_vm->getGameID() == GType_BlueForce)
+ SceneItem::display(TALK_SCENE_HOTSPOT);
else
- SceneItem::display(_resnum, _useLineNum, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
+ display(1, 15, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
+ break;
+ case CURSOR_WALK:
break;
default:
- SceneHotspot::doAction(action);
+ if (g_vm->getGameID() == GType_BlueForce)
+ SceneItem::display(DEFAULT_SCENE_HOTSPOT);
+ else
+ display(2, action, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
break;
}
}
-void NamedHotspot::setup(int ys, int xs, int ye, int xe, const int resnum, const int lookLineNum, const int useLineNum) {
- setBounds(ys, xe, ye, xs);
- _resnum = resnum;
- _lookLineNum = lookLineNum;
- _useLineNum = useLineNum;
- _globals->_sceneItems.addItems(this, NULL);
-}
-
-void NamedHotspot::synchronize(Serializer &s) {
- SceneHotspot::synchronize(s);
- s.syncAsSint16LE(_resnum);
- s.syncAsSint16LE(_lookLineNum);
- s.syncAsSint16LE(_useLineNum);
-}
-
/*--------------------------------------------------------------------------*/
void SceneObjectWrapper::setSceneObject(SceneObject *so) {
@@ -1641,12 +1766,17 @@ void SceneObjectWrapper::remove() {
}
void SceneObjectWrapper::dispatch() {
+ if (g_vm->getGameID() == GType_Ringworld)
+ check();
+}
+
+void SceneObjectWrapper::check() {
_visageImages.setVisage(_sceneObject->_visage);
- int frameCount = _visageImages.getFrameCount();
+ int visageCount = _visageImages.getFrameCount();
int angle = _sceneObject->_angle;
int strip = _sceneObject->_strip;
- if (frameCount == 4) {
+ if (visageCount == 4) {
if ((angle > 314) || (angle < 45))
strip = 4;
if ((angle > 44) && (angle < 135))
@@ -1655,7 +1785,7 @@ void SceneObjectWrapper::dispatch() {
strip = 3;
if ((angle >= 225) && (angle < 315))
strip = 2;
- } else if (frameCount == 8) {
+ } else if (visageCount == 8) {
if ((angle > 330) || (angle < 30))
strip = 4;
if ((angle >= 30) && (angle < 70))
@@ -1674,8 +1804,8 @@ void SceneObjectWrapper::dispatch() {
strip = 8;
}
- if (strip > frameCount)
- strip = frameCount;
+ if (strip > visageCount)
+ strip = visageCount;
_sceneObject->setStrip(strip);
}
@@ -1699,9 +1829,12 @@ SceneObject::SceneObject() : SceneHotspot() {
_sceneRegionId = 0;
_percent = 100;
_flags |= OBJFLAG_PANES;
+ _priority = 0;
_frameChange = 0;
_visage = 0;
+ _strip = 0;
+ _frame = 0;
}
SceneObject::SceneObject(const SceneObject &so) : SceneHotspot() {
@@ -1745,7 +1878,7 @@ void SceneObject::animEnded() {
int SceneObject::changeFrame() {
int frameNum = _frame;
- uint32 mouseCtr = _globals->_events.getFrameNumber();
+ uint32 mouseCtr = g_globals->_events.getFrameNumber();
if ((_updateStartFrame <= mouseCtr) || (_animateMode == ANIM_MODE_1)) {
if (_numFrames > 0) {
@@ -1856,7 +1989,7 @@ void SceneObject::addMover(ObjectMover *mover, ...) {
if (mover) {
// Set up the assigned mover
- _walkStartFrame = _globals->_events.getFrameNumber();
+ _walkStartFrame = g_globals->_events.getFrameNumber();
if (_moveRate != 0)
_walkStartFrame = 60 / _moveRate;
@@ -1879,7 +2012,7 @@ void SceneObject::getHorizBounds() {
}
int SceneObject::getRegionIndex() {
- return _globals->_sceneRegions.indexOf(_position);
+ return g_globals->_sceneRegions.indexOf(_position);
}
int SceneObject::checkRegion(const Common::Point &pt) {
@@ -1890,7 +2023,7 @@ int SceneObject::checkRegion(const Common::Point &pt) {
Common::Point savedPos = _position;
_position = pt;
- int regIndex = _globals->_sceneRegions.indexOf(pt);
+ int regIndex = g_globals->_sceneRegions.indexOf(pt);
if (_regionBitList & (1 << regIndex))
regionIndex = regIndex;
@@ -1912,13 +2045,13 @@ int SceneObject::checkRegion(const Common::Point &pt) {
newY -= _yDiff;
SynchronizedList<SceneObject *>::iterator i;
- for (i = _globals->_sceneObjects->begin(); (regionIndex == 0) && (i != _globals->_sceneObjects->end()); ++i) {
+ for (i = g_globals->_sceneObjects->begin(); (regionIndex == 0) && (i != g_globals->_sceneObjects->end()); ++i) {
if ((*i) && ((*i)->_flags & OBJFLAG_CHECK_REGION)) {
int objYDiff = (*i)->_position.y - _yDiff;
if ((objYDiff >= yPos) && (objYDiff <= newY) &&
((*i)->_xs < tempRect.right) && ((*i)->_xe > tempRect.left)) {
// Found index
- regionIndex = -1; //****DEBUG*** = *i;
+ regionIndex = (*i)->_regionIndex;
break;
}
}
@@ -1929,7 +2062,7 @@ int SceneObject::checkRegion(const Common::Point &pt) {
void SceneObject::animate(AnimateMode animMode, ...) {
_animateMode = animMode;
- _updateStartFrame = _globals->_events.getFrameNumber();
+ _updateStartFrame = g_globals->_events.getFrameNumber();
if (_numFrames)
_updateStartFrame += 60 / _numFrames;
@@ -1988,6 +2121,7 @@ void SceneObject::animate(AnimateMode animMode, ...) {
break;
case ANIM_MODE_8:
+ case ANIM_MODE_9:
_field68 = va_arg(va, int);
_endAction = va_arg(va, Action *);
_frameChange = 1;
@@ -2004,9 +2138,19 @@ SceneObject *SceneObject::clone() const {
}
void SceneObject::checkAngle(const SceneObject *obj) {
- _angle = GfxManager::getAngle(_position, obj->_position);
+ checkAngle(obj->_position);
+}
- if (_objectWrapper)
+void SceneObject::checkAngle(const Common::Point &pt) {
+ int angleAmount = GfxManager::getAngle(_position, pt);
+ if (angleAmount != -1) {
+ _angle = angleAmount;
+
+ if (_animateMode == ANIM_MODE_9)
+ _angle = (angleAmount + 180) % 360;
+ }
+
+ if (_objectWrapper && (g_vm->getGameID() == GType_Ringworld))
_objectWrapper->dispatch();
}
@@ -2063,7 +2207,7 @@ void SceneObject::synchronize(Serializer &s) {
void SceneObject::postInit(SceneObjectList *OwnerList) {
if (!OwnerList)
- OwnerList = _globals->_sceneObjects;
+ OwnerList = g_globals->_sceneObjects;
if (!OwnerList->contains(this)) {
_percent = 100;
@@ -2091,7 +2235,7 @@ void SceneObject::postInit(SceneObjectList *OwnerList) {
void SceneObject::remove() {
SceneItem::remove();
- if (_globals->_sceneObjects->contains(this))
+ if (g_globals->_sceneObjects->contains(this))
// For objects in the object list, flag the object for removal in the next drawing, so that
// the drawing code has a chance to restore the area previously covered by the object
_flags |= OBJFLAG_PANES | OBJFLAG_REMOVE | OBJFLAG_HIDE;
@@ -2101,7 +2245,7 @@ void SceneObject::remove() {
}
void SceneObject::dispatch() {
- uint32 currTime = _globals->_events.getFrameNumber();
+ uint32 currTime = g_globals->_events.getFrameNumber();
if (_action)
_action->dispatch();
@@ -2145,7 +2289,7 @@ void SceneObject::dispatch() {
int frameNum = 0;
do {
int count = getFrameCount();
- frameNum = _globals->_randomSource.getRandomNumber(count - 1);
+ frameNum = g_globals->_randomSource.getRandomNumber(count - 1);
} while (frameNum == _frame);
setFrame(frameNum);
@@ -2174,7 +2318,25 @@ void SceneObject::dispatch() {
} else {
setFrame(changeFrame());
}
+ break;
+
+ case ANIM_MODE_9:
+ if (_frame == _endFrame) {
+ if (_frameChange != -1) {
+ _frameChange = -1;
+ _strip = ((_strip - 1) ^ 1) + 1;
+ _endFrame = 1;
+ } else if ((_field68 == 0) || (--_field68 != 0)) {
+ _frameChange = 1;
+ _endFrame = getFrameCount();
+ setFrame(changeFrame());
+ } else {
+ animEnded();
+ }
+ } else {
+ setFrame(changeFrame());
+ }
break;
default:
@@ -2185,7 +2347,7 @@ void SceneObject::dispatch() {
// Handle updating the zoom and/or priority
if (!(_flags & OBJFLAG_ZOOMED)) {
int yp = CLIP((int)_position.y, 0, 255);
- setZoom(_globals->_sceneManager._scene->_zoomPercents[yp]);
+ setZoom(g_globals->_sceneManager._scene->_zoomPercents[yp]);
}
if (!(_flags & OBJFLAG_FIXED_PRIORITY)) {
setPriority(_position.y);
@@ -2199,12 +2361,8 @@ void SceneObject::calcAngle(const Common::Point &pt) {
}
void SceneObject::removeObject() {
- _globals->_sceneItems.remove(this);
- _globals->_sceneObjects->remove(this);
-
- if (_visage) {
- _visage = 0;
- }
+ g_globals->_sceneItems.remove(this);
+ g_globals->_sceneObjects->remove(this);
if (_objectWrapper) {
_objectWrapper->remove();
@@ -2236,11 +2394,11 @@ void SceneObject::reposition() {
*/
void SceneObject::draw() {
Rect destRect = _bounds;
- destRect.translate(-_globals->_sceneManager._scene->_sceneBounds.left,
- -_globals->_sceneManager._scene->_sceneBounds.top);
- Region *priorityRegion = _globals->_sceneManager._scene->_priorities.find(_priority);
+ destRect.translate(-g_globals->_sceneManager._scene->_sceneBounds.left,
+ -g_globals->_sceneManager._scene->_sceneBounds.top);
+ Region *priorityRegion = g_globals->_sceneManager._scene->_priorities.find(_priority);
GfxSurface frame = getFrame();
- _globals->gfxManager().copyFrom(frame, destRect, priorityRegion);
+ g_globals->gfxManager().copyFrom(frame, destRect, priorityRegion);
}
/**
@@ -2249,20 +2407,32 @@ void SceneObject::draw() {
*/
void SceneObject::updateScreen() {
Rect srcRect = _paneRects[CURRENT_PANENUM];
- const Rect &sceneBounds = _globals->_sceneManager._scene->_sceneBounds;
+ const Rect &sceneBounds = g_globals->_sceneManager._scene->_sceneBounds;
srcRect.left = (srcRect.left / 4) * 4;
srcRect.right = ((srcRect.right + 3) / 4) * 4;
- srcRect.clip(_globals->_sceneManager._scene->_sceneBounds);
+ srcRect.clip(g_globals->_sceneManager._scene->_sceneBounds);
if (srcRect.isValidRect()) {
Rect destRect = srcRect;
destRect.translate(-sceneBounds.left, -sceneBounds.top);
- srcRect.translate(-_globals->_sceneOffset.x, -_globals->_sceneOffset.y);
+ srcRect.translate(-g_globals->_sceneOffset.x, -g_globals->_sceneOffset.y);
- _globals->_screenSurface.copyFrom(_globals->_sceneManager._scene->_backSurface, srcRect, destRect);
+ g_globals->_screenSurface.copyFrom(g_globals->_sceneManager._scene->_backSurface, srcRect, destRect);
}
}
+void SceneObject::updateAngle(const Common::Point &pt) {
+ checkAngle(pt);
+ if (_objectWrapper)
+ _objectWrapper->check();
+}
+
+void SceneObject::changeAngle(int angle) {
+ _angle = angle;
+ if (_objectWrapper)
+ _objectWrapper->check();
+}
+
void SceneObject::setup(int visage, int stripFrameNum, int frameNum, int posX, int posY, int priority) {
postInit();
setVisage(visage);
@@ -2272,6 +2442,33 @@ void SceneObject::setup(int visage, int stripFrameNum, int frameNum, int posX, i
fixPriority(priority);
}
+void SceneObject::setup(int visage, int stripFrameNum, int frameNum) {
+ postInit();
+ setVisage(visage);
+ setStrip(stripFrameNum);
+ setFrame(frameNum);
+}
+
+/*--------------------------------------------------------------------------*/
+
+void BackgroundSceneObject::postInit(SceneObjectList *OwnerList) {
+ SceneObjectList dummyList;
+ SceneObjectList *pList = !g_globals->_sceneManager._scene ? &dummyList :
+ &g_globals->_sceneManager._scene->_bgSceneObjects;
+
+ SceneObject::postInit(pList);
+}
+
+void BackgroundSceneObject::draw() {
+ assert(g_globals->_sceneManager._scene);
+ Rect destRect = _bounds;
+ destRect.translate(-g_globals->_sceneManager._scene->_sceneBounds.left,
+ -g_globals->_sceneManager._scene->_sceneBounds.top);
+ Region *priorityRegion = g_globals->_sceneManager._scene->_priorities.find(_priority);
+ GfxSurface frame = getFrame();
+ g_globals->_sceneManager._scene->_backSurface.copyFrom(frame, destRect, priorityRegion);
+}
+
/*--------------------------------------------------------------------------*/
void SceneObjectList::draw() {
@@ -2282,27 +2479,27 @@ void SceneObjectList::draw() {
if (_objList.size() == 0) {
// Alternate draw mode
- if (_globals->_paneRefreshFlag[paneNum] == 1) {
+ if (g_globals->_paneRefreshFlag[paneNum] == 1) {
// Load the background
- _globals->_sceneManager._scene->refreshBackground(0, 0);
+ g_globals->_sceneManager._scene->refreshBackground(0, 0);
- Rect tempRect = _globals->_sceneManager._scene->_sceneBounds;
- tempRect.translate(-_globals->_sceneOffset.x, -_globals->_sceneOffset.y);
- ScenePalette::changeBackground(tempRect, _globals->_sceneManager._fadeMode);
+ Rect tempRect = g_globals->_sceneManager._scene->_sceneBounds;
+ tempRect.translate(-g_globals->_sceneOffset.x, -g_globals->_sceneOffset.y);
+ ScenePalette::changeBackground(tempRect, g_globals->_sceneManager._fadeMode);
} else {
- _globals->_paneRegions[CURRENT_PANENUM].draw();
+ g_globals->_paneRegions[CURRENT_PANENUM].draw();
}
- _globals->_paneRegions[CURRENT_PANENUM].setRect(0, 0, 0, 0);
- _globals->_sceneManager.fadeInIfNecessary();
+ g_globals->_paneRegions[CURRENT_PANENUM].setRect(0, 0, 0, 0);
+ g_globals->_sceneManager.fadeInIfNecessary();
} else {
// If there is a scroll follower, check whether it has moved off-screen
- if (_globals->_scrollFollower) {
- const Rect &scrollerRect = _globals->_sceneManager._scrollerRect;
+ if (g_globals->_scrollFollower) {
+ const Rect &scrollerRect = g_globals->_sceneManager._scrollerRect;
Common::Point objPos(
- _globals->_scrollFollower->_position.x - _globals->_sceneManager._scene->_sceneBounds.left,
- _globals->_scrollFollower->_position.y - _globals->_sceneManager._scene->_sceneBounds.top);
+ g_globals->_scrollFollower->_position.x - g_globals->_sceneManager._scene->_sceneBounds.left,
+ g_globals->_scrollFollower->_position.y - g_globals->_sceneManager._scene->_sceneBounds.top);
int loadCount = 0;
if (objPos.x >= scrollerRect.right) {
@@ -2323,21 +2520,21 @@ void SceneObjectList::draw() {
}
if (loadCount > 0)
- _globals->_sceneManager.setBgOffset(Common::Point(xAmount, yAmount), loadCount);
+ g_globals->_sceneManager.setBgOffset(Common::Point(xAmount, yAmount), loadCount);
}
- if (_globals->_sceneManager._sceneLoadCount > 0) {
- --_globals->_sceneManager._sceneLoadCount;
- _globals->_sceneManager._scene->loadBackground(_globals->_sceneManager._sceneBgOffset.x,
- _globals->_sceneManager._sceneBgOffset.y);
+ if (g_globals->_sceneManager._sceneLoadCount > 0) {
+ --g_globals->_sceneManager._sceneLoadCount;
+ g_globals->_sceneManager._scene->loadBackground(g_globals->_sceneManager._sceneBgOffset.x,
+ g_globals->_sceneManager._sceneBgOffset.y);
}
// Set up the flag mask
uint32 flagMask = (paneNum == 0) ? OBJFLAG_PANE_0 : OBJFLAG_PANE_1;
// Initial loop to set up object list and update object position, priority, and flags
- for (SynchronizedList<SceneObject *>::iterator i = _globals->_sceneObjects->begin();
- i != _globals->_sceneObjects->end(); ++i) {
+ for (SynchronizedList<SceneObject *>::iterator i = g_globals->_sceneObjects->begin();
+ i != g_globals->_sceneObjects->end(); ++i) {
SceneObject *obj = *i;
objList.push_back(obj);
@@ -2350,10 +2547,10 @@ void SceneObjectList::draw() {
// Handle updating object priority
if (!(obj->_flags & OBJFLAG_FIXED_PRIORITY)) {
obj->_priority = MIN((int)obj->_position.y,
- (int)_globals->_sceneManager._scene->_backgroundBounds.bottom - 1);
+ (int)g_globals->_sceneManager._scene->_backgroundBounds.bottom - 1);
}
- if ((_globals->_paneRefreshFlag[paneNum] != 0) || !_globals->_paneRegions[paneNum].empty()) {
+ if ((g_globals->_paneRefreshFlag[paneNum] != 0) || !g_globals->_paneRegions[paneNum].empty()) {
obj->_flags |= flagMask;
}
}
@@ -2362,20 +2559,20 @@ void SceneObjectList::draw() {
checkIntersection(objList, objList.size(), CURRENT_PANENUM);
sortList(objList);
- if (_globals->_paneRefreshFlag[paneNum] == 1) {
+ if (g_globals->_paneRefreshFlag[paneNum] == 1) {
// Load the background
- _globals->_sceneManager._scene->refreshBackground(0, 0);
+ g_globals->_sceneManager._scene->refreshBackground(0, 0);
}
- _globals->_sceneManager._scene->_sceneBounds.left &= ~3;
- _globals->_sceneManager._scene->_sceneBounds.right &= ~3;
- _globals->_sceneOffset.x &= ~3;
+ g_globals->_sceneManager._scene->_sceneBounds.left &= ~3;
+ g_globals->_sceneManager._scene->_sceneBounds.right &= ~3;
+ g_globals->_sceneOffset.x &= ~3;
- if (_globals->_paneRefreshFlag[paneNum] != 0) {
+ if (g_globals->_paneRefreshFlag[paneNum] != 0) {
// Change the background
- Rect tempRect = _globals->_sceneManager._scene->_sceneBounds;
- tempRect.translate(-_globals->_sceneOffset.x, -_globals->_sceneOffset.y);
- ScenePalette::changeBackground(tempRect, _globals->_sceneManager._fadeMode);
+ Rect tempRect = g_globals->_sceneManager._scene->_sceneBounds;
+ tempRect.translate(-g_globals->_sceneOffset.x, -g_globals->_sceneOffset.y);
+ ScenePalette::changeBackground(tempRect, g_globals->_sceneManager._fadeMode);
} else {
for (uint objIndex = 0; objIndex < objList.size(); ++objIndex) {
SceneObject *obj = objList[objIndex];
@@ -2384,10 +2581,10 @@ void SceneObjectList::draw() {
obj->updateScreen();
}
- _globals->_paneRegions[paneNum].draw();
+ g_globals->_paneRegions[paneNum].draw();
}
- _globals->_paneRegions[paneNum].setRect(0, 0, 0, 0);
+ g_globals->_paneRegions[paneNum].setRect(0, 0, 0, 0);
redraw:
// Main draw loop
for (uint objIndex = 0; objIndex < objList.size(); ++objIndex) {
@@ -2400,9 +2597,9 @@ redraw:
}
// Update the palette
- _globals->_sceneManager.fadeInIfNecessary();
- _globals->_sceneManager._loadMode = 0;
- _globals->_paneRefreshFlag[paneNum] = 0;
+ g_globals->_sceneManager.fadeInIfNecessary();
+ g_globals->_sceneManager._loadMode = 0;
+ g_globals->_paneRefreshFlag[paneNum] = 0;
// Loop through the object list, removing any objects and refreshing the screen as necessary
for (uint objIndex = 0; objIndex < objList.size(); ++objIndex) {
@@ -2485,9 +2682,9 @@ void SceneObjectList::sortList(Common::Array<SceneObject *> &ObjList) {
}
void SceneObjectList::activate() {
- SceneObjectList *objectList = _globals->_sceneObjects;
- _globals->_sceneObjects = this;
- _globals->_sceneObjects_queue.push_front(this);
+ SceneObjectList *objectList = g_globals->_sceneObjects;
+ g_globals->_sceneObjects = this;
+ g_globals->_sceneObjects_queue.push_front(this);
// Flag all the objects as modified
SynchronizedList<SceneObject *>::iterator i;
@@ -2504,19 +2701,19 @@ void SceneObjectList::activate() {
}
void SceneObjectList::deactivate() {
- if (_globals->_sceneObjects_queue.size() <= 1)
+ if (g_globals->_sceneObjects_queue.size() <= 1)
return;
- SceneObjectList *objectList = *_globals->_sceneObjects_queue.begin();
- _globals->_sceneObjects_queue.pop_front();
- _globals->_sceneObjects = *_globals->_sceneObjects_queue.begin();
+ SceneObjectList *objectList = *g_globals->_sceneObjects_queue.begin();
+ g_globals->_sceneObjects_queue.pop_front();
+ g_globals->_sceneObjects = *g_globals->_sceneObjects_queue.begin();
SynchronizedList<SceneObject *>::iterator i;
for (i = objectList->begin(); i != objectList->end(); ++i) {
if (!((*i)->_flags & OBJFLAG_CLONED)) {
SceneObject *sceneObj = (*i)->clone();
sceneObj->_flags |= OBJFLAG_HIDE | OBJFLAG_REMOVE | OBJFLAG_CLONED;
- _globals->_sceneObjects->push_front(sceneObj);
+ g_globals->_sceneObjects->push_front(sceneObj);
}
}
}
@@ -2545,6 +2742,14 @@ void SceneText::setup(const Common::String &msg) {
gfxMan.activate();
Rect textRect;
+ if ((g_vm->getGameID() != GType_Ringworld) && g_globals->_sceneObjects->contains(this) &&
+ (_flags & OBJFLAG_REMOVE)) {
+ // Trying to setup a SceneText scheduled to be removed, so remove it now
+ _bounds.expandPanes();
+ this->removeObject();
+ g_globals->_sceneObjects->remove(this);
+ }
+
gfxMan._font.setFontNumber(_fontNumber);
gfxMan._font._colors.foreground = _color1;
gfxMan._font._colors2.background = _color2;
@@ -2582,12 +2787,21 @@ void SceneText::synchronize(Serializer &s) {
_textSurface.synchronize(s);
}
+void SceneText::updateScreen() {
+ // FIXME: Hack for Blue Force to handle not refreshing the screen if the user interface
+ // has been re-activated after showing some scene text
+ if ((g_vm->getGameID() != GType_BlueForce) || (_bounds.top < UI_INTERFACE_Y) ||
+ !T2_GLOBALS._uiElements._visible)
+ SceneObject::updateScreen();
+}
+
/*--------------------------------------------------------------------------*/
Visage::Visage() {
- _resNum = 0;
- _rlbNum = 0;
+ _resNum = -1;
+ _rlbNum = -1;
_data = NULL;
+ _flipHoriz = false;
}
Visage::Visage(const Visage &v) {
@@ -2595,7 +2809,7 @@ Visage::Visage(const Visage &v) {
_rlbNum = v._rlbNum;
_data = v._data;
if (_data)
- _vm->_memoryManager.incLocks(_data);
+ g_vm->_memoryManager.incLocks(_data);
}
Visage &Visage::operator=(const Visage &s) {
@@ -2603,7 +2817,7 @@ Visage &Visage::operator=(const Visage &s) {
_rlbNum = s._rlbNum;
_data = s._data;
if (_data)
- _vm->_memoryManager.incLocks(_data);
+ g_vm->_memoryManager.incLocks(_data);
return *this;
}
@@ -2613,7 +2827,37 @@ void Visage::setVisage(int resNum, int rlbNum) {
_resNum = resNum;
_rlbNum = rlbNum;
DEALLOCATE(_data);
- _data = _resourceManager->getResource(RES_VISAGE, resNum, rlbNum);
+
+ if (g_vm->getGameID() == GType_Ringworld) {
+ // In Ringworld, we immediately get the data
+ _data = g_resourceManager->getResource(RES_VISAGE, resNum, rlbNum);
+ } else {
+ // Games after Ringworld have an extra indirection via the visage index file
+ byte *indexData = g_resourceManager->getResource(RES_VISAGE, resNum, 9999);
+ if (rlbNum == 9999) {
+ _data = indexData;
+ } else {
+ if (rlbNum == 0)
+ rlbNum = 1;
+
+ // Check how many slots there are
+ uint16 count = READ_LE_UINT16(indexData);
+ if (rlbNum > count)
+ rlbNum = count;
+
+ // Get the flags/rlbNum to use
+ uint32 v = READ_LE_UINT32(indexData + (rlbNum - 1) * 4 + 2);
+ int flags = v >> 30;
+
+ if (flags & 3) {
+ rlbNum = (int)(v & 0xff);
+ }
+ _flipHoriz = flags & 1;
+
+ _data = g_resourceManager->getResource(RES_VISAGE, resNum, rlbNum);
+ }
+ }
+
assert(_data);
}
}
@@ -2632,17 +2876,33 @@ GfxSurface Visage::getFrame(int frameNum) {
int offset = READ_LE_UINT32(_data + 2 + frameNum * 4);
byte *frameData = _data + offset;
- return surfaceFromRes(frameData);
+ GfxSurface result = surfaceFromRes(frameData);
+ if (_flipHoriz) flip(result);
+ return result;
}
int Visage::getFrameCount() const {
return READ_LE_UINT16(_data);
}
+void Visage::flip(GfxSurface &gfxSurface) {
+ Graphics::Surface s = gfxSurface.lockSurface();
+
+ for (int y = 0; y < s.h; ++y) {
+ // Flip the line
+ byte *lineP = (byte *)s.getBasePtr(0, y);
+ for (int x = 0; x < (s.w / 2); ++x)
+ SWAP(lineP[x], lineP[s.w - x - 1]);
+ }
+
+ gfxSurface.unlockSurface();
+}
+
/*--------------------------------------------------------------------------*/
Player::Player(): SceneObject() {
_canWalk = false;
+ _enabled = false;
_uiEnabled = false;
_field8C = 0;
}
@@ -2661,35 +2921,63 @@ void Player::postInit(SceneObjectList *OwnerList) {
void Player::disableControl() {
_canWalk = false;
_uiEnabled = false;
- _globals->_events.setCursor(CURSOR_NONE);
+ g_globals->_events.setCursor(CURSOR_NONE);
+ _enabled = false;
+
+ if ((g_vm->getGameID() == GType_BlueForce) && T2_GLOBALS._uiElements._active)
+ T2_GLOBALS._uiElements.hide();
}
void Player::enableControl() {
+ CursorType cursor;
+
_canWalk = true;
_uiEnabled = true;
- _globals->_events.setCursor(CURSOR_WALK);
+ _enabled = true;
- switch (_globals->_events.getCursor()) {
- case CURSOR_WALK:
- case CURSOR_LOOK:
- case CURSOR_USE:
- case CURSOR_TALK:
- _globals->_events.setCursor(_globals->_events.getCursor());
+ switch (g_vm->getGameID()) {
+ case GType_BlueForce:
+ case GType_Ringworld2:
+ cursor = g_globals->_events.getCursor();
+ g_globals->_events.setCursor(cursor);
+
+ if (T2_GLOBALS._uiElements._active)
+ T2_GLOBALS._uiElements.show();
break;
+
default:
- _globals->_events.setCursor(CURSOR_WALK);
+ // Ringworld
+ g_globals->_events.setCursor(CURSOR_WALK);
+
+ switch (g_globals->_events.getCursor()) {
+ case CURSOR_WALK:
+ case CURSOR_LOOK:
+ case CURSOR_USE:
+ case CURSOR_TALK:
+ g_globals->_events.setCursor(g_globals->_events.getCursor());
+ break;
+ default:
+ g_globals->_events.setCursor(CURSOR_WALK);
+ break;
+ }
break;
}
}
void Player::process(Event &event) {
+ if ((g_vm->getGameID() != GType_Ringworld) && _action)
+ _action->process(event);
+
if (!event.handled && (event.eventType == EVENT_BUTTON_DOWN) &&
- (_globals->_events.getCursor() == CURSOR_WALK) && _globals->_player._canWalk &&
- (_position != event.mousePos) && _globals->_sceneObjects->contains(this)) {
+ (g_globals->_events.getCursor() == CURSOR_WALK) && g_globals->_player._canWalk &&
+ (_position != event.mousePos) && g_globals->_sceneObjects->contains(this)) {
+
+ if ((g_vm->getGameID() == GType_BlueForce) && !BF_GLOBALS._player._enabled)
+ return;
PlayerMover *newMover = new PlayerMover();
- Common::Point destPos(event.mousePos.x + _globals->_sceneManager._scene->_sceneBounds.left,
- event.mousePos.y + _globals->_sceneManager._scene->_sceneBounds.top);
+ Common::Point destPos(event.mousePos.x + g_globals->_sceneManager._scene->_sceneBounds.left,
+ event.mousePos.y + g_globals->_sceneManager._scene->_sceneBounds.top);
addMover(newMover, &destPos, NULL);
event.handled = true;
@@ -2702,6 +2990,9 @@ void Player::synchronize(Serializer &s) {
s.syncAsByte(_canWalk);
s.syncAsByte(_uiEnabled);
s.syncAsSint16LE(_field8C);
+
+ if (g_vm->getGameID() == GType_BlueForce)
+ s.syncAsByte(_enabled);
}
/*--------------------------------------------------------------------------*/
@@ -2709,7 +3000,7 @@ void Player::synchronize(Serializer &s) {
Region::Region(int resNum, int rlbNum, ResourceType ctlType) {
_regionId = rlbNum;
- byte *regionData = _resourceManager->getResource(ctlType, resNum, rlbNum);
+ byte *regionData = g_resourceManager->getResource(ctlType, resNum, rlbNum);
assert(regionData);
load(regionData);
@@ -2844,7 +3135,7 @@ LineSliceSet Region::mergeSlices(const LineSliceSet &set1, const LineSliceSet &s
* Copies the background covered by the given region to the screen surface
*/
void Region::draw() {
- Rect &sceneBounds = _globals->_sceneManager._scene->_sceneBounds;
+ Rect &sceneBounds = g_globals->_sceneManager._scene->_sceneBounds;
for (int yp = sceneBounds.top; yp < sceneBounds.bottom; ++yp) {
// Generate a line slice set
@@ -2859,10 +3150,10 @@ void Region::draw() {
rect1.right = (rect1.right + 3) & ~3;
Rect rect2 = rect1;
- rect1.translate(-_globals->_sceneOffset.x, -_globals->_sceneOffset.y);
+ rect1.translate(-g_globals->_sceneOffset.x, -g_globals->_sceneOffset.y);
rect2.translate(-sceneBounds.left, -sceneBounds.top);
- _globals->gfxManager().getSurface().copyFrom(_globals->_sceneManager._scene->_backSurface,
+ g_globals->gfxManager().getSurface().copyFrom(g_globals->_sceneManager._scene->_backSurface,
rect1, rect2);
}
}
@@ -2927,8 +3218,8 @@ void Region::uniteRect(const Rect &rect) {
void SceneRegions::load(int sceneNum) {
clear();
- bool altRegions = _vm->getFeatures() & GF_ALT_REGIONS;
- byte *regionData = _resourceManager->getResource(RES_CONTROL, sceneNum, altRegions ? 1 : 9999, true);
+ bool altRegions = g_vm->getFeatures() & GF_ALT_REGIONS;
+ byte *regionData = g_resourceManager->getResource(RES_CONTROL, sceneNum, altRegions ? 1 : 9999, true);
if (regionData) {
int regionCount = READ_LE_UINT16(regionData);
@@ -3149,7 +3440,7 @@ void WalkRegions::load(int sceneNum) {
clear();
_resNum = sceneNum;
- if (_vm->getFeatures() & GF_ALT_REGIONS) {
+ if (g_vm->getFeatures() & GF_ALT_REGIONS) {
loadRevised();
} else {
loadOriginal();
@@ -3160,7 +3451,7 @@ void WalkRegions::load(int sceneNum) {
* This version handles loading walk regions for Ringworld floppy version and Demo #1
*/
void WalkRegions::loadOriginal() {
- byte *regionData = _resourceManager->getResource(RES_WALKRGNS, _resNum, 1, true);
+ byte *regionData = g_resourceManager->getResource(RES_WALKRGNS, _resNum, 1, true);
if (!regionData) {
// No data, so return
_resNum = -1;
@@ -3171,8 +3462,8 @@ void WalkRegions::loadOriginal() {
int dataSize;
// Load the field 18 list
- dataP = _resourceManager->getResource(RES_WALKRGNS, _resNum, 2);
- dataSize = _vm->_memoryManager.getSize(dataP);
+ dataP = g_resourceManager->getResource(RES_WALKRGNS, _resNum, 2);
+ dataSize = g_vm->_memoryManager.getSize(dataP);
assert(dataSize % 10 == 0);
byte *p = dataP;
@@ -3185,8 +3476,8 @@ void WalkRegions::loadOriginal() {
DEALLOCATE(dataP);
// Load the idx list
- dataP = _resourceManager->getResource(RES_WALKRGNS, _resNum, 3);
- dataSize = _vm->_memoryManager.getSize(dataP);
+ dataP = g_resourceManager->getResource(RES_WALKRGNS, _resNum, 3);
+ dataSize = g_vm->_memoryManager.getSize(dataP);
assert(dataSize % 2 == 0);
p = dataP;
@@ -3196,8 +3487,8 @@ void WalkRegions::loadOriginal() {
DEALLOCATE(dataP);
// Load the secondary idx list
- dataP = _resourceManager->getResource(RES_WALKRGNS, _resNum, 4);
- dataSize = _vm->_memoryManager.getSize(dataP);
+ dataP = g_resourceManager->getResource(RES_WALKRGNS, _resNum, 4);
+ dataSize = g_vm->_memoryManager.getSize(dataP);
assert(dataSize % 2 == 0);
p = dataP;
@@ -3207,7 +3498,7 @@ void WalkRegions::loadOriginal() {
DEALLOCATE(dataP);
// Handle the loading of the actual regions themselves
- dataP = _resourceManager->getResource(RES_WALKRGNS, _resNum, 5);
+ dataP = g_resourceManager->getResource(RES_WALKRGNS, _resNum, 5);
byte *pWalkRegion = regionData + 16;
byte *srcP = dataP;
@@ -3238,7 +3529,7 @@ void WalkRegions::loadOriginal() {
* version, it may also be used by future game titles
*/
void WalkRegions::loadRevised() {
- byte *regionData = _resourceManager->getResource(RES_WALKRGNS, _resNum, 2, true);
+ byte *regionData = g_resourceManager->getResource(RES_WALKRGNS, _resNum, 2, true);
if (!regionData) {
// No data, so return
_resNum = -1;
@@ -3321,8 +3612,8 @@ void ScenePriorities::load(int resNum) {
_resNum = resNum;
clear();
- bool altMode = (_vm->getFeatures() & GF_ALT_REGIONS) != 0;
- byte *regionData = _resourceManager->getResource(RES_PRIORITY, resNum, altMode ? 1 : 9999, true);
+ bool altMode = (g_vm->getFeatures() & GF_ALT_REGIONS) != 0;
+ byte *regionData = g_resourceManager->getResource(RES_PRIORITY, resNum, altMode ? 1 : 9999, true);
if (!regionData)
return;
@@ -3346,8 +3637,11 @@ void ScenePriorities::load(int resNum) {
Region *ScenePriorities::find(int priority) {
// If no priority regions are loaded, then return the placeholder region
- if (empty())
- return &_defaultPriorityRegion;
+ if (empty()) {
+ if (g_vm->getGameID() == GType_Ringworld)
+ return &_defaultPriorityRegion;
+ return NULL;
+ }
if (priority > 255)
priority = 255;
@@ -3400,8 +3694,8 @@ GameHandler::GameHandler() : EventHandler() {
}
GameHandler::~GameHandler() {
- if (_globals)
- _globals->_game->removeHandler(this);
+ if (g_globals)
+ g_globals->_game->removeHandler(this);
}
void GameHandler::execute() {
@@ -3426,93 +3720,142 @@ void GameHandler::synchronize(Serializer &s) {
SceneHandler::SceneHandler() {
_saveGameSlot = -1;
_loadGameSlot = -1;
+ _prevFrameNumber = 0;
}
void SceneHandler::registerHandler() {
postInit();
- _globals->_game->addHandler(this);
+ g_globals->_game->addHandler(this);
+}
+
+uint32 SceneHandler::getFrameDifference() {
+ return GLOBALS._events.getFrameNumber() - _prevFrameNumber;
}
void SceneHandler::postInit(SceneObjectList *OwnerList) {
_delayTicks = 2;
- _globals->_scenePalette.loadPalette(0);
- _globals->_scenePalette.refresh();
+ g_globals->_scenePalette.loadPalette(0);
+ g_globals->_scenePalette.refresh();
- _globals->_soundManager.postInit();
- _globals->_soundManager.buildDriverList(true);
- _globals->_soundManager.installConfigDrivers();
+ g_globals->_soundManager.postInit();
+ g_globals->_soundManager.buildDriverList(true);
+ g_globals->_soundManager.installConfigDrivers();
- _globals->_game->start();
+ g_globals->_game->start();
}
void SceneHandler::process(Event &event) {
// Main keypress handler
if (!event.handled) {
- _globals->_game->processEvent(event);
+ g_globals->_game->processEvent(event);
if (event.eventType == EVENT_KEYPRESS)
- _globals->_events.setCursorFromFlag();
+ g_globals->_events.setCursorFromFlag();
}
// Check for displaying right-click dialog
if ((event.eventType == EVENT_BUTTON_DOWN) && (event.btnState == BTNSHIFT_RIGHT) &&
- _globals->_player._uiEnabled) {
- RightClickDialog *dlg = new RightClickDialog();
- dlg->execute();
- delete dlg;
+ g_globals->_player._uiEnabled) {
+ g_globals->_game->rightClick();
event.handled = true;
return;
}
// If there is an active scene, pass the event to it
- if (_globals->_sceneManager._scene)
- _globals->_sceneManager._scene->process(event);
+ if (g_globals->_sceneManager._scene)
+ g_globals->_sceneManager._scene->process(event);
if (!event.handled) {
// Separate check for F5 - Save key
if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_F5)) {
// F5 - Save
- _globals->_game->saveGame();
+ g_globals->_game->saveGame();
event.handled = true;
- _globals->_events.setCursorFromFlag();
+ g_globals->_events.setCursorFromFlag();
}
// Check for debugger
if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_d) &&
(event.kbd.flags & Common::KBD_CTRL)) {
// Attach to the debugger
- _vm->_debugger->attach();
- _vm->_debugger->onFrame();
+ g_vm->_debugger->attach();
+ g_vm->_debugger->onFrame();
+ }
+
+ if ((event.eventType == EVENT_KEYPRESS) && g_globals->_player._enabled && g_globals->_player._canWalk) {
+ // Keyboard shortcuts for different actions
+ switch (event.kbd.keycode) {
+ case Common::KEYCODE_w:
+ g_globals->_events.setCursor(CURSOR_WALK);
+ event.handled = true;
+ break;
+ case Common::KEYCODE_l:
+ g_globals->_events.setCursor(CURSOR_LOOK);
+ event.handled = true;
+ break;
+ case Common::KEYCODE_u:
+ g_globals->_events.setCursor(CURSOR_USE);
+ event.handled = true;
+ break;
+ case Common::KEYCODE_t:
+ g_globals->_events.setCursor(CURSOR_TALK);
+ event.handled = true;
+ break;
+ default:
+ break;
+ }
}
// Mouse press handling
- if (_globals->_player._uiEnabled && (event.eventType == EVENT_BUTTON_DOWN) &&
- !_globals->_sceneItems.empty()) {
+ bool enabled = (g_vm->getGameID() == GType_BlueForce) ? g_globals->_player._enabled :
+ g_globals->_player._uiEnabled;
+ if (enabled && (event.eventType == EVENT_BUTTON_DOWN) && !g_globals->_sceneItems.empty()) {
+ // Check if the mouse is on the player
+ if (g_globals->_player.contains(event.mousePos)) {
+ playerAction(event);
+ if (event.handled)
+ return;
+ }
+
// Scan the item list to find one the mouse is within
- SynchronizedList<SceneItem *>::iterator i = _globals->_sceneItems.begin();
- while ((i != _globals->_sceneItems.end()) && !(*i)->contains(event.mousePos))
- ++i;
-
- if (i != _globals->_sceneItems.end()) {
- // Pass the action to the item
- (*i)->doAction(_globals->_events.getCursor());
- event.handled = _globals->_events.getCursor() != CURSOR_WALK;
-
- if (_globals->_player._uiEnabled && _globals->_player._canWalk &&
- (_globals->_events.getCursor() != CURSOR_LOOK)) {
- _globals->_events.setCursor(CURSOR_WALK);
- } else if (_globals->_player._canWalk && (_globals->_events.getCursor() != CURSOR_LOOK)) {
- _globals->_events.setCursor(CURSOR_WALK);
- } else if (_globals->_player._uiEnabled && (_globals->_events.getCursor() != CURSOR_LOOK)) {
- _globals->_events.setCursor(CURSOR_USE);
+ SynchronizedList<SceneItem *>::iterator i;
+ for (i = g_globals->_sceneItems.begin(); i != g_globals->_sceneItems.end(); ++i) {
+ if ((*i)->contains(event.mousePos)) {
+ // Pass the action to the item
+ bool handled = (*i)->startAction(g_globals->_events.getCursor(), event);
+ if (!handled)
+ // Item wasn't handled, keep scanning
+ continue;
+
+ if ((g_vm->getGameID() == GType_Ringworld) || (g_globals->_events.getCursor() == CURSOR_9999)) {
+ event.handled = g_globals->_events.getCursor() != CURSOR_WALK;
+
+ if (g_globals->_player._uiEnabled && g_globals->_player._canWalk &&
+ (g_globals->_events.getCursor() != CURSOR_LOOK)) {
+ g_globals->_events.setCursor(CURSOR_WALK);
+ } else if (g_globals->_player._canWalk && (g_globals->_events.getCursor() != CURSOR_LOOK)) {
+ g_globals->_events.setCursor(CURSOR_WALK);
+ } else if (g_globals->_player._uiEnabled && (g_globals->_events.getCursor() != CURSOR_LOOK)) {
+ g_globals->_events.setCursor(CURSOR_USE);
+ }
+
+ if (g_vm->getGameID() == GType_BlueForce)
+ event.handled = true;
+ } else if (g_vm->getGameID() != GType_Ringworld) {
+ event.handled = true;
+ }
+ break;
}
}
- // Handle player processing
- _globals->_player.process(event);
+ // Handle any fallback text display
+ processEnd(event);
}
+
+ // Handle player processing
+ g_globals->_player.process(event);
}
}
@@ -3521,7 +3864,7 @@ void SceneHandler::dispatch() {
if (_saveGameSlot != -1) {
int saveSlot = _saveGameSlot;
_saveGameSlot = -1;
- Common::Error err = _saver->save(saveSlot, _saveName);
+ Common::Error err = g_saver->save(saveSlot, _saveName);
// FIXME: Make use of the description string in err to enhance
// the error reported to the user.
if (err.getCode() != Common::kNoError)
@@ -3530,40 +3873,49 @@ void SceneHandler::dispatch() {
if (_loadGameSlot != -1) {
int loadSlot = _loadGameSlot;
_loadGameSlot = -1;
- _saver->restore(loadSlot);
- _globals->_events.setCursorFromFlag();
+ g_saver->restore(loadSlot);
+ g_globals->_events.setCursorFromFlag();
}
- _globals->_soundManager.dispatch();
- _globals->_scenePalette.signalListeners();
+ g_globals->_soundManager.dispatch();
+ g_globals->_scenePalette.signalListeners();
// Dispatch to any objects registered in the scene
- _globals->_sceneObjects->recurse(SceneHandler::dispatchObject);
+ g_globals->_sceneObjects->recurse(SceneHandler::dispatchObject);
// If a scene is active, then dispatch to it
- if (_globals->_sceneManager._scene)
- _globals->_sceneManager._scene->dispatch();
+ if (g_globals->_sceneManager._scene)
+ g_globals->_sceneManager._scene->dispatch();
// Not actually used
//_eventListeners.forEach(SceneHandler::handleListener);
- // Handle pending eents
+ // Handle pending events
Event event;
- while (_globals->_events.getEvent(event))
+ if (g_globals->_events.getEvent(event)) {
+ // Process pending events
+ do {
+ process(event);
+ } while (g_globals->_events.getEvent(event));
+ } else if (g_vm->getGameID() == GType_BlueForce) {
+ // For Blue Force, 'none' events need to be generated in the absence of any
+ event.eventType = EVENT_NONE;
+ event.mousePos = g_globals->_events._mousePos;
process(event);
+ }
// Handle drawing the contents of the scene
- if (_globals->_sceneManager._scene)
- _globals->_sceneObjects->draw();
+ if (g_globals->_sceneManager._scene)
+ g_globals->_sceneObjects->draw();
// Check to see if any scene change is required
- _globals->_sceneManager.checkScene();
+ g_globals->_sceneManager.checkScene();
// Signal the ScummVM debugger
- _vm->_debugger->onFrame();
+ g_vm->_debugger->onFrame();
// Delay between frames
- _globals->_events.delay(_delayTicks);
+ g_globals->_events.delay(_delayTicks);
}
void SceneHandler::dispatchObject(EventHandler *obj) {
@@ -3573,4 +3925,4 @@ void SceneHandler::dispatchObject(EventHandler *obj) {
void SceneHandler::saveListener(Serializer &ser) {
}
-} // End of namespace tSage
+} // End of namespace TsAGE
diff --git a/engines/tsage/core.h b/engines/tsage/core.h
index b86e2f63fe..0137134583 100644
--- a/engines/tsage/core.h
+++ b/engines/tsage/core.h
@@ -34,7 +34,7 @@
#include "tsage/resources.h"
#include "tsage/saveload.h"
-namespace tSage {
+namespace TsAGE {
#define MAX_FLAGS 256
@@ -55,8 +55,14 @@ public:
CursorType _cursorId;
Common::String _description;
int _iconResNum;
+
+ int _visage;
+ int _strip;
+ int _frame;
public:
InvObject(int sceneNumber, int rlbNum, int cursorNum, CursorType cursorId, const Common::String description);
+ InvObject(int visage, int strip, int frame);
+ InvObject(int visage, int strip);
bool inInventory() const { return _sceneNumber == 1; }
void setCursor();
@@ -73,6 +79,9 @@ public:
InvObject *_selectedItem;
InvObjectList();
+ int indexOf(InvObject *obj) const;
+ InvObject *getItem(int objectNum);
+ int getObjectScene(int objectNum);
virtual Common::String getClassName() { return "InvObjectList"; }
virtual void synchronize(Serializer &s);
@@ -157,6 +166,18 @@ public:
int _state;
};
+#define ADD_PLAYER_MOVER(X, Y) { Common::Point pt(X, Y); PlayerMover *mover = new PlayerMover(); \
+ g_globals->_player.addMover(mover, &pt, this); }
+#define ADD_PLAYER_MOVER_NULL(OBJ, X, Y) { Common::Point pt(X, Y); PlayerMover *mover = new PlayerMover(); \
+ OBJ.addMover(mover, &pt, NULL); }
+#define ADD_PLAYER_MOVER_THIS(OBJ, X, Y) { Common::Point pt(X, Y); PlayerMover *mover = new PlayerMover(); \
+ OBJ.addMover(mover, &pt, this); }
+
+#define ADD_MOVER(OBJ, X, Y) { Common::Point pt(X, Y); NpcMover *mover = new NpcMover(); \
+ OBJ.addMover(mover, &pt, this); }
+#define ADD_MOVER_NULL(OBJ, X, Y) { Common::Point pt(X, Y); NpcMover *mover = new NpcMover(); \
+ OBJ.addMover(mover, &pt, NULL); }
+
class ObjectMover : public EventHandler {
public:
Common::Point _destPosition;
@@ -287,7 +308,7 @@ public:
PaletteModifierCached();
- void setPalette(ScenePalette *palette, int step);
+ virtual void setPalette(ScenePalette *palette, int step);
virtual Common::String getClassName() { return "PaletteModifierCached"; }
virtual void synchronize(Serializer &s);
};
@@ -323,6 +344,7 @@ public:
virtual void synchronize(Serializer &s);
virtual void signal();
virtual void remove();
+ virtual void setPalette(ScenePalette *palette, int step);
};
/*--------------------------------------------------------------------------*/
@@ -350,13 +372,14 @@ public:
bool loadPalette(int paletteNum);
void refresh();
void setPalette(int index, int count);
+ void setEntry(int index, uint r, uint g, uint b);
uint8 indexOf(uint r, uint g, uint b, int threshold = 0xffff);
void getPalette(int start = 0, int count = 256);
void signalListeners();
void clearListeners();
void fade(const byte *adjustData, bool fullAdjust, int percent);
PaletteRotation *addRotation(int start, int end, int rotationMode, int duration = 0, Action *action = NULL);
- PaletteFader *addFader(const byte *arrBufferRGB, int palSize, int percent, Action *action);
+ PaletteFader *addFader(const byte *arrBufferRGB, int palSize, int step, Action *action);
static void changeBackground(const Rect &bounds, FadeMode fadeMode);
@@ -393,16 +416,15 @@ public:
virtual Common::String getClassName() { return "SceneItem"; }
virtual void remove();
virtual void destroy() {}
- virtual void startMover(CursorType action) { doAction(action); }
+ virtual bool startAction(CursorType action, Event &event);
virtual void doAction(int action);
bool contains(const Common::Point &pt);
void setBounds(const Rect &newBounds) { _bounds = newBounds; }
void setBounds(const int ys, const int xe, const int ye, const int xs) { _bounds = Rect(MIN(xs, xe), MIN(ys, ye), MAX(xs, xe), MAX(ys, ye)); }
static void display(int resNum, int lineNum, ...);
- static void display2(int resNum, int lineNum) {
- display(resNum, lineNum, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
- }
+ static void display2(int resNum, int lineNum);
+ static void display(const Common::String &msg);
};
class SceneItemExt : public SceneItem {
@@ -419,33 +441,28 @@ public:
class SceneHotspot : public SceneItem {
public:
SceneHotspot() : SceneItem() {}
-
+ virtual bool startAction(CursorType action, Event &event);
virtual Common::String getClassName() { return "SceneHotspot"; }
virtual void doAction(int action);
};
-class NamedHotspot : public SceneHotspot {
-public:
- int _resnum, _lookLineNum, _useLineNum;
- NamedHotspot() : SceneHotspot() {}
-
- void setup(int ys, int xs, int ye, int xe, const int resnum, const int lookLineNum, const int useLineNum);
- virtual void doAction(int action);
- virtual Common::String getClassName() { return "NamedHotspot"; }
- virtual void synchronize(Serializer &s);
-};
-
enum AnimateMode {ANIM_MODE_NONE = 0, ANIM_MODE_1 = 1, ANIM_MODE_2 = 2, ANIM_MODE_3 = 3,
- ANIM_MODE_4 = 4, ANIM_MODE_5 = 5, ANIM_MODE_6 = 6, ANIM_MODE_7 = 7, ANIM_MODE_8 = 8};
+ ANIM_MODE_4 = 4, ANIM_MODE_5 = 5, ANIM_MODE_6 = 6, ANIM_MODE_7 = 7, ANIM_MODE_8 = 8,
+ // Introduced in Blue Force
+ ANIM_MODE_9 = 9
+};
class SceneObject;
class Visage {
private:
byte *_data;
+
+ void flip(GfxSurface &s);
public:
int _resNum;
int _rlbNum;
+ bool _flipHoriz;
public:
Visage();
Visage(const Visage &v);
@@ -454,7 +471,7 @@ public:
void setVisage(int resNum, int rlbNum = 9999);
GfxSurface getFrame(int frameNum);
int getFrameCount() const;
- Visage &operator=(const Visage &s);
+ Visage &operator=(const Visage &gfxSurface);
};
class SceneObjectWrapper : public EventHandler {
@@ -467,6 +484,7 @@ public:
virtual ~SceneObjectWrapper() {}
void setSceneObject(SceneObject *so);
+ void check();
virtual void synchronize(Serializer &s);
virtual Common::String getClassName() { return "SceneObjectWrapper"; }
@@ -487,7 +505,6 @@ private:
int getNewFrame();
void animEnded();
int changeFrame();
- bool isNoMover() const { return !_mover || (_regionIndex > 0); }
public:
uint32 _updateStartFrame;
uint32 _walkStartFrame;
@@ -537,10 +554,12 @@ public:
void animate(AnimateMode animMode, ...);
SceneObject *clone() const;
void checkAngle(const SceneObject *obj);
+ void checkAngle(const Common::Point &pt);
void hide();
void show();
int getSpliceArea(const SceneObject *obj);
int getFrameCount();
+ bool isNoMover() const { return !_mover || (_regionIndex > 0); }
virtual void synchronize(Serializer &s);
virtual Common::String getClassName() { return "SceneObject"; }
@@ -555,18 +574,19 @@ public:
virtual void draw();
virtual void proc19() {}
virtual void updateScreen();
+ // New methods introduced by Blue Force
+ virtual void updateAngle(const Common::Point &pt);
+ virtual void changeAngle(int angle);
+
void setup(int visage, int stripFrameNum, int frameNum, int posX, int posY, int priority);
+ void setup(int visage, int stripFrameNum, int frameNum);
};
-class SceneObjectExt : public SceneObject {
+class BackgroundSceneObject: public SceneObject {
public:
- int _state;
-
- virtual void synchronize(Serializer &s) {
- SceneObject::synchronize(s);
- s.syncAsSint16LE(_state);
- }
- virtual Common::String getClassName() { return "SceneObjectExt"; }
+ virtual Common::String getClassName() { return "BackgroundSceneObject"; }
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void draw();
};
class SceneText : public SceneObject {
@@ -587,6 +607,7 @@ public:
virtual void synchronize(Serializer &s);
virtual Common::String getClassName() { return "SceneText"; }
virtual GfxSurface getFrame() { return _textSurface; }
+ virtual void updateScreen();
};
class Player : public SceneObject {
@@ -594,6 +615,7 @@ public:
bool _canWalk;
bool _uiEnabled;
int _field8C;
+ bool _enabled;
public:
Player();
@@ -695,13 +717,14 @@ public:
SynchronizedList<SceneObject *>::iterator begin() { return _objList.begin(); }
SynchronizedList<SceneObject *>::iterator end() { return _objList.end(); }
int size() const { return _objList.size(); }
- bool contains(SceneObject *sceneObj) { return tSage::contains(_objList, sceneObj); }
+ bool contains(SceneObject *sceneObj) { return TsAGE::contains(_objList, sceneObj); }
void push_back(SceneObject *sceneObj) { _objList.push_back(sceneObj); }
void push_front(SceneObject *sceneObj) { _objList.push_front(sceneObj); }
void remove(SceneObject *sceneObj) {
_objList.remove(sceneObj);
_listAltered = true;
}
+ void clear() { _objList.clear(); }
};
class ScenePriorities : public Common::List<Region> {
@@ -788,6 +811,8 @@ public:
assert((idx >= 1) && (idx <= (int)_regionList.size()));
return _regionList[idx - 1];
}
+ void proc1(int v) { warning("TODO: WalkRegions::proc1"); }
+ void proc2(int v) { warning("TODO: WalkRegions::proc2"); }
};
/*--------------------------------------------------------------------------*/
@@ -827,9 +852,14 @@ public:
int _loadGameSlot;
int _delayTicks;
Common::String _saveName;
+ uint32 _prevFrameNumber;
+protected:
+ virtual void playerAction(Event &event) {}
+ virtual void processEnd(Event &event) {}
public:
SceneHandler();
void registerHandler();
+ uint32 getFrameDifference();
virtual Common::String getClassName() { return "SceneHandler"; }
virtual void postInit(SceneObjectList *OwnerList = NULL);
@@ -840,6 +870,6 @@ public:
static void saveListener(Serializer &ser);
};
-} // End of namespace tSage
+} // End of namespace TsAGE
#endif
diff --git a/engines/tsage/debugger.cpp b/engines/tsage/debugger.cpp
index 9277fd429a..a0e8b9edba 100644
--- a/engines/tsage/debugger.cpp
+++ b/engines/tsage/debugger.cpp
@@ -23,21 +23,23 @@
#include "tsage/debugger.h"
#include "tsage/globals.h"
#include "tsage/graphics.h"
-#include "tsage/ringworld_logic.h"
+#include "tsage/ringworld/ringworld_logic.h"
-namespace tSage {
+namespace TsAGE {
Debugger::Debugger() : GUI::Debugger() {
DCmd_Register("continue", WRAP_METHOD(Debugger, Cmd_Exit));
DCmd_Register("scene", WRAP_METHOD(Debugger, Cmd_Scene));
DCmd_Register("walk_regions", WRAP_METHOD(Debugger, Cmd_WalkRegions));
DCmd_Register("priority_regions", WRAP_METHOD(Debugger, Cmd_PriorityRegions));
+ DCmd_Register("scene_regions", WRAP_METHOD(Debugger, Cmd_SceneRegions));
DCmd_Register("setflag", WRAP_METHOD(Debugger, Cmd_SetFlag));
DCmd_Register("getflag", WRAP_METHOD(Debugger, Cmd_GetFlag));
DCmd_Register("clearflag", WRAP_METHOD(Debugger, Cmd_ClearFlag));
DCmd_Register("listobjects", WRAP_METHOD(Debugger, Cmd_ListObjects));
DCmd_Register("moveobject", WRAP_METHOD(Debugger, Cmd_MoveObject));
DCmd_Register("hotspots", WRAP_METHOD(Debugger, Cmd_Hotspots));
+ DCmd_Register("sound", WRAP_METHOD(Debugger, Cmd_Sound));
}
static int strToInt(const char *s) {
@@ -66,9 +68,9 @@ bool Debugger::Cmd_Scene(int argc, const char **argv) {
}
if (argc == 3)
- _globals->_sceneManager._sceneNumber = strToInt(argv[2]);
+ g_globals->_sceneManager._sceneNumber = strToInt(argv[2]);
- _globals->_sceneManager.changeScene(strToInt(argv[1]));
+ g_globals->_sceneManager.changeScene(strToInt(argv[1]));
return false;
}
@@ -85,20 +87,20 @@ bool Debugger::Cmd_WalkRegions(int argc, const char **argv) {
int color = 16;
// Lock the background surface for access
- Graphics::Surface destSurface = _globals->_sceneManager._scene->_backSurface.lockSurface();
+ Graphics::Surface destSurface = g_globals->_sceneManager._scene->_backSurface.lockSurface();
// Loop through drawing each walk region in a different color to the background surface
Common::String regionsDesc;
- for (uint regionIndex = 0; regionIndex < _globals->_walkRegions._regionList.size(); ++regionIndex, ++color) {
- WalkRegion &wr = _globals->_walkRegions._regionList[regionIndex];
+ for (uint regionIndex = 0; regionIndex < g_globals->_walkRegions._regionList.size(); ++regionIndex, ++color) {
+ WalkRegion &wr = g_globals->_walkRegions._regionList[regionIndex];
for (int yp = wr._bounds.top; yp < wr._bounds.bottom; ++yp) {
LineSliceSet sliceSet = wr.getLineSlices(yp);
for (uint idx = 0; idx < sliceSet.items.size(); ++idx)
- destSurface.hLine(sliceSet.items[idx].xs - _globals->_sceneOffset.x, yp,
- sliceSet.items[idx].xe - _globals->_sceneOffset.x, color);
+ destSurface.hLine(sliceSet.items[idx].xs - g_globals->_sceneOffset.x, yp,
+ sliceSet.items[idx].xe - g_globals->_sceneOffset.x, color);
}
regionsDesc += Common::String::format("Region #%d d bounds=%d,%d,%d,%d\n",
@@ -106,12 +108,12 @@ bool Debugger::Cmd_WalkRegions(int argc, const char **argv) {
}
// Release the surface
- _globals->_sceneManager._scene->_backSurface.unlockSurface();
+ g_globals->_sceneManager._scene->_backSurface.unlockSurface();
// Mark the scene as requiring a full redraw
- _globals->_paneRefreshFlag[0] = 2;
+ g_globals->_paneRefreshFlag[0] = 2;
- DebugPrintf("Total regions = %d\n", _globals->_walkRegions._regionList.size());
+ DebugPrintf("Total regions = %d\n", g_globals->_walkRegions._regionList.size());
DebugPrintf("%s\n", regionsDesc.c_str());
return false;
@@ -132,12 +134,12 @@ bool Debugger::Cmd_PriorityRegions(int argc, const char **argv) {
int count = 0;
// Lock the background surface for access
- Graphics::Surface destSurface = _globals->_sceneManager._scene->_backSurface.lockSurface();
+ Graphics::Surface destSurface = g_globals->_sceneManager._scene->_backSurface.lockSurface();
- Common::List<Region>::iterator i = _globals->_sceneManager._scene->_priorities.begin();
+ Common::List<Region>::iterator i = g_globals->_sceneManager._scene->_priorities.begin();
Common::String regionsDesc;
- for (; i != _globals->_sceneManager._scene->_priorities.end(); ++i, ++color, ++count) {
+ for (; i != g_globals->_sceneManager._scene->_priorities.end(); ++i, ++color, ++count) {
Region &r = *i;
if ((regionNum == 0) || (regionNum == (count + 1))) {
@@ -145,8 +147,8 @@ bool Debugger::Cmd_PriorityRegions(int argc, const char **argv) {
byte *destP = (byte *)destSurface.getBasePtr(0, y);
for (int x = 0; x < destSurface.w; ++x) {
- if (r.contains(Common::Point(_globals->_sceneManager._scene->_sceneBounds.left + x,
- _globals->_sceneManager._scene->_sceneBounds.top + y)))
+ if (r.contains(Common::Point(g_globals->_sceneManager._scene->_sceneBounds.left + x,
+ g_globals->_sceneManager._scene->_sceneBounds.top + y)))
*destP = color;
++destP;
}
@@ -158,10 +160,63 @@ bool Debugger::Cmd_PriorityRegions(int argc, const char **argv) {
}
// Release the surface
- _globals->_sceneManager._scene->_backSurface.unlockSurface();
+ g_globals->_sceneManager._scene->_backSurface.unlockSurface();
// Mark the scene as requiring a full redraw
- _globals->_paneRefreshFlag[0] = 2;
+ g_globals->_paneRefreshFlag[0] = 2;
+
+ DebugPrintf("Total regions = %d\n", count);
+ DebugPrintf("%s", regionsDesc.c_str());
+
+ return true;
+}
+
+/*
+ * This command draws the scene regions onto the screen. These are the regions
+ * used by hotspots that have non-rectangular areas.
+ */
+bool Debugger::Cmd_SceneRegions(int argc, const char **argv) {
+ int regionNum = 0;
+
+ // Check for an optional specific region to display
+ if (argc == 2)
+ regionNum = strToInt(argv[1]);
+
+ // Color index to use for the first priority region
+ int color = 16;
+ int count = 0;
+
+ // Lock the background surface for access
+ Graphics::Surface destSurface = g_globals->_sceneManager._scene->_backSurface.lockSurface();
+
+ Common::List<Region>::iterator i = g_globals->_sceneRegions.begin();
+ Common::String regionsDesc;
+
+ for (; i != g_globals->_sceneRegions.end(); ++i, ++color, ++count) {
+ Region &r = *i;
+
+ if ((regionNum == 0) || (regionNum == (count + 1))) {
+ for (int y = 0; y < destSurface.h; ++y) {
+ byte *destP = (byte *)destSurface.getBasePtr(0, y);
+
+ for (int x = 0; x < destSurface.w; ++x) {
+ if (r.contains(Common::Point(g_globals->_sceneManager._scene->_sceneBounds.left + x,
+ g_globals->_sceneManager._scene->_sceneBounds.top + y)))
+ *destP = color;
+ ++destP;
+ }
+ }
+ }
+
+ regionsDesc += Common::String::format("Region id = %d bounds=%d,%d,%d,%d\n",
+ r._regionId, r._bounds.left, r._bounds.top, r._bounds.right, r._bounds.bottom);
+ }
+
+ // Release the surface
+ g_globals->_sceneManager._scene->_backSurface.unlockSurface();
+
+ // Mark the scene as requiring a full redraw
+ g_globals->_paneRefreshFlag[0] = 2;
DebugPrintf("Total regions = %d\n", count);
DebugPrintf("%s", regionsDesc.c_str());
@@ -180,7 +235,7 @@ bool Debugger::Cmd_SetFlag(int argc, const char **argv) {
}
int flagNum = strToInt(argv[1]);
- _globals->setFlag(flagNum);
+ g_globals->setFlag(flagNum);
return true;
}
@@ -195,7 +250,7 @@ bool Debugger::Cmd_GetFlag(int argc, const char **argv) {
}
int flagNum = strToInt(argv[1]);
- DebugPrintf("Value: %d\n", _globals->getFlag(flagNum));
+ DebugPrintf("Value: %d\n", g_globals->getFlag(flagNum));
return true;
}
@@ -210,7 +265,7 @@ bool Debugger::Cmd_ClearFlag(int argc, const char **argv) {
}
int flagNum = strToInt(argv[1]);
- _globals->clearFlag(flagNum);
+ g_globals->clearFlag(flagNum);
return true;
}
@@ -389,31 +444,32 @@ bool Debugger::Cmd_MoveObject(int argc, const char **argv) {
*/
bool Debugger::Cmd_Hotspots(int argc, const char **argv) {
int colIndex = 16;
- const Rect &sceneBounds = _globals->_sceneManager._scene->_sceneBounds;
+ const Rect &sceneBounds = g_globals->_sceneManager._scene->_sceneBounds;
// Lock the background surface for access
- Graphics::Surface destSurface = _globals->_sceneManager._scene->_backSurface.lockSurface();
+ Graphics::Surface destSurface = g_globals->_sceneManager._scene->_backSurface.lockSurface();
// Iterate through the scene items
SynchronizedList<SceneItem *>::iterator i;
- for (i = _globals->_sceneItems.reverse_begin(); i != _globals->_sceneItems.end(); --i, ++colIndex) {
+ for (i = g_globals->_sceneItems.reverse_begin(); i != g_globals->_sceneItems.end(); --i, ++colIndex) {
SceneItem *o = *i;
// Draw the contents of the hotspot area
if (o->_sceneRegionId == 0) {
// Scene item doesn't use a region, so fill in the entire area
- destSurface.fillRect(Rect(o->_bounds.left - sceneBounds.left, o->_bounds.top - sceneBounds.top,
- o->_bounds.right - sceneBounds.left - 1, o->_bounds.bottom - sceneBounds.top - 1), colIndex);
+ if ((o->_bounds.right > o->_bounds.left) && (o->_bounds.bottom > o->_bounds.top))
+ destSurface.fillRect(Rect(o->_bounds.left - sceneBounds.left, o->_bounds.top - sceneBounds.top,
+ o->_bounds.right - sceneBounds.left - 1, o->_bounds.bottom - sceneBounds.top - 1), colIndex);
} else {
// Scene uses a region, so get it and use it to fill out only the correct parts
- SceneRegions::iterator ri = _globals->_sceneRegions.begin();
- while ((ri != _globals->_sceneRegions.end()) && ((*ri)._regionId != o->_sceneRegionId))
+ SceneRegions::iterator ri = g_globals->_sceneRegions.begin();
+ while ((ri != g_globals->_sceneRegions.end()) && ((*ri)._regionId != o->_sceneRegionId))
++ri;
- if (ri != _globals->_sceneRegions.end()) {
+ if (ri != g_globals->_sceneRegions.end()) {
// Fill out the areas defined by the region
Region &r = *ri;
-
+
for (int y = r._bounds.top; y < r._bounds.bottom; ++y) {
LineSliceSet set = r.getLineSlices(y);
@@ -426,13 +482,26 @@ bool Debugger::Cmd_Hotspots(int argc, const char **argv) {
}
// Release the surface
- _globals->_sceneManager._scene->_backSurface.unlockSurface();
+ g_globals->_sceneManager._scene->_backSurface.unlockSurface();
// Mark the scene as requiring a full redraw
- _globals->_paneRefreshFlag[0] = 2;
+ g_globals->_paneRefreshFlag[0] = 2;
return false;
}
+/**
+ * Play the specified sound
+ */
+bool Debugger::Cmd_Sound(int argc, const char **argv) {
+ if (argc != 2) {
+ DebugPrintf("Usage: %s <sound number>\n", argv[0]);
+ return true;
+ }
+
+ int soundNum = strToInt(argv[1]);
+ g_globals->_soundHandler.play(soundNum);
+ return false;
+}
-} // End of namespace tSage
+} // End of namespace TsAGE
diff --git a/engines/tsage/debugger.h b/engines/tsage/debugger.h
index 3c14cd7bed..fcdbc2d243 100644
--- a/engines/tsage/debugger.h
+++ b/engines/tsage/debugger.h
@@ -26,7 +26,7 @@
#include "common/scummsys.h"
#include "gui/debugger.h"
-namespace tSage {
+namespace TsAGE {
class Debugger : public GUI::Debugger {
public:
@@ -37,15 +37,16 @@ protected:
bool Cmd_Scene(int argc, const char **argv);
bool Cmd_WalkRegions(int argc, const char **argv);
bool Cmd_PriorityRegions(int argc, const char **argv);
+ bool Cmd_SceneRegions(int argc, const char **argv);
bool Cmd_SetFlag(int argc, const char **argv);
bool Cmd_GetFlag(int argc, const char **argv);
bool Cmd_ClearFlag(int argc, const char **argv);
bool Cmd_ListObjects(int argc, const char **argv);
bool Cmd_MoveObject(int argc, const char **argv);
-
bool Cmd_Hotspots(int argc, const char **argv);
+ bool Cmd_Sound(int argc, const char **argv);
};
-} // End of namespace tSage
+} // End of namespace TsAGE
#endif
diff --git a/engines/tsage/detection.cpp b/engines/tsage/detection.cpp
index aaa9030a04..12add10c58 100644
--- a/engines/tsage/detection.cpp
+++ b/engines/tsage/detection.cpp
@@ -30,7 +30,7 @@
#include "tsage/tsage.h"
-namespace tSage {
+namespace TsAGE {
struct tSageGameDescription {
ADGameDescription desc;
@@ -55,12 +55,13 @@ Common::String TSageEngine::getPrimaryFilename() const {
return Common::String(_gameDescription->desc.filesDescriptions[0].fileName);
}
-} // End of namespace tSage
+} // End of namespace TsAGE
static const PlainGameDescriptor tSageGameTitles[] = {
- { "tsage", "Unknown Tsunami TSAGE-based Game" },
- { "ring", "Ringworld: Revenge of the Patriarch" },
+ { "tsage", "Tsunami TsAGE-based Game" },
+ { "ringworld", "Ringworld: Revenge of the Patriarch" },
{ "blueforce", "Blue Force" },
+ { "ringworld2", "Return to Ringworld" },
{ 0, 0 }
};
@@ -72,10 +73,10 @@ enum {
class TSageMetaEngine : public AdvancedMetaEngine {
public:
- TSageMetaEngine() : AdvancedMetaEngine(tSage::gameDescriptions, sizeof(tSage::tSageGameDescription), tSageGameTitles) {
+ TSageMetaEngine() : AdvancedMetaEngine(TsAGE::gameDescriptions, sizeof(TsAGE::tSageGameDescription), tSageGameTitles) {
_md5Bytes = 5000;
_singleid = "tsage";
- _guioptions = Common::GUIO_NOSPEECH;
+ _guioptions = GUIO1(GUIO_NOSPEECH);
}
virtual const char *getName() const {
@@ -103,7 +104,7 @@ public:
virtual bool createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const {
if (desc) {
- *engine = new tSage::TSageEngine(syst, (const tSage::tSageGameDescription *)desc);
+ *engine = new TsAGE::TSageEngine(syst, (const TsAGE::tSageGameDescription *)desc);
}
return desc != 0;
}
@@ -118,7 +119,7 @@ public:
Common::StringArray filenames = g_system->getSavefileManager()->listSavefiles(pattern);
sort(filenames.begin(), filenames.end());
- tSage::tSageSavegameHeader header;
+ TsAGE::tSageSavegameHeader header;
SaveStateList saveList;
for (Common::StringArray::const_iterator file = filenames.begin(); file != filenames.end(); ++file) {
@@ -129,8 +130,10 @@ public:
Common::InSaveFile *in = g_system->getSavefileManager()->openForLoading(*file);
if (in) {
- if (tSage::Saver::readSavegameHeader(in, header)) {
+ if (TsAGE::Saver::readSavegameHeader(in, header)) {
saveList.push_back(SaveStateDescriptor(slot, header.saveName));
+
+ header.thumbnail->free();
delete header.thumbnail;
}
@@ -154,22 +157,25 @@ public:
SaveStateDescriptor querySaveMetaInfos(const char *target, int slot) const {
Common::InSaveFile *f = g_system->getSavefileManager()->openForLoading(
generateGameStateFileName(target, slot));
- assert(f);
-
- tSage::tSageSavegameHeader header;
- tSage::Saver::readSavegameHeader(f, header);
- delete f;
-
- // Create the return descriptor
- SaveStateDescriptor desc(slot, header.saveName);
- desc.setDeletableFlag(true);
- desc.setWriteProtectedFlag(false);
- desc.setThumbnail(header.thumbnail);
- desc.setSaveDate(header.saveYear, header.saveMonth, header.saveDay);
- desc.setSaveTime(header.saveHour, header.saveMinutes);
- desc.setPlayTime(header.totalFrames * GAME_FRAME_TIME);
-
- return desc;
+
+ if (f) {
+ TsAGE::tSageSavegameHeader header;
+ TsAGE::Saver::readSavegameHeader(f, header);
+ delete f;
+
+ // Create the return descriptor
+ SaveStateDescriptor desc(slot, header.saveName);
+ desc.setDeletableFlag(true);
+ desc.setWriteProtectedFlag(false);
+ desc.setThumbnail(header.thumbnail);
+ desc.setSaveDate(header.saveYear, header.saveMonth, header.saveDay);
+ desc.setSaveTime(header.saveHour, header.saveMinutes);
+ desc.setPlayTime(header.totalFrames * GAME_FRAME_TIME);
+
+ return desc;
+ }
+
+ return SaveStateDescriptor();
}
};
diff --git a/engines/tsage/detection_tables.h b/engines/tsage/detection_tables.h
index 8b80edf89d..360dbac0ae 100644
--- a/engines/tsage/detection_tables.h
+++ b/engines/tsage/detection_tables.h
@@ -20,20 +20,34 @@
*
*/
-namespace tSage {
+namespace TsAGE {
static const tSageGameDescription gameDescriptions[] = {
- // Ringworld CD and First Wave versions
+ // Ringworld English CD and First Wave versions
{
{
- "ring",
+ "ringworld",
"CD",
AD_ENTRY1s("ring.rlb", "466f0e6492d9d0f34d35c5cd088de90f", 37847618),
Common::EN_ANY,
Common::kPlatformPC,
- ADGF_UNSTABLE,
- Common::GUIO_NOSPEECH | Common::GUIO_NOSFX
+ ADGF_CD,
+ GUIO2(GUIO_NOSPEECH, GUIO_NOSFX)
+ },
+ GType_Ringworld,
+ GF_CD | GF_ALT_REGIONS
+ },
+ // Ringworld Spanish CD
+ {
+ {
+ "ringworld",
+ "CD",
+ AD_ENTRY1s("ring.rlb", "cb8bba91b30cd172712371d7123bd763", 7427980),
+ Common::ES_ESP,
+ Common::kPlatformPC,
+ ADGF_CD,
+ GUIO2(GUIO_NOSPEECH, GUIO_NOSFX)
},
GType_Ringworld,
GF_CD | GF_ALT_REGIONS
@@ -41,13 +55,13 @@ static const tSageGameDescription gameDescriptions[] = {
// Ringworld English Floppy version
{
{
- "ring",
+ "ringworld",
"Floppy",
AD_ENTRY1s("ring.rlb", "7b7f0c5b37b58fa5ec06ebb2ca0d0d9d", 8438770),
Common::EN_ANY,
Common::kPlatformPC,
- ADGF_UNSTABLE,
- Common::GUIO_NOSPEECH | Common::GUIO_NOSFX
+ ADGF_NO_FLAGS,
+ GUIO2(GUIO_NOSPEECH, GUIO_NOSFX)
},
GType_Ringworld,
GF_FLOPPY
@@ -55,13 +69,13 @@ static const tSageGameDescription gameDescriptions[] = {
// Ringworld English Floppy Demo #1 version
{
{
- "ring",
+ "ringworld",
"Floppy Demo",
AD_ENTRY1s("tsage.rlb", "3b3604a97c06c91f3735d3e9d341f63f", 833453),
Common::EN_ANY,
Common::kPlatformPC,
ADGF_DEMO,
- Common::GUIO_NOSPEECH | Common::GUIO_NOSFX
+ GUIO2(GUIO_NOSPEECH, GUIO_NOSFX)
},
GType_Ringworld,
GF_FLOPPY | GF_DEMO
@@ -70,13 +84,13 @@ static const tSageGameDescription gameDescriptions[] = {
// Ringworld English Floppy Demo #2 version
{
{
- "ring",
+ "ringworld",
"Floppy Demo",
AD_ENTRY1s("demoring.rlb", "64050e1806203b15bb03876140eb4f56", 832206),
Common::EN_ANY,
Common::kPlatformPC,
ADGF_DEMO,
- Common::GUIO_NOSPEECH | Common::GUIO_NOSFX
+ GUIO2(GUIO_NOSPEECH, GUIO_NOSFX)
},
GType_Ringworld,
GF_FLOPPY | GF_DEMO | GF_ALT_REGIONS
@@ -92,7 +106,7 @@ static const tSageGameDescription gameDescriptions[] = {
Common::EN_ANY,
Common::kPlatformPC,
ADGF_UNSTABLE,
- Common::GUIO_NOSPEECH | Common::GUIO_NOSFX
+ GUIO2(GUIO_NOSPEECH, GUIO_NOSFX)
},
GType_BlueForce,
GF_FLOPPY
@@ -106,11 +120,11 @@ static const tSageGameDescription gameDescriptions[] = {
AD_ENTRY1s("blue.rlb", "17eabb456cb1546c66baf1aff387ba6a", 10032614),
Common::EN_ANY,
Common::kPlatformPC,
- ADGF_NO_FLAGS,
- Common::GUIO_NOSPEECH | Common::GUIO_NOSFX
+ ADGF_UNSTABLE,
+ GUIO2(GUIO_NOSPEECH, GUIO_NOSFX)
},
GType_BlueForce,
- GF_FLOPPY
+ GF_FLOPPY | GF_ALT_REGIONS
},
// Blue Force CD and First Wave use the same files
{
@@ -120,13 +134,29 @@ static const tSageGameDescription gameDescriptions[] = {
AD_ENTRY1s("blue.rlb", "99983f48cb218f1f3760cf2f9a7ef11d", 63863322),
Common::EN_ANY,
Common::kPlatformPC,
- ADGF_NO_FLAGS,
- Common::GUIO_NOSPEECH | Common::GUIO_NOSFX
+ ADGF_CD | ADGF_UNSTABLE,
+ GUIO2(GUIO_NOSPEECH, GUIO_NOSFX)
},
GType_BlueForce,
- GF_CD
+ GF_CD | GF_ALT_REGIONS
},
+
+ // Return to Ringworld
+ {
+ {
+ "ringworld2",
+ "CD",
+ AD_ENTRY1s("r2rw.rlb", "df6c25622387007788ca36d99362c1f0", 47586928),
+ Common::EN_ANY,
+ Common::kPlatformPC,
+ ADGF_CD | ADGF_UNSTABLE,
+ GUIO2(GUIO_NOSPEECH, GUIO_NOSFX)
+ },
+ GType_Ringworld2,
+ GF_CD | GF_ALT_REGIONS
+ },
+
{ AD_TABLE_END_MARKER, 0, 0 }
};
-} // End of namespace tSage
+} // End of namespace TsAGE
diff --git a/engines/tsage/dialogs.cpp b/engines/tsage/dialogs.cpp
index 86fbbc8e43..002835e76b 100644
--- a/engines/tsage/dialogs.cpp
+++ b/engines/tsage/dialogs.cpp
@@ -30,9 +30,9 @@
#include "tsage/dialogs.h"
#include "tsage/staticres.h"
#include "tsage/globals.h"
-#include "tsage/ringworld_logic.h"
+#include "tsage/ringworld/ringworld_logic.h"
-namespace tSage {
+namespace TsAGE {
/*--------------------------------------------------------------------------*/
@@ -64,16 +64,16 @@ MessageDialog::MessageDialog(const Common::String &message, const Common::String
setDefaults();
// Set the dialog's center
- setCenter(_globals->_dialogCenter.x, _globals->_dialogCenter.y);
+ setCenter(g_globals->_dialogCenter.x, g_globals->_dialogCenter.y);
}
int MessageDialog::show(const Common::String &message, const Common::String &btn1Message, const Common::String &btn2Message) {
// Ensure that the cursor is the arrow
- _globals->_events.setCursor(CURSOR_ARROW);
+ g_globals->_events.setCursor(CURSOR_ARROW);
int result = show2(message, btn1Message, btn2Message);
- _globals->_events.setCursorFromFlag();
+ g_globals->_events.setCursorFromFlag();
return result;
}
@@ -109,186 +109,6 @@ ConfigDialog::ConfigDialog() : GUI::OptionsDialog("", "GlobalConfig") {
/*--------------------------------------------------------------------------*/
-#define BUTTON_WIDTH 28
-#define BUTTON_HEIGHT 29
-
-RightClickButton::RightClickButton(int buttonIndex, int xp, int yp) : GfxButton() {
- _buttonIndex = buttonIndex;
- this->_bounds.left = xp;
- this->_bounds.top = yp;
- this->_bounds.setWidth(BUTTON_WIDTH);
- this->_bounds.setHeight(BUTTON_HEIGHT);
- _savedButton = NULL;
-}
-
-void RightClickButton::highlight() {
- if (_savedButton) {
- // Button was previously highlighted, so de-highlight by restoring saved area
- _globals->gfxManager().copyFrom(*_savedButton, _bounds.left, _bounds.top);
- delete _savedButton;
- _savedButton = NULL;
- } else {
- // Highlight button by getting the needed highlighted image resource
- _savedButton = Surface_getArea(_globals->gfxManager().getSurface(), _bounds);
-
- uint size;
- byte *imgData = _resourceManager->getSubResource(7, 2, _buttonIndex, &size);
-
- GfxSurface btnSelected = surfaceFromRes(imgData);
- _globals->gfxManager().copyFrom(btnSelected, _bounds.left, _bounds.top);
-
- DEALLOCATE(imgData);
- }
-}
-
-/*--------------------------------------------------------------------------*/
-
-/**
- * This dialog implements the right-click dialog
- */
-RightClickDialog::RightClickDialog() : GfxDialog(),
- _walkButton(1, 48, 12), _lookButton(2, 31, 29), _useButton(3, 65, 29),
- _talkButton(4, 14, 47), _inventoryButton(5, 48, 47), _optionsButton(6, 83, 47) {
- Rect rectArea, dialogRect;
-
- // Set the palette and change the cursor
- _gfxManager.setDialogPalette();
- _globals->_events.setCursor(CURSOR_ARROW);
-
- // Get the dialog image
- _surface = surfaceFromRes(7, 1, 1);
-
- // Set the dialog position
- dialogRect.resize(_surface, 0, 0, 100);
- dialogRect.center(_globals->_events._mousePos.x, _globals->_events._mousePos.y);
-
- // Ensure the dialog will be entirely on-screen
- Rect screenRect = _globals->gfxManager()._bounds;
- screenRect.collapse(4, 4);
- dialogRect.contain(screenRect);
-
- _bounds = dialogRect;
- _gfxManager._bounds = _bounds;
-
- _highlightedButton = NULL;
- _selectedAction = -1;
-}
-
-RightClickDialog::~RightClickDialog() {
-}
-
-RightClickButton *RightClickDialog::findButton(const Common::Point &pt) {
- RightClickButton *btnList[] = { &_walkButton, &_lookButton, &_useButton, &_talkButton, &_inventoryButton, &_optionsButton };
-
- for (int i = 0; i < 6; ++i) {
- btnList[i]->_owner = this;
-
- if (btnList[i]->_bounds.contains(pt))
- return btnList[i];
- }
-
- return NULL;
-}
-
-void RightClickDialog::draw() {
- // Save the covered background area
- _savedArea = Surface_getArea(_globals->_gfxManagerInstance.getSurface(), _bounds);
-
- // Draw the dialog image
- _globals->gfxManager().copyFrom(_surface, _bounds.left, _bounds.top);
-}
-
-bool RightClickDialog::process(Event &event) {
- switch (event.eventType) {
- case EVENT_MOUSE_MOVE: {
- // Check whether a button is highlighted
- RightClickButton *btn = findButton(event.mousePos);
-
- if (btn != _highlightedButton) {
- // De-highlight any previously selected button
- if (_highlightedButton) {
- _highlightedButton->highlight();
- _highlightedButton = NULL;
- }
- if (btn) {
- // Highlight the new button
- btn->highlight();
- _highlightedButton = btn;
- }
- }
- event.handled = true;
- return true;
- }
-
- case EVENT_BUTTON_DOWN:
- // If a button is highlighted, then flag the selected button index
- if (_highlightedButton)
- _selectedAction = _highlightedButton->_buttonIndex;
- else
- _selectedAction = _lookButton._buttonIndex;
- event.handled = true;
- return true;
-
- default:
- break;
- }
-
- return false;
-}
-
-void RightClickDialog::execute() {
- // Draw the dialog
- draw();
-
- // Dialog event handler loop
- _gfxManager.activate();
-
- while (!_vm->getEventManager()->shouldQuit() && (_selectedAction == -1)) {
- Event evt;
- while (_globals->_events.getEvent(evt, EVENT_MOUSE_MOVE | EVENT_BUTTON_DOWN)) {
- evt.mousePos.x -= _bounds.left;
- evt.mousePos.y -= _bounds.top;
-
- process(evt);
- }
-
- g_system->delayMillis(10);
- g_system->updateScreen();
- }
-
- // Execute the specified action
- switch (_selectedAction) {
- case 1:
- // Look action
- _globals->_events.setCursor(CURSOR_LOOK);
- break;
- case 2:
- // Walk action
- _globals->_events.setCursor(CURSOR_WALK);
- break;
- case 3:
- // Use cursor
- _globals->_events.setCursor(CURSOR_USE);
- break;
- case 4:
- // Talk cursor
- _globals->_events.setCursor(CURSOR_TALK);
- break;
- case 5:
- // Inventory dialog
- InventoryDialog::show();
- break;
- case 6:
- // Dialog options
- OptionsDialog::show();
- break;
- }
-
- _gfxManager.deactivate();
-}
-
-/*--------------------------------------------------------------------------*/
-
void ModalDialog::draw() {
// Set the palette for use in the dialog
setPalette();
@@ -296,7 +116,7 @@ void ModalDialog::draw() {
// Make a backup copy of the area the dialog will occupy
Rect tempRect = _bounds;
tempRect.collapse(-10, -10);
- _savedArea = Surface_getArea(_globals->_gfxManagerInstance.getSurface(), tempRect);
+ _savedArea = Surface_getArea(g_globals->_gfxManagerInstance.getSurface(), tempRect);
_gfxManager.activate();
@@ -318,7 +138,7 @@ void ModalDialog::drawFrame() {
_bounds.collapse(-10, -10);
// Fill the dialog area
- _globals->gfxManager().fillRect(origRect, 54);
+ g_globals->gfxManager().fillRect(origRect, 54);
// Draw top line
GfxSurface surface = surfaceFromRes(8, 1, 7);
@@ -465,14 +285,14 @@ void InventoryDialog::execute() {
bool lookFlag = false;
_gfxManager.activate();
- while (!_vm->getEventManager()->shouldQuit()) {
+ while (!g_vm->shouldQuit()) {
// Get events
Event event;
- while (!_globals->_events.getEvent(event) && !_vm->getEventManager()->shouldQuit()) {
+ while (!g_globals->_events.getEvent(event) && !g_vm->shouldQuit()) {
g_system->delayMillis(10);
g_system->updateScreen();
}
- if (_vm->getEventManager()->shouldQuit())
+ if (g_vm->shouldQuit())
break;
hiliteObj = NULL;
@@ -499,18 +319,18 @@ void InventoryDialog::execute() {
if (hiliteObj == &_btnOk) {
// Ok button clicked
if (lookFlag)
- _globals->_events.setCursor(CURSOR_WALK);
+ g_globals->_events.setCursor(CURSOR_WALK);
break;
} else if (hiliteObj == &_btnLook) {
// Look button clicked
if (_btnLook._message == LOOK_BTN_STRING) {
_btnLook._message = PICK_BTN_STRING;
lookFlag = 1;
- _globals->_events.setCursor(CURSOR_LOOK);
+ g_globals->_events.setCursor(CURSOR_LOOK);
} else {
_btnLook._message = LOOK_BTN_STRING;
lookFlag = 0;
- _globals->_events.setCursor(CURSOR_WALK);
+ g_globals->_events.setCursor(CURSOR_WALK);
}
hiliteObj->draw();
@@ -518,7 +338,7 @@ void InventoryDialog::execute() {
// Inventory item selected
InvObject *invObject = static_cast<GfxInvImage *>(hiliteObj)->_invObject;
if (lookFlag) {
- _globals->_screenSurface.displayText(invObject->_description);
+ g_globals->_screenSurface.displayText(invObject->_description);
} else {
RING_INVENTORY._selectedItem = invObject;
invObject->setCursor();
@@ -540,19 +360,20 @@ void OptionsDialog::show() {
if (btn == &dlg->_btnQuit) {
// Quit game
if (MessageDialog::show(QUIT_CONFIRM_MSG, CANCEL_BTN_STRING, QUIT_BTN_STRING) == 1) {
- _vm->quitGame();
+ g_vm->quitGame();
}
} else if (btn == &dlg->_btnRestart) {
// Restart game
- _globals->_game->restartGame();
+ g_globals->_game->restartGame();
} else if (btn == &dlg->_btnSound) {
// Sound dialog
+ SoundDialog::execute();
} else if (btn == &dlg->_btnSave) {
// Save button
- _globals->_game->saveGame();
+ g_globals->_game->saveGame();
} else if (btn == &dlg->_btnRestore) {
// Restore button
- _globals->_game->restoreGame();
+ g_globals->_game->restoreGame();
}
dlg->remove();
@@ -594,5 +415,14 @@ OptionsDialog::OptionsDialog() {
setCenter(160, 100);
}
+/*--------------------------------------------------------------------------*/
+
+void SoundDialog::execute() {
+ ConfigDialog *dlg = new ConfigDialog();
+ dlg->runModal();
+ delete dlg;
+ g_globals->_soundManager.syncSounds();
+ g_globals->_events.setCursorFromFlag();
+}
-} // End of namespace tSage
+} // End of namespace TsAGE
diff --git a/engines/tsage/dialogs.h b/engines/tsage/dialogs.h
index a50307f775..35ed60ba1a 100644
--- a/engines/tsage/dialogs.h
+++ b/engines/tsage/dialogs.h
@@ -30,7 +30,7 @@
#include "common/rect.h"
#include "common/system.h"
-namespace tSage {
+namespace TsAGE {
class MessageDialog : public GfxDialog {
public:
@@ -49,35 +49,6 @@ public:
ConfigDialog();
};
-class RightClickButton : public GfxButton {
-private:
- GfxSurface *_savedButton;
-public:
- int _buttonIndex;
-
- RightClickButton(int buttonIndex, int xp, int yp);
- ~RightClickButton() { delete _savedButton; }
-
- virtual void highlight();
-};
-
-class RightClickDialog : public GfxDialog {
-private:
- GfxSurface _surface;
- RightClickButton *_highlightedButton;
- int _selectedAction;
- RightClickButton _walkButton, _lookButton, _useButton, _talkButton, _inventoryButton, _optionsButton;
-
- RightClickButton *findButton(const Common::Point &pt);
-public:
- RightClickDialog();
- ~RightClickDialog();
-
- virtual void draw();
- virtual bool process(Event &event);
- void execute();
-};
-
/*--------------------------------------------------------------------------*/
class ModalDialog : public GfxDialog {
@@ -128,6 +99,13 @@ public:
static void show();
};
-} // End of namespace tSage
+/*--------------------------------------------------------------------------*/
+
+class SoundDialog {
+public:
+ static void execute();
+};
+
+} // End of namespace TsAGE
#endif
diff --git a/engines/tsage/events.cpp b/engines/tsage/events.cpp
index a24f65421b..073cbc35b9 100644
--- a/engines/tsage/events.cpp
+++ b/engines/tsage/events.cpp
@@ -31,7 +31,7 @@
#include "tsage/tsage.h"
#include "tsage/globals.h"
-namespace tSage {
+namespace TsAGE {
EventsClass::EventsClass() {
_currentCursor = CURSOR_NONE;
@@ -39,7 +39,8 @@ EventsClass::EventsClass() {
_frameNumber = 0;
_priorFrameTime = 0;
_prevDelayFrame = 0;
- _saver->addListener(this);
+ g_saver->addListener(this);
+ g_saver->addLoadNotifier(&EventsClass::loadNotifierProc);
}
bool EventsClass::pollEvent() {
@@ -78,7 +79,7 @@ bool EventsClass::pollEvent() {
void EventsClass::waitForPress(int eventMask) {
Event evt;
- while (!_vm->getEventManager()->shouldQuit() && !getEvent(evt, eventMask))
+ while (!g_vm->shouldQuit() && !getEvent(evt, eventMask))
g_system->delayMillis(10);
}
@@ -86,7 +87,7 @@ void EventsClass::waitForPress(int eventMask) {
* Standard event retrieval, which only returns keyboard and mouse clicks
*/
bool EventsClass::getEvent(Event &evt, int eventMask) {
- while (pollEvent() && !_vm->getEventManager()->shouldQuit()) {
+ while (pollEvent() && !g_vm->shouldQuit()) {
evt.handled = false;
evt.eventType = EVENT_NONE;
evt.mousePos = _event.mouse;
@@ -142,43 +143,76 @@ void EventsClass::setCursor(CursorType cursorType) {
return;
_lastCursor = cursorType;
- _globals->clearFlag(122);
+ g_globals->clearFlag(122);
CursorMan.showMouse(true);
const byte *cursor;
bool delFlag = true;
uint size;
+ bool questionEnabled = false;
switch (cursorType) {
case CURSOR_NONE:
// No cursor
- _globals->setFlag(122);
+ g_globals->setFlag(122);
- if (_vm->getFeatures() & GF_DEMO) {
+ if ((g_vm->getFeatures() & GF_DEMO) || (g_vm->getGameID() != GType_Ringworld)) {
CursorMan.showMouse(false);
return;
}
- cursor = _resourceManager->getSubResource(4, 1, 6, &size);
+ cursor = g_resourceManager->getSubResource(4, 1, 6, &size);
break;
case CURSOR_LOOK:
// Look cursor
- cursor = _resourceManager->getSubResource(4, 1, 5, &size);
+ if (g_vm->getGameID() == GType_BlueForce) {
+ cursor = g_resourceManager->getSubResource(1, 5, 3, &size);
+ } else if (g_vm->getGameID() == GType_Ringworld2) {
+ cursor = g_resourceManager->getSubResource(5, 1, 5, &size);
+ } else {
+ cursor = g_resourceManager->getSubResource(4, 1, 5, &size);
+ }
_currentCursor = CURSOR_LOOK;
break;
case CURSOR_USE:
// Use cursor
- cursor = _resourceManager->getSubResource(4, 1, 4, &size);
+ if (g_vm->getGameID() == GType_BlueForce) {
+ cursor = g_resourceManager->getSubResource(1, 5, 2, &size);
+ } else if (g_vm->getGameID() == GType_Ringworld2) {
+ cursor = g_resourceManager->getSubResource(5, 1, 4, &size);
+ } else {
+ cursor = g_resourceManager->getSubResource(4, 1, 4, &size);
+ }
_currentCursor = CURSOR_USE;
break;
case CURSOR_TALK:
// Talk cursor
- cursor = _resourceManager->getSubResource(4, 1, 3, &size);
+ if (g_vm->getGameID() == GType_BlueForce) {
+ cursor = g_resourceManager->getSubResource(1, 5, 4, &size);
+ } else if (g_vm->getGameID() == GType_Ringworld2) {
+ cursor = g_resourceManager->getSubResource(5, 1, 6, &size);
+ } else {
+ cursor = g_resourceManager->getSubResource(4, 1, 3, &size);
+ }
_currentCursor = CURSOR_TALK;
break;
+ case CURSOR_EXIT:
+ // Exit cursor (Blue Force)
+ assert(g_vm->getGameID() == GType_BlueForce);
+ cursor = g_resourceManager->getSubResource(1, 5, 7, &size);
+ _currentCursor = CURSOR_EXIT;
+ break;
+
+ case CURSOR_PRINTER:
+ // Printer cursor (Blue Force)
+ assert(g_vm->getGameID() == GType_BlueForce);
+ cursor = g_resourceManager->getSubResource(1, 7, 6, &size);
+ _currentCursor = CURSOR_PRINTER;
+ break;
+
case CURSOR_ARROW:
// Arrow cursor
cursor = CURSOR_ARROW_DATA;
@@ -187,10 +221,22 @@ void EventsClass::setCursor(CursorType cursorType) {
case CURSOR_WALK:
default:
- // Walk cursor
- cursor = CURSOR_WALK_DATA;
- _currentCursor = CURSOR_WALK;
- delFlag = false;
+ if (g_vm->getGameID() == GType_BlueForce) {
+ if (cursorType == CURSOR_WALK) {
+ cursor = g_resourceManager->getSubResource(1, 5, 1, &size);
+ } else {
+ // Inventory icon
+ cursor = g_resourceManager->getSubResource(10, ((int)cursorType - 1) / 20 + 1,
+ ((int)cursorType - 1) % 20 + 1, &size);
+ questionEnabled = true;
+ }
+ _currentCursor = cursorType;
+ } else {
+ // For Ringworld, always treat as the walk cursor
+ cursor = CURSOR_WALK_DATA;
+ _currentCursor = CURSOR_WALK;
+ delFlag = false;
+ }
break;
}
@@ -204,6 +250,10 @@ void EventsClass::setCursor(CursorType cursorType) {
if (delFlag)
DEALLOCATE(cursor);
+
+ // For Blue Force, enable the question button when an inventory icon is selected
+ if (g_vm->getGameID() == GType_BlueForce)
+ T2_GLOBALS._uiElements._question.setEnabled(questionEnabled);
}
void EventsClass::pushCursor(CursorType cursorType) {
@@ -214,22 +264,22 @@ void EventsClass::pushCursor(CursorType cursorType) {
switch (cursorType) {
case CURSOR_NONE:
// No cursor
- cursor = _resourceManager->getSubResource(4, 1, 6, &size);
+ cursor = g_resourceManager->getSubResource(4, 1, 6, &size);
break;
case CURSOR_LOOK:
// Look cursor
- cursor = _resourceManager->getSubResource(4, 1, 5, &size);
+ cursor = g_resourceManager->getSubResource(4, 1, 5, &size);
break;
case CURSOR_USE:
// Use cursor
- cursor = _resourceManager->getSubResource(4, 1, 4, &size);
+ cursor = g_resourceManager->getSubResource(4, 1, 4, &size);
break;
case CURSOR_TALK:
// Talk cursor
- cursor = _resourceManager->getSubResource(4, 1, 3, &size);
+ cursor = g_resourceManager->getSubResource(4, 1, 3, &size);
break;
case CURSOR_ARROW:
@@ -269,6 +319,17 @@ void EventsClass::setCursor(Graphics::Surface &cursor, int transColor, const Com
_currentCursor = cursorId;
}
+void EventsClass::setCursor(GfxSurface &cursor) {
+ // TODO: Find proper parameters for this form in Blue Force
+ Graphics::Surface s = cursor.lockSurface();
+
+ const byte *cursorData = (const byte *)s.getBasePtr(0, 0);
+ CursorMan.replaceCursor(cursorData, cursor.getBounds().width(), cursor.getBounds().height(),
+ cursor._centroid.x, cursor._centroid.y, cursor._transColor);
+
+ _lastCursor = CURSOR_NONE;
+}
+
void EventsClass::setCursorFromFlag() {
setCursor(isCursorVisible() ? _currentCursor : CURSOR_NONE);
}
@@ -277,12 +338,14 @@ void EventsClass::showCursor() {
setCursor(_currentCursor);
}
-void EventsClass::hideCursor() {
+CursorType EventsClass::hideCursor() {
+ CursorType oldCursor = _currentCursor;
setCursor(CURSOR_NONE);
+ return oldCursor;
}
bool EventsClass::isCursorVisible() const {
- return !_globals->getFlag(122);
+ return !g_globals->getFlag(122);
}
/**
@@ -315,4 +378,13 @@ void EventsClass::listenerSynchronize(Serializer &s) {
}
}
-} // end of namespace tSage
+void EventsClass::loadNotifierProc(bool postFlag) {
+ if (postFlag) {
+ if (g_globals->_events._lastCursor == CURSOR_NONE)
+ g_globals->_events._lastCursor = g_globals->_events._currentCursor;
+ else
+ g_globals->_events._lastCursor = CURSOR_NONE;
+ }
+}
+
+} // end of namespace TsAGE
diff --git a/engines/tsage/events.h b/engines/tsage/events.h
index a13455d378..874020f140 100644
--- a/engines/tsage/events.h
+++ b/engines/tsage/events.h
@@ -29,7 +29,7 @@
#include "graphics/surface.h"
#include "tsage/saveload.h"
-namespace tSage {
+namespace TsAGE {
enum EventType {EVENT_NONE = 0, EVENT_BUTTON_DOWN = 1, EVENT_BUTTON_UP = 2, EVENT_KEYPRESS = 4,
EVENT_MOUSE_MOVE = 8};
@@ -37,6 +37,7 @@ enum EventType {EVENT_NONE = 0, EVENT_BUTTON_DOWN = 1, EVENT_BUTTON_UP = 2, EVEN
enum ButtonShiftFlags {BTNSHIFT_LEFT = 0, BTNSHIFT_RIGHT = 3, BTNSHIFT_MIDDLE = 4};
// Intrinisc game delay between execution frames. This runs at 60Hz
+#define GAME_FRAME_RATE 60
#define GAME_FRAME_TIME (1000 / 60)
class GfxManager;
@@ -53,6 +54,7 @@ public:
};
enum CursorType {
+ // Ringworld objects
OBJECT_STUNNER = 0, OBJECT_SCANNER = 1, OBJECT_STASIS_BOX = 2,
OBJECT_INFODISK = 3, OBJECT_STASIS_NEGATOR = 4, OBJECT_KEY_DEVICE = 5, OBJECT_MEDKIT = 6,
OBJECT_LADDER = 7, OBJECT_ROPE = 8, OBJECT_KEY = 9, OBJECT_TRANSLATOR = 10, OBJECT_ALE = 11,
@@ -62,10 +64,42 @@ enum CursorType {
OBJECT_NULLIFIER = 25, OBJECT_PEG = 26, OBJECT_VIAL = 27, OBJECT_JACKET = 28,
OBJECT_TUNIC2 = 29, OBJECT_BONE = 30, OBJECT_EMPTY_JAR = 31, OBJECT_JAR = 32,
+ // Blue Force objects
+ INV_NONE = 0, INV_COLT45 = 1, INV_AMMO_CLIP = 2, INV_SPARE_CLIP = 3, INV_HANDCUFFS = 4,
+ INV_GREENS_GUN = 5, INV_TICKET_BOOK = 6, INV_MIRANDA_CARD = 7, INV_FOREST_RAP = 8,
+ INV_GREEN_ID = 9, INV_BASEBALL_CARD = 10, INV_BOOKING_GREEN = 11, INV_FLARE = 12,
+ INV_COBB_RAP = 13, INV_22_BULLET = 14, INV_AUTO_RIFLE = 15, INV_WIG = 16, INV_FRANKIE_ID = 17,
+ INV_TYRONE_ID = 18, INV_22_SNUB = 19, INV_BOOKING_FRANKIE = 21, INV_BOOKING_GANG = 22,
+ INV_FBI_TELETYPE = 23, INV_DA_NOTE = 24, INV_PRINT_OUT = 25, INV_WAREHOUSE_KEYS = 26,
+ INV_CENTER_PUNCH = 27, INV_TRANQ_GUN = 28, INV_HOOK = 29, INV_RAGS = 30, INV_JAR = 31,
+ INV_SCREWDRIVER = 32, INV_D_FLOPPY = 33, INV_BLANK_DISK = 34, INV_STICK = 35,
+ INV_CRATE1 = 36, INV_CRATE2 = 37, INV_SHOEBOX = 38, INV_BADGE = 39, INV_RENTAL_COUPON = 41,
+ INV_NICKEL = 42, INV_LYLE_CARD = 43, INV_CARTER_NOTE = 44, INV_MUG_SHOT = 45,
+ INV_CLIPPING = 46, INV_MICROFILM = 47, INV_WAVE_KEYS = 48, INV_RENTAL_KEYS = 49,
+ INV_NAPKIN = 50, INV_DMV_PRINTOUT = 51, INV_FISHING_NET = 52, INV_ID = 53,
+ INV_9MM_BULLETS = 54, INV_SCHEDULE = 55, INV_GRENADES = 56, INV_YELLOW_CORD = 57,
+ INV_HALF_YELLOW_CORD = 58, INV_BLACK_CORD = 59, INV_HALF_BLACK_CORD = 61, INV_WARRANT = 62,
+ INV_JACKET = 63, INV_GREENS_KNIFE = 64, INV_DOG_WHISTLE = 65, INV_AMMO_BELT = 66,
+ INV_CARAVAN_KEY = 67, BF_LAST_INVENT = 68,
+
+ // Ringworld 2 objects
+ R2_1 = 1, R2_2 = 2, R2_3 = 3, R2_STEPPING_DISKS = 4, R2_5 = 5, R2_6 = 6, R2_7 = 7,
+ R2_8 = 8, R2_9 = 9, R2_10 = 10, R2_11 = 11, R2_12 = 12, R2_13 = 13, R2_14 = 14,
+ R2_15 = 15, R2_16 = 16, R2_17 = 17, R2_18 = 18, R2_19 = 19, R2_20 = 20, R2_21 = 21,
+ R2_22 = 22, R2_23 = 23, R2_24 = 24, R2_25 = 25, R2_26 = 26, R2_27 = 27, R2_28 = 28,
+ R2_29 = 29, R2_30 = 30, R2_31 = 31, R2_32 = 32, R2_33 = 33, R2_34 = 34, R2_35 = 35,
+ R2_36 = 36, R2_37 = 37, R2_38 = 38, R2_39 = 39, R2_40 = 40, R2_41 = 41, R2_42 = 42,
+ R2_43 = 43, R2_44 = 44, R2_45 = 45, R2_46 = 46, R2_47 = 47, R2_48 = 48, R2_49 = 49,
+ R2_50 = 50, R2_51 = 51, R2_52 = 52,
+
+ // Cursors
CURSOR_WALK = 0x100, CURSOR_LOOK = 0x200, CURSOR_700 = 700, CURSOR_USE = 0x400, CURSOR_TALK = 0x800,
+ CURSOR_1000 = 0x1000, CURSOR_PRINTER = 0x4000, CURSOR_EXIT = 0x7004, CURSOR_9999 = 9999,
CURSOR_NONE = -1, CURSOR_CROSSHAIRS = -2, CURSOR_ARROW = -3
};
+class GfxSurface;
+
class EventsClass : public SaveListener {
private:
Common::Event _event;
@@ -83,10 +117,11 @@ public:
void pushCursor(CursorType cursorType);
void popCursor();
void setCursor(Graphics::Surface &cursor, int transColor, const Common::Point &hotspot, CursorType cursorId);
+ void setCursor(GfxSurface &cursor);
void setCursorFromFlag();
CursorType getCursor() const { return _currentCursor; }
void showCursor();
- void hideCursor();
+ CursorType hideCursor();
bool isCursorVisible() const;
bool pollEvent();
@@ -97,10 +132,13 @@ public:
Common::EventType type() { return _event.type; }
uint32 getFrameNumber() const { return _frameNumber; }
void delay(int numFrames);
+ bool isInventoryIcon() const { return _currentCursor < 256; }
+ void proc1() { warning("TODO: EventsClass::proc1"); }
virtual void listenerSynchronize(Serializer &s);
+ static void loadNotifierProc(bool postFlag);
};
-} // End of namespace tSage
+} // End of namespace TsAGE
#endif
diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp
index 34b26ec311..7711e7fba7 100644
--- a/engines/tsage/globals.cpp
+++ b/engines/tsage/globals.cpp
@@ -22,14 +22,15 @@
#include "tsage/globals.h"
#include "tsage/tsage.h"
-#include "tsage/blueforce_logic.h"
-#include "tsage/ringworld_demo.h"
-#include "tsage/ringworld_logic.h"
+#include "tsage/blue_force/blueforce_logic.h"
+#include "tsage/ringworld/ringworld_demo.h"
+#include "tsage/ringworld/ringworld_logic.h"
+#include "tsage/ringworld2/ringworld2_logic.h"
-namespace tSage {
+namespace TsAGE {
-Globals *_globals = NULL;
-ResourceManager *_resourceManager = NULL;
+Globals *g_globals = NULL;
+ResourceManager *g_resourceManager = NULL;
/*--------------------------------------------------------------------------*/
@@ -51,12 +52,12 @@ static SavedObject *classFactoryProc(const Common::String &className) {
/*--------------------------------------------------------------------------*/
Globals::Globals() : _dialogCenter(160, 140), _gfxManagerInstance(_screenSurface),
- _randomSource("tsage"), _unkColor1(0), _unkColor2(255), _unkColor3(255) {
+ _randomSource("tsage"), _color1(0), _color2(255), _color3(255) {
reset();
_stripNum = 0;
_gfxEdgeAdjust = 3;
- if (_vm->getFeatures() & GF_DEMO) {
+ if (g_vm->getFeatures() & GF_DEMO) {
_gfxFontNumber = 0;
_gfxColors.background = 6;
_gfxColors.foreground = 0;
@@ -64,18 +65,34 @@ Globals::Globals() : _dialogCenter(160, 140), _gfxManagerInstance(_screenSurface
_fontColors.foreground = 6;
_dialogCenter.y = 80;
// Workaround in order to use later version of the engine
- _unkColor1 = _gfxColors.foreground;
- _unkColor2 = _gfxColors.foreground;
- _unkColor3 = _gfxColors.foreground;
- } else if ((_vm->getGameID() == GType_Ringworld) && (_vm->getFeatures() & GF_CD)) {
+ _color1 = _gfxColors.foreground;
+ _color2 = _gfxColors.foreground;
+ _color3 = _gfxColors.foreground;
+ } else if (g_vm->getGameID() == GType_BlueForce) {
+ // Blue Force
+ _gfxFontNumber = 0;
+ _gfxColors.background = 89;
+ _gfxColors.foreground = 83;
+ _fontColors.background = 88;
+ _fontColors.foreground = 92;
+ _dialogCenter.y = 140;
+ } else if (g_vm->getGameID() == GType_Ringworld2) {
+ // Return to Ringworld
+ _gfxFontNumber = 2;
+ _gfxColors.background = 89;
+ _gfxColors.foreground = 83;
+ _fontColors.background = 88;
+ _fontColors.foreground = 92;
+ _dialogCenter.y = 140;
+ } else if ((g_vm->getGameID() == GType_Ringworld) && (g_vm->getFeatures() & GF_CD)) {
_gfxFontNumber = 50;
_gfxColors.background = 53;
_gfxColors.foreground = 0;
_fontColors.background = 51;
_fontColors.foreground = 54;
- _unkColor1 = 18;
- _unkColor2 = 18;
- _unkColor3 = 18;
+ _color1 = 18;
+ _color2 = 18;
+ _color3 = 18;
} else {
_gfxFontNumber = 50;
_gfxColors.background = 53;
@@ -83,9 +100,9 @@ Globals::Globals() : _dialogCenter(160, 140), _gfxManagerInstance(_screenSurface
_fontColors.background = 51;
_fontColors.foreground = 54;
// Workaround in order to use later version of the engine
- _unkColor1 = _gfxColors.foreground;
- _unkColor2 = _gfxColors.foreground;
- _unkColor3 = _gfxColors.foreground;
+ _color1 = _gfxColors.foreground;
+ _color2 = _gfxColors.foreground;
+ _color3 = _gfxColors.foreground;
}
_screenSurface.setScreenSurface();
_gfxManagers.push_back(&_gfxManagerInstance);
@@ -100,31 +117,42 @@ Globals::Globals() : _dialogCenter(160, 140), _gfxManagerInstance(_screenSurface
_scrollFollower = NULL;
_inventory = NULL;
- switch (_vm->getGameID()) {
+ switch (g_vm->getGameID()) {
case GType_Ringworld:
- if (!(_vm->getFeatures() & GF_DEMO)) {
- _inventory = new RingworldInvObjectList();
- _game = new RingworldGame();
+ if (!(g_vm->getFeatures() & GF_DEMO)) {
+ _inventory = new Ringworld::RingworldInvObjectList();
+ _game = new Ringworld::RingworldGame();
} else {
- _game = new RingworldDemoGame();
+ _game = new Ringworld::RingworldDemoGame();
}
+ _sceneHandler = new SceneHandler();
break;
case GType_BlueForce:
- _game = new BlueForceGame();
+ _game = new BlueForce::BlueForceGame();
+ _inventory = new BlueForce::BlueForceInvObjectList();
+ _sceneHandler = new BlueForce::SceneHandlerExt();
+ break;
+
+ case GType_Ringworld2:
+ _inventory = new Ringworld2::Ringworld2InvObjectList();
+ _game = new Ringworld2::Ringworld2Game();
+ _sceneHandler = new SceneHandler();
break;
}
}
Globals::~Globals() {
+ _scenePalette.clearListeners();
delete _inventory;
+ delete _sceneHandler;
delete _game;
- _globals = NULL;
+ g_globals = NULL;
}
void Globals::reset() {
Common::set_to(&_flags[0], &_flags[MAX_FLAGS], false);
- _saver->addFactory(classFactoryProc);
+ g_saver->addFactory(classFactoryProc);
}
void Globals::synchronize(Serializer &s) {
@@ -142,9 +170,9 @@ void Globals::synchronize(Serializer &s) {
s.syncAsSint32LE(_fontColors.foreground);
if (s.getVersion() >= 4) {
- s.syncAsByte(_unkColor1);
- s.syncAsByte(_unkColor2);
- s.syncAsByte(_unkColor3);
+ s.syncAsByte(_color1);
+ s.syncAsByte(_color2);
+ s.syncAsByte(_color3);
}
s.syncAsSint16LE(_dialogCenter.x); s.syncAsSint16LE(_dialogCenter.y);
@@ -166,5 +194,175 @@ void Globals::dispatchSounds() {
Common::for_each(_sounds.begin(), _sounds.end(), Globals::dispatchSound);
}
+/*--------------------------------------------------------------------------*/
+
+void TsAGE2Globals::reset() {
+ Globals::reset();
+
+ // Reset the inventory
+ T2_GLOBALS._uiElements.updateInventory();
+ T2_GLOBALS._uiElements._scoreValue = 0;
+ T2_GLOBALS._uiElements._active = false;
+}
+
+/*--------------------------------------------------------------------------*/
+
+namespace BlueForce {
+
+BlueForceGlobals::BlueForceGlobals(): TsAGE2Globals() {
+}
+
+void BlueForceGlobals::synchronize(Serializer &s) {
+ Globals::synchronize(s);
+
+ s.syncAsSint16LE(_dayNumber);
+ s.syncAsSint16LE(_v4CEA4);
+ s.syncAsSint16LE(_v4CEAA);
+ s.syncAsSint16LE(_marinaWomanCtr);
+ s.syncAsSint16LE(_v4CEB0);
+ s.syncAsSint16LE(_v4CEB6);
+ s.syncAsSint16LE(_safeCombination);
+ s.syncAsSint16LE(_v4CEC0);
+ s.syncAsSint16LE(_greenDay5TalkCtr);
+ s.syncAsSint16LE(_v4CEC4);
+ s.syncAsSint16LE(_v4CEC8);
+ s.syncAsSint16LE(_v4CECA);
+ s.syncAsSint16LE(_v4CECC);
+ for (int i = 0; i < 18; i++)
+ s.syncAsByte(_v4CECE[i]);
+ s.syncAsSint16LE(_v4CEE0);
+ s.syncAsSint16LE(_v4CEE2);
+ s.syncAsSint16LE(_v4CEE4);
+ s.syncAsSint16LE(_v4CEE6);
+ s.syncAsSint16LE(_v4CEE8);
+ s.syncAsSint16LE(_deziTopic);
+ s.syncAsSint16LE(_deathReason);
+ s.syncAsSint16LE(_driveFromScene);
+ s.syncAsSint16LE(_driveToScene);
+ s.syncAsSint16LE(_v501F8);
+ s.syncAsSint16LE(_v501FA);
+ s.syncAsSint16LE(_v501FC);
+ s.syncAsSint16LE(_v5020C);
+ s.syncAsSint16LE(_v50696);
+ s.syncAsSint16LE(_v5098C);
+ s.syncAsSint16LE(_v5098D);
+ s.syncAsSint16LE(_v50CC2);
+ s.syncAsSint16LE(_v50CC4);
+ s.syncAsSint16LE(_v50CC6);
+ s.syncAsSint16LE(_v50CC8);
+ s.syncAsSint16LE(_v51C42);
+ s.syncAsSint16LE(_v51C44);
+ s.syncAsSint16LE(_interfaceY);
+ s.syncAsSint16LE(_bookmark);
+ s.syncAsSint16LE(_mapLocationId);
+ s.syncAsSint16LE(_clip1Bullets);
+ s.syncAsSint16LE(_clip2Bullets);
+}
+
+void BlueForceGlobals::reset() {
+ TsAGE2Globals::reset();
+ _scenePalette.clearListeners();
+
+ _scrollFollower = &_player;
+ _bookmark = bNone;
+
+ // Reset the inventory
+ ((BlueForceInvObjectList *)_inventory)->reset();
+
+ _mapLocationId = 1;
+ _driveFromScene = 300;
+ _driveToScene = 0;
+
+ _interfaceY = UI_INTERFACE_Y;
+ _dayNumber = 0;
+ _v4CEA4 = 0;
+ _v4CEAA = 0;
+ _marinaWomanCtr = 0;
+ _v4CEB0 = 0;
+ _v4CEB6 = 0;
+ _safeCombination = 0;
+ _v4CEC0 = 0;
+ _greenDay5TalkCtr = 0;
+ _v4CEC4 = 0;
+ _v4CEC8 = 1;
+ _v4CECA = 0;
+ _v4CECC = 0;
+ _v4CECE[0] = 2;
+ _v4CECE[1] = 2;
+ _v4CECE[2] = 2;
+ _v4CECE[3] = 1;
+ _v4CECE[4] = 2;
+ _v4CECE[5] = 2;
+ _v4CECE[6] = 2;
+ _v4CECE[7] = 2;
+ _v4CECE[8] = 2;
+ _v4CECE[9] = 2;
+ _v4CECE[10] = 2;
+ _v4CECE[11] = 2;
+ _v4CECE[12] = 1;
+ _v4CECE[13] = 1;
+ _v4CECE[14] = 2;
+ _v4CECE[15] = 2;
+ _v4CECE[16] = 3;
+ _v4CECE[17] = 0;
+ _v4CEE0 = 0;
+ _v4CEE2 = 0;
+ _v4CEE4 = 0;
+ _v4CEE6 = 0;
+ _v4CEE8 = 0;
+ _deziTopic = 0;
+ _deathReason = 0;
+ _v501F8 = 0;
+ _v501FA = 0;
+ _v501FC = 0;
+ _v5020C = 0;
+ _v50696 = 0;
+ _v5098C = 0;
+ _v5098D = 0;
+ _v50CC2 = 0;
+ _v50CC4 = 0;
+ _v50CC6 = 0;
+ _v50CC8 = 0;
+ _v51C42 = 0;
+ _v51C44 = 1;
+ _clip1Bullets = 8;
+ _clip2Bullets = 8;
+}
+
+bool BlueForceGlobals::getHasBullets() {
+ if (!getFlag(fGunLoaded))
+ return false;
+ return BF_GLOBALS.getFlag(fLoadedSpare) ? (_clip2Bullets > 0) : (_clip1Bullets > 0);
+}
+
+void BlueForceGlobals::set2Flags(int flagNum) {
+ if (!getFlag(flagNum + 1)) {
+ setFlag(flagNum + 1);
+ setFlag(flagNum);
+ }
+}
+
+bool BlueForceGlobals::removeFlag(int flagNum) {
+ bool result = getFlag(flagNum);
+ clearFlag(flagNum);
+ return result;
+}
+
+} // end of namespace BlueForce
+
+namespace Ringworld2 {
+
+void Ringworld2Globals::reset() {
+ Globals::reset();
+
+ // Reset the inventory
+ R2_INVENTORY.reset();
+ T2_GLOBALS._uiElements.updateInventory();
+ T2_GLOBALS._uiElements._active = false;
+}
+
+
+
+} // end of namespace Ringworld2
-} // end of namespace tSage
+} // end of namespace TsAGE
diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h
index 7cfec718e2..a5293a5ad1 100644
--- a/engines/tsage/globals.h
+++ b/engines/tsage/globals.h
@@ -30,8 +30,9 @@
#include "tsage/events.h"
#include "tsage/sound.h"
#include "tsage/saveload.h"
+#include "tsage/user_interface.h"
-namespace tSage {
+namespace TsAGE {
class Globals : public SavedObject {
private:
@@ -40,7 +41,7 @@ public:
GfxSurface _screenSurface;
GfxManager _gfxManagerInstance;
Common::List<GfxManager *> _gfxManagers;
- SceneHandler _sceneHandler;
+ SceneHandler *_sceneHandler;
Game *_game;
EventsClass _events;
SceneManager _sceneManager;
@@ -54,7 +55,7 @@ public:
int _gfxFontNumber;
GfxColors _gfxColors;
GfxColors _fontColors;
- byte _unkColor1, _unkColor2, _unkColor3;
+ byte _color1, _color2, _color3;
SoundManager _soundManager;
Common::Point _dialogCenter;
WalkRegions _walkRegions;
@@ -76,7 +77,6 @@ public:
Globals();
~Globals();
- void reset();
void setFlag(int flagNum) {
assert((flagNum >= 0) && (flagNum < MAX_FLAGS));
_flags[flagNum] = true;
@@ -93,15 +93,160 @@ public:
GfxManager &gfxManager() { return **_gfxManagers.begin(); }
virtual Common::String getClassName() { return "Globals"; }
virtual void synchronize(Serializer &s);
+ virtual void reset();
+
void dispatchSounds();
};
-extern Globals *_globals;
+typedef bool (*SelectItemProc)(int objectNumber);
+
+/**
+ * The following class represents common globals that were introduced after the release of Ringworld.
+ */
+class TsAGE2Globals: public Globals {
+public:
+ UIElements _uiElements;
+ SelectItemProc _onSelectItem;
+ int _interfaceY;
+
+ TsAGE2Globals() { _onSelectItem = NULL; }
+ virtual void reset();
+};
+
+extern Globals *g_globals;
-// Note: Currently this can't be part of the _globals structure, since it needs to be constructed
+#define GLOBALS (*::TsAGE::g_globals)
+#define T2_GLOBALS (*((::TsAGE::TsAGE2Globals *)g_globals))
+#define BF_GLOBALS (*((::TsAGE::BlueForce::BlueForceGlobals *)g_globals))
+#define R2_GLOBALS (*((::TsAGE::Ringworld2::Ringworld2Globals *)g_globals))
+
+// Note: Currently this can't be part of the g_globals structure, since it needs to be constructed
// prior to many of the fields in Globals execute their constructors
-extern ResourceManager *_resourceManager;
+extern ResourceManager *g_resourceManager;
+
+
+namespace BlueForce {
+
+using namespace TsAGE;
+
+enum Bookmark {
+ bNone,
+ bStartOfGame, bCalledToDomesticViolence, bArrestedGreen, bLauraToParamedics,
+ bBookedGreen, bStoppedFrankie, bBookedFrankie, bBookedFrankieEvidence,
+ bEndOfWorkDayOne, bTalkedToGrannyAboutSkipsCard, bLyleStoppedBy, bEndDayOne,
+ bInspectionDone, bCalledToDrunkStop, bArrestedDrunk, bEndDayTwo,
+ bFlashBackOne, bFlashBackTwo, bFlashBackThree, bDroppedOffLyle, bEndDayThree,
+ bDoneWithIsland, bDoneAtLyles, bEndDayFour, bInvestigateBoat, bFinishedWGreen,
+ bAmbushed, bAmbushOver, bEndOfGame
+};
+
+enum Flag {
+ JAKE_FILE_COPIED, gunClean, onBike, onDuty, fShowedIdToKate, fLateToMarina,
+ fCalledBackup, fWithLyle, gunDrawn, fBackupArrived340, fBriefedBackup,
+ fGotAllSkip340, fToldToLeave340, fBackupIn350, fNetInBoat, fForbesWaiting,
+ fWithCarter, fTalkedToTony, fMugOnKate, takenWeasel, gotTrailer450,
+ showEugeneNapkin, showRapEugene, fMgrCallsWeasel, fCarterMetLyle,
+ fGunLoaded, fLoadedSpare, showEugeneID, fRandomShot350, examinedFile810,
+ shownLyleCrate1, shownLyleRapsheet, shownLyleDisk, shownLylePO,
+ fCanDrawGun, fGotAutoWeapon, fGotBulletsFromDash, fShotSuttersDesk,
+ greenTaken, fLateToDrunkStop, didDrunk, fSearchedTruck, seenFolder,
+ showMugAround, frankInJail, fTalkedCarterDay3, fDecryptedBluePrints,
+ fTalkedToDrunkInCar, fToldLyleOfSchedule, fTalkedShooterNoBkup,
+ fTalkedDriverNoBkup, fDriverOutOfTruck, readGreenRights, readFrankRights,
+ talkedToHarrisAboutDrunk, unlockBoat, fShootGoon, fBlowUpGoon,
+ fTalkedToBarry, fTalkedToLarry, fLeftTraceIn920, fLeftTraceIn900,
+ fBackupAt340, fShotNicoIn910, fGotPointsForTktBook, fGotPointsForMCard,
+ fShowedBluePrint, fGotPointsForPunch, fGotPointsForBox, fGotPointsForBank,
+ fGotPointsForCombo, fGotPointsForCoin, fGotPointsForCPU, fGotPointsForBoots,
+ fGotPointsForCrate, fGotPointsForBlackCord, fGotPointsForGeneratorPlug,
+ fGotPointsForFuseBoxPlug, fGotPointsForStartGenerator, fGotPointsForLightsOn,
+ fGotPointsForOpeningDoor, fGotPointsForClosingDoor, fGotPointsForLightsOff,
+ fGotPointsForGeneratorOff, fGotPointsForCordOnForklift, fGotPointsForCuffingNico,
+ fGotPointsForCuffingDA, fGotPointsForSearchingNico, fGotPointsForSearchingDA,
+ fLeftTraceIn910, fBookedGreenEvidence, fGotPointsForCleaningGun,
+ fGotPointsForMemo, fGotPointsForFBI, fTookTrailerAmmo, fAlertedGreen355,
+ fGotGreen355fTalkedToGrannyDay3, shownFax, beenToJRDay2, shownLyleCrate1Day1,
+ fLyleOnIsland, iWasAmbushed, fGangInCar, fArrivedAtGangStop, ticketVW,
+ f1015Marina, fCan1015Marina, f1015Frankie, fCan1015Frankie, f1015Drunk,
+ fCan1015Drunk, f1027Marina, fCan1027Marina, f1027Frankie, fCan1027Frankie,
+ f1027Drunk, fCan1027Drunk, f1035Marina, fCan1035Marina, f1035Frankie,
+ fCan1035Frankie, f1035Drunk, fCan1035Drunk, f1097Marina, fCan1097Marina,
+ f1097Frankie, fCan1097Frankie, f1097Drunk, fCan1097Drunk, f1098Marina,
+ fCan1098Marina, f1098Frankie, fCan1098Frankie, f1098Drunk, fCan1098Drunk,
+ fCuffedFrankie, fGotPointsForTrapDog, fGotPointsForUnlockGate,
+ fGotPointsForUnlockWarehouse, fGotPointsForLockWarehouse, fGotPointsForLockGate,
+ fGotPointsForFreeDog, fGotPointsForWhistleDog, fGivenNapkin, fCan1004Marina,
+ fCan1004Drunk, fHasLeftDrunk, fHasDrivenFromDrunk, fCrateOpen, fSawGuns,
+ hookPoints
+};
+
+class BlueForceGlobals: public TsAGE2Globals {
+public:
+ ASoundExt _sound1, _sound2, _sound3;
+ StripProxy _stripProxy;
+ int _dayNumber;
+ int _v4CEA4;
+ int _v4CEAA;
+ int _marinaWomanCtr;
+ int _v4CEB0;
+ int _v4CEB6;
+ int _safeCombination;
+ int _v4CEC0;
+ int _greenDay5TalkCtr;
+ int _v4CEC4;
+ int _v4CEC8;
+ int _v4CECA;
+ int _v4CECC;
+ int8 _v4CECE[18];
+ int _v4CEE0;
+ int _v4CEE2;
+ int _v4CEE4;
+ int _v4CEE6;
+ int _v4CEE8;
+ int _deziTopic;
+ int _deathReason;
+ int _driveFromScene;
+ int _driveToScene;
+ int _v501F8;
+ int _v501FA;
+ int _v501FC;
+ int _v5020C;
+ int _v50696;
+ uint8 _v5098C;
+ uint8 _v5098D;
+ int _v50CC2;
+ int _v50CC4;
+ int _v50CC6;
+ int _v50CC8;
+ int _v51C42;
+ int _v51C44;
+ Bookmark _bookmark;
+ int _mapLocationId;
+ int _clip1Bullets, _clip2Bullets;
+
+ BlueForceGlobals();
+ bool getHasBullets();
+
+ virtual Common::String getClassName() { return "BFGlobals"; }
+ virtual void synchronize(Serializer &s);
+ virtual void reset();
+ void set2Flags(int flagNum);
+ bool removeFlag(int flagNum);
+};
+
+} // End of namespace BlueForce
+
+namespace Ringworld2 {
+
+class Ringworld2Globals: public TsAGE2Globals {
+public:
+ ASoundExt _sound1, _sound2, _sound3, _sound4;
+
+ virtual void reset();
+};
+
+} // End of namespace Ringworld2
-} // End of namespace tSage
+} // End of namespace TsAGE
#endif
diff --git a/engines/tsage/graphics.cpp b/engines/tsage/graphics.cpp
index 1d432724dc..4b2da0b456 100644
--- a/engines/tsage/graphics.cpp
+++ b/engines/tsage/graphics.cpp
@@ -30,7 +30,7 @@
#include "graphics/surface.h"
#include "tsage/globals.h"
-namespace tSage {
+namespace TsAGE {
/**
* Creates a new graphics surface with the specified area of another surface
@@ -120,7 +120,7 @@ GfxSurface surfaceFromRes(const byte *imgData) {
GfxSurface surfaceFromRes(int resNum, int rlbNum, int subNum) {
uint size;
- byte *imgData = _resourceManager->getSubResource(resNum, rlbNum, subNum, &size);
+ byte *imgData = g_resourceManager->getSubResource(resNum, rlbNum, subNum, &size);
GfxSurface surface = surfaceFromRes(imgData);
DEALLOCATE(imgData);
@@ -202,8 +202,8 @@ void Rect::resize(const GfxSurface &surface, int xp, int yp, int percent) {
* Expands the pane region to contain the specified Rect
*/
void Rect::expandPanes() {
- _globals->_paneRegions[0].uniteRect(*this);
- _globals->_paneRegions[1].uniteRect(*this);
+ g_globals->_paneRegions[0].uniteRect(*this);
+ g_globals->_paneRegions[1].uniteRect(*this);
}
/**
@@ -326,7 +326,7 @@ void GfxSurface::synchronize(Serializer &s) {
s.syncAsSint16LE(zero);
}
} else {
- int w, h;
+ int w = 0, h = 0;
s.syncAsSint16LE(w);
s.syncAsSint16LE(h);
@@ -408,7 +408,7 @@ bool GfxSurface::displayText(const Common::String &msg, const Common::Point &pt)
// Write for a mouse or keypress
Event event;
- while (!_globals->_events.getEvent(event, EVENT_BUTTON_DOWN | EVENT_KEYPRESS) && !_vm->getEventManager()->shouldQuit())
+ while (!g_globals->_events.getEvent(event, EVENT_BUTTON_DOWN | EVENT_KEYPRESS) && !g_vm->shouldQuit())
;
// Restore the display area
@@ -423,15 +423,15 @@ bool GfxSurface::displayText(const Common::String &msg, const Common::Point &pt)
* Loads a quarter of a screen from a resource
*/
void GfxSurface::loadScreenSection(Graphics::Surface &dest, int xHalf, int yHalf, int xSection, int ySection) {
- int screenNum = _globals->_sceneManager._scene->_activeScreenNumber;
+ int screenNum = g_globals->_sceneManager._scene->_activeScreenNumber;
Rect updateRect(0, 0, 160, 100);
updateRect.translate(xHalf * 160, yHalf * 100);
- int xHalfCount = (_globals->_sceneManager._scene->_backgroundBounds.right + 159) / 160;
- int yHalfCount = (_globals->_sceneManager._scene->_backgroundBounds.bottom + 99) / 100;
+ int xHalfCount = (g_globals->_sceneManager._scene->_backgroundBounds.right + 159) / 160;
+ int yHalfCount = (g_globals->_sceneManager._scene->_backgroundBounds.bottom + 99) / 100;
if (xSection < xHalfCount && ySection < yHalfCount) {
int rlbNum = xSection * yHalfCount + ySection;
- byte *data = _resourceManager->getResource(RES_BITMAP, screenNum, rlbNum);
+ byte *data = g_resourceManager->getResource(RES_BITMAP, screenNum, rlbNum);
for (int y = 0; y < updateRect.height(); ++y) {
byte *pSrc = data + y * 160;
@@ -582,8 +582,8 @@ void GfxSurface::copyFrom(GfxSurface &src, Rect srcBounds, Rect destBounds, Regi
while (tempSrc < (pSrc + destBounds.width())) {
if (!priorityRegion || !priorityRegion->contains(Common::Point(
- xp + _globals->_sceneManager._scene->_sceneBounds.left,
- destBounds.top + y + _globals->_sceneManager._scene->_sceneBounds.top))) {
+ xp + g_globals->_sceneManager._scene->_sceneBounds.left,
+ destBounds.top + y + g_globals->_sceneManager._scene->_sceneBounds.top))) {
if (*tempSrc != src._transColor)
*tempDest = *tempSrc;
}
@@ -609,7 +609,7 @@ void GfxSurface::draw(const Common::Point &pt, Rect *rect) {
*rect = tempRect;
} else {
// Draw image
- _globals->gfxManager().copyFrom(*this, tempRect, NULL);
+ g_globals->gfxManager().copyFrom(*this, tempRect, NULL);
}
}
@@ -623,12 +623,12 @@ GfxElement::GfxElement() {
void GfxElement::setDefaults() {
_flags = 0;
- _fontNumber = _globals->_gfxFontNumber;
- _colors = _globals->_gfxColors;
- _fontColors = _globals->_fontColors;
- _unkColor1 = _globals->_unkColor1;
- _unkColor2 = _globals->_unkColor2;
- _unkColor3 = _globals->_unkColor3;
+ _fontNumber = g_globals->_gfxFontNumber;
+ _colors = g_globals->_gfxColors;
+ _fontColors = g_globals->_fontColors;
+ _color1 = g_globals->_color1;
+ _color2 = g_globals->_color2;
+ _color3 = g_globals->_color3;
}
/**
@@ -636,13 +636,13 @@ void GfxElement::setDefaults() {
*/
void GfxElement::highlight() {
// Get a lock on the surface
- GfxManager &gfxManager = _globals->gfxManager();
+ GfxManager &gfxManager = g_globals->gfxManager();
Graphics::Surface surface = gfxManager.lockSurface();
// Scan through the contents of the element, switching any occurances of the foreground
// color with the background color and vice versa
Rect tempRect(_bounds);
- tempRect.collapse(_globals->_gfxEdgeAdjust - 1, _globals->_gfxEdgeAdjust - 1);
+ tempRect.collapse(g_globals->_gfxEdgeAdjust - 1, g_globals->_gfxEdgeAdjust - 1);
for (int yp = tempRect.top; yp < tempRect.bottom; ++yp) {
byte *lineP = (byte *)surface.getBasePtr(tempRect.left, yp);
@@ -661,7 +661,7 @@ void GfxElement::highlight() {
*/
void GfxElement::drawFrame() {
// Get a lock on the surface and save the active font
- GfxManager &gfxManager = _globals->gfxManager();
+ GfxManager &gfxManager = g_globals->gfxManager();
gfxManager.lockSurface();
uint8 bgColor, fgColor;
@@ -674,7 +674,7 @@ void GfxElement::drawFrame() {
}
Rect tempRect = _bounds;
- tempRect.collapse(_globals->_gfxEdgeAdjust, _globals->_gfxEdgeAdjust);
+ tempRect.collapse(g_globals->_gfxEdgeAdjust, g_globals->_gfxEdgeAdjust);
tempRect.collapse(-1, -1);
gfxManager.fillRect(tempRect, _colors.background);
@@ -715,10 +715,10 @@ bool GfxElement::focusedEvent(Event &event) {
// HACK: It should use the GfxManager object to figure out the relative
// position, but for now this seems like the easiest way.
- int xOffset = mousePos.x - _globals->_events._mousePos.x;
- int yOffset = mousePos.y - _globals->_events._mousePos.y;
+ int xOffset = mousePos.x - g_globals->_events._mousePos.x;
+ int yOffset = mousePos.y - g_globals->_events._mousePos.y;
- while (event.eventType != EVENT_BUTTON_UP && !_vm->getEventManager()->shouldQuit()) {
+ while (event.eventType != EVENT_BUTTON_UP && !g_vm->shouldQuit()) {
g_system->delayMillis(10);
if (_bounds.contains(mousePos)) {
@@ -733,7 +733,7 @@ bool GfxElement::focusedEvent(Event &event) {
highlight();
}
- if (_globals->_events.getEvent(event, EVENT_MOUSE_MOVE | EVENT_BUTTON_UP)) {
+ if (g_globals->_events.getEvent(event, EVENT_MOUSE_MOVE | EVENT_BUTTON_UP)) {
if (event.eventType == EVENT_MOUSE_MOVE) {
mousePos.x = event.mousePos.x + xOffset;
mousePos.y = event.mousePos.y + yOffset;
@@ -769,7 +769,7 @@ void GfxImage::setDefaults() {
// Decode the image
uint size;
- byte *imgData = _resourceManager->getSubResource(_resNum, _rlbNum, _cursorNum, &size);
+ byte *imgData = g_resourceManager->getSubResource(_resNum, _rlbNum, _cursorNum, &size);
_surface = surfaceFromRes(imgData);
DEALLOCATE(imgData);
@@ -781,9 +781,9 @@ void GfxImage::setDefaults() {
void GfxImage::draw() {
Rect tempRect = _bounds;
- tempRect.translate(_globals->gfxManager()._topLeft.x, _globals->gfxManager()._topLeft.y);
+ tempRect.translate(g_globals->gfxManager()._topLeft.x, g_globals->gfxManager()._topLeft.y);
- _globals->gfxManager().copyFrom(_surface, tempRect);
+ g_globals->gfxManager().copyFrom(_surface, tempRect);
}
/*--------------------------------------------------------------------------*/
@@ -805,7 +805,7 @@ void GfxMessage::setDefaults() {
GfxElement::setDefaults();
GfxFontBackup font;
- GfxManager &gfxManager = _globals->gfxManager();
+ GfxManager &gfxManager = g_globals->gfxManager();
Rect tempRect;
gfxManager._font.setFontNumber(this->_fontNumber);
@@ -818,15 +818,15 @@ void GfxMessage::setDefaults() {
void GfxMessage::draw() {
GfxFontBackup font;
- GfxManager &gfxManager = _globals->gfxManager();
+ GfxManager &gfxManager = g_globals->gfxManager();
// Set the font and color
gfxManager.setFillFlag(false);
gfxManager._font.setFontNumber(_fontNumber);
- gfxManager._font._colors.foreground = this->_unkColor1;
- gfxManager._font._colors2.background = this->_unkColor2;
- gfxManager._font._colors2.foreground = this->_unkColor3;
+ gfxManager._font._colors.foreground = this->_color1;
+ gfxManager._font._colors2.background = this->_color2;
+ gfxManager._font._colors2.foreground = this->_color3;
// Display the text
gfxManager._font.writeLines(_message.c_str(), _bounds, _textAlign);
@@ -838,7 +838,7 @@ void GfxButton::setDefaults() {
GfxElement::setDefaults();
GfxFontBackup font;
- GfxManager &gfxManager = _globals->gfxManager();
+ GfxManager &gfxManager = g_globals->gfxManager();
Rect tempRect;
// Get the string bounds and round up the x end to a multiple of 16
@@ -847,8 +847,8 @@ void GfxButton::setDefaults() {
tempRect.right = ((tempRect.right + 15) / 16) * 16;
// Set the button bounds
- tempRect.collapse(-_globals->_gfxEdgeAdjust, -_globals->_gfxEdgeAdjust);
- if (_vm->getFeatures() & GF_CD)
+ tempRect.collapse(-g_globals->_gfxEdgeAdjust, -g_globals->_gfxEdgeAdjust);
+ if (g_vm->getFeatures() & GF_CD)
--tempRect.top;
tempRect.moveTo(_bounds.left, _bounds.top);
_bounds = tempRect;
@@ -857,7 +857,7 @@ void GfxButton::setDefaults() {
void GfxButton::draw() {
// Get a lock on the surface and save the active font
GfxFontBackup font;
- GfxManager &gfxManager = _globals->gfxManager();
+ GfxManager &gfxManager = g_globals->gfxManager();
gfxManager.lockSurface();
// Draw a basic frame for the button
@@ -867,14 +867,14 @@ void GfxButton::draw() {
gfxManager._font.setFontNumber(_fontNumber);
//
- gfxManager._font._colors.foreground = this->_unkColor1;
- gfxManager._font._colors2.background = this->_unkColor2;
- gfxManager._font._colors2.foreground = this->_unkColor3;
+ gfxManager._font._colors.foreground = this->_color1;
+ gfxManager._font._colors2.background = this->_color2;
+ gfxManager._font._colors2.foreground = this->_color3;
// Display the button's text
Rect tempRect(_bounds);
- tempRect.collapse(_globals->_gfxEdgeAdjust, _globals->_gfxEdgeAdjust);
- if (_vm->getFeatures() & GF_CD)
+ tempRect.collapse(g_globals->_gfxEdgeAdjust, g_globals->_gfxEdgeAdjust);
+ if (g_vm->getFeatures() & GF_CD)
++tempRect.top;
gfxManager._font.writeLines(_message.c_str(), tempRect, ALIGN_CENTER);
@@ -936,14 +936,14 @@ void GfxDialog::setDefaults() {
// Set the dialog boundaries
_gfxManager._bounds = tempRect;
- tempRect.collapse(-_globals->_gfxEdgeAdjust * 2, -_globals->_gfxEdgeAdjust * 2);
+ tempRect.collapse(-g_globals->_gfxEdgeAdjust * 2, -g_globals->_gfxEdgeAdjust * 2);
_bounds = tempRect;
}
void GfxDialog::remove() {
if (_savedArea) {
// Restore the area the dialog covered
- _globals->_gfxManagerInstance.copyFrom(*_savedArea, _bounds.left, _bounds.top);
+ g_globals->_gfxManagerInstance.copyFrom(*_savedArea, _bounds.left, _bounds.top);
delete _savedArea;
_savedArea = NULL;
@@ -954,7 +954,7 @@ void GfxDialog::draw() {
Rect tempRect(_bounds);
// Make a backup copy of the area the dialog will occupy
- _savedArea = Surface_getArea(_globals->_gfxManagerInstance.getSurface(), _bounds);
+ _savedArea = Surface_getArea(g_globals->_gfxManagerInstance.getSurface(), _bounds);
// Set the palette for use in the dialog
setPalette();
@@ -966,7 +966,7 @@ void GfxDialog::draw() {
drawFrame();
// Reset the dialog's graphics manager to only draw within the dialog boundaries
- tempRect.translate(_globals->_gfxEdgeAdjust * 2, _globals->_gfxEdgeAdjust * 2);
+ tempRect.translate(g_globals->_gfxEdgeAdjust * 2, g_globals->_gfxEdgeAdjust * 2);
_gfxManager._bounds = tempRect;
// Draw each element in the dialog in order
@@ -1003,7 +1003,7 @@ void GfxDialog::addElements(GfxElement *ge, ...) {
}
void GfxDialog::setTopLeft(int xp, int yp) {
- _bounds.moveTo(xp - _globals->_gfxEdgeAdjust * 2, yp - _globals->_gfxEdgeAdjust * 2);
+ _bounds.moveTo(xp - g_globals->_gfxEdgeAdjust * 2, yp - g_globals->_gfxEdgeAdjust * 2);
}
void GfxDialog::setCenter(int xp, int yp) {
@@ -1029,9 +1029,9 @@ GfxButton *GfxDialog::execute(GfxButton *defaultButton) {
GfxButton *selectedButton = NULL;
bool breakFlag = false;
- while (!_vm->getEventManager()->shouldQuit() && !breakFlag) {
+ while (!g_vm->shouldQuit() && !breakFlag) {
Event event;
- while (_globals->_events.getEvent(event) && !breakFlag) {
+ while (g_globals->_events.getEvent(event) && !breakFlag) {
// Adjust mouse positions to be relative within the dialog
event.mousePos.x -= _gfxManager._bounds.left;
event.mousePos.y -= _gfxManager._bounds.top;
@@ -1069,17 +1069,28 @@ GfxButton *GfxDialog::execute(GfxButton *defaultButton) {
}
void GfxDialog::setPalette() {
- _globals->_scenePalette.loadPalette(0);
- _globals->_scenePalette.setPalette(0, 1);
- _globals->_scenePalette.setPalette(_globals->_scenePalette._colors.foreground, 1);
- _globals->_scenePalette.setPalette(_globals->_fontColors.background, 1);
- _globals->_scenePalette.setPalette(_globals->_fontColors.foreground, 1);
- _globals->_scenePalette.setPalette(255, 1);
+ if (g_vm->getGameID() == GType_BlueForce) {
+ g_globals->_scenePalette.loadPalette(2);
+ g_globals->_scenePalette.setPalette(0, 1);
+ g_globals->_scenePalette.setPalette(g_globals->_gfxColors.background, 1);
+ g_globals->_scenePalette.setPalette(g_globals->_gfxColors.foreground, 1);
+ g_globals->_scenePalette.setPalette(g_globals->_fontColors.background, 1);
+ g_globals->_scenePalette.setPalette(g_globals->_fontColors.foreground, 1);
+ g_globals->_scenePalette.setEntry(255, 0xff, 0xff, 0xff);
+ g_globals->_scenePalette.setPalette(255, 1);
+ } else {
+ g_globals->_scenePalette.loadPalette(0);
+ g_globals->_scenePalette.setPalette(0, 1);
+ g_globals->_scenePalette.setPalette(g_globals->_scenePalette._colors.foreground, 1);
+ g_globals->_scenePalette.setPalette(g_globals->_fontColors.background, 1);
+ g_globals->_scenePalette.setPalette(g_globals->_fontColors.foreground, 1);
+ g_globals->_scenePalette.setPalette(255, 1);
+ }
}
/*--------------------------------------------------------------------------*/
-GfxManager::GfxManager() : _surface(_globals->_screenSurface), _oldManager(NULL) {
+GfxManager::GfxManager() : _surface(g_globals->_screenSurface), _oldManager(NULL) {
_font.setOwner(this);
_font._fillFlag = false;
_bounds = Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
@@ -1098,19 +1109,19 @@ void GfxManager::setDefaults() {
_pane0Rect4 = screenBounds;
_font._edgeSize = Common::Point(1, 1);
- _font._colors = _globals->_fontColors;
- _font.setFontNumber(_globals->_gfxFontNumber);
+ _font._colors = g_globals->_fontColors;
+ _font.setFontNumber(g_globals->_gfxFontNumber);
}
void GfxManager::activate() {
- assert(!contains(_globals->_gfxManagers, this));
- _globals->_gfxManagers.push_front(this);
+ assert(!contains(g_globals->_gfxManagers, this));
+ g_globals->_gfxManagers.push_front(this);
}
void GfxManager::deactivate() {
// Assert that there will still be another manager, and we're correctly removing our own
- assert((_globals->_gfxManagers.size() > 1) && (&_globals->gfxManager() == this));
- _globals->_gfxManagers.pop_front();
+ assert((g_globals->_gfxManagers.size() > 1) && (&g_globals->gfxManager() == this));
+ g_globals->_gfxManagers.pop_front();
}
int GfxManager::getStringWidth(const char *s, int numChars) {
@@ -1148,7 +1159,7 @@ void GfxManager::setDialogPalette() {
// Get the main palette information
byte palData[256 * 3];
uint count, start;
- _resourceManager->getPalette(0, &palData[0], &start, &count);
+ g_resourceManager->getPalette(0, &palData[0], &start, &count);
g_system->getPaletteManager()->setPalette(&palData[0], start, count);
// Miscellaneous
@@ -1183,7 +1194,7 @@ int GfxManager::getAngle(const Common::Point &p1, const Common::Point &p2) {
GfxFont::GfxFont() {
- _fontNumber = (_vm->getFeatures() & GF_DEMO) ? 0 : 50;
+ _fontNumber = (g_vm->getFeatures() & GF_DEMO) ? 0 : 50;
_numChars = 0;
_bpp = 0;
_fontData = NULL;
@@ -1207,9 +1218,9 @@ void GfxFont::setFontNumber(uint32 fontNumber) {
_fontNumber = fontNumber;
- _fontData = _resourceManager->getResource(RES_FONT, _fontNumber, 0, true);
+ _fontData = g_resourceManager->getResource(RES_FONT, _fontNumber, 0, true);
if (!_fontData)
- _fontData = _resourceManager->getResource(RES_FONT, _fontNumber, 0);
+ _fontData = g_resourceManager->getResource(RES_FONT, _fontNumber, 0);
_numChars = READ_LE_UINT16(_fontData + 4);
_fontSize.y = READ_LE_UINT16(_fontData + 6);
@@ -1498,18 +1509,18 @@ void GfxFont::writeLines(const char *s, const Rect &bounds, TextAlign align) {
/*--------------------------------------------------------------------------*/
GfxFontBackup::GfxFontBackup() {
- _edgeSize = _globals->gfxManager()._font._edgeSize;
- _position = _globals->gfxManager()._font._position;
- _colors = _globals->gfxManager()._font._colors;
- _fontNumber = _globals->gfxManager()._font._fontNumber;
+ _edgeSize = g_globals->gfxManager()._font._edgeSize;
+ _position = g_globals->gfxManager()._font._position;
+ _colors = g_globals->gfxManager()._font._colors;
+ _fontNumber = g_globals->gfxManager()._font._fontNumber;
}
GfxFontBackup::~GfxFontBackup() {
- _globals->gfxManager()._font.setFontNumber(_fontNumber);
- _globals->gfxManager()._font._edgeSize = _edgeSize;
- _globals->gfxManager()._font._position = _position;
- _globals->gfxManager()._font._colors = _colors;
+ g_globals->gfxManager()._font.setFontNumber(_fontNumber);
+ g_globals->gfxManager()._font._edgeSize = _edgeSize;
+ g_globals->gfxManager()._font._position = _position;
+ g_globals->gfxManager()._font._colors = _colors;
}
-} // End of namespace tSage
+} // End of namespace TsAGE
diff --git a/engines/tsage/graphics.h b/engines/tsage/graphics.h
index e09e1093a3..06b482d7b5 100644
--- a/engines/tsage/graphics.h
+++ b/engines/tsage/graphics.h
@@ -30,7 +30,7 @@
#include "common/system.h"
#include "graphics/surface.h"
-namespace tSage {
+namespace TsAGE {
class GfxSurface;
class Region;
@@ -177,7 +177,7 @@ public:
uint16 _fontNumber;
GfxColors _colors;
GfxColors _fontColors;
- byte _unkColor1, _unkColor2, _unkColor3;
+ byte _color1, _color2, _color3;
uint16 _keycode;
public:
GfxElement();
@@ -343,6 +343,6 @@ GfxSurface *Surface_getArea(GfxSurface &src, const Rect &bounds);
GfxSurface surfaceFromRes(const byte *imgData);
GfxSurface surfaceFromRes(int resNum, int rlbNum, int subNum);
-} // End of namespace tSage
+} // End of namespace TsAGE
#endif
diff --git a/engines/tsage/module.mk b/engines/tsage/module.mk
index aefc8b0992..0ea8916647 100644
--- a/engines/tsage/module.mk
+++ b/engines/tsage/module.mk
@@ -1,7 +1,19 @@
MODULE := engines/tsage
MODULE_OBJS := \
- blueforce_logic.o \
+ blue_force/blueforce_dialogs.o \
+ blue_force/blueforce_logic.o \
+ blue_force/blueforce_scenes0.o \
+ blue_force/blueforce_scenes1.o \
+ blue_force/blueforce_scenes2.o \
+ blue_force/blueforce_scenes3.o \
+ blue_force/blueforce_scenes4.o \
+ blue_force/blueforce_scenes5.o \
+ blue_force/blueforce_scenes6.o \
+ blue_force/blueforce_scenes7.o \
+ blue_force/blueforce_scenes8.o \
+ blue_force/blueforce_scenes9.o \
+ blue_force/blueforce_speakers.o \
converse.o \
core.o \
debugger.o \
@@ -11,27 +23,32 @@ MODULE_OBJS := \
globals.o \
graphics.o \
resources.o \
- ringworld_demo.o \
- ringworld_logic.o \
- ringworld_scenes1.o \
- ringworld_scenes2.o \
- ringworld_scenes3.o \
- ringworld_scenes4.o \
- ringworld_scenes5.o \
- ringworld_scenes6.o \
- ringworld_scenes8.o \
- ringworld_scenes10.o \
+ ringworld/ringworld_demo.o \
+ ringworld/ringworld_dialogs.o \
+ ringworld/ringworld_logic.o \
+ ringworld/ringworld_scenes1.o \
+ ringworld/ringworld_scenes2.o \
+ ringworld/ringworld_scenes3.o \
+ ringworld/ringworld_scenes4.o \
+ ringworld/ringworld_scenes5.o \
+ ringworld/ringworld_scenes6.o \
+ ringworld/ringworld_scenes8.o \
+ ringworld/ringworld_scenes10.o \
+ ringworld/ringworld_speakers.o \
+ ringworld2/ringworld2_dialogs.o \
+ ringworld2/ringworld2_logic.o \
+ ringworld2/ringworld2_scenes0.o \
saveload.o \
scenes.o \
sound.o \
staticres.o \
- tsage.o
+ tsage.o \
+ user_interface.o
# This module can be built as a plugin
ifeq ($(ENABLE_TSAGE), DYNAMIC_PLUGIN)
PLUGIN := 1
endif
-# Include common rules
+# Include common rules
include $(srcdir)/rules.mk
-
diff --git a/engines/tsage/resources.cpp b/engines/tsage/resources.cpp
index d24c564a1f..652ab32350 100644
--- a/engines/tsage/resources.cpp
+++ b/engines/tsage/resources.cpp
@@ -28,7 +28,7 @@
#include "tsage/resources.h"
#include "tsage/tsage.h"
-namespace tSage {
+namespace TsAGE {
MemoryManager::MemoryManager() {
@@ -237,8 +237,13 @@ byte *TLib::getResource(uint16 id, bool suppressErrors) {
uint16 ctrCurrent = 0x102, ctrMax = 0x200;
uint16 word_48050 = 0, currentToken = 0, word_48054 =0;
byte byte_49068 = 0, byte_49069 = 0;
- DecodeReference table[0x1000];
- for (int i = 0; i < 0x1000; ++i) {
+
+ const uint tableSize = 0x1000;
+ DecodeReference *table = (DecodeReference *)malloc(tableSize * sizeof(DecodeReference));
+ if (!table)
+ error("[TLib::getResource] Cannot allocate table buffer");
+
+ for (uint i = 0; i < tableSize; ++i) {
table[i].vByte = table[i].vWord = 0;
}
Common::Stack<uint16> tokenList;
@@ -302,6 +307,8 @@ byte *TLib::getResource(uint16 id, bool suppressErrors) {
}
}
+ free(table);
+
assert(bytesWritten == re->uncompressedSize);
delete compStream;
return dataOut;
@@ -347,6 +354,8 @@ void TLib::loadIndex() {
se.resNum = resNum;
se.resType = (ResourceType)(configId & 0x1f);
se.fileOffset = (((configId >> 5) & 0x7ff) << 16) | fileOffset;
+ if (g_vm->getGameID() == GType_Ringworld2)
+ se.fileOffset <<= 4;
_sections.push_back(se);
}
@@ -431,7 +440,7 @@ ResourceManager::~ResourceManager() {
void ResourceManager::addLib(const Common::String &libName) {
assert(_libList.size() < 5);
- _libList.push_back(new TLib(_vm->_memoryManager, libName));
+ _libList.push_back(new TLib(g_vm->_memoryManager, libName));
}
byte *ResourceManager::getResource(uint16 id, bool suppressErrors) {
@@ -497,4 +506,4 @@ Common::String ResourceManager::getMessage(int resNum, int lineNum, bool suppres
return result;
}
-} // end of namespace tSage
+} // end of namespace TsAGE
diff --git a/engines/tsage/resources.h b/engines/tsage/resources.h
index efbb86b24e..8f90b21908 100644
--- a/engines/tsage/resources.h
+++ b/engines/tsage/resources.h
@@ -33,7 +33,7 @@
#include "common/util.h"
#include "graphics/surface.h"
-namespace tSage {
+namespace TsAGE {
// Magic number used by original game to identify valid memory blocks
const uint32 MEMORY_ENTRY_ID = 0xE11DA722;
@@ -42,7 +42,10 @@ const int MEMORY_POOL_SIZE = 1000;
enum ResourceType { RES_LIBRARY, RES_STRIP, RES_IMAGE, RES_PALETTE, RES_VISAGE, RES_SOUND, RES_MESSAGE,
RES_FONT, RES_POINTER, RES_BANK, RES_SND_DRIVER, RES_PRIORITY, RES_CONTROL, RES_WALKRGNS,
- RES_BITMAP, RES_SAVE, RES_SEQUENCE };
+ RES_BITMAP, RES_SAVE, RES_SEQUENCE,
+ // Return to Ringworld specific resource types
+ RT17, RT18, RT19, RT20, RT21, RT22, RT23, RT24, RT25, RT26, RT27, RT28, RT29, RT30, RT31
+};
class MemoryHeader {
public:
@@ -175,6 +178,6 @@ public:
};
-} // end of namespace tSage
+} // end of namespace TsAGE
#endif
diff --git a/engines/tsage/ringworld_demo.cpp b/engines/tsage/ringworld/ringworld_demo.cpp
index b24fec98f9..fedb19c804 100644
--- a/engines/tsage/ringworld_demo.cpp
+++ b/engines/tsage/ringworld/ringworld_demo.cpp
@@ -20,18 +20,20 @@
*
*/
-#include "tsage/ringworld_demo.h"
+#include "tsage/ringworld/ringworld_demo.h"
#include "tsage/scenes.h"
#include "tsage/tsage.h"
#include "tsage/staticres.h"
-namespace tSage {
+namespace TsAGE {
+
+namespace Ringworld {
void RingworldDemoGame::start() {
// Start the demo's single scene
- _globals->_sceneManager.changeScene(1);
+ g_globals->_sceneManager.changeScene(1);
- _globals->_events.setCursor(CURSOR_NONE);
+ g_globals->_events.setCursor(CURSOR_NONE);
}
Scene *RingworldDemoGame::createScene(int sceneNumber) {
@@ -39,13 +41,21 @@ Scene *RingworldDemoGame::createScene(int sceneNumber) {
return new RingworldDemoScene();
}
+bool RingworldDemoGame::canLoadGameStateCurrently() {
+ return false;
+}
+
+bool RingworldDemoGame::canSaveGameStateCurrently() {
+ return false;
+}
+
void RingworldDemoGame::quitGame() {
if (MessageDialog::show(DEMO_EXIT_MSG, EXIT_BTN_STRING, DEMO_BTN_STRING) == 0)
- _vm->quitGame();
+ g_vm->quitGame();
}
void RingworldDemoGame::pauseGame() {
- _globals->_events.setCursor(CURSOR_ARROW);
+ g_globals->_events.setCursor(CURSOR_ARROW);
MessageDialog *dlg = new MessageDialog(DEMO_PAUSED_MSG, EXIT_BTN_STRING, DEMO_RESUME_BTN_STRING);
dlg->draw();
@@ -53,10 +63,10 @@ void RingworldDemoGame::pauseGame() {
bool exitFlag = selectedButton != &dlg->_btn2;
delete dlg;
- _globals->_events.hideCursor();
+ g_globals->_events.hideCursor();
if (exitFlag)
- _vm->quitGame();
+ g_vm->quitGame();
}
void RingworldDemoGame::processEvent(Event &event) {
@@ -72,8 +82,8 @@ void RingworldDemoGame::processEvent(Event &event) {
ConfigDialog *dlg = new ConfigDialog();
dlg->runModal();
delete dlg;
- _globals->_soundManager.syncSounds();
- _globals->_events.setCursorFromFlag();
+ g_globals->_soundManager.syncSounds();
+ g_globals->_events.setCursorFromFlag();
break;
}
@@ -117,4 +127,6 @@ void RingworldDemoScene::process(Event &event) {
}
-} // End of namespace tSage
+} // End of namespace Ringworld
+
+} // End of namespace TsAGE
diff --git a/engines/tsage/ringworld_demo.h b/engines/tsage/ringworld/ringworld_demo.h
index 3e7431e107..7c0ac39285 100644
--- a/engines/tsage/ringworld_demo.h
+++ b/engines/tsage/ringworld/ringworld_demo.h
@@ -30,7 +30,11 @@
#include "tsage/globals.h"
#include "tsage/sound.h"
-namespace tSage {
+namespace TsAGE {
+
+namespace Ringworld {
+
+using namespace TsAGE;
class RingworldDemoGame: public Game {
private:
@@ -40,6 +44,8 @@ public:
virtual Scene *createScene(int sceneNumber);
virtual void quitGame();
virtual void processEvent(Event &event);
+ virtual bool canSaveGameStateCurrently();
+ virtual bool canLoadGameStateCurrently();
};
class RingworldDemoScene: public Scene {
@@ -54,6 +60,8 @@ public:
virtual void signal();
};
-} // End of namespace tSage
+} // End of namespace Ringworld
+
+} // End of namespace TsAGE
#endif
diff --git a/engines/tsage/ringworld/ringworld_dialogs.cpp b/engines/tsage/ringworld/ringworld_dialogs.cpp
new file mode 100644
index 0000000000..9d1a7effc2
--- /dev/null
+++ b/engines/tsage/ringworld/ringworld_dialogs.cpp
@@ -0,0 +1,222 @@
+/* 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/translation.h"
+
+#include "gui/dialog.h"
+#include "gui/widget.h"
+
+#include "tsage/tsage.h"
+#include "tsage/core.h"
+#include "tsage/dialogs.h"
+#include "tsage/staticres.h"
+#include "tsage/globals.h"
+#include "tsage/ringworld/ringworld_dialogs.h"
+#include "tsage/ringworld/ringworld_logic.h"
+
+namespace TsAGE {
+
+namespace Ringworld {
+
+/*--------------------------------------------------------------------------*/
+
+#define BUTTON_WIDTH 28
+#define BUTTON_HEIGHT 29
+
+RightClickButton::RightClickButton(int buttonIndex, int xp, int yp) : GfxButton() {
+ _buttonIndex = buttonIndex;
+ this->_bounds.left = xp;
+ this->_bounds.top = yp;
+ this->_bounds.setWidth(BUTTON_WIDTH);
+ this->_bounds.setHeight(BUTTON_HEIGHT);
+ _savedButton = NULL;
+}
+
+void RightClickButton::highlight() {
+ if (_savedButton) {
+ // Button was previously highlighted, so de-highlight by restoring saved area
+ g_globals->gfxManager().copyFrom(*_savedButton, _bounds.left, _bounds.top);
+ delete _savedButton;
+ _savedButton = NULL;
+ } else {
+ // Highlight button by getting the needed highlighted image resource
+ _savedButton = Surface_getArea(g_globals->gfxManager().getSurface(), _bounds);
+
+ uint size;
+ byte *imgData = g_resourceManager->getSubResource(7, 2, _buttonIndex, &size);
+
+ GfxSurface btnSelected = surfaceFromRes(imgData);
+ g_globals->gfxManager().copyFrom(btnSelected, _bounds.left, _bounds.top);
+
+ DEALLOCATE(imgData);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+/**
+ * This dialog implements the right-click dialog
+ */
+RightClickDialog::RightClickDialog() : GfxDialog(),
+ _walkButton(1, 48, 12), _lookButton(2, 31, 29), _useButton(3, 65, 29),
+ _talkButton(4, 14, 47), _inventoryButton(5, 48, 47), _optionsButton(6, 83, 47) {
+ Rect rectArea, dialogRect;
+
+ // Set the palette and change the cursor
+ _gfxManager.setDialogPalette();
+ g_globals->_events.setCursor(CURSOR_ARROW);
+
+ // Get the dialog image
+ _surface = surfaceFromRes(7, 1, 1);
+
+ // Set the dialog position
+ dialogRect.resize(_surface, 0, 0, 100);
+ dialogRect.center(g_globals->_events._mousePos.x, g_globals->_events._mousePos.y);
+
+ // Ensure the dialog will be entirely on-screen
+ Rect screenRect = g_globals->gfxManager()._bounds;
+ screenRect.collapse(4, 4);
+ dialogRect.contain(screenRect);
+
+ _bounds = dialogRect;
+ _gfxManager._bounds = _bounds;
+
+ _highlightedButton = NULL;
+ _selectedAction = -1;
+}
+
+RightClickDialog::~RightClickDialog() {
+}
+
+RightClickButton *RightClickDialog::findButton(const Common::Point &pt) {
+ RightClickButton *btnList[] = { &_walkButton, &_lookButton, &_useButton, &_talkButton, &_inventoryButton, &_optionsButton };
+
+ for (int i = 0; i < 6; ++i) {
+ btnList[i]->_owner = this;
+
+ if (btnList[i]->_bounds.contains(pt))
+ return btnList[i];
+ }
+
+ return NULL;
+}
+
+void RightClickDialog::draw() {
+ // Save the covered background area
+ _savedArea = Surface_getArea(g_globals->_gfxManagerInstance.getSurface(), _bounds);
+
+ // Draw the dialog image
+ g_globals->gfxManager().copyFrom(_surface, _bounds.left, _bounds.top);
+}
+
+bool RightClickDialog::process(Event &event) {
+ switch (event.eventType) {
+ case EVENT_MOUSE_MOVE: {
+ // Check whether a button is highlighted
+ RightClickButton *btn = findButton(event.mousePos);
+
+ if (btn != _highlightedButton) {
+ // De-highlight any previously selected button
+ if (_highlightedButton) {
+ _highlightedButton->highlight();
+ _highlightedButton = NULL;
+ }
+ if (btn) {
+ // Highlight the new button
+ btn->highlight();
+ _highlightedButton = btn;
+ }
+ }
+ event.handled = true;
+ return true;
+ }
+
+ case EVENT_BUTTON_DOWN:
+ // If a button is highlighted, then flag the selected button index
+ if (_highlightedButton)
+ _selectedAction = _highlightedButton->_buttonIndex;
+ else
+ _selectedAction = _lookButton._buttonIndex;
+ event.handled = true;
+ return true;
+
+ default:
+ break;
+ }
+
+ return false;
+}
+
+void RightClickDialog::execute() {
+ // Draw the dialog
+ draw();
+
+ // Dialog event handler loop
+ _gfxManager.activate();
+
+ while (!g_vm->shouldQuit() && (_selectedAction == -1)) {
+ Event evt;
+ while (g_globals->_events.getEvent(evt, EVENT_MOUSE_MOVE | EVENT_BUTTON_DOWN)) {
+ evt.mousePos.x -= _bounds.left;
+ evt.mousePos.y -= _bounds.top;
+
+ process(evt);
+ }
+
+ g_system->delayMillis(10);
+ g_system->updateScreen();
+ }
+
+ // Execute the specified action
+ switch (_selectedAction) {
+ case 1:
+ // Look action
+ g_globals->_events.setCursor(CURSOR_LOOK);
+ break;
+ case 2:
+ // Walk action
+ g_globals->_events.setCursor(CURSOR_WALK);
+ break;
+ case 3:
+ // Use cursor
+ g_globals->_events.setCursor(CURSOR_USE);
+ break;
+ case 4:
+ // Talk cursor
+ g_globals->_events.setCursor(CURSOR_TALK);
+ break;
+ case 5:
+ // Inventory dialog
+ InventoryDialog::show();
+ break;
+ case 6:
+ // Dialog options
+ OptionsDialog::show();
+ break;
+ }
+
+ _gfxManager.deactivate();
+}
+
+} // End of namespace Ringworld
+
+} // End of namespace TsAGE
diff --git a/engines/tsage/ringworld/ringworld_dialogs.h b/engines/tsage/ringworld/ringworld_dialogs.h
new file mode 100644
index 0000000000..11a8f10e70
--- /dev/null
+++ b/engines/tsage/ringworld/ringworld_dialogs.h
@@ -0,0 +1,70 @@
+/* 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.
+ *
+ */
+
+#ifndef TSAGE_RINGWORLD_DIALOGS_H
+#define TSAGE_RINGWORLD_DIALOGS_H
+
+#include "gui/options.h"
+#include "tsage/events.h"
+#include "tsage/graphics.h"
+#include "common/list.h"
+#include "common/rect.h"
+#include "common/system.h"
+
+namespace TsAGE {
+
+namespace Ringworld {
+
+class RightClickButton : public GfxButton {
+private:
+ GfxSurface *_savedButton;
+public:
+ int _buttonIndex;
+
+ RightClickButton(int buttonIndex, int xp, int yp);
+ ~RightClickButton() { delete _savedButton; }
+
+ virtual void highlight();
+};
+
+class RightClickDialog : public GfxDialog {
+private:
+ GfxSurface _surface;
+ RightClickButton *_highlightedButton;
+ int _selectedAction;
+ RightClickButton _walkButton, _lookButton, _useButton, _talkButton, _inventoryButton, _optionsButton;
+
+ RightClickButton *findButton(const Common::Point &pt);
+public:
+ RightClickDialog();
+ ~RightClickDialog();
+
+ virtual void draw();
+ virtual bool process(Event &event);
+ void execute();
+};
+
+} // End of namespace Ringworld
+
+} // End of namespace TsAGE
+
+#endif
diff --git a/engines/tsage/ringworld/ringworld_logic.cpp b/engines/tsage/ringworld/ringworld_logic.cpp
new file mode 100644
index 0000000000..ad67b66f69
--- /dev/null
+++ b/engines/tsage/ringworld/ringworld_logic.cpp
@@ -0,0 +1,691 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "common/config-manager.h"
+#include "tsage/ringworld/ringworld_logic.h"
+#include "tsage/scenes.h"
+#include "tsage/tsage.h"
+#include "tsage/staticres.h"
+#include "tsage/ringworld/ringworld_demo.h"
+#include "tsage/ringworld/ringworld_dialogs.h"
+#include "tsage/ringworld/ringworld_scenes1.h"
+#include "tsage/ringworld/ringworld_scenes2.h"
+#include "tsage/ringworld/ringworld_scenes3.h"
+#include "tsage/ringworld/ringworld_scenes4.h"
+#include "tsage/ringworld/ringworld_scenes5.h"
+#include "tsage/ringworld/ringworld_scenes6.h"
+#include "tsage/ringworld/ringworld_scenes8.h"
+#include "tsage/ringworld/ringworld_scenes10.h"
+
+namespace TsAGE {
+
+namespace Ringworld {
+
+Scene *RingworldGame::createScene(int sceneNumber) {
+ switch (sceneNumber) {
+ /* Scene group 1 */
+ // Kziniti Palace (Introduction)
+ case 10: return new Scene10();
+ // Outer Space (Introduction)
+ case 15: return new Scene15();
+ // Cut-scenes for Ch'mee house in distance
+ case 20: return new Scene20();
+ // Outside Ch'mee residence
+ case 30: return new Scene30();
+ // Chmeee Home
+ case 40: return new Scene40();
+ // By Flycycles
+ case 50: return new Scene50();
+ // Flycycle controls
+ case 60: return new Scene60();
+ // Shipyard Entrance
+ case 90: return new Scene90();
+ // Ship Close-up
+ case 95: return new Scene95();
+ // Sunflower navigation sequence
+ case 6100: return new Scene6100();
+
+ /* Scene group 2 */
+ // Title screen
+ case 1000: return new Scene1000();
+ // Fleeing planet cutscene
+ case 1001: return new Scene1001();
+ // Unused
+ case 1250: return new Scene1250();
+ // Ringworld Wall
+ case 1400: return new Scene1400();
+ // Ringworld Space-port
+ case 1500: return new Scene1500();
+
+ /* Scene group 3 - Part #1 */
+ // Cockpit cutscenes
+ case 2000: return new Scene2000();
+ // Starcraft - Cockpit
+ case 2100: return new Scene2100();
+ // Encyclopedia
+ case 2120: return new Scene2120();
+ // Starcraft - Level 2
+ case 2150: return new Scene2150();
+ // Starcraft - AutoDoc
+ case 2200: return new Scene2200();
+ // Stasis Field Map
+ case 2222: return new Scene2222();
+ // Starcraft - Quinn's Room
+ case 2230: return new Scene2230();
+
+ /* Scene group 3 - Part #2 */
+ // Starcraft - Storage Room
+ case 2280: return new Scene2280();
+ // Starcraft - Hanger Bay
+ case 2300: return new Scene2300();
+ // Starcraft - Copy Protection Screen
+ case 2310: return new Scene2310();
+ // Starcraft - Lander Bay
+ case 2320: return new Scene2320();
+ // Scene 2400 - Descending in Lander
+ case 2400: return new Scene2400();
+
+ /* Scene group 4 */
+ // Ringworld Scan
+ case 3500: return new Scene3500();
+ // Remote Viewer
+ case 3700: return new Scene3700();
+
+ /* Scene group 5 */
+ // Village
+ case 4000: return new Scene4000();
+ // Village - Outside Lander
+ case 4010: return new Scene4010();
+ // Village - Puzzle Board
+ case 4025: return new Scene4025();
+ // Village - Temple Antechamber
+ case 4045: return new Scene4045();
+ // Village - Temple
+ case 4050: return new Scene4050();
+ // Village - Hut
+ case 4100: return new Scene4100();
+ // Village - Bedroom
+ case 4150: return new Scene4150();
+ // Village - Near Slaver Ship
+ case 4250: return new Scene4250();
+ // Village - Slaver Ship
+ case 4300: return new Scene4300();
+ // Village - Slaver Ship Keypad
+ case 4301: return new Scene4301();
+
+ /* Scene group 6 */
+ // Caverns - Entrance
+ case 5000: return new Scene5000();
+ // Caverns
+ case 5100: return new Scene5100();
+ // Caverns - Throne-room
+ case 5200: return new Scene5200();
+ // Caverns - Pit
+ case 5300: return new Scene5300();
+
+ /* Scene group 8 */
+ // Landing near beach
+ case 7000: return new Scene7000();
+ // Underwater: swimming
+ case 7100: return new Scene7100();
+ // Underwater: Entering the cave
+ case 7200: return new Scene7200();
+ // Underwater: Lord Poria
+ case 7300: return new Scene7300();
+ // Floating Buildings: Outside
+ case 7600: return new Scene7600();
+ // Floating Buildings: In the lab
+ case 7700: return new Scene7700();
+
+ /* Scene group 10 */
+ // Near beach: Slave washing clothes
+ case 9100: return new Scene9100();
+ // Castle: Outside the bulwarks
+ case 9150: return new Scene9150();
+ // Castle: Near the fountain
+ case 9200: return new Scene9200();
+ // Castle: In front of a large guarded door
+ case 9300: return new Scene9300();
+ // Castle: In a hallway
+ case 9350: return new Scene9350();
+ // Castle: In a hallway
+ case 9360: return new Scene9360();
+ // Castle: Black-Smith room
+ case 9400: return new Scene9400();
+ // Castle: Dining room
+ case 9450: return new Scene9450();
+ // Castle: Bedroom
+ case 9500: return new Scene9500();
+ // Castle: Balcony
+ case 9700: return new Scene9700();
+ // Castle: In the garden
+ case 9750: return new Scene9750();
+ // Castle: Dressing room
+ case 9850: return new Scene9850();
+ // Ending
+ case 9900: return new Scene9900();
+ // Space travel
+ case 9999: return new Scene9999();
+
+ default:
+ error("Unknown scene number - %d", sceneNumber);
+ break;
+ }
+}
+
+/**
+ * Returns true if it is currently okay to restore a game
+ */
+bool RingworldGame::canLoadGameStateCurrently() {
+ return !g_globals->getFlag(50);
+}
+
+/**
+ * Returns true if it is currently okay to save the game
+ */
+bool RingworldGame::canSaveGameStateCurrently() {
+ return !g_globals->getFlag(50);
+}
+
+/*--------------------------------------------------------------------------*/
+
+DisplayHotspot::DisplayHotspot(int regionId, ...) {
+ _sceneRegionId = regionId;
+
+ // Load up the actions
+ va_list va;
+ va_start(va, regionId);
+
+ int param = va_arg(va, int);
+ while (param != LIST_END) {
+ _actions.push_back(param);
+ param = va_arg(va, int);
+ }
+
+ va_end(va);
+}
+
+bool DisplayHotspot::performAction(int action) {
+ for (uint i = 0; i < _actions.size(); i += 3) {
+ if (_actions[i] == action) {
+ display(_actions[i + 1], _actions[i + 2], SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
+ return true;
+ }
+ }
+
+ return false;
+}
+
+/*--------------------------------------------------------------------------*/
+
+DisplayObject::DisplayObject(int firstAction, ...) {
+ // Load up the actions
+ va_list va;
+ va_start(va, firstAction);
+
+ int param = firstAction;
+ while (param != LIST_END) {
+ _actions.push_back(param);
+ param = va_arg(va, int);
+ }
+
+ va_end(va);
+}
+
+bool DisplayObject::performAction(int action) {
+ for (uint i = 0; i < _actions.size(); i += 3) {
+ if (_actions[i] == action) {
+ display(_actions[i + 1], _actions[i + 2], SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
+ return true;
+ }
+ }
+
+ return false;
+}
+
+/*--------------------------------------------------------------------------*/
+
+SceneArea::SceneArea() {
+ _savedArea = NULL;
+ _pt.x = _pt.y = 0;
+}
+
+SceneArea::~SceneArea() {
+ delete _savedArea;
+}
+
+void SceneArea::setup(int resNum, int rlbNum, int subNum, int actionId) {
+ _resNum = resNum;
+ _rlbNum = rlbNum;
+ _subNum = subNum;
+ _actionId = actionId;
+
+ _surface = surfaceFromRes(resNum, rlbNum, subNum);
+}
+
+void SceneArea::draw2() {
+ _surface.draw(Common::Point(_bounds.left, _bounds.top));
+}
+
+void SceneArea::display() {
+ _bounds.left = _pt.x - (_surface.getBounds().width() / 2);
+ _bounds.top = _pt.y + 1 - _surface.getBounds().height();
+ _bounds.setWidth(_surface.getBounds().width());
+ _bounds.setHeight(_surface.getBounds().height());
+
+ _savedArea = Surface_getArea(g_globals->_gfxManagerInstance.getSurface(), _bounds);
+ draw2();
+}
+
+void SceneArea::restore() {
+ assert(_savedArea);
+ _savedArea->draw(Common::Point(_bounds.left, _bounds.top));
+ delete _savedArea;
+ _savedArea = NULL;
+}
+
+void SceneArea::draw(bool flag) {
+ _surface = surfaceFromRes(_resNum, _rlbNum, flag ? _subNum + 1 : _subNum);
+ _surface.draw(Common::Point(_bounds.left, _bounds.top));
+}
+
+void SceneArea::wait() {
+ // Wait until a mouse or keypress
+ Event event;
+ while (!g_vm->shouldQuit() && !g_globals->_events.getEvent(event)) {
+ g_system->updateScreen();
+ g_system->delayMillis(10);
+ }
+
+ SynchronizedList<SceneItem *>::iterator ii;
+ for (ii = g_globals->_sceneItems.begin(); ii != g_globals->_sceneItems.end(); ++ii) {
+ SceneItem *sceneItem = *ii;
+ if (sceneItem->contains(event.mousePos)) {
+ sceneItem->doAction(_actionId);
+ break;
+ }
+ }
+
+ g_globals->_events.setCursor(CURSOR_ARROW);
+}
+
+void SceneArea::synchronize(Serializer &s) {
+ if (s.getVersion() >= 2)
+ SavedObject::synchronize(s);
+
+ s.syncAsSint16LE(_pt.x);
+ s.syncAsSint16LE(_pt.y);
+ s.syncAsSint32LE(_resNum);
+ s.syncAsSint32LE(_rlbNum);
+ s.syncAsSint32LE(_subNum);
+ s.syncAsSint32LE(_actionId);
+ _bounds.synchronize(s);
+}
+
+/*--------------------------------------------------------------------------*/
+
+RingworldInvObjectList::RingworldInvObjectList() :
+ _stunner(2280, 1, 2, OBJECT_STUNNER, "This is your stunner."),
+ _scanner(1, 1, 3, OBJECT_SCANNER, "A combination scanner comm unit."),
+ _stasisBox(5200, 1, 4, OBJECT_STASIS_BOX, "A stasis box."),
+ _infoDisk(40, 1, 1, OBJECT_INFODISK, "The infodisk you took from the assassin."),
+ _stasisNegator(0, 2, 2, OBJECT_STASIS_NEGATOR, "The stasis field negator."),
+ _keyDevice(4250, 1, 6, OBJECT_KEY_DEVICE, "A magnetic key device."),
+ _medkit(2280, 1, 7, OBJECT_MEDKIT, "Your medkit."),
+ _ladder(4100, 1, 8, OBJECT_LADDER, "The chief's ladder."),
+ _rope(4150, 1, 9, OBJECT_ROPE, "The chief's rope."),
+ _key(7700, 1, 11, OBJECT_KEY, "A key."),
+ _translator(7700, 1, 13, OBJECT_TRANSLATOR, "The dolphin translator box."),
+ _ale(2150, 1, 10, OBJECT_ALE, "A bottle of ale."),
+ _paper(7700, 1, 12, OBJECT_PAPER, "A slip of paper with the numbers 2,4, and 3 written on it."),
+ _waldos(0, 1, 14, OBJECT_WALDOS, "A pair of waldos from the ruined probe."),
+ _stasisBox2(8100, 1, 4, OBJECT_STASIS_BOX2, "A stasis box."),
+ _ring(8100, 2, 5, OBJECT_RING, "This is a signet ring sent to you by Louis Wu."),
+ _cloak(9850, 2, 6, OBJECT_CLOAK, "A fine silk cloak."),
+ _tunic(9450, 2, 7, OBJECT_TUNIC, "The patriarch's soiled tunic."),
+ _candle(9500, 2, 8, OBJECT_CANDLE, "A tallow candle."),
+ _straw(9400, 2, 9, OBJECT_STRAW, "Clean, dry straw."),
+ _scimitar(9850, 1, 18, OBJECT_SCIMITAR, "A scimitar from the Patriarch's closet."),
+ _sword(9850, 1, 17, OBJECT_SWORD, "A short sword from the Patriarch's closet."),
+ _helmet(9500, 2, 4, OBJECT_HELMET, "Some type of helmet."),
+ _items(4300, 2, 10, OBJECT_ITEMS, "Two interesting items from the Tnuctipun vessel."),
+ _concentrator(4300, 2, 11, OBJECT_CONCENTRATOR, "The Tnuctipun anti-matter concentrator contained in a stasis field."),
+ _nullifier(5200, 2, 12, OBJECT_NULLIFIER, "A purported neural wave nullifier."),
+ _peg(4045, 2, 16, OBJECT_PEG, "A peg with a symbol."),
+ _vial(5100, 2, 17, OBJECT_VIAL, "A vial of the bat creatures anti-pheromone drug."),
+ _jacket(9850, 3, 1, OBJECT_JACKET, "A natty padded jacket."),
+ _tunic2(9850, 3, 2, OBJECT_TUNIC2, "A very hairy tunic."),
+ _bone(5300, 3, 5, OBJECT_BONE, "A very sharp bone."),
+ _jar(7700, 3, 4, OBJECT_JAR, "An jar filled with a green substance."),
+ _emptyJar(7700, 3, 3, OBJECT_EMPTY_JAR, "An empty jar.") {
+
+ // Add the items to the list
+ _itemList.push_back(&_stunner);
+ _itemList.push_back(&_scanner);
+ _itemList.push_back(&_stasisBox);
+ _itemList.push_back(&_infoDisk);
+ _itemList.push_back(&_stasisNegator);
+ _itemList.push_back(&_keyDevice);
+ _itemList.push_back(&_medkit);
+ _itemList.push_back(&_ladder);
+ _itemList.push_back(&_rope);
+ _itemList.push_back(&_key);
+ _itemList.push_back(&_translator);
+ _itemList.push_back(&_ale);
+ _itemList.push_back(&_paper);
+ _itemList.push_back(&_waldos);
+ _itemList.push_back(&_stasisBox2);
+ _itemList.push_back(&_ring);
+ _itemList.push_back(&_cloak);
+ _itemList.push_back(&_tunic);
+ _itemList.push_back(&_candle);
+ _itemList.push_back(&_straw);
+ _itemList.push_back(&_scimitar);
+ _itemList.push_back(&_sword);
+ _itemList.push_back(&_helmet);
+ _itemList.push_back(&_items);
+ _itemList.push_back(&_concentrator);
+ _itemList.push_back(&_nullifier);
+ _itemList.push_back(&_peg);
+ _itemList.push_back(&_vial);
+ _itemList.push_back(&_jacket);
+ _itemList.push_back(&_tunic2);
+ _itemList.push_back(&_bone);
+ _itemList.push_back(&_jar);
+ _itemList.push_back(&_emptyJar);
+
+ _selectedItem = NULL;
+}
+
+/*--------------------------------------------------------------------------*/
+
+void RingworldGame::start() {
+ // Set some default flags
+ g_globals->setFlag(12);
+ g_globals->setFlag(34);
+
+ // Set the screen to scroll in response to the player moving off-screen
+ g_globals->_scrollFollower = &g_globals->_player;
+
+ // Set the object's that will be in the player's inventory by default
+ RING_INVENTORY._stunner._sceneNumber = 1;
+ RING_INVENTORY._scanner._sceneNumber = 1;
+ RING_INVENTORY._ring._sceneNumber = 1;
+
+ int slot = -1;
+
+ if (ConfMan.hasKey("save_slot")) {
+ slot = ConfMan.getInt("save_slot");
+ Common::String file = g_vm->generateSaveName(slot);
+ Common::InSaveFile *in = g_vm->_system->getSavefileManager()->openForLoading(file);
+ if (in)
+ delete in;
+ else
+ slot = -1;
+ }
+
+ if (slot >= 0)
+ g_globals->_sceneHandler->_loadGameSlot = slot;
+ else
+ // Switch to the title screen
+ g_globals->_sceneManager.setNewScene(1000);
+
+ g_globals->_events.showCursor();
+}
+
+void RingworldGame::restart() {
+ g_globals->_scenePalette.clearListeners();
+ g_globals->_soundHandler.stop();
+
+ // Reset the flags
+ g_globals->reset();
+ g_globals->setFlag(34);
+
+ // Clear save/load slots
+ g_globals->_sceneHandler->_saveGameSlot = -1;
+ g_globals->_sceneHandler->_loadGameSlot = -1;
+
+ g_globals->_stripNum = 0;
+ g_globals->_events.setCursor(CURSOR_WALK);
+
+ // Reset item properties
+ RING_INVENTORY._stunner._sceneNumber = 1;
+ RING_INVENTORY._scanner._sceneNumber = 1;
+ RING_INVENTORY._stasisBox._sceneNumber = 5200;
+ RING_INVENTORY._infoDisk._sceneNumber = 40;
+ RING_INVENTORY._stasisNegator._sceneNumber = 0;
+ RING_INVENTORY._keyDevice._sceneNumber = 0;
+ RING_INVENTORY._medkit._sceneNumber = 2280;
+ RING_INVENTORY._ladder._sceneNumber = 4100;
+ RING_INVENTORY._rope._sceneNumber = 4150;
+ RING_INVENTORY._key._sceneNumber = 7700;
+ RING_INVENTORY._translator._sceneNumber = 2150;
+ RING_INVENTORY._paper._sceneNumber = 7700;
+ RING_INVENTORY._waldos._sceneNumber = 0;
+ RING_INVENTORY._ring._sceneNumber = 1;
+ RING_INVENTORY._stasisBox2._sceneNumber = 8100;
+ RING_INVENTORY._cloak._sceneNumber = 9850;
+ RING_INVENTORY._tunic._sceneNumber = 9450;
+ RING_INVENTORY._candle._sceneNumber = 9500;
+ RING_INVENTORY._straw._sceneNumber = 9400;
+ RING_INVENTORY._scimitar._sceneNumber = 9850;
+ RING_INVENTORY._sword._sceneNumber = 9850;
+ RING_INVENTORY._helmet._sceneNumber = 9500;
+ RING_INVENTORY._items._sceneNumber = 4300;
+ RING_INVENTORY._concentrator._sceneNumber = 4300;
+ RING_INVENTORY._nullifier._sceneNumber = 4300;
+ RING_INVENTORY._peg._sceneNumber = 4045;
+ RING_INVENTORY._vial._sceneNumber = 5100;
+ RING_INVENTORY._jacket._sceneNumber = 9850;
+ RING_INVENTORY._tunic2._sceneNumber = 9850;
+ RING_INVENTORY._bone._sceneNumber = 5300;
+ RING_INVENTORY._jar._sceneNumber = 7700;
+ RING_INVENTORY._emptyJar._sceneNumber = 7700;
+ RING_INVENTORY._selectedItem = NULL;
+
+ // Change to the first game scene
+ g_globals->_sceneManager.changeScene(30);
+}
+
+void RingworldGame::endGame(int resNum, int lineNum) {
+ g_globals->_events.setCursor(CURSOR_WALK);
+ Common::String msg = g_resourceManager->getMessage(resNum, lineNum);
+ bool savesExist = g_saver->savegamesExist();
+
+ if (!savesExist) {
+ // No savegames exist, so prompt the user to restart or quit
+ if (MessageDialog::show(msg, QUIT_BTN_STRING, RESTART_BTN_STRING) == 0)
+ g_vm->quitGame();
+ else
+ restart();
+ } else {
+ // Savegames exist, so prompt for Restore/Restart
+ bool breakFlag;
+ do {
+ if (g_vm->shouldQuit()) {
+ breakFlag = true;
+ } else if (MessageDialog::show(msg, RESTART_BTN_STRING, RESTORE_BTN_STRING) == 0) {
+ restart();
+ breakFlag = true;
+ } else {
+ handleSaveLoad(false, g_globals->_sceneHandler->_loadGameSlot, g_globals->_sceneHandler->_saveName);
+ breakFlag = g_globals->_sceneHandler->_loadGameSlot >= 0;
+ }
+ } while (!breakFlag);
+ }
+
+ g_globals->_events.setCursorFromFlag();
+}
+
+void RingworldGame::processEvent(Event &event) {
+ if (event.eventType == EVENT_KEYPRESS) {
+ switch (event.kbd.keycode) {
+ case Common::KEYCODE_F1:
+ // F1 - Help
+ MessageDialog::show(HELP_MSG, OK_BTN_STRING);
+ break;
+
+ case Common::KEYCODE_F2:
+ // F2 - Sound Options
+ SoundDialog::execute();
+ break;
+
+ case Common::KEYCODE_F3:
+ // F3 - Quit
+ quitGame();
+ event.handled = false;
+ break;
+
+ case Common::KEYCODE_F4:
+ // F4 - Restart
+ restartGame();
+ g_globals->_events.setCursorFromFlag();
+ break;
+
+ case Common::KEYCODE_F7:
+ // F7 - Restore
+ restoreGame();
+ g_globals->_events.setCursorFromFlag();
+ break;
+
+ case Common::KEYCODE_F10:
+ // F10 - Pause
+ GfxDialog::setPalette();
+ MessageDialog::show(GAME_PAUSED_MSG, OK_BTN_STRING);
+ g_globals->_events.setCursorFromFlag();
+ break;
+
+ default:
+ break;
+ }
+ }
+}
+
+void RingworldGame::rightClick() {
+ RightClickDialog *dlg = new RightClickDialog();
+ dlg->execute();
+ delete dlg;
+}
+
+/*--------------------------------------------------------------------------*/
+
+NamedHotspot::NamedHotspot() : SceneHotspot() {
+ _resNum = 0;
+ _lookLineNum = _useLineNum = _talkLineNum = -1;
+}
+
+void NamedHotspot::doAction(int action) {
+ switch (action) {
+ case CURSOR_WALK:
+ // Nothing
+ return;
+ case CURSOR_LOOK:
+ if (_lookLineNum == -1)
+ break;
+
+ SceneItem::display(_resNum, _lookLineNum, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
+ return;
+ case CURSOR_USE:
+ if (_useLineNum == -1)
+ break;
+
+ SceneItem::display(_resNum, _useLineNum, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
+ return;
+ case CURSOR_TALK:
+ if (_talkLineNum == -1)
+ break;
+
+ SceneItem::display(_resNum, _lookLineNum, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
+ return;
+ default:
+ break;
+ }
+
+ SceneHotspot::doAction(action);
+}
+
+void NamedHotspot::setDetails(int ys, int xs, int ye, int xe, const int resnum, const int lookLineNum, const int useLineNum) {
+ setBounds(ys, xe, ye, xs);
+ _resNum = resnum;
+ _lookLineNum = lookLineNum;
+ _useLineNum = useLineNum;
+ _talkLineNum = -1;
+ g_globals->_sceneItems.addItems(this, NULL);
+}
+
+void NamedHotspot::setDetails(const Rect &bounds, int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode, SceneItem *item) {
+ setBounds(bounds);
+ _resNum = resNum;
+ _lookLineNum = lookLineNum;
+ _talkLineNum = talkLineNum;
+ _useLineNum = useLineNum;
+
+ switch (mode) {
+ case 2:
+ g_globals->_sceneItems.push_front(this);
+ break;
+ case 4:
+ g_globals->_sceneItems.addBefore(item, this);
+ break;
+ case 5:
+ g_globals->_sceneItems.addAfter(item, this);
+ break;
+ default:
+ g_globals->_sceneItems.push_back(this);
+ break;
+ }
+}
+
+void NamedHotspot::setDetails(int sceneRegionId, int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode) {
+ _sceneRegionId = sceneRegionId;
+ _resNum = resNum;
+ _lookLineNum = lookLineNum;
+ _talkLineNum = talkLineNum;
+ _useLineNum = useLineNum;
+
+ // Handle adding hotspot to scene items list as necessary
+ switch (mode) {
+ case 2:
+ GLOBALS._sceneItems.push_front(this);
+ break;
+ case 3:
+ break;
+ default:
+ GLOBALS._sceneItems.push_back(this);
+ break;
+ }
+}
+
+void NamedHotspot::synchronize(Serializer &s) {
+ SceneHotspot::synchronize(s);
+ s.syncAsSint16LE(_resNum);
+ s.syncAsSint16LE(_lookLineNum);
+ s.syncAsSint16LE(_useLineNum);
+
+ if (g_vm->getGameID() == GType_BlueForce)
+ s.syncAsSint16LE(_talkLineNum);
+}
+
+
+} // End of namespace Ringworld
+
+} // End of namespace TsAGE
diff --git a/engines/tsage/ringworld/ringworld_logic.h b/engines/tsage/ringworld/ringworld_logic.h
new file mode 100644
index 0000000000..6f6a66cc26
--- /dev/null
+++ b/engines/tsage/ringworld/ringworld_logic.h
@@ -0,0 +1,191 @@
+/* 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.
+ *
+ */
+
+#ifndef TSAGE_RINGWORLD_LOGIC_H
+#define TSAGE_RINGWORLD_LOGIC_H
+
+#include "common/scummsys.h"
+#include "tsage/events.h"
+#include "tsage/core.h"
+#include "tsage/scenes.h"
+#include "tsage/globals.h"
+
+namespace TsAGE {
+
+namespace Ringworld {
+
+using namespace TsAGE;
+
+class SceneFactory {
+public:
+ static Scene *createScene(int sceneNumber);
+};
+
+class DisplayHotspot : public SceneObject {
+private:
+ Common::Array<int> _actions;
+ bool performAction(int action);
+public:
+ DisplayHotspot(int regionId, ...);
+
+ virtual void doAction(int action) {
+ if (!performAction(action))
+ SceneHotspot::doAction(action);
+ }
+};
+
+class DisplayObject : public SceneObject {
+private:
+ Common::Array<int> _actions;
+ bool performAction(int action);
+public:
+ DisplayObject(int firstAction, ...);
+
+ virtual void doAction(int action) {
+ if (!performAction(action))
+ SceneHotspot::doAction(action);
+ }
+};
+
+class SceneObjectExt : public SceneObject {
+public:
+ int _state;
+
+ virtual void synchronize(Serializer &s) {
+ SceneObject::synchronize(s);
+ s.syncAsSint16LE(_state);
+ }
+ virtual Common::String getClassName() { return "SceneObjectExt"; }
+};
+
+class SceneArea : public SavedObject {
+public:
+ GfxSurface _surface;
+ GfxSurface *_savedArea;
+ Common::Point _pt;
+ int _resNum;
+ int _rlbNum;
+ int _subNum;
+ int _actionId;
+ Rect _bounds;
+public:
+ SceneArea();
+ ~SceneArea();
+
+ void setup(int resNum, int rlbNum, int subNum, int actionId);
+ void draw2();
+ void display();
+ void restore();
+
+ virtual void synchronize(Serializer &s);
+ virtual void draw(bool flag);
+ virtual void wait();
+};
+
+/*--------------------------------------------------------------------------*/
+
+class RingworldInvObjectList : public InvObjectList {
+public:
+ InvObject _stunner;
+ InvObject _scanner;
+ InvObject _stasisBox;
+ InvObject _infoDisk;
+ InvObject _stasisNegator;
+ InvObject _keyDevice;
+ InvObject _medkit;
+ InvObject _ladder;
+ InvObject _rope;
+ InvObject _key;
+ InvObject _translator;
+ InvObject _ale;
+ InvObject _paper;
+ InvObject _waldos;
+ InvObject _stasisBox2;
+ InvObject _ring;
+ InvObject _cloak;
+ InvObject _tunic;
+ InvObject _candle;
+ InvObject _straw;
+ InvObject _scimitar;
+ InvObject _sword;
+ InvObject _helmet;
+ InvObject _items;
+ InvObject _concentrator;
+ InvObject _nullifier;
+ InvObject _peg;
+ InvObject _vial;
+ InvObject _jacket;
+ InvObject _tunic2;
+ InvObject _bone;
+ InvObject _jar;
+ InvObject _emptyJar;
+public:
+ RingworldInvObjectList();
+
+ virtual Common::String getClassName() { return "RingworldInvObjectList"; }
+};
+
+#define RING_INVENTORY (*((::TsAGE::Ringworld::RingworldInvObjectList *)g_globals->_inventory))
+
+class RingworldGame: public Game {
+public:
+ virtual void start();
+ virtual void restart();
+ virtual void endGame(int resNum, int lineNum);
+
+ virtual Scene *createScene(int sceneNumber);
+ virtual void processEvent(Event &event);
+ virtual void rightClick();
+ virtual bool canSaveGameStateCurrently();
+ virtual bool canLoadGameStateCurrently();
+};
+
+class NamedHotspot : public SceneHotspot {
+public:
+ int _resNum, _lookLineNum, _useLineNum, _talkLineNum;
+ NamedHotspot();
+
+ virtual void doAction(int action);
+ virtual Common::String getClassName() { return "NamedHotspot"; }
+ virtual void synchronize(Serializer &s);
+ virtual void setDetails(int ys, int xs, int ye, int xe, const int resnum, const int lookLineNum, const int useLineNum);
+ virtual void setDetails(const Rect &bounds, int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode, SceneItem *item);
+ virtual void setDetails(int sceneRegionId, int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode);
+};
+
+class NamedHotspotExt : public NamedHotspot {
+public:
+ int _flag;
+ NamedHotspotExt() { _flag = 0; }
+
+ virtual Common::String getClassName() { return "NamedHotspot"; }
+ virtual void synchronize(Serializer &s) {
+ NamedHotspot::synchronize(s);
+ s.syncAsSint16LE(_flag);
+ }
+};
+
+} // End of namespace Ringworld
+
+} // End of namespace TsAGE
+
+#endif
diff --git a/engines/tsage/ringworld_scenes1.cpp b/engines/tsage/ringworld/ringworld_scenes1.cpp
index 7fe2610fd7..4d9d565705 100644
--- a/engines/tsage/ringworld_scenes1.cpp
+++ b/engines/tsage/ringworld/ringworld_scenes1.cpp
@@ -20,12 +20,14 @@
*
*/
-#include "tsage/ringworld_scenes1.h"
+#include "tsage/ringworld/ringworld_scenes1.h"
#include "tsage/scenes.h"
#include "tsage/tsage.h"
#include "tsage/staticres.h"
-namespace tSage {
+namespace TsAGE {
+
+namespace Ringworld {
/*--------------------------------------------------------------------------
* Scene 10 - Kziniti Palace (Introduction)
@@ -33,14 +35,14 @@ namespace tSage {
*--------------------------------------------------------------------------*/
void Scene10::Action1::signal() {
- Scene10 *scene = (Scene10 *)_globals->_sceneManager._scene;
+ Scene10 *scene = (Scene10 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(6);
break;
case 1:
- _globals->_scenePalette.addRotation(240, 254, -1);
+ g_globals->_scenePalette.addRotation(240, 254, -1);
scene->_stripManager.start(10, this);
break;
case 2:
@@ -98,21 +100,21 @@ void Scene10::Action1::signal() {
scene->_object4.animate(ANIM_MODE_6, this);
break;
case 10:
- _globals->_soundHandler.fadeOut(this);
+ g_globals->_soundHandler.fadeOut(this);
break;
case 11:
- _globals->_scenePalette.clearListeners();
- _globals->_sceneManager.changeScene(15);
+ g_globals->_scenePalette.clearListeners();
+ g_globals->_sceneManager.changeScene(15);
break;
}
}
void Scene10::Action2::signal() {
- Scene10 *scene = (Scene10 *)_globals->_sceneManager._scene;
+ Scene10 *scene = (Scene10 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- setDelay(_globals->_randomSource.getRandomNumber(179));
+ setDelay(g_globals->_randomSource.getRandomNumber(179));
break;
case 1:
scene->_object3.setFrame(1);
@@ -181,11 +183,11 @@ void Scene10::postInit(SceneObjectList *OwnerList) {
_object6.animate(ANIM_MODE_2, NULL);
_object6._numFrames = 5;
- _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds);
- _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
+ g_globals->_sceneManager._scene->_sceneBounds.contain(g_globals->_sceneManager._scene->_backgroundBounds);
+ g_globals->_sceneOffset.x = (g_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
setAction(&_action1);
- _globals->_soundHandler.play(5);
+ g_globals->_soundHandler.play(5);
}
void Scene10::stripCallback(int v) {
@@ -211,7 +213,7 @@ void Scene10::stripCallback(int v) {
*--------------------------------------------------------------------------*/
void Scene15::Action1::signal() {
- Scene15 *scene = (Scene15 *)_globals->_sceneManager._scene;
+ Scene15 *scene = (Scene15 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -237,13 +239,13 @@ void Scene15::Action1::signal() {
}
case 3:
SceneItem::display(0, 0);
- _globals->_sceneManager.changeScene(20);
+ g_globals->_sceneManager.changeScene(20);
break;
}
}
void Scene15::Action1::dispatch() {
- Scene15 *scene = (Scene15 *)_globals->_sceneManager._scene;
+ Scene15 *scene = (Scene15 *)g_globals->_sceneManager._scene;
if (scene->_object1._position.y < 100)
scene->_object1.changeZoom(100 - scene->_object1._position.y);
@@ -256,7 +258,7 @@ void Scene15::postInit(SceneObjectList *OwnerList) {
loadScene(15);
Scene::postInit();
setZoomPercents(0, 100, 200, 100);
- _globals->_soundHandler.play(6);
+ g_globals->_soundHandler.play(6);
setAction(&_action1);
}
@@ -266,7 +268,7 @@ void Scene15::postInit(SceneObjectList *OwnerList) {
*--------------------------------------------------------------------------*/
void Scene20::Action1::signal() {
- Scene20 *scene = (Scene20 *)_globals->_sceneManager._scene;
+ Scene20 *scene = (Scene20 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -276,11 +278,11 @@ void Scene20::Action1::signal() {
scene->_stripManager.start(20, this);
break;
case 2:
- _globals->_soundHandler.fadeOut(this);
+ g_globals->_soundHandler.fadeOut(this);
break;
case 3:
- _globals->_sceneManager._fadeMode = FADEMODE_GRADUAL;
- _globals->_sceneManager.changeScene(30); // First game scene
+ g_globals->_sceneManager._fadeMode = FADEMODE_GRADUAL;
+ g_globals->_sceneManager.changeScene(30); // First game scene
break;
default:
break;
@@ -288,7 +290,7 @@ void Scene20::Action1::signal() {
}
void Scene20::Action2::signal() {
- Scene20 *scene = (Scene20 *)_globals->_sceneManager._scene;
+ Scene20 *scene = (Scene20 *)g_globals->_sceneManager._scene;
NpcMover *npcMover;
switch (_actionIndex++) {
@@ -303,51 +305,51 @@ void Scene20::Action2::signal() {
case 2: {
NpcMover *mover = new NpcMover();
Common::Point pt(455, 77);
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
ObjectMover2 *mover2 = new ObjectMover2();
- scene->_SceneObjectExt.addMover(mover2, 5, 10, &_globals->_player);
+ scene->_SceneObjectExt.addMover(mover2, 5, 10, &g_globals->_player);
ObjectMover2 *mover3 = new ObjectMover2();
- scene->_sceneObject3.addMover(mover3, 10, 15, &_globals->_player);
+ scene->_sceneObject3.addMover(mover3, 10, 15, &g_globals->_player);
break;
}
case 3: {
npcMover = new NpcMover();
Common::Point pt(557, 100);
- _globals->_player.addMover(npcMover, &pt, this);
+ g_globals->_player.addMover(npcMover, &pt, this);
break;
}
case 4: {
npcMover = new NpcMover();
Common::Point pt(602, 90);
- _globals->_player.addMover(npcMover, &pt, this);
+ g_globals->_player.addMover(npcMover, &pt, this);
break;
}
case 5: {
npcMover = new NpcMover();
Common::Point pt(618, 90);
- _globals->_player.addMover(npcMover, &pt, this);
+ g_globals->_player.addMover(npcMover, &pt, this);
break;
}
case 6: {
npcMover = new NpcMover();
Common::Point pt(615, 81);
- _globals->_player.addMover(npcMover, &pt, this);
+ g_globals->_player.addMover(npcMover, &pt, this);
break;
}
case 7: {
npcMover = new NpcMover();
Common::Point pt(588, 79);
- _globals->_player.addMover(npcMover, &pt, this);
+ g_globals->_player.addMover(npcMover, &pt, this);
break;
}
case 8:
scene->_sound.release();
- _globals->_soundHandler.fadeOut(this);
+ g_globals->_soundHandler.fadeOut(this);
break;
case 9:
SceneItem::display(0, 0, LIST_END);
- _globals->_sceneManager._fadeMode = FADEMODE_GRADUAL;
- _globals->_sceneManager.changeScene(40);
+ g_globals->_sceneManager._fadeMode = FADEMODE_GRADUAL;
+ g_globals->_sceneManager.changeScene(40);
break;
default:
break;
@@ -355,7 +357,7 @@ void Scene20::Action2::signal() {
}
void Scene20::Action3::signal() {
- Scene20 *scene = (Scene20 *)_globals->_sceneManager._scene;
+ Scene20 *scene = (Scene20 *)g_globals->_sceneManager._scene;
NpcMover *npcMover;
switch (_actionIndex++) {
@@ -365,47 +367,47 @@ void Scene20::Action3::signal() {
case 1: {
npcMover = new NpcMover();
Common::Point pt(615, 81);
- _globals->_player.addMover(npcMover, &pt, this);
+ g_globals->_player.addMover(npcMover, &pt, this);
ObjectMover2 *mover1 = new ObjectMover2();
- scene->_SceneObjectExt.addMover(mover1, 5, 10, &_globals->_player);
+ scene->_SceneObjectExt.addMover(mover1, 5, 10, &g_globals->_player);
ObjectMover2 *mover2 = new ObjectMover2();
- scene->_sceneObject3.addMover(mover2, 20, 25, &_globals->_player);
+ scene->_sceneObject3.addMover(mover2, 20, 25, &g_globals->_player);
break;
}
case 2: {
npcMover = new NpcMover();
Common::Point pt(618, 90);
- _globals->_player.addMover(npcMover, &pt, this);
+ g_globals->_player.addMover(npcMover, &pt, this);
break;
}
case 3: {
- _globals->_player._moveDiff = Common::Point(10, 10);
+ g_globals->_player._moveDiff = Common::Point(10, 10);
scene->_SceneObjectExt._moveDiff = Common::Point(10, 10);
scene->_sceneObject3._moveDiff = Common::Point(10, 10);
npcMover = new NpcMover();
Common::Point pt(445, 132);
- _globals->_player.addMover(npcMover, &pt, this);
+ g_globals->_player.addMover(npcMover, &pt, this);
break;
}
case 4: {
npcMover = new NpcMover();
Common::Point pt(151, 137);
- _globals->_player.addMover(npcMover, &pt, this);
+ g_globals->_player.addMover(npcMover, &pt, this);
break;
}
case 5: {
npcMover = new NpcMover();
Common::Point pt(-15, 137);
- _globals->_player.addMover(npcMover, &pt, this);
+ g_globals->_player.addMover(npcMover, &pt, this);
break;
}
case 6:
scene->_sound.play(60, this, 127);
- _globals->_soundHandler.release();
+ g_globals->_soundHandler.release();
break;
case 7:
- _globals->_sceneManager._fadeMode = FADEMODE_GRADUAL;
- _globals->_sceneManager.changeScene(90);
+ g_globals->_sceneManager._fadeMode = FADEMODE_GRADUAL;
+ g_globals->_sceneManager.changeScene(90);
break;
default:
break;
@@ -413,7 +415,7 @@ void Scene20::Action3::signal() {
}
void Scene20::Action4::signal() {
- Scene20 *scene = (Scene20 *)_globals->_sceneManager._scene;
+ Scene20 *scene = (Scene20 *)g_globals->_sceneManager._scene;
NpcMover *npcMover;
switch (_actionIndex++) {
@@ -423,20 +425,20 @@ void Scene20::Action4::signal() {
case 1: {
npcMover = new NpcMover();
Common::Point pt(486, 134);
- _globals->_player.addMover(npcMover, &pt, this);
+ g_globals->_player.addMover(npcMover, &pt, this);
ObjectMover2 *mover1 = new ObjectMover2();
- scene->_SceneObjectExt.addMover(mover1, 20, 35, &_globals->_player);
+ scene->_SceneObjectExt.addMover(mover1, 20, 35, &g_globals->_player);
break;
}
case 2: {
- _globals->_player._moveDiff = Common::Point(12, 12);
+ g_globals->_player._moveDiff = Common::Point(12, 12);
scene->_SceneObjectExt._moveDiff = Common::Point(12, 12);
NpcMover *mover1 = new NpcMover();
Common::Point pt(486, 134);
scene->_sceneObject3.addMover(mover1, &pt, this);
NpcMover *mover2 = new NpcMover();
pt = Common::Point(-15, 134);
- _globals->_player.addMover(mover2, &pt, NULL);
+ g_globals->_player.addMover(mover2, &pt, NULL);
NpcMover *mover3 = new NpcMover();
pt = Common::Point(-15, 134);
scene->_SceneObjectExt.addMover(mover3, &pt, NULL);
@@ -483,7 +485,7 @@ void Scene20::Action4::signal() {
scene->_sceneObject5._moveDiff.x = 48;
ObjectMover3 *mover = new ObjectMover3();
- scene->_sceneObject5.addMover(mover, &_globals->_player, 4, this);
+ scene->_sceneObject5.addMover(mover, &g_globals->_player, 4, this);
break;
}
case 6: {
@@ -492,24 +494,24 @@ void Scene20::Action4::signal() {
scene->_SceneObjectExt.animate(ANIM_MODE_2, NULL);
scene->_sceneObject5.remove();
- _globals->_player.setVisage(21);
- _globals->_player.setStrip(1);
- _globals->_player.setFrame(1);
- _globals->_player.animate(ANIM_MODE_5, this);
- _globals->_player._moveDiff.x = 4;
+ g_globals->_player.setVisage(21);
+ g_globals->_player.setStrip(1);
+ g_globals->_player.setFrame(1);
+ g_globals->_player.animate(ANIM_MODE_5, this);
+ g_globals->_player._moveDiff.x = 4;
npcMover = new NpcMover();
- Common::Point pt(_globals->_player._position.x - 25, _globals->_player._position.y + 5);
- _globals->_player.addMover(npcMover, &pt, this);
+ Common::Point pt(g_globals->_player._position.x - 25, g_globals->_player._position.y + 5);
+ g_globals->_player.addMover(npcMover, &pt, this);
break;
}
case 7:
- _globals->_player.setStrip(2);
- _globals->_player.animate(ANIM_MODE_2, NULL);
+ g_globals->_player.setStrip(2);
+ g_globals->_player.animate(ANIM_MODE_2, NULL);
scene->_sound.play(77, this, 127);
break;
case 8:
- _globals->_game->endGame(20, 0);
+ g_globals->_game->endGame(20, 0);
break;
default:
break;
@@ -527,15 +529,15 @@ void Scene20::postInit(SceneObjectList *OwnerList) {
_stripManager.addSpeaker(&_speakerQText);
_stripManager.addSpeaker(&_speakerGameText);
- _speakerQText._npc = &_globals->_player;
+ _speakerQText._npc = &g_globals->_player;
- if (_globals->_sceneManager._previousScene == 30) {
+ if (g_globals->_sceneManager._previousScene == 30) {
// Cut scene: Assassins are coming
- _globals->_player.postInit();
- _globals->_player.setVisage(20);
- _globals->_player.setPosition(Common::Point(405, 69));
- _globals->_player._moveDiff = Common::Point(10, 10);
- _globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.postInit();
+ g_globals->_player.setVisage(20);
+ g_globals->_player.setPosition(Common::Point(405, 69));
+ g_globals->_player._moveDiff = Common::Point(10, 10);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
_SceneObjectExt.postInit();
_SceneObjectExt.setVisage(20);
@@ -549,21 +551,21 @@ void Scene20::postInit(SceneObjectList *OwnerList) {
_SceneObjectExt._moveDiff = Common::Point(10, 10);
_sceneObject3._moveDiff = Common::Point(10, 10);
- _globals->_soundHandler.play(20);
+ g_globals->_soundHandler.play(20);
_sound.play(21);
_sound.holdAt(true);
setAction(&_action2);
_sceneBounds = Rect(320, 0, 640, 200);
- } else if (_globals->_sceneManager._previousScene == 60) {
+ } else if (g_globals->_sceneManager._previousScene == 60) {
// Evasion
_sound.play(30);
- _globals->_player.postInit();
- _globals->_player.setVisage(20);
- _globals->_player.setPosition(Common::Point(588, 79));
- _globals->_player._moveDiff = Common::Point(5, 5);
- _globals->_player.fixPriority(50);
- _globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.postInit();
+ g_globals->_player.setVisage(20);
+ g_globals->_player.setPosition(Common::Point(588, 79));
+ g_globals->_player._moveDiff = Common::Point(5, 5);
+ g_globals->_player.fixPriority(50);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
_SceneObjectExt.postInit();
_SceneObjectExt.setVisage(20);
@@ -576,28 +578,28 @@ void Scene20::postInit(SceneObjectList *OwnerList) {
_sceneObject3.setPosition(Common::Point(595, 79));
_sceneObject3.animate(ANIM_MODE_1, NULL);
- if ((_globals->getFlag(120) && _globals->getFlag(116)) ||
- (_globals->getFlag(117) && _globals->getFlag(119))) {
+ if ((g_globals->getFlag(120) && g_globals->getFlag(116)) ||
+ (g_globals->getFlag(117) && g_globals->getFlag(119))) {
// Successful evasion
setAction(&_action3);
- } else if (_globals->getFlag(104)) {
+ } else if (g_globals->getFlag(104)) {
_sceneMode = 21;
- setAction(&_sequenceManager, this, 21, &_globals->_player, &_SceneObjectExt, NULL);
+ setAction(&_sequenceManager, this, 21, &g_globals->_player, &_SceneObjectExt, NULL);
} else {
// Failed evasion
_sceneObject3._moveDiff = Common::Point(8, 8);
setAction(&_action4);
}
- _sceneBounds.center(_globals->_player._position.x, _globals->_player._position.y);
+ _sceneBounds.center(g_globals->_player._position.x, g_globals->_player._position.y);
} else {
// Intro: Quinn looking at the monaster
- _globals->_player.postInit();
- _globals->_player.setVisage(2640);
- _globals->_player.animate(ANIM_MODE_NONE, NULL);
- _globals->_player.setStrip2(1);
- _globals->_player.setFrame2(4);
- _globals->_player.fixPriority(200);
- _globals->_player.setPosition(Common::Point(425, 233));
+ g_globals->_player.postInit();
+ g_globals->_player.setVisage(2640);
+ g_globals->_player.animate(ANIM_MODE_NONE, NULL);
+ g_globals->_player.setStrip2(1);
+ g_globals->_player.setFrame2(4);
+ g_globals->_player.fixPriority(200);
+ g_globals->_player.setPosition(Common::Point(425, 233));
setAction(&_action1);
_speakerQText.setTextPos(Common::Point(350, 20));
@@ -605,17 +607,17 @@ void Scene20::postInit(SceneObjectList *OwnerList) {
_speakerGameText.setTextPos(Common::Point(350, 20));
_speakerGameText._textWidth = 260;
- _globals->_soundHandler.play(8);
+ g_globals->_soundHandler.play(8);
_sceneBounds = Rect(320, 0, 640, 200);
}
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
loadScene(20);
}
void Scene20::signal() {
if (_sceneMode == 21)
- _globals->_sceneManager.changeScene(90);
+ g_globals->_sceneManager.changeScene(90);
}
/*--------------------------------------------------------------------------
@@ -629,7 +631,7 @@ void Scene30::BeamObject::doAction(int action) {
else if (action == CURSOR_LOOK)
display2(30, 2);
else if (action == CURSOR_USE) {
- Scene30 *parent = (Scene30 *)_globals->_sceneManager._scene;
+ Scene30 *parent = (Scene30 *)g_globals->_sceneManager._scene;
parent->setAction(&parent->_beamAction);
} else
SceneObject::doAction(action);
@@ -647,38 +649,38 @@ void Scene30::DoorObject::doAction(int action) {
}
void Scene30::BeamAction::signal() {
- Scene30 *scene = (Scene30 *)_globals->_sceneManager._scene;
+ Scene30 *scene = (Scene30 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0: {
// Disable control and move player to the doorway beam
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
NpcMover *mover = new NpcMover();
Common::Point pt(114, 198);
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 1:
// Perform the animation of player raising hand
- _globals->_player.setVisage(31);
- _globals->_player.setStrip(1);
- _globals->_player.setFrame(1);
- _globals->_player.animate(ANIM_MODE_5, this);
+ g_globals->_player.setVisage(31);
+ g_globals->_player.setStrip(1);
+ g_globals->_player.setFrame(1);
+ g_globals->_player.animate(ANIM_MODE_5, this);
break;
case 2:
// Hide the beam and lower the player's hand
scene->_sound.play(10, NULL, 127);
- _globals->_player.animate(ANIM_MODE_6, this);
+ g_globals->_player.animate(ANIM_MODE_6, this);
scene->_beam.remove();
break;
case 3: {
// Bring the Kzin to the doorway
- _globals->_player.setVisage(0);
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player.setStrip(7);
+ g_globals->_player.setVisage(0);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.setStrip(7);
scene->_kzin.postInit();
scene->_kzin.setVisage(2801);
scene->_kzin.animate(ANIM_MODE_1, NULL);
@@ -687,7 +689,7 @@ void Scene30::BeamAction::signal() {
NpcMover *mover = new NpcMover();
Common::Point pt(158, 170);
scene->_kzin.addMover(mover, &pt, this);
- _globals->_sceneItems.push_front(&scene->_kzin);
+ g_globals->_sceneItems.push_front(&scene->_kzin);
break;
}
@@ -700,7 +702,7 @@ void Scene30::BeamAction::signal() {
case 5:
// Run the Kzin's talk sequence
scene->_sound.play(13, NULL, 127);
- _globals->_soundHandler.play(12, NULL, 127);
+ g_globals->_soundHandler.play(12, NULL, 127);
scene->_stripManager.start((scene->_sceneMode == 0) ? 30 : 37, this);
break;
@@ -713,7 +715,7 @@ void Scene30::BeamAction::signal() {
// Re-activate player control
scene->_sceneMode = 31;
scene->_kzin.setAction(&scene->_kzinAction);
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
// End this action
remove();
@@ -725,19 +727,19 @@ void Scene30::BeamAction::signal() {
}
void Scene30::KzinAction::signal() {
- Scene30 *scene = (Scene30 *)_globals->_sceneManager._scene;
+ Scene30 *scene = (Scene30 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(1200);
break;
case 1:
- _globals->_soundHandler.fadeOut(NULL);
- _globals->_player.disableControl();
- setAction(&scene->_sequenceManager, _globals->_sceneManager._scene, 31, &scene->_kzin, &scene->_door, NULL);
+ g_globals->_soundHandler.fadeOut(NULL);
+ g_globals->_player.disableControl();
+ setAction(&scene->_sequenceManager, g_globals->_sceneManager._scene, 31, &scene->_kzin, &scene->_door, NULL);
break;
case 2:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
remove();
break;
default:
@@ -746,28 +748,28 @@ void Scene30::KzinAction::signal() {
}
void Scene30::RingAction::signal() {
- Scene30 *scene = (Scene30 *)_globals->_sceneManager._scene;
+ Scene30 *scene = (Scene30 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0: {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_kzin.setAction(NULL);
NpcMover *mover = new NpcMover();
Common::Point pt(114, 198);
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 1:
- _globals->_player.checkAngle(&scene->_kzin);
+ g_globals->_player.checkAngle(&scene->_kzin);
scene->_stripManager.start(32, this);
break;
case 2: {
- _globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
NpcMover *mover = new NpcMover();
Common::Point pt(143, 177);
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
@@ -783,7 +785,7 @@ void Scene30::RingAction::signal() {
scene->_kzin.addMover(kzinMover, &pt, this);
NpcMover *playerMover = new NpcMover();
pt = Common::Point(335, 36);
- _globals->_player.addMover(playerMover, &pt, this);
+ g_globals->_player.addMover(playerMover, &pt, this);
break;
}
@@ -791,7 +793,7 @@ void Scene30::RingAction::signal() {
break;
case 6:
- _globals->_sceneManager.changeScene(20);
+ g_globals->_sceneManager.changeScene(20);
break;
default:
@@ -800,19 +802,19 @@ void Scene30::RingAction::signal() {
}
void Scene30::TalkAction::signal() {
- Scene30 *scene = (Scene30 *)_globals->_sceneManager._scene;
+ Scene30 *scene = (Scene30 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0: {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_kzin.setAction(NULL);
NpcMover *mover = new NpcMover();
Common::Point pt(114, 198);
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 1:
- _globals->_player.checkAngle(&scene->_kzin);
+ g_globals->_player.checkAngle(&scene->_kzin);
scene->_stripManager.start(34, this);
break;
case 2:
@@ -820,7 +822,7 @@ void Scene30::TalkAction::signal() {
break;
case 3:
scene->_kzin.setAction(&scene->_kzinAction);
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
remove();
break;
default:
@@ -831,7 +833,7 @@ void Scene30::TalkAction::signal() {
/*--------------------------------------------------------------------------*/
void Scene30::KzinObject::doAction(int action) {
- Scene30 *scene = (Scene30 *)_globals->_sceneManager._scene;
+ Scene30 *scene = (Scene30 *)g_globals->_sceneManager._scene;
switch (action) {
case OBJECT_STUNNER:
@@ -851,7 +853,7 @@ void Scene30::KzinObject::doAction(int action) {
display2(30, 10);
break;
case CURSOR_TALK:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->setAction(&scene->_talkAction);
break;
default:
@@ -879,19 +881,19 @@ void Scene30::postInit(SceneObjectList *OwnerList) {
_stripManager.addSpeaker(&_speakerSText);
_stripManager.addSpeaker(&_speakerQText);
_speakerSText._npc = &_kzin;
- _speakerQText._npc = &_globals->_player;
+ _speakerQText._npc = &g_globals->_player;
// Setup player
- _globals->_player.postInit();
- _globals->_player.setVisage(0);
- _globals->_player.animate(ANIM_MODE_1);
- _globals->_player.setObjectWrapper(new SceneObjectWrapper());
- _globals->_player.setStrip(7);
- _globals->_player.setFrame(1);
- _globals->_player.setPosition(Common::Point(114, 198));
- _globals->_player.changeZoom(75);
- _globals->_player.enableControl();
+ g_globals->_player.postInit();
+ g_globals->_player.setVisage(0);
+ g_globals->_player.animate(ANIM_MODE_1);
+ g_globals->_player.setObjectWrapper(new SceneObjectWrapper());
+ g_globals->_player.setStrip(7);
+ g_globals->_player.setFrame(1);
+ g_globals->_player.setPosition(Common::Point(114, 198));
+ g_globals->_player.changeZoom(75);
+ g_globals->_player.enableControl();
// Set up beam object
_beam.postInit();
@@ -909,7 +911,7 @@ void Scene30::postInit(SceneObjectList *OwnerList) {
_courtyardHotspot.setBounds(Rect(0, 0, 320, 200));
// Add the objects and hotspots to the scene
- _globals->_sceneItems.addItems(&_beam, &_wallsHotspot, &_door, &_treeHotspot, &_groundHotspot,
+ g_globals->_sceneItems.addItems(&_beam, &_wallsHotspot, &_door, &_treeHotspot, &_groundHotspot,
&_courtyardHotspot, NULL);
// Load the scene data
@@ -925,12 +927,12 @@ void Scene30::signal() {
_beam.setStrip(2);
_beam.setPosition(Common::Point(124, 178));
_beam.fixPriority(188);
- _globals->_sceneItems.push_front(&_beam);
- _globals->_player.enableControl();
+ g_globals->_sceneItems.push_front(&_beam);
+ g_globals->_player.enableControl();
} else if (_sceneMode == 32) {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
_sceneMode = 31;
- setAction(&_sequenceManager, _globals->_sceneManager._scene, 31, &_kzin, &_door, NULL);
+ setAction(&_sequenceManager, g_globals->_sceneManager._scene, 31, &_kzin, &_door, NULL);
}
}
@@ -940,14 +942,14 @@ void Scene30::signal() {
*--------------------------------------------------------------------------*/
void Scene40::Action1::signal() {
- Scene40 *scene = (Scene40 *)_globals->_sceneManager._scene;
+ Scene40 *scene = (Scene40 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(120);
break;
case 1:
- _globals->_events.setCursor(CURSOR_WALK);
+ g_globals->_events.setCursor(CURSOR_WALK);
scene->_stripManager.start(40, this);
break;
case 2:
@@ -960,7 +962,7 @@ void Scene40::Action1::signal() {
case 3:
scene->_doorway.hide();
scene->_dyingKzin.setPosition(Common::Point(296, 62));
- _globals->_player.animate(ANIM_MODE_5, NULL);
+ g_globals->_player.animate(ANIM_MODE_5, NULL);
scene->_object1.setVisage(43);
scene->_object1.setStrip(3);
scene->_object1.animate(ANIM_MODE_5, NULL);
@@ -1024,8 +1026,8 @@ void Scene40::Action1::signal() {
break;
}
case 12: {
- _globals->_soundHandler.play(26);
- _globals->_player._uiEnabled = true;
+ g_globals->_soundHandler.play(26);
+ g_globals->_player._uiEnabled = true;
scene->_assassin.setVisage(42);
scene->_assassin.setPosition(Common::Point(4, 191));
scene->_assassin.setStrip(1);
@@ -1046,41 +1048,41 @@ void Scene40::Action1::signal() {
scene->_soundHandler.play(28);
break;
case 15:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_object1.setVisage(40);
scene->_object1.setStrip(4);
scene->_object1.setFrame(1);
scene->_object1.animate(ANIM_MODE_5, NULL);
- _globals->_player.setVisage(40);
- _globals->_player.setStrip(2);
- _globals->_player.setFrame(1);
- _globals->_player.animate(ANIM_MODE_5, this);
+ g_globals->_player.setVisage(40);
+ g_globals->_player.setStrip(2);
+ g_globals->_player.setFrame(1);
+ g_globals->_player.animate(ANIM_MODE_5, this);
break;
case 16:
- _globals->_soundHandler.play(77, this);
+ g_globals->_soundHandler.play(77, this);
break;
case 17:
- _globals->_game->endGame(40, 20);
+ g_globals->_game->endGame(40, 20);
remove();
break;
}
}
void Scene40::Action2::signal() {
- Scene40 *scene = (Scene40 *)_globals->_sceneManager._scene;
+ Scene40 *scene = (Scene40 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
if (scene->_assassin._position.x < 229)
_actionIndex = 0;
setDelay(1);
break;
case 1:
scene->_assassin.animate(ANIM_MODE_NONE, NULL);
- _globals->_player.setStrip(2);
- _globals->_player.setFrame(1);
- _globals->_player.animate(ANIM_MODE_5, this);
+ g_globals->_player.setStrip(2);
+ g_globals->_player.setFrame(1);
+ g_globals->_player.animate(ANIM_MODE_5, this);
break;
case 2: {
scene->_soundHandler.play(28);
@@ -1107,19 +1109,19 @@ void Scene40::Action2::signal() {
RING_INVENTORY._infoDisk._sceneNumber = 40;
break;
case 4:
- _globals->_player.animate(ANIM_MODE_6, this);
+ g_globals->_player.animate(ANIM_MODE_6, this);
break;
case 5: {
- _globals->_player.setVisage(0);
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player.setStrip(1);
+ g_globals->_player.setVisage(0);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.setStrip(1);
Common::Point pt(230, 195);
PlayerMover *mover = new PlayerMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 6: {
- _globals->_player.setStrip(7);
+ g_globals->_player.setStrip(7);
scene->_object1.setVisage(2806);
scene->_object1.animate(ANIM_MODE_1, NULL);
SceneObjectWrapper *wrapper = new SceneObjectWrapper();
@@ -1141,45 +1143,45 @@ void Scene40::Action2::signal() {
case 9:
scene->_dyingKzin.setAction(&scene->_action7);
scene->_object1.remove();
- _globals->_stripNum = 88;
- _globals->_events.setCursor(CURSOR_WALK);
- _globals->_player.enableControl();
+ g_globals->_stripNum = 88;
+ g_globals->_events.setCursor(CURSOR_WALK);
+ g_globals->_player.enableControl();
scene->_assassin.setAction(&scene->_action8);
break;
}
}
void Scene40::Action3::signal() {
- Scene40 *scene = (Scene40 *)_globals->_sceneManager._scene;
+ Scene40 *scene = (Scene40 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0: {
- _globals->_player.setAction(NULL);
- _globals->_stripNum = 99;
- _globals->_player.disableControl();
+ g_globals->_player.setAction(NULL);
+ g_globals->_stripNum = 99;
+ g_globals->_player.disableControl();
Common::Point pt(240, 195);
NpcMover *mover = new NpcMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 1:
- _globals->_player.setVisage(5010);
- _globals->_player._strip = 2;
- _globals->_player._frame = 1;
- _globals->_player.animate(ANIM_MODE_4, 5, 1, this);
+ g_globals->_player.setVisage(5010);
+ g_globals->_player._strip = 2;
+ g_globals->_player._frame = 1;
+ g_globals->_player.animate(ANIM_MODE_4, 5, 1, this);
break;
case 2:
scene->_assassin.setStrip(2);
scene->_assassin.setFrame(1);
RING_INVENTORY._infoDisk._sceneNumber = 1;
- _globals->_player.animate(ANIM_MODE_6, this);
+ g_globals->_player.animate(ANIM_MODE_6, this);
break;
case 3:
- _globals->_player.setVisage(0);
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player.setStrip(7);
- _globals->_stripNum = 88;
- _globals->_player.enableControl();
+ g_globals->_player.setVisage(0);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.setStrip(7);
+ g_globals->_stripNum = 88;
+ g_globals->_player.enableControl();
remove();
break;
}
@@ -1190,22 +1192,22 @@ void Scene40::Action4::signal() {
case 0: {
Common::Point pt(178, 190);
NpcMover *mover = new NpcMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 1:
- _globals->_stripNum = 88;
- _globals->_player.enableControl();
+ g_globals->_stripNum = 88;
+ g_globals->_player.enableControl();
break;
}
}
void Scene40::Action5::signal() {
- Scene40 *scene = (Scene40 *)_globals->_sceneManager._scene;
+ Scene40 *scene = (Scene40 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- setDelay(_globals->_randomSource.getRandomNumber(119) + 120);
+ setDelay(g_globals->_randomSource.getRandomNumber(119) + 120);
break;
case 1:
scene->_object2.animate(ANIM_MODE_8, 1, this);
@@ -1214,7 +1216,7 @@ void Scene40::Action5::signal() {
}
void Scene40::Action6::signal() {
- Scene40 *scene = (Scene40 *)_globals->_sceneManager._scene;
+ Scene40 *scene = (Scene40 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0: {
@@ -1251,17 +1253,17 @@ void Scene40::Action6::signal() {
}
void Scene40::Action7::signal() {
- Scene40 *scene = (Scene40 *)_globals->_sceneManager._scene;
+ Scene40 *scene = (Scene40 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- setDelay(_globals->_randomSource.getRandomNumber(499) + 500);
+ setDelay(g_globals->_randomSource.getRandomNumber(499) + 500);
break;
case 1:
scene->_object7.postInit();
scene->_object7.setVisage(46);
- if (_globals->_randomSource.getRandomNumber(32767) >= 16384) {
+ if (g_globals->_randomSource.getRandomNumber(32767) >= 16384) {
scene->_object7.setStrip(3);
scene->_object7.setPosition(Common::Point(15, 185));
} else {
@@ -1280,16 +1282,16 @@ void Scene40::Action7::signal() {
}
void Scene40::Action8::signal() {
- Scene40 *scene = (Scene40 *)_globals->_sceneManager._scene;
+ Scene40 *scene = (Scene40 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(300);
break;
case 1:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
- if ((_globals->_player._position.y >= 197) || (_globals->_player._visage)) {
+ if ((g_globals->_player._position.y >= 197) || (g_globals->_player._visage)) {
_actionIndex = 1;
setDelay(30);
} else {
@@ -1299,7 +1301,7 @@ void Scene40::Action8::signal() {
scene->_doorway.fixPriority(200);
scene->_doorway._moveRate = 60;
- if (_globals->_player._position.x >= 145) {
+ if (g_globals->_player._position.x >= 145) {
scene->_doorway.fixPriority(-1);
scene->_doorway.setPosition(Common::Point(6, 157));
} else {
@@ -1307,7 +1309,7 @@ void Scene40::Action8::signal() {
}
scene->_doorway._moveDiff = Common::Point(40, 40);
- Common::Point pt(_globals->_player._position.x, _globals->_player._position.y - 18);
+ Common::Point pt(g_globals->_player._position.x, g_globals->_player._position.y - 18);
NpcMover *mover = new NpcMover();
scene->_doorway.addMover(mover, &pt, this);
scene->_doorway.animate(ANIM_MODE_5, NULL);
@@ -1315,21 +1317,39 @@ void Scene40::Action8::signal() {
break;
case 2:
scene->_doorway.remove();
- _globals->_player.setVisage(40);
- _globals->_player.setStrip(2);
- _globals->_player.setFrame(1);
- _globals->_player.animate(ANIM_MODE_5, this);
+ g_globals->_player.setVisage(40);
+ g_globals->_player.setStrip(2);
+ g_globals->_player.setFrame(1);
+ g_globals->_player.animate(ANIM_MODE_5, this);
break;
case 3:
- _globals->_soundHandler.play(77, this);
+ g_globals->_soundHandler.play(77, this);
break;
case 4:
- _globals->_game->endGame(40, 45);
+ g_globals->_game->endGame(40, 45);
remove();
break;
}
}
+void Scene40::Action8::dispatch() {
+ if (_action)
+ _action->dispatch();
+
+ if (_delayFrames) {
+ uint32 frameNumber = g_globals->_events.getFrameNumber();
+ if ((_startFrame + 60) < frameNumber) {
+ --_delayFrames;
+ _startFrame = frameNumber;
+
+ if (_delayFrames <= 0) {
+ _delayFrames = 0;
+ signal();
+ }
+ }
+ }
+}
+
/*--------------------------------------------------------------------------*/
void Scene40::DyingKzin::doAction(int action) {
@@ -1353,14 +1373,14 @@ void Scene40::DyingKzin::doAction(int action) {
}
void Scene40::Assassin::doAction(int action) {
- Scene40 *scene = (Scene40 *)_globals->_sceneManager._scene;
+ Scene40 *scene = (Scene40 *)g_globals->_sceneManager._scene;
switch (action) {
case OBJECT_STUNNER:
if (scene->_assassin._visage == 44)
SceneItem::display2(40, 21);
else {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
Common::Point pt(230, 187);
NpcMover *mover = new NpcMover();
addMover(mover, &pt, NULL);
@@ -1382,7 +1402,7 @@ void Scene40::Assassin::doAction(int action) {
else if (RING_INVENTORY._infoDisk._sceneNumber == 1)
SceneItem::display2(40, 19);
else {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
setAction(&scene->_action3);
}
break;
@@ -1401,7 +1421,7 @@ void Scene40::Item2::doAction(int action) {
switch (action) {
case OBJECT_STUNNER:
SceneItem::display2(40, 35);
- _globals->_events.setCursor(CURSOR_WALK);
+ g_globals->_events.setCursor(CURSOR_WALK);
break;
case OBJECT_SCANNER:
SceneItem::display2(40, 34);
@@ -1416,7 +1436,7 @@ void Scene40::Item2::doAction(int action) {
SceneItem::display2(40, 37);
break;
default:
- SceneItem::doAction(action);
+ SceneHotspot::doAction(action);
break;
}
}
@@ -1425,7 +1445,7 @@ void Scene40::Item6::doAction(int action) {
switch (action) {
case OBJECT_STUNNER:
SceneItem::display2(40, 25);
- _globals->_events.setCursor(CURSOR_WALK);
+ g_globals->_events.setCursor(CURSOR_WALK);
break;
case OBJECT_SCANNER:
SceneItem::display2(40, 42);
@@ -1437,7 +1457,7 @@ void Scene40::Item6::doAction(int action) {
SceneItem::display2(40, 36);
break;
default:
- SceneItem::doAction(action);
+ SceneHotspot::doAction(action);
break;
}
}
@@ -1446,7 +1466,7 @@ void Scene40::Item6::doAction(int action) {
Scene40::Scene40() :
_item1(2, OBJECT_SCANNER, 40, 24, OBJECT_STUNNER, 40, 25, CURSOR_LOOK, 40, 7, CURSOR_USE, 40, 16, LIST_END),
- _item3(5, OBJECT_SCANNER, 40, 26, OBJECT_STUNNER, 40, 27, CURSOR_LOOK, 40, 9, CURSOR_USE, 40, 17, LIST_END),
+ _item3(5, OBJECT_SCANNER, 40, 28, OBJECT_STUNNER, 40, 27, CURSOR_LOOK, 40, 2, CURSOR_USE, 40, 30, LIST_END),
_item4(6, OBJECT_SCANNER, 40, 31, OBJECT_STUNNER, 40, 32, CURSOR_LOOK, 40, 5, CURSOR_USE, 40, 33, LIST_END),
_item5(0, CURSOR_LOOK, 40, 11, LIST_END),
_item7(4, OBJECT_SCANNER, 40, 26, OBJECT_STUNNER, 40, 27, CURSOR_LOOK, 40, 9, CURSOR_USE, 40, 17, LIST_END),
@@ -1458,7 +1478,7 @@ void Scene40::postInit(SceneObjectList *OwnerList) {
Scene::postInit();
setZoomPercents(0, 100, 200, 100);
- _globals->_stripNum = 99;
+ g_globals->_stripNum = 99;
_stripManager.addSpeaker(&_speakerQR);
_stripManager.addSpeaker(&_speakerSL);
@@ -1468,19 +1488,19 @@ void Scene40::postInit(SceneObjectList *OwnerList) {
_speakerGameText._color1 = 9;
_speakerGameText.setTextPos(Common::Point(160, 30));
- _speakerQText._npc = &_globals->_player;
+ _speakerQText._npc = &g_globals->_player;
_speakerSText._npc = &_object1;
- _globals->_player.postInit();
- _globals->_player.setVisage(0);
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player.setObjectWrapper(new SceneObjectWrapper());
- _globals->_player.setPosition(Common::Point(130, 220));
- _globals->_player.disableControl();
+ g_globals->_player.postInit();
+ g_globals->_player.setVisage(0);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.setObjectWrapper(new SceneObjectWrapper());
+ g_globals->_player.setPosition(Common::Point(130, 220));
+ g_globals->_player.disableControl();
- if (_globals->_sceneManager._previousScene == 20) {
- _globals->_soundHandler.play(24);
- _globals->_player.setVisage(43);
+ if (g_globals->_sceneManager._previousScene == 20) {
+ g_globals->_soundHandler.play(24);
+ g_globals->_player.setVisage(43);
_object1.postInit();
_object1.setVisage(41);
@@ -1502,7 +1522,7 @@ void Scene40::postInit(SceneObjectList *OwnerList) {
_assassin.postInit();
_assassin.setPosition(Common::Point(-40, 191));
- _globals->_sceneItems.push_back(&_assassin);
+ g_globals->_sceneItems.push_back(&_assassin);
_dyingKzin.postInit();
_dyingKzin.setVisage(40);
@@ -1537,8 +1557,8 @@ void Scene40::postInit(SceneObjectList *OwnerList) {
_assassin.setStrip(2);
}
- _globals->_sceneItems.push_back(&_assassin);
- _globals->_player.setPosition(Common::Point(170, 220));
+ g_globals->_sceneItems.push_back(&_assassin);
+ g_globals->_player.setPosition(Common::Point(170, 220));
setAction(&_action4);
}
@@ -1547,24 +1567,24 @@ void Scene40::postInit(SceneObjectList *OwnerList) {
_item6._sceneRegionId = 3;
_item2._sceneRegionId = 7;
- _globals->_sceneItems.addItems(&_dyingKzin, &_item8, &_item1, &_item2, &_item3, &_item4,
+ g_globals->_sceneItems.addItems(&_dyingKzin, &_item8, &_item1, &_item2, &_item3, &_item4,
&_item6, &_item7, &_item5, NULL);
}
void Scene40::signal() {
if (_sceneMode == 41)
- _globals->_sceneManager.changeScene(50);
+ g_globals->_sceneManager.changeScene(50);
}
void Scene40::dispatch() {
- if ((_globals->_stripNum == 88) && (_globals->_player._position.y >= 197)) {
- _globals->_player.disableControl();
- _globals->_stripNum = 0;
- _globals->_player.setAction(NULL);
+ if ((g_globals->_stripNum == 88) && (g_globals->_player._position.y >= 197)) {
+ g_globals->_player.disableControl();
+ g_globals->_stripNum = 0;
+ g_globals->_player.setAction(NULL);
_sceneMode = 41;
- setAction(&_sequenceManager, this, 41, &_globals->_player, NULL);
+ setAction(&_sequenceManager, this, 41, &g_globals->_player, NULL);
- if (_globals->_sceneManager._previousScene == 20) {
+ if (g_globals->_sceneManager._previousScene == 20) {
_dyingKzin.setAction(&_action6);
}
}
@@ -1578,49 +1598,49 @@ void Scene40::dispatch() {
*--------------------------------------------------------------------------*/
void Scene50::Action1::signal() {
- Scene50 *scene = (Scene50 *)_globals->_sceneManager._scene;
+ Scene50 *scene = (Scene50 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- setAction(&scene->_sequenceManager, this, 54, &_globals->_player, NULL);
+ setAction(&scene->_sequenceManager, this, 54, &g_globals->_player, NULL);
break;
case 1:
- _globals->_events.setCursor(CURSOR_WALK);
+ g_globals->_events.setCursor(CURSOR_WALK);
scene->_stripManager.start(63, this);
break;
case 2:
if (scene->_stripManager._field2E8 != 107) {
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
remove();
} else {
Common::Point pt(282, 139);
NpcMover *mover = new NpcMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
}
break;
case 3:
- _globals->_stripNum = -1;
- _globals->_sceneManager.changeScene(60);
+ g_globals->_stripNum = -1;
+ g_globals->_sceneManager.changeScene(60);
break;
}
}
void Scene50::Action2::signal() {
- Scene50 *scene = (Scene50 *)_globals->_sceneManager._scene;
+ Scene50 *scene = (Scene50 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_stripManager.start(66, this);
break;
case 1: {
Common::Point pt(141, 142);
NpcMover *mover = new NpcMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 2:
- _globals->_sceneManager.changeScene(40);
+ g_globals->_sceneManager.changeScene(40);
remove();
break;
}
@@ -1629,14 +1649,14 @@ void Scene50::Action2::signal() {
void Scene50::Action3::signal() {
switch (_actionIndex++) {
case 0: {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
Common::Point pt(136, 185);
NpcMover *mover = new NpcMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 1:
- _globals->_sceneManager.changeScene(60);
+ g_globals->_sceneManager.changeScene(60);
remove();
break;
}
@@ -1645,7 +1665,7 @@ void Scene50::Action3::signal() {
/*--------------------------------------------------------------------------*/
void Scene50::Object1::doAction(int action) {
- Scene50 *scene = (Scene50 *)_globals->_sceneManager._scene;
+ Scene50 *scene = (Scene50 *)g_globals->_sceneManager._scene;
switch (action) {
case OBJECT_STUNNER:
@@ -1661,7 +1681,7 @@ void Scene50::Object1::doAction(int action) {
SceneItem::display2(50, 21);
break;
case CURSOR_TALK:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_sceneMode = 52;
scene->setAction(&scene->_sequenceManager, scene, 52, NULL);
break;
@@ -1672,7 +1692,7 @@ void Scene50::Object1::doAction(int action) {
}
void Scene50::Object2::doAction(int action) {
- Scene50 *scene = (Scene50 *)_globals->_sceneManager._scene;
+ Scene50 *scene = (Scene50 *)g_globals->_sceneManager._scene;
switch (action) {
case OBJECT_STUNNER:
@@ -1686,7 +1706,7 @@ void Scene50::Object2::doAction(int action) {
break;
case OBJECT_INFODISK:
case CURSOR_USE:
- _globals->_stripNum = 50;
+ g_globals->_stripNum = 50;
scene->setAction(&scene->_action3);
break;
default:
@@ -1696,7 +1716,7 @@ void Scene50::Object2::doAction(int action) {
}
void Scene50::Object3::doAction(int action) {
- Scene50 *scene = (Scene50 *)_globals->_sceneManager._scene;
+ Scene50 *scene = (Scene50 *)g_globals->_sceneManager._scene;
switch (action) {
case OBJECT_STUNNER:
@@ -1713,7 +1733,7 @@ void Scene50::Object3::doAction(int action) {
SceneItem::display2(50, 8);
break;
case CURSOR_TALK:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_sceneMode = 52;
scene->setAction(&scene->_sequenceManager, scene, 52, NULL);
break;
@@ -1724,7 +1744,7 @@ void Scene50::Object3::doAction(int action) {
}
void Scene50::Object4::doAction(int action) {
- Scene50 *scene = (Scene50 *)_globals->_sceneManager._scene;
+ Scene50 *scene = (Scene50 *)g_globals->_sceneManager._scene;
switch (action) {
case OBJECT_STUNNER:
@@ -1738,10 +1758,10 @@ void Scene50::Object4::doAction(int action) {
break;
case OBJECT_INFODISK:
case CURSOR_USE:
- _globals->_player.disableControl();
- _globals->_stripNum = 0;
+ g_globals->_player.disableControl();
+ g_globals->_stripNum = 0;
scene->_sceneMode = 51;
- scene->setAction(&scene->_sequenceManager, scene, 51, &_globals->_player, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 51, &g_globals->_player, NULL);
break;
default:
SceneHotspot::doAction(action);
@@ -1770,20 +1790,20 @@ void Scene50::postInit(SceneObjectList *OwnerList) {
_stripManager.addSpeaker(&_speakerQText);
_stripManager.addSpeaker(&_speakerSText);
- _globals->_player.postInit();
- _globals->_player.setVisage(0);
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player.setObjectWrapper(new SceneObjectWrapper());
- _globals->_player._canWalk = false;
- _globals->_player.changeZoom(75);
- _globals->_player._moveDiff.y = 3;
-
- if (_globals->_sceneManager._previousScene == 40) {
- _globals->_player.setPosition(Common::Point(128, 123));
- } else if (_globals->_stripNum == 50) {
- _globals->_player.setPosition(Common::Point(136, 185));
+ g_globals->_player.postInit();
+ g_globals->_player.setVisage(0);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.setObjectWrapper(new SceneObjectWrapper());
+ g_globals->_player._canWalk = false;
+ g_globals->_player.changeZoom(75);
+ g_globals->_player._moveDiff.y = 3;
+
+ if (g_globals->_sceneManager._previousScene == 40) {
+ g_globals->_player.setPosition(Common::Point(128, 123));
+ } else if (g_globals->_stripNum == 50) {
+ g_globals->_player.setPosition(Common::Point(136, 185));
} else {
- _globals->_player.setPosition(Common::Point(270, 143));
+ g_globals->_player.setPosition(Common::Point(270, 143));
}
_object2.postInit();
@@ -1804,37 +1824,37 @@ void Scene50::postInit(SceneObjectList *OwnerList) {
_object4.setPosition(Common::Point(295, 144));
_object4.fixPriority(178);
- _globals->_sceneItems.addItems(&_object2, &_object3, &_object4, NULL);
+ g_globals->_sceneItems.addItems(&_object2, &_object3, &_object4, NULL);
- if (!_globals->getFlag(101)) {
- _globals->_player.disableControl();
- _globals->setFlag(101);
+ if (!g_globals->getFlag(101)) {
+ g_globals->_player.disableControl();
+ g_globals->setFlag(101);
setAction(&_action1);
} else {
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
- if (_globals->_sceneManager._previousScene == 40) {
- _globals->_player.disableControl();
+ if (g_globals->_sceneManager._previousScene == 40) {
+ g_globals->_player.disableControl();
_sceneMode = 54;
- setAction(&_sequenceManager, this, 54, &_globals->_player, NULL);
+ setAction(&_sequenceManager, this, 54, &g_globals->_player, NULL);
}
}
_item0.setBounds(Rect(200, 0, 320, 200));
- _globals->_sceneItems.addItems(&_item3, &_item4, &_item5, &_item0, NULL);
+ g_globals->_sceneItems.addItems(&_item3, &_item4, &_item5, &_item0, NULL);
}
void Scene50::signal() {
switch (_sceneMode) {
case 51:
- _globals->_sceneManager.changeScene(60);
+ g_globals->_sceneManager.changeScene(60);
break;
case 55:
- _globals->_sceneManager.changeScene(40);
+ g_globals->_sceneManager.changeScene(40);
break;
case 52:
case 54:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
break;
}
}
@@ -1842,13 +1862,13 @@ void Scene50::signal() {
void Scene50::dispatch() {
Scene::dispatch();
- if ((_sceneMode != 55) && _doorwayRect.contains(_globals->_player._position)) {
+ if ((_sceneMode != 55) && _doorwayRect.contains(g_globals->_player._position)) {
// Player in house doorway, start player moving to within
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
_sceneMode = 55;
Common::Point pt(89, 111);
NpcMover *mover = new NpcMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
}
}
@@ -1858,7 +1878,7 @@ void Scene50::dispatch() {
*--------------------------------------------------------------------------*/
void Scene60::Action1::signal() {
- Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene;
+ Scene60 *scene = (Scene60 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -1882,7 +1902,7 @@ void Scene60::Action1::signal() {
scene->_controlButton.animate(ANIM_MODE_2, NULL);
- if (!_globals->getFlag(83)) {
+ if (!g_globals->getFlag(83)) {
scene->_message.postInit();
scene->_message.setVisage(60);
scene->_message.setStrip2(3);
@@ -1891,18 +1911,18 @@ void Scene60::Action1::signal() {
scene->_message.animate(ANIM_MODE_2, NULL);
scene->_message._numFrames = 5;
- _globals->_sceneItems.push_front(&scene->_message);
+ g_globals->_sceneItems.push_front(&scene->_message);
scene->_soundHandler2.play(38);
}
- _globals->_events.setCursor(CURSOR_USE);
+ g_globals->_events.setCursor(CURSOR_USE);
break;
case 3:
scene->_soundHandler2.play(37);
scene->loadScene(65);
scene->_message.remove();
- if (_globals->_sceneObjects->contains(&scene->_redLights))
+ if (g_globals->_sceneObjects->contains(&scene->_redLights))
scene->_redLights.remove();
scene->_controlButton.remove();
@@ -1931,15 +1951,15 @@ void Scene60::Action1::signal() {
scene->_rose.setFrame(1);
scene->_rose.setPosition(Common::Point(145, 165));
- _globals->_sceneItems.push_front(&scene->_nextButton);
- _globals->_sceneItems.push_front(&scene->_prevButton);
- _globals->_sceneItems.push_front(&scene->_exitButton);
+ g_globals->_sceneItems.push_front(&scene->_nextButton);
+ g_globals->_sceneItems.push_front(&scene->_prevButton);
+ g_globals->_sceneItems.push_front(&scene->_exitButton);
setDelay(10);
- _globals->_events.setCursor(CURSOR_USE);
+ g_globals->_events.setCursor(CURSOR_USE);
break;
case 4:
- _globals->setFlag(90);
+ g_globals->setFlag(90);
// Deliberate fall-through
case 5:
case 6:
@@ -1947,13 +1967,13 @@ void Scene60::Action1::signal() {
SceneItem::display(60, _actionIndex - 4, SET_Y, 40, SET_X, 25, SET_FONT, 75,
SET_EXT_BGCOLOR, -1, SET_FG_COLOR, 34, SET_POS_MODE, 0,
SET_WIDTH, 280, SET_KEEP_ONSCREEN, 1, LIST_END);
- _globals->_events.setCursor(CURSOR_USE);
+ g_globals->_events.setCursor(CURSOR_USE);
break;
case 9:
- _globals->_player._uiEnabled = false;
+ g_globals->_player._uiEnabled = false;
RING_INVENTORY._infoDisk._sceneNumber = 1;
- if (_globals->_sceneObjects->contains(&scene->_message))
+ if (g_globals->_sceneObjects->contains(&scene->_message))
scene->_message.remove();
scene->_controlButton.animate(ANIM_MODE_NONE);
@@ -1973,14 +1993,14 @@ void Scene60::Action1::signal() {
scene->_masterButton.setFrame(1);
scene->_masterButton._state = 0;
- _globals->clearFlag(103);
- _globals->clearFlag(!_globals->_stripNum ? 116 : 119);
+ g_globals->clearFlag(103);
+ g_globals->clearFlag(!g_globals->_stripNum ? 116 : 119);
break;
case 10:
setDelay(60);
break;
case 11:
- _globals->_player._uiEnabled = true;
+ g_globals->_player._uiEnabled = true;
scene->_floppyDrive.remove();
remove();
break;
@@ -1991,7 +2011,7 @@ void Scene60::Action1::signal() {
}
void Scene60::Action2::signal() {
- Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene;
+ Scene60 *scene = (Scene60 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -2002,7 +2022,7 @@ void Scene60::Action2::signal() {
scene->_stripManager.start(66, this);
break;
case 3:
- _globals->_sceneManager.changeScene(50);
+ g_globals->_sceneManager.changeScene(50);
break;
}
}
@@ -2010,7 +2030,7 @@ void Scene60::Action2::signal() {
/*--------------------------------------------------------------------------*/
void Scene60::PrevObject::doAction(int action) {
- Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene;
+ Scene60 *scene = (Scene60 *)g_globals->_sceneManager._scene;
if (action == CURSOR_LOOK) {
SceneItem::display2(60, 16);
@@ -2028,7 +2048,7 @@ void Scene60::PrevObject::doAction(int action) {
}
void Scene60::NextObject::doAction(int action) {
- Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene;
+ Scene60 *scene = (Scene60 *)g_globals->_sceneManager._scene;
if (action == CURSOR_LOOK) {
SceneItem::display2(60, 17);
@@ -2045,7 +2065,7 @@ void Scene60::NextObject::doAction(int action) {
}
void Scene60::ExitObject::doAction(int action) {
- Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene;
+ Scene60 *scene = (Scene60 *)g_globals->_sceneManager._scene;
if (action == CURSOR_LOOK) {
SceneItem::display2(60, 18);
@@ -2076,8 +2096,8 @@ void Scene60::ExitObject::doAction(int action) {
scene->_masterButton.setStrip(8);
scene->_masterButton.setPosition(Common::Point(143, 105));
- _globals->_sceneItems.push_front(&scene->_masterButton);
- _globals->_sceneItems.push_front(&scene->_slaveButton);
+ g_globals->_sceneItems.push_front(&scene->_masterButton);
+ g_globals->_sceneItems.push_front(&scene->_slaveButton);
scene->_redLights.postInit();
scene->_redLights.setVisage(60);
@@ -2091,14 +2111,14 @@ void Scene60::ExitObject::doAction(int action) {
if (scene->_masterButton._state)
scene->_masterButton.setFrame(2);
- _globals->_sceneItems.push_front(&scene->_item1);
- _globals->_sceneItems.push_front(&scene->_controlButton);
- _globals->_sceneItems.push_front(&scene->_slaveButton);
- _globals->_sceneItems.push_front(&scene->_masterButton);
- _globals->_sceneItems.push_back(&scene->_item2);
+ g_globals->_sceneItems.push_front(&scene->_item1);
+ g_globals->_sceneItems.push_front(&scene->_controlButton);
+ g_globals->_sceneItems.push_front(&scene->_slaveButton);
+ g_globals->_sceneItems.push_front(&scene->_masterButton);
+ g_globals->_sceneItems.push_back(&scene->_item2);
- _globals->gfxManager()._font.setFontNumber(2);
- _globals->_sceneText._fontNumber = 2;
+ g_globals->gfxManager()._font.setFontNumber(2);
+ g_globals->_sceneText._fontNumber = 2;
scene->_action1.setActionIndex(2);
scene->_action1.setDelay(1);
@@ -2110,20 +2130,20 @@ void Scene60::ExitObject::doAction(int action) {
}
void Scene60::MessageObject::doAction(int action) {
- Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene;
+ Scene60 *scene = (Scene60 *)g_globals->_sceneManager._scene;
if (action == CURSOR_LOOK) {
SceneItem::display2(60, 9);
} else if (action == CURSOR_USE) {
scene->_action1.setDelay(1);
- _globals->setFlag(83);
+ g_globals->setFlag(83);
} else {
SceneHotspot::doAction(action);
}
}
void Scene60::ControlObject::doAction(int action) {
- Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene;
+ Scene60 *scene = (Scene60 *)g_globals->_sceneManager._scene;
if (action == CURSOR_LOOK) {
SceneItem::display2(60, 11);
@@ -2131,9 +2151,9 @@ void Scene60::ControlObject::doAction(int action) {
if (_animateMode == ANIM_MODE_NONE)
SceneItem::display2(60, 14);
else if (!scene->_slaveButton._state) {
- _globals->_soundHandler.play(40);
- _globals->_soundHandler.holdAt(true);
- _globals->_sceneManager.changeScene(20);
+ g_globals->_soundHandler.play(40);
+ g_globals->_soundHandler.holdAt(true);
+ g_globals->_sceneManager.changeScene(20);
} else {
scene->_sceneMode = 15;
setAction(&scene->_sequenceManager, scene, 62, NULL);
@@ -2144,7 +2164,7 @@ void Scene60::ControlObject::doAction(int action) {
}
void Scene60::SlaveObject::doAction(int action) {
- Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene;
+ Scene60 *scene = (Scene60 *)g_globals->_sceneManager._scene;
if (action == CURSOR_LOOK) {
SceneItem::display2(60, 8);
@@ -2154,14 +2174,14 @@ void Scene60::SlaveObject::doAction(int action) {
else if (_state) {
scene->_soundHandler3.stop();
animate(ANIM_MODE_6, NULL);
- _globals->clearFlag(102);
- _globals->clearFlag(!_globals->_stripNum ? 117 : 120);
+ g_globals->clearFlag(102);
+ g_globals->clearFlag(!g_globals->_stripNum ? 117 : 120);
_state = 0;
scene->_sceneMode = 9998;
} else {
scene->_soundHandler3.play(39);
- _globals->setFlag(102);
- _globals->setFlag(!_globals->_stripNum ? 117 : 120);
+ g_globals->setFlag(102);
+ g_globals->setFlag(!g_globals->_stripNum ? 117 : 120);
animate(ANIM_MODE_5, NULL);
_state = 1;
scene->_sceneMode = 9998;
@@ -2174,7 +2194,7 @@ void Scene60::SlaveObject::doAction(int action) {
}
void Scene60::MasterObject::doAction(int action) {
- Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene;
+ Scene60 *scene = (Scene60 *)g_globals->_sceneManager._scene;
if (action == CURSOR_LOOK) {
SceneItem::display2(60, 7);
@@ -2187,15 +2207,15 @@ void Scene60::MasterObject::doAction(int action) {
scene->_soundHandler3.stop();
animate(ANIM_MODE_6, NULL);
_state = 0;
- _globals->clearFlag(103);
- _globals->clearFlag(!_globals->_stripNum ? 116 : 119);
+ g_globals->clearFlag(103);
+ g_globals->clearFlag(!g_globals->_stripNum ? 116 : 119);
scene->_sceneMode = 9998;
} else {
scene->_soundHandler3.play(39);
animate(ANIM_MODE_5, NULL);
_state = 1;
- _globals->setFlag(103);
- _globals->setFlag(!_globals->_stripNum ? 116 : 119);
+ g_globals->setFlag(103);
+ g_globals->setFlag(!g_globals->_stripNum ? 116 : 119);
scene->_sceneMode = 9998;
}
@@ -2206,12 +2226,12 @@ void Scene60::MasterObject::doAction(int action) {
}
void Scene60::FloppyDrive::doAction(int action) {
- Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene;
+ Scene60 *scene = (Scene60 *)g_globals->_sceneManager._scene;
if (action == CURSOR_LOOK) {
SceneItem::display2(60, 13);
} else if (action == CURSOR_USE) {
- _globals->setFlag(!_globals->_stripNum ? 118 : 121);
+ g_globals->setFlag(!g_globals->_stripNum ? 118 : 121);
scene->setAction(&scene->_action1);
} else {
SceneHotspot::doAction(action);
@@ -2221,12 +2241,12 @@ void Scene60::FloppyDrive::doAction(int action) {
/*--------------------------------------------------------------------------*/
void Scene60::Item1::doAction(int action) {
- Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene;
+ Scene60 *scene = (Scene60 *)g_globals->_sceneManager._scene;
switch (action) {
case OBJECT_INFODISK:
RING_INVENTORY._infoDisk._sceneNumber = 60;
- _globals->setFlag(!_globals->_stripNum ? 118 : 121);
+ g_globals->setFlag(!g_globals->_stripNum ? 118 : 121);
scene->_sceneMode = 0;
scene->setAction(&scene->_action1);
break;
@@ -2235,14 +2255,14 @@ void Scene60::Item1::doAction(int action) {
break;
case CURSOR_USE:
if (RING_INVENTORY._infoDisk._sceneNumber == 60) {
- if (_globals->getFlag(118) && !_globals->_stripNum) {
- _globals->clearFlag(118);
+ if (g_globals->getFlag(118) && !g_globals->_stripNum) {
+ g_globals->clearFlag(118);
scene->setAction(&scene->_action1);
scene->_action1.setActionIndex(9);
scene->_action1.setDelay(1);
}
- if (_globals->getFlag(121) && !_globals->_stripNum) {
- _globals->clearFlag(121);
+ if (g_globals->getFlag(121) && !g_globals->_stripNum) {
+ g_globals->clearFlag(121);
scene->setAction(&scene->_action1);
scene->_action1.setActionIndex(9);
scene->_action1.setDelay(1);
@@ -2260,7 +2280,7 @@ void Scene60::Item1::doAction(int action) {
}
void Scene60::Item::doAction(int action) {
- Scene60 *scene = (Scene60 *)_globals->_sceneManager._scene;
+ Scene60 *scene = (Scene60 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
@@ -2271,7 +2291,7 @@ void Scene60::Item::doAction(int action) {
setAction(&scene->_sequenceManager, this, 62, NULL);
break;
default:
- SceneItem::doAction(action);
+ SceneHotspot::doAction(action);
break;
}
}
@@ -2292,8 +2312,8 @@ void Scene60::postInit(SceneObjectList *OwnerList) {
_stripManager.addSpeaker(&_speakerQText);
_stripManager.addSpeaker(&_speakerSText);
- _globals->_player._uiEnabled = true;
- _globals->_events.setCursor(CURSOR_USE);
+ g_globals->_player._uiEnabled = true;
+ g_globals->_events.setCursor(CURSOR_USE);
_slaveButton.postInit();
_slaveButton.setVisage(60);
@@ -2307,19 +2327,19 @@ void Scene60::postInit(SceneObjectList *OwnerList) {
_masterButton.setPosition(Common::Point(143, 105));
_masterButton._state = 0;
- _globals->_sceneItems.push_back(&_masterButton);
- _globals->_sceneItems.push_back(&_slaveButton);
+ g_globals->_sceneItems.push_back(&_masterButton);
+ g_globals->_sceneItems.push_back(&_slaveButton);
_controlButton.postInit();
_controlButton.setVisage(60);
_controlButton.setStrip(5);
_controlButton.setPosition(Common::Point(233, 143));
- _globals->_sceneItems.push_back(&_controlButton);
+ g_globals->_sceneItems.push_back(&_controlButton);
- if (_globals->_stripNum == -1) {
- _globals->_stripNum = 0;
+ if (g_globals->_stripNum == -1) {
+ g_globals->_stripNum = 0;
} else {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
_sceneMode = 9999;
setAction(&_sequenceManager, this, 61, NULL);
}
@@ -2327,18 +2347,18 @@ void Scene60::postInit(SceneObjectList *OwnerList) {
_item1.setBounds(Rect(130, 55, 174, 70));
_item2.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT));
- if (_globals->_stripNum == 0) {
- if (_globals->getFlag(117)) {
+ if (g_globals->_stripNum == 0) {
+ if (g_globals->getFlag(117)) {
_slaveButton._state = 1;
_slaveButton.setFrame(2);
}
- if (_globals->getFlag(116)) {
+ if (g_globals->getFlag(116)) {
_masterButton._state = 1;
_masterButton.setFrame(2);
}
- if (_globals->getFlag(118)) {
+ if (g_globals->getFlag(118)) {
_controlButton.animate(ANIM_MODE_2, NULL);
_redLights.postInit();
@@ -2348,7 +2368,7 @@ void Scene60::postInit(SceneObjectList *OwnerList) {
_soundHandler1.play(35);
- if (!_globals->getFlag(83)) {
+ if (!g_globals->getFlag(83)) {
_message.postInit();
_message.setVisage(60);
_message.setStrip2(3);
@@ -2356,23 +2376,23 @@ void Scene60::postInit(SceneObjectList *OwnerList) {
_message.setPosition(Common::Point(148, 85));
_message.animate(ANIM_MODE_2, NULL);
_message._numFrames = 5;
- _globals->_sceneItems.push_front(&_message);
+ g_globals->_sceneItems.push_front(&_message);
_soundHandler2.play(38);
}
}
} else {
- if (_globals->getFlag(120)) {
+ if (g_globals->getFlag(120)) {
_slaveButton._state = 1;
_slaveButton.setFrame(2);
}
- if (_globals->getFlag(119)) {
+ if (g_globals->getFlag(119)) {
_masterButton._state = 1;
_masterButton.setFrame(2);
}
- if (_globals->getFlag(121)) {
+ if (g_globals->getFlag(121)) {
_controlButton.animate(ANIM_MODE_2, NULL);
_redLights.postInit();
@@ -2383,7 +2403,7 @@ void Scene60::postInit(SceneObjectList *OwnerList) {
_soundHandler1.play(35);
- if (!_globals->getFlag(83)) {
+ if (!g_globals->getFlag(83)) {
_message.postInit();
_message.setVisage(60);
_message.setStrip2(3);
@@ -2391,24 +2411,24 @@ void Scene60::postInit(SceneObjectList *OwnerList) {
_message.setPosition(Common::Point(148, 85));
_message.animate(ANIM_MODE_2, NULL);
_message._numFrames = 5;
- _globals->_sceneItems.push_front(&_message);
+ g_globals->_sceneItems.push_front(&_message);
_soundHandler2.play(38);
}
}
}
- _globals->_sceneItems.addItems(&_item3, &_item4, &_item5, &_item6,
+ g_globals->_sceneItems.addItems(&_item3, &_item4, &_item5, &_item6,
&_item1, &_item2, NULL);
}
void Scene60::signal() {
if (_sceneMode != 0) {
if (_sceneMode == 9998) {
- _globals->_events.setCursor(CURSOR_USE);
+ g_globals->_events.setCursor(CURSOR_USE);
} else if (_sceneMode == 9999) {
- _globals->_player._uiEnabled = true;
- _globals->_events.setCursor(CURSOR_USE);
+ g_globals->_player._uiEnabled = true;
+ g_globals->_events.setCursor(CURSOR_USE);
_gfxButton.setText(EXIT_MSG);
_gfxButton._bounds.center(160, 193);
@@ -2416,7 +2436,7 @@ void Scene60::signal() {
_gfxButton._bounds.expandPanes();
} else {
SceneItem::display2(60, _sceneMode);
- _globals->_events.setCursor(CURSOR_USE);
+ g_globals->_events.setCursor(CURSOR_USE);
}
}
}
@@ -2426,7 +2446,7 @@ void Scene60::process(Event &event) {
if (_screenNumber == 60) {
if (_gfxButton.process(event))
- _globals->_sceneManager.changeScene(50);
+ g_globals->_sceneManager.changeScene(50);
}
}
@@ -2436,15 +2456,15 @@ void Scene60::process(Event &event) {
*--------------------------------------------------------------------------*/
void Scene90::Action1::signal() {
- Scene90 *scene = (Scene90 *)_globals->_sceneManager._scene;
+ Scene90 *scene = (Scene90 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(10);
break;
case 1:
- _globals->_scenePalette.addRotation(64, 72, -1);
- _globals->_events.setCursor(CURSOR_WALK);
+ g_globals->_scenePalette.addRotation(64, 72, -1);
+ g_globals->_events.setCursor(CURSOR_WALK);
scene->_stripManager.start(90, this);
break;
case 2:
@@ -2466,17 +2486,17 @@ void Scene90::Action1::signal() {
if (scene->_stripManager._field2E8 == 220)
scene->_stripManager.start(91, this, scene);
else {
- scene->_stripManager.start(_globals->getFlag(104) ? 93 : 92, this, scene);
+ scene->_stripManager.start(g_globals->getFlag(104) ? 93 : 92, this, scene);
_actionIndex = 7;
}
break;
case 6:
scene->_object2.animate(ANIM_MODE_NONE);
- _globals->_player._uiEnabled = true;
+ g_globals->_player._uiEnabled = true;
break;
case 7:
scene->_object2.animate(ANIM_MODE_NONE);
- _globals->_soundHandler.play(56);
+ g_globals->_soundHandler.play(56);
scene->_object3.animate(ANIM_MODE_5, this);
break;
case 8: {
@@ -2498,7 +2518,7 @@ void Scene90::Action1::signal() {
PlayerMover2 *mover = new PlayerMover2();
scene->_object1.addMover(mover, 10, 15, &scene->_object5);
- if (!_globals->getFlag(104)) {
+ if (!g_globals->getFlag(104)) {
mover = new PlayerMover2();
scene->_object4.addMover(mover, 10, 15, &scene->_object1);
}
@@ -2506,17 +2526,17 @@ void Scene90::Action1::signal() {
break;
}
case 11:
- _globals->_soundHandler.play(57);
- _globals->_soundHandler.play(68);
+ g_globals->_soundHandler.play(57);
+ g_globals->_soundHandler.play(68);
scene->_object3.animate(ANIM_MODE_6, NULL);
- SceneItem::display(90, _globals->getFlag(104) ? 15 : 14,
+ SceneItem::display(90, g_globals->getFlag(104) ? 15 : 14,
SET_EXT_BGCOLOR, 13, SET_KEEP_ONSCREEN, -1, SET_X, 120, SET_Y, 20, LIST_END);
break;
case 12:
SceneItem::display(0, 0);
- _globals->_scenePalette.clearListeners();
- _globals->_sceneManager.changeScene(95);
+ g_globals->_scenePalette.clearListeners();
+ g_globals->_sceneManager.changeScene(95);
break;
}
}
@@ -2524,14 +2544,14 @@ void Scene90::Action1::signal() {
/*--------------------------------------------------------------------------*/
void Scene90::Object1::doAction(int action) {
- Scene90 *scene = (Scene90 *)_globals->_sceneManager._scene;
+ Scene90 *scene = (Scene90 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(90, 7);
break;
case CURSOR_USE:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_sceneMode = 97;
setAction(&scene->_sequenceManager, scene, 97, this, NULL);
break;
@@ -2542,12 +2562,12 @@ void Scene90::Object1::doAction(int action) {
}
void Scene90::Object2::doAction(int action) {
- Scene90 *scene = (Scene90 *)_globals->_sceneManager._scene;
+ Scene90 *scene = (Scene90 *)g_globals->_sceneManager._scene;
switch (action) {
case OBJECT_STUNNER:
case CURSOR_USE:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_object6.postInit();
scene->_object6.setVisage(90);
scene->_object6.setStrip(6);
@@ -2563,7 +2583,7 @@ void Scene90::Object2::doAction(int action) {
SceneItem::display2(90, 8);
break;
case CURSOR_TALK:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
setAction(&scene->_sequenceManager, scene, 96, this, NULL);
break;
default:
@@ -2584,10 +2604,10 @@ Scene90::Scene90() :
}
void Scene90::stripCallback(int v) {
- Scene90 *scene = (Scene90 *)_globals->_sceneManager._scene;
+ Scene90 *scene = (Scene90 *)g_globals->_sceneManager._scene;
if (v == 1)
- scene->_object2.animate(ANIM_MODE_7, NULL);
+ scene->_object2.animate(ANIM_MODE_7, 0, NULL);
else if (v == 2)
scene->_object2.animate(ANIM_MODE_NONE);
}
@@ -2615,7 +2635,7 @@ void Scene90::postInit(SceneObjectList *OwnerList) {
_object5._moveDiff = Common::Point(22, 22);
_object5.setPosition(Common::Point(151, 177));
_object5.changeZoom(-1);
- _globals->_sceneItems.push_back(&_object5);
+ g_globals->_sceneItems.push_back(&_object5);
_object1.postInit();
_object1.setVisage(2337);
@@ -2624,9 +2644,9 @@ void Scene90::postInit(SceneObjectList *OwnerList) {
_object1._moveDiff = Common::Point(20, 20);
_object1.setPosition(Common::Point(212, 183));
_object1.changeZoom(-1);
- _globals->_sceneItems.push_back(&_object1);
+ g_globals->_sceneItems.push_back(&_object1);
- if (!_globals->getFlag(104)) {
+ if (!g_globals->getFlag(104)) {
_object4.postInit();
_object4.setVisage(2331);
_object4.setObjectWrapper(new SceneObjectWrapper());
@@ -2634,7 +2654,7 @@ void Scene90::postInit(SceneObjectList *OwnerList) {
_object4._moveDiff = Common::Point(20, 20);
_object4.setPosition(Common::Point(251, 207));
_object4.changeZoom(-1);
- _globals->_sceneItems.push_back(&_object4);
+ g_globals->_sceneItems.push_back(&_object4);
}
_object2.postInit();
@@ -2642,17 +2662,17 @@ void Scene90::postInit(SceneObjectList *OwnerList) {
_object2.animate(ANIM_MODE_1, NULL);
_object2.setPosition(Common::Point(315, 185));
_object2._strip = 2;
- _globals->_sceneItems.push_back(&_object2);
+ g_globals->_sceneItems.push_back(&_object2);
_object3.postInit();
_object3.setVisage(90);
_object3.animate(ANIM_MODE_1, NULL);
_object3.setPosition(Common::Point(196, 181));
_object3.fixPriority(175);
- _globals->_sceneItems.push_back(&_object3);
+ g_globals->_sceneItems.push_back(&_object3);
- _globals->_player.disableControl();
- _globals->_soundHandler.play(55);
+ g_globals->_player.disableControl();
+ g_globals->_soundHandler.play(55);
_soundHandler1.play(52);
_soundHandler1.holdAt(true);
@@ -2662,21 +2682,21 @@ void Scene90::postInit(SceneObjectList *OwnerList) {
_item1.setBounds(Rect(271, 65, 271, 186));
_item2.setBounds(Rect(0, 17, 124, 77));
- _globals->_sceneItems.addItems(&_item1, &_item2, &_item3, NULL);
+ g_globals->_sceneItems.addItems(&_item1, &_item2, &_item3, NULL);
}
void Scene90::signal() {
switch (_sceneMode) {
case 91:
_sceneMode = 92;
- _globals->_soundHandler.play(77, this);
+ g_globals->_soundHandler.play(77, this);
break;
case 92:
- _globals->_scenePalette.clearListeners();
- _globals->_game->endGame(90, 6);
+ g_globals->_scenePalette.clearListeners();
+ g_globals->_game->endGame(90, 6);
break;
case 96:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
break;
case 97:
_stripManager._field2E8 = 0;
@@ -2694,7 +2714,7 @@ void Scene90::signal() {
*--------------------------------------------------------------------------*/
void Scene95::Action1::signal() {
- Scene95 *scene = (Scene95 *)_globals->_sceneManager._scene;
+ Scene95 *scene = (Scene95 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -2719,7 +2739,7 @@ void Scene95::Action1::signal() {
Common::Point pt1(5, 198);
NpcMover *mover1 = new NpcMover();
- _globals->_player.addMover(mover1, &pt1, this);
+ g_globals->_player.addMover(mover1, &pt1, this);
Common::Point pt2(9, 190);
NpcMover *mover2 = new NpcMover();
@@ -2731,7 +2751,7 @@ void Scene95::Action1::signal() {
Common::Point pt1(235, 72);
PlayerMover *mover1 = new PlayerMover();
- _globals->_player.addMover(mover1, &pt1, NULL);
+ g_globals->_player.addMover(mover1, &pt1, NULL);
Common::Point pt2(235, 72);
PlayerMover *mover2 = new PlayerMover();
@@ -2762,8 +2782,8 @@ void Scene95::Action1::signal() {
break;
case 7: {
SceneItem::display(0, 0);
- _globals->_player.setVisage(92);
- _globals->_player.setPosition(Common::Point(-25, 200));
+ g_globals->_player.setVisage(92);
+ g_globals->_player.setPosition(Common::Point(-25, 200));
scene->_object1.setVisage(91);
scene->_object1.setPosition(Common::Point(-22, 220));
@@ -2771,7 +2791,7 @@ void Scene95::Action1::signal() {
Common::Point pt1(5, 198);
NpcMover *mover1 = new NpcMover();
- _globals->_player.addMover(mover1, &pt1, this);
+ g_globals->_player.addMover(mover1, &pt1, this);
Common::Point pt2(9, 190);
NpcMover *mover2 = new NpcMover();
@@ -2781,7 +2801,7 @@ void Scene95::Action1::signal() {
case 8: {
Common::Point pt1(108, 112);
PlayerMover *mover1 = new PlayerMover();
- _globals->_player.addMover(mover1, &pt1, this);
+ g_globals->_player.addMover(mover1, &pt1, this);
Common::Point pt2(108, 112);
PlayerMover *mover2 = new PlayerMover();
@@ -2789,7 +2809,7 @@ void Scene95::Action1::signal() {
break;
}
case 9:
- _globals->_sceneManager.changeScene(2300);
+ g_globals->_sceneManager.changeScene(2300);
break;
}
}
@@ -2804,14 +2824,14 @@ void Scene95::postInit(SceneObjectList *OwnerList) {
Scene::postInit();
setZoomPercents(100, 10, 200, 100);
- _globals->_player.postInit();
- _globals->_player.setVisage(2337);
- _globals->_player.setObjectWrapper(new SceneObjectWrapper());
- _globals->_player._strip = 4;
- _globals->_player._moveDiff = Common::Point(30, 30);
- _globals->_player.setPosition(Common::Point(-35, 200));
- _globals->_player.changeZoom(-1);
- _globals->_player.disableControl();
+ g_globals->_player.postInit();
+ g_globals->_player.setVisage(2337);
+ g_globals->_player.setObjectWrapper(new SceneObjectWrapper());
+ g_globals->_player._strip = 4;
+ g_globals->_player._moveDiff = Common::Point(30, 30);
+ g_globals->_player.setPosition(Common::Point(-35, 200));
+ g_globals->_player.changeZoom(-1);
+ g_globals->_player.disableControl();
_object1.postInit();
_object1.setVisage(2333);
@@ -2835,7 +2855,7 @@ void Scene95::postInit(SceneObjectList *OwnerList) {
*--------------------------------------------------------------------------*/
void Scene6100::Action1::signal() {
- Scene6100 *scene = (Scene6100 *)_globals->_sceneManager._scene;
+ Scene6100 *scene = (Scene6100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -2852,7 +2872,7 @@ void Scene6100::Action1::signal() {
}
void Scene6100::Action2::signal() {
- Scene6100 *scene = (Scene6100 *)_globals->_sceneManager._scene;
+ Scene6100 *scene = (Scene6100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -2869,7 +2889,7 @@ void Scene6100::Action2::signal() {
}
void Scene6100::Action3::signal() {
- Scene6100 *scene = (Scene6100 *)_globals->_sceneManager._scene;
+ Scene6100 *scene = (Scene6100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -2877,9 +2897,9 @@ void Scene6100::Action3::signal() {
setDelay(60);
break;
case 1:
- _globals->_scenePalette.clearListeners();
+ g_globals->_scenePalette.clearListeners();
scene->_fadePercent = 100;
- _globals->_scenePalette.refresh();
+ g_globals->_scenePalette.refresh();
scene->loadScene(9997);
scene->_object1.hide();
scene->_object2.hide();
@@ -2890,7 +2910,7 @@ void Scene6100::Action3::signal() {
scene->_rocks.hide();
scene->_sceneText.hide();
- _globals->_events.setCursor(CURSOR_WALK);
+ g_globals->_events.setCursor(CURSOR_WALK);
scene->_stripManager.start(8120, this);
break;
case 2:
@@ -2898,12 +2918,12 @@ void Scene6100::Action3::signal() {
break;
case 3:
scene->showMessage(NULL, 0, NULL);
- _globals->_events.setCursor(CURSOR_WALK);
+ g_globals->_events.setCursor(CURSOR_WALK);
scene->_stripManager.start(8130, this);
break;
case 4:
- _globals->setFlag(76);
- _globals->_sceneManager.changeScene(
+ g_globals->setFlag(76);
+ g_globals->_sceneManager.changeScene(
(scene->_stripManager._field2E8 == 135) ? 6100 : 2320);
remove();
break;
@@ -2911,7 +2931,7 @@ void Scene6100::Action3::signal() {
}
void Scene6100::Action4::signal() {
- Scene6100 *scene = (Scene6100 *)_globals->_sceneManager._scene;
+ Scene6100 *scene = (Scene6100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -2928,7 +2948,7 @@ void Scene6100::Action4::signal() {
}
void Scene6100::Action5::dispatch() {
- Scene6100 *scene = (Scene6100 *)_globals->_sceneManager._scene;
+ Scene6100 *scene = (Scene6100 *)g_globals->_sceneManager._scene;
FloatSet zeroSet;
const double MULTIPLY_FACTOR = 0.01744; // 2 * pi / 360
@@ -2978,9 +2998,9 @@ void Scene6100::Action5::dispatch() {
if (idx != 3) {
scene->_objList[idx]->_floats._float1 =
- _globals->_randomSource.getRandomNumber(199);
+ g_globals->_randomSource.getRandomNumber(199);
scene->_objList[idx]->_floats._float2 =
- _globals->_randomSource.getRandomNumber(999) + 750.0;
+ g_globals->_randomSource.getRandomNumber(999) + 750.0;
scene->_objList[idx]->_floats.proc1(
-(scene->_turnAmount * 10 + scene->_angle) * MULTIPLY_FACTOR);
@@ -3002,34 +3022,34 @@ void Scene6100::Action5::dispatch() {
scene->_soundHandler.play(233);
scene->showMessage(NULL, 0, NULL);
- if (!_globals->getFlag(76))
+ if (!g_globals->getFlag(76))
scene->_probe.setAction(&scene->_action1);
break;
case 1:
scene->_soundHandler.play(233);
scene->showMessage(NULL, 0, NULL);
- if (!_globals->getFlag(76))
+ if (!g_globals->getFlag(76))
scene->_probe.setAction(&scene->_action2);
break;
case 2:
scene->_soundHandler.play(234);
scene->showMessage(NULL, 0, NULL);
- if (!_globals->getFlag(76))
+ if (!g_globals->getFlag(76))
scene->_probe.setAction(NULL);
scene->setAction(&scene->_action3);
break;
}
- _globals->_scenePalette.clearListeners();
+ g_globals->_scenePalette.clearListeners();
scene->_fadePercent = 0;
}
}
}
void Scene6100::GetBoxAction::signal() {
- Scene6100 *scene = (Scene6100 *)_globals->_sceneManager._scene;
+ Scene6100 *scene = (Scene6100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0: {
@@ -3042,7 +3062,7 @@ void Scene6100::GetBoxAction::signal() {
}
case 1: {
scene->showMessage(SCENE6100_TAKE_CONTROLS, 35, this);
- _globals->_scenePalette.clearListeners();
+ g_globals->_scenePalette.clearListeners();
Common::Point pt(scene->_rocks._position.x, scene->_rocks._position.y - 10);
NpcMover *mover = new NpcMover();
@@ -3061,13 +3081,13 @@ void Scene6100::GetBoxAction::signal() {
break;
case 5:
scene->showMessage(NULL, 0, NULL);
- _globals->_sceneManager.changeScene(2320);
+ g_globals->_sceneManager.changeScene(2320);
remove();
}
}
void Scene6100::GetBoxAction::dispatch() {
- Scene6100 *scene = (Scene6100 *)_globals->_sceneManager._scene;
+ Scene6100 *scene = (Scene6100 *)g_globals->_sceneManager._scene;
if (!scene->_probe._mover && (scene->_getBoxAction._actionIndex >= 1)) {
if (scene->_getBoxAction._actionIndex == 1) {
@@ -3093,7 +3113,7 @@ void Scene6100::Action7::signal() {
setDelay(90);
break;
case 2:
- _globals->_sceneManager.changeScene(2100);
+ g_globals->_sceneManager.changeScene(2100);
remove();
break;
}
@@ -3105,16 +3125,16 @@ void Scene6100::Object::synchronize(Serializer &s) {
SceneObject::synchronize(s);
// Save the double fields of the FloatSet
- s.syncBytes((byte *)&_floats._float1, sizeof(double));
- s.syncBytes((byte *)&_floats._float2, sizeof(double));
- s.syncBytes((byte *)&_floats._float3, sizeof(double));
- s.syncBytes((byte *)&_floats._float4, sizeof(double));
+ s.syncAsDouble(_floats._float1);
+ s.syncAsDouble(_floats._float2);
+ s.syncAsDouble(_floats._float3);
+ s.syncAsDouble(_floats._float4);
}
/*--------------------------------------------------------------------------*/
void Scene6100::ProbeMover::dispatch() {
- Scene6100 *scene = (Scene6100 *)_globals->_sceneManager._scene;
+ Scene6100 *scene = (Scene6100 *)g_globals->_sceneManager._scene;
if (!dontMove()) {
if (scene->_speed > 0) {
@@ -3148,10 +3168,10 @@ Scene6100::Scene6100(): Scene() {
_angle = 0;
_msgActive = false;
- _globals->_sceneHandler._delayTicks = 8;
+ g_globals->_sceneHandler->_delayTicks = 8;
- _globals->_player.disableControl();
- _globals->_events.setCursor(CURSOR_WALK);
+ g_globals->_player.disableControl();
+ g_globals->_events.setCursor(CURSOR_WALK);
}
void Scene6100::synchronize(Serializer &s) {
@@ -3220,10 +3240,10 @@ void Scene6100::postInit(SceneObjectList *OwnerList) {
int baseVal = 2000;
for (int idx = 0; idx < 3; ++idx) {
- _objList[idx]->_floats._float1 = _globals->_randomSource.getRandomNumber(999);
+ _objList[idx]->_floats._float1 = g_globals->_randomSource.getRandomNumber(999);
_objList[idx]->_floats._float2 = baseVal;
_objList[idx]->_floats._float3 = 0.0;
- baseVal += _globals->_randomSource.getRandomNumber(499);
+ baseVal += g_globals->_randomSource.getRandomNumber(499);
_objList[idx]->postInit();
_objList[idx]->setVisage(6100);
@@ -3231,23 +3251,23 @@ void Scene6100::postInit(SceneObjectList *OwnerList) {
_objList[idx]->_strip = 2;
_objList[idx]->setPosition(Common::Point(
- _globals->_randomSource.getRandomNumber(319), 60));
+ g_globals->_randomSource.getRandomNumber(319), 60));
_objList[idx]->fixPriority(1);
_objList[idx]->changeZoom(-1);
}
setAction(&_action5);
- _globals->_scenePalette.addRotation(96, 143, -1);
+ g_globals->_scenePalette.addRotation(96, 143, -1);
- if (!_globals->getFlag(76))
+ if (!g_globals->getFlag(76))
_probe.setAction(&_action4);
- _globals->_soundHandler.play(231);
+ g_globals->_soundHandler.play(231);
}
void Scene6100::remove() {
- _globals->_player.disableControl();
- _globals->_scenePalette.clearListeners();
+ g_globals->_player.disableControl();
+ g_globals->_scenePalette.clearListeners();
Scene::remove();
}
@@ -3274,18 +3294,18 @@ void Scene6100::dispatch() {
_probe._action->dispatch();
// Handle mouse controlling the turning
- int changeAmount = (_globals->_events._mousePos.x - 160) / -20;
+ int changeAmount = (g_globals->_events._mousePos.x - 160) / -20;
_turnAmount += (changeAmount - _turnAmount) / 2;
if (_fadePercent < 100) {
_fadePercent += 10;
if (_fadePercent >= 100) {
- _globals->_scenePalette.addRotation(96, 143, -1);
+ g_globals->_scenePalette.addRotation(96, 143, -1);
_fadePercent = 100;
}
byte adjustData[] = {0xff, 0xff, 0xff, 0};
- _globals->_scenePalette.fade(adjustData, false, _fadePercent);
+ g_globals->_scenePalette.fade(adjustData, false, _fadePercent);
}
if (_action != &_action3) {
@@ -3324,4 +3344,6 @@ void Scene6100::showMessage(const Common::String &msg, int color, Action *action
}
}
-} // End of namespace tSage
+} // End of namespace Ringworld
+
+} // End of namespace TsAGE
diff --git a/engines/tsage/ringworld_scenes1.h b/engines/tsage/ringworld/ringworld_scenes1.h
index 283cf68e07..bb98c89a8c 100644
--- a/engines/tsage/ringworld_scenes1.h
+++ b/engines/tsage/ringworld/ringworld_scenes1.h
@@ -24,7 +24,8 @@
#define TSAGE_RINGWORLD_SCENES1_H
#include "common/scummsys.h"
-#include "tsage/ringworld_logic.h"
+#include "tsage/ringworld/ringworld_logic.h"
+#include "tsage/ringworld/ringworld_speakers.h"
#include "tsage/converse.h"
#include "tsage/events.h"
#include "tsage/core.h"
@@ -32,7 +33,11 @@
#include "tsage/globals.h"
#include "tsage/sound.h"
-namespace tSage {
+namespace TsAGE {
+
+namespace Ringworld {
+
+using namespace TsAGE;
class Scene10 : public Scene {
/* Actions */
@@ -201,6 +206,7 @@ class Scene40 : public Scene {
class Action8 : public Action {
public:
virtual void signal();
+ virtual void dispatch();
};
/* Objects */
@@ -214,15 +220,15 @@ class Scene40 : public Scene {
};
/* Items */
- class Item2 : public SceneItem {
+ class Item2 : public SceneHotspot {
public:
virtual void doAction(int action);
};
- class Item6 : public SceneItem {
+ class Item6 : public SceneHotspot {
public:
virtual void doAction(int action);
};
- class Item8 : public SceneItem {
+ class Item8 : public SceneHotspot {
public:
virtual void doAction(int action);
};
@@ -532,6 +538,8 @@ public:
};
-} // End of namespace tSage
+} // End of namespace Ringworld
+
+} // End of namespace TsAGE
#endif
diff --git a/engines/tsage/ringworld_scenes10.cpp b/engines/tsage/ringworld/ringworld_scenes10.cpp
index ba4060548e..5aeb127915 100644
--- a/engines/tsage/ringworld_scenes10.cpp
+++ b/engines/tsage/ringworld/ringworld_scenes10.cpp
@@ -21,12 +21,14 @@
*/
#include "graphics/cursorman.h"
-#include "tsage/ringworld_scenes10.h"
+#include "tsage/ringworld/ringworld_scenes10.h"
#include "tsage/scenes.h"
#include "tsage/tsage.h"
#include "tsage/staticres.h"
-namespace tSage {
+namespace TsAGE {
+
+namespace Ringworld {
Scene2::Scene2() : Scene() {
_sceneState = 0;
@@ -35,55 +37,56 @@ Scene2::Scene2() : Scene() {
/*--------------------------------------------------------------------------*/
void Object9350::postInit(SceneObjectList *OwnerList) {
- //SceneObject::postInit(&_globals->_sceneManager._altSceneObjects);
+ //SceneObject::postInit(&g_globals->_sceneManager._bgSceneObjects);
SceneObject::postInit(OwnerList);
}
void Object9350::draw() {
reposition();
Rect destRect = _bounds;
- destRect.translate(-_globals->_sceneOffset.x, -_globals->_sceneOffset.y);
- Region *priorityRegion = _globals->_sceneManager._scene->_priorities.find(_globals->_sceneManager._scene->_stripManager._stripNum);
+ destRect.translate(-g_globals->_sceneOffset.x, -g_globals->_sceneOffset.y);
+ Region *priorityRegion = g_globals->_sceneManager._scene->_priorities.find(g_globals->_sceneManager._scene->_stripManager._stripNum);
GfxSurface frame = getFrame();
- _globals->gfxManager().copyFrom(frame, destRect, priorityRegion);
+ g_globals->gfxManager().copyFrom(frame, destRect, priorityRegion);
}
/*--------------------------------------------------------------------------
* Scene 9100 - Near beach: Slave washing clothes
*
*--------------------------------------------------------------------------*/
+// Slave hotspot
void Scene9100::SceneHotspot1::doAction(int action) {
- Scene9100 *scene = (Scene9100 *)_globals->_sceneManager._scene;
+ Scene9100 *scene = (Scene9100 *)g_globals->_sceneManager._scene;
if (action == CURSOR_TALK) {
- if (_globals->getFlag(23)) {
- _globals->_player.disableControl();
+ if (g_globals->getFlag(23)) {
+ g_globals->_player.disableControl();
scene->_sceneMode = 9104;
} else {
- _globals->setFlag(23);
- _globals->_player.disableControl();
+ g_globals->setFlag(23);
+ g_globals->_player.disableControl();
scene->_sceneMode = 9105;
}
- scene->setAction(&scene->_sequenceManager, scene, scene->_sceneMode, &_globals->_player, &scene->_object5, &scene->_object6, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, scene->_sceneMode, &g_globals->_player, &scene->_object5, &scene->_object6, NULL);
} else {
NamedHotspot::doAction(action);
}
}
void Scene9100::dispatch() {
- Scene9100 *scene = (Scene9100 *)_globals->_sceneManager._scene;
+ Scene9100 *scene = (Scene9100 *)g_globals->_sceneManager._scene;
if (!_action) {
- if (_globals->_player._position.x < 25) {
- _globals->_player.disableControl();
- if (!_globals->getFlag(23) || _globals->getFlag(11))
+ if (g_globals->_player._position.x < 25) {
+ g_globals->_player.disableControl();
+ if (!g_globals->getFlag(23) || g_globals->getFlag(11))
_sceneMode = 9106;
else {
_sceneMode = 9108;
- _globals->setFlag(11);
+ g_globals->setFlag(11);
}
- scene->setAction(&scene->_sequenceManager, scene, scene->_sceneMode, &_globals->_player, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, scene->_sceneMode, &g_globals->_player, NULL);
}
} else {
Scene::dispatch();
@@ -91,23 +94,23 @@ void Scene9100::dispatch() {
}
void Scene9100::signal() {
- Scene9100 *scene = (Scene9100 *)_globals->_sceneManager._scene;
+ Scene9100 *scene = (Scene9100 *)g_globals->_sceneManager._scene;
switch (scene->_sceneMode) {
case 9102:
case 9106:
case 9108:
- _globals->_sceneManager.changeScene(9150);
+ g_globals->_sceneManager.changeScene(9150);
break;
case 9105:
- _sceneHotspot3.remove();
+ _hotspotCleanedClothes.remove();
// No break on purpose
case 9103:
case 9104:
case 9107:
case 9109:
default:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
break;
}
}
@@ -123,7 +126,7 @@ void Scene9100::postInit(SceneObjectList *OwnerList) {
_object1.animate(ANIM_MODE_2, NULL);
_object1.fixPriority(10);
- _globals->_player.postInit();
+ g_globals->_player.postInit();
_object2.postInit();
_object2.hide();
@@ -137,39 +140,39 @@ void Scene9100::postInit(SceneObjectList *OwnerList) {
_object5.postInit();
_object5.hide();
- if (!_globals->getFlag(23)) {
+ if (!g_globals->getFlag(23)) {
_object6.postInit();
_object6.setVisage(9111);
_object6.setStrip(6);
_object6.setFrame(1);
_object6.setPosition(Common::Point(138, 166));
- _sceneHotspot3.setup(145, 125, 166, 156, 9100, 40, 43);
- }
- _sceneHotspot1.setup(140, 176, 185, 215, 9100, 36, 37);
- _sceneHotspot2.setup(161, 138, 182, 175, 9100, 38, 39);
- _sceneHotspot4.setup(37, 196, 47, 320, 9100, 44, -1);
- _sceneHotspot5.setup(69, 36, 121, 272, 9100, 45, 46);
- _sceneHotspot6.setup(127, 0, 200, 52, 9100, 47, 48);
-
- _globals->_soundHandler.play(251);
- if (_globals->_sceneManager._previousScene == 9150) {
- if (_globals->getFlag(20)) {
- _globals->_player.disableControl();
- if (_globals->getFlag(11))
+ _hotspotCleanedClothes.setDetails(145, 125, 166, 156, 9100, 40, 43);
+ }
+ _hotspotSlave.setDetails(140, 176, 185, 215, 9100, 36, 37);
+ _hotspotSoiledClothes.setDetails(161, 138, 182, 175, 9100, 38, 39);
+ _hotspotIsland.setDetails(37, 196, 47, 320, 9100, 44, -1);
+ _hotspotBoulders.setDetails(69, 36, 121, 272, 9100, 45, 46);
+ _hotspotTrees.setDetails(127, 0, 200, 52, 9100, 47, 48);
+
+ g_globals->_soundHandler.play(251);
+ if (g_globals->_sceneManager._previousScene == 9150) {
+ if (g_globals->getFlag(20)) {
+ g_globals->_player.disableControl();
+ if (g_globals->getFlag(11))
_sceneMode = 9107;
else
_sceneMode = 9109;
- setAction(&_sequenceManager, this, _sceneMode, &_globals->_player, &_object5, NULL);
+ setAction(&_sequenceManager, this, _sceneMode, &g_globals->_player, &_object5, NULL);
} else {
_sceneMode = 9103;
- _globals->_player.disableControl();
- setAction(&_sequenceManager, this, _sceneMode, &_globals->_player, &_object2, &_object3, &_object4, &_object5, NULL);
- _globals->setFlag(20);
+ g_globals->_player.disableControl();
+ setAction(&_sequenceManager, this, _sceneMode, &g_globals->_player, &_object2, &_object3, &_object4, &_object5, NULL);
+ g_globals->setFlag(20);
}
} else {
_sceneMode = 9102;
- _globals->_player.disableControl();
- setAction(&_sequenceManager, this, _sceneMode, &_globals->_player, &_object2, &_object3, &_object4, &_object5, NULL);
+ g_globals->_player.disableControl();
+ setAction(&_sequenceManager, this, _sceneMode, &g_globals->_player, &_object2, &_object3, &_object4, &_object5, NULL);
}
}
@@ -180,7 +183,7 @@ void Scene9100::postInit(SceneObjectList *OwnerList) {
void Scene9150::Object3::signal() {
switch (_signalFlag++) {
case 0:
- _timer = 10 + _globals->_randomSource.getRandomNumber(90);
+ _timer = 10 + g_globals->_randomSource.getRandomNumber(90);
break;
default:
animate(ANIM_MODE_5, this);
@@ -199,15 +202,15 @@ void Scene9150::signal() {
switch (_sceneMode) {
case 9151:
case 9157:
- _globals->_sceneManager.changeScene(9100);
+ g_globals->_sceneManager.changeScene(9100);
break;
case 9153:
- _globals->_sceneManager.changeScene(9300);
+ g_globals->_sceneManager.changeScene(9300);
break;
case 9152:
case 9155:
case 9156:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
break;
case 9154:
default:
@@ -227,21 +230,21 @@ void Scene9150::dispatch() {
if (_action) {
_action->dispatch();
} else {
- if (_globals->_player._position.x >= 160) {
- if (_globals->_player._position.x > 630) {
- _globals->_player.disableControl();
+ if (g_globals->_player._position.x >= 160) {
+ if (g_globals->_player._position.x > 630) {
+ g_globals->_player.disableControl();
_sceneMode = 9157;
- setAction(&_sequenceManager1, this, _sceneMode, &_globals->_player, NULL);
+ setAction(&_sequenceManager1, this, _sceneMode, &g_globals->_player, NULL);
}
} else {
- _globals->_player.disableControl();
- if (_globals->getFlag(11)) {
- _globals->_soundHandler.play(286);
+ g_globals->_player.disableControl();
+ if (g_globals->getFlag(11)) {
+ g_globals->_soundHandler.play(286);
_sceneMode = 9153;
} else {
_sceneMode = 9156;
}
- setAction(&_sequenceManager1, this, _sceneMode, &_globals->_player, NULL);
+ setAction(&_sequenceManager1, this, _sceneMode, &g_globals->_player, NULL);
}
}
}
@@ -249,7 +252,7 @@ void Scene9150::dispatch() {
void Scene9150::postInit(SceneObjectList *OwnerList) {
Scene::postInit();
setZoomPercents(0, 100, 200, 100);
- _globals->_player.postInit();
+ g_globals->_player.postInit();
_object3.postInit();
_sceneState = 1;
@@ -259,37 +262,37 @@ void Scene9150::postInit(SceneObjectList *OwnerList) {
_object3.setPosition(Common::Point(312, 95));
_object3.signal();
- _sceneHotspot1.setup(0, 0, 200, 94, 9150, 46, -1);
- _sceneHotspot2.setup(51, 90, 118, 230, 9150, 47, -1);
- _sceneHotspot3.setup(182, 104, 200, 320, 9150, 48, 49);
- _sceneHotspot4.setup(103, 292, 152, 314, 9150, 50, 51);
- _sceneHotspot5.setup(115, 350, 160, 374, 9150, 52, 53);
- _sceneHotspot6.setup(0, 471, 200, 531, 9150, 54, 55);
- _sceneHotspot7.setup(170, 320, 185, 640, 9150, 56, -1);
- _sceneHotspot9.setup(157, 107, 186, 320, 9150, 56, -1);
- _sceneHotspot8.setup(133, 584, 142, 640, 9150, 57, -1);
- _sceneHotspot10.setup(83, 304, 103, 323, 9150, 58, 59);
-
- _globals->_soundHandler.play(285);
- _globals->_player.disableControl();
-
- if (_globals->getFlag(20)) {
+ _sceneHotspot1.setDetails(0, 0, 200, 94, 9150, 46, -1);
+ _sceneHotspot2.setDetails(51, 90, 118, 230, 9150, 47, -1);
+ _sceneHotspot3.setDetails(182, 104, 200, 320, 9150, 48, 49);
+ _sceneHotspot4.setDetails(103, 292, 152, 314, 9150, 50, 51);
+ _sceneHotspot5.setDetails(115, 350, 160, 374, 9150, 52, 53);
+ _sceneHotspot6.setDetails(0, 471, 200, 531, 9150, 54, 55);
+ _sceneHotspot7.setDetails(170, 320, 185, 640, 9150, 56, -1);
+ _sceneHotspot9.setDetails(157, 107, 186, 320, 9150, 56, -1);
+ _sceneHotspot8.setDetails(133, 584, 142, 640, 9150, 57, -1);
+ _sceneHotspot10.setDetails(83, 304, 103, 323, 9150, 58, 59);
+
+ g_globals->_soundHandler.play(285);
+ g_globals->_player.disableControl();
+
+ if (g_globals->getFlag(20)) {
// Walking alone
- _globals->_scrollFollower = &_globals->_player;
- if (_globals->getFlag(11))
+ g_globals->_scrollFollower = &g_globals->_player;
+ if (g_globals->getFlag(11))
// Hero wearing peasan suit
_sceneMode = 9155;
else
// Hero wearing Purple suit
_sceneMode = 9152;
- setAction(&_sequenceManager1, this, _sceneMode, &_globals->_player, NULL);
+ setAction(&_sequenceManager1, this, _sceneMode, &g_globals->_player, NULL);
} else {
// Walking with the tiger
_sceneMode = 9151;
_object2.postInit();
_object2.hide();
_object1.postInit();
- setAction(&_sequenceManager1, this, _sceneMode, &_globals->_player, &_object1, &_object2, NULL);
+ setAction(&_sequenceManager1, this, _sceneMode, &g_globals->_player, &_object1, &_object2, NULL);
}
}
@@ -298,22 +301,22 @@ void Scene9150::postInit(SceneObjectList *OwnerList) {
*
*--------------------------------------------------------------------------*/
void Scene9200::SceneHotspot1::doAction(int action) {
- Scene9200 *scene = (Scene9200 *)_globals->_sceneManager._scene;
+ Scene9200 *scene = (Scene9200 *)g_globals->_sceneManager._scene;
if (action == OBJECT_TUNIC) {
- _globals->_player.disableControl();
- if (_globals->getFlag(93)) {
+ g_globals->_player.disableControl();
+ if (g_globals->getFlag(93)) {
scene->_sceneState = 9214;
- scene->setAction(&scene->_sequenceManager, scene, 9214, &_globals->_player, &scene->_object2, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 9214, &g_globals->_player, &scene->_object2, NULL);
} else {
- _globals->setFlag(93);
+ g_globals->setFlag(93);
scene->_sceneState = 9213;
- scene->setAction(&scene->_sequenceManager, scene, 9213, &_globals->_player, &scene->_object2, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 9213, &g_globals->_player, &scene->_object2, NULL);
}
} else if (action <= 100) {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_sceneState = 9214;
- scene->setAction(&scene->_sequenceManager, scene, 9214, &_globals->_player, &scene->_object2, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 9214, &g_globals->_player, &scene->_object2, NULL);
} else {
NamedHotspot::doAction(action);
}
@@ -322,15 +325,15 @@ void Scene9200::SceneHotspot1::doAction(int action) {
void Scene9200::signal() {
switch (_sceneState++) {
case 9207:
- _globals->_sceneManager.changeScene(9700);
+ g_globals->_sceneManager.changeScene(9700);
break;
case 9208:
case 9211:
case 9212:
- _globals->_sceneManager.changeScene(9500);
+ g_globals->_sceneManager.changeScene(9500);
break;
case 9209:
- _globals->_sceneManager.changeScene(9360);
+ g_globals->_sceneManager.changeScene(9360);
break;
case 9210:
_hotspot1.remove();
@@ -342,7 +345,7 @@ void Scene9200::signal() {
case 9205:
case 9206:
default:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
break;
}
}
@@ -358,30 +361,30 @@ void Scene9200::dispatch() {
if (_action) {
_action->dispatch();
} else {
- if ( (_globals->_player._position.x <= 0) || ((_globals->_player._position.x < 100) && (_globals->_player._position.y > 199))) {
- _globals->_player.disableControl();
+ if ( (g_globals->_player._position.x <= 0) || ((g_globals->_player._position.x < 100) && (g_globals->_player._position.y > 199))) {
+ g_globals->_player.disableControl();
_sceneState = 9209;
- setAction(&_sequenceManager, this, 9209, &_globals->_player, &_object2, &_object3, NULL);
+ setAction(&_sequenceManager, this, 9209, &g_globals->_player, &_object2, &_object3, NULL);
} else {
- if (rect9200.contains(_globals->_player._position)) {
- if (_globals->getFlag(93)) {
- if (_globals->getFlag(86)) {
+ if (rect9200.contains(g_globals->_player._position)) {
+ if (g_globals->getFlag(93)) {
+ if (g_globals->getFlag(86)) {
_sceneState = 9215;
- setAction(&_sequenceManager, this, 9215, &_globals->_player, &_object2, &_object3, NULL);
+ setAction(&_sequenceManager, this, 9215, &g_globals->_player, &_object2, &_object3, NULL);
} else {
_sceneState = 9208;
- setAction(&_sequenceManager, this, 9208, &_globals->_player, &_object2, &_object3, NULL);
+ setAction(&_sequenceManager, this, 9208, &g_globals->_player, &_object2, &_object3, NULL);
}
} else {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
_sceneState = 9204;
- setAction(&_sequenceManager, this, 9204, &_globals->_player, &_object2, &_object3, NULL);
+ setAction(&_sequenceManager, this, 9204, &g_globals->_player, &_object2, &_object3, NULL);
}
} else {
- if (_globals->_player._position.y < 140) {
- _globals->_player.disableControl();
+ if (g_globals->_player._position.y < 140) {
+ g_globals->_player.disableControl();
_sceneState = 9207;
- setAction(&_sequenceManager, this, 9207, &_globals->_player, &_object2, &_object3, NULL);
+ setAction(&_sequenceManager, this, 9207, &g_globals->_player, &_object2, &_object3, NULL);
}
}
}
@@ -392,7 +395,7 @@ void Scene9200::postInit(SceneObjectList *OwnerList) {
Scene::postInit();
setZoomPercents(130, 50, 200, 150);
- _globals->_player.postInit();
+ g_globals->_player.postInit();
_object3.postInit();
_object3.hide();
_object1.postInit();
@@ -408,63 +411,63 @@ void Scene9200::postInit(SceneObjectList *OwnerList) {
_stripManager.addSpeaker(&_speakerGR);
_stripManager.addSpeaker(&_speakerGText);
- if (!_globals->getFlag(86)) {
+ if (!g_globals->getFlag(86)) {
_object2.postInit();
- _hotspot1.setup(96, 194, 160, 234, 9200, 29, 31);
+ _hotspot1.setDetails(96, 194, 160, 234, 9200, 29, 31);
}
- _hotspot2.setup(164, 0, 200, 282, 9200, 0, 1);
- _hotspot3.setup(140, 39, 165, 153, 9200, 2, 3);
- _hotspot4.setup(92, 122, 139, 152, 9200, 4, 5);
- _hotspot5.setup(33, 20, 142, 115, 9200, 6, 7);
- _hotspot6.setup(104, 235, 153, 265, 9200, 8, 9);
- _hotspot7.setup(107, 262, 153, 286, 9200, 10, 11);
- _hotspot8.setup(69, 276, 164, 320, 9200, 12, 13);
+ _hotspot2.setDetails(164, 0, 200, 282, 9200, 0, 1);
+ _hotspot3.setDetails(140, 39, 165, 153, 9200, 2, 3);
+ _hotspot4.setDetails(92, 122, 139, 152, 9200, 4, 5);
+ _hotspot5.setDetails(33, 20, 142, 115, 9200, 6, 7);
+ _hotspot6.setDetails(104, 235, 153, 265, 9200, 8, 9);
+ _hotspot7.setDetails(107, 262, 153, 286, 9200, 10, 11);
+ _hotspot8.setDetails(69, 276, 164, 320, 9200, 12, 13);
- _globals->_events.setCursor(CURSOR_WALK);
- _globals->_player.disableControl();
+ g_globals->_events.setCursor(CURSOR_WALK);
+ g_globals->_player.disableControl();
- switch (_globals->_sceneManager._previousScene) {
+ switch (g_globals->_sceneManager._previousScene) {
case 9500:
- if (_globals->getFlag(85)) {
+ if (g_globals->getFlag(85)) {
if (RING_INVENTORY._helmet._sceneNumber == 1) {
- _globals->setFlag(86);
- _globals->_player.disableControl();
+ g_globals->setFlag(86);
+ g_globals->_player.disableControl();
_sceneState = 9210;
- setAction(&_sequenceManager, this, 9210, &_globals->_player, &_object2, &_object3, NULL);
+ setAction(&_sequenceManager, this, 9210, &g_globals->_player, &_object2, &_object3, NULL);
} else {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
_sceneState = 9212;
- setAction(&_sequenceManager, this, 9212, &_globals->_player, &_object2, &_object3, NULL);
+ setAction(&_sequenceManager, this, 9212, &g_globals->_player, &_object2, &_object3, NULL);
}
} else {
if (RING_INVENTORY._helmet._sceneNumber == 1) {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
_sceneState = 9211;
- setAction(&_sequenceManager, this, 9211, &_globals->_player, &_object2, &_object3, NULL);
+ setAction(&_sequenceManager, this, 9211, &g_globals->_player, &_object2, &_object3, NULL);
} else {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
_sceneState = 9202;
- setAction(&_sequenceManager, this, 9202, &_globals->_player, &_object2, &_object3, NULL);
+ setAction(&_sequenceManager, this, 9202, &g_globals->_player, &_object2, &_object3, NULL);
}
}
break;
case 9700:
- if (_globals->getFlag(86)) {
+ if (g_globals->getFlag(86)) {
_sceneState = 9206;
- setAction(&_sequenceManager, this, 9206, &_globals->_player, &_object2, &_object3, NULL);
+ setAction(&_sequenceManager, this, 9206, &g_globals->_player, &_object2, &_object3, NULL);
} else {
_sceneState = 9203;
- setAction(&_sequenceManager, this, 9203, &_globals->_player, &_object2, &_object3, NULL);
+ setAction(&_sequenceManager, this, 9203, &g_globals->_player, &_object2, &_object3, NULL);
}
break;
case 9360:
default:
- if (_globals->getFlag(86)) {
+ if (g_globals->getFlag(86)) {
_sceneState = 9205;
- setAction(&_sequenceManager, this, 9205, &_globals->_player, &_object2, &_object3, NULL);
+ setAction(&_sequenceManager, this, 9205, &g_globals->_player, &_object2, &_object3, NULL);
} else {
_sceneState = 9201;
- setAction(&_sequenceManager, this, 9201, &_globals->_player, &_object2, &_object3, NULL);
+ setAction(&_sequenceManager, this, 9201, &g_globals->_player, &_object2, &_object3, NULL);
}
break;
}
@@ -477,14 +480,14 @@ void Scene9200::postInit(SceneObjectList *OwnerList) {
void Scene9300::signal() {
switch (_sceneMode++) {
case 9301:
- _globals->setFlag(84);
+ g_globals->setFlag(84);
// No break on purpose
case 9303:
- _globals->_soundHandler.play(295);
- _globals->_sceneManager.changeScene(9350);
+ g_globals->_soundHandler.play(295);
+ g_globals->_sceneManager.changeScene(9350);
break;
case 9302:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
break;
default:
break;
@@ -494,10 +497,10 @@ void Scene9300::signal() {
void Scene9300::dispatch() {
if (_action) {
_action->dispatch();
- } else if (_globals->_player._position.y < 145) {
- _globals->_player.disableControl();
+ } else if (g_globals->_player._position.y < 145) {
+ g_globals->_player.disableControl();
_sceneMode = 9303;
- setAction(&_sequenceManager, this, 9303, &_globals->_player, &_object1, &_object2, NULL);
+ setAction(&_sequenceManager, this, 9303, &g_globals->_player, &_object1, &_object2, NULL);
}
}
@@ -506,34 +509,34 @@ void Scene9300::postInit(SceneObjectList *OwnerList) {
setZoomPercents(130, 75, 230, 150);
_sceneMode = 0;
- _globals->_player.postInit();
- _globals->_player.changeZoom(-1);
+ g_globals->_player.postInit();
+ g_globals->_player.changeZoom(-1);
_object1.postInit();
_object2.postInit();
- _globals->_soundHandler.play(289);
-
- _hotspot1.setup(35, 142, 76, 212, 9300, 0, 1);
- _hotspot2.setup(28, 90, 81, 143, 9300, 2, 3);
- _hotspot3.setup(78, 142, 146, 216, 9300, 4, 5);
- _hotspot4.setup(3, 43, 91, 74, 9300, 6, 7);
- _hotspot5.setup(82, 19, 157, 65, 9300, 8, 9);
- _hotspot6.setup(5, 218, 84, 274, 9300, 10, 11);
- _hotspot7.setup(86, 233, 168, 293, 9300, 12, 13);
- _hotspot8.setup(157, 0, 200, 230, 9300, 14, 15);
- _hotspot9.setup(169, 227, 200, 320, 9300, 16, 17);
- _hotspot10.setup(145, 97, 166, 225, 9300, 18, 19);
- _hotspot11.setup(81, 75, 145, 145, 9300, 20, 21);
- _hotspot12.setup(0, 0, 94, 35, 9300, 22, 23);
- _hotspot13.setup(12, 268, 149, 320, 9300, 24, 25);
-
- if (_globals->_sceneManager._previousScene == 9350) {
- _globals->_player.disableControl();
+ g_globals->_soundHandler.play(289);
+
+ _hotspot1.setDetails(35, 142, 76, 212, 9300, 0, 1);
+ _hotspot2.setDetails(28, 90, 81, 143, 9300, 2, 3);
+ _hotspot3.setDetails(78, 142, 146, 216, 9300, 4, 5);
+ _hotspot4.setDetails(3, 43, 91, 74, 9300, 6, 7);
+ _hotspot5.setDetails(82, 19, 157, 65, 9300, 8, 9);
+ _hotspot6.setDetails(5, 218, 84, 274, 9300, 10, 11);
+ _hotspot7.setDetails(86, 233, 168, 293, 9300, 12, 13);
+ _hotspot8.setDetails(157, 0, 200, 230, 9300, 14, 15);
+ _hotspot9.setDetails(169, 227, 200, 320, 9300, 16, 17);
+ _hotspot10.setDetails(145, 97, 166, 225, 9300, 18, 19);
+ _hotspot11.setDetails(81, 75, 145, 145, 9300, 20, 21);
+ _hotspot12.setDetails(0, 0, 94, 35, 9300, 22, 23);
+ _hotspot13.setDetails(12, 268, 149, 320, 9300, 24, 25);
+
+ if (g_globals->_sceneManager._previousScene == 9350) {
+ g_globals->_player.disableControl();
_sceneMode = 9302;
- setAction(&_sequenceManager, this, 9302, &_globals->_player, &_object1, &_object2, NULL);
+ setAction(&_sequenceManager, this, 9302, &g_globals->_player, &_object1, &_object2, NULL);
} else {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
_sceneMode = 9301;
- setAction(&_sequenceManager, this, 9301, &_globals->_player, &_object1, &_object2, NULL);
+ setAction(&_sequenceManager, this, 9301, &g_globals->_player, &_object1, &_object2, NULL);
}
}
@@ -548,17 +551,17 @@ void Scene9350::signal() {
case 9352:
case 9353:
case 9354:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
break;
case 9355:
- _globals->_sceneManager.changeScene(9300);
+ g_globals->_sceneManager.changeScene(9300);
break;
case 9356:
- _globals->_sceneManager.changeScene(9360);
+ g_globals->_sceneManager.changeScene(9360);
break;
case 9357:
case 9359:
- _globals->_sceneManager.changeScene(9400);
+ g_globals->_sceneManager.changeScene(9400);
break;
default:
break;
@@ -567,18 +570,18 @@ void Scene9350::signal() {
void Scene9350::dispatch() {
if (_action == 0) {
- if ((_globals->_player._position.x > 300) && (_globals->_player._position.y < 160)) {
- _globals->_player.disableControl();
+ if ((g_globals->_player._position.x > 300) && (g_globals->_player._position.y < 160)) {
+ g_globals->_player.disableControl();
_sceneState = 9356;
- setAction(&_sequenceManager, this, 9356, &_globals->_player, &_object2, NULL);
- } else if ((_globals->_player._position.x > 110) && (_globals->_player._position.y >= 195)) {
- _globals->_player.disableControl();
+ setAction(&_sequenceManager, this, 9356, &g_globals->_player, &_object2, NULL);
+ } else if ((g_globals->_player._position.x > 110) && (g_globals->_player._position.y >= 195)) {
+ g_globals->_player.disableControl();
_sceneState = 9357;
- setAction(&_sequenceManager, this, 9357, &_globals->_player, &_object2, NULL);
- } else if ((_globals->_player._position.x < 10) || ((_globals->_player._position.x <= 110) && (_globals->_player._position.y >= 195))) {
- _globals->_player.disableControl();
+ setAction(&_sequenceManager, this, 9357, &g_globals->_player, &_object2, NULL);
+ } else if ((g_globals->_player._position.x < 10) || ((g_globals->_player._position.x <= 110) && (g_globals->_player._position.y >= 195))) {
+ g_globals->_player.disableControl();
_sceneState = 9355;
- setAction(&_sequenceManager, this, 9355, &_globals->_player, &_object2, NULL);
+ setAction(&_sequenceManager, this, 9355, &g_globals->_player, &_object2, NULL);
}
} else {
Scene::dispatch();
@@ -588,37 +591,37 @@ void Scene9350::dispatch() {
void Scene9350::postInit(SceneObjectList *OwnerList) {
Scene::postInit();
setZoomPercents(95, 80, 200, 100);
- _globals->_player.postInit();
+ g_globals->_player.postInit();
_object1.setup(9351, 1, 3, 139, 97, 0);
- _sceneHotspot1.setup(42, 0, 97, 60, 9350, 0, -1);
- _sceneHotspot2.setup(37, 205, 82, 256, 9350, 0, -1);
- _sceneHotspot3.setup(29, 93, 92, 174, 9350, 1, -1);
- _sceneHotspot4.setup(0, 308, 109, 320, 9350, 2, -1);
- _sceneHotspot5.setup(0, 0, 200, 320, 9350, 3, -1);
+ _sceneHotspot1.setDetails(42, 0, 97, 60, 9350, 0, -1);
+ _sceneHotspot2.setDetails(37, 205, 82, 256, 9350, 0, -1);
+ _sceneHotspot3.setDetails(29, 93, 92, 174, 9350, 1, -1);
+ _sceneHotspot4.setDetails(0, 308, 109, 320, 9350, 2, -1);
+ _sceneHotspot5.setDetails(0, 0, 200, 320, 9350, 3, -1);
- _globals->_events.setCursor(CURSOR_WALK);
- _globals->_player.disableControl();
+ g_globals->_events.setCursor(CURSOR_WALK);
+ g_globals->_player.disableControl();
- if (_globals->_sceneManager._previousScene == 9360) {
- _globals->_player.disableControl();
+ if (g_globals->_sceneManager._previousScene == 9360) {
+ g_globals->_player.disableControl();
_sceneState = 9352;
- setAction(&_sequenceManager, this, 9352, &_globals->_player, &_object2, NULL);
- } else if (_globals->_sceneManager._previousScene == 9400) {
- _globals->_player.disableControl();
+ setAction(&_sequenceManager, this, 9352, &g_globals->_player, &_object2, NULL);
+ } else if (g_globals->_sceneManager._previousScene == 9400) {
+ g_globals->_player.disableControl();
_sceneState = 9353;
- setAction(&_sequenceManager, this, 9353, &_globals->_player, &_object2, NULL);
+ setAction(&_sequenceManager, this, 9353, &g_globals->_player, &_object2, NULL);
} else {
- if (_globals->getFlag(84)) {
- _globals->clearFlag(84);
+ if (g_globals->getFlag(84)) {
+ g_globals->clearFlag(84);
_object2.postInit();
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
_sceneState = 9359;
- setAction(&_sequenceManager, this, 9359, &_globals->_player, &_object2, NULL);
+ setAction(&_sequenceManager, this, 9359, &g_globals->_player, &_object2, NULL);
} else {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
_sceneState = 9354;
- setAction(&_sequenceManager, this, 9354, &_globals->_player, &_object2, NULL);
+ setAction(&_sequenceManager, this, 9354, &g_globals->_player, &_object2, NULL);
}
}
}
@@ -634,16 +637,16 @@ void Scene9360::signal() {
case 9362:
case 9363:
case 9364:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
break;
case 9365:
- _globals->_sceneManager.changeScene(9350);
+ g_globals->_sceneManager.changeScene(9350);
break;
case 9366:
- _globals->_sceneManager.changeScene(9200);
+ g_globals->_sceneManager.changeScene(9200);
break;
case 9367:
- _globals->_sceneManager.changeScene(9450);
+ g_globals->_sceneManager.changeScene(9450);
break;
default:
break;
@@ -652,18 +655,18 @@ void Scene9360::signal() {
void Scene9360::dispatch() {
if (_action == 0) {
- if ((_globals->_player._position.x > 300) && (_globals->_player._position.y < 160)) {
- _globals->_player.disableControl();
+ if ((g_globals->_player._position.x > 300) && (g_globals->_player._position.y < 160)) {
+ g_globals->_player.disableControl();
_sceneState = 9366;
- setAction(&_sequenceManager, this, 9366, &_globals->_player, NULL);
- } else if ((_globals->_player._position.x > 110) && (_globals->_player._position.y >= 195)) {
- _globals->_player.disableControl();
+ setAction(&_sequenceManager, this, 9366, &g_globals->_player, NULL);
+ } else if ((g_globals->_player._position.x > 110) && (g_globals->_player._position.y >= 195)) {
+ g_globals->_player.disableControl();
_sceneState = 9367;
- setAction(&_sequenceManager, this, 9367, &_globals->_player, NULL);
- } else if ((_globals->_player._position.x < 10) || ((_globals->_player._position.x <= 110) && (_globals->_player._position.y >= 195))) {
- _globals->_player.disableControl();
+ setAction(&_sequenceManager, this, 9367, &g_globals->_player, NULL);
+ } else if ((g_globals->_player._position.x < 10) || ((g_globals->_player._position.x <= 110) && (g_globals->_player._position.y >= 195))) {
+ g_globals->_player.disableControl();
_sceneState = 9365;
- setAction(&_sequenceManager, this, 9365, &_globals->_player, NULL);
+ setAction(&_sequenceManager, this, 9365, &g_globals->_player, NULL);
}
} else {
Scene::dispatch();
@@ -673,30 +676,30 @@ void Scene9360::dispatch() {
void Scene9360::postInit(SceneObjectList *OwnerList) {
Scene::postInit();
setZoomPercents(95, 80, 200, 100);
- _globals->_player.postInit();
-
- _hotspot1.setup(37, 92, 93, 173, 9360, 0, 1);
- _hotspot2.setup(42, 0, 100, 63, 9360, 2, -1);
- _hotspot3.setup(36, 205, 82, 260, 9360, 3, -1);
- _hotspot4.setup(103, 2, 200, 320, 9360, 4, -1);
- _hotspot5.setup(0, 0, 37, 320, 9360, 4, -1);
- _hotspot6.setup(35, 61, 103, 92, 9360, 4, -1);
- _hotspot7.setup(33, 174, 93, 207, 9360, 4, -1);
- _hotspot8.setup(28, 257, 149, 320, 9360, 4, -1);
- _globals->_events.setCursor(CURSOR_WALK);
- _globals->_player.disableControl();
- if (_globals->_sceneManager._previousScene == 9350) {
- _globals->_player.disableControl();
+ g_globals->_player.postInit();
+
+ _hotspot1.setDetails(37, 92, 93, 173, 9360, 0, 1);
+ _hotspot2.setDetails(42, 0, 100, 63, 9360, 2, -1);
+ _hotspot3.setDetails(36, 205, 82, 260, 9360, 3, -1);
+ _hotspot4.setDetails(103, 2, 200, 320, 9360, 4, -1);
+ _hotspot5.setDetails(0, 0, 37, 320, 9360, 4, -1);
+ _hotspot6.setDetails(35, 61, 103, 92, 9360, 4, -1);
+ _hotspot7.setDetails(33, 174, 93, 207, 9360, 4, -1);
+ _hotspot8.setDetails(28, 257, 149, 320, 9360, 4, -1);
+ g_globals->_events.setCursor(CURSOR_WALK);
+ g_globals->_player.disableControl();
+ if (g_globals->_sceneManager._previousScene == 9350) {
+ g_globals->_player.disableControl();
_sceneState = 9364;
- setAction(&_sequenceManager, this, 9364, &_globals->_player, NULL);
- } else if (_globals->_sceneManager._previousScene == 9450) {
- _globals->_player.disableControl();
+ setAction(&_sequenceManager, this, 9364, &g_globals->_player, NULL);
+ } else if (g_globals->_sceneManager._previousScene == 9450) {
+ g_globals->_player.disableControl();
_sceneState = 9363;
- setAction(&_sequenceManager, this, 9363, &_globals->_player, NULL);
+ setAction(&_sequenceManager, this, 9363, &g_globals->_player, NULL);
} else {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
_sceneState = 9362;
- setAction(&_sequenceManager, this, 9362, &_globals->_player, NULL);
+ setAction(&_sequenceManager, this, 9362, &g_globals->_player, NULL);
}
_object1.setup(9351, 1, 1, 131, 90, 0);
}
@@ -710,22 +713,22 @@ Scene9400::Scene9400() {
}
void Scene9400::SceneHotspot7::doAction(int action) {
- Scene9400 *scene = (Scene9400 *)_globals->_sceneManager._scene;
+ Scene9400 *scene = (Scene9400 *)g_globals->_sceneManager._scene;
if ((action == CURSOR_USE) && (RING_INVENTORY._straw._sceneNumber != 1)) {
scene->_sceneState = 1;
RING_INVENTORY._straw._sceneNumber = 1;
- scene->setAction(&scene->_sequenceManager, scene, 9408, &_globals->_player, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 9408, &g_globals->_player, NULL);
} else {
NamedHotspot::doAction(action);
}
}
void Scene9400::SceneHotspot8::doAction(int action) {
- Scene9400 *scene = (Scene9400 *)_globals->_sceneManager._scene;
+ Scene9400 *scene = (Scene9400 *)g_globals->_sceneManager._scene;
if (action == CURSOR_TALK) {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_sceneState = 2;
scene->signal();
} else {
@@ -742,7 +745,7 @@ void Scene9400::signal() {
case 1:
_object1._numFrames = 6;
_object1.animate(ANIM_MODE_2, NULL);
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
break;
case 2:
_object1.animate(ANIM_MODE_5, this);
@@ -752,10 +755,10 @@ void Scene9400::signal() {
break;
case 4:
_object1.animate(ANIM_MODE_2, this);
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
break;
case 9350:
- _globals->_sceneManager.changeScene(9350);
+ g_globals->_sceneManager.changeScene(9350);
break;
default:
break;
@@ -772,13 +775,13 @@ void Scene9400::dispatch() {
_field1032 = 0;
}
if (_action == 0) {
- if (_globals->_player._position.y < 120) {
+ if (g_globals->_player._position.y < 120) {
_sceneState = 9350;
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
setAction(&_action1);
Common::Point pt(-45, 88);
NpcMover *mover = new NpcMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
}
} else {
Scene::dispatch();
@@ -789,35 +792,35 @@ void Scene9400::postInit(SceneObjectList *OwnerList) {
Scene::postInit();
_screenNumber = 9400;
setZoomPercents(0, 100, 200, 100);
- _globals->_player.postInit();
+ g_globals->_player.postInit();
_object1.postInit();
_object3.postInit();
_speakerQText._textPos.x = 20;
- _hotspot7.setup(157, 66, 180, 110, 9400, 21, 23);
- _hotspot5.setup(130, 133, 152, 198, 9400, 22, -1);
- _hotspot1.setup(33, 280, 69, 297, 9400, 1, 2);
- _hotspot2.setup(73, 96, 87, 159, 9400, 3, 4);
- _hotspot3.setup(89, 253, 111, 305, 9400, 5, 6);
- _hotspot4.setup(46, 0, 116, 35, 9400, 7, 8);
- _hotspot8.setup(58, 169, 122, 200, 9400, 9, 10);
- _hotspot6.setup(0, 0, 199, 319, 9400, 16, 0);
+ _hotspot7.setDetails(157, 66, 180, 110, 9400, 21, 23);
+ _hotspot5.setDetails(130, 133, 152, 198, 9400, 22, -1);
+ _hotspot1.setDetails(33, 280, 69, 297, 9400, 1, 2);
+ _hotspot2.setDetails(73, 96, 87, 159, 9400, 3, 4);
+ _hotspot3.setDetails(89, 253, 111, 305, 9400, 5, 6);
+ _hotspot4.setDetails(46, 0, 116, 35, 9400, 7, 8);
+ _hotspot8.setDetails(58, 169, 122, 200, 9400, 9, 10);
+ _hotspot6.setDetails(0, 0, 199, 319, 9400, 16, 0);
_stripManager.addSpeaker(&_speakerQText);
_stripManager.addSpeaker(&_speakerOR);
_stripManager.addSpeaker(&_speakerOText);
- _globals->_events.setCursor(CURSOR_WALK);
- _globals->_player.disableControl();
+ g_globals->_events.setCursor(CURSOR_WALK);
+ g_globals->_player.disableControl();
- // Useless check (skipped) : if (_globals->_sceneManager._previousScene == 9350)
+ // Useless check (skipped) : if (g_globals->_sceneManager._previousScene == 9350)
_sceneState = 2;
- if (!_globals->getFlag(89)) {
- _globals->setFlag(89);
+ if (!g_globals->getFlag(89)) {
+ g_globals->setFlag(89);
_sceneState = 0;
}
- setAction(&_sequenceManager, this, 9400, &_globals->_player, &_object1, &_object3, NULL);
+ setAction(&_sequenceManager, this, 9400, &g_globals->_player, &_object1, &_object3, NULL);
}
void Scene9400::synchronize(Serializer &s) {
@@ -831,7 +834,7 @@ void Scene9400::synchronize(Serializer &s) {
*
*--------------------------------------------------------------------------*/
void Scene9450::Object2::signal() {
- Scene9450 *scene = (Scene9450 *)_globals->_sceneManager._scene;
+ Scene9450 *scene = (Scene9450 *)g_globals->_sceneManager._scene;
this->setAction(&scene->_sequenceManager3, this, 9458, this, &scene->_object1, NULL);
}
@@ -842,29 +845,29 @@ void Scene9450::Object3::dispatch() {
}
void Scene9450::Hotspot1::doAction(int action) {
- Scene9450 *scene = (Scene9450 *)_globals->_sceneManager._scene;
+ Scene9450 *scene = (Scene9450 *)g_globals->_sceneManager._scene;
if (action == CURSOR_USE) {
if (scene->_object2._action)
scene->_object2._action->remove();
scene->_sceneMode = 9459;
- _globals->_player.disableControl();
- scene->setAction(&scene->_sequenceManager1, scene, 9459, &scene->_object2, &scene->_object1, &scene->_object3, &_globals->_player, NULL);
+ g_globals->_player.disableControl();
+ scene->setAction(&scene->_sequenceManager1, scene, 9459, &scene->_object2, &scene->_object1, &scene->_object3, &g_globals->_player, NULL);
} else {
NamedHotspot::doAction(action);
}
}
void Scene9450::Hotspot3::doAction(int action) {
- Scene9450 *scene = (Scene9450 *)_globals->_sceneManager._scene;
+ Scene9450 *scene = (Scene9450 *)g_globals->_sceneManager._scene;
switch (action) {
case OBJECT_CLOAK:
case OBJECT_JACKET:
case OBJECT_TUNIC2:
scene->_sceneMode = 9460;
- _globals->_player.disableControl();
- scene->setAction(&scene->_sequenceManager1, scene, 9460, &_globals->_player, &scene->_object2, &scene->_object1, NULL);
+ g_globals->_player.disableControl();
+ scene->setAction(&scene->_sequenceManager1, scene, 9460, &g_globals->_player, &scene->_object2, &scene->_object1, NULL);
break;
case OBJECT_TUNIC:
SceneItem::display(9450, 49, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
@@ -881,14 +884,14 @@ void Scene9450::Hotspot3::doAction(int action) {
if (scene->_object2._action)
scene->_object2._action->remove();
scene->_sceneMode = 9459;
- _globals->_player.disableControl();
- scene->setAction(&scene->_sequenceManager1, scene, 9459, &scene->_object2, &scene->_object1, &scene->_object3, &_globals->_player, NULL);
+ g_globals->_player.disableControl();
+ scene->setAction(&scene->_sequenceManager1, scene, 9459, &scene->_object2, &scene->_object1, &scene->_object3, &g_globals->_player, NULL);
} else if ((RING_INVENTORY._cloak._sceneNumber != 1) && (RING_INVENTORY._jacket._sceneNumber != 1) && (RING_INVENTORY._tunic2._sceneNumber != 1)) {
SceneItem::display(9450, 38, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
} else {
scene->_sceneMode = 9460;
- _globals->_player.disableControl();
- scene->setAction(&scene->_sequenceManager1, scene, 9460, &_globals->_player, &scene->_object2, &scene->_object1, NULL);
+ g_globals->_player.disableControl();
+ scene->setAction(&scene->_sequenceManager1, scene, 9460, &g_globals->_player, &scene->_object2, &scene->_object1, NULL);
}
break;
default:
@@ -909,8 +912,8 @@ void Scene9450::signal() {
setAction(&_sequenceManager1, this, 9457, &_object2, &_object1, &_object3, NULL);
break;
case 9451:
- if (_globals->getFlag(87)) {
- _globals->_player.enableControl();
+ if (g_globals->getFlag(87)) {
+ g_globals->_player.enableControl();
} else {
_sceneMode = 1001;
if (_object2._action)
@@ -925,20 +928,20 @@ void Scene9450::signal() {
setAction(&_sequenceManager1, this, 9455, &_object2, &_object1, &_object3, NULL);
break;
case 9453:
- _globals->_sceneManager.changeScene(9360);
+ g_globals->_sceneManager.changeScene(9360);
break;
case 9459:
RING_INVENTORY._tunic._sceneNumber = 1;
_object2.signal();
- _globals->_player.enableControl();
- _globals->_events.setCursor(CURSOR_WALK);
+ g_globals->_player.enableControl();
+ g_globals->_events.setCursor(CURSOR_WALK);
_hotspot1.remove();
break;
case 1006:
- _globals->setFlag(87);
+ g_globals->setFlag(87);
// No break on purpose
default:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
break;
}
}
@@ -947,14 +950,14 @@ void Scene9450::dispatch() {
if (_action) {
_action->dispatch();
} else {
- if ((_globals->_player._position.y < 98) && (_globals->_player._position.x > 241) && (_globals->_player._position.x < 282)) {
- _globals->_player.disableControl();
+ if ((g_globals->_player._position.y < 98) && (g_globals->_player._position.x > 241) && (g_globals->_player._position.x < 282)) {
+ g_globals->_player.disableControl();
_sceneMode = 9452;
- setAction(&_sequenceManager1, this, 9452, &_globals->_player, NULL);
- } else if ((_globals->_player._position.y < 99) && (_globals->_player._position.x > 68) && (_globals->_player._position.x < 103)) {
- _globals->_player.disableControl();
+ setAction(&_sequenceManager1, this, 9452, &g_globals->_player, NULL);
+ } else if ((g_globals->_player._position.y < 99) && (g_globals->_player._position.x > 68) && (g_globals->_player._position.x < 103)) {
+ g_globals->_player.disableControl();
_sceneMode = 9453;
- setAction(&_sequenceManager1, this, 9453, &_globals->_player, NULL);
+ setAction(&_sequenceManager1, this, 9453, &g_globals->_player, NULL);
}
}
}
@@ -962,18 +965,18 @@ void Scene9450::dispatch() {
void Scene9450::postInit(SceneObjectList *OwnerList) {
Scene::postInit();
setZoomPercents(84, 75, 167, 150);
- _globals->_events.setCursor(CURSOR_WALK);
- _globals->_player.postInit();
+ g_globals->_events.setCursor(CURSOR_WALK);
+ g_globals->_player.postInit();
_object2.postInit();
_object1.postInit();
_object1.hide();
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
_sceneMode = 9451;
- setAction(&_sequenceManager1, this, 9451, &_globals->_player, NULL);
+ setAction(&_sequenceManager1, this, 9451, &g_globals->_player, NULL);
- if (_globals->getFlag(87)) {
+ if (g_globals->getFlag(87)) {
if (RING_INVENTORY._tunic._sceneNumber == 1) {
_object2.signal();
} else {
@@ -990,23 +993,23 @@ void Scene9450::postInit(SceneObjectList *OwnerList) {
}
if (RING_INVENTORY._tunic._sceneNumber != 1)
- _hotspot1.setup(123, 139, 138, 170, 9450, 37, -1);
-
- _hotspot2.setup(153, 102, 176, 141, 9450, 39, 40);
- _hotspot3.setup(97, 198, 130, 229, 9450, 41, 42);
- _hotspot15.setup(131, 190, 145, 212, 9450, 43, 44);
- _hotspot4.setup(33, 144, 105, 192, 9450, 0, 1);
- _hotspot5.setup(20, 236, 106, 287, 9450, 2, 3);
- _hotspot6.setup(137, 119, 195, 320, 9450, 4, 5);
- _hotspot7.setup(20, 59, 99, 111, 9450, 6, -1);
- _hotspot8.setup(110, 0, 199, 117, 9450, 7, 8);
- _hotspot9.setup(101, 104, 130, 174, 9450, 9, 10);
- _hotspot10.setup(110, 246, 149, 319, 9450, 11, 12);
- _hotspot11.setup(16, 34, 74, 62, 6450, 13, 14);
- _hotspot12.setup(19, 108, 72, 134, 9450, 15, 16);
- _hotspot13.setup(18, 215, 71, 237, 9450, 17, 18);
- _hotspot14.setup(15, 288, 76, 314, 9450, 19, 20);
- _hotspot16.setup(0, 0, 200, 320, 9450, 46, -1);
+ _hotspot1.setDetails(123, 139, 138, 170, 9450, 37, -1);
+
+ _hotspot2.setDetails(153, 102, 176, 141, 9450, 39, 40);
+ _hotspot3.setDetails(97, 198, 130, 229, 9450, 41, 42);
+ _hotspot15.setDetails(131, 190, 145, 212, 9450, 43, 44);
+ _hotspot4.setDetails(33, 144, 105, 192, 9450, 0, 1);
+ _hotspot5.setDetails(20, 236, 106, 287, 9450, 2, 3);
+ _hotspot6.setDetails(137, 119, 195, 320, 9450, 4, 5);
+ _hotspot7.setDetails(20, 59, 99, 111, 9450, 6, -1);
+ _hotspot8.setDetails(110, 0, 199, 117, 9450, 7, 8);
+ _hotspot9.setDetails(101, 104, 130, 174, 9450, 9, 10);
+ _hotspot10.setDetails(110, 246, 149, 319, 9450, 11, 12);
+ _hotspot11.setDetails(16, 34, 74, 62, 6450, 13, 14);
+ _hotspot12.setDetails(19, 108, 72, 134, 9450, 15, 16);
+ _hotspot13.setDetails(18, 215, 71, 237, 9450, 17, 18);
+ _hotspot14.setDetails(15, 288, 76, 314, 9450, 19, 20);
+ _hotspot16.setDetails(0, 0, 200, 320, 9450, 46, -1);
}
/*--------------------------------------------------------------------------
@@ -1014,67 +1017,67 @@ void Scene9450::postInit(SceneObjectList *OwnerList) {
*
*--------------------------------------------------------------------------*/
void Scene9500::Hotspot1::doAction(int action) {
- Scene9500 *scene = (Scene9500 *)_globals->_sceneManager._scene;
+ Scene9500 *scene = (Scene9500 *)g_globals->_sceneManager._scene;
if (action == OBJECT_SWORD) {
scene->_sceneMode = 9510;
- _globals->setFlag(92);
+ g_globals->setFlag(92);
RING_INVENTORY._sword._sceneNumber = 9500;
- _globals->_player.disableControl();
- _globals->_sceneItems.remove(this);
- scene->_hotspot2.setup(87, 294, 104, 314, 9400, 17, -1);
- scene->setAction(&scene->_sequenceManager, scene, 9510, &_globals->_player, &scene->_object2, NULL);
+ g_globals->_player.disableControl();
+ g_globals->_sceneItems.remove(this);
+ scene->_hotspot2.setDetails(87, 294, 104, 314, 9400, 17, -1);
+ scene->setAction(&scene->_sequenceManager, scene, 9510, &g_globals->_player, &scene->_object2, NULL);
} else {
NamedHotspot::doAction(action);
}
}
void Scene9500::Hotspot2::doAction(int action) {
- Scene9500 *scene = (Scene9500 *)_globals->_sceneManager._scene;
+ Scene9500 *scene = (Scene9500 *)g_globals->_sceneManager._scene;
if (action == CURSOR_USE) {
scene->_sceneMode = 9511;
- _globals->_player.disableControl();
- _globals->_sceneItems.remove(this);
- scene->setAction(&scene->_sequenceManager, scene, 9511, &_globals->_player, &scene->_object2, NULL);
+ g_globals->_player.disableControl();
+ g_globals->_sceneItems.remove(this);
+ scene->setAction(&scene->_sequenceManager, scene, 9511, &g_globals->_player, &scene->_object2, NULL);
} else {
NamedHotspot::doAction(action);
}
}
void Scene9500::Hotspot3::doAction(int action) {
- Scene9500 *scene = (Scene9500 *)_globals->_sceneManager._scene;
+ Scene9500 *scene = (Scene9500 *)g_globals->_sceneManager._scene;
if ((action == CURSOR_USE) && (RING_INVENTORY._candle._sceneNumber != 1)){
scene->_sceneMode = 9505;
- _globals->_player.disableControl();
- _globals->_sceneItems.remove(this);
- scene->setAction(&scene->_sequenceManager, scene, 9505, &_globals->_player, &scene->_candle, NULL);
+ g_globals->_player.disableControl();
+ g_globals->_sceneItems.remove(this);
+ scene->setAction(&scene->_sequenceManager, scene, 9505, &g_globals->_player, &scene->_candle, NULL);
} else {
NamedHotspot::doAction(action);
}
}
void Scene9500::Hotspot4::doAction(int action) {
- Scene9500 *scene = (Scene9500 *)_globals->_sceneManager._scene;
+ Scene9500 *scene = (Scene9500 *)g_globals->_sceneManager._scene;
if (action == OBJECT_CANDLE) {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
if (RING_INVENTORY._straw._sceneNumber == 9500) {
scene->_sceneMode = 9506;
- _globals->_sceneItems.remove(&scene->_hotspot5);
- _globals->_sceneItems.remove(this);
- scene->setAction(&scene->_sequenceManager, scene, 9506, &_globals->_player, &scene->_object3, NULL);
+ g_globals->_sceneItems.remove(&scene->_hotspot5);
+ g_globals->_sceneItems.remove(this);
+ scene->setAction(&scene->_sequenceManager, scene, 9506, &g_globals->_player, &scene->_object3, NULL);
RING_INVENTORY._candle._sceneNumber = 9850;
} else {
scene->_sceneMode = 9507;
- scene->setAction(&scene->_sequenceManager, scene, 9507, &_globals->_player, &scene->_object3, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 9507, &g_globals->_player, &scene->_object3, NULL);
}
} else if (action == OBJECT_STRAW) {
scene->_sceneMode = 9512;
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
RING_INVENTORY._straw._sceneNumber = 9500;
- scene->setAction(&scene->_sequenceManager, scene, 9512, &_globals->_player, &scene->_object3, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 9512, &g_globals->_player, &scene->_object3, NULL);
} else {
NamedHotspot::doAction(action);
}
@@ -1083,35 +1086,35 @@ void Scene9500::Hotspot4::doAction(int action) {
void Scene9500::signal() {
switch (_sceneMode) {
case 9503:
- _globals->_sceneManager.changeScene(9200);
- _globals->_soundHandler.play(295);
+ g_globals->_sceneManager.changeScene(9200);
+ g_globals->_soundHandler.play(295);
break;
case 9504:
- _globals->_sceneManager.changeScene(9850);
+ g_globals->_sceneManager.changeScene(9850);
break;
case 9505:
_candle.setStrip(2);
RING_INVENTORY._candle._sceneNumber = 1;
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
break;
case 9506:
- _globals->setFlag(85);
- _globals->_player.enableControl();
+ g_globals->setFlag(85);
+ g_globals->_player.enableControl();
break;
case 9511:
RING_INVENTORY._helmet._sceneNumber = 1;
- _globals->_player.enableControl();
- if (!_globals->getFlag(51)) {
- _globals->setFlag(51);
- _globals->_player.disableControl();
+ g_globals->_player.enableControl();
+ if (!g_globals->getFlag(51)) {
+ g_globals->setFlag(51);
+ g_globals->_player.disableControl();
_sceneMode = 9514;
- setAction(&_sequenceManager, this, 9514, &_globals->_player, NULL, NULL, NULL, NULL);
+ setAction(&_sequenceManager, this, 9514, &g_globals->_player, NULL, NULL, NULL, NULL);
}
break;
case 0:
case 9514:
default:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
break;
}
}
@@ -1120,14 +1123,14 @@ void Scene9500::dispatch() {
if (_action) {
_action->dispatch();
} else {
- if (_globals->_player._position.y >= 199) {
- _globals->_player.disableControl();
+ if (g_globals->_player._position.y >= 199) {
+ g_globals->_player.disableControl();
_sceneMode = 9503;
- setAction(&_sequenceManager, this, 9503, &_globals->_player, NULL, NULL, NULL, NULL);
- } else if (_globals->_player._position.y < 127) {
- _globals->_player.disableControl();
+ setAction(&_sequenceManager, this, 9503, &g_globals->_player, NULL, NULL, NULL, NULL);
+ } else if (g_globals->_player._position.y < 127) {
+ g_globals->_player.disableControl();
_sceneMode = 9504;
- setAction(&_sequenceManager, this, 9504, &_globals->_player, NULL, NULL, NULL, NULL);
+ setAction(&_sequenceManager, this, 9504, &g_globals->_player, NULL, NULL, NULL, NULL);
}
}
@@ -1141,8 +1144,8 @@ void Scene9500::postInit(SceneObjectList *OwnerList) {
Scene::postInit();
setZoomPercents(110, 75, 200, 150);
- _globals->_player.postInit();
- _globals->_soundHandler.play(305);
+ g_globals->_player.postInit();
+ g_globals->_soundHandler.play(305);
_candle.postInit();
_candle.setVisage(9500);
@@ -1162,7 +1165,7 @@ void Scene9500::postInit(SceneObjectList *OwnerList) {
_object3._strip = 2;
_object3._frame = 9;
_object3.setPosition(Common::Point(168, 128));
- if (_globals->getFlag(85)) {
+ if (g_globals->getFlag(85)) {
_object3.setVisage(9500);
_object3.setStrip(4);
_object3.animate(ANIM_MODE_8, 0, NULL);
@@ -1172,61 +1175,61 @@ void Scene9500::postInit(SceneObjectList *OwnerList) {
_object2.postInit();
_object2.hide();
- if (_globals->getFlag(92)) {
+ if (g_globals->getFlag(92)) {
_object2.show();
_object2.setVisage(9501);
_object2.setStrip(1);
_object2.setFrame(_object2.getFrameCount());
_object2.setPosition(Common::Point(303, 130));
_object2.fixPriority(132);
- if (RING_INVENTORY._helmet._sceneNumber == 1) {
- _hotspot2.setup(87, 294, 104, 314, 9400, 17, -1);
+ if (RING_INVENTORY._helmet._sceneNumber != 1) {
+ _hotspot2.setDetails(87, 294, 104, 314, 9400, 17, -1);
} else {
_object2.setStrip(2);
_object2.setFrame(1);
}
} else {
- _hotspot1.setup(105, 295, 134, 313, 9500, 9, 10);
+ _hotspot1.setDetails(105, 295, 134, 313, 9500, 9, 10);
}
- _hotspot17.setup(101, 293, 135, 315, 9500, 9, 10);
- _hotspot3.setup(84, 12, 107, 47, 9500, 15, 15);
- _hotspot6.setup(93, 11, 167, 46, 9500, 0, 1);
- _hotspot7.setup(100, 70, 125, 139, 9500, 2, 3);
+ _hotspot17.setDetails(101, 293, 135, 315, 9500, 9, 10);
+ _hotspot3.setDetails(84, 12, 107, 47, 9500, 15, 15);
+ _hotspot6.setDetails(93, 11, 167, 46, 9500, 0, 1);
+ _hotspot7.setDetails(100, 70, 125, 139, 9500, 2, 3);
- if (!_globals->getFlag(85)) {
- _hotspot5.setup(111, 68, 155, 244, 9500, 17, -1);
- _hotspot4.setup(57, 71, 120, 126, 9500, 16, -1);
+ if (!g_globals->getFlag(85)) {
+ _hotspot5.setDetails(111, 68, 155, 244, 9500, 17, -1);
+ _hotspot4.setDetails(57, 71, 120, 126, 9500, 16, -1);
}
- _hotspot8.setup(60, 24, 90, 53, 9500, 4, 5);
- _hotspot9.setup(72, 143, 93, 163, 9500, 4, 5);
- _hotspot10.setup(70, 205, 92, 228, 9500, 4, 5);
- _hotspot11.setup(66, 291, 90, 317, 9500, 4, 5);
- _hotspot12.setup(22, 58, 101, 145, 9500, 6, 7);
- _hotspot13.setup(121, 57, 163, 249, 9500, 6, 7);
- _hotspot14.setup(115, 133, 135, 252, 9500, 6, 7);
- _hotspot15.setup(55, 240, 125, 254, 9500, 6, 7);
- _hotspot16.setup(53, 251, 132, 288, 9500, 8, -1);
- _hotspot19.setup(101, 207, 120, 225, 9500, 9, 10);
- _hotspot18.setup(98, 144, 117, 162, 9500, 9, 10);
- _hotspot20.setup(102, 27, 132, 50, 9500, 9, 10);
+ _hotspot8.setDetails(60, 24, 90, 53, 9500, 4, 5);
+ _hotspot9.setDetails(72, 143, 93, 163, 9500, 4, 5);
+ _hotspot10.setDetails(70, 205, 92, 228, 9500, 4, 5);
+ _hotspot11.setDetails(66, 291, 90, 317, 9500, 4, 5);
+ _hotspot12.setDetails(22, 58, 101, 145, 9500, 6, 7);
+ _hotspot13.setDetails(121, 57, 163, 249, 9500, 6, 7);
+ _hotspot14.setDetails(115, 133, 135, 252, 9500, 6, 7);
+ _hotspot15.setDetails(55, 240, 125, 254, 9500, 6, 7);
+ _hotspot16.setDetails(53, 251, 132, 288, 9500, 8, -1);
+ _hotspot19.setDetails(101, 207, 120, 225, 9500, 9, 10);
+ _hotspot18.setDetails(98, 144, 117, 162, 9500, 9, 10);
+ _hotspot20.setDetails(102, 27, 132, 50, 9500, 9, 10);
- _globals->_events.setCursor(CURSOR_WALK);
- _globals->_player.disableControl();
+ g_globals->_events.setCursor(CURSOR_WALK);
+ g_globals->_player.disableControl();
- if ((_globals->_sceneManager._previousScene == 9200) || (_globals->_sceneManager._previousScene != 9850)) {
+ if ((g_globals->_sceneManager._previousScene == 9200) || (g_globals->_sceneManager._previousScene != 9850)) {
_sceneMode = 0;
if (RING_INVENTORY._helmet._sceneNumber != 1) {
- setAction(&_sequenceManager, this, 9501, &_globals->_player, &_candle, NULL);
+ setAction(&_sequenceManager, this, 9501, &g_globals->_player, &_candle, NULL);
} else {
RING_INVENTORY._helmet._sceneNumber = 9500;
- _hotspot2.setup(87, 294, 104, 314, 9400, 17, -1);
- setAction(&_sequenceManager, this, 9513, &_globals->_player, &_object2, NULL);
+ _hotspot2.setDetails(87, 294, 104, 314, 9400, 17, -1);
+ setAction(&_sequenceManager, this, 9513, &g_globals->_player, &_object2, NULL);
}
} else {
_sceneMode = 0;
- setAction(&_sequenceManager, this, 9502, &_globals->_player, &_candle, NULL);
+ setAction(&_sequenceManager, this, 9502, &g_globals->_player, &_candle, NULL);
}
}
@@ -1237,7 +1240,7 @@ void Scene9500::postInit(SceneObjectList *OwnerList) {
void Scene9700::signal() {
switch (_sceneMode ++) {
case 9703:
- _globals->setFlag(88);
+ g_globals->setFlag(88);
// No break on purpose
case 9701:
case 9702:
@@ -1245,13 +1248,13 @@ void Scene9700::signal() {
_gfxButton1._bounds.center(50, 190);
_gfxButton1.draw();
_gfxButton1._bounds.expandPanes();
- _globals->_player.enableControl();
- _globals->_player._canWalk = false;
- _globals->_events.setCursor(CURSOR_USE);
+ g_globals->_player.enableControl();
+ g_globals->_player._canWalk = false;
+ g_globals->_events.setCursor(CURSOR_USE);
break;
case 9704:
- _globals->_soundHandler.play(323);
- _globals->_sceneManager.changeScene(9750);
+ g_globals->_soundHandler.play(323);
+ g_globals->_sceneManager.changeScene(9750);
break;
}
}
@@ -1260,17 +1263,17 @@ void Scene9700::process(Event &event) {
Scene::process(event);
if ((event.eventType == EVENT_BUTTON_DOWN) && !_action) {
if (_gfxButton1.process(event)) {
- _globals->_sceneManager.changeScene(9200);
- } else if (_globals->_events._currentCursor == OBJECT_SCANNER) {
+ g_globals->_sceneManager.changeScene(9200);
+ } else if (g_globals->_events._currentCursor == OBJECT_SCANNER) {
event.handled = true;
if (RING_INVENTORY._helmet._sceneNumber == 1) {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
_sceneMode = 9704;
- setAction(&_sequenceManager, this, 9704, &_globals->_player, &_object1, NULL);
+ setAction(&_sequenceManager, this, 9704, &g_globals->_player, &_object1, NULL);
} else {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
_sceneMode = 9703;
- setAction(&_sequenceManager, this, 9703, &_globals->_player, &_object1, NULL);
+ setAction(&_sequenceManager, this, 9703, &g_globals->_player, &_object1, NULL);
}
}
}
@@ -1280,25 +1283,25 @@ void Scene9700::postInit(SceneObjectList *OwnerList) {
Scene::postInit();
setZoomPercents(0, 100, 200, 100);
- _sceneHotspot1.setup(84, 218, 151, 278, 9700, 14, -1);
- _sceneHotspot2.setup(89, 11, 151, 121, 9700, 14, -1);
- _sceneHotspot3.setup(69, 119, 138, 216, 9700, 15, 16);
- _sceneHotspot4.setup(34, 13, 88, 116, 9700, 17, -1);
- _sceneHotspot5.setup(52, 119, 68, 204, 9700, 17, -1);
- _sceneHotspot6.setup(0, 22, 56, 275, 9700, 18, -1);
+ _sceneHotspot1.setDetails(84, 218, 151, 278, 9700, 14, -1);
+ _sceneHotspot2.setDetails(89, 11, 151, 121, 9700, 14, -1);
+ _sceneHotspot3.setDetails(69, 119, 138, 216, 9700, 15, 16);
+ _sceneHotspot4.setDetails(34, 13, 88, 116, 9700, 17, -1);
+ _sceneHotspot5.setDetails(52, 119, 68, 204, 9700, 17, -1);
+ _sceneHotspot6.setDetails(0, 22, 56, 275, 9700, 18, -1);
_object1.postInit();
_object1.hide();
- _globals->_player.postInit();
- if (!_globals->getFlag(97)) {
- _globals->_player.disableControl();
+ g_globals->_player.postInit();
+ if (!g_globals->getFlag(97)) {
+ g_globals->_player.disableControl();
_sceneMode = 9701;
- setAction(&_sequenceManager, this, 9701, &_globals->_player, &_object1, NULL);
- _globals->setFlag(97);
+ setAction(&_sequenceManager, this, 9701, &g_globals->_player, &_object1, NULL);
+ g_globals->setFlag(97);
} else {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
_sceneMode = 9702;
- setAction(&_sequenceManager, this, 9702, &_globals->_player, &_object1, NULL);
+ setAction(&_sequenceManager, this, 9702, &g_globals->_player, &_object1, NULL);
}
}
@@ -1309,10 +1312,10 @@ void Scene9700::postInit(SceneObjectList *OwnerList) {
void Scene9750::signal() {
switch (_sceneMode ++) {
case 9751:
- _globals->_soundHandler.fadeOut(this);
+ g_globals->_soundHandler.fadeOut(this);
break;
case 9752:
- _globals->_sceneManager.changeScene(2100);
+ g_globals->_sceneManager.changeScene(2100);
default:
break;
}
@@ -1327,14 +1330,14 @@ void Scene9750::postInit(SceneObjectList *OwnerList) {
Scene::postInit();
setZoomPercents(0, 100, 200, 100);
- _globals->_player.postInit();
+ g_globals->_player.postInit();
_object1.postInit();
_object1.hide();
_object2.postInit();
_object2.hide();
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
_sceneMode = 9751;
- setAction(&_sequenceManager, this, 9751, &_globals->_player, &_object1, &_object2, NULL);
+ setAction(&_sequenceManager, this, 9751, &g_globals->_player, &_object1, &_object2, NULL);
}
@@ -1369,19 +1372,19 @@ void Scene9850::Object7::doAction(int action) {
// Hair covered tunic
void Scene9850::Hotspot12::doAction(int action) {
- Scene9850 *scene = (Scene9850 *)_globals->_sceneManager._scene;
+ Scene9850 *scene = (Scene9850 *)g_globals->_sceneManager._scene;
if (action == CURSOR_USE) {
if (RING_INVENTORY._tunic2._sceneNumber != 1) {
RING_INVENTORY._tunic2._sceneNumber = 1;
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_sceneMode = 9858;
- scene->setAction(&scene->_sequenceManager, scene, 9858, &_globals->_player, &scene->_objTunic2, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 9858, &g_globals->_player, &scene->_objTunic2, NULL);
} else {
RING_INVENTORY._tunic2._sceneNumber = 9850;
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_sceneMode = 9861;
- scene->setAction(&scene->_sequenceManager, scene, 9861, &_globals->_player, &scene->_objTunic2, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 9861, &g_globals->_player, &scene->_objTunic2, NULL);
}
} else if ((action != CURSOR_LOOK) || (RING_INVENTORY._tunic2._sceneNumber != 1)) {
NamedHotspot::doAction(action);
@@ -1391,19 +1394,19 @@ void Scene9850::Hotspot12::doAction(int action) {
}
void Scene9850::Hotspot14::doAction(int action) {
- Scene9850 *scene = (Scene9850 *)_globals->_sceneManager._scene;
+ Scene9850 *scene = (Scene9850 *)g_globals->_sceneManager._scene;
if (action == CURSOR_USE) {
if (RING_INVENTORY._jacket._sceneNumber != 1) {
RING_INVENTORY._jacket._sceneNumber = 1;
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_sceneMode = 9857;
- scene->setAction(&scene->_sequenceManager, scene, 9857, &_globals->_player, &scene->_objJacket, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 9857, &g_globals->_player, &scene->_objJacket, NULL);
} else {
RING_INVENTORY._jacket._sceneNumber = 9850;
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_sceneMode = 9860;
- scene->setAction(&scene->_sequenceManager, scene, 9860, &_globals->_player, &scene->_objJacket, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 9860, &g_globals->_player, &scene->_objJacket, NULL);
}
} else if ((action != CURSOR_LOOK) || (RING_INVENTORY._jacket._sceneNumber != 1)) {
NamedHotspot::doAction(action);
@@ -1413,19 +1416,19 @@ void Scene9850::Hotspot14::doAction(int action) {
}
void Scene9850::Hotspot16::doAction(int action) {
- Scene9850 *scene = (Scene9850 *)_globals->_sceneManager._scene;
+ Scene9850 *scene = (Scene9850 *)g_globals->_sceneManager._scene;
if (action == CURSOR_USE) {
if (RING_INVENTORY._cloak._sceneNumber != 1) {
RING_INVENTORY._cloak._sceneNumber = 1;
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_sceneMode = 9862;
- scene->setAction(&scene->_sequenceManager, scene, 9862, &_globals->_player, &scene->_objCloak, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 9862, &g_globals->_player, &scene->_objCloak, NULL);
} else {
RING_INVENTORY._cloak._sceneNumber = 9850;
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_sceneMode = 9859;
- scene->setAction(&scene->_sequenceManager, scene, 9859, &_globals->_player, &scene->_objCloak, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 9859, &g_globals->_player, &scene->_objCloak, NULL);
}
} else if ((action != CURSOR_LOOK) || (RING_INVENTORY._cloak._sceneNumber != 1)) {
NamedHotspot::doAction(action);
@@ -1435,7 +1438,7 @@ void Scene9850::Hotspot16::doAction(int action) {
}
void Scene9850::Hotspot17::doAction(int action) {
- Scene9850 *scene = (Scene9850 *)_globals->_sceneManager._scene;
+ Scene9850 *scene = (Scene9850 *)g_globals->_sceneManager._scene;
if (action == OBJECT_SCANNER) {
SceneItem::display(9850, 32, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
@@ -1447,7 +1450,7 @@ void Scene9850::Hotspot17::doAction(int action) {
}
void Scene9850::Hotspot18::doAction(int action) {
- Scene9850 *scene = (Scene9850 *)_globals->_sceneManager._scene;
+ Scene9850 *scene = (Scene9850 *)g_globals->_sceneManager._scene;
if (action == OBJECT_SCANNER) {
SceneItem::display(9850, 32, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
@@ -1459,7 +1462,7 @@ void Scene9850::Hotspot18::doAction(int action) {
}
void Scene9850::Hotspot19::doAction(int action) {
- Scene9850 *scene = (Scene9850 *)_globals->_sceneManager._scene;
+ Scene9850 *scene = (Scene9850 *)g_globals->_sceneManager._scene;
if (action == OBJECT_SCANNER) {
SceneItem::display(9850, 31, SET_Y, 20, SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
@@ -1472,20 +1475,20 @@ void Scene9850::Hotspot19::doAction(int action) {
// Arrow on Statue
void Scene9850::Hotspot20::doAction(int action) {
- Scene9850 *scene = (Scene9850 *)_globals->_sceneManager._scene;
+ Scene9850 *scene = (Scene9850 *)g_globals->_sceneManager._scene;
if (action == CURSOR_USE) {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
if (scene->_objSword._state == 0) {
if (RING_INVENTORY._scimitar._sceneNumber == 9850)
scene->_objScimitar.show();
if (RING_INVENTORY._sword._sceneNumber == 9850)
scene->_objSword.show();
scene->_sceneMode = 11;
- setAction(&scene->_sequenceManager, scene, 9853, &_globals->_player, &scene->_objDoor, &scene->_objLever, NULL);
+ setAction(&scene->_sequenceManager, scene, 9853, &g_globals->_player, &scene->_objDoor, &scene->_objLever, NULL);
} else {
scene->_sceneMode = 10;
- setAction(&scene->_sequenceManager, scene, 9854, &_globals->_player, &scene->_objDoor, &scene->_objLever, NULL);
+ setAction(&scene->_sequenceManager, scene, 9854, &g_globals->_player, &scene->_objDoor, &scene->_objLever, NULL);
}
scene->_objSword._state ^= 1;
} else {
@@ -1501,26 +1504,26 @@ void Scene9850::signal() {
_objScimitar.hide();
if (RING_INVENTORY._sword._sceneNumber == 9850)
_objSword.hide();
- _globals->_sceneItems.remove(&_objScimitar);
- _globals->_sceneItems.remove(&_objSword);
- _globals->_sceneItems.addItems(&_hotspot19, NULL);
- _globals->_player.enableControl();
+ g_globals->_sceneItems.remove(&_objScimitar);
+ g_globals->_sceneItems.remove(&_objSword);
+ g_globals->_sceneItems.addItems(&_hotspot19, NULL);
+ g_globals->_player.enableControl();
break;
case 11:
// Hidden closet opened
if (RING_INVENTORY._scimitar._sceneNumber == 9850)
- _globals->_sceneItems.addItems(&_objScimitar, NULL);
+ g_globals->_sceneItems.addItems(&_objScimitar, NULL);
if (RING_INVENTORY._sword._sceneNumber == 9850)
- _globals->_sceneItems.addItems(&_objSword, NULL);
- _globals->_sceneItems.remove(&_hotspot19);
- _globals->_player.enableControl();
+ g_globals->_sceneItems.addItems(&_objSword, NULL);
+ g_globals->_sceneItems.remove(&_hotspot19);
+ g_globals->_player.enableControl();
break;
case 9500:
- _globals->_sceneManager.changeScene(_sceneMode - 1);
+ g_globals->_sceneManager.changeScene(_sceneMode - 1);
break;
case 0:
default:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
break;
}
}
@@ -1529,7 +1532,7 @@ void Scene9850::process(Event &event) {
Scene::process(event);
if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_4)) {
event.handled = true;
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
if (_objSword._state == 0) {
_sceneMode = 0;
setAction(&_sequenceManager, this, 9853, &_objLever, &_objDoor, &_objScimitar, &_objSword, NULL);
@@ -1544,10 +1547,10 @@ void Scene9850::process(Event &event) {
void Scene9850::dispatch() {
if (_action) {
_action->dispatch();
- } else if (_globals->_player._position.y >= 198) {
- _globals->_player.disableControl();
+ } else if (g_globals->_player._position.y >= 198) {
+ g_globals->_player.disableControl();
_sceneMode = 9500;
- setAction(&_sequenceManager, this, 9852, &_globals->_player, NULL);
+ setAction(&_sequenceManager, this, 9852, &g_globals->_player, NULL);
}
}
@@ -1615,31 +1618,31 @@ void Scene9850::postInit(SceneObjectList *OwnerList) {
_objSword.hide();
}
- _spotLever.setup(30, 251, 45, 270, 9850, 26, -1);
- _hotspot1.setup(123, 0, 200, 320, 9850, 0, 1);
- _hotspot2.setup(107, 87, 133, 308, 9850, 0, 1);
- _hotspot3.setup(2, 28, 53, 80, 9850, 2, 3);
- _hotspot4.setup(13, 0, 55, 27, 9850, 2, 3);
- _hotspot5.setup(8, 74, 27, 91, 9850, 4, 5);
- _hotspot17.setup(61, 0, 125, 28, 9850, 6, 7);
- _hotspot18.setup(51, 95, 105, 145, 9850, 6, 7);
- _hotspot19.setup(56, 28, 115, 97, 9850, 6, 8);
- _hotspot6.setup(0, 223, 115, 257, 9850, 9, 10);
- _hotspot7.setup(15, 254, 33, 268, 9850, 9, -1);
- _hotspot8.setup(17, 218, 37, 233, 9850, 9, 10);
- _hotspot9.setup(8, 113, 26, 221, 9850, 11, 12);
- _hotspot10.setup(14, 94, 53, 112, 9850, 13, 14);
- _hotspot11.setup(5, 269, 29, 303, 9850, 15, 16);
- _hotspot12.setup(43, 278, 91, 317, 9850, 17, 18);
- _hotspot13.setup(47, 263, 112, 282, 9850, 19, 20);
- _hotspot14.setup(43, 188, 86, 224, 9850, 21, 22);
- _hotspot15.setup(43, 162, 92, 191, 9850, 23, 24);
- _hotspot16.setup(40, 146, 90, 169, 9850, 25, -1);
-
- _globals->_player.postInit();
- _globals->_player.disableControl();
+ _spotLever.setDetails(30, 251, 45, 270, 9850, 26, -1);
+ _hotspot1.setDetails(123, 0, 200, 320, 9850, 0, 1);
+ _hotspot2.setDetails(107, 87, 133, 308, 9850, 0, 1);
+ _hotspot3.setDetails(2, 28, 53, 80, 9850, 2, 3);
+ _hotspot4.setDetails(13, 0, 55, 27, 9850, 2, 3);
+ _hotspot5.setDetails(8, 74, 27, 91, 9850, 4, 5);
+ _hotspot17.setDetails(61, 0, 125, 28, 9850, 6, 7);
+ _hotspot18.setDetails(51, 95, 105, 145, 9850, 6, 7);
+ _hotspot19.setDetails(56, 28, 115, 97, 9850, 6, 8);
+ _hotspot6.setDetails(0, 223, 115, 257, 9850, 9, 10);
+ _hotspot7.setDetails(15, 254, 33, 268, 9850, 9, -1);
+ _hotspot8.setDetails(17, 218, 37, 233, 9850, 9, 10);
+ _hotspot9.setDetails(8, 113, 26, 221, 9850, 11, 12);
+ _hotspot10.setDetails(14, 94, 53, 112, 9850, 13, 14);
+ _hotspot11.setDetails(5, 269, 29, 303, 9850, 15, 16);
+ _hotspot12.setDetails(43, 278, 91, 317, 9850, 17, 18);
+ _hotspot13.setDetails(47, 263, 112, 282, 9850, 19, 20);
+ _hotspot14.setDetails(43, 188, 86, 224, 9850, 21, 22);
+ _hotspot15.setDetails(43, 162, 92, 191, 9850, 23, 24);
+ _hotspot16.setDetails(40, 146, 90, 169, 9850, 25, -1);
+
+ g_globals->_player.postInit();
+ g_globals->_player.disableControl();
_sceneMode = 0;
- setAction(&_sequenceManager, this, 9851, &_globals->_player, NULL);
+ setAction(&_sequenceManager, this, 9851, &g_globals->_player, NULL);
}
/*--------------------------------------------------------------------------
@@ -1650,7 +1653,7 @@ void Scene9900::strAction1::signal() {
const byte mask1[3] = {0xff, 0xff, 0xff};
const byte mask2[3] = {0, 0, 0};
- Scene9900 *scene = (Scene9900 *)_globals->_sceneManager._scene;
+ Scene9900 *scene = (Scene9900 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -1662,23 +1665,23 @@ void Scene9900::strAction1::signal() {
_object9.fixPriority(250);
_object9.setPosition(Common::Point(171, 59));
_object9.animate(ANIM_MODE_5, NULL);
- _globals->_scenePalette.addRotation(67, 111, 1, 1, this);
+ g_globals->_scenePalette.addRotation(67, 111, 1, 1, this);
scene->_object2.hide();
break;
case 1:
_palette1.getPalette();
- _globals->_scenePalette.addFader(&mask1[0], 1, 10, this);
+ g_globals->_scenePalette.addFader(&mask1[0], 1, 10, this);
break;
case 2:
_object9.remove();
- _globals->_scenePalette.addFader(&mask2[0], 1, 5, this);
+ g_globals->_scenePalette.addFader(&mask2[0], 1, 5, this);
break;
case 3:
- _globals->_soundHandler.play(377);
+ g_globals->_soundHandler.play(377);
setDelay(120);
break;
case 4:
- _globals->_scenePalette.addFader(_palette1._palette, 256, 1, this);
+ g_globals->_scenePalette.addFader(_palette1._palette, 256, 1, this);
break;
case 5:
remove();
@@ -1700,7 +1703,7 @@ void Scene9900::strAction2::signal() {
_var3 = 0;
// No break on purpose
case 1: {
- Common::String msg = _resourceManager->getMessage(8030, _lineNum++);
+ Common::String msg = g_resourceManager->getMessage(8030, _lineNum++);
if (msg.compareTo("LASTCREDIT")) {
if (_var3) {
// Not used?
@@ -1738,7 +1741,7 @@ void Scene9900::strAction2::signal() {
_txtArray2[_txtArray1Index]._fontNumber = 2;
_txtArray2[_txtArray1Index]._color1 = 23;
- msg = _resourceManager->getMessage(8030, _lineNum++);
+ msg = g_resourceManager->getMessage(8030, _lineNum++);
_txtArray2[_txtArray1Index].setup(msg);
_txtArray2[_txtArray1Index]._moveRate = 20;
_txtArray2[_txtArray1Index]._moveDiff.y = 2;
@@ -1746,7 +1749,8 @@ void Scene9900::strAction2::signal() {
frameWidth = _txtArray2[_txtArray1Index].getFrame().getBounds().width();
_txtArray2[_txtArray1Index].setPosition(Common::Point((320 - frameWidth) / 2, 200 + frameHeight));
} else {
- _globals->_player.enableControl();
+ // WORKAROUND: Fix inventory becoming available at end of credits
+ g_globals->_events.setCursor(CURSOR_WALK);
_actionIndex = 3;
signal();
}
@@ -1801,21 +1805,21 @@ void Scene9900::strAction3::signal() {
case 0:
_palette2.getPalette();
_palette3.loadPalette(2003);
- _globals->_scenePalette.addFader(_palette3._palette, 256, 5, this);
+ g_globals->_scenePalette.addFader(_palette3._palette, 256, 5, this);
break;
case 1:
- _globals->_scenePalette.addFader(&mask3[0], 1, 10, this);
+ g_globals->_scenePalette.addFader(&mask3[0], 1, 10, this);
break;
case 2:
- _globals->_scenePalette.addFader(&mask4[0], 1, 1, this);
+ g_globals->_scenePalette.addFader(&mask4[0], 1, 1, this);
break;
case 3:
_palette2.loadPalette(17);
- _globals->_sceneManager._scene->loadScene(17);
- _globals->_scenePalette.addFader(_palette2._palette, 256, 5, this);
+ g_globals->_sceneManager._scene->loadScene(17);
+ g_globals->_scenePalette.addFader(_palette2._palette, 256, 5, this);
break;
case 4:
- _globals->_game->endGame(9900, 61);
+ g_globals->_game->endGame(9900, 61);
remove();
default:
break;
@@ -1855,40 +1859,40 @@ void Scene9900::signal() {
switch (_sceneMode){
case 150:
- _globals->_soundHandler.play(380);
+ g_globals->_soundHandler.play(380);
_object8.postInit();
_object8.setVisage(2002);
_object8.setStrip(1);
_object8.setFrame(1);
_object8.fixPriority(200);
_object8.setPosition(Common::Point(64, 199));
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
_sceneMode = 9908;
setAction(&_sequenceManager, this, 9908, &_object1, &_object2, &_object3, &_object4, &_object5, &_object6);
break;
case 162:
warning("TBC: shutdown();");
- _globals->_game->quitGame();
+ g_globals->_game->quitGame();
break;
case 9901:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
_sceneMode = 9906;
setAction(&_sequenceManager, this, 9906, &_object1, &_object2, &_object3, &_object4, &_object5, &_object6);
- _globals->_player._uiEnabled = true;
- _globals->_events.setCursor(CURSOR_USE);
+ g_globals->_player._uiEnabled = true;
+ g_globals->_events.setCursor(CURSOR_USE);
break;
case 9902:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
_sceneMode = 9901;
setAction(&_sequenceManager, this, 9901, &_object1, &_object2, &_object3, &_object4, &_object5, &_object6);
break;
case 9903:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
_sceneMode = 9902;
setAction(&_sequenceManager, this, 9902, &_object1, &_object2, &_object3, &_object4, &_object5, &_object6);
break;
case 9904:
- _globals->_soundHandler.play(390);
+ g_globals->_soundHandler.play(390);
_sceneMode = 9912;
setAction(&_strAction2, this);
break;
@@ -1898,50 +1902,50 @@ void Scene9900::signal() {
break;
case 9906:
if (_object8._state == 0) {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
_sceneMode = 9913;
setAction(&_sequenceManager, this, 9913, &_object1, &_object2, &_object3, &_object4, &_object5, &_object6);
} else {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
_sceneMode = 9905;
setAction(&_sequenceManager, this, 9905, &_object1, &_object2, &_object3, &_object4, &_object5, &_object6);
}
break;
case 9907:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
_sceneMode = 9903;
setAction(&_sequenceManager, this, 9903, &_object1, &_object2, &_object3, &_object4, &_object5, &_object6);
break;
case 9908:
_object8.remove();
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
_sceneMode = 9904;
setAction(&_sequenceManager, this, 9904, &_object1, &_object2, &_object3, &_object4, &_object5, &_object6);
break;
case 9909:
- _globals->_soundHandler.play(375);
- _globals->_player.disableControl();
+ g_globals->_soundHandler.play(375);
+ g_globals->_player.disableControl();
_sceneMode = 9907;
setAction(&_sequenceManager, this, 9907, &_object1, &_object2, &_object3, &_object4, &_object5, &_object6);
break;
case 9910:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
_sceneMode = 9911;
setAction(&_sequenceManager, this, 9911, &_object1, &_object2, &_object3, &_object4, &_object5, &_object6);
break;
case 9911:
- _globals->_soundHandler.play(367);
- _globals->_player.disableControl();
+ g_globals->_soundHandler.play(367);
+ g_globals->_player.disableControl();
_sceneMode = 9909;
setAction(&_sequenceManager, this, 9909, &_object1, &_object2, &_object3, &_object4, &_object5, &_object6);
break;
case 9912:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
_sceneMode = 9912;
setAction(&_sequenceManager, this, 9912, &_object1, &_object2, &_object3, &_object4, &_object5, &_object6);
_sceneMode = 162;
- _globals->_player.enableControl();
- _globals->_player._canWalk = false;
+ g_globals->_player.enableControl();
+ g_globals->_player._canWalk = false;
break;
case 9913:
_sceneMode = 200;
@@ -1957,10 +1961,10 @@ void Scene9900::process(Event &event) {
return;
Scene::process(event);
if (_sceneMode == 9906) {
- if ((event.eventType == EVENT_BUTTON_DOWN) && (_globals->_events.getCursor() == OBJECT_ITEMS)) {
+ if ((event.eventType == EVENT_BUTTON_DOWN) && (g_globals->_events.getCursor() == OBJECT_ITEMS)) {
_object8._state = 1;
RING_INVENTORY._items._sceneNumber = 9900;
- _globals->_events.setCursor(CURSOR_USE);
+ g_globals->_events.setCursor(CURSOR_USE);
}
}
}
@@ -1992,7 +1996,7 @@ void Scene9900::postInit(SceneObjectList *OwnerList) {
RING_INVENTORY._items._description = Common::String("One of the items from the stasis ship. The other is on the Lance's bridge.");
_stripManager.addSpeaker(&_speakerMR);
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
_sceneMode = 9910;
setAction(&_sequenceManager, this, 9910, &_object1, &_object2, &_object3, &_object4, &_object5, &_object6);
}
@@ -2008,7 +2012,7 @@ void Scene9999::Action1::signal() {
setDelay(600);
break;
case 1:
- _globals->_sceneManager.changeScene(3500);
+ g_globals->_sceneManager.changeScene(3500);
break;
default:
break;
@@ -2027,8 +2031,8 @@ void Scene9999::Action2::signal() {
setDelay(300);
break;
case 2:
- _globals->_stripNum = 3600;
- _globals->_sceneManager.changeScene(3600);
+ g_globals->_stripNum = 3600;
+ g_globals->_sceneManager.changeScene(3600);
default:
break;
}
@@ -2044,14 +2048,14 @@ void Scene9999::postInit(SceneObjectList *OwnerList) {
_object1.setStrip2(3);
_object1.setPosition(Common::Point(160, 152));
- _globals->_player.postInit();
- _globals->_player.setVisage(1303);
- _globals->_player.setStrip2(1);
- _globals->_player.fixPriority(250);
- _globals->_player.animate(ANIM_MODE_2, NULL);
- _globals->_player.setPosition(Common::Point(194, 98));
- _globals->_player._numFrames = 20;
- _globals->_player.disableControl();
+ g_globals->_player.postInit();
+ g_globals->_player.setVisage(1303);
+ g_globals->_player.setStrip2(1);
+ g_globals->_player.fixPriority(250);
+ g_globals->_player.animate(ANIM_MODE_2, NULL);
+ g_globals->_player.setPosition(Common::Point(194, 98));
+ g_globals->_player._numFrames = 20;
+ g_globals->_player.disableControl();
_object2.postInit();
_object2.setVisage(1303);
@@ -2067,22 +2071,24 @@ void Scene9999::postInit(SceneObjectList *OwnerList) {
_object3.setPosition(Common::Point(292, 149));
_object3.setAction(&_action3);
- if (_globals->_sceneManager._previousScene == 3500)
+ if (g_globals->_sceneManager._previousScene == 3500)
setAction(&_action2);
else
setAction(&_action1);
- _globals->_sceneManager._scene->_sceneBounds.center(_globals->_player._position.x, _globals->_player._position.y);
- _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds);
- _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
+ g_globals->_sceneManager._scene->_sceneBounds.center(g_globals->_player._position.x, g_globals->_player._position.y);
+ g_globals->_sceneManager._scene->_sceneBounds.contain(g_globals->_sceneManager._scene->_backgroundBounds);
+ g_globals->_sceneOffset.x = (g_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
- if (_globals->_sceneManager._previousScene == 3500)
- _globals->_stripNum = 2222;
+ if (g_globals->_sceneManager._previousScene == 3500)
+ g_globals->_stripNum = 2222;
else
- _globals->_stripNum = 2121;
+ g_globals->_stripNum = 2121;
- _globals->_soundHandler.play(118);
+ g_globals->_soundHandler.play(118);
}
-} // End of namespace tSage
+} // End of namespace Ringworld
+
+} // End of namespace TsAGE
diff --git a/engines/tsage/ringworld_scenes10.h b/engines/tsage/ringworld/ringworld_scenes10.h
index 33b16d0014..0193d5af63 100644
--- a/engines/tsage/ringworld_scenes10.h
+++ b/engines/tsage/ringworld/ringworld_scenes10.h
@@ -24,13 +24,18 @@
#define TSAGE_RINGWORLD_SCENES10_H
#include "common/scummsys.h"
-#include "tsage/ringworld_logic.h"
+#include "tsage/ringworld/ringworld_logic.h"
+#include "tsage/ringworld/ringworld_speakers.h"
#include "tsage/events.h"
#include "tsage/core.h"
#include "tsage/scenes.h"
#include "tsage/globals.h"
-namespace tSage {
+namespace TsAGE {
+
+namespace Ringworld {
+
+using namespace TsAGE;
class SceneObject9150 : public SceneObject {
public:
@@ -75,12 +80,12 @@ public:
SceneObject _object4;
SceneObject _object5;
SceneObject _object6;
- SceneHotspot1 _sceneHotspot1;
- NamedHotspot _sceneHotspot2;
- NamedHotspot _sceneHotspot3;
- NamedHotspot _sceneHotspot4;
- NamedHotspot _sceneHotspot5;
- NamedHotspot _sceneHotspot6;
+ SceneHotspot1 _hotspotSlave;
+ NamedHotspot _hotspotSoiledClothes;
+ NamedHotspot _hotspotCleanedClothes;
+ NamedHotspot _hotspotIsland;
+ NamedHotspot _hotspotBoulders;
+ NamedHotspot _hotspotTrees;
virtual void postInit(SceneObjectList *OwnerList = NULL);
virtual void signal();
@@ -526,7 +531,8 @@ public:
virtual void postInit(SceneObjectList *OwnerList = NULL);
};
+} // End of namespace Ringworld
-} // End of namespace tSage
+} // End of namespace TsAGE
#endif
diff --git a/engines/tsage/ringworld_scenes2.cpp b/engines/tsage/ringworld/ringworld_scenes2.cpp
index 0154123c3d..e07c9253e6 100644
--- a/engines/tsage/ringworld_scenes2.cpp
+++ b/engines/tsage/ringworld/ringworld_scenes2.cpp
@@ -21,12 +21,14 @@
*/
#include "common/config-manager.h"
-#include "tsage/ringworld_scenes2.h"
+#include "tsage/ringworld/ringworld_scenes2.h"
#include "tsage/scenes.h"
#include "tsage/tsage.h"
#include "tsage/staticres.h"
-namespace tSage {
+namespace TsAGE {
+
+namespace Ringworld {
/*--------------------------------------------------------------------------
* Scene 1000 - Title Screen
@@ -34,11 +36,11 @@ namespace tSage {
*--------------------------------------------------------------------------*/
void Scene1000::Action1::signal() {
- Scene1000 *scene = (Scene1000 *)_globals->_sceneManager._scene;
+ Scene1000 *scene = (Scene1000 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
setDelay(10);
break;
case 1:
@@ -61,7 +63,7 @@ void Scene1000::Action1::signal() {
break;
}
case 3:
- _globals->_sceneManager.changeScene(1400);
+ g_globals->_sceneManager.changeScene(1400);
break;
}
@@ -70,7 +72,7 @@ void Scene1000::Action1::signal() {
void Scene1000::Action2::signal() {
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
setDelay(10);
break;
case 1:
@@ -80,7 +82,7 @@ void Scene1000::Action2::signal() {
break;
case 2:
SceneItem::display(0, 0);
- _globals->_sceneManager.changeScene(2000);
+ g_globals->_sceneManager.changeScene(2000);
break;
default:
break;
@@ -88,11 +90,11 @@ void Scene1000::Action2::signal() {
}
void Scene1000::Action3::signal() {
- Scene1000 *scene = (Scene1000 *)_globals->_sceneManager._scene;
+ Scene1000 *scene = (Scene1000 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_sceneManager._scene->loadBackground(0, 0);
+ g_globals->_sceneManager._scene->loadBackground(0, 0);
setDelay(60);
break;
case 1: {
@@ -106,11 +108,11 @@ void Scene1000::Action3::signal() {
setDelay(60);
break;
case 4:
- _globals->_player.show();
+ g_globals->_player.show();
setDelay(240);
break;
case 5: {
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
const char *SEEN_INTRO = "seen_intro";
if (!ConfMan.hasKey(SEEN_INTRO) || !ConfMan.getBool(SEEN_INTRO)) {
@@ -121,31 +123,31 @@ void Scene1000::Action3::signal() {
setDelay(1);
} else {
// Prompt user for whether to start play or watch introduction
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
if (MessageDialog::show2(WATCH_INTRO_MSG, START_PLAY_BTN_STRING, INTRODUCTION_BTN_STRING) == 0) {
_actionIndex = 20;
- _globals->_soundHandler.fadeOut(this);
+ g_globals->_soundHandler.fadeOut(this);
} else {
setDelay(1);
}
}
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
break;
}
case 6: {
scene->_object3.remove();
- _globals->_player.setStrip2(2);
+ g_globals->_player.setStrip2(2);
NpcMover *mover = new NpcMover();
Common::Point pt(480, 100);
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 7:
- _globals->_scenePalette.loadPalette(1002);
- _globals->_scenePalette.refresh();
- _globals->_scenePalette.addRotation(80, 95, -1);
+ g_globals->_scenePalette.loadPalette(1002);
+ g_globals->_scenePalette.refresh();
+ g_globals->_scenePalette.addRotation(80, 95, -1);
scene->_object3.postInit();
scene->_object3.setVisage(1002);
scene->_object3.setStrip(1);
@@ -214,14 +216,14 @@ void Scene1000::Action3::signal() {
break;
case 18:
zoom(false);
- _globals->_scenePalette.clearListeners();
- _globals->_soundHandler.fadeOut(this);
+ g_globals->_scenePalette.clearListeners();
+ g_globals->_soundHandler.fadeOut(this);
break;
case 19:
- _globals->_sceneManager.changeScene(10);
+ g_globals->_sceneManager.changeScene(10);
break;
case 20:
- _globals->_sceneManager.changeScene(30);
+ g_globals->_sceneManager.changeScene(30);
break;
default:
break;
@@ -229,19 +231,19 @@ void Scene1000::Action3::signal() {
}
void Scene1000::Action3::zoom(bool up) {
- Scene1000 *scene = (Scene1000 *)_globals->_sceneManager._scene;
+ Scene1000 *scene = (Scene1000 *)g_globals->_sceneManager._scene;
if (up) {
- while ((scene->_object3._percent < 100) && !_vm->shouldQuit()) {
+ while ((scene->_object3._percent < 100) && !g_vm->shouldQuit()) {
scene->_object3.changeZoom(MIN(scene->_object3._percent + 5, 100));
- _globals->_sceneObjects->draw();
- _globals->_events.delay(1);
+ g_globals->_sceneObjects->draw();
+ g_globals->_events.delay(1);
}
} else {
- while ((scene->_object3._percent > 0) && !_vm->shouldQuit()) {
+ while ((scene->_object3._percent > 0) && !g_vm->shouldQuit()) {
scene->_object3.changeZoom(MAX(scene->_object3._percent - 5, 0));
- _globals->_sceneObjects->draw();
- _globals->_events.delay(1);
+ g_globals->_sceneObjects->draw();
+ g_globals->_events.delay(1);
}
}
}
@@ -253,7 +255,7 @@ void Scene1000::postInit(SceneObjectList *OwnerList) {
setZoomPercents(0, 100, 200, 100);
loadScene(1000);
- if (_globals->_sceneManager._previousScene == 2000) {
+ if (g_globals->_sceneManager._previousScene == 2000) {
setZoomPercents(150, 10, 180, 100);
_object1.postInit();
_object1.setVisage(1001);
@@ -264,12 +266,12 @@ void Scene1000::postInit(SceneObjectList *OwnerList) {
setAction(&_action2);
- _globals->_sceneManager._scene->_sceneBounds.center(_object1._position.x, _object1._position.y);
- _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds);
+ g_globals->_sceneManager._scene->_sceneBounds.center(_object1._position.x, _object1._position.y);
+ g_globals->_sceneManager._scene->_sceneBounds.contain(g_globals->_sceneManager._scene->_backgroundBounds);
- _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
- _globals->_soundHandler.play(114);
- } else if (_globals->_sceneManager._previousScene == 2222) {
+ g_globals->_sceneOffset.x = (g_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
+ g_globals->_soundHandler.play(114);
+ } else if (g_globals->_sceneManager._previousScene == 2222) {
setZoomPercents(150, 10, 180, 100);
_object1.postInit();
_object1.setVisage(1001);
@@ -278,28 +280,28 @@ void Scene1000::postInit(SceneObjectList *OwnerList) {
_object1._moveDiff = Common::Point(2, 2);
_object1.setPosition(Common::Point(120, 180));
- _globals->_sceneManager._scene->_sceneBounds.center(_object1._position.x, _object1._position.y);
- _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds);
- _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
+ g_globals->_sceneManager._scene->_sceneBounds.center(_object1._position.x, _object1._position.y);
+ g_globals->_sceneManager._scene->_sceneBounds.contain(g_globals->_sceneManager._scene->_backgroundBounds);
+ g_globals->_sceneOffset.x = (g_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
setAction(&_action1);
} else {
- _globals->_soundHandler.play(4);
+ g_globals->_soundHandler.play(4);
setZoomPercents(0, 10, 30, 100);
_object3.postInit();
_object3.setVisage(1050);
_object3.changeZoom(-1);
_object3.setPosition(Common::Point(158, 0));
- _globals->_player.postInit();
- _globals->_player.setVisage(1050);
- _globals->_player.setStrip(3);
- _globals->_player.setPosition(Common::Point(160, 191));
- _globals->_player._moveDiff.x = 12;
- _globals->_player.hide();
- _globals->_player.disableControl();
+ g_globals->_player.postInit();
+ g_globals->_player.setVisage(1050);
+ g_globals->_player.setStrip(3);
+ g_globals->_player.setPosition(Common::Point(160, 191));
+ g_globals->_player._moveDiff.x = 12;
+ g_globals->_player.hide();
+ g_globals->_player.disableControl();
- _globals->_sceneManager._scene->_sceneBounds.center(_object3._position.x, _object3._position.y);
+ g_globals->_sceneManager._scene->_sceneBounds.center(_object3._position.x, _object3._position.y);
setAction(&_action3);
}
@@ -311,7 +313,7 @@ void Scene1000::postInit(SceneObjectList *OwnerList) {
*--------------------------------------------------------------------------*/
void Scene1001::Action1::signal() {
- Scene1001 *scene = (Scene1001 *)_globals->_sceneManager._scene;
+ Scene1001 *scene = (Scene1001 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -476,9 +478,9 @@ void Scene1001::Action1::signal() {
setDelay(30);
break;
case 19: {
- _globals->_soundHandler.play(91);
+ g_globals->_soundHandler.play(91);
byte adjustData[4] = {0xff, 0xff, 0xff, 0};
- _globals->_scenePalette.fade(adjustData, false, 0);
+ g_globals->_scenePalette.fade(adjustData, false, 0);
scene->_object1._strip = 7;
scene->_object1._frame = 1;
@@ -488,8 +490,8 @@ void Scene1001::Action1::signal() {
break;
}
case 20:
- _globals->_scenePalette.loadPalette(16);
- _globals->_scenePalette.refresh();
+ g_globals->_scenePalette.loadPalette(16);
+ g_globals->_scenePalette.refresh();
setDelay(6);
break;
case 21:
@@ -497,14 +499,14 @@ void Scene1001::Action1::signal() {
scene->_object1.animate(ANIM_MODE_5, this);
break;
case 22:
- _globals->_soundHandler.play(92);
+ g_globals->_soundHandler.play(92);
scene->_stripManager.start(111, this);
break;
case 23:
setDelay(60);
break;
case 24:
- _globals->_sceneManager.changeScene(2000);
+ g_globals->_sceneManager.changeScene(2000);
break;
}
}
@@ -527,7 +529,7 @@ void Scene1001::postInit(SceneObjectList *OwnerList) {
_object3.setStrip2(4);
_object3.setPosition(Common::Point(61, 177));
- _globals->_soundHandler.play(85);
+ g_globals->_soundHandler.play(85);
setAction(&_action1);
}
@@ -538,11 +540,11 @@ void Scene1001::postInit(SceneObjectList *OwnerList) {
*--------------------------------------------------------------------------*/
void Scene1250::Action1::signal() {
- Scene1250 *scene = (Scene1250 *)_globals->_sceneManager._scene;
+ Scene1250 *scene = (Scene1250 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- setDelay(_globals->_randomSource.getRandomNumber(120) + 60);
+ setDelay(g_globals->_randomSource.getRandomNumber(120) + 60);
break;
case 1:
scene->_object1.animate(ANIM_MODE_5, this);
@@ -552,11 +554,11 @@ void Scene1250::Action1::signal() {
}
void Scene1250::Action2::signal() {
- Scene1250 *scene = (Scene1250 *)_globals->_sceneManager._scene;
+ Scene1250 *scene = (Scene1250 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- switch (_globals->_randomSource.getRandomNumber(2)) {
+ switch (g_globals->_randomSource.getRandomNumber(2)) {
case 0:
scene->_object2.setPosition(Common::Point(163, 75));
break;
@@ -578,7 +580,7 @@ void Scene1250::Action2::signal() {
}
void Scene1250::Action3::signal() {
- Scene1250 *scene = (Scene1250 *)_globals->_sceneManager._scene;
+ Scene1250 *scene = (Scene1250 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -591,13 +593,13 @@ void Scene1250::Action3::signal() {
setDelay(6);
break;
case 3:
- _globals->_sceneManager.changeScene(1000);
+ g_globals->_sceneManager.changeScene(1000);
break;
}
}
void Scene1250::Action4::signal() {
- Scene1250 *scene = (Scene1250 *)_globals->_sceneManager._scene;
+ Scene1250 *scene = (Scene1250 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -610,7 +612,7 @@ void Scene1250::Action4::signal() {
setDelay(6);
break;
case 3:
- _globals->_sceneManager.changeScene(2000);
+ g_globals->_sceneManager.changeScene(2000);
break;
}
}
@@ -641,14 +643,14 @@ void Scene1250::postInit(SceneObjectList *OwnerList) {
_object2._frame = 1;
_object2.setAction(&_action2);
- _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds);
- _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
+ g_globals->_sceneManager._scene->_sceneBounds.contain(g_globals->_sceneManager._scene->_backgroundBounds);
+ g_globals->_sceneOffset.x = (g_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
- if ((_globals->_sceneManager._previousScene != 2000) || (_globals->_stripNum != 1250)) {
+ if ((g_globals->_sceneManager._previousScene != 2000) || (g_globals->_stripNum != 1250)) {
setAction(&_action4);
} else {
setAction(&_action3);
- _globals->_soundHandler.play(114);
+ g_globals->_soundHandler.play(114);
}
}
@@ -658,7 +660,7 @@ void Scene1250::postInit(SceneObjectList *OwnerList) {
*--------------------------------------------------------------------------*/
void Scene1400::Action1::signal() {
- Scene1400 *scene = (Scene1400 *)_globals->_sceneManager._scene;
+ Scene1400 *scene = (Scene1400 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -669,23 +671,23 @@ void Scene1400::Action1::signal() {
Common::Point pt(160, 700);
NpcMover *mover = new NpcMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 2: {
- _globals->_player.setStrip2(3);
- _globals->_player.changeZoom(100);
+ g_globals->_player.setStrip2(3);
+ g_globals->_player.changeZoom(100);
Common::Point pt(160, 100);
NpcMover *mover = new NpcMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
SceneItem::display(0, 0);
setDelay(360);
break;
}
case 3:
- SceneItem::display(1400, 2, SET_X, 60, SET_Y, _globals->_sceneManager._scene->_sceneBounds.bottom - 80,
+ SceneItem::display(1400, 2, SET_X, 60, SET_Y, g_globals->_sceneManager._scene->_sceneBounds.bottom - 80,
SET_FONT, 2, SET_FG_COLOR, 13, SET_POS_MODE, 0, SET_KEEP_ONSCREEN, -1, LIST_END);
setDelay(420);
break;
@@ -694,7 +696,7 @@ void Scene1400::Action1::signal() {
setDelay(360);
break;
case 5:
- SceneItem::display(1400, 3, SET_X, 60, SET_Y, _globals->_sceneManager._scene->_sceneBounds.bottom - 80,
+ SceneItem::display(1400, 3, SET_X, 60, SET_Y, g_globals->_sceneManager._scene->_sceneBounds.bottom - 80,
SET_FONT, 2, SET_FG_COLOR, 23, SET_POS_MODE, 0, SET_KEEP_ONSCREEN, -1, LIST_END);
setDelay(360);
break;
@@ -702,25 +704,25 @@ void Scene1400::Action1::signal() {
SceneItem::display(0, 0);
break;
case 7: {
- _globals->_player._frame = 1;
- _globals->_player.setStrip2(1);
- _globals->_player._numFrames = 5;
- _globals->_player.animate(ANIM_MODE_5, this);
+ g_globals->_player._frame = 1;
+ g_globals->_player.setStrip2(1);
+ g_globals->_player._numFrames = 5;
+ g_globals->_player.animate(ANIM_MODE_5, this);
Common::Point pt(205, 70);
NpcMover *mover = new NpcMover();
- _globals->_player.addMover(mover, &pt, NULL);
- _globals->_sceneManager._fadeMode = FADEMODE_NONE;
+ g_globals->_player.addMover(mover, &pt, NULL);
+ g_globals->_sceneManager._fadeMode = FADEMODE_NONE;
scene->loadScene(1402);
break;
}
case 8:
- _globals->_player.setStrip2(2);
- _globals->_player._numFrames = 10;
- _globals->_player.animate(ANIM_MODE_2, NULL);
+ g_globals->_player.setStrip2(2);
+ g_globals->_player._numFrames = 10;
+ g_globals->_player.animate(ANIM_MODE_2, NULL);
- SceneItem::display(1400, 4, SET_X, 30, SET_Y, _globals->_player._position.y + 10, SET_FONT, 2,
+ SceneItem::display(1400, 4, SET_X, 30, SET_Y, g_globals->_player._position.y + 10, SET_FONT, 2,
SET_FG_COLOR, 13, SET_POS_MODE, 0, SET_KEEP_ONSCREEN, -1, LIST_END);
setDelay(300);
break;
@@ -728,16 +730,16 @@ void Scene1400::Action1::signal() {
SceneItem::display(0, 0);
Common::Point pt(450, 45);
NpcMover *mover = new NpcMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 10:
- _globals->_sceneManager._scrollerRect = Rect(40, 20, 280, 180);
- _globals->_sceneManager._fadeMode = FADEMODE_GRADUAL;
- _globals->_stripNum = 1500;
- _globals->_soundHandler.stop();
+ g_globals->_sceneManager._scrollerRect = Rect(40, 20, 280, 180);
+ g_globals->_sceneManager._fadeMode = FADEMODE_GRADUAL;
+ g_globals->_stripNum = 1500;
+ g_globals->_soundHandler.stop();
- _globals->_sceneManager.changeScene(1500);
+ g_globals->_sceneManager.changeScene(1500);
break;
}
}
@@ -746,41 +748,41 @@ void Scene1400::Action1::dispatch() {
Action::dispatch();
if ((_actionIndex > 3) && (_actionIndex < 9))
- _globals->_sceneText.setPosition(Common::Point(60, _globals->_sceneManager._scene->_sceneBounds.bottom - 80));
+ g_globals->_sceneText.setPosition(Common::Point(60, g_globals->_sceneManager._scene->_sceneBounds.bottom - 80));
- if ((_actionIndex <= 2) && (_globals->_player._percent > 22))
- _globals->_player.changeZoom(100 - (800 - _globals->_player._position.y));
+ if ((_actionIndex <= 2) && (g_globals->_player._percent > 22))
+ g_globals->_player.changeZoom(100 - (800 - g_globals->_player._position.y));
- if ((_actionIndex >= 9) && (_globals->_player._percent > 22))
- _globals->_player.changeZoom(100 - (_globals->_player._position.x - 205));
+ if ((_actionIndex >= 9) && (g_globals->_player._percent > 22))
+ g_globals->_player.changeZoom(100 - (g_globals->_player._position.x - 205));
}
/*--------------------------------------------------------------------------*/
void Scene1400::postInit(SceneObjectList *OwnerList) {
- if (_globals->_stripNum != 1400) {
+ if (g_globals->_stripNum != 1400) {
loadScene(1401);
} else {
loadScene(1402);
}
Scene::postInit();
- _globals->_sceneManager._scrollerRect = Rect(40, 90, 280, 180);
- _globals->_player.postInit();
- _globals->_player.setVisage(1401);
- _globals->_player.animate(ANIM_MODE_2, 0);
- _globals->_player.setStrip2(4);
- _globals->_player.fixPriority(4);
- _globals->_player.disableControl();
+ g_globals->_sceneManager._scrollerRect = Rect(40, 90, 280, 180);
+ g_globals->_player.postInit();
+ g_globals->_player.setVisage(1401);
+ g_globals->_player.animate(ANIM_MODE_2, 0);
+ g_globals->_player.setStrip2(4);
+ g_globals->_player.fixPriority(4);
+ g_globals->_player.disableControl();
- _globals->_player._moveDiff = Common::Point(4, 2);
- _globals->_player.setPosition(Common::Point(160, 800));
- _globals->_sceneManager._scene->_sceneBounds.center(_globals->_player._position);
- _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds);
- _globals->_sceneOffset.y = (_globals->_sceneManager._scene->_sceneBounds.top / 100) * 100;
+ g_globals->_player._moveDiff = Common::Point(4, 2);
+ g_globals->_player.setPosition(Common::Point(160, 800));
+ g_globals->_sceneManager._scene->_sceneBounds.center(g_globals->_player._position);
+ g_globals->_sceneManager._scene->_sceneBounds.contain(g_globals->_sceneManager._scene->_backgroundBounds);
+ g_globals->_sceneOffset.y = (g_globals->_sceneManager._scene->_sceneBounds.top / 100) * 100;
setAction(&_action1);
- _globals->_soundHandler.play(118);
+ g_globals->_soundHandler.play(118);
}
/*--------------------------------------------------------------------------
@@ -789,7 +791,7 @@ void Scene1400::postInit(SceneObjectList *OwnerList) {
*--------------------------------------------------------------------------*/
void Scene1500::Action1::signal() {
- Scene1500 *scene = (Scene1500 *)_globals->_sceneManager._scene;
+ Scene1500 *scene = (Scene1500 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0: {
@@ -854,17 +856,17 @@ void Scene1500::Action1::signal() {
scene->_soundHandler.play(124, this);
break;
case 8:
- _globals->_soundHandler.play(126, this);
+ g_globals->_soundHandler.play(126, this);
break;
case 9:
- _globals->_soundHandler.play(127);
- _globals->_sceneManager.changeScene(2000);
+ g_globals->_soundHandler.play(127);
+ g_globals->_sceneManager.changeScene(2000);
break;
}
}
void Scene1500::Action2::signal() {
- Scene1500 *scene = (Scene1500 *)_globals->_sceneManager._scene;
+ Scene1500 *scene = (Scene1500 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -895,8 +897,8 @@ void Scene1500::Action2::signal() {
}
case 3:
scene->_soundHandler.release();
- _globals->_stripNum = 1505;
- _globals->_sceneManager.changeScene(2400);
+ g_globals->_stripNum = 1505;
+ g_globals->_sceneManager.changeScene(2400);
break;
}
}
@@ -907,8 +909,8 @@ void Scene1500::postInit(SceneObjectList *OwnerList) {
loadScene(1500);
Scene::postInit();
- if ((_globals->_stripNum == 1500) || ((_globals->_stripNum != 1504) && (_globals->_stripNum != 2751))) {
- _globals->_soundHandler.play(120);
+ if ((g_globals->_stripNum == 1500) || ((g_globals->_stripNum != 1504) && (g_globals->_stripNum != 2751))) {
+ g_globals->_soundHandler.play(120);
setZoomPercents(105, 20, 145, 100);
setAction(&_action1);
@@ -925,4 +927,6 @@ void Scene1500::postInit(SceneObjectList *OwnerList) {
}
}
-} // End of namespace tSage
+} // End of namespace Ringworld
+
+} // End of namespace TsAGE
diff --git a/engines/tsage/ringworld_scenes2.h b/engines/tsage/ringworld/ringworld_scenes2.h
index 93a8f04fd4..382d9d4157 100644
--- a/engines/tsage/ringworld_scenes2.h
+++ b/engines/tsage/ringworld/ringworld_scenes2.h
@@ -24,13 +24,18 @@
#define TSAGE_RINGWORLD_SCENES2_H
#include "common/scummsys.h"
-#include "tsage/ringworld_logic.h"
+#include "tsage/ringworld/ringworld_logic.h"
+#include "tsage/ringworld/ringworld_speakers.h"
#include "tsage/events.h"
#include "tsage/core.h"
#include "tsage/scenes.h"
#include "tsage/globals.h"
-namespace tSage {
+namespace TsAGE {
+
+namespace Ringworld {
+
+using namespace TsAGE;
class Scene1000 : public Scene {
/* Actions */
@@ -142,8 +147,8 @@ public:
virtual void postInit(SceneObjectList *OwnerList = NULL);
};
+} // End of namespace Ringworld
-
-} // End of namespace tSage
+} // End of namespace TsAGE
#endif
diff --git a/engines/tsage/ringworld_scenes3.cpp b/engines/tsage/ringworld/ringworld_scenes3.cpp
index 824a96a18b..81190aea7b 100644
--- a/engines/tsage/ringworld_scenes3.cpp
+++ b/engines/tsage/ringworld/ringworld_scenes3.cpp
@@ -21,12 +21,14 @@
*/
#include "common/config-manager.h"
-#include "tsage/ringworld_scenes3.h"
+#include "tsage/ringworld/ringworld_scenes3.h"
#include "tsage/scenes.h"
#include "tsage/tsage.h"
#include "tsage/staticres.h"
-namespace tSage {
+namespace TsAGE {
+
+namespace Ringworld {
/*--------------------------------------------------------------------------
* Scene 2000 - Cockpit cutscenes
@@ -34,7 +36,7 @@ namespace tSage {
*--------------------------------------------------------------------------*/
void Scene2000::Action1::signal() {
- Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene;
+ Scene2000 *scene = (Scene2000 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -47,82 +49,82 @@ void Scene2000::Action1::signal() {
setDelay(4);
break;
case 3:
- _globals->_stripNum = 0;
- _globals->_sceneManager.changeScene(1250);
+ g_globals->_stripNum = 0;
+ g_globals->_sceneManager.changeScene(1250);
break;
}
}
void Scene2000::Action2::signal() {
- Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene;
+ Scene2000 *scene = (Scene2000 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
scene->_object2.animate(ANIM_MODE_6, NULL);
- setDelay(_globals->_randomSource.getRandomNumber(179) + 60);
+ setDelay(g_globals->_randomSource.getRandomNumber(179) + 60);
break;
case 1:
- setDelay(_globals->_randomSource.getRandomNumber(179) + 60);
- if (_globals->_randomSource.getRandomNumber(4) >= 2)
+ setDelay(g_globals->_randomSource.getRandomNumber(179) + 60);
+ if (g_globals->_randomSource.getRandomNumber(4) >= 2)
_actionIndex = 0;
break;
case 2:
- setDelay(_globals->_randomSource.getRandomNumber(179) + 60);
- _actionIndex = _globals->_randomSource.getRandomNumber(1);
+ setDelay(g_globals->_randomSource.getRandomNumber(179) + 60);
+ _actionIndex = g_globals->_randomSource.getRandomNumber(1);
break;
}
}
void Scene2000::Action3::signal() {
- Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene;
+ Scene2000 *scene = (Scene2000 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
scene->_object6.animate(ANIM_MODE_5, NULL);
- setDelay(_globals->_randomSource.getRandomNumber(179) + 60);
+ setDelay(g_globals->_randomSource.getRandomNumber(179) + 60);
break;
case 1:
scene->_object6.animate(ANIM_MODE_6, NULL);
- setDelay(_globals->_randomSource.getRandomNumber(179) + 60);
+ setDelay(g_globals->_randomSource.getRandomNumber(179) + 60);
_actionIndex = 0;
break;
}
}
void Scene2000::Action4::signal() {
- Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene;
+ Scene2000 *scene = (Scene2000 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
scene->_object4.animate(ANIM_MODE_5, NULL);
- setDelay(_globals->_randomSource.getRandomNumber(179) + 60);
+ setDelay(g_globals->_randomSource.getRandomNumber(179) + 60);
break;
case 1:
scene->_object4.animate(ANIM_MODE_6, NULL);
- setDelay(_globals->_randomSource.getRandomNumber(179) + 60);
+ setDelay(g_globals->_randomSource.getRandomNumber(179) + 60);
_actionIndex = 0;
break;
}
}
void Scene2000::Action5::signal() {
- Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene;
+ Scene2000 *scene = (Scene2000 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
scene->_object3.animate(ANIM_MODE_5, NULL);
- setDelay(_globals->_randomSource.getRandomNumber(125) + 300);
+ setDelay(g_globals->_randomSource.getRandomNumber(125) + 300);
break;
case 1:
scene->_object3.animate(ANIM_MODE_6, NULL);
- setDelay(_globals->_randomSource.getRandomNumber(125) + 300);
+ setDelay(g_globals->_randomSource.getRandomNumber(125) + 300);
_actionIndex = 0;
break;
}
}
void Scene2000::Action6::signal() {
- Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene;
+ Scene2000 *scene = (Scene2000 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -133,7 +135,7 @@ void Scene2000::Action6::signal() {
scene->_stripManager.start(2000, this);
break;
case 2:
- _globals->_soundHandler.play(81);
+ g_globals->_soundHandler.play(81);
scene->_object6.postInit();
scene->_object6.setVisage(2003);
scene->_object6.setAction(NULL);
@@ -148,15 +150,15 @@ void Scene2000::Action6::signal() {
scene->_object6.animate(ANIM_MODE_6, this);
break;
case 5:
- _globals->_soundHandler.play(80);
+ g_globals->_soundHandler.play(80);
scene->_object6.remove();
- _globals->_sceneManager.changeScene(1001);
+ g_globals->_sceneManager.changeScene(1001);
break;
}
}
void Scene2000::Action7::signal() {
- Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene;
+ Scene2000 *scene = (Scene2000 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -169,13 +171,13 @@ void Scene2000::Action7::signal() {
setDelay(3);
break;
case 3:
- _globals->_sceneManager.changeScene(2222);
+ g_globals->_sceneManager.changeScene(2222);
break;
}
}
void Scene2000::Action8::signal() {
- Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene;
+ Scene2000 *scene = (Scene2000 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -188,14 +190,14 @@ void Scene2000::Action8::signal() {
setDelay(10);
break;
case 3:
- _globals->_stripNum = 2005;
- _globals->_sceneManager.changeScene(1000);
+ g_globals->_stripNum = 2005;
+ g_globals->_sceneManager.changeScene(1000);
break;
}
}
void Scene2000::Action9::signal() {
- Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene;
+ Scene2000 *scene = (Scene2000 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -208,8 +210,8 @@ void Scene2000::Action9::signal() {
setDelay(3);
break;
case 3:
- _globals->_stripNum = 2008;
- _globals->_sceneManager.changeScene(9999);
+ g_globals->_stripNum = 2008;
+ g_globals->_sceneManager.changeScene(9999);
break;
}
}
@@ -228,14 +230,14 @@ void Scene2000::Action10::signal() {
break;
case 3:
SceneItem::display(0, 0);
- _globals->_stripNum = 0;
- _globals->_sceneManager.changeScene(9999);
+ g_globals->_stripNum = 0;
+ g_globals->_sceneManager.changeScene(9999);
break;
}
}
void Scene2000::Action11::signal() {
- Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene;
+ Scene2000 *scene = (Scene2000 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -248,35 +250,35 @@ void Scene2000::Action11::signal() {
scene->_stripManager.start(2077, this);
break;
case 3:
- _globals->_stripNum = 0;
- _globals->_sceneManager.changeScene(1400);
+ g_globals->_stripNum = 0;
+ g_globals->_sceneManager.changeScene(1400);
break;
}
}
void Scene2000::Action12::signal() {
- Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene;
+ Scene2000 *scene = (Scene2000 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(60);
break;
case 1:
- _globals->_events.setCursor(CURSOR_WALK);
+ g_globals->_events.setCursor(CURSOR_WALK);
scene->_stripManager.start(2020, this);
break;
case 2:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
setDelay(10);
break;
case 3:
- _globals->_sceneManager.changeScene(2300);
+ g_globals->_sceneManager.changeScene(2300);
break;
}
}
void Scene2000::Action13::signal() {
- Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene;
+ Scene2000 *scene = (Scene2000 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -287,18 +289,18 @@ void Scene2000::Action13::signal() {
break;
case 2:
SceneItem::display(0, 0);
- _globals->_stripNum = 2751;
- _globals->_sceneManager.changeScene(1500);
+ g_globals->_stripNum = 2751;
+ g_globals->_sceneManager.changeScene(1500);
break;
}
}
void Scene2000::Action14::signal() {
- Scene2000 *scene = (Scene2000 *)_globals->_sceneManager._scene;
+ Scene2000 *scene = (Scene2000 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
setDelay(30);
break;
case 1:
@@ -308,12 +310,12 @@ void Scene2000::Action14::signal() {
setDelay(60);
break;
case 3:
- _globals->_soundHandler.play(99);
+ g_globals->_soundHandler.play(99);
scene->_object8.show();
scene->_object8.animate(ANIM_MODE_5, this);
break;
case 4:
- _globals->_soundHandler.play(12);
+ g_globals->_soundHandler.play(12);
scene->_object8.setStrip(2);
scene->_object8.setFrame(1);
scene->_object9.show();
@@ -324,7 +326,7 @@ void Scene2000::Action14::signal() {
scene->_stripManager.start(2001, this, scene);
break;
case 6:
- _globals->_soundHandler.fadeOut(0/* was false */);
+ g_globals->_soundHandler.fadeOut(NULL);
scene->_object8.setStrip(1);
scene->_object8.setFrame(scene->_object8.getFrameCount());
scene->_object8.animate(ANIM_MODE_6, this);
@@ -333,7 +335,7 @@ void Scene2000::Action14::signal() {
scene->_object10.remove();
break;
case 7:
- _globals->_soundHandler.play(111);
+ g_globals->_soundHandler.play(111);
scene->_object8.remove();
setDelay(5);
break;
@@ -341,8 +343,8 @@ void Scene2000::Action14::signal() {
scene->_stripManager.start(2071, this);
break;
case 9:
- _globals->_stripNum = 1250;
- _globals->_sceneManager.changeScene(1000);
+ g_globals->_stripNum = 1250;
+ g_globals->_sceneManager.changeScene(1000);
break;
}
}
@@ -384,7 +386,7 @@ void Scene2000::postInit(SceneObjectList *OwnerList) {
_object2.setPosition(Common::Point(43, 115));
_object2.setAction(&_action2);
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
_object6.postInit();
_object6.setVisage(2003);
@@ -413,7 +415,7 @@ void Scene2000::postInit(SceneObjectList *OwnerList) {
_object10.fixPriority(195);
_object10.hide();
- switch (_globals->_sceneManager._previousScene) {
+ switch (g_globals->_sceneManager._previousScene) {
case 1000:
setAction(&_action7);
break;
@@ -425,11 +427,11 @@ void Scene2000::postInit(SceneObjectList *OwnerList) {
setAction(&_action13);
break;
case 2200:
- _globals->_soundHandler.play(111);
+ g_globals->_soundHandler.play(111);
setAction(&_action14);
break;
case 2222:
- _globals->_soundHandler.play(115);
+ g_globals->_soundHandler.play(115);
setAction(&_action8);
break;
case 3500:
@@ -437,28 +439,28 @@ void Scene2000::postInit(SceneObjectList *OwnerList) {
break;
default:
_object6.remove();
- _globals->_soundHandler.play(80);
+ g_globals->_soundHandler.play(80);
setAction(&_action6);
break;
}
_soundHandler1.play(78);
- _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds);
- _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
+ g_globals->_sceneManager._scene->_sceneBounds.contain(g_globals->_sceneManager._scene->_backgroundBounds);
+ g_globals->_sceneOffset.x = (g_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
}
void Scene2000::stripCallback(int v) {
switch (v) {
case 0:
_object9.setStrip(3);
- _object9.animate(ANIM_MODE_7, NULL);
+ _object9.animate(ANIM_MODE_7, 0, NULL);
_object10.setStrip(6);
_object10.setFrame(1);
_object10.animate(ANIM_MODE_5, NULL);
break;
case 1:
_object10.setStrip(5);
- _object10.animate(ANIM_MODE_7, NULL);
+ _object10.animate(ANIM_MODE_7, 0, NULL);
_object9.setStrip(4);
_object9.setFrame(1);
_object9.animate(ANIM_MODE_5, NULL);
@@ -483,22 +485,22 @@ void Scene2000::stripCallback(int v) {
*--------------------------------------------------------------------------*/
void Scene2100::Action1::signal() {
- Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
+ Scene2100 *scene = (Scene2100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
if (!scene->_sitFl)
setDelay(1);
else {
- setAction(&scene->_sequenceManager, this, 2102, &_globals->_player, NULL);
+ setAction(&scene->_sequenceManager, this, 2102, &g_globals->_player, NULL);
scene->_sitFl = 0;
}
break;
case 1: {
Common::Point pt(157, 62);
PlayerMover *mover = new PlayerMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 2:
@@ -508,15 +510,15 @@ void Scene2100::Action1::signal() {
case 3: {
Common::Point pt(157, 56);
NpcMover *mover = new NpcMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 4:
- _globals->_player._strip = 3;
+ g_globals->_player._strip = 3;
setDelay(3);
break;
case 5:
- _globals->_player.fixPriority(1);
+ g_globals->_player.fixPriority(1);
scene->_area1.display();
scene->_area2.display();
scene->_area3.display();
@@ -524,12 +526,12 @@ void Scene2100::Action1::signal() {
scene->_area1.draw(true);
_state = 0;
- _globals->_events.setCursor(CURSOR_USE);
+ g_globals->_events.setCursor(CURSOR_USE);
- while (!_state && !_vm->getEventManager()->shouldQuit()) {
+ while (!_state && !g_vm->shouldQuit()) {
// Wait for an event
Event event;
- if (!_globals->_events.getEvent(event)) {
+ if (!g_globals->_events.getEvent(event)) {
g_system->updateScreen();
g_system->delayMillis(10);
continue;
@@ -568,37 +570,37 @@ void Scene2100::Action1::signal() {
if (_state == 2100) {
Common::Point pt(157, 65);
NpcMover *mover = new NpcMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
} else {
- _globals->_sceneManager.changeScene(_state);
+ g_globals->_sceneManager.changeScene(_state);
}
break;
case 7:
- _globals->_player.fixPriority(-1);
+ g_globals->_player.fixPriority(-1);
scene->_soundHandler.play(162);
scene->_object1.animate(ANIM_MODE_6, this);
break;
case 8:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
remove();
break;
}
}
void Scene2100::Action2::signal() {
- Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
+ Scene2100 *scene = (Scene2100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
scene->_object3._numFrames = 5;
- setDelay(_globals->_randomSource.getRandomNumber(59));
+ setDelay(g_globals->_randomSource.getRandomNumber(59));
break;
case 1:
scene->_object3.animate(ANIM_MODE_5, this);
break;
case 2:
- setDelay(_globals->_randomSource.getRandomNumber(59));
+ setDelay(g_globals->_randomSource.getRandomNumber(59));
break;
case 3:
scene->_object3.animate(ANIM_MODE_6, this);
@@ -608,12 +610,12 @@ void Scene2100::Action2::signal() {
}
void Scene2100::Action3::signal() {
- Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
+ Scene2100 *scene = (Scene2100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
case 2:
- setDelay(_globals->_randomSource.getRandomNumber(119));
+ setDelay(g_globals->_randomSource.getRandomNumber(119));
break;
case 1:
scene->_object2.animate(ANIM_MODE_5, this);
@@ -626,64 +628,64 @@ void Scene2100::Action3::signal() {
}
void Scene2100::Action4::signal() {
- Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
+ Scene2100 *scene = (Scene2100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
if (!scene->_sitFl)
setDelay(1);
else
- setAction(&scene->_sequenceManager, this, 2102, &_globals->_player, NULL);
+ setAction(&scene->_sequenceManager, this, 2102, &g_globals->_player, NULL);
break;
case 1: {
Common::Point pt(80, 66);
PlayerMover *mover = new PlayerMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 2:
- _globals->_player.setVisage(2109);
- _globals->_player._frame = 1;
- _globals->_player._strip = 2;
- _globals->_player.animate(ANIM_MODE_5, this);
+ g_globals->_player.setVisage(2109);
+ g_globals->_player._frame = 1;
+ g_globals->_player._strip = 2;
+ g_globals->_player.animate(ANIM_MODE_5, this);
break;
case 3:
- _globals->_sceneManager.changeScene(2120);
+ g_globals->_sceneManager.changeScene(2120);
break;
}
}
void Scene2100::Action5::signal() {
// Quinn enters the cokpit after Seeker decided to enter the cave alone
- Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
+ Scene2100 *scene = (Scene2100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(30);
break;
case 1:
- setAction(&scene->_sequenceManager, this, 2104, &_globals->_player, &scene->_object1, NULL);
+ setAction(&scene->_sequenceManager, this, 2104, &g_globals->_player, &scene->_object1, NULL);
break;
case 2: {
Common::Point pt(272, 127);
NpcMover *mover = new NpcMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 3:
- _globals->_player.checkAngle(&scene->_object3);
+ g_globals->_player.checkAngle(&scene->_object3);
setDelay(30);
break;
case 4:
- _globals->_sceneManager.changeScene(3700);
+ g_globals->_sceneManager.changeScene(3700);
break;
}
}
void Scene2100::Action6::signal() {
// Seeker stands up and walks to the elevator
- Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
+ Scene2100 *scene = (Scene2100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0: {
@@ -715,50 +717,50 @@ void Scene2100::Action6::signal() {
}
void Scene2100::Action7::signal() {
- Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
+ Scene2100 *scene = (Scene2100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(60);
break;
case 1:
- setAction(&scene->_sequenceManager, this, 2104, &_globals->_player, &scene->_object1, NULL);
+ setAction(&scene->_sequenceManager, this, 2104, &g_globals->_player, &scene->_object1, NULL);
break;
case 2:
- setAction(&scene->_sequenceManager, this, 2104, &_globals->_player, NULL);
+ setAction(&scene->_sequenceManager, this, 2104, &g_globals->_player, NULL);
break;
case 3:
- _globals->_sceneManager.changeScene(8100);
+ g_globals->_sceneManager.changeScene(8100);
break;
}
}
void Scene2100::Action8::signal() {
- Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
+ Scene2100 *scene = (Scene2100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(60);
break;
case 1:
- setAction(&scene->_sequenceManager, this, 2104, &_globals->_player, &scene->_object1, NULL);
+ setAction(&scene->_sequenceManager, this, 2104, &g_globals->_player, &scene->_object1, NULL);
break;
case 2: {
Common::Point pt(200, 174);
PlayerMover *mover = new PlayerMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 3:
- _globals->_player.checkAngle(&scene->_object3);
+ g_globals->_player.checkAngle(&scene->_object3);
scene->_stripManager.start((RING_INVENTORY._translator._sceneNumber == 1) ? 7720 : 7710, this);
break;
case 4:
if (RING_INVENTORY._translator._sceneNumber != 1)
- _globals->_sceneManager.changeScene(7600);
+ g_globals->_sceneManager.changeScene(7600);
else {
- _globals->setFlag(24);
- _globals->_player.enableControl();
+ g_globals->setFlag(24);
+ g_globals->_player.enableControl();
remove();
}
break;
@@ -766,7 +768,7 @@ void Scene2100::Action8::signal() {
}
void Scene2100::Action9::signal() {
- Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
+ Scene2100 *scene = (Scene2100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -786,14 +788,14 @@ void Scene2100::Action9::signal() {
scene->_stripManager.start(6051, this, scene);
break;
case 4:
- scene->_soundHandler.fadeOut(0/* was false */);
+ scene->_soundHandler.fadeOut(NULL);
scene->_object4.setStrip(1);
scene->_object4.setFrame(scene->_object4.getFrameCount());
scene->_object4.animate(ANIM_MODE_6, this);
break;
case 5:
scene->_object4.hide();
- _globals->_events.setCursor(CURSOR_WALK);
+ g_globals->_events.setCursor(CURSOR_WALK);
scene->_stripManager.start(6010, this);
break;
case 6:
@@ -806,20 +808,20 @@ void Scene2100::Action9::signal() {
}
void Scene2100::Action10::signal() {
- Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
+ Scene2100 *scene = (Scene2100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(60);
break;
case 1:
- setAction(&scene->_sequenceManager, this, 2102, &_globals->_player, NULL);
+ setAction(&scene->_sequenceManager, this, 2102, &g_globals->_player, NULL);
break;
case 2: {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
Common::Point pt(155, 64);
PlayerMover *mover = new PlayerMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 3:
@@ -851,10 +853,10 @@ void Scene2100::Action10::signal() {
scene->_object1.animate(ANIM_MODE_5, this);
break;
case 6: {
- _globals->_player.fixPriority(1);
+ g_globals->_player.fixPriority(1);
Common::Point pt(144, 54);
NpcMover *mover = new NpcMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 7: {
@@ -870,8 +872,8 @@ void Scene2100::Action10::signal() {
break;
}
case 8:
- _globals->_player.fixPriority(1);
- _globals->_player.setStrip(1);
+ g_globals->_player.fixPriority(1);
+ g_globals->_player.setStrip(1);
scene->_object3.fixPriority(1);
scene->_object3.setStrip(2);
scene->_object2.fixPriority(2);
@@ -884,16 +886,16 @@ void Scene2100::Action10::signal() {
scene->_object1.animate(ANIM_MODE_6, this);
break;
case 10:
- _globals->setFlag(70);
- _globals->_stripNum = 2101;
- _globals->_sceneManager.changeScene(2320);
+ g_globals->setFlag(70);
+ g_globals->_stripNum = 2101;
+ g_globals->_sceneManager.changeScene(2320);
break;
}
}
void Scene2100::Action11::signal() {
// Miranda stands up and walks to the elevator
- Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
+ Scene2100 *scene = (Scene2100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -951,16 +953,16 @@ void Scene2100::Action11::signal() {
case 7:
scene->_object3.remove();
scene->_object2.remove();
- _globals->setFlag(70);
- _globals->_stripNum = 2102;
- _globals->_player.enableControl();
- _globals->_player._canWalk = false;
+ g_globals->setFlag(70);
+ g_globals->_stripNum = 2102;
+ g_globals->_player.enableControl();
+ g_globals->_player._canWalk = false;
break;
}
}
void Scene2100::Action12::signal() {
- Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
+ Scene2100 *scene = (Scene2100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -976,7 +978,7 @@ void Scene2100::Action12::signal() {
case 3: {
Common::Point pt1(158, 74);
NpcMover *mover1 = new NpcMover();
- _globals->_player.addMover(mover1, &pt1, this);
+ g_globals->_player.addMover(mover1, &pt1, this);
Common::Point pt2(158, 68);
NpcMover *mover2 = new NpcMover();
@@ -987,10 +989,10 @@ void Scene2100::Action12::signal() {
scene->_soundHandler.play(162);
scene->_object1.animate(ANIM_MODE_6, NULL);
- _globals->_player.fixPriority(-1);
+ g_globals->_player.fixPriority(-1);
Common::Point pt1(277, 84);
PlayerMover *mover1 = new PlayerMover();
- _globals->_player.addMover(mover1, &pt1, this);
+ g_globals->_player.addMover(mover1, &pt1, this);
scene->_object2.fixPriority(-1);
Common::Point pt2(255, 76);
@@ -999,29 +1001,29 @@ void Scene2100::Action12::signal() {
break;
}
case 6:
- _globals->_player.setStrip(4);
+ g_globals->_player.setStrip(4);
scene->_object2.setStrip(4);
setDelay(60);
break;
case 7:
- _globals->_events.setCursor(CURSOR_WALK);
+ g_globals->_events.setCursor(CURSOR_WALK);
scene->_stripManager.start(6052, this);
break;
case 8:
if (scene->_stripManager._field2E8 == 320)
- _globals->setFlag(74);
+ g_globals->setFlag(74);
setDelay(30);
break;
case 9:
- _globals->_events.setCursor(OBJECT_STUNNER);
+ g_globals->_events.setCursor(OBJECT_STUNNER);
scene->_object2.setAction(&scene->_action13);
setDelay(60);
break;
case 10:
- if (_globals->getFlag(74))
+ if (g_globals->getFlag(74))
setDelay(1);
else
- setAction(&scene->_sequenceManager, this, 2101, &_globals->_player, NULL);
+ setAction(&scene->_sequenceManager, this, 2101, &g_globals->_player, NULL);
break;
case 11:
scene->_stripManager.start(2170, this);
@@ -1030,14 +1032,14 @@ void Scene2100::Action12::signal() {
setDelay(5);
break;
case 13:
- scene->_stripManager.start(_globals->getFlag(74) ? 2172 : 2174, this);
+ scene->_stripManager.start(g_globals->getFlag(74) ? 2172 : 2174, this);
break;
case 14:
- if (_globals->getFlag(74)) {
- _globals->_stripNum = 6100;
- _globals->_sceneManager.changeScene(2320);
+ if (g_globals->getFlag(74)) {
+ g_globals->_stripNum = 6100;
+ g_globals->_sceneManager.changeScene(2320);
} else {
- _globals->_sceneManager.changeScene(6100);
+ g_globals->_sceneManager.changeScene(6100);
}
remove();
break;
@@ -1045,7 +1047,7 @@ void Scene2100::Action12::signal() {
}
void Scene2100::Action13::signal() {
- Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
+ Scene2100 *scene = (Scene2100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -1080,17 +1082,17 @@ void Scene2100::Action13::signal() {
}
void Scene2100::Action14::signal() {
- Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
+ Scene2100 *scene = (Scene2100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(6);
break;
case 1:
- setAction(&scene->_sequenceManager, this, 2104, &_globals->_player, &scene->_object1, NULL);
+ setAction(&scene->_sequenceManager, this, 2104, &g_globals->_player, &scene->_object1, NULL);
break;
case 2:
- setAction(&scene->_sequenceManager, this, 2101, &_globals->_player, NULL);
+ setAction(&scene->_sequenceManager, this, 2101, &g_globals->_player, NULL);
break;
case 3:
scene->_stripManager.start(6008, this);
@@ -1105,7 +1107,7 @@ void Scene2100::Action14::signal() {
scene->_stripManager.start(6009, this, scene);
break;
case 6:
- scene->_soundHandler.fadeOut(0/* was false */);
+ scene->_soundHandler.fadeOut(NULL);
scene->_object4.setStrip(1);
scene->_object4.setFrame(scene->_object4.getFrameCount());
scene->_object4.animate(ANIM_MODE_6, this);
@@ -1158,14 +1160,14 @@ void Scene2100::Action14::signal() {
setDelay(90);
break;
case 15:
- _globals->_sceneManager.changeScene(7000);
+ g_globals->_sceneManager.changeScene(7000);
remove();
break;
}
}
void Scene2100::Action15::signal() {
- Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
+ Scene2100 *scene = (Scene2100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -1230,7 +1232,7 @@ void Scene2100::Action15::signal() {
}
void Scene2100::Action16::signal() {
- Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
+ Scene2100 *scene = (Scene2100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -1241,13 +1243,13 @@ void Scene2100::Action16::signal() {
scene->_stripManager.start(7001, this);
break;
case 2:
- setAction(&scene->_sequenceManager, this, 2102, &_globals->_player, NULL);
+ setAction(&scene->_sequenceManager, this, 2102, &g_globals->_player, NULL);
break;
case 3: {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
Common::Point pt(155, 63);
PlayerMover *mover = new PlayerMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 5:
@@ -1257,12 +1259,12 @@ void Scene2100::Action16::signal() {
case 6: {
Common::Point pt(160, 54);
NpcMover *mover = new NpcMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 7:
- _globals->_player.fixPriority(1);
- _globals->_player.setStrip(3);
+ g_globals->_player.fixPriority(1);
+ g_globals->_player.setStrip(3);
setDelay(45);
break;
case 8:
@@ -1270,26 +1272,26 @@ void Scene2100::Action16::signal() {
scene->_object1.animate(ANIM_MODE_6, this);
break;
case 9:
- _globals->setFlag(15);
- _globals->setFlag(36);
- _globals->_sceneManager.changeScene(7000);
+ g_globals->setFlag(15);
+ g_globals->setFlag(36);
+ g_globals->_sceneManager.changeScene(7000);
remove();
break;
}
}
void Scene2100::Action17::signal() {
- Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
+ Scene2100 *scene = (Scene2100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(60);
break;
case 1:
- setAction(&scene->_sequenceManager, this, 2104, &_globals->_player, &scene->_object1, NULL);
+ setAction(&scene->_sequenceManager, this, 2104, &g_globals->_player, &scene->_object1, NULL);
break;
case 2:
- setAction(&scene->_sequenceManager, this, 2101, &_globals->_player, NULL);
+ setAction(&scene->_sequenceManager, this, 2101, &g_globals->_player, NULL);
break;
case 3:
scene->_stripManager.start(7070, this);
@@ -1315,7 +1317,7 @@ void Scene2100::Action17::signal() {
break;
case 8:
RING_INVENTORY._stasisNegator._sceneNumber = 1;
- _globals->_sceneManager.changeScene(9100);
+ g_globals->_sceneManager.changeScene(9100);
remove();
break;
}
@@ -1324,17 +1326,17 @@ void Scene2100::Action17::signal() {
/*--------------------------------------------------------------------------*/
void Scene2100::Hotspot2::doAction(int action) {
- Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
+ Scene2100 *scene = (Scene2100 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2100, 3);
break;
case CURSOR_USE:
- if (_globals->getFlag(13))
+ if (g_globals->getFlag(13))
SceneItem::display2(2100, 29);
else {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->setAction(&scene->_action4);
}
break;
@@ -1346,17 +1348,17 @@ void Scene2100::Hotspot2::doAction(int action) {
void Scene2100::Hotspot3::doAction(int action) {
// Computer, on the left
- Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
+ Scene2100 *scene = (Scene2100 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2100, 4);
break;
case CURSOR_USE:
- if (_globals->getFlag(13))
+ if (g_globals->getFlag(13))
SceneItem::display2(2100, 29);
else {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->setAction(&scene->_action4);
}
break;
@@ -1381,17 +1383,17 @@ void Scene2100::Hotspot4::doAction(int action) {
}
void Scene2100::Hotspot8::doAction(int action) {
- Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
+ Scene2100 *scene = (Scene2100 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2100, 12);
break;
case CURSOR_USE:
- if (_globals->getFlag(13))
+ if (g_globals->getFlag(13))
SceneItem::display2(2100, 29);
else {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->setAction(&scene->_action4);
}
break;
@@ -1403,7 +1405,7 @@ void Scene2100::Hotspot8::doAction(int action) {
void Scene2100::Hotspot10::doAction(int action) {
// Quinn's Console
- Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
+ Scene2100 *scene = (Scene2100 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
@@ -1411,15 +1413,15 @@ void Scene2100::Hotspot10::doAction(int action) {
break;
case CURSOR_USE:
if (scene->_sitFl) {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_sceneMode = 2102;
- scene->setAction(&scene->_sequenceManager, scene, 2102, &_globals->_player, NULL);
- } else if (_globals->getFlag(13)) {
+ scene->setAction(&scene->_sequenceManager, scene, 2102, &g_globals->_player, NULL);
+ } else if (g_globals->getFlag(13)) {
SceneItem::display2(2100, 28);
} else {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_sceneMode = 2101;
- scene->setAction(&scene->_sequenceManager, scene, 2101, &_globals->_player, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 2101, &g_globals->_player, NULL);
}
break;
default:
@@ -1431,13 +1433,13 @@ void Scene2100::Hotspot10::doAction(int action) {
void Scene2100::Hotspot14::doAction(int action) {
switch (action) {
case CURSOR_LOOK:
- if (_globals->getFlag(0))
+ if (g_globals->getFlag(0))
SceneItem::display2(2100, 19);
else
SceneItem::display2(2100, 18);
break;
case CURSOR_USE:
- if (_globals->getFlag(1))
+ if (g_globals->getFlag(1))
SceneItem::display2(2100, 21);
else
SceneItem::display2(2100, 20);
@@ -1450,7 +1452,7 @@ void Scene2100::Hotspot14::doAction(int action) {
void Scene2100::Object1::doAction(int action) {
// Elevator
- Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
+ Scene2100 *scene = (Scene2100 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
@@ -1466,29 +1468,29 @@ void Scene2100::Object1::doAction(int action) {
}
void Scene2100::Object2::doAction(int action) {
- Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
+ Scene2100 *scene = (Scene2100 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2100, 30);
break;
case CURSOR_TALK:
- if (_globals->getFlag(72)) {
- _globals->_player.disableControl();
- if (!_globals->getFlag(52)) {
+ if (g_globals->getFlag(72)) {
+ g_globals->_player.disableControl();
+ if (!g_globals->getFlag(52)) {
scene->_sceneMode = 2111;
scene->setAction(&scene->_sequenceManager, scene, 2111, NULL);
} else {
- scene->_sceneMode = _globals->getFlag(53) ? 2112 : 2110;
+ scene->_sceneMode = g_globals->getFlag(53) ? 2112 : 2110;
scene->setAction(&scene->_sequenceManager, scene, scene->_sceneMode, NULL);
}
- } else if (_globals->getFlag(13)) {
+ } else if (g_globals->getFlag(13)) {
SceneItem::display2(2100, 31);
- } else if (_globals->getFlag(14)) {
+ } else if (g_globals->getFlag(14)) {
SceneItem::display2(2100, 32);
} else {
- _globals->setFlag(14);
- _globals->_player.disableControl();
+ g_globals->setFlag(14);
+ g_globals->_player.disableControl();
scene->_sceneMode = 2108;
scene->setAction(&scene->_sequenceManager, scene, 2109, NULL);
}
@@ -1501,19 +1503,19 @@ void Scene2100::Object2::doAction(int action) {
void Scene2100::Object3::doAction(int action) {
// Miranda
- Scene2100 *scene = (Scene2100 *)_globals->_sceneManager._scene;
+ Scene2100 *scene = (Scene2100 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
- if (_globals->getFlag(59))
+ if (g_globals->getFlag(59))
SceneItem::display2(2100, 34);
else
error("***I have no response.");
break;
case CURSOR_TALK:
- if (_globals->getFlag(59)) {
- _globals->_player.disableControl();
+ if (g_globals->getFlag(59)) {
+ g_globals->_player.disableControl();
scene->_sceneMode = 2108;
scene->setAction(&scene->_sequenceManager, scene, 2108, NULL);
} else {
@@ -1564,7 +1566,7 @@ void Scene2100::postInit(SceneObjectList *OwnerList) {
_stripManager.addSpeaker(&_speakerHText);
_stripManager.addSpeaker(&_speakerGameText);
_speakerMText._npc = &_object3;
- _speakerQText._npc = &_globals->_player;
+ _speakerQText._npc = &g_globals->_player;
_speakerSText._npc = &_object2;
_object1.postInit();
@@ -1644,7 +1646,7 @@ void Scene2100::postInit(SceneObjectList *OwnerList) {
_hotspot15.setBounds(Rect(14, 90, 46, 107));
_hotspot1.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT));
- if (!_globals->getFlag(36) && !_globals->getFlag(70) && !_globals->getFlag(43)) {
+ if (!g_globals->getFlag(36) && !g_globals->getFlag(70) && !g_globals->getFlag(43)) {
_object3.postInit();
_object3.setPosition(Common::Point(246, 156));
_object3.animate(ANIM_MODE_NONE, NULL);
@@ -1653,10 +1655,10 @@ void Scene2100::postInit(SceneObjectList *OwnerList) {
_object3.setVisage(2107);
_object3.setStrip(1);
_object3.setAction(&_action2);
- _globals->_sceneItems.push_back(&_object3);
+ g_globals->_sceneItems.push_back(&_object3);
}
- if (!_globals->getFlag(59) && !_globals->getFlag(70) && !_globals->getFlag(37) && !_globals->getFlag(114)) {
+ if (!g_globals->getFlag(59) && !g_globals->getFlag(70) && !g_globals->getFlag(37) && !g_globals->getFlag(114)) {
_object2.postInit();
_object2.setVisage(2108);
_object2._strip = 3;
@@ -1665,50 +1667,50 @@ void Scene2100::postInit(SceneObjectList *OwnerList) {
_object2.changeZoom(100);
_object2.fixPriority(113);
_object2.setAction(&_action3);
- _globals->_sceneItems.push_back(&_object2);
+ g_globals->_sceneItems.push_back(&_object2);
}
- _globals->_sceneItems.addItems(&_hotspot15, &_hotspot11, &_hotspot10, &_hotspot9, &_hotspot14,
+ g_globals->_sceneItems.addItems(&_hotspot15, &_hotspot11, &_hotspot10, &_hotspot9, &_hotspot14,
&_hotspot13, &_hotspot12, &_hotspot8, &_object1, &_hotspot2, &_hotspot3, &_hotspot4, &_hotspot5,
&_hotspot6, &_hotspot7, &_hotspot1, NULL);
- _globals->_player.postInit();
- if (_globals->getFlag(13)) {
- _globals->_player.setVisage(2170);
- _globals->_player._moveDiff.y = 1;
+ g_globals->_player.postInit();
+ if (g_globals->getFlag(13)) {
+ g_globals->_player.setVisage(2170);
+ g_globals->_player._moveDiff.y = 1;
} else {
- _globals->_player.setVisage(0);
- _globals->_player._moveDiff.y = 3;
+ g_globals->_player.setVisage(0);
+ g_globals->_player._moveDiff.y = 3;
}
- _globals->_player.setObjectWrapper(new SceneObjectWrapper());
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player._moveDiff.x = 4;
- _globals->_player.changeZoom(-1);
- _globals->_player.disableControl();
+ g_globals->_player.setObjectWrapper(new SceneObjectWrapper());
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player._moveDiff.x = 4;
+ g_globals->_player.changeZoom(-1);
+ g_globals->_player.disableControl();
_sitFl = 0;
- switch (_globals->_sceneManager._previousScene) {
+ switch (g_globals->_sceneManager._previousScene) {
case 2120:
- _globals->_soundHandler.play(160);
- _globals->_soundHandler.holdAt(true);
+ g_globals->_soundHandler.play(160);
+ g_globals->_soundHandler.holdAt(true);
_object1.fixPriority(-1);
- _globals->_player.fixPriority(-1);
- _globals->_player.setPosition(Common::Point(80, 66));
- _globals->_player.enableControl();
+ g_globals->_player.fixPriority(-1);
+ g_globals->_player.setPosition(Common::Point(80, 66));
+ g_globals->_player.enableControl();
break;
case 2150:
- _globals->_player.fixPriority(1);
- _globals->_player.setPosition(Common::Point(157, 56));
+ g_globals->_player.fixPriority(1);
+ g_globals->_player.setPosition(Common::Point(157, 56));
_sceneMode = 2104;
- setAction(&_sequenceManager, this, 2104, &_globals->_player, &_object1, NULL);
+ setAction(&_sequenceManager, this, 2104, &g_globals->_player, &_object1, NULL);
break;
case 2222:
- if (_globals->_sceneObjects->contains(&_object3))
+ if (g_globals->_sceneObjects->contains(&_object3))
_object3.remove();
- _globals->_player.fixPriority(1);
- _globals->_player.setPosition(Common::Point(144, 55));
+ g_globals->_player.fixPriority(1);
+ g_globals->_player.setPosition(Common::Point(144, 55));
_object2.setVisage(2806);
_object2.changeZoom(-1);
@@ -1721,12 +1723,12 @@ void Scene2100::postInit(SceneObjectList *OwnerList) {
setAction(&_action12);
break;
case 2320:
- if (_globals->_stripNum == 2321) {
- if (_globals->_sceneObjects->contains(&_object3))
+ if (g_globals->_stripNum == 2321) {
+ if (g_globals->_sceneObjects->contains(&_object3))
_object3.remove();
- _globals->_player.fixPriority(1);
- _globals->_player.setPosition(Common::Point(144, 55));
+ g_globals->_player.fixPriority(1);
+ g_globals->_player.setPosition(Common::Point(144, 55));
_object2.postInit();
_object2.setVisage(2806);
@@ -1739,9 +1741,9 @@ void Scene2100::postInit(SceneObjectList *OwnerList) {
_object2.animate(ANIM_MODE_1, NULL);
setAction(&_action12);
- } else if (_globals->_stripNum == 6100) {
- _globals->_player.setPosition(Common::Point(157, 56));
- _globals->_player.fixPriority(1);
+ } else if (g_globals->_stripNum == 6100) {
+ g_globals->_player.setPosition(Common::Point(157, 56));
+ g_globals->_player.fixPriority(1);
_object4.postInit();
_object4.setVisage(2102);
@@ -1750,27 +1752,27 @@ void Scene2100::postInit(SceneObjectList *OwnerList) {
setAction(&_action14);
} else {
- _globals->_player.disableControl();
- _globals->_player.fixPriority(1);
- _globals->_player.setPosition(Common::Point(157, 56));
+ g_globals->_player.disableControl();
+ g_globals->_player.fixPriority(1);
+ g_globals->_player.setPosition(Common::Point(157, 56));
_sceneMode = 2104;
- setAction(&_sequenceManager, this, 2104, &_globals->_player, &_object1, NULL);
+ setAction(&_sequenceManager, this, 2104, &g_globals->_player, &_object1, NULL);
}
break;
case 3700:
- _globals->_soundHandler.play(160);
- _globals->_soundHandler.holdAt(true);
+ g_globals->_soundHandler.play(160);
+ g_globals->_soundHandler.holdAt(true);
Scene::setZoomPercents(80, 75, 100, 90);
- if (_globals->_sceneObjects->contains(&_object2))
+ if (g_globals->_sceneObjects->contains(&_object2))
_object2.remove();
- _globals->_player._angle = 225;
- _globals->_player.setStrip(6);
- _globals->_player.setFrame(1);
- _globals->_player.fixPriority(-1);
- _globals->_player.setPosition(Common::Point(272, 127));
+ g_globals->_player._angle = 225;
+ g_globals->_player.setStrip(6);
+ g_globals->_player.setFrame(1);
+ g_globals->_player.fixPriority(-1);
+ g_globals->_player.setPosition(Common::Point(272, 127));
_object3.setPosition(Common::Point(246, 156));
_object3.fixPriority(156);
@@ -1778,15 +1780,15 @@ void Scene2100::postInit(SceneObjectList *OwnerList) {
setAction(&_sequenceManager, this, 2105, &_object3, NULL);
break;
case 4250:
- _globals->_soundHandler.play(160);
- _globals->_soundHandler.holdAt(true);
- _globals->clearFlag(43);
+ g_globals->_soundHandler.play(160);
+ g_globals->_soundHandler.holdAt(true);
+ g_globals->clearFlag(43);
- _globals->_player.setVisage(2104);
- _globals->_player.setFrame(1);
- _globals->_player.setPosition(Common::Point(65, 149));
- _globals->_player.fixPriority(152);
- _globals->_player.setStrip(2);
+ g_globals->_player.setVisage(2104);
+ g_globals->_player.setFrame(1);
+ g_globals->_player.setPosition(Common::Point(65, 149));
+ g_globals->_player.fixPriority(152);
+ g_globals->_player.setStrip(2);
_object4.postInit();
_object4.setVisage(2102);
@@ -1797,16 +1799,16 @@ void Scene2100::postInit(SceneObjectList *OwnerList) {
setAction(&_sequenceManager, this, 2107, &_object4, NULL);
break;
case 5000:
- _globals->_soundHandler.play(160);
- _globals->_soundHandler.holdAt(true);
+ g_globals->_soundHandler.play(160);
+ g_globals->_soundHandler.holdAt(true);
- if (_globals->_sceneObjects->contains(&_object2))
+ if (g_globals->_sceneObjects->contains(&_object2))
_object2.remove();
- _globals->_player.setStrip(3);
- _globals->_player.setFrame(1);
- _globals->_player.fixPriority(1);
- _globals->_player.setPosition(Common::Point(157, 56));
+ g_globals->_player.setStrip(3);
+ g_globals->_player.setFrame(1);
+ g_globals->_player.fixPriority(1);
+ g_globals->_player.setPosition(Common::Point(157, 56));
_object3.setPosition(Common::Point(246, 156));
_object3.fixPriority(156);
@@ -1814,13 +1816,13 @@ void Scene2100::postInit(SceneObjectList *OwnerList) {
setAction(&_action5);
break;
case 5100:
- _globals->_soundHandler.play(160);
- _globals->_soundHandler.holdAt(true);
- _globals->_player.setVisage(2104);
- _globals->_player.setFrame(1);
- _globals->_player.setPosition(Common::Point(65, 149));
- _globals->_player.fixPriority(152);
- _globals->_player.setStrip(2);
+ g_globals->_soundHandler.play(160);
+ g_globals->_soundHandler.holdAt(true);
+ g_globals->_player.setVisage(2104);
+ g_globals->_player.setFrame(1);
+ g_globals->_player.setPosition(Common::Point(65, 149));
+ g_globals->_player.fixPriority(152);
+ g_globals->_player.setStrip(2);
_sitFl = 1;
@@ -1833,67 +1835,67 @@ void Scene2100::postInit(SceneObjectList *OwnerList) {
setAction(&_action9);
break;
case 7000:
- _globals->_soundHandler.play(160);
- _globals->_soundHandler.holdAt(true);
+ g_globals->_soundHandler.play(160);
+ g_globals->_soundHandler.holdAt(true);
if (RING_INVENTORY._stasisBox2._sceneNumber == 1) {
- _globals->_player.fixPriority(1);
- _globals->_player.setPosition(Common::Point(157, 56));
+ g_globals->_player.fixPriority(1);
+ g_globals->_player.setPosition(Common::Point(157, 56));
_object4.postInit();
_object4.setVisage(2102);
_object4.setPosition(Common::Point(160, 199));
_object4.hide();
- _globals->clearFlag(15);
- _globals->clearFlag(109);
- _globals->clearFlag(72);
+ g_globals->clearFlag(15);
+ g_globals->clearFlag(109);
+ g_globals->clearFlag(72);
setAction(&_action17);
} else {
- _globals->_player.setVisage(2104);
- _globals->_player.setFrame(1);
- _globals->_player.setPosition(Common::Point(65, 149));
- _globals->_player.fixPriority(152);
- _globals->_player.setStrip(2);
+ g_globals->_player.setVisage(2104);
+ g_globals->_player.setFrame(1);
+ g_globals->_player.setPosition(Common::Point(65, 149));
+ g_globals->_player.fixPriority(152);
+ g_globals->_player.setStrip(2);
_sitFl = 1;
setAction(&_action16);
}
break;
case 7600:
- _globals->_soundHandler.play(160);
- _globals->_soundHandler.holdAt(true);
+ g_globals->_soundHandler.play(160);
+ g_globals->_soundHandler.holdAt(true);
- if (_globals->_sceneObjects->contains(&_object2))
+ if (g_globals->_sceneObjects->contains(&_object2))
_object2.remove();
- _globals->_player.fixPriority(1);
- _globals->_player.setPosition(Common::Point(157, 56));
+ g_globals->_player.fixPriority(1);
+ g_globals->_player.setPosition(Common::Point(157, 56));
setAction(&_action8);
break;
case 8100:
- _globals->_soundHandler.play(160);
- _globals->_soundHandler.holdAt(true);
+ g_globals->_soundHandler.play(160);
+ g_globals->_soundHandler.holdAt(true);
- _globals->_player.setVisage(2104);
- _globals->_player.setFrame(1);
- _globals->_player.setPosition(Common::Point(65, 149));
- _globals->_player.fixPriority(152);
- _globals->_player.setStrip(2);
+ g_globals->_player.setVisage(2104);
+ g_globals->_player.setFrame(1);
+ g_globals->_player.setPosition(Common::Point(65, 149));
+ g_globals->_player.fixPriority(152);
+ g_globals->_player.setStrip(2);
_sceneMode = 2106;
setAction(&_sequenceManager, this, 2106, NULL);
break;
case 9750:
- _globals->_soundHandler.play(160);
- _globals->_soundHandler.holdAt(true);
+ g_globals->_soundHandler.play(160);
+ g_globals->_soundHandler.holdAt(true);
- _globals->_player.setVisage(2104);
- _globals->_player.setFrame(1);
- _globals->_player.setPosition(Common::Point(65, 149));
- _globals->_player.fixPriority(152);
- _globals->_player.setStrip(2);
+ g_globals->_player.setVisage(2104);
+ g_globals->_player.setFrame(1);
+ g_globals->_player.setPosition(Common::Point(65, 149));
+ g_globals->_player.fixPriority(152);
+ g_globals->_player.setStrip(2);
_object4.postInit();
_object4.setVisage(2102);
@@ -1904,22 +1906,22 @@ void Scene2100::postInit(SceneObjectList *OwnerList) {
setAction(&_sequenceManager, this, 2103, &_object4, NULL);
break;
default:
- _globals->_soundHandler.play(160);
- _globals->_soundHandler.holdAt(true);
+ g_globals->_soundHandler.play(160);
+ g_globals->_soundHandler.holdAt(true);
- _globals->_player._uiEnabled = true;
+ g_globals->_player._uiEnabled = true;
break;
}
- _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds);
- _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
+ g_globals->_sceneManager._scene->_sceneBounds.contain(g_globals->_sceneManager._scene->_backgroundBounds);
+ g_globals->_sceneOffset.x = (g_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
}
void Scene2100::stripCallback(int v) {
switch (v) {
case 1:
_object4._numFrames = 4;
- _object4.animate(ANIM_MODE_7, NULL);
+ _object4.animate(ANIM_MODE_7, 0, NULL);
break;
case 2:
_object4.animate(ANIM_MODE_NONE, NULL);
@@ -1931,22 +1933,22 @@ void Scene2100::signal() {
switch (_sceneMode) {
case 2101:
_sitFl = 1;
- _globals->_player._uiEnabled = true;
- _globals->_events.setCursor(CURSOR_USE);
+ g_globals->_player._uiEnabled = true;
+ g_globals->_events.setCursor(CURSOR_USE);
break;
case 2102:
_sitFl = 0;
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
break;
case 2103:
- _globals->_stripNum = 9000;
- _globals->_sceneManager.changeScene(4000);
+ g_globals->_stripNum = 9000;
+ g_globals->_sceneManager.changeScene(4000);
break;
case 2106:
- _globals->_sceneManager.changeScene(7000);
+ g_globals->_sceneManager.changeScene(7000);
break;
case 2107:
- _globals->_sceneManager.changeScene(5000);
+ g_globals->_sceneManager.changeScene(5000);
break;
case 2104:
case 2105:
@@ -1954,7 +1956,7 @@ void Scene2100::signal() {
case 2110:
case 2111:
case 2112:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
break;
}
}
@@ -2007,12 +2009,12 @@ Scene2120::Action1::Action1() {
}
void Scene2120::Action1::signal() {
- Scene2120 *scene = (Scene2120 *)_globals->_sceneManager._scene;
+ Scene2120 *scene = (Scene2120 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(30);
- _globals->_events.setCursor(CURSOR_WALK);
+ g_globals->_events.setCursor(CURSOR_WALK);
break;
case 1:
// First page of index
@@ -2045,10 +2047,10 @@ void Scene2120::Action1::signal() {
}
void Scene2120::Action1::dispatch() {
- Scene2120 *scene = (Scene2120 *)_globals->_sceneManager._scene;
+ Scene2120 *scene = (Scene2120 *)g_globals->_sceneManager._scene;
Event event;
- if (_globals->_events.getEvent(event) && (event.eventType == EVENT_BUTTON_DOWN)) {
+ if (g_globals->_events.getEvent(event) && (event.eventType == EVENT_BUTTON_DOWN)) {
if (scene->_listRect.contains(event.mousePos) && (scene->_dbMode != 2)) {
scene->_topicArrowHotspot.setPosition(Common::Point(scene->_topicArrowHotspot._position.x, event.mousePos.y));
}
@@ -2064,8 +2066,8 @@ void Scene2120::Action1::dispatch() {
else
scene->_subjectIndex = (scene->_topicArrowHotspot._position.y - 44) / 8 + 16;
- if ((scene->_subjectIndex == 27) && _globals->getFlag(70))
- _globals->setFlag(75);
+ if ((scene->_subjectIndex == 27) && g_globals->getFlag(70))
+ g_globals->setFlag(75);
scene->_topicArrowHotspot.hide();
scene->_prevDbMode = scene->_dbMode;
@@ -2142,9 +2144,9 @@ void Scene2120::Action1::dispatch() {
setAction(NULL);
SceneItem::display(0, 0);
- _globals->_gfxManagerInstance._font.setFontNumber(2);
- _globals->_sceneText._fontNumber = 2;
- _globals->_sceneManager.changeScene(_globals->_sceneManager._previousScene);
+ g_globals->_gfxManagerInstance._font.setFontNumber(2);
+ g_globals->_sceneText._fontNumber = 2;
+ g_globals->_sceneManager.changeScene(g_globals->_sceneManager._previousScene);
} else {
// Exit out of topic display to index
SceneItem::display(0, 0);
@@ -2182,7 +2184,7 @@ Scene2120::Scene2120(): Scene() {
void Scene2120::postInit(SceneObjectList *OwnerList) {
loadScene(2120);
setZoomPercents(0, 100, 200, 100);
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
_subjectButton.setBounds(Rect(266, 13, 320, 56));
_nextPageButton.setBounds(Rect(266, 56, 320, 98));
@@ -2201,8 +2203,8 @@ void Scene2120::postInit(SceneObjectList *OwnerList) {
_arrowHotspot.setPosition(Common::Point(400, 200));
setAction(&_action1);
- _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds);
- _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
+ g_globals->_sceneManager._scene->_sceneBounds.contain(g_globals->_sceneManager._scene->_backgroundBounds);
+ g_globals->_sceneOffset.x = (g_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
}
void Scene2120::synchronize(Serializer &s) {
@@ -2221,14 +2223,14 @@ void Scene2120::synchronize(Serializer &s) {
*--------------------------------------------------------------------------*/
void Scene2150::Action1::signal() {
- Scene2150 *scene = (Scene2150 *)_globals->_sceneManager._scene;
+ Scene2150 *scene = (Scene2150 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0: {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
Common::Point pt(158, 103);
PlayerMover *mover = new PlayerMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 1:
@@ -2236,15 +2238,15 @@ void Scene2150::Action1::signal() {
scene->_hotspot1.animate(ANIM_MODE_5, this);
break;
case 2: {
- _globals->_player.setStrip2(4);
+ g_globals->_player.setStrip2(4);
Common::Point pt(158, 95);
NpcMover *mover = new NpcMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 3:
- _globals->_player.setStrip2(-1);
- _globals->_player._strip = 3;
+ g_globals->_player.setStrip2(-1);
+ g_globals->_player._strip = 3;
setDelay(10);
break;
case 4:
@@ -2255,12 +2257,12 @@ void Scene2150::Action1::signal() {
scene->_area2.draw(true);
_state = 0;
- _globals->_events.setCursor(CURSOR_USE);
+ g_globals->_events.setCursor(CURSOR_USE);
- while (!_state && !_vm->getEventManager()->shouldQuit()) {
+ while (!_state && !g_vm->shouldQuit()) {
// Wait for an event
Event event;
- if (!_globals->_events.getEvent(event)) {
+ if (!g_globals->_events.getEvent(event)) {
g_system->updateScreen();
g_system->delayMillis(10);
continue;
@@ -2299,10 +2301,10 @@ void Scene2150::Action1::signal() {
if (_state == 2150) {
Common::Point pt(158, 103);
PlayerMover *mover = new PlayerMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
} else {
- _globals->_sceneManager.changeScene(_state);
+ g_globals->_sceneManager.changeScene(_state);
}
break;
case 6:
@@ -2310,28 +2312,28 @@ void Scene2150::Action1::signal() {
scene->_hotspot1.animate(ANIM_MODE_6, this);
break;
case 7:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
remove();
break;
}
}
void Scene2150::Action2::signal() {
- Scene2150 *scene = (Scene2150 *)_globals->_sceneManager._scene;
+ Scene2150 *scene = (Scene2150 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0: {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
Common::Point pt(47, 85);
PlayerMover *mover = new PlayerMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 1:
- _globals->_player.setVisage(2152);
- _globals->_player.setFrame(1);
- _globals->_player.setStrip(8);
- _globals->_player.animate(ANIM_MODE_8, 1, this);
+ g_globals->_player.setVisage(2152);
+ g_globals->_player.setFrame(1);
+ g_globals->_player.setStrip(8);
+ g_globals->_player.animate(ANIM_MODE_8, 1, this);
scene->_soundHandler.play(163);
break;
@@ -2340,7 +2342,7 @@ void Scene2150::Action2::signal() {
scene->_hotspot10.animate(ANIM_MODE_5, this);
break;
case 3:
- _globals->_events.setCursor(CURSOR_WALK);
+ g_globals->_events.setCursor(CURSOR_WALK);
scene->_stripManager.start((RING_INVENTORY._ale._sceneNumber == 2150) ? 2151 : 2152, this);
break;
case 4:
@@ -2356,21 +2358,21 @@ void Scene2150::Action2::signal() {
scene->_hotspot14.setFrame(scene->_stripManager._field2E8 - 5);
}
- _globals->_player.setFrame(1);
- _globals->_player.setStrip(7);
- _globals->_player.animate(ANIM_MODE_5, this);
+ g_globals->_player.setFrame(1);
+ g_globals->_player.setStrip(7);
+ g_globals->_player.animate(ANIM_MODE_5, this);
break;
case 5:
scene->_soundHandler.play(164);
scene->_hotspot10.animate(ANIM_MODE_6, NULL);
scene->_hotspot14.remove();
- _globals->_player.animate(ANIM_MODE_6, this);
+ g_globals->_player.animate(ANIM_MODE_6, this);
break;
case 6:
- _globals->_player.setVisage(0);
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player.enableControl();
+ g_globals->_player.setVisage(0);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.enableControl();
remove();
break;
@@ -2380,7 +2382,7 @@ void Scene2150::Action2::signal() {
/*--------------------------------------------------------------------------*/
void Scene2150::Hotspot1::doAction(int action) {
- Scene2150 *scene = (Scene2150 *)_globals->_sceneManager._scene;
+ Scene2150 *scene = (Scene2150 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
@@ -2396,16 +2398,16 @@ void Scene2150::Hotspot1::doAction(int action) {
}
void Scene2150::Hotspot2::doAction(int action) {
- Scene2150 *scene = (Scene2150 *)_globals->_sceneManager._scene;
+ Scene2150 *scene = (Scene2150 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2150, 1);
break;
case CURSOR_USE:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_sceneMode = 2156;
- scene->setAction(&scene->_sequenceManager, scene, 2156, &_globals->_player, this, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 2156, &g_globals->_player, this, NULL);
break;
default:
SceneHotspot::doAction(action);
@@ -2414,16 +2416,16 @@ void Scene2150::Hotspot2::doAction(int action) {
}
void Scene2150::Hotspot4::doAction(int action) {
- Scene2150 *scene = (Scene2150 *)_globals->_sceneManager._scene;
+ Scene2150 *scene = (Scene2150 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2150, 3);
break;
case CURSOR_USE:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_sceneMode = 2155;
- scene->setAction(&scene->_sequenceManager, scene, 2155, &_globals->_player, &scene->_hotspot4, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 2155, &g_globals->_player, &scene->_hotspot4, NULL);
break;
default:
SceneHotspot::doAction(action);
@@ -2432,19 +2434,19 @@ void Scene2150::Hotspot4::doAction(int action) {
}
void Scene2150::Hotspot7::doAction(int action) {
- Scene2150 *scene = (Scene2150 *)_globals->_sceneManager._scene;
+ Scene2150 *scene = (Scene2150 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2150, 7);
break;
case CURSOR_USE:
- if (_globals->getFlag(13))
+ if (g_globals->getFlag(13))
SceneItem::display2(2150, 19);
else {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_sceneMode = 2154;
- scene->setAction(&scene->_sequenceManager, scene, 2154, &_globals->_player, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 2154, &g_globals->_player, NULL);
}
break;
default:
@@ -2454,14 +2456,14 @@ void Scene2150::Hotspot7::doAction(int action) {
}
void Scene2150::Hotspot10::doAction(int action) {
- Scene2150 *scene = (Scene2150 *)_globals->_sceneManager._scene;
+ Scene2150 *scene = (Scene2150 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2150, 10);
break;
case CURSOR_USE:
- if (_globals->getFlag(13))
+ if (g_globals->getFlag(13))
SceneItem::display2(2150, 19);
else
scene->setAction(&scene->_action2);
@@ -2542,60 +2544,60 @@ void Scene2150::postInit(SceneObjectList *OwnerList) {
_hotspot10.setStrip(5);
_hotspot10.setPosition(Common::Point(59, 56));
- _globals->_player.postInit();
- _globals->_player.setVisage(_globals->getFlag(13) ? 2170 : 0);
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player.setObjectWrapper(new SceneObjectWrapper());
- _globals->_player.fixPriority(-1);
- _globals->_player.changeZoom(-1);
- _globals->_player._moveDiff.y = 3;
+ g_globals->_player.postInit();
+ g_globals->_player.setVisage(g_globals->getFlag(13) ? 2170 : 0);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.setObjectWrapper(new SceneObjectWrapper());
+ g_globals->_player.fixPriority(-1);
+ g_globals->_player.changeZoom(-1);
+ g_globals->_player._moveDiff.y = 3;
_hotspot8.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT));
_hotspot9.setBounds(Rect(133, 0, 198, 91));
_hotspot11.setBounds(Rect(142, 119, 176, 158));
- _globals->_sceneItems.addItems(&_hotspot1, &_hotspot2, &_hotspot3, &_hotspot4, &_hotspot5,
+ g_globals->_sceneItems.addItems(&_hotspot1, &_hotspot2, &_hotspot3, &_hotspot4, &_hotspot5,
&_hotspot6, &_hotspot7, &_hotspot10, &_hotspot9, &_hotspot11, &_hotspot8, NULL);
- switch (_globals->_sceneManager._previousScene) {
+ switch (g_globals->_sceneManager._previousScene) {
case 2120:
- _globals->_soundHandler.play(160);
- _globals->_soundHandler.holdAt(true);
- _globals->_player.setPosition(Common::Point(108, 99));
+ g_globals->_soundHandler.play(160);
+ g_globals->_soundHandler.holdAt(true);
+ g_globals->_player.setPosition(Common::Point(108, 99));
break;
case 2200:
- _globals->_player.disableControl();
- _globals->_player.setPosition(Common::Point(159, 240));
+ g_globals->_player.disableControl();
+ g_globals->_player.setPosition(Common::Point(159, 240));
_sceneMode = 2152;
- setAction(&_sequenceManager, this, 2152, &_globals->_player, NULL);
+ setAction(&_sequenceManager, this, 2152, &g_globals->_player, NULL);
break;
case 2280:
- _globals->_player.disableControl();
- _globals->_player._angle = 180;
- _globals->_player.setPosition(Common::Point(265, 80));
+ g_globals->_player.disableControl();
+ g_globals->_player._angle = 180;
+ g_globals->_player.setPosition(Common::Point(265, 80));
_hotspot2._frame = _hotspot2.getFrameCount();
_sceneMode = 2157;
setAction(&_sequenceManager, this, 2157, &_hotspot2, NULL);
break;
case 2230:
- _globals->_events.setCursor(CURSOR_WALK);
- _globals->_player._strip = 4;
- _globals->_player.setPosition(Common::Point(229, 139));
+ g_globals->_events.setCursor(CURSOR_WALK);
+ g_globals->_player._strip = 4;
+ g_globals->_player.setPosition(Common::Point(229, 139));
break;
case 2100:
default:
- _globals->_player.disableControl();
- _globals->_player.setPosition(Common::Point(158, 95));
- _globals->_player.setStrip(3);
+ g_globals->_player.disableControl();
+ g_globals->_player.setPosition(Common::Point(158, 95));
+ g_globals->_player.setStrip(3);
_sceneMode = 2151;
- setAction(&_sequenceManager, this, 2151, &_globals->_player, &_hotspot1, NULL);
+ setAction(&_sequenceManager, this, 2151, &g_globals->_player, &_hotspot1, NULL);
break;
}
- _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds);
- _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
+ g_globals->_sceneManager._scene->_sceneBounds.contain(g_globals->_sceneManager._scene->_backgroundBounds);
+ g_globals->_sceneOffset.x = (g_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
}
void Scene2150::synchronize(Serializer &s) {
@@ -2607,22 +2609,22 @@ void Scene2150::synchronize(Serializer &s) {
void Scene2150::signal() {
switch (_sceneMode) {
case 2151:
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player.enableControl();
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.enableControl();
break;
case 2152:
case 2153:
case 2157:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
break;
case 2154:
- _globals->_sceneManager.changeScene(2120);
+ g_globals->_sceneManager.changeScene(2120);
break;
case 2155:
- _globals->_sceneManager.changeScene(2230);
+ g_globals->_sceneManager.changeScene(2230);
break;
case 2156:
- _globals->_sceneManager.changeScene(2280);
+ g_globals->_sceneManager.changeScene(2280);
break;
}
}
@@ -2631,22 +2633,22 @@ void Scene2150::dispatch() {
Scene::dispatch();
if (!_action) {
- if (_rect1.contains(_globals->_player._position)) {
- _globals->_player.disableControl();
+ if (_rect1.contains(g_globals->_player._position)) {
+ g_globals->_player.disableControl();
_sceneMode = 2156;
- setAction(&_sequenceManager, this, 2156, &_globals->_player, &_hotspot2, NULL);
+ setAction(&_sequenceManager, this, 2156, &g_globals->_player, &_hotspot2, NULL);
}
- if (_rect2.contains(_globals->_player._position)) {
- _globals->_player.disableControl();
+ if (_rect2.contains(g_globals->_player._position)) {
+ g_globals->_player.disableControl();
_sceneMode = 2155;
- setAction(&_sequenceManager, this, 2155, &_globals->_player, &_hotspot4, NULL);
+ setAction(&_sequenceManager, this, 2155, &g_globals->_player, &_hotspot4, NULL);
}
- if (_globals->_player._position.y >= 196) {
- _globals->_player.disableControl();
+ if (g_globals->_player._position.y >= 196) {
+ g_globals->_player.disableControl();
SceneItem::display2(2150, 20);
_sceneMode = 2153;
- setAction(&_sequenceManager, this, 2153, &_globals->_player, NULL);
+ setAction(&_sequenceManager, this, 2153, &g_globals->_player, NULL);
}
}
}
@@ -2657,7 +2659,7 @@ void Scene2150::dispatch() {
*--------------------------------------------------------------------------*/
void Scene2200::Action1::signal() {
- Scene2200 *scene = (Scene2200 *)_globals->_sceneManager._scene;
+ Scene2200 *scene = (Scene2200 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -2668,14 +2670,14 @@ void Scene2200::Action1::signal() {
break;
case 2:
SceneItem::display2(2200, 7);
- _globals->_sceneManager.changeScene(2150);
+ g_globals->_sceneManager.changeScene(2150);
remove();
break;
}
}
void Scene2200::Action2::signal() {
- Scene2200 *scene = (Scene2200 *)_globals->_sceneManager._scene;
+ Scene2200 *scene = (Scene2200 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -2692,20 +2694,20 @@ void Scene2200::Action2::signal() {
setDelay(30);
break;
case 4:
- _globals->_events.setCursor(CURSOR_WALK);
+ g_globals->_events.setCursor(CURSOR_WALK);
scene->_stripManager.start(2040, this, scene);
break;
case 5:
scene->_hotspot4.setStrip(4);
scene->_hotspot4.animate(ANIM_MODE_NONE, NULL);
- _globals->_player._uiEnabled = true;
+ g_globals->_player._uiEnabled = true;
remove();
break;
}
}
void Scene2200::Action3::signal() {
- Scene2200 *scene = (Scene2200 *)_globals->_sceneManager._scene;
+ Scene2200 *scene = (Scene2200 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0: {
@@ -2713,7 +2715,7 @@ void Scene2200::Action3::signal() {
scene->_hotspot4.setStrip(4);
scene->_hotspot4.animate(ANIM_MODE_NONE, NULL);
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_hotspot2.postInit();
scene->_hotspot2.setVisage(2201);
@@ -2732,16 +2734,16 @@ void Scene2200::Action3::signal() {
setDelay(120);
break;
case 2:
- if (_globals->getFlag(83)) {
+ if (g_globals->getFlag(83)) {
_actionIndex = 8;
setDelay(5);
} else {
- for (SynchronizedList<SceneObject *>::iterator i = _globals->_sceneObjects->begin();
- i != _globals->_sceneObjects->end(); ++i) {
+ for (SynchronizedList<SceneObject *>::iterator i = g_globals->_sceneObjects->begin();
+ i != g_globals->_sceneObjects->end(); ++i) {
(*i)->hide();
}
- _globals->_sceneManager._scene->loadScene(66);
+ g_globals->_sceneManager._scene->loadScene(66);
scene->_hotspot6.postInit();
scene->_hotspot6.setVisage(66);
@@ -2773,12 +2775,12 @@ void Scene2200::Action3::signal() {
setDelay(5);
break;
case 7:
- for (SynchronizedList<SceneObject *>::iterator i = _globals->_sceneObjects->begin();
- i != _globals->_sceneObjects->end(); ++i)
+ for (SynchronizedList<SceneObject *>::iterator i = g_globals->_sceneObjects->begin();
+ i != g_globals->_sceneObjects->end(); ++i)
(*i)->show();
scene->_hotspot6.remove();
- _globals->_sceneManager._scene->loadScene(2200);
+ g_globals->_sceneManager._scene->loadScene(2200);
setDelay(5);
break;
case 8:
@@ -2789,7 +2791,7 @@ void Scene2200::Action3::signal() {
scene->_hotspot4.animate(ANIM_MODE_NONE, NULL);
break;
case 10:
- _globals->_sceneManager.changeScene(2000);
+ g_globals->_sceneManager.changeScene(2000);
remove();
break;
}
@@ -2806,7 +2808,7 @@ void Scene2200::Action3::process(Event &event) {
}
void Scene2200::Action4::signal() {
- Scene2200 *scene = (Scene2200 *)_globals->_sceneManager._scene;
+ Scene2200 *scene = (Scene2200 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -2821,7 +2823,7 @@ void Scene2200::Action4::signal() {
setDelay(10);
break;
case 3:
- _globals->_player._uiEnabled = true;
+ g_globals->_player._uiEnabled = true;
remove();
break;
}
@@ -2830,7 +2832,7 @@ void Scene2200::Action4::signal() {
/*--------------------------------------------------------------------------*/
void Scene2200::Hotspot3::doAction(int action) {
- Scene2200 *scene = (Scene2200 *)_globals->_sceneManager._scene;
+ Scene2200 *scene = (Scene2200 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
@@ -2840,7 +2842,7 @@ void Scene2200::Hotspot3::doAction(int action) {
SceneItem::display2(2200, 11);
break;
case CURSOR_TALK:
- _globals->_player._uiEnabled = false;
+ g_globals->_player._uiEnabled = false;
scene->setAction(&scene->_action4);
break;
default:
@@ -2850,7 +2852,7 @@ void Scene2200::Hotspot3::doAction(int action) {
}
void Scene2200::Hotspot5::doAction(int action) {
- Scene2200 *scene = (Scene2200 *)_globals->_sceneManager._scene;
+ Scene2200 *scene = (Scene2200 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
@@ -2861,7 +2863,7 @@ void Scene2200::Hotspot5::doAction(int action) {
break;
case CURSOR_TALK:
scene->_sceneMode = 2201;
- _globals->_player._uiEnabled = false;
+ g_globals->_player._uiEnabled = false;
scene->setAction(&scene->_sequenceManager, scene, 2201, NULL);
break;
default:
@@ -2871,19 +2873,19 @@ void Scene2200::Hotspot5::doAction(int action) {
}
void Scene2200::Hotspot9::doAction(int action) {
- Scene2200 *scene = (Scene2200 *)_globals->_sceneManager._scene;
+ Scene2200 *scene = (Scene2200 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
- SceneItem::display2(2200, _globals->getFlag(8) ? 1 : 0);
+ SceneItem::display2(2200, g_globals->getFlag(8) ? 1 : 0);
break;
case CURSOR_USE:
SceneItem::display2(2200, 3);
break;
case OBJECT_INFODISK:
- if (_globals->_sceneManager._previousScene == 2310) {
+ if (g_globals->_sceneManager._previousScene == 2310) {
scene->_soundHandler2.play(35);
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->setAction(&scene->_action3);
}
break;
@@ -2915,7 +2917,7 @@ void Scene2200::postInit(SceneObjectList *OwnerList) {
_stripManager.addSpeaker(&_speakerMR);
_stripManager.addSpeaker(&_speakerGameText);
- _speakerQText._npc = &_globals->_player;
+ _speakerQText._npc = &g_globals->_player;
_speakerSText._npc = &_hotspot5;
_speakerMText._npc = &_hotspot3;
@@ -2931,21 +2933,21 @@ void Scene2200::postInit(SceneObjectList *OwnerList) {
_hotspot8.setPosition(Common::Point(96, 184));
_hotspot8.fixPriority(236);
- _globals->_player.postInit();
- _globals->_player.setVisage(2640);
- _globals->_player.setFrame2(3);
- _globals->_player.setPosition(Common::Point(110, 233));
- _globals->_player.disableControl();
+ g_globals->_player.postInit();
+ g_globals->_player.setVisage(2640);
+ g_globals->_player.setFrame2(3);
+ g_globals->_player.setPosition(Common::Point(110, 233));
+ g_globals->_player.disableControl();
- switch (_globals->_sceneManager._previousScene) {
+ switch (g_globals->_sceneManager._previousScene) {
case 2150:
_hotspot5.remove();
_hotspot8.remove();
break;
case 4000:
- _globals->_soundHandler.play(100);
- _globals->_soundHandler.holdAt(true);
- _globals->_player.remove();
+ g_globals->_soundHandler.play(100);
+ g_globals->_soundHandler.holdAt(true);
+ g_globals->_player.remove();
_hotspot5.remove();
_hotspot8.remove();
@@ -2975,20 +2977,20 @@ void Scene2200::postInit(SceneObjectList *OwnerList) {
_hotspot3.postInit();
_hotspot3.setVisage(2215);
_hotspot3.setPosition(Common::Point(144, 132));
- _globals->_sceneItems.push_back(&_hotspot3);
+ g_globals->_sceneItems.push_back(&_hotspot3);
_hotspot4.postInit();
_hotspot4.setVisage(2215);
_hotspot4._strip = 2;
_hotspot4.setPosition(Common::Point(120, 78));
_hotspot4.fixPriority(255);
- _globals->_sceneItems.push_back(&_hotspot4);
+ g_globals->_sceneItems.push_back(&_hotspot4);
_soundHandler1.play(101);
_soundHandler2.play(100);
- _globals->_soundHandler.holdAt(true);
+ g_globals->_soundHandler.holdAt(true);
- _globals->_sceneItems.push_back(&_hotspot5);
+ g_globals->_sceneItems.push_back(&_hotspot5);
setAction(&_action2);
break;
}
@@ -2997,9 +2999,9 @@ void Scene2200::postInit(SceneObjectList *OwnerList) {
_hotspot9.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT));
_hotspot10.setBounds(Rect(87, 43, 149, 109));
- _globals->_sceneItems.addItems(&_hotspot10, &_hotspot9, NULL);
- _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds);
- _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
+ g_globals->_sceneItems.addItems(&_hotspot10, &_hotspot9, NULL);
+ g_globals->_sceneManager._scene->_sceneBounds.contain(g_globals->_sceneManager._scene->_backgroundBounds);
+ g_globals->_sceneOffset.x = (g_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
}
void Scene2200::stripCallback(int v) {
@@ -3022,15 +3024,15 @@ void Scene2200::synchronize(Serializer &s) {
void Scene2200::signal() {
if ((_sceneMode == 2201) || (_sceneMode == 2202))
- _globals->_player._uiEnabled = true;
+ g_globals->_player._uiEnabled = true;
}
void Scene2200::dispatch() {
Scene::dispatch();
if (!_action) {
- if (_exitRect.contains(_globals->_player._position))
- _globals->_sceneManager.changeScene(2150);
+ if (_exitRect.contains(g_globals->_player._position))
+ g_globals->_sceneManager.changeScene(2150);
}
}
@@ -3040,7 +3042,7 @@ void Scene2200::dispatch() {
*--------------------------------------------------------------------------*/
void Scene2222::Action1::signal() {
- Scene2222 *scene = (Scene2222 *)_globals->_sceneManager._scene;
+ Scene2222 *scene = (Scene2222 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -3053,13 +3055,13 @@ void Scene2222::Action1::signal() {
setDelay(30);
break;
case 3:
- _globals->_sceneManager.changeScene(1000);
+ g_globals->_sceneManager.changeScene(1000);
break;
}
}
void Scene2222::Action2::signal() {
- Scene2222 *scene = (Scene2222 *)_globals->_sceneManager._scene;
+ Scene2222 *scene = (Scene2222 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -3072,8 +3074,8 @@ void Scene2222::Action2::signal() {
setDelay(120);
break;
case 3:
- _globals->_sceneManager._fadeMode = FADEMODE_GRADUAL;
- _globals->_sceneManager.changeScene(2100);
+ g_globals->_sceneManager._fadeMode = FADEMODE_GRADUAL;
+ g_globals->_sceneManager.changeScene(2100);
break;
}
}
@@ -3081,7 +3083,7 @@ void Scene2222::Action2::signal() {
/*--------------------------------------------------------------------------*/
void Scene2222::postInit(SceneObjectList *OwnerList) {
- loadScene((_globals->_sceneManager._previousScene == 2000) ? 3400 : 3450);
+ loadScene((g_globals->_sceneManager._previousScene == 2000) ? 3400 : 3450);
Scene::postInit();
setZoomPercents(0, 100, 200, 100);
@@ -3121,7 +3123,7 @@ void Scene2222::postInit(SceneObjectList *OwnerList) {
_hotspot5.setFrame(5);
_hotspot5.animate(ANIM_MODE_2, 0);
- if (_globals->_sceneManager._previousScene == 2100) {
+ if (g_globals->_sceneManager._previousScene == 2100) {
_hotspot1.setPosition(Common::Point(61, 101));
_hotspot2.setPosition(Common::Point(239, 149));
_hotspot3.setPosition(Common::Point(184, 85));
@@ -3140,10 +3142,10 @@ void Scene2222::postInit(SceneObjectList *OwnerList) {
}
_soundHandler.play(116);
- _globals->_sceneManager._scene->_sceneBounds.center(_hotspot1._position);
+ g_globals->_sceneManager._scene->_sceneBounds.center(_hotspot1._position);
- _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds);
- _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
+ g_globals->_sceneManager._scene->_sceneBounds.contain(g_globals->_sceneManager._scene->_backgroundBounds);
+ g_globals->_sceneOffset.x = (g_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
}
@@ -3153,7 +3155,7 @@ void Scene2222::postInit(SceneObjectList *OwnerList) {
*--------------------------------------------------------------------------*/
void Scene2230::Action1::signal() {
- Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene;
+ Scene2230 *scene = (Scene2230 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -3172,7 +3174,7 @@ void Scene2230::Action1::signal() {
case 1: {
Common::Point pt(84, 74);
NpcMover *mover = new NpcMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 2:
@@ -3181,20 +3183,20 @@ void Scene2230::Action1::signal() {
case 3: {
Common::Point pt(63, 60);
NpcMover *mover = new NpcMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 4:
scene->_hotspot1.animate(ANIM_MODE_6, this);
break;
case 5:
- _globals->_sceneManager.changeScene(2150);
+ g_globals->_sceneManager.changeScene(2150);
break;
}
}
void Scene2230::Action2::signal() {
- Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene;
+ Scene2230 *scene = (Scene2230 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -3208,67 +3210,67 @@ void Scene2230::Action2::signal() {
}
break;
case 1: {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_field30A = 1;
- _globals->_player._regionBitList |= ~0x80;
+ g_globals->_player._regionBitList |= ~0x80;
Common::Point pt(160, 96);
NpcMover *mover = new NpcMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 2:
- _globals->_player.setVisage(2235);
- _globals->_player.setStrip2(1);
- _globals->_player.fixPriority(100);
- _globals->_player._frame = 1;
- _globals->_player.setPosition(Common::Point(200, 68));
- _globals->_player.animate(ANIM_MODE_5, this);
+ g_globals->_player.setVisage(2235);
+ g_globals->_player.setStrip2(1);
+ g_globals->_player.fixPriority(100);
+ g_globals->_player._frame = 1;
+ g_globals->_player.setPosition(Common::Point(200, 68));
+ g_globals->_player.animate(ANIM_MODE_5, this);
break;
case 3:
scene->_soundHandler.play(157);
- _globals->_player._moveDiff = Common::Point(1, 1);
- _globals->_player.setAction(&scene->_action4);
- _globals->_player._uiEnabled = true;
+ g_globals->_player._moveDiff = Common::Point(1, 1);
+ g_globals->_player.setAction(&scene->_action4);
+ g_globals->_player._uiEnabled = true;
- _globals->_events.setCursor(CURSOR_USE);
+ g_globals->_events.setCursor(CURSOR_USE);
remove();
break;
}
}
void Scene2230::Action3::signal() {
- Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene;
+ Scene2230 *scene = (Scene2230 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0: {
- _globals->_player.setAction(NULL);
- _globals->_player._moveDiff = Common::Point(5, 3);
- _globals->_player.setStrip2(_globals->_player._strip);
+ g_globals->_player.setAction(NULL);
+ g_globals->_player._moveDiff = Common::Point(5, 3);
+ g_globals->_player.setStrip2(g_globals->_player._strip);
Common::Point pt(190, 74);
NpcMover *mover = new NpcMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
scene->_soundHandler.stop();
break;
}
case 1:
- _globals->_player._strip = 3;
- _globals->_player._frame = 1;
- _globals->_player.animate(ANIM_MODE_5, this);
+ g_globals->_player._strip = 3;
+ g_globals->_player._frame = 1;
+ g_globals->_player.animate(ANIM_MODE_5, this);
break;
case 2:
- _globals->_player._regionBitList |= 0x80;
+ g_globals->_player._regionBitList |= 0x80;
scene->_field30A = 0;
- _globals->_player.setVisage(0);
- _globals->_player.setStrip2(-1);
- _globals->_player.fixPriority(-1);
- _globals->_player.setPosition(Common::Point(164, 96));
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player._canWalk = true;
+ g_globals->_player.setVisage(0);
+ g_globals->_player.setStrip2(-1);
+ g_globals->_player.fixPriority(-1);
+ g_globals->_player.setPosition(Common::Point(164, 96));
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player._canWalk = true;
- _globals->_events.setCursor(CURSOR_USE);
+ g_globals->_events.setCursor(CURSOR_USE);
remove();
}
}
@@ -3276,16 +3278,16 @@ void Scene2230::Action3::signal() {
void Scene2230::Action4::signal() {
switch (_actionIndex++) {
case 0:
- Common::Point pt(190 + _globals->_randomSource.getRandomNumber(9), 68);
+ Common::Point pt(190 + g_globals->_randomSource.getRandomNumber(9), 68);
NpcMover *mover = new NpcMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
_actionIndex = 0;
break;
}
}
void Scene2230::Action5::signal() {
- Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene;
+ Scene2230 *scene = (Scene2230 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -3299,22 +3301,22 @@ void Scene2230::Action5::signal() {
}
break;
case 1: {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
Common::Point pt(209, 124);
NpcMover *mover = new NpcMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 2:
- _globals->_player.fixPriority(1430);
- _globals->_player.setVisage(2232);
- _globals->_player._strip = 1;
- _globals->_player._frame = 1;
- _globals->_player.animate(ANIM_MODE_5, this);
+ g_globals->_player.fixPriority(1430);
+ g_globals->_player.setVisage(2232);
+ g_globals->_player._strip = 1;
+ g_globals->_player._frame = 1;
+ g_globals->_player.animate(ANIM_MODE_5, this);
break;
case 3:
- _globals->_events.setCursor(CURSOR_USE);
- _globals->_player._uiEnabled = true;
+ g_globals->_events.setCursor(CURSOR_USE);
+ g_globals->_player._uiEnabled = true;
scene->_field30A = 2;
remove();
break;
@@ -3322,32 +3324,32 @@ void Scene2230::Action5::signal() {
}
void Scene2230::Action6::signal() {
- Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene;
+ Scene2230 *scene = (Scene2230 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player._strip = 2;
- _globals->_player._frame = 1;
- _globals->_player.fixPriority(-1);
- _globals->_player.animate(ANIM_MODE_5, this);
+ g_globals->_player._strip = 2;
+ g_globals->_player._frame = 1;
+ g_globals->_player.fixPriority(-1);
+ g_globals->_player.animate(ANIM_MODE_5, this);
break;
case 1:
scene->_field30A = 0;
- _globals->_player.setVisage(0);
- _globals->_player._strip = 1;
- _globals->_player._canWalk = true;
- _globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.setVisage(0);
+ g_globals->_player._strip = 1;
+ g_globals->_player._canWalk = true;
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
remove();
break;
}
}
void Scene2230::Action7::signal() {
- Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene;
+ Scene2230 *scene = (Scene2230 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
switch (scene->_field30A) {
case 1:
@@ -3364,7 +3366,7 @@ void Scene2230::Action7::signal() {
case 1: {
Common::Point pt(140, 119);
NpcMover *mover = new NpcMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 2: {
@@ -3387,23 +3389,23 @@ void Scene2230::Action7::signal() {
scene->_hotspot8._frame = 2;
break;
case 4:
- _globals->_sceneItems.push_front(&scene->_hotspot10);
- _globals->_sceneItems.push_front(&scene->_hotspot11);
- _globals->_sceneItems.push_front(&scene->_hotspot12);
+ g_globals->_sceneItems.push_front(&scene->_hotspot10);
+ g_globals->_sceneItems.push_front(&scene->_hotspot11);
+ g_globals->_sceneItems.push_front(&scene->_hotspot12);
scene->_hotspot2.remove();
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
remove();
break;
}
}
void Scene2230::Action8::signal() {
- Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene;
+ Scene2230 *scene = (Scene2230 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
switch (scene->_field30A) {
case 1:
@@ -3420,13 +3422,13 @@ void Scene2230::Action8::signal() {
case 1: {
Common::Point pt(140, 119);
NpcMover *mover = new NpcMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 2: {
- _globals->_sceneItems.remove(&scene->_hotspot10);
- _globals->_sceneItems.remove(&scene->_hotspot11);
- _globals->_sceneItems.remove(&scene->_hotspot12);
+ g_globals->_sceneItems.remove(&scene->_hotspot10);
+ g_globals->_sceneItems.remove(&scene->_hotspot11);
+ g_globals->_sceneItems.remove(&scene->_hotspot12);
switch (scene->_field30A) {
case 1:
@@ -3462,7 +3464,7 @@ void Scene2230::Action8::signal() {
}
case 5:
scene->_hotspot8.setStrip2(1);
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
remove();
break;
@@ -3473,7 +3475,7 @@ void Scene2230::Action8::signal() {
/*--------------------------------------------------------------------------*/
void Scene2230::Hotspot1::doAction(int action) {
- Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene;
+ Scene2230 *scene = (Scene2230 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
@@ -3491,13 +3493,13 @@ void Scene2230::Hotspot1::doAction(int action) {
void Scene2230::Hotspot3::doAction(int action) {
switch (action) {
case CURSOR_LOOK:
- if (_globals->getFlag(4))
+ if (g_globals->getFlag(4))
SceneItem::display2(2230, 1);
else {
SceneItem::display2(2230, 1);
SceneItem::display2(2230, 2);
SceneItem::display2(2230, 3);
- _globals->setFlag(4);
+ g_globals->setFlag(4);
}
break;
default:
@@ -3509,14 +3511,14 @@ void Scene2230::Hotspot3::doAction(int action) {
void Scene2230::Hotspot4::doAction(int action) {
switch (action) {
case CURSOR_LOOK:
- if (_globals->getFlag(30))
+ if (g_globals->getFlag(30))
SceneItem::display2(2230, 6);
- else if (_globals->getFlag(29)) {
+ else if (g_globals->getFlag(29)) {
SceneItem::display2(2230, 5);
- _globals->setFlag(30);
+ g_globals->setFlag(30);
} else {
SceneItem::display2(2230, 4);
- _globals->setFlag(29);
+ g_globals->setFlag(29);
}
break;
case CURSOR_USE:
@@ -3531,10 +3533,10 @@ void Scene2230::Hotspot4::doAction(int action) {
void Scene2230::Hotspot5::doAction(int action) {
switch (action) {
case CURSOR_LOOK:
- if (_globals->getFlag(5))
+ if (g_globals->getFlag(5))
SceneItem::display2(2230, 9);
else {
- _globals->setFlag(5);
+ g_globals->setFlag(5);
SceneItem::display2(2230, 8);
}
break;
@@ -3545,21 +3547,21 @@ void Scene2230::Hotspot5::doAction(int action) {
}
void Scene2230::Hotspot6::doAction(int action) {
- Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene;
+ Scene2230 *scene = (Scene2230 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
- if (_globals->getFlag(6))
+ if (g_globals->getFlag(6))
SceneItem::display2(2230, 11);
else {
- _globals->setFlag(6);
+ g_globals->setFlag(6);
SceneItem::display2(2230, 10);
}
break;
case CURSOR_USE:
if (scene->_field30A == 1)
scene->setAction(&scene->_action3);
- else if (_globals->getFlag(13))
+ else if (g_globals->getFlag(13))
SceneItem::display2(2230, 28);
else
scene->setAction(&scene->_action2);
@@ -3571,21 +3573,21 @@ void Scene2230::Hotspot6::doAction(int action) {
}
void Scene2230::Hotspot7::doAction(int action) {
- Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene;
+ Scene2230 *scene = (Scene2230 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
- if (_globals->getFlag(7))
+ if (g_globals->getFlag(7))
SceneItem::display2(2230, 13);
else {
- _globals->setFlag(6);
+ g_globals->setFlag(6);
SceneItem::display2(2230, 12);
}
break;
case CURSOR_USE:
if (scene->_field30A == 2)
scene->setAction(&scene->_action6);
- else if (_globals->getFlag(13))
+ else if (g_globals->getFlag(13))
SceneItem::display2(2230, 29);
else
scene->setAction(&scene->_action5);
@@ -3597,22 +3599,22 @@ void Scene2230::Hotspot7::doAction(int action) {
}
void Scene2230::Hotspot8::doAction(int action) {
- Scene2230 *scene = (Scene2230 *)_globals->_sceneManager._scene;
+ Scene2230 *scene = (Scene2230 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
if (scene->_hotspot8._strip == 1) {
- if (_globals->getFlag(22))
+ if (g_globals->getFlag(22))
SceneItem::display2(2230, 19);
else {
- _globals->setFlag(22);
+ g_globals->setFlag(22);
SceneItem::display2(2230, 14);
}
} else {
- if (_globals->getFlag(25))
+ if (g_globals->getFlag(25))
SceneItem::display2(2230, 21);
else {
- _globals->setFlag(25);
+ g_globals->setFlag(25);
SceneItem::display2(2230, 20);
}
}
@@ -3632,10 +3634,10 @@ void Scene2230::Hotspot8::doAction(int action) {
void Scene2230::Hotspot10::doAction(int action) {
switch (action) {
case CURSOR_LOOK:
- if (_globals->getFlag(26))
+ if (g_globals->getFlag(26))
SceneItem::display2(2230, 25);
else {
- _globals->setFlag(26);
+ g_globals->setFlag(26);
SceneItem::display2(2230, 24);
}
break;
@@ -3651,10 +3653,10 @@ void Scene2230::Hotspot10::doAction(int action) {
void Scene2230::Hotspot11::doAction(int action) {
switch (action) {
case CURSOR_LOOK:
- if (_globals->getFlag(27))
+ if (g_globals->getFlag(27))
SceneItem::display2(2230, 23);
else {
- _globals->setFlag(27);
+ g_globals->setFlag(27);
SceneItem::display2(2230, 22);
}
break;
@@ -3670,10 +3672,10 @@ void Scene2230::Hotspot11::doAction(int action) {
void Scene2230::Hotspot12::doAction(int action) {
switch (action) {
case CURSOR_LOOK:
- if (_globals->getFlag(28))
+ if (g_globals->getFlag(28))
SceneItem::display2(2230, 27);
else {
- _globals->setFlag(28);
+ g_globals->setFlag(28);
SceneItem::display2(2230, 26);
}
break;
@@ -3714,17 +3716,17 @@ void Scene2230::postInit(SceneObjectList *OwnerList) {
_rect1 = Rect(59, 64, 89, 74);
- _globals->_player.postInit();
- _globals->_player.setVisage(_globals->getFlag(13) ? 2170 : 0);
- _globals->_player.animate(ANIM_MODE_1, 0);
- _globals->_player.setObjectWrapper(new SceneObjectWrapper());
- _globals->_player.setPosition(Common::Point(80, 80));
- _globals->_player._moveDiff.y = 3;
- _globals->_player._regionBitList |= 0x80;
- _globals->_player.changeZoom(-1);
+ g_globals->_player.postInit();
+ g_globals->_player.setVisage(g_globals->getFlag(13) ? 2170 : 0);
+ g_globals->_player.animate(ANIM_MODE_1, 0);
+ g_globals->_player.setObjectWrapper(new SceneObjectWrapper());
+ g_globals->_player.setPosition(Common::Point(80, 80));
+ g_globals->_player._moveDiff.y = 3;
+ g_globals->_player._regionBitList |= 0x80;
+ g_globals->_player.changeZoom(-1);
_field30A = 0;
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
_hotspot5.setBounds(Rect(108, 34, 142, 76));
_hotspot4.setBounds(Rect(92, 14, 106, 57));
@@ -3735,11 +3737,11 @@ void Scene2230::postInit(SceneObjectList *OwnerList) {
_hotspot11.setBounds(Rect(158, 109, 164, 115));
_hotspot12.setBounds(Rect(170, 109, 177, 115));
- _globals->_sceneItems.addItems(&_hotspot8, &_hotspot5, &_hotspot4, &_hotspot6, &_hotspot7,
+ g_globals->_sceneItems.addItems(&_hotspot8, &_hotspot5, &_hotspot4, &_hotspot6, &_hotspot7,
&_hotspot1, &_hotspot3, NULL);
- _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds);
- _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
+ g_globals->_sceneManager._scene->_sceneBounds.contain(g_globals->_sceneManager._scene->_backgroundBounds);
+ g_globals->_sceneOffset.x = (g_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
}
void Scene2230::synchronize(Serializer &s) {
@@ -3752,7 +3754,7 @@ void Scene2230::dispatch() {
Scene::dispatch();
if (!_action) {
- if (_rect1.contains(_globals->_player._position))
+ if (_rect1.contains(g_globals->_player._position))
setAction(&_action1);
}
}
@@ -3763,14 +3765,14 @@ void Scene2230::dispatch() {
*--------------------------------------------------------------------------*/
void Scene2280::Action1::signal() {
- Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene;
+ Scene2280 *scene = (Scene2280 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0: {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
Common::Point pt(192, 97);
PlayerMover *mover = new PlayerMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 1:
@@ -3780,90 +3782,90 @@ void Scene2280::Action1::signal() {
case 2: {
Common::Point pt(218, 87);
NpcMover *mover = new NpcMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 3:
- _globals->_player.setStrip(3);
+ g_globals->_player.setStrip(3);
setDelay(10);
break;
case 4:
- _globals->_player.fixPriority(1);
+ g_globals->_player.fixPriority(1);
scene->_soundHandler.play(162);
scene->_hotspot16.animate(ANIM_MODE_6, this);
break;
case 5:
- _globals->_sceneManager.changeScene(7000);
+ g_globals->_sceneManager.changeScene(7000);
break;
}
}
void Scene2280::Action2::signal() {
- Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene;
+ Scene2280 *scene = (Scene2280 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0: {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
Common::Point pt(94, 117);
PlayerMover *mover = new PlayerMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 1:
scene->_soundHandler.play(265);
- _globals->_player.setVisage(2162);
- _globals->_player._frame = 1;
- _globals->_player._strip = 1;
- _globals->_player.animate(ANIM_MODE_5, this);
+ g_globals->_player.setVisage(2162);
+ g_globals->_player._frame = 1;
+ g_globals->_player._strip = 1;
+ g_globals->_player.animate(ANIM_MODE_5, this);
scene->_hotspot8.remove();
scene->_hotspot10.remove();
break;
case 2:
- _globals->_player._frame = 1;
- _globals->_player._strip = 2;
- _globals->_player.animate(ANIM_MODE_4, 3, 1, this);
+ g_globals->_player._frame = 1;
+ g_globals->_player._strip = 2;
+ g_globals->_player.animate(ANIM_MODE_4, 3, 1, this);
break;
case 3:
- _globals->_player.animate(ANIM_MODE_5, this);
+ g_globals->_player.animate(ANIM_MODE_5, this);
scene->_hotspot12.remove();
break;
case 4:
scene->_soundHandler.play(266);
- _globals->_player.setVisage(2170);
- _globals->_player._frame = 1;
- _globals->_player._strip = 4;
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player._moveDiff = Common::Point(4, 1);
+ g_globals->_player.setVisage(2170);
+ g_globals->_player._frame = 1;
+ g_globals->_player._strip = 4;
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player._moveDiff = Common::Point(4, 1);
- _globals->setFlag(13);
+ g_globals->setFlag(13);
SceneItem::display2(2280, 37);
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
remove();
break;
}
}
void Scene2280::Action3::signal() {
- Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene;
+ Scene2280 *scene = (Scene2280 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0: {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
Common::Point pt(94, 117);
PlayerMover *mover = new PlayerMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 1:
scene->_soundHandler.play(265);
- _globals->_player.setVisage(2162);
- _globals->_player._frame = 6;
- _globals->_player._strip = 2;
- _globals->_player.animate(ANIM_MODE_4, 3, -1, this);
+ g_globals->_player.setVisage(2162);
+ g_globals->_player._frame = 6;
+ g_globals->_player._strip = 2;
+ g_globals->_player.animate(ANIM_MODE_4, 3, -1, this);
break;
case 2:
scene->_hotspot12.postInit();
@@ -3873,13 +3875,13 @@ void Scene2280::Action3::signal() {
scene->_hotspot12.setPosition(Common::Point(88, 76));
scene->_hotspot12.fixPriority(1);
- _globals->_player.animate(ANIM_MODE_6, this);
+ g_globals->_player.animate(ANIM_MODE_6, this);
break;
case 3:
- _globals->_player._strip = 1;
- _globals->_player._frame = 12;
+ g_globals->_player._strip = 1;
+ g_globals->_player._frame = 12;
- _globals->_player.animate(ANIM_MODE_6, this);
+ g_globals->_player.animate(ANIM_MODE_6, this);
break;
case 4:
scene->_hotspot8.postInit();
@@ -3900,22 +3902,22 @@ void Scene2280::Action3::signal() {
scene->_hotspot10.changeZoom(100);
scene->_hotspot10.fixPriority(1);
- _globals->clearFlag(13);
+ g_globals->clearFlag(13);
- _globals->_player.setVisage(0);
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player._strip = 4;
- _globals->_player._moveDiff = Common::Point(3, 5);
+ g_globals->_player.setVisage(0);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player._strip = 4;
+ g_globals->_player._moveDiff = Common::Point(3, 5);
SceneItem::display2(2280, 38);
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
remove();
break;
}
}
void Scene2280::Action4::signal() {
- Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene;
+ Scene2280 *scene = (Scene2280 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0: {
@@ -3924,24 +3926,24 @@ void Scene2280::Action4::signal() {
case 51: {
Common::Point pt(163, 67);
NpcMover *mover = new NpcMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 6:
case 50: {
Common::Point pt(173, 63);
NpcMover *mover = new NpcMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
}
break;
}
case 1:
- _globals->_player.setVisage(2161);
- _globals->_player._strip = 1;
- _globals->_player._frame = 1;
- _globals->_player.animate(ANIM_MODE_5, this);
+ g_globals->_player.setVisage(2161);
+ g_globals->_player._strip = 1;
+ g_globals->_player._frame = 1;
+ g_globals->_player.animate(ANIM_MODE_5, this);
break;
case 2:
switch (_state) {
@@ -3964,7 +3966,7 @@ void Scene2280::Action4::signal() {
scene->_hotspot17.fixPriority(1);
RING_INVENTORY._medkit._sceneNumber = 2280;
- _globals->_sceneItems.push_front(&scene->_hotspot17);
+ g_globals->_sceneItems.push_front(&scene->_hotspot17);
break;
case 51:
scene->_hotspot18.postInit();
@@ -3977,17 +3979,17 @@ void Scene2280::Action4::signal() {
scene->_hotspot18.fixPriority(1);
RING_INVENTORY._scanner._sceneNumber = 2280;
- _globals->_sceneItems.push_front(&scene->_hotspot18);
+ g_globals->_sceneItems.push_front(&scene->_hotspot18);
break;
}
- _globals->_player.animate(ANIM_MODE_6, this);
+ g_globals->_player.animate(ANIM_MODE_6, this);
break;
case 3:
- _globals->_player.enableControl();
- _globals->_player.setVisage(0);
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player._strip = 2;
+ g_globals->_player.enableControl();
+ g_globals->_player.setVisage(0);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player._strip = 2;
remove();
break;
@@ -3997,24 +3999,24 @@ void Scene2280::Action4::signal() {
/*--------------------------------------------------------------------------*/
void Scene2280::Hotspot1::doAction(int action) {
- Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene;
+ Scene2280 *scene = (Scene2280 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
- if (_globals->getFlag(16))
+ if (g_globals->getFlag(16))
SceneItem::display2(2280, 22);
else {
- _globals->setFlag(16);
+ g_globals->setFlag(16);
SceneItem::display2(2230, 21);
}
break;
case CURSOR_USE:
- if (!_globals->getFlag(15))
+ if (!g_globals->getFlag(15))
SceneItem::display2(2280, 23);
- else if (!_globals->getFlag(13))
+ else if (!g_globals->getFlag(13))
SceneItem::display2(2280, 46);
else {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->setAction(&scene->_action1);
}
break;
@@ -4027,10 +4029,10 @@ void Scene2280::Hotspot1::doAction(int action) {
void Scene2280::Hotspot2::doAction(int action) {
switch (action) {
case CURSOR_LOOK:
- if (_globals->getFlag(2))
+ if (g_globals->getFlag(2))
SceneItem::display2(2280, 1);
else {
- _globals->setFlag(2);
+ g_globals->setFlag(2);
SceneItem::display2(2280, 0);
}
break;
@@ -4046,10 +4048,10 @@ void Scene2280::Hotspot2::doAction(int action) {
void Scene2280::Hotspot4::doAction(int action) {
switch (action) {
case CURSOR_LOOK:
- if (_globals->getFlag(21))
+ if (g_globals->getFlag(21))
SceneItem::display2(2280, 33);
else {
- _globals->setFlag(21);
+ g_globals->setFlag(21);
SceneItem::display2(2280, 32);
}
break;
@@ -4063,31 +4065,31 @@ void Scene2280::Hotspot4::doAction(int action) {
}
void Scene2280::Hotspot7::doAction(int action) {
- Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene;
+ Scene2280 *scene = (Scene2280 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2280, 24);
break;
case OBJECT_SCANNER:
- if (_globals->getFlag(13))
+ if (g_globals->getFlag(13))
SceneItem::display2(2280, 43);
else {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_action4._state = 51;
- _globals->_events.setCursor(CURSOR_WALK);
- _globals->_events._currentCursor = CURSOR_700;
+ g_globals->_events.setCursor(CURSOR_WALK);
+ g_globals->_events._currentCursor = CURSOR_700;
scene->setAction(&scene->_action4);
}
break;
case OBJECT_MEDKIT:
- if (_globals->getFlag(13))
+ if (g_globals->getFlag(13))
SceneItem::display2(2280, 43);
else {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_action4._state = 50;
- _globals->_events.setCursor(CURSOR_WALK);
- _globals->_events._currentCursor = CURSOR_700;
+ g_globals->_events.setCursor(CURSOR_WALK);
+ g_globals->_events._currentCursor = CURSOR_700;
scene->setAction(&scene->_action4);
}
break;
@@ -4098,14 +4100,14 @@ void Scene2280::Hotspot7::doAction(int action) {
}
void Scene2280::Hotspot8::doAction(int action) {
- Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene;
+ Scene2280 *scene = (Scene2280 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2280, 3);
break;
case CURSOR_USE:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->setAction(&scene->_action2);
break;
default:
@@ -4115,14 +4117,14 @@ void Scene2280::Hotspot8::doAction(int action) {
}
void Scene2280::Hotspot10::doAction(int action) {
- Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene;
+ Scene2280 *scene = (Scene2280 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2280, 4);
break;
case CURSOR_USE:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->setAction(&scene->_action2);
break;
default:
@@ -4132,14 +4134,14 @@ void Scene2280::Hotspot10::doAction(int action) {
}
void Scene2280::Hotspot12::doAction(int action) {
- Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene;
+ Scene2280 *scene = (Scene2280 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2280, 11);
break;
case CURSOR_USE:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->setAction(&scene->_action2);
break;
default:
@@ -4149,15 +4151,15 @@ void Scene2280::Hotspot12::doAction(int action) {
}
void Scene2280::Hotspot14::doAction(int action) {
- Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene;
+ Scene2280 *scene = (Scene2280 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2280, 3);
break;
case CURSOR_USE:
- _globals->_player.disableControl();
- if (_globals->getFlag(13))
+ g_globals->_player.disableControl();
+ if (g_globals->getFlag(13))
scene->setAction(&scene->_action3);
else
scene->setAction(&scene->_action2);
@@ -4169,22 +4171,22 @@ void Scene2280::Hotspot14::doAction(int action) {
}
void Scene2280::Hotspot17::doAction(int action) {
- Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene;
+ Scene2280 *scene = (Scene2280 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
- if (_globals->getFlag(18))
+ if (g_globals->getFlag(18))
SceneItem::display2(2280, 26);
else {
- _globals->setFlag(18);
+ g_globals->setFlag(18);
SceneItem::display2(2280, 25);
}
break;
case CURSOR_USE:
- if (_globals->getFlag(13))
+ if (g_globals->getFlag(13))
SceneItem::display2(2280, 29);
else {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_action4._state = 6;
scene->setAction(&scene->_action4);
}
@@ -4196,22 +4198,22 @@ void Scene2280::Hotspot17::doAction(int action) {
}
void Scene2280::Hotspot18::doAction(int action) {
- Scene2280 *scene = (Scene2280 *)_globals->_sceneManager._scene;
+ Scene2280 *scene = (Scene2280 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
- if (_globals->getFlag(19))
+ if (g_globals->getFlag(19))
SceneItem::display2(2280, 28);
else {
- _globals->setFlag(19);
+ g_globals->setFlag(19);
SceneItem::display2(2280, 27);
}
break;
case CURSOR_USE:
- if (_globals->getFlag(13))
+ if (g_globals->getFlag(13))
SceneItem::display2(2280, 29);
else {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_action4._state = 1;
scene->setAction(&scene->_action4);
}
@@ -4252,7 +4254,7 @@ void Scene2280::postInit(SceneObjectList *OwnerList) {
_hotspot17.setPosition(Common::Point(162, 39));
_hotspot17.fixPriority(1);
- _globals->_sceneItems.push_back(&_hotspot17);
+ g_globals->_sceneItems.push_back(&_hotspot17);
}
if (RING_INVENTORY._scanner._sceneNumber == 2280) {
@@ -4263,10 +4265,10 @@ void Scene2280::postInit(SceneObjectList *OwnerList) {
_hotspot17.setPosition(Common::Point(152, 43));
_hotspot17.fixPriority(1);
- _globals->_sceneItems.push_back(&_hotspot17);
+ g_globals->_sceneItems.push_back(&_hotspot17);
}
- if (!_globals->getFlag(13)) {
+ if (!g_globals->getFlag(13)) {
_hotspot8.postInit();
_hotspot8.setVisage(2280);
_hotspot8._strip = 2;
@@ -4287,7 +4289,7 @@ void Scene2280::postInit(SceneObjectList *OwnerList) {
_hotspot12.setPosition(Common::Point(88, 76));
_hotspot12.fixPriority(1);
- _globals->_sceneItems.addItems(&_hotspot8, &_hotspot10, &_hotspot12, NULL);
+ g_globals->_sceneItems.addItems(&_hotspot8, &_hotspot10, &_hotspot12, NULL);
}
_hotspot14.setBounds(Rect(70, 50, 90, 104));
@@ -4320,47 +4322,47 @@ void Scene2280::postInit(SceneObjectList *OwnerList) {
_exitRect = Rect(145, 180, 195, 195);
- _globals->_player.postInit();
- _globals->_player.setVisage(_globals->getFlag(13) ? 2170 : 0);
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player.setObjectWrapper(new SceneObjectWrapper());
- _globals->_player.setPosition(Common::Point(146, 161));
- _globals->_player.changeZoom(-1);
- _globals->_player._moveDiff = Common::Point(4, 3);
+ g_globals->_player.postInit();
+ g_globals->_player.setVisage(g_globals->getFlag(13) ? 2170 : 0);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.setObjectWrapper(new SceneObjectWrapper());
+ g_globals->_player.setPosition(Common::Point(146, 161));
+ g_globals->_player.changeZoom(-1);
+ g_globals->_player._moveDiff = Common::Point(4, 3);
- if ((_globals->_sceneManager._previousScene != 7300) && (_globals->_sceneManager._previousScene != 7000)) {
- _globals->_player.enableControl();
+ if ((g_globals->_sceneManager._previousScene != 7300) && (g_globals->_sceneManager._previousScene != 7000)) {
+ g_globals->_player.enableControl();
} else {
- _globals->setFlag(109);
- _globals->_player.fixPriority(76);
- _globals->_player.disableControl();
+ g_globals->setFlag(109);
+ g_globals->_player.fixPriority(76);
+ g_globals->_player.disableControl();
_sceneMode = 2281;
- setAction(&_sequenceManager, this, 2281, &_globals->_player, &_hotspot16, NULL);
+ setAction(&_sequenceManager, this, 2281, &g_globals->_player, &_hotspot16, NULL);
- _globals->_soundHandler.play(160);
- _globals->_soundHandler.holdAt(true);
+ g_globals->_soundHandler.play(160);
+ g_globals->_soundHandler.holdAt(true);
}
- _globals->_sceneItems.addItems(&_hotspot13, &_hotspot11, &_hotspot9, &_hotspot14, &_hotspot7,
+ g_globals->_sceneItems.addItems(&_hotspot13, &_hotspot11, &_hotspot9, &_hotspot14, &_hotspot7,
&_hotspot6, &_hotspot2, &_hotspot3, &_hotspot4, &_hotspot5, &_hotspot1, &_hotspot16, &_hotspot15, NULL);
- _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds);
- _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
+ g_globals->_sceneManager._scene->_sceneBounds.contain(g_globals->_sceneManager._scene->_backgroundBounds);
+ g_globals->_sceneOffset.x = (g_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
}
void Scene2280::signal() {
if (_sceneMode == 2281) {
- _globals->_player.fixPriority(-1);
- _globals->_player.enableControl();
+ g_globals->_player.fixPriority(-1);
+ g_globals->_player.enableControl();
}
}
void Scene2280::dispatch() {
Scene::dispatch();
if (!_action) {
- if (_exitRect.contains(_globals->_player._position))
- _globals->_sceneManager.changeScene(2150);
+ if (_exitRect.contains(g_globals->_player._position))
+ g_globals->_sceneManager.changeScene(2150);
}
}
@@ -4376,7 +4378,7 @@ void Scene2280::synchronize(Serializer &s) {
void Scene2300::Action1::signal() {
// Quinn and Seeker
- Scene2300 *scene = (Scene2300 *)_globals->_sceneManager._scene;
+ Scene2300 *scene = (Scene2300 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -4403,8 +4405,8 @@ void Scene2300::Action1::signal() {
}
case 3:
setDelay(2);
- _globals->_player._uiEnabled = true;
- _globals->_events.setCursor(CURSOR_WALK);
+ g_globals->_player._uiEnabled = true;
+ g_globals->_events.setCursor(CURSOR_WALK);
break;
case 4: {
scene->_hotspot5.setVisage(93);
@@ -4429,23 +4431,23 @@ void Scene2300::Action1::signal() {
}
case 6:
scene->_soundHandler1.play(28);
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_hotspot2.setVisage(40);
scene->_hotspot2.setStrip(4);
scene->_hotspot2.setFrame(1);
scene->_hotspot2.animate(ANIM_MODE_5, NULL);
- _globals->_player.setVisage(40);
- _globals->_player.setStrip(2);
- _globals->_player.setFrame(1);
- _globals->_player.animate(ANIM_MODE_5, this);
+ g_globals->_player.setVisage(40);
+ g_globals->_player.setStrip(2);
+ g_globals->_player.setFrame(1);
+ g_globals->_player.animate(ANIM_MODE_5, this);
break;
case 7:
- _globals->_soundHandler.play(77, this);
+ g_globals->_soundHandler.play(77, this);
break;
case 8:
- _globals->_game->endGame(2300, 0);
+ g_globals->_game->endGame(2300, 0);
remove();
break;
case 9:
@@ -4457,17 +4459,17 @@ void Scene2300::Action1::signal() {
scene->_hotspot5.animate(ANIM_MODE_NONE, NULL);
scene->_hotspot6.animate(ANIM_MODE_NONE, NULL);
- _globals->_player.disableControl();
- _globals->_player.setVisage(2672);
- _globals->_player._strip = 5;
- _globals->_player._frame = 1;
- _globals->_player.animate(ANIM_MODE_5, this);
+ g_globals->_player.disableControl();
+ g_globals->_player.setVisage(2672);
+ g_globals->_player._strip = 5;
+ g_globals->_player._frame = 1;
+ g_globals->_player.animate(ANIM_MODE_5, this);
break;
case 10:
- _globals->_player.setVisage(2674);
- _globals->_player._strip = 5;
- _globals->_player._frame = 1;
- _globals->_player.animate(ANIM_MODE_5, this);
+ g_globals->_player.setVisage(2674);
+ g_globals->_player._strip = 5;
+ g_globals->_player._frame = 1;
+ g_globals->_player.animate(ANIM_MODE_5, this);
break;
case 11:
scene->_soundHandler1.play(28);
@@ -4481,17 +4483,17 @@ void Scene2300::Action1::signal() {
scene->_hotspot5.fixPriority(20);
scene->_hotspot6.fixPriority(20);
- _globals->_player.setVisage(2672);
- _globals->_player._strip = 5;
- _globals->_player._frame = _globals->_player.getFrameCount();
- _globals->_player.animate(ANIM_MODE_6, this);
+ g_globals->_player.setVisage(2672);
+ g_globals->_player._strip = 5;
+ g_globals->_player._frame = g_globals->_player.getFrameCount();
+ g_globals->_player.animate(ANIM_MODE_6, this);
break;
case 12:
scene->_soundHandler1.play(77);
- _globals->_player.setVisage(0);
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player.setStrip(4);
- _globals->_player._uiEnabled = false;
+ g_globals->_player.setVisage(0);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.setStrip(4);
+ g_globals->_player._uiEnabled = false;
setDelay(60);
break;
case 13:
@@ -4504,7 +4506,7 @@ void Scene2300::Action1::signal() {
case 15: {
Common::Point pt1(101, 148);
PlayerMover *mover1 = new PlayerMover();
- _globals->_player.addMover(mover1, &pt1, this);
+ g_globals->_player.addMover(mover1, &pt1, this);
Common::Point pt2(scene->_hotspot5._position.x + 5, scene->_hotspot5._position.y + 5);
NpcMover *mover2 = new NpcMover();
@@ -4512,7 +4514,7 @@ void Scene2300::Action1::signal() {
break;
}
case 16:
- _globals->_sceneManager.changeScene(2000);
+ g_globals->_sceneManager.changeScene(2000);
remove();
break;
}
@@ -4520,29 +4522,29 @@ void Scene2300::Action1::signal() {
void Scene2300::Action2::signal() {
// Miranda tearing cables
- Scene2300 *scene = (Scene2300 *)_globals->_sceneManager._scene;
+ Scene2300 *scene = (Scene2300 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
setDelay(30);
break;
case 1: {
Common::Point pt(153, 135);
PlayerMover *mover = new PlayerMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 2:
- _globals->_events.setCursor(CURSOR_WALK);
+ g_globals->_events.setCursor(CURSOR_WALK);
scene->_stripManager.start(2030, this);
break;
case 3:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
setDelay(600);
break;
case 4: {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_hotspot2.postInit();
scene->_hotspot2.setVisage(2801);
@@ -4580,34 +4582,34 @@ void Scene2300::Action2::signal() {
scene->_stripManager.start(2035, this);
break;
case 10:
- _globals->_sceneManager.changeScene(2310);
+ g_globals->_sceneManager.changeScene(2310);
break;
}
}
void Scene2300::Action3::signal() {
// Stunned Miranda
- Scene2300 *scene = (Scene2300 *)_globals->_sceneManager._scene;
+ Scene2300 *scene = (Scene2300 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0: {
Common::Point pt(153, 135);
PlayerMover *mover = new PlayerMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 1:
- _globals->_player.disableControl();
- _globals->_player.setVisage(2672);
- _globals->_player._strip = 2;
- _globals->_player._frame = 1;
- _globals->_player.animate(ANIM_MODE_5, this);
+ g_globals->_player.disableControl();
+ g_globals->_player.setVisage(2672);
+ g_globals->_player._strip = 2;
+ g_globals->_player._frame = 1;
+ g_globals->_player.animate(ANIM_MODE_5, this);
break;
case 2:
- _globals->_player.setVisage(2674);
- _globals->_player._strip = 2;
- _globals->_player._frame = 1;
- _globals->_player.animate(ANIM_MODE_5, this);
+ g_globals->_player.setVisage(2674);
+ g_globals->_player._strip = 2;
+ g_globals->_player._frame = 1;
+ g_globals->_player.animate(ANIM_MODE_5, this);
break;
case 3:
scene->_soundHandler1.play(97);
@@ -4617,30 +4619,30 @@ void Scene2300::Action3::signal() {
scene->_hotspot7._frame = 1;
scene->_hotspot7.animate(ANIM_MODE_5, this);
- _globals->_player.setVisage(2672);
- _globals->_player._strip = 2;
- _globals->_player._frame = _globals->_player.getFrameCount();
- _globals->_player.animate(ANIM_MODE_6, NULL);
+ g_globals->_player.setVisage(2672);
+ g_globals->_player._strip = 2;
+ g_globals->_player._frame = g_globals->_player.getFrameCount();
+ g_globals->_player.animate(ANIM_MODE_6, NULL);
break;
case 4:
scene->_soundHandler2.play(97);
- _globals->_player.setVisage(0);
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player.setStrip(1);
+ g_globals->_player.setVisage(0);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.setStrip(1);
scene->_stripManager.start(2034, this);
break;
case 5:
setDelay(10);
break;
case 6:
- _globals->_sceneManager.changeScene(2310);
+ g_globals->_sceneManager.changeScene(2310);
break;
}
}
void Scene2300::Action4::signal() {
// Ennemies coming
- Scene2300 *scene = (Scene2300 *)_globals->_sceneManager._scene;
+ Scene2300 *scene = (Scene2300 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -4679,12 +4681,12 @@ void Scene2300::Action4::signal() {
void Scene2300::Hotspot5::doAction(int action) {
// Ennemies
- Scene2300 *scene = (Scene2300 *)_globals->_sceneManager._scene;
+ Scene2300 *scene = (Scene2300 *)g_globals->_sceneManager._scene;
switch (action) {
case OBJECT_STUNNER:
- _globals->_player.disableControl();
- _globals->_player.addMover(NULL);
+ g_globals->_player.disableControl();
+ g_globals->_player.addMover(NULL);
scene->_action1.setActionIndex(9);
scene->_action1.setDelay(1);
break;
@@ -4702,7 +4704,7 @@ void Scene2300::Hotspot5::doAction(int action) {
void Scene2300::Hotspot7::doAction(int action) {
// Miranda
- Scene2300 *scene = (Scene2300 *)_globals->_sceneManager._scene;
+ Scene2300 *scene = (Scene2300 *)g_globals->_sceneManager._scene;
switch (action) {
case OBJECT_STUNNER:
@@ -4747,8 +4749,8 @@ void Scene2300::postInit(SceneObjectList *OwnerList) {
_hotspot8.setVisage(2301);
_hotspot8.setPosition(Common::Point(288, 74));
- _globals->_soundHandler.play(96);
- if (_globals->_sceneManager._previousScene == 2000) {
+ g_globals->_soundHandler.play(96);
+ if (g_globals->_sceneManager._previousScene == 2000) {
_hotspot8.remove();
_hotspot9.postInit();
@@ -4764,13 +4766,13 @@ void Scene2300::postInit(SceneObjectList *OwnerList) {
_hotspot10._frame = _hotspot10.getFrameCount();
_hotspot10.setPosition(Common::Point(292, 113));
- _globals->_player.postInit();
- _globals->_player.setVisage(0);
- _globals->_player.setPosition(Common::Point(109, 139));
- _globals->_player.changeZoom(40);
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player.setObjectWrapper(new SceneObjectWrapper());
- _globals->_player.disableControl();
+ g_globals->_player.postInit();
+ g_globals->_player.setVisage(0);
+ g_globals->_player.setPosition(Common::Point(109, 139));
+ g_globals->_player.changeZoom(40);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.setObjectWrapper(new SceneObjectWrapper());
+ g_globals->_player.disableControl();
_hotspot7.postInit();
_hotspot7.setVisage(2302);
@@ -4780,7 +4782,7 @@ void Scene2300::postInit(SceneObjectList *OwnerList) {
_soundHandler1.play(95);
_soundHandler2.play(96);
- _globals->_sceneItems.push_back(&_hotspot7);
+ g_globals->_sceneItems.push_back(&_hotspot7);
setAction(&_action2);
} else {
@@ -4805,13 +4807,13 @@ void Scene2300::postInit(SceneObjectList *OwnerList) {
_hotspot1.setPosition(Common::Point(255, 190));
_hotspot1.changeZoom(40);
- _globals->_player.postInit();
- _globals->_player.setVisage(0);
- _globals->_player.setPosition(Common::Point(203, 191));
- _globals->_player.changeZoom(40);
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player.setObjectWrapper(new SceneObjectWrapper());
- _globals->_player.disableControl();
+ g_globals->_player.postInit();
+ g_globals->_player.setVisage(0);
+ g_globals->_player.setPosition(Common::Point(203, 191));
+ g_globals->_player.changeZoom(40);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.setObjectWrapper(new SceneObjectWrapper());
+ g_globals->_player.disableControl();
_hotspot5.postInit();
_hotspot5.setVisage(91);
@@ -4827,7 +4829,7 @@ void Scene2300::postInit(SceneObjectList *OwnerList) {
_hotspot6.changeZoom(40);
_hotspot6.setObjectWrapper(new SceneObjectWrapper());
- _globals->_sceneItems.push_back(&_hotspot5);
+ g_globals->_sceneItems.push_back(&_hotspot5);
setAction(&_action1);
}
@@ -4837,7 +4839,7 @@ void Scene2300::postInit(SceneObjectList *OwnerList) {
_hotspot14._sceneRegionId = 11;
_hotspot15.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT));
- _globals->_sceneItems.addItems(&_hotspot12, &_hotspot11, &_hotspot13, &_hotspot14, &_hotspot15, NULL);
+ g_globals->_sceneItems.addItems(&_hotspot12, &_hotspot11, &_hotspot13, &_hotspot14, &_hotspot15, NULL);
}
/*--------------------------------------------------------------------------
@@ -4891,20 +4893,20 @@ void Scene2310::postInit(SceneObjectList *OwnerList) {
_wireList[idx].setPosition(pointList[idx]);
}
- _globals->_player.disableControl();
- _globals->_events.setCursor(CURSOR_WALK);
+ g_globals->_player.disableControl();
+ g_globals->_events.setCursor(CURSOR_WALK);
- if (_vm->getFeatures() & GF_CD)
- _pageIndex = _globals->_randomSource.getRandomNumber(14) + 2;
+ if (g_vm->getFeatures() & GF_CD)
+ _pageIndex = g_globals->_randomSource.getRandomNumber(14) + 2;
else
- _pageIndex = _globals->_randomSource.getRandomNumber(19) + 1;
+ _pageIndex = g_globals->_randomSource.getRandomNumber(19) + 1;
signal();
}
void Scene2310::signal() {
switch (_sceneMode++) {
case 0: {
- Common::String fmtString = _resourceManager->getMessage(2300, 22);
+ Common::String fmtString = g_resourceManager->getMessage(2300, 22);
Common::String msg = Common::String::format(fmtString.c_str(), _pageList[_pageIndex]._pageNumber);
_sceneText._width = 280;
@@ -4917,18 +4919,18 @@ void Scene2310::signal() {
break;
}
case 1: {
- Common::String msg = _resourceManager->getMessage(2300, 23);
+ Common::String msg = g_resourceManager->getMessage(2300, 23);
_sceneText.setup(msg);
_sceneText.fixPriority(255);
_sceneText.setPosition(Common::Point(30, 170));
- _globals->_sceneObjects->draw();
- _globals->_events.waitForPress();
+ g_globals->_sceneObjects->draw();
+ g_globals->_events.waitForPress();
_sceneText.hide();
- _globals->_sceneObjects->draw();
+ g_globals->_sceneObjects->draw();
- _globals->_sceneManager.changeScene(2200);
+ g_globals->_sceneManager.changeScene(2200);
break;
}
}
@@ -4964,11 +4966,11 @@ void Scene2310::process(Event &event) {
if (idx != 5) {
_wireList[idx].hide();
- _globals->_sceneObjects->draw();
+ g_globals->_sceneObjects->draw();
_wireList[idx].setFrame(frameNum);
_wireList[idx].show();
- _globals->_sceneObjects->draw();
+ g_globals->_sceneObjects->draw();
}
} else {
// End the moving of the currently active wire
@@ -5001,7 +5003,7 @@ void Scene2310::process(Event &event) {
void Scene2310::dispatch() {
if (_wireIndex != 5) {
for (int idx = 0; idx < 5; ++idx) {
- if (_rectList[idx].contains(_globals->_events._mousePos)) {
+ if (_rectList[idx].contains(g_globals->_events._mousePos)) {
_wireList[_wireIndex].setFrame(idx + 2);
return;
}
@@ -5026,12 +5028,12 @@ int Scene2310::findObject(int objIndex) {
*--------------------------------------------------------------------------*/
void Scene2320::Action1::signal() {
- Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
+ Scene2320 *scene = (Scene2320 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(10);
- if (_globals->_sceneManager._previousScene == 2120)
+ if (g_globals->_sceneManager._previousScene == 2120)
_actionIndex = 3;
break;
case 1: {
@@ -5058,7 +5060,7 @@ void Scene2320::Action1::signal() {
}
void Scene2320::Action2::signal() {
- Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
+ Scene2320 *scene = (Scene2320 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0: {
@@ -5078,13 +5080,13 @@ void Scene2320::Action2::signal() {
}
void Scene2320::Action3::signal() {
- Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
+ Scene2320 *scene = (Scene2320 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0: {
Common::Point pt(320, 86);
PlayerMover *mover = new PlayerMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 1:
@@ -5094,12 +5096,12 @@ void Scene2320::Action3::signal() {
case 2: {
Common::Point pt(320, 79);
NpcMover *mover = new NpcMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 3:
- _globals->_player.fixPriority(scene->_hotspot6._priority - 1);
- _globals->_player._strip = 3;
+ g_globals->_player.fixPriority(scene->_hotspot6._priority - 1);
+ g_globals->_player._strip = 3;
setDelay(10);
break;
case 4:
@@ -5110,12 +5112,12 @@ void Scene2320::Action3::signal() {
scene->_area3.draw(true);
_state = 0;
- _globals->_events.setCursor(CURSOR_USE);
+ g_globals->_events.setCursor(CURSOR_USE);
- while (!_state && !_vm->getEventManager()->shouldQuit()) {
+ while (!_state && !g_vm->shouldQuit()) {
// Wait for an event
Event event;
- if (!_globals->_events.getEvent(event)) {
+ if (!g_globals->_events.getEvent(event)) {
g_system->updateScreen();
g_system->delayMillis(10);
continue;
@@ -5152,13 +5154,13 @@ void Scene2320::Action3::signal() {
break;
case 5: {
if (_state == 2320)
- _globals->_player.fixPriority(-1);
+ g_globals->_player.fixPriority(-1);
else
- _globals->_sceneManager.changeScene(_state);
+ g_globals->_sceneManager.changeScene(_state);
Common::Point pt(320, 86);
NpcMover *mover = new NpcMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 6:
@@ -5166,7 +5168,7 @@ void Scene2320::Action3::signal() {
scene->_hotspot6.animate(ANIM_MODE_6, this);
break;
case 7:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
remove();
break;
}
@@ -5174,28 +5176,28 @@ void Scene2320::Action3::signal() {
void Scene2320::Action4::signal() {
// Fly Cycle actions
- Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
+ Scene2320 *scene = (Scene2320 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
setDelay(3);
break;
case 1: {
Common::Point pt(213, 84);
PlayerMover *mover = new PlayerMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 2:
case 16:
- _globals->_player.setVisage(2109);
- _globals->_player.setStrip(2);
- _globals->_player.setFrame(1);
- _globals->_player.animate(ANIM_MODE_5, this);
+ g_globals->_player.setVisage(2109);
+ g_globals->_player.setStrip(2);
+ g_globals->_player.setFrame(1);
+ g_globals->_player.animate(ANIM_MODE_5, this);
break;
case 3:
- _globals->_player.animate(ANIM_MODE_6, NULL);
+ g_globals->_player.animate(ANIM_MODE_6, NULL);
setAction(&scene->_action2, this);
break;
case 4: {
@@ -5220,63 +5222,63 @@ void Scene2320::Action4::signal() {
}
case 6: {
scene->_hotspot16.fixPriority(-1);
- _globals->_player.setVisage(0);
- _globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.setVisage(0);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
Common::Point pt(233, 176);
PlayerMover *mover = new PlayerMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 7: {
Common::Point pt(291, 194);
PlayerMover *mover = new PlayerMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 8:
- _globals->_player.setStrip(5);
- _globals->_player.setFrame(1);
+ g_globals->_player.setStrip(5);
+ g_globals->_player.setFrame(1);
setDelay(13);
break;
case 9:
// Quinn sits in the flycycle
scene->_hotspot16.hide();
- _globals->_player.setVisage(2323);
- _globals->_player.setPosition(Common::Point(303, 176));
- _globals->_player.setStrip(2);
- _globals->_player.setFrame(1);
- _globals->_player.animate(ANIM_MODE_5, this);
+ g_globals->_player.setVisage(2323);
+ g_globals->_player.setPosition(Common::Point(303, 176));
+ g_globals->_player.setStrip(2);
+ g_globals->_player.setFrame(1);
+ g_globals->_player.animate(ANIM_MODE_5, this);
break;
case 10:
- if (_globals->getFlag(109)) {
- _globals->_soundHandler.play(40);
- _globals->_soundHandler.holdAt(true);
+ if (g_globals->getFlag(109)) {
+ g_globals->_soundHandler.play(40);
+ g_globals->_soundHandler.holdAt(true);
Common::Point pt(303, 240);
NpcMover *mover = new NpcMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
} else {
setDelay(3);
}
break;
case 11:
- if (_globals->getFlag(109)) {
- _globals->_sceneManager.changeScene(7600);
+ if (g_globals->getFlag(109)) {
+ g_globals->_sceneManager.changeScene(7600);
} else {
SceneItem::display2(2320, 19);
setDelay(3);
}
break;
case 12:
- _globals->_player.animate(ANIM_MODE_6, this);
+ g_globals->_player.animate(ANIM_MODE_6, this);
break;
case 13:
- _globals->_player.setVisage(0);
- _globals->_player.setPosition(Common::Point(291, 194));
- _globals->_player.setStrip(5);
- _globals->_player.setFrame(1);
- _globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.setVisage(0);
+ g_globals->_player.setPosition(Common::Point(291, 194));
+ g_globals->_player.setStrip(5);
+ g_globals->_player.setFrame(1);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
scene->_hotspot16.show();
setDelay(3);
@@ -5284,17 +5286,17 @@ void Scene2320::Action4::signal() {
case 14: {
Common::Point pt(233, 176);
PlayerMover *mover = new PlayerMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 15: {
Common::Point pt(213, 85);
PlayerMover *mover = new PlayerMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 17: {
- _globals->_player.animate(ANIM_MODE_6, NULL);
+ g_globals->_player.animate(ANIM_MODE_6, NULL);
scene->_hotspot16.fixPriority(160);
Common::Point pt(320, 121);
@@ -5320,9 +5322,9 @@ void Scene2320::Action4::signal() {
break;
}
case 20:
- _globals->_player.enableControl();
- _globals->_player.setVisage(0);
- _globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.enableControl();
+ g_globals->_player.setVisage(0);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
scene->_hotspot13.fixPriority(1);
remove();
@@ -5331,11 +5333,11 @@ void Scene2320::Action4::signal() {
}
void Scene2320::Action5::signal() {
- Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
+ Scene2320 *scene = (Scene2320 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
ADD_PLAYER_MOVER(163, 126);
break;
case 1:
@@ -5345,29 +5347,29 @@ void Scene2320::Action5::signal() {
setDelay(2);
break;
case 3:
- if (!_globals->getFlag(59))
+ if (!g_globals->getFlag(59))
setDelay(10);
else
scene->_stripManager.start(2323, this);
break;
case 4:
- _globals->_player.setVisage(2347);
- _globals->_player.setStrip(1);
- _globals->_player.setFrame(1);
- _globals->_player.fixPriority(137);
- _globals->_player.animate(ANIM_MODE_5, this);
+ g_globals->_player.setVisage(2347);
+ g_globals->_player.setStrip(1);
+ g_globals->_player.setFrame(1);
+ g_globals->_player.fixPriority(137);
+ g_globals->_player.animate(ANIM_MODE_5, this);
break;
case 5:
- _globals->_player.setStrip(2);
- _globals->_player.setFrame(1);
- _globals->_player.animate(ANIM_MODE_5, this);
+ g_globals->_player.setStrip(2);
+ g_globals->_player.setFrame(1);
+ g_globals->_player.animate(ANIM_MODE_5, this);
break;
case 6:
- if (_globals->getFlag(72))
- _globals->_sceneManager.changeScene(7000);
- else if (_globals->getFlag(59))
- _globals->_sceneManager.changeScene(5000);
- else if (!_globals->getFlag(43) || (RING_INVENTORY._ale._sceneNumber != 1))
+ if (g_globals->getFlag(72))
+ g_globals->_sceneManager.changeScene(7000);
+ else if (g_globals->getFlag(59))
+ g_globals->_sceneManager.changeScene(5000);
+ else if (!g_globals->getFlag(43) || (RING_INVENTORY._ale._sceneNumber != 1))
setDelay(10);
else {
scene->_hotspot11.setAction(NULL);
@@ -5379,7 +5381,7 @@ void Scene2320::Action5::signal() {
NpcMover *mover = new NpcMover();
scene->_hotspot11.addMover(mover, &pt, NULL);
- _globals->clearFlag(43);
+ g_globals->clearFlag(43);
scene->_stripManager.start(2325, this);
}
break;
@@ -5387,82 +5389,82 @@ void Scene2320::Action5::signal() {
setDelay(10);
break;
case 8:
- _globals->_sceneManager.changeScene(4000);
+ g_globals->_sceneManager.changeScene(4000);
break;
}
}
void Scene2320::Action6::signal() {
- Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
+ Scene2320 *scene = (Scene2320 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(30);
break;
case 1:
- _globals->_player.animate(ANIM_MODE_6, this);
+ g_globals->_player.animate(ANIM_MODE_6, this);
break;
case 2:
- _globals->_player.setStrip(1);
- _globals->_player.setFrame(1);
- _globals->_player.animate(ANIM_MODE_6, this);
+ g_globals->_player.setStrip(1);
+ g_globals->_player.setFrame(1);
+ g_globals->_player.animate(ANIM_MODE_6, this);
break;
case 3:
- _globals->_player.setVisage(0);
- _globals->_player.setStrip(3);
- _globals->_player.fixPriority(-1);
- _globals->_player.setObjectWrapper(new SceneObjectWrapper());
- _globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.setVisage(0);
+ g_globals->_player.setStrip(3);
+ g_globals->_player.fixPriority(-1);
+ g_globals->_player.setObjectWrapper(new SceneObjectWrapper());
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
setDelay(60);
break;
case 4:
- if ((_globals->_sceneManager._previousScene != 4000) || _globals->getFlag(43))
+ if ((g_globals->_sceneManager._previousScene != 4000) || g_globals->getFlag(43))
setDelay(3);
- else if (_globals->getFlag(35)) {
- _globals->setFlag(43);
+ else if (g_globals->getFlag(35)) {
+ g_globals->setFlag(43);
scene->_stripManager.start(4200, this);
- _globals->setFlag(69);
- } else if (_globals->getFlag(36)) {
+ g_globals->setFlag(69);
+ } else if (g_globals->getFlag(36)) {
setDelay(3);
} else {
- _globals->setFlag(43);
+ g_globals->setFlag(43);
scene->_stripManager.start(4210, this);
break;
}
break;
case 5:
- if (_globals->_sceneObjects->contains(&scene->_hotspot11)) {
+ if (g_globals->_sceneObjects->contains(&scene->_hotspot11)) {
scene->_hotspot11.setAction(&scene->_action1);
- if (_globals->_sceneObjects->contains(&scene->_hotspot10)) {
+ if (g_globals->_sceneObjects->contains(&scene->_hotspot10)) {
ADD_MOVER(scene->_hotspot10, 491, 160);
} else {
setDelay(60);
}
- _globals->_sceneItems.push_front(&scene->_hotspot11);
+ g_globals->_sceneItems.push_front(&scene->_hotspot11);
} else {
setDelay(3);
}
break;
case 6:
- _globals->_events.setCursor(CURSOR_WALK);
- _globals->_player.enableControl();
+ g_globals->_events.setCursor(CURSOR_WALK);
+ g_globals->_player.enableControl();
remove();
break;
}
}
void Scene2320::Action7::signal() {
- Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
+ Scene2320 *scene = (Scene2320 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(30);
break;
case 1:
- _globals->_soundHandler.play(162);
+ g_globals->_soundHandler.play(162);
scene->_hotspot6.animate(ANIM_MODE_5, this);
break;
case 2:
@@ -5471,8 +5473,8 @@ void Scene2320::Action7::signal() {
scene->_hotspot11.fixPriority(-1);
ADD_MOVER_NULL(scene->_hotspot11, 346, 85);
- _globals->_player.fixPriority(-1);
- ADD_MOVER(_globals->_player, 297, 89);
+ g_globals->_player.fixPriority(-1);
+ ADD_MOVER(g_globals->_player, 297, 89);
break;
case 3:
ADD_PLAYER_MOVER(462, 182);
@@ -5483,17 +5485,17 @@ void Scene2320::Action7::signal() {
case 5:
ADD_MOVER(scene->_hotspot11, 500, 164);
ADD_MOVER(scene->_hotspot10, 382, 93);
- _globals->_player.setStrip(3);
+ g_globals->_player.setStrip(3);
break;
case 6:
ADD_MOVER_NULL(scene->_hotspot10, 491, 160);
- ADD_MOVER(_globals->_player, 391, 88);
+ ADD_MOVER(g_globals->_player, 391, 88);
break;
case 7:
ADD_PLAYER_MOVER(462, 182);
break;
case 8:
- _globals->_player.setStrip(7);
+ g_globals->_player.setStrip(7);
setDelay(15);
break;
case 9:
@@ -5506,14 +5508,14 @@ void Scene2320::Action7::signal() {
scene->_stripManager.start(6022, this);
break;
case 12:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
RING_INVENTORY._stasisBox._sceneNumber = 2320;
break;
}
}
void Scene2320::Action8::signal() {
- Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
+ Scene2320 *scene = (Scene2320 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -5523,24 +5525,24 @@ void Scene2320::Action8::signal() {
ADD_PLAYER_MOVER(462, 182);
break;
case 2:
- _globals->_player.setStrip(7);
+ g_globals->_player.setStrip(7);
setDelay(5);
break;
case 3:
- scene->_speakerGameText.setTextPos(Common::Point(_globals->_sceneManager._scene->_sceneBounds.left + 30, 10));
- scene->_stripManager.start(_globals->getFlag(75) ? 6030 : 2320, this);
+ scene->_speakerGameText.setTextPos(Common::Point(g_globals->_sceneManager._scene->_sceneBounds.left + 30, 10));
+ scene->_stripManager.start(g_globals->getFlag(75) ? 6030 : 2320, this);
break;
case 4:
- if (_globals->getFlag(75))
+ if (g_globals->getFlag(75))
setDelay(3);
else
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
break;
case 5:
RING_INVENTORY._stasisBox._sceneNumber = 2320;
scene->_sceneMode = 2326;
- scene->_speakerGameText.setTextPos(Common::Point(_globals->_sceneManager._scene->_sceneBounds.left + 30, 10));
- scene->setAction(&scene->_sequenceManager1, scene, 2326, &_globals->_player, &scene->_hotspot11, NULL);
+ scene->_speakerGameText.setTextPos(Common::Point(g_globals->_sceneManager._scene->_sceneBounds.left + 30, 10));
+ scene->setAction(&scene->_sequenceManager1, scene, 2326, &g_globals->_player, &scene->_hotspot11, NULL);
break;
}
}
@@ -5548,16 +5550,16 @@ void Scene2320::Action8::signal() {
/*--------------------------------------------------------------------------*/
void Scene2320::Hotspot5::doAction(int action) {
- Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
+ Scene2320 *scene = (Scene2320 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2320, 13);
break;
case CURSOR_USE:
- if (_globals->getFlag(70))
+ if (g_globals->getFlag(70))
SceneItem::display2(2320, 33);
- else if (_globals->getFlag(13))
+ else if (g_globals->getFlag(13))
SceneItem::display2(2320, 18);
else
scene->setAction(&scene->_action5);
@@ -5569,14 +5571,14 @@ void Scene2320::Hotspot5::doAction(int action) {
}
void Scene2320::Hotspot6::doAction(int action) {
- Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
+ Scene2320 *scene = (Scene2320 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2320, 2);
break;
case CURSOR_USE:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->setAction(&scene->_action3);
break;
default:
@@ -5586,7 +5588,7 @@ void Scene2320::Hotspot6::doAction(int action) {
}
void Scene2320::Hotspot8::doAction(int action) {
- Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
+ Scene2320 *scene = (Scene2320 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
@@ -5594,7 +5596,7 @@ void Scene2320::Hotspot8::doAction(int action) {
break;
case CURSOR_USE:
scene->_sceneMode = 2336;
- scene->setAction(&scene->_sequenceManager1, scene, 2336, &_globals->_player, this, NULL);
+ scene->setAction(&scene->_sequenceManager1, scene, 2336, &g_globals->_player, this, NULL);
break;
default:
SceneHotspot::doAction(action);
@@ -5604,21 +5606,21 @@ void Scene2320::Hotspot8::doAction(int action) {
void Scene2320::Hotspot10::doAction(int action) {
// Seeker
- Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
+ Scene2320 *scene = (Scene2320 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2320, 26);
break;
case CURSOR_TALK:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_sceneMode = 2329;
- if (_globals->getFlag(13)) {
+ if (g_globals->getFlag(13)) {
scene->_stripManager.start(2337, scene);
- } else if (_globals->getFlag(70)) {
+ } else if (g_globals->getFlag(70)) {
scene->setAction(&scene->_action8);
- } else if (_globals->getFlag(109)) {
+ } else if (g_globals->getFlag(109)) {
scene->setAction(&scene->_sequenceManager1, scene, 2337, NULL);
} else if (!_state) {
++_state;
@@ -5634,29 +5636,29 @@ void Scene2320::Hotspot10::doAction(int action) {
}
void Scene2320::Hotspot11::doAction(int action) {
- Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
+ Scene2320 *scene = (Scene2320 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2320, 25);
break;
case CURSOR_TALK:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_sceneMode = 2329;
- if (_globals->getFlag(13)) {
- _globals->_player.disableControl();
+ if (g_globals->getFlag(13)) {
+ g_globals->_player.disableControl();
scene->_sceneMode = 5000;
scene->_stripManager.start(2336, scene);
- } else if (_globals->getFlag(70)) {
+ } else if (g_globals->getFlag(70)) {
scene->setAction(&scene->_action8);
} else {
scene->_sceneMode = 2329;
if (RING_INVENTORY._ale._sceneNumber == 1) {
scene->setAction(&scene->_sequenceManager1, scene, 2329, NULL);
- } else if (!_globals->getFlag(110)) {
- _globals->setFlag(110);
+ } else if (!g_globals->getFlag(110)) {
+ g_globals->setFlag(110);
scene->setAction(&scene->_sequenceManager1, scene, 2330, NULL);
} else if (RING_INVENTORY._peg._sceneNumber != 1) {
scene->setAction(&scene->_sequenceManager1, scene, 2331, NULL);
@@ -5675,19 +5677,19 @@ void Scene2320::Hotspot11::doAction(int action) {
}
void Scene2320::Hotspot12::doAction(int action) {
- Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
+ Scene2320 *scene = (Scene2320 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2320, 5);
break;
case CURSOR_USE:
- if (_globals->getFlag(13))
+ if (g_globals->getFlag(13))
SceneItem::display2(2320, 24);
else {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_sceneMode = 2322;
- scene->setAction(&scene->_sequenceManager1, scene, 2322, &_globals->_player, NULL);
+ scene->setAction(&scene->_sequenceManager1, scene, 2322, &g_globals->_player, NULL);
}
break;
default:
@@ -5698,23 +5700,23 @@ void Scene2320::Hotspot12::doAction(int action) {
void Scene2320::Hotspot14::doAction(int action) {
// Right Console
- Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
+ Scene2320 *scene = (Scene2320 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2320, 17);
break;
case CURSOR_USE:
- if (_globals->getFlag(24)) {
- _globals->clearFlag(24);
- _globals->_player.disableControl();
+ if (g_globals->getFlag(24)) {
+ g_globals->clearFlag(24);
+ g_globals->_player.disableControl();
scene->_hotspot8.postInit();
scene->_hotspot8.setVisage(2345);
scene->_hotspot8.setPosition(Common::Point(634, 65));
scene->_hotspot8.hide();
- _globals->_sceneItems.push_front(&scene->_hotspot8);
+ g_globals->_sceneItems.push_front(&scene->_hotspot8);
RING_INVENTORY._waldos._sceneNumber = 2320;
scene->_hotspot9.postInit();
@@ -5731,11 +5733,11 @@ void Scene2320::Hotspot14::doAction(int action) {
scene->_hotspot16.hide();
scene->_sceneMode = 2324;
- scene->setAction(&scene->_sequenceManager1, scene, 2324, &_globals->_player, &scene->_hotspot7,
+ scene->setAction(&scene->_sequenceManager1, scene, 2324, &g_globals->_player, &scene->_hotspot7,
&scene->_hotspot8, &scene->_hotspot9, &scene->_hotspot16, NULL);
- } else if (_globals->getFlag(13)) {
+ } else if (g_globals->getFlag(13)) {
SceneItem::display2(2320, 24);
- } else if (!_globals->getFlag(76)) {
+ } else if (!g_globals->getFlag(76)) {
SceneItem::display2(2320, 28);
} else if (!RING_INVENTORY._waldos._sceneNumber) {
SceneItem::display2(2320, 27);
@@ -5751,14 +5753,14 @@ void Scene2320::Hotspot14::doAction(int action) {
void Scene2320::Hotspot15::doAction(int action) {
// Left console (Flycycle console)
- Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
+ Scene2320 *scene = (Scene2320 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(2320, 16);
break;
case CURSOR_USE:
- if (_globals->getFlag(13))
+ if (g_globals->getFlag(13))
SceneItem::display2(2320, 24);
else
scene->setAction(&scene->_action4);
@@ -5806,7 +5808,7 @@ void Scene2320::postInit(SceneObjectList *OwnerList) {
_stripManager.addSpeaker(&_speakerGameText);
_speakerMText._npc = &_hotspot11;
- _speakerQText._npc = &_globals->_player;
+ _speakerQText._npc = &g_globals->_player;
_hotspotPtr = &_hotspot10;
_hotspot6.postInit();
@@ -5836,33 +5838,33 @@ void Scene2320::postInit(SceneObjectList *OwnerList) {
_hotspot8.setPosition(Common::Point(541, 103));
_hotspot8.fixPriority(201);
- _globals->_sceneItems.push_back(&_hotspot8);
+ g_globals->_sceneItems.push_back(&_hotspot8);
}
- if (_globals->getFlag(43)) {
+ if (g_globals->getFlag(43)) {
_hotspot11.postInit();
_hotspot11.setVisage(2705);
_hotspot11._strip = 3;
_hotspot11.setPosition(Common::Point(510, 156));
- _globals->_sceneItems.push_back(&_hotspot11);
+ g_globals->_sceneItems.push_back(&_hotspot11);
_hotspot11._state = 0;
_hotspot11.setAction(&_action1);
}
- _globals->_player.postInit();
- if (_globals->getFlag(13))
- _globals->_player.setVisage(2170);
+ g_globals->_player.postInit();
+ if (g_globals->getFlag(13))
+ g_globals->_player.setVisage(2170);
else
- _globals->_player.setVisage(0);
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player.setObjectWrapper(new SceneObjectWrapper());
- _globals->_player.setPosition(Common::Point(320, 79));
- _globals->_player.fixPriority(10);
- _globals->_player.changeZoom(-1);
- _globals->_player._moveDiff.y = 3;
- _globals->_player.disableControl();
-
- if (_globals->getFlag(114)) {
+ g_globals->_player.setVisage(0);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.setObjectWrapper(new SceneObjectWrapper());
+ g_globals->_player.setPosition(Common::Point(320, 79));
+ g_globals->_player.fixPriority(10);
+ g_globals->_player.changeZoom(-1);
+ g_globals->_player._moveDiff.y = 3;
+ g_globals->_player.disableControl();
+
+ if (g_globals->getFlag(114)) {
_hotspot10.postInit();
_hotspot10.setVisage(2806);
_hotspot10.setPosition(Common::Point(481, 162));
@@ -5870,10 +5872,10 @@ void Scene2320::postInit(SceneObjectList *OwnerList) {
_hotspot10.setStrip(5);
_hotspot10._state = 0;
- _globals->_sceneItems.push_back(&_hotspot10);
+ g_globals->_sceneItems.push_back(&_hotspot10);
}
- if (_globals->getFlag(70)) {
+ if (g_globals->getFlag(70)) {
_hotspot11.postInit();
_hotspot11.setVisage(2705);
_hotspot11.setPosition(Common::Point(500, 164));
@@ -5884,20 +5886,20 @@ void Scene2320::postInit(SceneObjectList *OwnerList) {
_hotspot10.changeZoom(-1);
_hotspot10.setStrip(5);
- _globals->_sceneItems.addItems(&_hotspot11, &_hotspot10, NULL);
+ g_globals->_sceneItems.addItems(&_hotspot11, &_hotspot10, NULL);
}
- switch (_globals->_sceneManager._previousScene) {
+ switch (g_globals->_sceneManager._previousScene) {
case 2120:
- _globals->_soundHandler.play(160);
- _globals->_soundHandler.holdAt(true);
+ g_globals->_soundHandler.play(160);
+ g_globals->_soundHandler.holdAt(true);
- _globals->_player.fixPriority(-1);
- _globals->_player.setPosition(Common::Point(389, 72));
- _globals->_player.enableControl();
+ g_globals->_player.fixPriority(-1);
+ g_globals->_player.setPosition(Common::Point(389, 72));
+ g_globals->_player.enableControl();
break;
case 4000:
- if (!_globals->getFlag(36) && !_globals->getFlag(43)) {
+ if (!g_globals->getFlag(36) && !g_globals->getFlag(43)) {
_hotspot11.postInit();
_hotspot11.setVisage(2705);
_hotspot11.setPosition(Common::Point(178, 118));
@@ -5907,25 +5909,25 @@ void Scene2320::postInit(SceneObjectList *OwnerList) {
case 4250:
case 5000:
case 7000:
- _globals->_soundHandler.play(160);
- _globals->_soundHandler.holdAt(true);
- if ((_globals->_sceneManager._previousScene == 7000) && !_globals->getFlag(80))
- _globals->setFlag(36);
-
- _globals->_player.disableControl();
- _globals->_player.animate(ANIM_MODE_NONE, NULL);
- _globals->_player.setObjectWrapper(NULL);
- _globals->_player.setVisage(2347);
- _globals->_player.setStrip(2);
- _globals->_player.setFrame(5);
- _globals->_player.fixPriority(137);
- _globals->_player.setPosition(Common::Point(165, 132));
+ g_globals->_soundHandler.play(160);
+ g_globals->_soundHandler.holdAt(true);
+ if ((g_globals->_sceneManager._previousScene == 7000) && !g_globals->getFlag(80))
+ g_globals->setFlag(36);
+
+ g_globals->_player.disableControl();
+ g_globals->_player.animate(ANIM_MODE_NONE, NULL);
+ g_globals->_player.setObjectWrapper(NULL);
+ g_globals->_player.setVisage(2347);
+ g_globals->_player.setStrip(2);
+ g_globals->_player.setFrame(5);
+ g_globals->_player.fixPriority(137);
+ g_globals->_player.setPosition(Common::Point(165, 132));
setAction(&_action6);
break;
case 6100:
- _globals->_soundHandler.play(160);
- _globals->_soundHandler.holdAt(true);
+ g_globals->_soundHandler.play(160);
+ g_globals->_soundHandler.holdAt(true);
_hotspot8.postInit();
_hotspot8.setVisage(2345);
@@ -5933,19 +5935,19 @@ void Scene2320::postInit(SceneObjectList *OwnerList) {
_hotspot8.hide();
_sceneMode = 2325;
- setAction(&_sequenceManager1, this, 2325, &_globals->_player, &_hotspot6, &_hotspot8, &_hotspot7, NULL);
+ setAction(&_sequenceManager1, this, 2325, &g_globals->_player, &_hotspot6, &_hotspot8, &_hotspot7, NULL);
break;
case 7600:
- _globals->_soundHandler.play(160);
- _globals->_soundHandler.holdAt(true);
+ g_globals->_soundHandler.play(160);
+ g_globals->_soundHandler.holdAt(true);
_soundHandler.play(21);
- _globals->_player.setVisage(2323);
- _globals->_player.setStrip(2);
- _globals->_player.setFrame(_globals->_player.getFrameCount());
- _globals->_player.setPosition(Common::Point(303, 176));
- _globals->_player.fixPriority(-1);
- _globals->_player.disableControl();
+ g_globals->_player.setVisage(2323);
+ g_globals->_player.setStrip(2);
+ g_globals->_player.setFrame(g_globals->_player.getFrameCount());
+ g_globals->_player.setPosition(Common::Point(303, 176));
+ g_globals->_player.fixPriority(-1);
+ g_globals->_player.disableControl();
_hotspot13.setPosition(Common::Point(319, 199));
@@ -5957,14 +5959,14 @@ void Scene2320::postInit(SceneObjectList *OwnerList) {
_hotspot16.hide();
_sceneMode = 2338;
- setAction(&_sequenceManager1, this, 2338, &_globals->_player, &_hotspot16, &_hotspot13, NULL);
+ setAction(&_sequenceManager1, this, 2338, &g_globals->_player, &_hotspot16, &_hotspot13, NULL);
break;
default:
- switch (_globals->_stripNum) {
+ switch (g_globals->_stripNum) {
case 2101:
- _globals->_player.disableControl();
- _globals->_player.setStrip(3);
- _globals->_player.setPosition(Common::Point(307, 84));
+ g_globals->_player.disableControl();
+ g_globals->_player.setStrip(3);
+ g_globals->_player.setPosition(Common::Point(307, 84));
_hotspot11.postInit();
_hotspot11.setVisage(2705);
@@ -5992,21 +5994,21 @@ void Scene2320::postInit(SceneObjectList *OwnerList) {
_hotspot8.hide();
_sceneMode = 2325;
- setAction(&_sequenceManager1, this, 2325, &_globals->_player, &_hotspot6, &_hotspot8, &_hotspot7, NULL);
+ setAction(&_sequenceManager1, this, 2325, &g_globals->_player, &_hotspot6, &_hotspot8, &_hotspot7, NULL);
break;
default:
- _globals->_soundHandler.play(160);
- _globals->_soundHandler.holdAt(true);
+ g_globals->_soundHandler.play(160);
+ g_globals->_soundHandler.holdAt(true);
_sceneMode = 2321;
- _globals->_player.setStrip(3);
- setAction(&_sequenceManager1, this, 2321, &_globals->_player, &_hotspot6, NULL);
+ g_globals->_player.setStrip(3);
+ setAction(&_sequenceManager1, this, 2321, &g_globals->_player, &_hotspot6, NULL);
break;
}
}
- _globals->_stripNum = 0;
- _globals->_sceneManager._scene->_sceneBounds.center(_globals->_player._position);
+ g_globals->_stripNum = 0;
+ g_globals->_sceneManager._scene->_sceneBounds.center(g_globals->_player._position);
loadScene(2320);
_hotspot14._sceneRegionId = 8;
@@ -6017,7 +6019,7 @@ void Scene2320::postInit(SceneObjectList *OwnerList) {
_hotspot5.setBounds(Rect(104, 122, 174, 157));
_hotspot15.setBounds(Rect(191, 53, 205, 63));
- _globals->_sceneItems.addItems(&_hotspot14, &_hotspot15, &_hotspot5, &_hotspot6, &_hotspot12,
+ g_globals->_sceneItems.addItems(&_hotspot14, &_hotspot15, &_hotspot5, &_hotspot6, &_hotspot12,
&_hotspot13, &_hotspot4, &_hotspot3, &_hotspot2, &_hotspot1, NULL);
}
@@ -6031,40 +6033,40 @@ void Scene2320::signal() {
case 2321:
case 2327:
case 2329:
- if (_globals->getFlag(43) && !_hotspot11._action)
+ if (g_globals->getFlag(43) && !_hotspot11._action)
_hotspot11.setAction(&_action1);
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
break;
case 2322:
- _globals->_sceneManager.changeScene(2120);
+ g_globals->_sceneManager.changeScene(2120);
break;
case 2323:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
break;
case 2338:
case 2324:
_hotspot16.remove();
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
break;
case 2325:
- _globals->setFlag(76);
- _globals->clearFlag(70);
- _globals->_stripNum = 6100;
- _globals->_sceneManager.changeScene(2100);
+ g_globals->setFlag(76);
+ g_globals->clearFlag(70);
+ g_globals->_stripNum = 6100;
+ g_globals->_sceneManager.changeScene(2100);
break;
case 2326:
- _globals->clearFlag(70);
+ g_globals->clearFlag(70);
RING_INVENTORY._nullifier._sceneNumber = 1;
- _globals->_stripNum = 2321;
- _globals->_sceneManager.changeScene(2100);
+ g_globals->_stripNum = 2321;
+ g_globals->_sceneManager.changeScene(2100);
break;
case 2336:
- _globals->setFlag(77);
+ g_globals->setFlag(77);
RING_INVENTORY._waldos._sceneNumber = 1;
_hotspot8.remove();
break;
case 5000:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
break;
}
}
@@ -6080,32 +6082,32 @@ void Scene2400::Action1::signal() {
setDelay(60);
break;
case 1:
- ADD_MOVER(_globals->_player, 160, 71);
+ ADD_MOVER(g_globals->_player, 160, 71);
break;
case 2:
- ADD_MOVER(_globals->_player, 160, 360);
+ ADD_MOVER(g_globals->_player, 160, 360);
break;
case 3:
- _globals->_player._moveDiff = Common::Point(1, 1);
- ADD_MOVER(_globals->_player, 140, 375);
+ g_globals->_player._moveDiff = Common::Point(1, 1);
+ ADD_MOVER(g_globals->_player, 140, 375);
break;
case 4:
- ADD_MOVER(_globals->_player, 87, 338);
+ ADD_MOVER(g_globals->_player, 87, 338);
break;
case 5:
- _globals->_player.hide();
+ g_globals->_player.hide();
setDelay(60);
break;
case 6:
- _globals->_sceneManager.changeScene(4000);
+ g_globals->_sceneManager.changeScene(4000);
break;
}
}
void Scene2400::Action1::dispatch() {
Action::dispatch();
- if ((_actionIndex == 4) && (_globals->_player._percent > 5))
- _globals->_player.changeZoom(_globals->_player._percent - 2);
+ if ((_actionIndex == 4) && (g_globals->_player._percent > 5))
+ g_globals->_player.changeZoom(g_globals->_player._percent - 2);
}
/*--------------------------------------------------------------------------*/
@@ -6115,19 +6117,21 @@ void Scene2400::postInit(SceneObjectList *OwnerList) {
Scene::postInit();
setZoomPercents(0, 100, 200, 100);
- _globals->_player.postInit();
- _globals->_player.setVisage(2410);
- _globals->_player.setPosition(Common::Point(340, -10));
- _globals->_player.animate(ANIM_MODE_2, NULL);
- _globals->_player.disableControl();
+ g_globals->_player.postInit();
+ g_globals->_player.setVisage(2410);
+ g_globals->_player.setPosition(Common::Point(340, -10));
+ g_globals->_player.animate(ANIM_MODE_2, NULL);
+ g_globals->_player.disableControl();
setAction(&_action1);
- _globals->_sceneManager._scene->_sceneBounds.center(_globals->_player._position.x, _globals->_player._position.y);
- _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds);
- _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
+ g_globals->_sceneManager._scene->_sceneBounds.center(g_globals->_player._position.x, g_globals->_player._position.y);
+ g_globals->_sceneManager._scene->_sceneBounds.contain(g_globals->_sceneManager._scene->_backgroundBounds);
+ g_globals->_sceneOffset.x = (g_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
- _globals->_soundHandler.play(153);
+ g_globals->_soundHandler.play(153);
}
-} // End of namespace tSage
+} // End of namespace Ringworld
+
+} // End of namespace TsAGE
diff --git a/engines/tsage/ringworld_scenes3.h b/engines/tsage/ringworld/ringworld_scenes3.h
index 711360c190..682ef44fc6 100644
--- a/engines/tsage/ringworld_scenes3.h
+++ b/engines/tsage/ringworld/ringworld_scenes3.h
@@ -26,9 +26,14 @@
#include "common/scummsys.h"
#include "tsage/core.h"
#include "tsage/converse.h"
-#include "tsage/ringworld_logic.h"
+#include "tsage/ringworld/ringworld_logic.h"
+#include "tsage/ringworld/ringworld_speakers.h"
-namespace tSage {
+namespace TsAGE {
+
+namespace Ringworld {
+
+using namespace TsAGE;
class Scene2000 : public Scene {
/* Actions */
@@ -890,6 +895,8 @@ public:
virtual void postInit(SceneObjectList *OwnerList = NULL);
};
-} // End of namespace tSage
+} // End of namespace Ringworld
+
+} // End of namespace TsAGE
#endif
diff --git a/engines/tsage/ringworld_scenes4.cpp b/engines/tsage/ringworld/ringworld_scenes4.cpp
index 838769e4af..98bf0158e7 100644
--- a/engines/tsage/ringworld_scenes4.cpp
+++ b/engines/tsage/ringworld/ringworld_scenes4.cpp
@@ -21,12 +21,14 @@
*/
#include "common/config-manager.h"
-#include "tsage/ringworld_scenes4.h"
+#include "tsage/ringworld/ringworld_scenes4.h"
#include "tsage/scenes.h"
#include "tsage/tsage.h"
#include "tsage/staticres.h"
-namespace tSage {
+namespace TsAGE {
+
+namespace Ringworld {
/*--------------------------------------------------------------------------
* Scene 3500 - Ringworld Scan
@@ -34,7 +36,7 @@ namespace tSage {
*--------------------------------------------------------------------------*/
void Scene3500::Action1::signal() {
- Scene3500 *scene = (Scene3500 *)_globals->_sceneManager._scene;
+ Scene3500 *scene = (Scene3500 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -47,13 +49,13 @@ void Scene3500::Action1::signal() {
setDelay(3);
break;
case 3:
- _globals->_sceneManager.changeScene(9999);
+ g_globals->_sceneManager.changeScene(9999);
break;
}
}
void Scene3500::Action2::signal() {
- Scene3500 *scene = (Scene3500 *)_globals->_sceneManager._scene;
+ Scene3500 *scene = (Scene3500 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -66,7 +68,7 @@ void Scene3500::Action2::signal() {
setDelay(3);
break;
case 3:
- _globals->_sceneManager.changeScene(2012);
+ g_globals->_sceneManager.changeScene(2012);
break;
}
}
@@ -74,17 +76,17 @@ void Scene3500::Action2::signal() {
/*--------------------------------------------------------------------------*/
void Scene3500::postInit(SceneObjectList *OwnerList) {
- loadScene((_globals->_stripNum == 3600) ? 3600 : 3500);
+ loadScene((g_globals->_stripNum == 3600) ? 3600 : 3500);
Scene::postInit();
_stripManager.addSpeaker(&_speakerQText);
_stripManager.addSpeaker(&_speakerMText);
_stripManager.addSpeaker(&_speakerSText);
- _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds);
- _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.top / 160) * 160;
+ g_globals->_sceneManager._scene->_sceneBounds.contain(g_globals->_sceneManager._scene->_backgroundBounds);
+ g_globals->_sceneOffset.x = (g_globals->_sceneManager._scene->_sceneBounds.top / 160) * 160;
- setAction((_globals->_stripNum == 3600) ? (Action *)&_action2 : (Action *)&_action1);
+ setAction((g_globals->_stripNum == 3600) ? (Action *)&_action2 : (Action *)&_action1);
}
/*--------------------------------------------------------------------------
@@ -100,7 +102,7 @@ Scene3700::Viewer::Viewer() {
_frameList[0] = 1;
for (int idx = 1; idx <= 3; ++idx)
- _frameList[idx] = _globals->_randomSource.getRandomNumber(4) + 1;
+ _frameList[idx] = g_globals->_randomSource.getRandomNumber(4) + 1;
_active = true;
_countdownCtr = 0;
@@ -130,7 +132,7 @@ void Scene3700::Viewer::dispatch() {
int newFrame;
do {
- newFrame = _globals->_randomSource.getRandomNumber(4) + 1;
+ newFrame = g_globals->_randomSource.getRandomNumber(4) + 1;
} while (newFrame == _frameList[2]);
_frameList[1] = newFrame;
@@ -144,27 +146,27 @@ void Scene3700::Viewer::reposition() {
}
void Scene3700::Viewer::draw() {
- Region *priorityRegion = _globals->_sceneManager._scene->_priorities.find(1);
+ Region *priorityRegion = g_globals->_sceneManager._scene->_priorities.find(1);
for (int idx = 0; idx < 4; ++idx) {
Visage &v = (idx == 0) ? _images1 : _images2;
GfxSurface img = v.getFrame(_frameList[idx]);
Rect destRect = img.getBounds();
- destRect.resize(img, (_position.x - _globals->_sceneOffset.x),
- (_position.y - _globals->_sceneOffset.y - _yDiff), _percentList[idx]);
+ destRect.resize(img, (_position.x - g_globals->_sceneOffset.x),
+ (_position.y - g_globals->_sceneOffset.y - _yDiff), _percentList[idx]);
- destRect.translate(-_globals->_sceneManager._scene->_sceneBounds.left,
- -_globals->_sceneManager._scene->_sceneBounds.top);
+ destRect.translate(-g_globals->_sceneManager._scene->_sceneBounds.left,
+ -g_globals->_sceneManager._scene->_sceneBounds.top);
- _globals->gfxManager().copyFrom(img, destRect, priorityRegion);
+ g_globals->gfxManager().copyFrom(img, destRect, priorityRegion);
}
}
/*--------------------------------------------------------------------------*/
void Scene3700::Action1::signal() {
- Scene3700 *scene = (Scene3700 *)_globals->_sceneManager._scene;
+ Scene3700 *scene = (Scene3700 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -216,18 +218,18 @@ void Scene3700::Action1::signal() {
case 8:
scene->_hotspot1.remove();
scene->_hotspot2.show();
- _globals->setFlag(59);
+ g_globals->setFlag(59);
setDelay(30);
break;
case 9:
- _globals->_sceneManager.changeScene(2100);
+ g_globals->_sceneManager.changeScene(2100);
break;
}
}
/*--------------------------------------------------------------------------*/
-void Scene3700::postInit(tSage::SceneObjectList *OwnerList) {
+void Scene3700::postInit(TsAGE::SceneObjectList *OwnerList) {
Scene::postInit();
loadScene(3700);
@@ -244,7 +246,9 @@ void Scene3700::postInit(tSage::SceneObjectList *OwnerList) {
_viewer.setPosition(Common::Point(195, 83));
setAction(&_action1);
- _globals->_soundHandler.play(195);
+ g_globals->_soundHandler.play(195);
}
-} // End of namespace tSage
+} // End of namespace Ringworld
+
+} // End of namespace TsAGE
diff --git a/engines/tsage/ringworld_scenes4.h b/engines/tsage/ringworld/ringworld_scenes4.h
index 0b575d02d3..64706805bc 100644
--- a/engines/tsage/ringworld_scenes4.h
+++ b/engines/tsage/ringworld/ringworld_scenes4.h
@@ -26,9 +26,14 @@
#include "common/scummsys.h"
#include "tsage/core.h"
#include "tsage/converse.h"
-#include "tsage/ringworld_logic.h"
+#include "tsage/ringworld/ringworld_logic.h"
+#include "tsage/ringworld/ringworld_speakers.h"
-namespace tSage {
+namespace TsAGE {
+
+namespace Ringworld {
+
+using namespace TsAGE;
class Scene3500 : public Scene {
/* Actions */
@@ -87,6 +92,8 @@ public:
virtual void postInit(SceneObjectList *OwnerList = NULL);
};
-} // End of namespace tSage
+} // End of namespace Ringworld
+
+} // End of namespace TsAGE
#endif
diff --git a/engines/tsage/ringworld_scenes5.cpp b/engines/tsage/ringworld/ringworld_scenes5.cpp
index fccc7e1b50..3cf1207e9e 100644
--- a/engines/tsage/ringworld_scenes5.cpp
+++ b/engines/tsage/ringworld/ringworld_scenes5.cpp
@@ -21,12 +21,14 @@
*/
#include "common/config-manager.h"
-#include "tsage/ringworld_scenes5.h"
+#include "tsage/ringworld/ringworld_scenes5.h"
#include "tsage/scenes.h"
#include "tsage/tsage.h"
#include "tsage/staticres.h"
-namespace tSage {
+namespace TsAGE {
+
+namespace Ringworld {
/*--------------------------------------------------------------------------
* Scene 4000 - Village
@@ -35,7 +37,7 @@ namespace tSage {
void Scene4000::Action1::signal() {
// Quinn has the peg. Everybody enter the screen.
- Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene;
+ Scene4000 *scene = (Scene4000 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0: {
@@ -50,10 +52,10 @@ void Scene4000::Action1::signal() {
scene->_hotspot5.addMover(mover, &pt, this);
RING_INVENTORY._ale._sceneNumber = 0;
- _globals->clearFlag(42);
- _globals->clearFlag(36);
- _globals->clearFlag(43);
- _globals->clearFlag(37);
+ g_globals->clearFlag(42);
+ g_globals->clearFlag(36);
+ g_globals->clearFlag(43);
+ g_globals->clearFlag(37);
break;
}
case 1: {
@@ -83,7 +85,7 @@ void Scene4000::Action1::signal() {
ADD_PLAYER_MOVER_THIS(scene->_miranda, 266, 169);
- ADD_PLAYER_MOVER_NULL(_globals->_player, 241, 155);
+ ADD_PLAYER_MOVER_NULL(g_globals->_player, 241, 155);
break;
}
case 2:
@@ -102,14 +104,14 @@ void Scene4000::Action1::signal() {
ADD_MOVER_NULL(scene->_hotspot5, -40, 86);
break;
case 5:
- _globals->_soundHandler.play(155);
- _globals->setFlag(43);
- _globals->setFlag(114);
+ g_globals->_soundHandler.play(155);
+ g_globals->setFlag(43);
+ g_globals->setFlag(114);
scene->_stripManager.start(4430, this);
break;
case 6:
ADD_PLAYER_MOVER_THIS(scene->_olo, 277, 175);
- ADD_PLAYER_MOVER_NULL(_globals->_player, 258, 187);
+ ADD_PLAYER_MOVER_NULL(g_globals->_player, 258, 187);
break;
case 7:
scene->_stripManager.start(4440, this);
@@ -118,8 +120,8 @@ void Scene4000::Action1::signal() {
setDelay(30);
break;
case 9:
- _globals->setFlag(96);
- _globals->_sceneManager.changeScene(4025);
+ g_globals->setFlag(96);
+ g_globals->_sceneManager.changeScene(4025);
break;
}
}
@@ -127,11 +129,11 @@ void Scene4000::Action1::signal() {
void Scene4000::Action2::signal() {
// Quinn, Seeker and Miranda walks down to the village
// Then, they talk to Rock, and enter the priest hut
- Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene;
+ Scene4000 *scene = (Scene4000 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- setAction(&scene->_sequenceManager1, this, 4001, &_globals->_player, NULL);
+ setAction(&scene->_sequenceManager1, this, 4001, &g_globals->_player, NULL);
scene->_hotspot5.postInit();
scene->_hotspot5.setVisage(2801);
@@ -144,13 +146,13 @@ void Scene4000::Action2::signal() {
scene->_miranda.setAction(&scene->_sequenceManager2, NULL, 4002, &scene->_miranda, NULL);
break;
case 1:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_lander.remove();
ADD_MOVER(scene->_guardRock, scene->_hotspot5._position.x + 30, scene->_hotspot5._position.y - 10);
break;
case 2:
- _globals->_player.checkAngle(&scene->_guardRock);
+ g_globals->_player.checkAngle(&scene->_guardRock);
scene->_hotspot5.checkAngle(&scene->_guardRock);
scene->_miranda.checkAngle(&scene->_guardRock);
scene->_stripManager.start(4000, this);
@@ -163,7 +165,7 @@ void Scene4000::Action2::signal() {
ADD_MOVER(scene->_hotspot2, 116, 160);
ADD_MOVER(scene->_hotspot5, 116, 160);
- _globals->setFlag(37);
+ g_globals->setFlag(37);
break;
case 4:
break;
@@ -176,14 +178,14 @@ void Scene4000::Action2::signal() {
ADD_PLAYER_MOVER_NULL(scene->_miranda, 210, 133);
break;
case 7:
- _globals->_sceneManager.changeScene(4045);
+ g_globals->_sceneManager.changeScene(4045);
break;
}
}
void Scene4000::Action3::signal() {
// The guard walks to the left and exits the screen
- Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene;
+ Scene4000 *scene = (Scene4000 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -202,19 +204,19 @@ void Scene4000::Action3::signal() {
void Scene4000::Action4::signal() {
// Quinn ties the rope to the rock
- Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene;
+ Scene4000 *scene = (Scene4000 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player._uiEnabled = false;
- ADD_MOVER(_globals->_player, 257, 57);
+ g_globals->_player._uiEnabled = false;
+ ADD_MOVER(g_globals->_player, 257, 57);
break;
case 1:
- _globals->_player.setVisage(4008);
- _globals->_player.setPosition(Common::Point(258, 83));
- _globals->_player._frame = 1;
- _globals->_player._strip = 3;
- _globals->_player.animate(ANIM_MODE_4, 2, 1, this);
+ g_globals->_player.setVisage(4008);
+ g_globals->_player.setPosition(Common::Point(258, 83));
+ g_globals->_player._frame = 1;
+ g_globals->_player._strip = 3;
+ g_globals->_player.animate(ANIM_MODE_4, 2, 1, this);
break;
case 2:
scene->_rope.postInit();
@@ -224,16 +226,16 @@ void Scene4000::Action4::signal() {
scene->_rope.setPosition(Common::Point(268, 44));
RING_INVENTORY._rope._sceneNumber = 4000;
- _globals->_events.setCursor(CURSOR_USE);
- _globals->_player.animate(ANIM_MODE_6, this);
+ g_globals->_events.setCursor(CURSOR_USE);
+ g_globals->_player.animate(ANIM_MODE_6, this);
break;
case 3:
- _globals->_player.setVisage(2602);
- _globals->_player.setPosition(Common::Point(257, 57));
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player._uiEnabled = true;
+ g_globals->_player.setVisage(2602);
+ g_globals->_player.setPosition(Common::Point(257, 57));
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player._uiEnabled = true;
- _globals->setFlag(41);
+ g_globals->setFlag(41);
remove();
break;
}
@@ -241,15 +243,15 @@ void Scene4000::Action4::signal() {
void Scene4000::Action5::signal() {
// Chat with Miranda
- Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene;
+ Scene4000 *scene = (Scene4000 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
setDelay(15);
break;
case 1:
- scene->_stripManager.start(_globals->_stripNum, this);
+ scene->_stripManager.start(g_globals->_stripNum, this);
break;
case 2:
setDelay(10);
@@ -260,7 +262,7 @@ void Scene4000::Action5::signal() {
scene->_hotspot8.setFrame2(-1);
scene->_hotspot8.setAction(&scene->_action3);
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
remove();
break;
}
@@ -269,102 +271,102 @@ void Scene4000::Action5::signal() {
void Scene4000::Action6::signal() {
// Quinn and Miranda enter the screen and walk to the village.
// Rock comes and notices the alcohol. They all enter his hut.
- Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene;
+ Scene4000 *scene = (Scene4000 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
setDelay(30);
break;
case 1:
- setAction(&scene->_sequenceManager1, this, 4001, &_globals->_player, NULL);
+ setAction(&scene->_sequenceManager1, this, 4001, &g_globals->_player, NULL);
- if (!_globals->getFlag(36))
+ if (!g_globals->getFlag(36))
scene->_miranda.setAction(&scene->_sequenceManager2, NULL, 4002, &scene->_miranda, NULL);
break;
case 2:
- _globals->_player.disableControl();
- ADD_MOVER(scene->_guardRock, _globals->_player._position.x + 30, _globals->_player._position.y - 5);
+ g_globals->_player.disableControl();
+ ADD_MOVER(scene->_guardRock, g_globals->_player._position.x + 30, g_globals->_player._position.y - 5);
break;
case 3:
- scene->_stripManager.start(_globals->getFlag(35) ? 4500 : 4502, this);
+ scene->_stripManager.start(g_globals->getFlag(35) ? 4500 : 4502, this);
break;
case 4:
- _globals->clearFlag(35);
+ g_globals->clearFlag(35);
ADD_MOVER_NULL(scene->_guardRock, 292, 138);
ADD_PLAYER_MOVER(283, 147);
- if (!_globals->getFlag(36))
+ if (!g_globals->getFlag(36))
ADD_PLAYER_MOVER_NULL(scene->_miranda, 280, 150);
RING_INVENTORY._ale._sceneNumber = 4100;
break;
case 5:
- _globals->_sceneManager.changeScene(4100);
+ g_globals->_sceneManager.changeScene(4100);
break;
}
}
void Scene4000::Action7::signal() {
// Climb down left Chimney using a rope
- Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene;
+ Scene4000 *scene = (Scene4000 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_rope.setFrame(1);
- ADD_MOVER(_globals->_player, 247, 53);
+ ADD_MOVER(g_globals->_player, 247, 53);
break;
case 1:
- _globals->_player.setVisage(4008);
- _globals->_player.setStrip(4);
- _globals->_player.setFrame(1);
- _globals->_player.fixPriority(16);
- _globals->_player.setPosition(Common::Point(260, 55));
- _globals->_player.animate(ANIM_MODE_5, this);
+ g_globals->_player.setVisage(4008);
+ g_globals->_player.setStrip(4);
+ g_globals->_player.setFrame(1);
+ g_globals->_player.fixPriority(16);
+ g_globals->_player.setPosition(Common::Point(260, 55));
+ g_globals->_player.animate(ANIM_MODE_5, this);
break;
case 2:
- _globals->_sceneManager.changeScene(4050);
+ g_globals->_sceneManager.changeScene(4050);
break;
}
}
void Scene4000::Action8::signal() {
// Climb down right Chimney using a rope
- Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene;
+ Scene4000 *scene = (Scene4000 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
- if (_globals->getFlag(41))
+ g_globals->_player.disableControl();
+ if (g_globals->getFlag(41))
scene->_rope.setFrame(2);
- ADD_MOVER(_globals->_player, 289, 53);
+ ADD_MOVER(g_globals->_player, 289, 53);
break;
case 1:
- _globals->_player.setVisage(4008);
- _globals->_player.setStrip(5);
- _globals->_player.fixPriority(16);
- _globals->_player.setFrame(1);
- _globals->_player.setPosition(Common::Point(283, 52));
- _globals->_player.animate(ANIM_MODE_5, this);
+ g_globals->_player.setVisage(4008);
+ g_globals->_player.setStrip(5);
+ g_globals->_player.fixPriority(16);
+ g_globals->_player.setFrame(1);
+ g_globals->_player.setPosition(Common::Point(283, 52));
+ g_globals->_player.animate(ANIM_MODE_5, this);
break;
case 2:
- _globals->_player.remove();
+ g_globals->_player.remove();
setDelay(60);
break;
case 3:
- _globals->_soundHandler.play(170);
+ g_globals->_soundHandler.play(170);
scene->_smoke2.setVisage(4000);
scene->_smoke2.setStrip(6);
scene->_smoke2.animate(ANIM_MODE_2, NULL);
setDelay(60);
break;
case 4:
- _globals->_soundHandler.play(77, this);
+ g_globals->_soundHandler.play(77, this);
break;
case 5:
- _globals->_game->endGame(4000, 15);
+ g_globals->_game->endGame(4000, 15);
remove();
break;
}
@@ -374,7 +376,7 @@ void Scene4000::Action9::signal() {
// Villager animations
switch (_actionIndex++) {
case 0:
- setDelay(_globals->_randomSource.getRandomNumber(119) + 240);
+ setDelay(g_globals->_randomSource.getRandomNumber(119) + 240);
break;
case 1:
static_cast<SceneObject *>(_owner)->animate(ANIM_MODE_8, 1, this);
@@ -387,7 +389,7 @@ void Scene4000::Action10::signal() {
// Villager animations
switch (_actionIndex++) {
case 0:
- setDelay(_globals->_randomSource.getRandomNumber(119) + 240);
+ setDelay(g_globals->_randomSource.getRandomNumber(119) + 240);
break;
case 1:
static_cast<SceneObject *>(_owner)->animate(ANIM_MODE_8, 1, this);
@@ -397,11 +399,11 @@ void Scene4000::Action10::signal() {
}
void Scene4000::Action11::signal() {
- Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene;
+ Scene4000 *scene = (Scene4000 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
ADD_MOVER(scene->_lander, -30, 70);
break;
case 1:
@@ -415,7 +417,7 @@ void Scene4000::Action11::signal() {
scene->_hotspot5._moveDiff.x = 4;
scene->_hotspot5.setPosition(Common::Point(-8, 88));
- setAction(&scene->_sequenceManager1, this, 4001, &_globals->_player, NULL);
+ setAction(&scene->_sequenceManager1, this, 4001, &g_globals->_player, NULL);
scene->_miranda.setPosition(Common::Point(-210, 139));
scene->_miranda.setAction(&scene->_sequenceManager2, NULL, 4002, &scene->_miranda, NULL);
@@ -432,33 +434,33 @@ void Scene4000::Action11::signal() {
scene->_soundHandler1.stop();
scene->_forceField.remove();
- ADD_MOVER(_globals->_player, 340, 163);
+ ADD_MOVER(g_globals->_player, 340, 163);
ADD_MOVER_NULL(scene->_miranda, 340, 169);
ADD_MOVER_NULL(scene->_hotspot5, 340, 165);
break;
case 6:
- _globals->_sceneManager.changeScene(4250);
+ g_globals->_sceneManager.changeScene(4250);
break;
}
}
void Scene4000::Action12::signal() {
// Quinn enter Rock's hut
- Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene;
+ Scene4000 *scene = (Scene4000 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
setDelay(5);
break;
case 1:
- _globals->_events.setCursor(CURSOR_WALK);
+ g_globals->_events.setCursor(CURSOR_WALK);
scene->_stripManager.start(4015, this);
break;
case 2:
- _globals->setFlag(32);
+ g_globals->setFlag(32);
if (scene->_stripManager._field2E8 == 275) {
- _globals->setFlag(82);
+ g_globals->setFlag(82);
ADD_MOVER_NULL(scene->_guardRock, 292, 138);
ADD_PLAYER_MOVER(283, 147);
} else {
@@ -467,7 +469,7 @@ void Scene4000::Action12::signal() {
break;
case 3:
if (scene->_stripManager._field2E8 == 275) {
- _globals->_sceneManager.changeScene(4100);
+ g_globals->_sceneManager.changeScene(4100);
} else {
ADD_PLAYER_MOVER_THIS(scene->_guardRock, 300, 132);
}
@@ -477,8 +479,8 @@ void Scene4000::Action12::signal() {
scene->_stripManager.start(4020, this);
break;
case 5:
- _globals->setFlag(35);
- _globals->_player.enableControl();
+ g_globals->setFlag(35);
+ g_globals->_player.enableControl();
remove();
break;
}
@@ -486,11 +488,11 @@ void Scene4000::Action12::signal() {
void Scene4000::Action13::signal() {
// Lander is landing
- Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene;
+ Scene4000 *scene = (Scene4000 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
setDelay(3);
break;
case 1:
@@ -500,7 +502,7 @@ void Scene4000::Action13::signal() {
break;
case 2:
scene->_soundHandler2.release();
- _globals->_sceneManager.changeScene(4010);
+ g_globals->_sceneManager.changeScene(4010);
break;
}
}
@@ -508,7 +510,7 @@ void Scene4000::Action13::signal() {
/*--------------------------------------------------------------------------*/
void Scene4000::Miranda::doAction(int action) {
- Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene;
+ Scene4000 *scene = (Scene4000 *)g_globals->_sceneManager._scene;
switch (action) {
case OBJECT_STUNNER:
@@ -518,28 +520,28 @@ void Scene4000::Miranda::doAction(int action) {
SceneItem::display2(4000, 29);
break;
case CURSOR_TALK:
- if (_globals->getFlag(31)) {
- if (!_globals->getFlag(111)) {
- _globals->setFlag(111);
- _globals->_stripNum = 4070;
- } else if (!_globals->getFlag(33))
- _globals->_stripNum = 4094;
- else if (!_globals->getFlag(112)) {
- _globals->setFlag(112);
- _globals->_stripNum = 4300;
- } else if (!_globals->getFlag(113)) {
- _globals->setFlag(113);
- _globals->_stripNum = 4093;
+ if (g_globals->getFlag(31)) {
+ if (!g_globals->getFlag(111)) {
+ g_globals->setFlag(111);
+ g_globals->_stripNum = 4070;
+ } else if (!g_globals->getFlag(33))
+ g_globals->_stripNum = 4094;
+ else if (!g_globals->getFlag(112)) {
+ g_globals->setFlag(112);
+ g_globals->_stripNum = 4300;
+ } else if (!g_globals->getFlag(113)) {
+ g_globals->setFlag(113);
+ g_globals->_stripNum = 4093;
} else
- _globals->_stripNum = 4094;
+ g_globals->_stripNum = 4094;
} else {
- if (!_globals->getFlag(33))
- _globals->_stripNum = 4094;
- else if (!_globals->getFlag(112)) {
- _globals->setFlag(112);
- _globals->_stripNum = 4300;
+ if (!g_globals->getFlag(33))
+ g_globals->_stripNum = 4094;
+ else if (!g_globals->getFlag(112)) {
+ g_globals->setFlag(112);
+ g_globals->_stripNum = 4300;
} else
- _globals->_stripNum = 4094;
+ g_globals->_stripNum = 4094;
}
scene->setAction(&scene->_action5);
@@ -552,7 +554,7 @@ void Scene4000::Miranda::doAction(int action) {
void Scene4000::Hotspot8::doAction(int action) {
// Guard
- Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene;
+ Scene4000 *scene = (Scene4000 *)g_globals->_sceneManager._scene;
switch (action) {
case OBJECT_STUNNER:
@@ -567,20 +569,20 @@ void Scene4000::Hotspot8::doAction(int action) {
else {
switch (_ctr) {
case 0:
- _globals->_stripNum = 4090;
+ g_globals->_stripNum = 4090;
break;
case 1:
- _globals->_stripNum = 4091;
+ g_globals->_stripNum = 4091;
break;
case 2:
- _globals->_stripNum = 4092;
+ g_globals->_stripNum = 4092;
break;
default:
SceneItem::display2(4000, 34);
break;
}
- if (_globals->_stripNum) {
+ if (g_globals->_stripNum) {
setAction(NULL);
addMover(NULL);
++_ctr;
@@ -612,20 +614,20 @@ void Scene4000::GuardRock::doAction(int action) {
}
void Scene4000::Ladder::doAction(int action) {
- Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene;
+ Scene4000 *scene = (Scene4000 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(4000, 30);
break;
case CURSOR_USE:
- _globals->_player.disableControl();
- if (_globals->getFlag(40)) {
+ g_globals->_player.disableControl();
+ if (g_globals->getFlag(40)) {
scene->_sceneMode = 4005;
- scene->setAction(&scene->_sequenceManager1, scene, 4005, &_globals->_player, NULL);
+ scene->setAction(&scene->_sequenceManager1, scene, 4005, &g_globals->_player, NULL);
} else {
scene->_sceneMode = 4004;
- scene->setAction(&scene->_sequenceManager1, scene, 4004, &_globals->_player, &scene->_ladder, NULL);
+ scene->setAction(&scene->_sequenceManager1, scene, 4004, &g_globals->_player, &scene->_ladder, NULL);
}
break;
default:
@@ -635,7 +637,7 @@ void Scene4000::Ladder::doAction(int action) {
}
void Scene4000::TheTech::doAction(int action) {
- Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene;
+ Scene4000 *scene = (Scene4000 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
@@ -648,15 +650,15 @@ void Scene4000::TheTech::doAction(int action) {
SceneItem::display2(4000, 20);
break;
case CURSOR_USE:
- if (_globals->getFlag(40))
+ if (g_globals->getFlag(40))
SceneItem::display2(4000, 37);
else {
- _globals->_player.disableControl();
- if (_globals->_sceneObjects->contains(&scene->_miranda))
- _globals->clearFlag(96);
+ g_globals->_player.disableControl();
+ if (g_globals->_sceneObjects->contains(&scene->_miranda))
+ g_globals->clearFlag(96);
scene->_sceneMode = 4012;
- scene->setAction(&scene->_sequenceManager1, scene, 4012, &_globals->_player, NULL);
+ scene->setAction(&scene->_sequenceManager1, scene, 4012, &g_globals->_player, NULL);
}
break;
default:
@@ -667,14 +669,14 @@ void Scene4000::TheTech::doAction(int action) {
void Scene4000::Hotspot13::doAction(int action) {
// Rock between the two chimneys
- Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene;
+ Scene4000 *scene = (Scene4000 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(4000, 21);
break;
case OBJECT_ROPE:
- if (_globals->getFlag(40))
+ if (g_globals->getFlag(40))
scene->setAction(&scene->_action4);
else
SceneItem::display2(4000, 22);
@@ -687,7 +689,7 @@ void Scene4000::Hotspot13::doAction(int action) {
void Scene4000::Hotspot::doAction(int action) {
// Wall between the two doors
- Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene;
+ Scene4000 *scene = (Scene4000 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
@@ -700,16 +702,16 @@ void Scene4000::Hotspot::doAction(int action) {
SceneItem::display2(4000, 18);
break;
case OBJECT_LADDER: {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_ladder.postInit();
scene->_ladder.setVisage(4000);
scene->_ladder.setStrip(5);
scene->_ladder.setPosition(Common::Point(245, 147));
scene->_ladder.hide();
- _globals->_sceneItems.push_front(&scene->_ladder);
+ g_globals->_sceneItems.push_front(&scene->_ladder);
- if (_globals->_sceneObjects->contains(&scene->_hotspot8)) {
+ if (g_globals->_sceneObjects->contains(&scene->_hotspot8)) {
scene->_hotspot8.setAction(NULL);
Common::Point pt(118, 145);
NpcMover *mover = new NpcMover();
@@ -717,7 +719,7 @@ void Scene4000::Hotspot::doAction(int action) {
}
scene->_sceneMode = 4004;
- scene->setAction(&scene->_sequenceManager1, scene, 4011, &_globals->_player, &scene->_ladder, NULL);
+ scene->setAction(&scene->_sequenceManager1, scene, 4011, &g_globals->_player, &scene->_ladder, NULL);
break;
}
default:
@@ -728,14 +730,14 @@ void Scene4000::Hotspot::doAction(int action) {
void Scene4000::Hotspot17::doAction(int action) {
// Left Chimney
- Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene;
+ Scene4000 *scene = (Scene4000 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(4000, 23);
break;
case CURSOR_USE:
- if (_globals->getFlag(40))
+ if (g_globals->getFlag(40))
scene->setAction(&scene->_action7);
else
SceneItem::display2(4000, 24);
@@ -748,14 +750,14 @@ void Scene4000::Hotspot17::doAction(int action) {
void Scene4000::Hotspot18::doAction(int action) {
// Right Chimney
- Scene4000 *scene = (Scene4000 *)_globals->_sceneManager._scene;
+ Scene4000 *scene = (Scene4000 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(4000, 36);
break;
case CURSOR_USE:
- if (_globals->getFlag(40))
+ if (g_globals->getFlag(40))
scene->setAction(&scene->_action8);
else
SceneItem::display2(4000, 24);
@@ -770,7 +772,7 @@ void Scene4000::Hotspot23::doAction(int action) {
// Door of the temple
switch (action) {
case CURSOR_LOOK:
- SceneItem::display2(4000, _globals->getFlag(31) ? 10 : 9);
+ SceneItem::display2(4000, g_globals->getFlag(31) ? 10 : 9);
break;
default:
SceneHotspot::doAction(action);
@@ -815,7 +817,7 @@ void Scene4000::postInit(SceneObjectList *OwnerList) {
_speakerSText._npc = &_hotspot5;
_speakerMText._npc = &_miranda;
_speakerPText._npc = &_olo;
- _speakerQText._npc = &_globals->_player;
+ _speakerQText._npc = &g_globals->_player;
_hotspot13.setBounds(Rect(263, 41, 278, 55));
_hotspot14.setBounds(Rect(96 /*140*/, 177, 140 /*96*/, 204));
@@ -866,7 +868,7 @@ void Scene4000::postInit(SceneObjectList *OwnerList) {
_theTech.fixPriority(200);
_theTech.setPosition(Common::Point(281, 176));
- if (_globals->getFlag(34)) {
+ if (g_globals->getFlag(34)) {
_soundHandler1.play(156);
_forceField.postInit();
@@ -876,16 +878,16 @@ void Scene4000::postInit(SceneObjectList *OwnerList) {
_forceField.fixPriority(200);
_forceField.animate(ANIM_MODE_8, 0, NULL);
- _globals->_sceneItems.push_back(&_forceField);
+ g_globals->_sceneItems.push_back(&_forceField);
}
- _globals->_player.postInit();
- _globals->_player.setVisage(2602);
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player.setObjectWrapper(new SceneObjectWrapper());
- _globals->_player.setPosition(Common::Point(-28, 86));
+ g_globals->_player.postInit();
+ g_globals->_player.setVisage(2602);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.setObjectWrapper(new SceneObjectWrapper());
+ g_globals->_player.setPosition(Common::Point(-28, 86));
- if (!_globals->getFlag(36) && !_globals->getFlag(43)) {
+ if (!g_globals->getFlag(36) && !g_globals->getFlag(43)) {
_miranda.postInit();
_miranda.setVisage(2701);
_miranda.animate(ANIM_MODE_1, NULL);
@@ -893,14 +895,14 @@ void Scene4000::postInit(SceneObjectList *OwnerList) {
_miranda._moveDiff = Common::Point(4, 2);
_miranda.setPosition(Common::Point(-210, 139));
- _globals->_sceneItems.push_back(&_miranda);
+ g_globals->_sceneItems.push_back(&_miranda);
}
- _globals->clearFlag(40);
+ g_globals->clearFlag(40);
- switch (_globals->_sceneManager._previousScene) {
+ switch (g_globals->_sceneManager._previousScene) {
case 2320:
- _globals->_soundHandler.play(155);
+ g_globals->_soundHandler.play(155);
if (RING_INVENTORY._ale._sceneNumber == 1) {
_guardRock.postInit();
@@ -911,17 +913,17 @@ void Scene4000::postInit(SceneObjectList *OwnerList) {
setAction(&_action6);
} else {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
_sceneMode = 4001;
- setAction(&_sequenceManager1, this, 4001, &_globals->_player, NULL);
+ setAction(&_sequenceManager1, this, 4001, &g_globals->_player, NULL);
- if (!_globals->getFlag(36) && !_globals->getFlag(43))
+ if (!g_globals->getFlag(36) && !g_globals->getFlag(43))
_miranda.setAction(&_sequenceManager2, NULL, 4002, &_miranda, NULL);
}
- if (_globals->getFlag(42))
+ if (g_globals->getFlag(42))
_hotspot8.setAction(&_action3);
- else if (_globals->getFlag(91))
+ else if (g_globals->getFlag(91))
_hotspot8.remove();
break;
@@ -948,12 +950,12 @@ void Scene4000::postInit(SceneObjectList *OwnerList) {
if (RING_INVENTORY._ladder._sceneNumber == 4000)
_hotspot8.remove();
- _globals->_player.setPosition(Common::Point(260, 185));
+ g_globals->_player.setPosition(Common::Point(260, 185));
- if (!_globals->getFlag(36) && !_globals->getFlag(43))
+ if (!g_globals->getFlag(36) && !g_globals->getFlag(43))
_miranda.setPosition(Common::Point(246, 146));
- if (_globals->getFlag(96)) {
+ if (g_globals->getFlag(96)) {
_olo.postInit();
_olo.setVisage(4006);
_olo.animate(ANIM_MODE_1, NULL);
@@ -961,7 +963,7 @@ void Scene4000::postInit(SceneObjectList *OwnerList) {
_olo.setPosition(Common::Point(290, 163));
}
- if (_globals->_stripNum == 4025) {
+ if (g_globals->_stripNum == 4025) {
_soundHandler1.play(182);
_forceField.remove();
@@ -972,9 +974,9 @@ void Scene4000::postInit(SceneObjectList *OwnerList) {
_hotspot5._moveDiff.x = 4;
_hotspot5.setPosition(Common::Point(-18, 86));
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
- if (!_globals->getFlag(96)) {
+ if (!g_globals->getFlag(96)) {
_olo.postInit();
_olo.setVisage(4006);
_olo.animate(ANIM_MODE_1, NULL);
@@ -988,17 +990,17 @@ void Scene4000::postInit(SceneObjectList *OwnerList) {
_sceneMode = 4003;
setAction(&_sequenceManager1, this, 4003, &_hotspot5, NULL);
- } else if (_globals->getFlag(96)) {
- _globals->_player.disableControl();
+ } else if (g_globals->getFlag(96)) {
+ g_globals->_player.disableControl();
_sceneMode = 4013;
setAction(&_sequenceManager1, this, 4013, &_olo, NULL);
}
- _globals->clearFlag(96);
+ g_globals->clearFlag(96);
break;
case 4045:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
if (RING_INVENTORY._ladder._sceneNumber != 4000) {
_hotspot8.setVisage(4017);
@@ -1007,13 +1009,13 @@ void Scene4000::postInit(SceneObjectList *OwnerList) {
_hotspot8.setAction(&_action3);
}
- _globals->_player.setPosition(Common::Point(208, 153));
- if (!_globals->getFlag(36) && !_globals->getFlag(43))
+ g_globals->_player.setPosition(Common::Point(208, 153));
+ if (!g_globals->getFlag(36) && !g_globals->getFlag(43))
_miranda.setPosition(Common::Point(246, 146));
- if (_globals->getFlag(39)) {
+ if (g_globals->getFlag(39)) {
// Ollo follows Quinn and gives explanations on the Tech.
- _globals->clearFlag(39);
+ g_globals->clearFlag(39);
_olo.postInit();
_olo.setVisage(4006);
@@ -1022,14 +1024,14 @@ void Scene4000::postInit(SceneObjectList *OwnerList) {
_olo.setPosition(Common::Point(219, 150));
_sceneMode = 4010;
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
// This is the buggy animation where Miranda comments the Tech even
// if she's not in the room but in the lander.
- setAction(&_sequenceManager1, this, 4010, &_globals->_player, &_olo, NULL);
+ setAction(&_sequenceManager1, this, 4010, &g_globals->_player, &_olo, NULL);
}
- if (_globals->_stripNum == 4000) {
- _globals->_stripNum = 0;
+ if (g_globals->_stripNum == 4000) {
+ g_globals->_stripNum = 0;
_guardRock.postInit();
_guardRock.setVisage(4001);
@@ -1043,21 +1045,21 @@ void Scene4000::postInit(SceneObjectList *OwnerList) {
break;
case 4050:
- _globals->_soundHandler.play(155);
- _globals->_player.disableControl();
+ g_globals->_soundHandler.play(155);
+ g_globals->_player.disableControl();
- if (_globals->_stripNum == 4050) {
- _globals->_player.setVisage(4008);
- _globals->_player.setStrip(4);
- _globals->_player.setFrame(_globals->_player.getFrameCount());
- _globals->_player.fixPriority(16);
- _globals->_player.setPosition(Common::Point(260, 55));
+ if (g_globals->_stripNum == 4050) {
+ g_globals->_player.setVisage(4008);
+ g_globals->_player.setStrip(4);
+ g_globals->_player.setFrame(g_globals->_player.getFrameCount());
+ g_globals->_player.fixPriority(16);
+ g_globals->_player.setPosition(Common::Point(260, 55));
_sceneMode = 4007;
- setAction(&_sequenceManager1, this, 4007, &_globals->_player, NULL);
+ setAction(&_sequenceManager1, this, 4007, &g_globals->_player, NULL);
} else {
- _globals->_player.setPosition(Common::Point(208, 153));
- _globals->_player.enableControl();
+ g_globals->_player.setPosition(Common::Point(208, 153));
+ g_globals->_player.enableControl();
}
if (RING_INVENTORY._ladder._sceneNumber != 4000)
@@ -1065,22 +1067,22 @@ void Scene4000::postInit(SceneObjectList *OwnerList) {
break;
case 4100:
- _globals->_player.enableControl();
- _globals->_player.setPosition(Common::Point(270, 155));
+ g_globals->_player.enableControl();
+ g_globals->_player.setPosition(Common::Point(270, 155));
- if (_globals->getFlag(42) && (RING_INVENTORY._ladder._sceneNumber != 4000)) {
+ if (g_globals->getFlag(42) && (RING_INVENTORY._ladder._sceneNumber != 4000)) {
_hotspot8.setVisage(4017);
_hotspot8.animate(ANIM_MODE_1, NULL);
_hotspot8.setPosition(Common::Point(244, 151));
_hotspot8.setAction(&_action3);
}
- if (!_globals->getFlag(36) && !_globals->getFlag(43))
+ if (!g_globals->getFlag(36) && !g_globals->getFlag(43))
_miranda.setPosition(Common::Point(246, 146));
break;
default:
- _globals->_soundHandler.play(155);
+ g_globals->_soundHandler.play(155);
_lander.postInit();
_lander.setVisage(4002);
@@ -1090,7 +1092,7 @@ void Scene4000::postInit(SceneObjectList *OwnerList) {
_lander.setPosition(Common::Point(130, -1));
_lander.animate(ANIM_MODE_2, NULL);
- if (_globals->_stripNum == 9000) {
+ if (g_globals->_stripNum == 9000) {
_olo.postInit();
_olo.setVisage(4006);
_olo.setPosition(Common::Point(235, 153));
@@ -1113,7 +1115,7 @@ void Scene4000::postInit(SceneObjectList *OwnerList) {
_forceField.fixPriority(200);
_forceField.animate(ANIM_MODE_8, 0, NULL);
} else {
- if (!_globals->getFlag(37)) {
+ if (!g_globals->getFlag(37)) {
_hotspot2.postInit();
_hotspot2.setVisage(4018);
_hotspot2._strip = 1;
@@ -1134,7 +1136,7 @@ void Scene4000::postInit(SceneObjectList *OwnerList) {
_ladder.setStrip(5);
_ladder.setPosition(Common::Point(245, 147));
- _globals->_sceneItems.push_back(&_ladder);
+ g_globals->_sceneItems.push_back(&_ladder);
}
if (RING_INVENTORY._rope._sceneNumber == 4000) {
@@ -1145,7 +1147,7 @@ void Scene4000::postInit(SceneObjectList *OwnerList) {
_rope.setPosition(Common::Point(268, 44));
}
- _globals->_sceneItems.addItems(&_hotspot8, &_hotspot17, &_hotspot18, &_hotspot14, &_hotspot15,
+ g_globals->_sceneItems.addItems(&_hotspot8, &_hotspot17, &_hotspot18, &_hotspot14, &_hotspot15,
&_hotspot16, &_theTech, &_hotspot13, &_hotspot21, &_hotspot20, &_hotspot22, &_hotspot23,
&_hotspot24, &_hotspot25, &_hotspot19, &_hotspot26, NULL);
}
@@ -1153,51 +1155,51 @@ void Scene4000::postInit(SceneObjectList *OwnerList) {
void Scene4000::signal() {
switch (_sceneMode) {
case 4010:
- _globals->setFlag(38);
+ g_globals->setFlag(38);
_olo.remove();
// Deliberate fall-through
case 4001:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
break;
case 4002:
case 4011:
break;
case 4003:
_sceneMode = 4014;
- setAction(&_sequenceManager1, this, 4014, &_globals->_player, &_hotspot5, NULL);
+ setAction(&_sequenceManager1, this, 4014, &g_globals->_player, &_hotspot5, NULL);
break;
case 4004:
RING_INVENTORY._ladder._sceneNumber = 4000;
// Deliberate fall-through
case 4007:
- _globals->_player._uiEnabled = true;
- _globals->_events.setCursor(CURSOR_USE);
- _globals->setFlag(40);
+ g_globals->_player._uiEnabled = true;
+ g_globals->_events.setCursor(CURSOR_USE);
+ g_globals->setFlag(40);
break;
case 4005:
- _globals->_player.enableControl();
- _globals->_events.setCursor(CURSOR_WALK);
- _globals->clearFlag(40);
+ g_globals->_player.enableControl();
+ g_globals->_events.setCursor(CURSOR_WALK);
+ g_globals->clearFlag(40);
break;
case 4006:
- _globals->_sceneManager.changeScene(4045);
+ g_globals->_sceneManager.changeScene(4045);
break;
case 4008:
- _globals->_sceneManager.changeScene(2320);
+ g_globals->_sceneManager.changeScene(2320);
break;
case 4009:
- _globals->_sceneManager.changeScene(2200);
+ g_globals->_sceneManager.changeScene(2200);
break;
case 4012:
- _globals->_player.checkAngle(&_theTech);
- _globals->_sceneManager.changeScene(4025);
+ g_globals->_player.checkAngle(&_theTech);
+ g_globals->_sceneManager.changeScene(4025);
break;
case 4013:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
_olo.remove();
break;
case 4014:
- _globals->_sceneManager.changeScene(4250);
+ g_globals->_sceneManager.changeScene(4250);
break;
case 4015:
ADD_MOVER_NULL(_miranda, 0, _miranda._position.y - 5);
@@ -1208,14 +1210,14 @@ void Scene4000::signal() {
void Scene4000::dispatch() {
Scene::dispatch();
- if ((_globals->_player.getRegionIndex() == 10) || (_globals->_player.getRegionIndex() == 6))
- _globals->_player.fixPriority(200);
- if (_globals->_player.getRegionIndex() == 11)
- _globals->_player.fixPriority(-1);
- if (_globals->_player.getRegionIndex() == 5)
- _globals->_player.fixPriority(94);
+ if ((g_globals->_player.getRegionIndex() == 10) || (g_globals->_player.getRegionIndex() == 6))
+ g_globals->_player.fixPriority(200);
+ if (g_globals->_player.getRegionIndex() == 11)
+ g_globals->_player.fixPriority(-1);
+ if (g_globals->_player.getRegionIndex() == 5)
+ g_globals->_player.fixPriority(94);
- if (_globals->_sceneObjects->contains(&_hotspot5)) {
+ if (g_globals->_sceneObjects->contains(&_hotspot5)) {
if ((_hotspot5.getRegionIndex() == 10) || (_hotspot5.getRegionIndex() == 6))
_hotspot5.fixPriority(200);
if (_hotspot5.getRegionIndex() == 11)
@@ -1224,10 +1226,10 @@ void Scene4000::dispatch() {
_hotspot5.fixPriority(94);
}
- if (_globals->_sceneObjects->contains(&_miranda)) {
+ if (g_globals->_sceneObjects->contains(&_miranda)) {
if (!_miranda._mover)
- _miranda.checkAngle(&_globals->_player);
- if (!_action && _globals->_player.getRegionIndex() == 23) {
+ _miranda.checkAngle(&g_globals->_player);
+ if (!_action && g_globals->_player.getRegionIndex() == 23) {
ADD_MOVER_NULL(_miranda, 204, 186);
}
@@ -1240,30 +1242,30 @@ void Scene4000::dispatch() {
}
if (!_action) {
- if ((RING_INVENTORY._peg._sceneNumber == 1) && _globals->getFlag(34) &&
- _globals->getFlag(37) && !_globals->getFlag(40)) {
- _globals->_player.disableControl();
+ if ((RING_INVENTORY._peg._sceneNumber == 1) && g_globals->getFlag(34) &&
+ g_globals->getFlag(37) && !g_globals->getFlag(40)) {
+ g_globals->_player.disableControl();
_soundHandler1.play(177);
- _globals->_soundHandler.play(178);
+ g_globals->_soundHandler.play(178);
setAction(&_action1);
}
- if (_globals->_player.getRegionIndex() == 2)
- _globals->_sceneManager.changeScene(4045);
- if (_globals->_player.getRegionIndex() == 15)
- _globals->_sceneManager.changeScene(4100);
+ if (g_globals->_player.getRegionIndex() == 2)
+ g_globals->_sceneManager.changeScene(4045);
+ if (g_globals->_player.getRegionIndex() == 15)
+ g_globals->_sceneManager.changeScene(4100);
- if ((_globals->_player._position.x <= 5) && (_globals->_player._position.y < 100)) {
- _globals->_player.disableControl();
+ if ((g_globals->_player._position.x <= 5) && (g_globals->_player._position.y < 100)) {
+ g_globals->_player.disableControl();
- if (!_globals->_sceneObjects->contains(&_miranda) || (_miranda._position.y <= 100)) {
+ if (!g_globals->_sceneObjects->contains(&_miranda) || (_miranda._position.y <= 100)) {
_sceneMode = 4008;
- setAction(&_sequenceManager1, this, 4008, &_globals->_player, NULL);
+ setAction(&_sequenceManager1, this, 4008, &g_globals->_player, NULL);
} else {
_sceneMode = 4015;
- _globals->_player.addMover(NULL);
- setAction(&_sequenceManager1, this, 4015, &_globals->_player, &_miranda, NULL);
+ g_globals->_player.addMover(NULL);
+ setAction(&_sequenceManager1, this, 4015, &g_globals->_player, &_miranda, NULL);
}
}
}
@@ -1284,14 +1286,14 @@ void Scene4010::postInit(SceneObjectList *OwnerList) {
_stripManager.addSpeaker(&_speakerMText);
_speakerSText._npc = &_hotspot1;
_speakerMText._npc = &_hotspot2;
- _speakerQText._npc = &_globals->_player;
+ _speakerQText._npc = &g_globals->_player;
- _globals->_player.postInit();
- _globals->_player.setVisage(0);
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player.setObjectWrapper(new SceneObjectWrapper());
- _globals->_player.setPosition(Common::Point(-38, 175));
- _globals->_player.changeZoom(75);
+ g_globals->_player.postInit();
+ g_globals->_player.setVisage(0);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.setObjectWrapper(new SceneObjectWrapper());
+ g_globals->_player.setPosition(Common::Point(-38, 175));
+ g_globals->_player.changeZoom(75);
_hotspot2.postInit();
_hotspot2.setVisage(2705);
@@ -1308,12 +1310,12 @@ void Scene4010::postInit(SceneObjectList *OwnerList) {
_hotspot1.animate(ANIM_MODE_1, NULL);
_hotspot1.setObjectWrapper(new SceneObjectWrapper());
- _globals->_player.disableControl();
- setAction(&_sequenceManager, this, 4017, &_globals->_player, &_hotspot1, &_hotspot2, NULL);
+ g_globals->_player.disableControl();
+ setAction(&_sequenceManager, this, 4017, &g_globals->_player, &_hotspot1, &_hotspot2, NULL);
}
void Scene4010::signal() {
- _globals->_sceneManager.changeScene(4000);
+ g_globals->_sceneManager.changeScene(4000);
}
/*--------------------------------------------------------------------------
@@ -1322,7 +1324,7 @@ void Scene4010::signal() {
*--------------------------------------------------------------------------*/
void Scene4025::Action1::signal() {
- Scene4025 *scene = (Scene4025 *)_globals->_sceneManager._scene;
+ Scene4025 *scene = (Scene4025 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -1362,15 +1364,15 @@ void Scene4025::Action1::signal() {
break;
case 2:
- _globals->_player._uiEnabled = true;
- _globals->_events.setCursor(CURSOR_USE);
+ g_globals->_player._uiEnabled = true;
+ g_globals->_events.setCursor(CURSOR_USE);
remove();
break;
}
}
void Scene4025::Action2::signal() {
- Scene4025 *scene = (Scene4025 *)_globals->_sceneManager._scene;
+ Scene4025 *scene = (Scene4025 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -1406,8 +1408,8 @@ void Scene4025::Action2::signal() {
scene->_armHotspot.animate(ANIM_MODE_5, this);
break;
case 2:
- _globals->_player._uiEnabled = true;
- _globals->_events.setCursor(CURSOR_USE);
+ g_globals->_player._uiEnabled = true;
+ g_globals->_events.setCursor(CURSOR_USE);
remove();
break;
}
@@ -1416,14 +1418,14 @@ void Scene4025::Action2::signal() {
void Scene4025::Action3::signal() {
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
- _globals->_scenePalette.addRotation(64, 111, -1);
+ g_globals->_player.disableControl();
+ g_globals->_scenePalette.addRotation(64, 111, -1);
setDelay(120);
break;
case 1:
- _globals->clearFlag(34);
- _globals->_stripNum = 4025;
- _globals->_sceneManager.changeScene(4000);
+ g_globals->clearFlag(34);
+ g_globals->_stripNum = 4025;
+ g_globals->_sceneManager.changeScene(4000);
break;
}
}
@@ -1439,7 +1441,7 @@ void Scene4025::Hole::synchronize(Serializer &s) {
}
void Scene4025::Hole::doAction(int action) {
- Scene4025 *scene = (Scene4025 *)_globals->_sceneManager._scene;
+ Scene4025 *scene = (Scene4025 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
@@ -1449,15 +1451,15 @@ void Scene4025::Hole::doAction(int action) {
if (!scene->_pegPtr && !_pegPtr) {
setAction(&scene->_sequenceManager, scene, 4028, NULL);
} else {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_holePtr = this;
scene->setAction(&scene->_action2);
}
break;
case OBJECT_PEG:
if (!scene->_pegPtr2) {
- _globals->_player.disableControl();
- _globals->_events.setCursor(CURSOR_USE);
+ g_globals->_player.disableControl();
+ g_globals->_events.setCursor(CURSOR_USE);
RING_INVENTORY._peg._sceneNumber = 4025;
scene->_pegPtr = &scene->_peg5;
@@ -1481,14 +1483,14 @@ void Scene4025::Peg::synchronize(Serializer &s) {
}
void Scene4025::Peg::doAction(int action) {
- Scene4025 *scene = (Scene4025 *)_globals->_sceneManager._scene;
+ Scene4025 *scene = (Scene4025 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(4025, 1);
break;
case CURSOR_USE:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_pegPtr = this;
scene->setAction(&scene->_action1);
break;
@@ -1507,7 +1509,7 @@ void Scene4025::postInit(SceneObjectList *OwnerList) {
Scene::postInit();
setZoomPercents(0, 100, 200, 100);
- _globals->_events.setCursor(CURSOR_USE);
+ g_globals->_events.setCursor(CURSOR_USE);
_pegPtr = _pegPtr2 = NULL;
_peg1.postInit();
@@ -1607,11 +1609,11 @@ void Scene4025::postInit(SceneObjectList *OwnerList) {
_armHotspot.setStrip(3);
_armHotspot.setFrame(4);
- _globals->_sceneItems.addItems(&_hole1, &_hole2, &_hole3, &_hole4, &_hole5,
+ g_globals->_sceneItems.addItems(&_hole1, &_hole2, &_hole3, &_hole4, &_hole5,
&_peg1, &_peg2, &_peg3, &_peg4, &_peg5, NULL);
- _globals->_player._uiEnabled = true;
- _globals->_player.disableControl();
+ g_globals->_player._uiEnabled = true;
+ g_globals->_player.disableControl();
setAction(&_sequenceManager, this, 4026, NULL);
}
@@ -1623,7 +1625,7 @@ void Scene4025::synchronize(Serializer &s) {
}
void Scene4025::remove() {
- _globals->_scenePalette.clearListeners();
+ g_globals->_scenePalette.clearListeners();
Scene::remove();
}
@@ -1636,10 +1638,10 @@ void Scene4025::signal() {
_gfxButton._bounds.expandPanes();
}
- _globals->_player._uiEnabled = true;
+ g_globals->_player._uiEnabled = true;
}
- _globals->_events.setCursor(CURSOR_USE);
+ g_globals->_events.setCursor(CURSOR_USE);
}
void Scene4025::process(Event &event) {
@@ -1649,7 +1651,7 @@ void Scene4025::process(Event &event) {
if (RING_INVENTORY._peg._sceneNumber == 4025)
RING_INVENTORY._peg._sceneNumber = 1;
- _globals->_sceneManager.changeScene(4000);
+ g_globals->_sceneManager.changeScene(4000);
}
}
@@ -1667,15 +1669,15 @@ void Scene4025::dispatch() {
*--------------------------------------------------------------------------*/
void Scene4045::Action1::signal() {
- Scene4045 *scene = (Scene4045 *)_globals->_sceneManager._scene;
+ Scene4045 *scene = (Scene4045 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
setDelay(60);
break;
case 1:
- _globals->_events.setCursor(CURSOR_WALK);
+ g_globals->_events.setCursor(CURSOR_WALK);
scene->_stripManager.start(4040, this, scene);
break;
case 2:
@@ -1689,52 +1691,52 @@ void Scene4045::Action1::signal() {
scene->_hotspot4.animate(ANIM_MODE_6, this);
break;
case 5:
- ADD_MOVER(_globals->_player, 150, 300);
+ ADD_MOVER(g_globals->_player, 150, 300);
break;
case 6:
- _globals->_stripNum = 4000;
- _globals->_sceneManager.changeScene(4000);
+ g_globals->_stripNum = 4000;
+ g_globals->_sceneManager.changeScene(4000);
remove();
break;
}
}
void Scene4045::Action2::signal() {
- Scene4045 *scene = (Scene4045 *)_globals->_sceneManager._scene;
+ Scene4045 *scene = (Scene4045 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
setDelay(15);
break;
case 1:
- scene->_stripManager.start(_globals->_stripNum, this, scene);
+ scene->_stripManager.start(g_globals->_stripNum, this, scene);
break;
case 2:
scene->_olloFace.animate(ANIM_MODE_NONE, NULL);
setDelay(10);
break;
case 3:
- if (_globals->getFlag(38)) {
- _globals->_player.enableControl();
+ if (g_globals->getFlag(38)) {
+ g_globals->_player.enableControl();
remove();
} else {
- ADD_MOVER(_globals->_player, 150, 300);
+ ADD_MOVER(g_globals->_player, 150, 300);
}
break;
case 4:
- _globals->setFlag(39);
- _globals->_sceneManager.changeScene(4000);
+ g_globals->setFlag(39);
+ g_globals->_sceneManager.changeScene(4000);
break;
}
}
void Scene4045::Action3::signal() {
- Scene4045 *scene = (Scene4045 *)_globals->_sceneManager._scene;
+ Scene4045 *scene = (Scene4045 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_hotspot4.animate(ANIM_MODE_5, this);
break;
case 1:
@@ -1743,10 +1745,10 @@ void Scene4045::Action3::signal() {
case 2:
scene->_hotspot4.animate(ANIM_MODE_6, NULL);
scene->_olloFace.animate(ANIM_MODE_NONE, NULL);
- ADD_MOVER(_globals->_player, 91, 1264);
+ ADD_MOVER(g_globals->_player, 91, 1264);
break;
case 3:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
remove();
break;
}
@@ -1755,7 +1757,7 @@ void Scene4045::Action3::signal() {
/*--------------------------------------------------------------------------*/
void Scene4045::OlloStand::doAction(int action) {
- Scene4045 *scene = (Scene4045 *)_globals->_sceneManager._scene;
+ Scene4045 *scene = (Scene4045 *)g_globals->_sceneManager._scene;
switch (action) {
case OBJECT_STUNNER:
@@ -1772,20 +1774,20 @@ void Scene4045::OlloStand::doAction(int action) {
setStrip(6);
animate(ANIM_MODE_NONE, NULL);
}
- if (_globals->_player._position.y < 135) {
+ if (g_globals->_player._position.y < 135) {
scene->_sceneMode = 4046;
_numFrames = 10;
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
- scene->setAction(&scene->_sequenceManager, this, 4046, &_globals->_player, this, NULL);
+ scene->setAction(&scene->_sequenceManager, this, 4046, &g_globals->_player, this, NULL);
} else {
- if (!_globals->getFlag(31)) {
- _globals->setFlag(31);
- _globals->_stripNum = 4080;
- } else if (!_globals->getFlag(38))
- _globals->_stripNum = 4060;
+ if (!g_globals->getFlag(31)) {
+ g_globals->setFlag(31);
+ g_globals->_stripNum = 4080;
+ } else if (!g_globals->getFlag(38))
+ g_globals->_stripNum = 4060;
else
- _globals->_stripNum = 4503;
+ g_globals->_stripNum = 4503;
scene->setAction(&scene->_action2);
}
@@ -1797,7 +1799,7 @@ void Scene4045::OlloStand::doAction(int action) {
}
void Scene4045::Miranda::doAction(int action) {
- Scene4045 *scene = (Scene4045 *)_globals->_sceneManager._scene;
+ Scene4045 *scene = (Scene4045 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
@@ -1805,7 +1807,7 @@ void Scene4045::Miranda::doAction(int action) {
break;
case CURSOR_TALK:
scene->_sceneMode = 4102;
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->setAction(&scene->_sequenceManager, scene, 4104, NULL);
break;
default:
@@ -1815,22 +1817,22 @@ void Scene4045::Miranda::doAction(int action) {
}
void Scene4045::Necklace::doAction(int action) {
- Scene4045 *scene = (Scene4045 *)_globals->_sceneManager._scene;
+ Scene4045 *scene = (Scene4045 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(4045, 17);
break;
case CURSOR_USE:
- if (_globals->_player._position.y < 135) {
+ if (g_globals->_player._position.y < 135) {
SceneItem::display2(4045, 16);
RING_INVENTORY._peg._sceneNumber = 1;
- _globals->_events.setCursor(CURSOR_WALK);
+ g_globals->_events.setCursor(CURSOR_WALK);
remove();
} else {
scene->_sceneMode = 4047;
- _globals->_player.disableControl();
- scene->setAction(&scene->_sequenceManager, scene, 4047, &_globals->_player, &scene->_olloStand, NULL);
+ g_globals->_player.disableControl();
+ scene->setAction(&scene->_sequenceManager, scene, 4047, &g_globals->_player, &scene->_olloStand, NULL);
}
break;
default:
@@ -1875,13 +1877,13 @@ void Scene4045::postInit(SceneObjectList *OwnerList) {
_flame.setPosition(Common::Point(47, 111));
_flame.animate(ANIM_MODE_2, NULL);
_flame.fixPriority(156);
- _globals->_sceneItems.push_back(&_flame);
+ g_globals->_sceneItems.push_back(&_flame);
- _globals->_player.postInit();
- _globals->_player.setVisage(4200);
- _globals->_player.setObjectWrapper(new SceneObjectWrapper());
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player._moveDiff = Common::Point(7, 4);
+ g_globals->_player.postInit();
+ g_globals->_player.setVisage(4200);
+ g_globals->_player.setObjectWrapper(new SceneObjectWrapper());
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player._moveDiff = Common::Point(7, 4);
_olloStand.postInit();
_olloStand.setVisage(4051);
@@ -1891,10 +1893,10 @@ void Scene4045::postInit(SceneObjectList *OwnerList) {
_olloFace.setStrip(4);
_olloFace.fixPriority(152);
- if(_globals->_sceneManager._previousScene == 4050) {
- _globals->_soundHandler.play(155);
- _globals->_player.setPosition(Common::Point(72, 128));
- _globals->_player.enableControl();
+ if(g_globals->_sceneManager._previousScene == 4050) {
+ g_globals->_soundHandler.play(155);
+ g_globals->_player.setPosition(Common::Point(72, 128));
+ g_globals->_player.enableControl();
_olloStand.setStrip(5);
_olloStand.setPosition(Common::Point(173, 99));
@@ -1908,13 +1910,13 @@ void Scene4045::postInit(SceneObjectList *OwnerList) {
_necklace.setVisage(4045);
_necklace.setStrip(2);
_necklace.setPosition(Common::Point(108, 82));
- _globals->_sceneItems.push_back(&_necklace);
+ g_globals->_sceneItems.push_back(&_necklace);
}
} else {
- _globals->_player.setPosition(Common::Point(108, 192));
- _globals->_player.setStrip(4);
+ g_globals->_player.setPosition(Common::Point(108, 192));
+ g_globals->_player.setStrip(4);
- if (!_globals->getFlag(36) && !_globals->getFlag(43)) {
+ if (!g_globals->getFlag(36) && !g_globals->getFlag(43)) {
_miranda.postInit();
_miranda.setVisage(4102);
_miranda.animate(ANIM_MODE_NONE, NULL);
@@ -1923,10 +1925,10 @@ void Scene4045::postInit(SceneObjectList *OwnerList) {
_miranda.changeZoom(-1);
_miranda.setPosition(Common::Point(66, 209));
- _globals->_sceneItems.push_back(&_miranda);
+ g_globals->_sceneItems.push_back(&_miranda);
}
- if (_globals->getFlag(31)) {
+ if (g_globals->getFlag(31)) {
// Olo asleep
_olloStand.setVisage(4051);
_olloStand.setStrip(5);
@@ -1941,7 +1943,7 @@ void Scene4045::postInit(SceneObjectList *OwnerList) {
_necklace.setVisage(4045);
_necklace.setStrip(2);
_necklace.setPosition(Common::Point(108, 82));
- _globals->_sceneItems.push_back(&_necklace);
+ g_globals->_sceneItems.push_back(&_necklace);
}
} else {
_olloStand.setPosition(Common::Point(186, 149));
@@ -1953,14 +1955,14 @@ void Scene4045::postInit(SceneObjectList *OwnerList) {
_hotspot4.setPosition(Common::Point(202, 80));
_olloFace.setPosition(Common::Point(192, 77));
- _globals->setFlag(31);
+ g_globals->setFlag(31);
setAction(&_action1);
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
}
}
- _globals->_sceneItems.addItems(&_olloStand, &_hotspot7, &_hotspot8, &_hotspot9, &_hotspot10,
+ g_globals->_sceneItems.addItems(&_olloStand, &_hotspot7, &_hotspot8, &_hotspot9, &_hotspot10,
&_hotspot13, &_hotspot11, &_hotspot12, &_hotspot14, NULL);
}
@@ -1982,34 +1984,34 @@ void Scene4045::signal() {
_olloFace.animate(ANIM_MODE_NONE, NULL);
break;
case 4050:
- _globals->_sceneManager.changeScene(4000);
+ g_globals->_sceneManager.changeScene(4000);
break;
case 4102:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
break;
}
}
void Scene4045::dispatch() {
if (!_action) {
- if (_globals->_player.getRegionIndex() == 8) {
- _globals->_player.addMover(NULL);
+ if (g_globals->_player.getRegionIndex() == 8) {
+ g_globals->_player.addMover(NULL);
if (_olloStand._strip != 1) {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
_sceneMode = 4046;
_olloStand._numFrames = 10;
- setAction(&_sequenceManager, this, 4046, &_globals->_player, &_olloStand, NULL);
+ setAction(&_sequenceManager, this, 4046, &g_globals->_player, &_olloStand, NULL);
} else {
setAction(&_action3);
}
}
- if (_globals->_player.getRegionIndex() == 10)
- _globals->_sceneManager.changeScene(4050);
- if (_globals->_player._position.y >= 196) {
+ if (g_globals->_player.getRegionIndex() == 10)
+ g_globals->_sceneManager.changeScene(4050);
+ if (g_globals->_player._position.y >= 196) {
_sceneMode = 4050;
- _globals->_player.disableControl();
- setAction(&_sequenceManager, this, 4105, &_globals->_player, NULL);
+ g_globals->_player.disableControl();
+ setAction(&_sequenceManager, this, 4105, &g_globals->_player, NULL);
}
}
@@ -2023,21 +2025,21 @@ void Scene4045::dispatch() {
void Scene4050::Action1::signal() {
// "Map" on the wall
- Scene4050 *scene = (Scene4050 *)_globals->_sceneManager._scene;
+ Scene4050 *scene = (Scene4050 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
setDelay(3);
break;
case 1: {
Common::Point pt(204, 152);
PlayerMover *mover = new PlayerMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 2:
- _globals->_player.checkAngle(&scene->_hotspot17);
+ g_globals->_player.checkAngle(&scene->_hotspot17);
scene->_hotspot14.postInit();
scene->_hotspot14.setVisage(4050);
@@ -2047,11 +2049,11 @@ void Scene4050::Action1::signal() {
setDelay(10);
break;
case 3:
- _globals->_events.waitForPress();
- _globals->setFlag(45);
+ g_globals->_events.waitForPress();
+ g_globals->setFlag(45);
scene->_hotspot14.remove();
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
remove();
break;
}
@@ -2061,34 +2063,34 @@ void Scene4050::Action2::signal() {
// Climb down the rope
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
setDelay(120);
break;
case 1:
- _globals->_player.animate(ANIM_MODE_5, this);
+ g_globals->_player.animate(ANIM_MODE_5, this);
break;
case 2:
- _globals->_player.setVisage(4202);
- _globals->_player.changeZoom(100);
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player.setObjectWrapper(new SceneObjectWrapper());
- _globals->_player.setPosition(Common::Point(192, 130));
+ g_globals->_player.setVisage(4202);
+ g_globals->_player.changeZoom(100);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.setObjectWrapper(new SceneObjectWrapper());
+ g_globals->_player.setPosition(Common::Point(192, 130));
- ADD_MOVER(_globals->_player, 215, 130);
+ ADD_MOVER(g_globals->_player, 215, 130);
break;
case 3:
- _globals->_player.setVisage(4052);
- _globals->_player.setStrip(5);
- _globals->_player.setFrame(1);
- _globals->_player.setPosition(Common::Point(236, 130));
- _globals->_player.animate(ANIM_MODE_5, this);
+ g_globals->_player.setVisage(4052);
+ g_globals->_player.setStrip(5);
+ g_globals->_player.setFrame(1);
+ g_globals->_player.setPosition(Common::Point(236, 130));
+ g_globals->_player.animate(ANIM_MODE_5, this);
break;
case 4:
- _globals->_player.setVisage(4202);
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player.setPosition(Common::Point(210, 185));
- _globals->_player.fixPriority(-1);
- _globals->_player.enableControl();
+ g_globals->_player.setVisage(4202);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.setPosition(Common::Point(210, 185));
+ g_globals->_player.fixPriority(-1);
+ g_globals->_player.enableControl();
remove();
break;
}
@@ -2101,51 +2103,51 @@ void Scene4050::Action3::signal() {
ADD_PLAYER_MOVER(210, 185);
break;
case 1:
- _globals->_player.fixPriority(200);
- _globals->_player.setVisage(4052);
- _globals->_player.setStrip(5);
- _globals->_player.changeZoom(100);
- _globals->_player.setFrame(_globals->_player.getFrameCount());
- _globals->_player.setPosition(Common::Point(236, 130));
- _globals->_player.animate(ANIM_MODE_6, this);
+ g_globals->_player.fixPriority(200);
+ g_globals->_player.setVisage(4052);
+ g_globals->_player.setStrip(5);
+ g_globals->_player.changeZoom(100);
+ g_globals->_player.setFrame(g_globals->_player.getFrameCount());
+ g_globals->_player.setPosition(Common::Point(236, 130));
+ g_globals->_player.animate(ANIM_MODE_6, this);
break;
case 2:
- _globals->_player.setVisage(4202);
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player.setObjectWrapper(new SceneObjectWrapper());
- _globals->_player.setPosition(Common::Point(215, 130));
- ADD_MOVER(_globals->_player, 212, 130);
+ g_globals->_player.setVisage(4202);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.setObjectWrapper(new SceneObjectWrapper());
+ g_globals->_player.setPosition(Common::Point(215, 130));
+ ADD_MOVER(g_globals->_player, 212, 130);
break;
case 3:
- _globals->_stripNum = 4050;
- _globals->_sceneManager.changeScene(4000);
+ g_globals->_stripNum = 4050;
+ g_globals->_sceneManager.changeScene(4000);
break;
}
}
void Scene4050::Action4::signal() {
- Scene4050 *scene = (Scene4050 *)_globals->_sceneManager._scene;
+ Scene4050 *scene = (Scene4050 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
- ADD_MOVER(_globals->_player, 189, 135);
- _globals->_player.fixPriority(200);
+ g_globals->_player.disableControl();
+ ADD_MOVER(g_globals->_player, 189, 135);
+ g_globals->_player.fixPriority(200);
break;
case 1:
- _globals->_player._moveDiff.y = 3;
- _globals->_player.setStrip2(3);
- _globals->_player._frame = 1;
- _globals->_player.setPosition(Common::Point(189, 129));
- _globals->_player.animate(ANIM_MODE_5, this);
+ g_globals->_player._moveDiff.y = 3;
+ g_globals->_player.setStrip2(3);
+ g_globals->_player._frame = 1;
+ g_globals->_player.setPosition(Common::Point(189, 129));
+ g_globals->_player.animate(ANIM_MODE_5, this);
break;
case 2:
- _globals->_player.setVisage(4202);
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player.setObjectWrapper(new SceneObjectWrapper());
- _globals->_player.setPosition(Common::Point(192, 130));
- _globals->_player.changeZoom(100);
- ADD_MOVER(_globals->_player, 215, 130);
+ g_globals->_player.setVisage(4202);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.setObjectWrapper(new SceneObjectWrapper());
+ g_globals->_player.setPosition(Common::Point(192, 130));
+ g_globals->_player.changeZoom(100);
+ ADD_MOVER(g_globals->_player, 215, 130);
scene->_hotspot16.postInit();
scene->_hotspot16.setVisage(4052);
@@ -2155,18 +2157,18 @@ void Scene4050::Action4::signal() {
ADD_MOVER(scene->_hotspot16, 172, 188);
break;
case 3:
- _globals->_player.setVisage(4052);
- _globals->_player.setStrip(5);
- _globals->_player.setFrame(1);
- _globals->_player.setPosition(Common::Point(238, 130));
- _globals->_player.animate(ANIM_MODE_5, this);
+ g_globals->_player.setVisage(4052);
+ g_globals->_player.setStrip(5);
+ g_globals->_player.setFrame(1);
+ g_globals->_player.setPosition(Common::Point(238, 130));
+ g_globals->_player.animate(ANIM_MODE_5, this);
break;
case 4:
- _globals->_player.setVisage(4052);
- _globals->_player.setStrip(2);
- _globals->_player.setFrame(1);
- _globals->_player.setPosition(Common::Point(216, 184));
- _globals->_player.fixPriority(-1);
+ g_globals->_player.setVisage(4052);
+ g_globals->_player.setStrip(2);
+ g_globals->_player.setFrame(1);
+ g_globals->_player.setPosition(Common::Point(216, 184));
+ g_globals->_player.fixPriority(-1);
break;
case 5:
scene->_hotspot16.setStrip2(4);
@@ -2175,12 +2177,12 @@ void Scene4050::Action4::signal() {
break;
case 6:
scene->_hotspot16.animate(ANIM_MODE_5, NULL);
- _globals->_player.animate(ANIM_MODE_5, this);
+ g_globals->_player.animate(ANIM_MODE_5, this);
break;
case 7:
- _globals->_player.setVisage(4202);
- _globals->_player.setStrip(6);
- _globals->_player.setFrame(1);
+ g_globals->_player.setVisage(4202);
+ g_globals->_player.setStrip(6);
+ g_globals->_player.setFrame(1);
scene->_stripManager.start(4051, this);
break;
@@ -2188,7 +2190,7 @@ void Scene4050::Action4::signal() {
setDelay(15);
break;
case 9:
- _globals->_sceneManager.changeScene(4000);
+ g_globals->_sceneManager.changeScene(4000);
break;
}
}
@@ -2196,14 +2198,14 @@ void Scene4050::Action4::signal() {
/*--------------------------------------------------------------------------*/
void Scene4050::Hotspot15::doAction(int action) {
- Scene4050 *scene = (Scene4050 *)_globals->_sceneManager._scene;
+ Scene4050 *scene = (Scene4050 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(4050, 14);
break;
case CURSOR_USE:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
setAction(&scene->_action3);
break;
default:
@@ -2213,7 +2215,7 @@ void Scene4050::Hotspot15::doAction(int action) {
}
void Scene4050::Hotspot17::doAction(int action) {
- Scene4050 *scene = (Scene4050 *)_globals->_sceneManager._scene;
+ Scene4050 *scene = (Scene4050 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
@@ -2255,50 +2257,50 @@ void Scene4050::postInit(SceneObjectList *OwnerList) {
_stripManager.addSpeaker(&_speakerQText);
_stripManager.addSpeaker(&_speakerGameText);
- _globals->_player.postInit();
+ g_globals->_player.postInit();
- switch (_globals->_sceneManager._previousScene) {
+ switch (g_globals->_sceneManager._previousScene) {
case 4000:
- if (_globals->getFlag(41)) {
+ if (g_globals->getFlag(41)) {
// Using a rope
_hotspot15.postInit();
_hotspot15.setVisage(4054);
_hotspot15.setPosition(Common::Point(206, 103));
- _globals->_sceneItems.push_back(&_hotspot15);
+ g_globals->_sceneItems.push_back(&_hotspot15);
- _globals->_player.setVisage(4008);
- _globals->_player.setPosition(Common::Point(206, 62));
- _globals->_player.changeZoom(130);
- _globals->_player.fixPriority(200);
- _globals->_player.setStrip(2);
+ g_globals->_player.setVisage(4008);
+ g_globals->_player.setPosition(Common::Point(206, 62));
+ g_globals->_player.changeZoom(130);
+ g_globals->_player.fixPriority(200);
+ g_globals->_player.setStrip(2);
setAction(&_action2);
- _globals->_soundHandler.play(175);
+ g_globals->_soundHandler.play(175);
} else {
// Without the rope
- _globals->_player.setVisage(5315);
- _globals->_player.setPosition(Common::Point(189, 83));
- _globals->_player.changeZoom(130);
- _globals->_player.setStrip2(2);
- _globals->_player._moveDiff.y = 10;
- _globals->_player.animate(ANIM_MODE_2, NULL);
+ g_globals->_player.setVisage(5315);
+ g_globals->_player.setPosition(Common::Point(189, 83));
+ g_globals->_player.changeZoom(130);
+ g_globals->_player.setStrip2(2);
+ g_globals->_player._moveDiff.y = 10;
+ g_globals->_player.animate(ANIM_MODE_2, NULL);
setAction(&_action4);
- _globals->_soundHandler.play(176);
+ g_globals->_soundHandler.play(176);
}
break;
case 4045:
_hotspot15.postInit();
_hotspot15.setVisage(4054);
_hotspot15.setPosition(Common::Point(206, 103));
- _globals->_sceneItems.push_back(&_hotspot15);
+ g_globals->_sceneItems.push_back(&_hotspot15);
- _globals->_player.setVisage(4202);
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player.setObjectWrapper(new SceneObjectWrapper());
- _globals->_player.setPosition(Common::Point(193, 193));
+ g_globals->_player.setVisage(4202);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.setObjectWrapper(new SceneObjectWrapper());
+ g_globals->_player.setPosition(Common::Point(193, 193));
- _globals->_soundHandler.play(175);
+ g_globals->_soundHandler.play(175);
break;
default:
break;
@@ -2327,25 +2329,25 @@ void Scene4050::postInit(SceneObjectList *OwnerList) {
_hotspot11.setBounds(Rect(263, 105, 279, 147));
_hotspot12.setBounds(Rect(258, 154, 307, 180));
- _globals->_sceneItems.addItems(&_hotspot17, &_hotspot12, &_hotspot11, &_hotspot10, &_hotspot13,
+ g_globals->_sceneItems.addItems(&_hotspot17, &_hotspot12, &_hotspot11, &_hotspot10, &_hotspot13,
&_hotspot2, &_hotspot3, &_hotspot4, &_hotspot5, &_hotspot6, &_hotspot8, &_hotspot9,
&_hotspot7, &_hotspot1, NULL);
}
void Scene4050::signal() {
if (_sceneMode == 4050)
- _globals->_sceneManager.changeScene(4045);
+ g_globals->_sceneManager.changeScene(4045);
}
void Scene4050::dispatch() {
if (!_action) {
- if ((_globals->_player._canWalk) && (_globals->_player._position.y > 196)) {
+ if ((g_globals->_player._canWalk) && (g_globals->_player._position.y > 196)) {
_sceneMode = 4050;
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
Common::Point pt(160, 275);
NpcMover *mover = new NpcMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
}
}
Scene::dispatch();
@@ -2357,28 +2359,28 @@ void Scene4050::dispatch() {
*--------------------------------------------------------------------------*/
void Scene4100::Action1::signal() {
- Scene4100 *scene = (Scene4100 *)_globals->_sceneManager._scene;
+ Scene4100 *scene = (Scene4100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
setDelay(10);
break;
case 1:
- scene->_stripManager.start(_globals->_stripNum, this);
+ scene->_stripManager.start(g_globals->_stripNum, this);
break;
case 2:
setDelay(30);
break;
case 3:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
remove();
break;
}
}
void Scene4100::Action2::signal() {
- Scene4100 *scene = (Scene4100 *)_globals->_sceneManager._scene;
+ Scene4100 *scene = (Scene4100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -2409,12 +2411,12 @@ void Scene4100::Action2::signal() {
void Scene4100::Action3::signal() {
- Scene4100 *scene = (Scene4100 *)_globals->_sceneManager._scene;
+ Scene4100 *scene = (Scene4100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->clearFlag(43);
- _globals->setFlag(36);
+ g_globals->clearFlag(43);
+ g_globals->setFlag(36);
setDelay(15);
break;
case 1:
@@ -2430,7 +2432,7 @@ void Scene4100::Action3::signal() {
setDelay(15);
break;
case 5:
- _globals->_sceneManager.changeScene(4150);
+ g_globals->_sceneManager.changeScene(4150);
break;
default:
break;
@@ -2439,7 +2441,7 @@ void Scene4100::Action3::signal() {
void Scene4100::Action4::signal() {
// Rock getting drunk
- Scene4100 *scene = (Scene4100 *)_globals->_sceneManager._scene;
+ Scene4100 *scene = (Scene4100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -2454,26 +2456,26 @@ void Scene4100::Action4::signal() {
scene->_hotspot1.animate(ANIM_MODE_5, this);
break;
case 3:
- _globals->clearFlag(43);
- _globals->setFlag(42);
+ g_globals->clearFlag(43);
+ g_globals->setFlag(42);
scene->_stripManager.start(4119, this);
break;
case 4:
setDelay(15);
break;
case 5:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
remove();
break;
}
}
void Scene4100::Action5::signal() {
- Scene4100 *scene = (Scene4100 *)_globals->_sceneManager._scene;
+ Scene4100 *scene = (Scene4100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
ADD_PLAYER_MOVER(58, 151);
break;
case 1:
@@ -2486,10 +2488,10 @@ void Scene4100::Action5::signal() {
scene->_ladder.setPosition(Common::Point(49, 144));
RING_INVENTORY._ladder._sceneNumber = 4100;
- _globals->_sceneItems.push_front(&scene->_ladder);
+ g_globals->_sceneItems.push_front(&scene->_ladder);
}
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
remove();
break;
}
@@ -2497,16 +2499,16 @@ void Scene4100::Action5::signal() {
void Scene4100::Action6::signal() {
- Scene4100 *scene = (Scene4100 *)_globals->_sceneManager._scene;
+ Scene4100 *scene = (Scene4100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_stripManager.start(4103, this);
ADD_PLAYER_MOVER(245, 167);
break;
case 1:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
remove();
break;
}
@@ -2515,39 +2517,39 @@ void Scene4100::Action6::signal() {
/*--------------------------------------------------------------------------*/
void Scene4100::Hotspot1::doAction(int action) {
- Scene4100 *scene = (Scene4100 *)_globals->_sceneManager._scene;
+ Scene4100 *scene = (Scene4100 *)g_globals->_sceneManager._scene;
switch (action) {
case OBJECT_STUNNER:
SceneItem::display2(4100, 16);
break;
case OBJECT_ALE:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->setAction(&scene->_action3);
break;
case CURSOR_LOOK:
- SceneItem::display2(4100, _globals->getFlag(42) ? 24 : 12);
+ SceneItem::display2(4100, g_globals->getFlag(42) ? 24 : 12);
break;
case CURSOR_USE:
SceneItem::display2(4100, 22);
break;
case CURSOR_TALK:
if (RING_INVENTORY._peg._sceneNumber == 1) {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_sceneMode = 4109;
scene->setAction(&scene->_sequenceManager, scene, 4109, NULL);
- } else if (_globals->getFlag(42)) {
+ } else if (g_globals->getFlag(42)) {
scene->_sceneMode = 4102;
scene->setAction(&scene->_sequenceManager, scene, 4102, NULL);
} else {
- if (_globals->getFlag(33))
- _globals->_stripNum = 4077;
- else if (_globals->getFlag(82)) {
- _globals->clearFlag(82);
- _globals->_stripNum = 4100;
+ if (g_globals->getFlag(33))
+ g_globals->_stripNum = 4077;
+ else if (g_globals->getFlag(82)) {
+ g_globals->clearFlag(82);
+ g_globals->_stripNum = 4100;
} else {
- _globals->_stripNum = 4075;
- _globals->setFlag(33);
+ g_globals->_stripNum = 4075;
+ g_globals->setFlag(33);
}
scene->setAction(&scene->_action1);
@@ -2571,7 +2573,7 @@ void Scene4100::Hotspot2::doAction(int action) {
}
void Scene4100::Miranda::doAction(int action) {
- Scene4100 *scene = (Scene4100 *)_globals->_sceneManager._scene;
+ Scene4100 *scene = (Scene4100 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
@@ -2588,15 +2590,15 @@ void Scene4100::Miranda::doAction(int action) {
}
void Scene4100::Ladder::doAction(int action) {
- Scene4100 *scene = (Scene4100 *)_globals->_sceneManager._scene;
+ Scene4100 *scene = (Scene4100 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(4100, 2);
break;
case CURSOR_USE:
- if (_globals->getFlag(42)) {
- _globals->_player.disableControl();
+ if (g_globals->getFlag(42)) {
+ g_globals->_player.disableControl();
scene->setAction(&scene->_action5);
} else {
scene->_sceneMode = 4102;
@@ -2613,14 +2615,14 @@ void Scene4100::Ladder::doAction(int action) {
Exit hotspot, South
*/
void Scene4100::Hotspot14::doAction(int action) {
- Scene4100 *scene = (Scene4100 *)_globals->_sceneManager._scene;
+ Scene4100 *scene = (Scene4100 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(4100, 0);
break;
case OBJECT_LADDER:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->setAction(&scene->_action5);
break;
default:
@@ -2657,13 +2659,13 @@ void Scene4100::postInit(SceneObjectList *OwnerList) {
_stripManager.addSpeaker(&_speakerML);
_stripManager.addSpeaker(&_speakerQR);
- _globals->_player.postInit();
- _globals->_player.setVisage(4200);
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player.setStrip(4);
- _globals->_player.setObjectWrapper(new SceneObjectWrapper());
- _globals->_player.setPosition(Common::Point(88, 180));
- _globals->_player._moveDiff = Common::Point(7, 4);
+ g_globals->_player.postInit();
+ g_globals->_player.setVisage(4200);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.setStrip(4);
+ g_globals->_player.setObjectWrapper(new SceneObjectWrapper());
+ g_globals->_player.setPosition(Common::Point(88, 180));
+ g_globals->_player._moveDiff = Common::Point(7, 4);
_hotspot1.postInit();
_hotspot1.setVisage(4102);
@@ -2682,18 +2684,18 @@ void Scene4100::postInit(SceneObjectList *OwnerList) {
_hotspot4.setStrip2(2);
_hotspot4.setPosition(Common::Point(152, 167));
- if (_globals->getFlag(36)) {
+ if (g_globals->getFlag(36)) {
_hotspot1.setVisage(4105);
_hotspot1.setStrip(1);
_hotspot1.setFrame(4);
- } else if (!_globals->getFlag(43)) {
+ } else if (!g_globals->getFlag(43)) {
_miranda.postInit();
_miranda.setVisage(4102);
_miranda.setStrip2(3);
_miranda.setFrame(2);
_miranda.setPosition(Common::Point(65, 188));
- _globals->_sceneItems.push_back(&_miranda);
+ g_globals->_sceneItems.push_back(&_miranda);
}
if (RING_INVENTORY._ladder._sceneNumber == 4100) {
@@ -2701,7 +2703,7 @@ void Scene4100::postInit(SceneObjectList *OwnerList) {
_ladder.setVisage(4101);
_ladder.setPosition(Common::Point(49, 144));
- _globals->_sceneItems.push_back(&_ladder);
+ g_globals->_sceneItems.push_back(&_ladder);
}
_hotspot14.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT));
@@ -2713,41 +2715,41 @@ void Scene4100::postInit(SceneObjectList *OwnerList) {
_hotspot12.setBounds(Rect(229, 59, 256, 122));
_hotspot13.setBounds(Rect(255, 152, 286, 183));
- _globals->_sceneItems.addItems(&_hotspot3, &_hotspot1, &_hotspot13, &_hotspot12, &_hotspot4,
+ g_globals->_sceneItems.addItems(&_hotspot3, &_hotspot1, &_hotspot13, &_hotspot12, &_hotspot4,
&_hotspot11, &_hotspot9, &_hotspot7, &_hotspot10, &_hotspot8, &_hotspot14, NULL);
- if (_globals->_sceneManager._previousScene == 4150) {
- _globals->_soundHandler.play(155);
+ if (g_globals->_sceneManager._previousScene == 4150) {
+ g_globals->_soundHandler.play(155);
- if (!_globals->getFlag(42)) {
+ if (!g_globals->getFlag(42)) {
_hotspot1.setVisage(4104);
_hotspot1.setPosition(Common::Point(152, 118));
_hotspot1.setStrip2(-1);
_hotspot1.setFrame2(-1);
_hotspot1.setFrame(1);
- _globals->_player.setStrip(2);
- _globals->_player.disableControl();
+ g_globals->_player.setStrip(2);
+ g_globals->_player.disableControl();
setAction(&_action4);
- _globals->clearFlag(43);
+ g_globals->clearFlag(43);
} else {
// Workaround: In the original, the mouse is hidden when Quinn
// goes back to scene 4150 then to scene 4100. This enables everything.
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
}
- _globals->_player.setPosition(Common::Point(252, 139));
- _globals->_player.setStrip(2);
+ g_globals->_player.setPosition(Common::Point(252, 139));
+ g_globals->_player.setStrip(2);
} else {
- if ((RING_INVENTORY._ale._sceneNumber == 4100) && !_globals->getFlag(42)) {
- _globals->_player.disableControl();
+ if ((RING_INVENTORY._ale._sceneNumber == 4100) && !g_globals->getFlag(42)) {
+ g_globals->_player.disableControl();
setAction(&_action3);
}
- if (_globals->getFlag(35)) {
- _globals->_player.disableControl();
+ if (g_globals->getFlag(35)) {
+ g_globals->_player.disableControl();
_sceneMode = 4101;
- setAction(&_sequenceManager, this, 4101, &_globals->_player, NULL);
+ setAction(&_sequenceManager, this, 4101, &g_globals->_player, NULL);
}
}
}
@@ -2755,28 +2757,28 @@ void Scene4100::postInit(SceneObjectList *OwnerList) {
void Scene4100::signal() {
switch (_sceneMode) {
case 4101:
- _globals->_sceneManager.changeScene(4000);
+ g_globals->_sceneManager.changeScene(4000);
break;
case 4102:
case 4103:
case 4109:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
break;
}
}
void Scene4100::dispatch() {
if (!_action) {
- if ((_globals->_player.getRegionIndex() == 15) && !_globals->getFlag(42))
+ if ((g_globals->_player.getRegionIndex() == 15) && !g_globals->getFlag(42))
setAction(&_action6);
- if (_globals->_player.getRegionIndex() == 8)
- _globals->_sceneManager.changeScene(4150);
+ if (g_globals->_player.getRegionIndex() == 8)
+ g_globals->_sceneManager.changeScene(4150);
- if (_globals->_player._position.y >= 196) {
- _globals->_player.disableControl();
+ if (g_globals->_player._position.y >= 196) {
+ g_globals->_player.disableControl();
_sceneMode = 4101;
- setAction(&_sequenceManager, this, 4105, &_globals->_player, NULL);
+ setAction(&_sequenceManager, this, 4105, &g_globals->_player, NULL);
}
}
@@ -2789,7 +2791,7 @@ void Scene4100::dispatch() {
*--------------------------------------------------------------------------*/
void Scene4150::Action1::signal() {
- Scene4150 *scene = (Scene4150 *)_globals->_sceneManager._scene;
+ Scene4150 *scene = (Scene4150 *)g_globals->_sceneManager._scene;
byte adjustData[4] = {0, 0, 0, 0};
switch (_actionIndex++) {
@@ -2807,7 +2809,7 @@ void Scene4150::Action1::signal() {
break;
case 4: {
for (int idx = 100; idx >= 0; idx -= 5) {
- _globals->_scenePalette.fade(adjustData, false, idx);
+ g_globals->_scenePalette.fade(adjustData, false, idx);
g_system->updateScreen();
g_system->delayMillis(10);
}
@@ -2826,8 +2828,8 @@ void Scene4150::Action1::signal() {
break;
}
case 5:
- _globals->_scenePalette.loadPalette(4150);
- _globals->_scenePalette.refresh();
+ g_globals->_scenePalette.loadPalette(4150);
+ g_globals->_scenePalette.refresh();
setDelay(60);
break;
case 6:
@@ -2835,7 +2837,7 @@ void Scene4150::Action1::signal() {
break;
case 7:
for (int idx = 100; idx >= 0; idx -= 5) {
- _globals->_scenePalette.fade(adjustData, false, idx);
+ g_globals->_scenePalette.fade(adjustData, false, idx);
g_system->updateScreen();
g_system->delayMillis(10);
}
@@ -2847,28 +2849,28 @@ void Scene4150::Action1::signal() {
scene->_hotspot1.setFrame(1);
scene->_hotspot1.show();
- _globals->_player.setVisage(4200);
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player.setStrip(3);
- _globals->_player.setPosition(Common::Point(139, 166));
- _globals->_player._moveDiff = Common::Point(7, 3);
- _globals->_player.show();
+ g_globals->_player.setVisage(4200);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.setStrip(3);
+ g_globals->_player.setPosition(Common::Point(139, 166));
+ g_globals->_player._moveDiff = Common::Point(7, 3);
+ g_globals->_player.show();
setDelay(120);
break;
case 8:
- _globals->_scenePalette.loadPalette(4150);
- _globals->_scenePalette.refresh();
+ g_globals->_scenePalette.loadPalette(4150);
+ g_globals->_scenePalette.refresh();
setDelay(30);
break;
case 9:
scene->_stripManager.start(4523, this);
break;
case 10:
- _globals->_player.setObjectWrapper(new SceneObjectWrapper());
- _globals->_player._moveDiff = Common::Point(7, 4);
- _globals->_player.setStrip(3);
- _globals->_player.enableControl();
+ g_globals->_player.setObjectWrapper(new SceneObjectWrapper());
+ g_globals->_player._moveDiff = Common::Point(7, 4);
+ g_globals->_player.setStrip(3);
+ g_globals->_player.enableControl();
remove();
break;
@@ -2876,7 +2878,7 @@ void Scene4150::Action1::signal() {
}
void Scene4150::Action2::signal() {
- Scene4150 *scene = (Scene4150 *)_globals->_sceneManager._scene;
+ Scene4150 *scene = (Scene4150 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -2888,10 +2890,10 @@ void Scene4150::Action2::signal() {
scene->_hotspot1.setFrame(1);
scene->_hotspot1.animate(ANIM_MODE_5, this);
- _globals->_player.animate(ANIM_MODE_5, NULL);
+ g_globals->_player.animate(ANIM_MODE_5, NULL);
break;
case 2:
- _globals->_player.hide();
+ g_globals->_player.hide();
scene->_hotspot1.setVisage(4153);
scene->_hotspot1.setStrip(1);
scene->_hotspot1.setFrame(1);
@@ -2904,15 +2906,15 @@ void Scene4150::Action2::signal() {
}
void Scene4150::Action3::signal() {
- Scene4150 *scene = (Scene4150 *)_globals->_sceneManager._scene;
+ Scene4150 *scene = (Scene4150 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
setDelay(15);
break;
case 1:
- _globals->_player.checkAngle(&scene->_hotspot3);
+ g_globals->_player.checkAngle(&scene->_hotspot3);
if (RING_INVENTORY._rope._sceneNumber == 1) {
scene->_hotspot3.postInit();
@@ -2920,13 +2922,13 @@ void Scene4150::Action3::signal() {
scene->_hotspot3.setPosition(Common::Point(175, 70));
RING_INVENTORY._rope._sceneNumber = 4150;
- _globals->_sceneItems.push_front(&scene->_hotspot3);
+ g_globals->_sceneItems.push_front(&scene->_hotspot3);
} else {
RING_INVENTORY._rope._sceneNumber = 1;
scene->_hotspot3.remove();
}
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
remove();
break;
}
@@ -2935,7 +2937,7 @@ void Scene4150::Action3::signal() {
/*--------------------------------------------------------------------------*/
void Scene4150::HotspotGroup1::doAction(int action) {
- Scene4150 *scene = (Scene4150 *)_globals->_sceneManager._scene;
+ Scene4150 *scene = (Scene4150 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
@@ -2950,8 +2952,8 @@ void Scene4150::HotspotGroup1::doAction(int action) {
void Scene4150::HotspotGroup3::doAction(int action) {
switch (action) {
case CURSOR_LOOK:
- SceneItem::display2(4150, _globals->getFlag(46) ? 9 : 8);
- _globals->setFlag(46);
+ SceneItem::display2(4150, g_globals->getFlag(46) ? 9 : 8);
+ g_globals->setFlag(46);
break;
case CURSOR_USE:
SceneItem::display2(4150, 30);
@@ -2962,8 +2964,8 @@ void Scene4150::HotspotGroup3::doAction(int action) {
void Scene4150::HotspotGroup6::doAction(int action) {
switch (action) {
case CURSOR_LOOK:
- SceneItem::display2(4150, _globals->getFlag(47) ? 16 : 15);
- _globals->setFlag(47);
+ SceneItem::display2(4150, g_globals->getFlag(47) ? 16 : 15);
+ g_globals->setFlag(47);
break;
case CURSOR_USE:
SceneItem::display2(4150, 31);
@@ -2972,7 +2974,7 @@ void Scene4150::HotspotGroup6::doAction(int action) {
}
void Scene4150::Hotspot3::doAction(int action) {
- Scene4150 *scene = (Scene4150 *)_globals->_sceneManager._scene;
+ Scene4150 *scene = (Scene4150 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
@@ -3029,31 +3031,31 @@ void Scene4150::postInit(SceneObjectList *OwnerList) {
_hotspot1.postInit();
_hotspot1.setPosition(Common::Point(177, 201));
- if (_globals->getFlag(44)) {
- _globals->_player.postInit();
- _globals->_player.setVisage(4200);
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player.setObjectWrapper(new SceneObjectWrapper());
- _globals->_player.setStrip(2);
- _globals->_player.setPosition(Common::Point(328, 160));
- _globals->_player._moveDiff = Common::Point(7, 4);
- _globals->_player.disableControl();
+ if (g_globals->getFlag(44)) {
+ g_globals->_player.postInit();
+ g_globals->_player.setVisage(4200);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.setObjectWrapper(new SceneObjectWrapper());
+ g_globals->_player.setStrip(2);
+ g_globals->_player.setPosition(Common::Point(328, 160));
+ g_globals->_player._moveDiff = Common::Point(7, 4);
+ g_globals->_player.disableControl();
_sceneMode = 4151;
- setAction(&_sequenceManager, this, 4151, &_globals->_player, NULL);
+ setAction(&_sequenceManager, this, 4151, &g_globals->_player, NULL);
_hotspot1.setVisage(4157);
_hotspot1.setPosition(Common::Point(177, 201));
} else {
- _globals->_player.postInit();
- _globals->_player.setVisage(4154);
- _globals->_player._canWalk = false;
- _globals->_player.setPosition(Common::Point(198, 202));
- _globals->_player.disableControl();
+ g_globals->_player.postInit();
+ g_globals->_player.setVisage(4154);
+ g_globals->_player._canWalk = false;
+ g_globals->_player.setPosition(Common::Point(198, 202));
+ g_globals->_player.disableControl();
_hotspot1.setVisage(4152);
setAction(&_action1);
- _globals->setFlag(44);
+ g_globals->setFlag(44);
}
if (RING_INVENTORY._rope._sceneNumber == 4150) {
@@ -3061,10 +3063,10 @@ void Scene4150::postInit(SceneObjectList *OwnerList) {
_hotspot3.setVisage(4150);
_hotspot3.setPosition(Common::Point(175, 70));
- _globals->_sceneItems.push_back(&_hotspot3);
+ g_globals->_sceneItems.push_back(&_hotspot3);
}
- _globals->_sceneItems.push_back(&_hotspot1);
+ g_globals->_sceneItems.push_back(&_hotspot1);
_hotspot5.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT));
_hotspot6.setBounds(Rect(28, 121, 80, 148));
@@ -3089,32 +3091,32 @@ void Scene4150::postInit(SceneObjectList *OwnerList) {
_hotspot25.setBounds(Rect(183, 155, 316, 190));
_hotspot26.setBounds(Rect(98, 169, 238, 198));
- _globals->_sceneItems.addItems(&_hotspot24, &_hotspot23, &_hotspot13, &_hotspot25,
+ g_globals->_sceneItems.addItems(&_hotspot24, &_hotspot23, &_hotspot13, &_hotspot25,
&_hotspot26, &_hotspot19, &_hotspot22, &_hotspot20, &_hotspot17, &_hotspot16,
&_hotspot15, &_hotspot11, &_hotspot14, &_hotspot18, &_hotspot21, &_hotspot12,
&_hotspot10, &_hotspot9, &_hotspot8, &_hotspot7, &_hotspot6, &_hotspot2,
&_hotspot5, NULL);
- _globals->_soundHandler.play(165);
+ g_globals->_soundHandler.play(165);
_soundHandler.play(311);
}
void Scene4150::signal() {
if (_sceneMode == 4151)
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
else if (_sceneMode == 4152)
- _globals->_sceneManager.changeScene(4100);
+ g_globals->_sceneManager.changeScene(4100);
}
void Scene4150::dispatch() {
Scene::dispatch();
- if (!_action && (_globals->_player._position.x >= 316)) {
- _globals->_soundHandler.fadeOut(NULL);
+ if (!_action && (g_globals->_player._position.x >= 316)) {
+ g_globals->_soundHandler.fadeOut(NULL);
_soundHandler.fadeOut(NULL);
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
_sceneMode = 4152;
- setAction(&_sequenceManager, this, 4152, &_globals->_player, NULL);
+ setAction(&_sequenceManager, this, 4152, &g_globals->_player, NULL);
}
}
@@ -3124,15 +3126,15 @@ void Scene4150::dispatch() {
*--------------------------------------------------------------------------*/
void Scene4250::Action1::signal() {
- Scene4250 *scene = (Scene4250 *)_globals->_sceneManager._scene;
+ Scene4250 *scene = (Scene4250 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
setDelay(3);
break;
case 1:
- ADD_MOVER_NULL(_globals->_player, 6, 190);
+ ADD_MOVER_NULL(g_globals->_player, 6, 190);
ADD_MOVER_NULL(scene->_hotspot3, 9, 195);
ADD_MOVER(scene->_hotspot1, 12, 185);
break;
@@ -3155,44 +3157,44 @@ void Scene4250::Action1::signal() {
scene->_stripManager.start(4470, this);
break;
case 8:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
remove();
break;
}
}
void Scene4250::Action2::signal() {
- Scene4250 *scene = (Scene4250 *)_globals->_sceneManager._scene;
+ Scene4250 *scene = (Scene4250 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
ADD_PLAYER_MOVER(247, 182);
break;
case 1:
- _globals->_player.setVisage(2670);
- _globals->_player.changeZoom(50);
- _globals->_player.setStrip(3);
- _globals->_player.setFrame(1);
- _globals->_player.animate(ANIM_MODE_5, this);
+ g_globals->_player.setVisage(2670);
+ g_globals->_player.changeZoom(50);
+ g_globals->_player.setStrip(3);
+ g_globals->_player.setFrame(1);
+ g_globals->_player.animate(ANIM_MODE_5, this);
break;
case 2:
- if ((_globals->_stripNum == 9000) || (_globals->_stripNum == 4300)) {
+ if ((g_globals->_stripNum == 9000) || (g_globals->_stripNum == 4300)) {
scene->_stripManager.start(4205, this);
} else {
scene->_stripManager.start(4490, this);
}
break;
case 3:
- _globals->_player.animate(ANIM_MODE_6, this);
+ g_globals->_player.animate(ANIM_MODE_6, this);
break;
case 4:
- _globals->_player.setVisage(2602);
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player.changeZoom(70);
+ g_globals->_player.setVisage(2602);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.changeZoom(70);
- if ((_globals->_stripNum == 9000) || (_globals->_stripNum == 4300)) {
- _globals->_player.enableControl();
+ if ((g_globals->_stripNum == 9000) || (g_globals->_stripNum == 4300)) {
+ g_globals->_player.enableControl();
remove();
} else {
ADD_PLAYER_MOVER(6, 180);
@@ -3206,19 +3208,19 @@ void Scene4250::Action2::signal() {
ADD_MOVER_NULL(scene->_hotspot5, -30, 195);
break;
case 6:
- _globals->clearFlag(59);
- _globals->clearFlag(70);
- _globals->clearFlag(37);
- _globals->clearFlag(114);
- _globals->clearFlag(36);
- _globals->clearFlag(43);
- _globals->_sceneManager.changeScene(2100);
+ g_globals->clearFlag(59);
+ g_globals->clearFlag(70);
+ g_globals->clearFlag(37);
+ g_globals->clearFlag(114);
+ g_globals->clearFlag(36);
+ g_globals->clearFlag(43);
+ g_globals->_sceneManager.changeScene(2100);
break;
}
}
void Scene4250::Action3::signal() {
- Scene4250 *scene = (Scene4250 *)_globals->_sceneManager._scene;
+ Scene4250 *scene = (Scene4250 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -3228,46 +3230,46 @@ void Scene4250::Action3::signal() {
scene->_stripManager.start(4480, this);
break;
case 2:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
remove();
break;
}
}
void Scene4250::Action4::signal() {
- Scene4250 *scene = (Scene4250 *)_globals->_sceneManager._scene;
+ Scene4250 *scene = (Scene4250 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
setDelay(3);
break;
case 1:
- _globals->_player.addMover(NULL);
+ g_globals->_player.addMover(NULL);
scene->_stripManager.start((RING_INVENTORY._helmet._sceneNumber == 4250) ? 4259 : 4256, this);
break;
case 2:
- ADD_PLAYER_MOVER(_globals->_player._position.x + 5, _globals->_player._position.y);
+ ADD_PLAYER_MOVER(g_globals->_player._position.x + 5, g_globals->_player._position.y);
break;
case 3:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
remove();
break;
}
}
void Scene4250::Action5::signal() {
- Scene4250 *scene = (Scene4250 *)_globals->_sceneManager._scene;
+ Scene4250 *scene = (Scene4250 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
setDelay(3);
break;
case 1:
scene->_hotspot4.fixPriority(195);
scene->_hotspot1.fixPriority(105);
- ADD_MOVER_NULL(_globals->_player, 6, 185);
+ ADD_MOVER_NULL(g_globals->_player, 6, 185);
ADD_MOVER_NULL(scene->_hotspot4, 9, 190);
ADD_MOVER(scene->_hotspot1, 12, 180);
break;
@@ -3280,7 +3282,7 @@ void Scene4250::Action5::signal() {
scene->_hotspot4.fixPriority(-1);
scene->_hotspot1.setStrip(5);
scene->_hotspot4.setStrip(7);
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
remove();
break;
}
@@ -3289,15 +3291,15 @@ void Scene4250::Action5::signal() {
/*--------------------------------------------------------------------------*/
void Scene4250::Hotspot1::doAction(int action) {
- Scene4250 *scene = (Scene4250 *)_globals->_sceneManager._scene;
+ Scene4250 *scene = (Scene4250 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(4250, (RING_INVENTORY._helmet._sceneNumber == 4250) ? 19 : 14);
break;
case CURSOR_TALK:
- _globals->_player.disableControl();
- if (!_globals->_sceneObjects->contains(&scene->_hotspot4)) {
+ g_globals->_player.disableControl();
+ if (!g_globals->_sceneObjects->contains(&scene->_hotspot4)) {
scene->setAction(&scene->_action3);
} else {
scene->_sceneMode = 4260;
@@ -3306,7 +3308,7 @@ void Scene4250::Hotspot1::doAction(int action) {
scene->setAction(&scene->_sequenceManager, scene, 4265, this, NULL);
} else {
scene->setAction(&scene->_sequenceManager, scene,
- _globals->_sceneObjects->contains(&scene->_hotspot6) ? 4260 : 4262, this, NULL);
+ g_globals->_sceneObjects->contains(&scene->_hotspot6) ? 4260 : 4262, this, NULL);
}
}
break;
@@ -3330,7 +3332,7 @@ void Scene4250::Hotspot1::doAction(int action) {
void Scene4250::Hotspot2::doAction(int action) {
//Ship with stasis field
- Scene4250 *scene = (Scene4250 *)_globals->_sceneManager._scene;
+ Scene4250 *scene = (Scene4250 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
@@ -3338,19 +3340,19 @@ void Scene4250::Hotspot2::doAction(int action) {
SceneItem::display2(4250, 16);
break;
case OBJECT_SCANNER:
- if ((_globals->_stripNum == 9000) || (_globals->_stripNum == 4300))
+ if ((g_globals->_stripNum == 9000) || (g_globals->_stripNum == 4300))
scene->setAction(&scene->_action2);
- else if (_globals->getFlag(55))
+ else if (g_globals->getFlag(55))
SceneItem::display2(4250, 17);
else {
- _globals->setFlag(55);
+ g_globals->setFlag(55);
scene->setAction(&scene->_action2);
}
break;
case OBJECT_STASIS_NEGATOR:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_sceneMode = 4252;
- scene->setAction(&scene->_sequenceManager, scene, 4252, &_globals->_player, this, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 4252, &g_globals->_player, this, NULL);
break;
default:
SceneHotspot::doAction(action);
@@ -3359,7 +3361,7 @@ void Scene4250::Hotspot2::doAction(int action) {
}
void Scene4250::Hotspot4::doAction(int action) {
- Scene4250 *scene = (Scene4250 *)_globals->_sceneManager._scene;
+ Scene4250 *scene = (Scene4250 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
@@ -3378,8 +3380,8 @@ void Scene4250::Hotspot4::doAction(int action) {
SceneHotspot::doAction(action);
break;
case CURSOR_TALK:
- _globals->_player.disableControl();
- if (!_globals->_sceneObjects->contains(&scene->_hotspot6)) {
+ g_globals->_player.disableControl();
+ if (!g_globals->_sceneObjects->contains(&scene->_hotspot6)) {
scene->_sceneMode = 4254;
scene->setAction(&scene->_sequenceManager, scene, 4263, NULL);
} else {
@@ -3401,7 +3403,7 @@ void Scene4250::Hotspot4::doAction(int action) {
}
void Scene4250::Hotspot6::doAction(int action) {
- Scene4250 *scene = (Scene4250 *)_globals->_sceneManager._scene;
+ Scene4250 *scene = (Scene4250 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
@@ -3414,17 +3416,17 @@ void Scene4250::Hotspot6::doAction(int action) {
SceneItem::display2(4250, (RING_INVENTORY._helmet._sceneNumber == 4250) ? 20 : 3);
break;
case OBJECT_HELMET:
- _globals->_soundHandler.play(354);
- _globals->_player.disableControl();
+ g_globals->_soundHandler.play(354);
+ g_globals->_player.disableControl();
RING_INVENTORY._helmet._sceneNumber = 4250;
if (RING_INVENTORY._concentrator._sceneNumber == 1) {
- if (_globals->getFlag(115)) {
+ if (g_globals->getFlag(115)) {
scene->_sceneMode = 4269;
scene->setAction(&scene->_sequenceManager, scene, 4269, this, NULL);
} else {
- _globals->setFlag(115);
- _globals->_events.setCursor(CURSOR_WALK);
+ g_globals->setFlag(115);
+ g_globals->_events.setCursor(CURSOR_WALK);
scene->_sceneMode = 4256;
scene->setAction(&scene->_sequenceManager, scene, 4256, this, NULL);
}
@@ -3435,20 +3437,20 @@ void Scene4250::Hotspot6::doAction(int action) {
scene->_sceneMode = 4268;
scene->setAction(&scene->_sequenceManager, scene, 4268, this, NULL);
} else {
- _globals->_events.setCursor(CURSOR_WALK);
+ g_globals->_events.setCursor(CURSOR_WALK);
ADD_MOVER_NULL(scene->_hotspot1, 241, 169);
scene->_sceneMode = 4261;
- scene->setAction(&scene->_sequenceManager, scene, 4261, &_globals->_player, this, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 4261, &g_globals->_player, this, NULL);
}
break;
case OBJECT_NULLIFIER:
if (RING_INVENTORY._helmet._sceneNumber == 4250) {
- _globals->_soundHandler.play(353);
- _globals->_player.disableControl();
+ g_globals->_soundHandler.play(353);
+ g_globals->_player.disableControl();
RING_INVENTORY._helmet._sceneNumber = 1;
scene->_sceneMode = 4257;
- scene->setAction(&scene->_sequenceManager, scene, 4257, &_globals->_player, this, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 4257, &g_globals->_player, this, NULL);
} else {
SceneItem::display2(4250, 4);
}
@@ -3457,7 +3459,7 @@ void Scene4250::Hotspot6::doAction(int action) {
if (RING_INVENTORY._helmet._sceneNumber == 4250)
doAction(OBJECT_HELMET);
else {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_sceneMode = 4264;
scene->setAction(&scene->_sequenceManager, scene, 4264, this, NULL);
}
@@ -3466,7 +3468,7 @@ void Scene4250::Hotspot6::doAction(int action) {
if (RING_INVENTORY._helmet._sceneNumber == 4250)
doAction(OBJECT_HELMET);
else {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
if ((RING_INVENTORY._items._sceneNumber != 1) || (RING_INVENTORY._concentrator._sceneNumber != 1)) {
scene->_sceneMode = 4258;
scene->setAction(&scene->_sequenceManager, scene, 4258, this, NULL);
@@ -3478,7 +3480,7 @@ void Scene4250::Hotspot6::doAction(int action) {
scene->_hotspot2.hide();
scene->_sceneMode = 4259;
- scene->setAction(&scene->_sequenceManager, scene, 4259, &_globals->_player, this, &scene->_hotspot2, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 4259, &g_globals->_player, this, &scene->_hotspot2, NULL);
}
}
break;
@@ -3489,12 +3491,12 @@ void Scene4250::Hotspot6::doAction(int action) {
}
void Scene4250::Hotspot8::doAction(int action) {
- Scene4250 *scene = (Scene4250 *)_globals->_sceneManager._scene;
+ Scene4250 *scene = (Scene4250 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
case CURSOR_USE:
- _globals->_sceneManager.changeScene(4300);
+ g_globals->_sceneManager.changeScene(4300);
break;
case OBJECT_SCANNER:
SceneItem::display2(4250, 24);
@@ -3503,7 +3505,7 @@ void Scene4250::Hotspot8::doAction(int action) {
SceneItem::display2(4250, 25);
break;
case OBJECT_STASIS_NEGATOR:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_sceneMode = 4270;
scene->setAction(&scene->_sequenceManager, scene,
(RING_INVENTORY._helmet._sceneNumber == 4250) ? 4270 : 4271, NULL);
@@ -3520,7 +3522,7 @@ Scene4250::Scene4250() :
_hotspot7(0, CURSOR_LOOK, 4250, 0, LIST_END) {
}
-void Scene4250::postInit(tSage::SceneObjectList *OwnerList) {
+void Scene4250::postInit(TsAGE::SceneObjectList *OwnerList) {
loadScene(4250);
Scene::postInit();
setZoomPercents(160, 90, 185, 100);
@@ -3540,13 +3542,13 @@ void Scene4250::postInit(tSage::SceneObjectList *OwnerList) {
_speakerPText.setTextPos(Common::Point(40, 100));
_hotspot8._sceneRegionId = 16;
- _globals->_player.postInit();
- _globals->_player.setVisage(2602);
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player.setObjectWrapper(new SceneObjectWrapper());
- _globals->_player.setPosition(Common::Point(-13, 190));
- _globals->_player.changeZoom(-1);
- _globals->_player._moveDiff = Common::Point(4, 1);
+ g_globals->_player.postInit();
+ g_globals->_player.setVisage(2602);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.setObjectWrapper(new SceneObjectWrapper());
+ g_globals->_player.setPosition(Common::Point(-13, 190));
+ g_globals->_player.changeZoom(-1);
+ g_globals->_player._moveDiff = Common::Point(4, 1);
_hotspot1.postInit();
_hotspot1.setVisage(2801);
@@ -3555,9 +3557,9 @@ void Scene4250::postInit(tSage::SceneObjectList *OwnerList) {
_hotspot1.setPosition(Common::Point(-18, 185));
_hotspot1.changeZoom(-1);
_hotspot1._moveDiff = Common::Point(4, 1);
- _globals->_sceneItems.push_back(&_hotspot1);
+ g_globals->_sceneItems.push_back(&_hotspot1);
- if (_globals->_sceneManager._previousScene == 4300) {
+ if (g_globals->_sceneManager._previousScene == 4300) {
_hotspot5.postInit();
_hotspot5.setVisage(4250);
_hotspot5.setPosition(Common::Point(268, 168));
@@ -3571,13 +3573,13 @@ void Scene4250::postInit(tSage::SceneObjectList *OwnerList) {
_hotspot4.setStrip(2);
_hotspot4._moveDiff = Common::Point(4, 1);
_hotspot4.changeZoom(70);
- _globals->_sceneItems.push_back(&_hotspot4);
+ g_globals->_sceneItems.push_back(&_hotspot4);
_hotspot1.setPosition(Common::Point(197, 173));
_hotspot1.changeZoom(70);
- _globals->_player.setPosition(Common::Point(252, 176));
- _globals->_player.changeZoom(70);
+ g_globals->_player.setPosition(Common::Point(252, 176));
+ g_globals->_player.changeZoom(70);
_hotspot6.postInit();
_hotspot6.setVisage(4302);
@@ -3592,32 +3594,32 @@ void Scene4250::postInit(tSage::SceneObjectList *OwnerList) {
_hotspot6.setFrame(_hotspot6.getFrameCount());
}
- if (_globals->getFlag(98)) {
- _globals->_sceneItems.push_front(&_hotspot6);
+ if (g_globals->getFlag(98)) {
+ g_globals->_sceneItems.push_front(&_hotspot6);
} else {
_hotspot6.hide();
- if ((_globals->_stripNum == 4300) || (_globals->_stripNum == 4301)) {
- _globals->setFlag(98);
- _globals->_player.setVisage(4302);
- _globals->_player.setStrip(5);
- _globals->_player.changeZoom(50);
- _globals->_player.disableControl();
+ if ((g_globals->_stripNum == 4300) || (g_globals->_stripNum == 4301)) {
+ g_globals->setFlag(98);
+ g_globals->_player.setVisage(4302);
+ g_globals->_player.setStrip(5);
+ g_globals->_player.changeZoom(50);
+ g_globals->_player.disableControl();
_hotspot4.setPosition(Common::Point(239, 195));
_sceneMode = 4253;
- _globals->_sceneItems.push_front(&_hotspot6);
+ g_globals->_sceneItems.push_front(&_hotspot6);
- setAction(&_sequenceManager, this, 4253, &_globals->_player, &_hotspot6, &_hotspot4, NULL);
+ setAction(&_sequenceManager, this, 4253, &g_globals->_player, &_hotspot6, &_hotspot4, NULL);
}
}
- } else if (_globals->_stripNum == 9000) {
+ } else if (g_globals->_stripNum == 9000) {
_hotspot4.postInit();
_hotspot4.setVisage(2701);
_hotspot4.animate(ANIM_MODE_1, NULL);
_hotspot4.setObjectWrapper(new SceneObjectWrapper());
_hotspot4.setPosition(Common::Point(-15, 195));
_hotspot4._moveDiff = Common::Point(4, 1);
- _globals->_sceneItems.push_back(&_hotspot4);
+ g_globals->_sceneItems.push_back(&_hotspot4);
setAction(&_action5);
} else {
@@ -3630,13 +3632,13 @@ void Scene4250::postInit(tSage::SceneObjectList *OwnerList) {
_hotspot3._moveDiff = Common::Point(4, 1);
setAction(&_action1);
- _globals->clearFlag(43);
- _globals->clearFlag(114);
- _globals->clearFlag(36);
+ g_globals->clearFlag(43);
+ g_globals->clearFlag(114);
+ g_globals->clearFlag(36);
}
- if (_globals->getFlag(17)) {
- _globals->_sceneItems.push_back(&_hotspot8);
+ if (g_globals->getFlag(17)) {
+ g_globals->_sceneItems.push_back(&_hotspot8);
} else {
_hotspot2.postInit();
_hotspot2.setVisage(4251);
@@ -3645,27 +3647,27 @@ void Scene4250::postInit(tSage::SceneObjectList *OwnerList) {
_hotspot2.setFrame(1);
_hotspot2.setPosition(Common::Point(267, 172));
- _globals->_sceneItems.push_back(&_hotspot2);
+ g_globals->_sceneItems.push_back(&_hotspot2);
}
_hotspot7.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT));
- _globals->_sceneItems.push_back(&_hotspot7);
- _globals->_soundHandler.play(185);
+ g_globals->_sceneItems.push_back(&_hotspot7);
+ g_globals->_soundHandler.play(185);
}
void Scene4250::signal() {
switch (_sceneMode) {
case 4252:
- _globals->setFlag(17);
- _globals->_sceneManager.changeScene(4301);
+ g_globals->setFlag(17);
+ g_globals->_sceneManager.changeScene(4301);
break;
case 4253:
- if (_globals->_stripNum == 4301) {
+ if (g_globals->_stripNum == 4301) {
_sceneMode = 4261;
ADD_MOVER_NULL(_hotspot1, 241, 169);
- setAction(&_sequenceManager, this, 4261, &_globals->_player, &_hotspot6, NULL);
+ setAction(&_sequenceManager, this, 4261, &g_globals->_player, &_hotspot6, NULL);
} else {
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
}
break;
case 4254:
@@ -3680,15 +3682,15 @@ void Scene4250::signal() {
case 4268:
case 4269:
case 4270:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
break;
case 4259:
- _globals->_soundHandler.play(360);
- _globals->_sceneManager.changeScene(9900);
+ g_globals->_soundHandler.play(360);
+ g_globals->_sceneManager.changeScene(9900);
break;
case 4261:
RING_INVENTORY._keyDevice._sceneNumber = 1;
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
break;
case 4255:
case 4262:
@@ -3699,13 +3701,13 @@ void Scene4250::signal() {
}
void Scene4250::dispatch() {
- if (_globals->_player.getRegionIndex() == 8)
- _globals->_player.changeZoom(90 - (_globals->_player._position.y - 153));
- if (_globals->_player.getRegionIndex() == 12)
- _globals->_player.changeZoom(70);
- if (_globals->_player.getRegionIndex() == 15) {
- _globals->_player.changeZoom(-1);
- _globals->_player.fixPriority(-1);
+ if (g_globals->_player.getRegionIndex() == 8)
+ g_globals->_player.changeZoom(90 - (g_globals->_player._position.y - 153));
+ if (g_globals->_player.getRegionIndex() == 12)
+ g_globals->_player.changeZoom(70);
+ if (g_globals->_player.getRegionIndex() == 15) {
+ g_globals->_player.changeZoom(-1);
+ g_globals->_player.fixPriority(-1);
}
if (_hotspot1.getRegionIndex() == 8)
@@ -3729,11 +3731,11 @@ void Scene4250::dispatch() {
Scene::dispatch();
if (!_action) {
- if (!_globals->getFlag(55) && (_globals->_player.getRegionIndex() == 12)) {
+ if (!g_globals->getFlag(55) && (g_globals->_player.getRegionIndex() == 12)) {
setAction(&_action4);
}
- if (_globals->_sceneObjects->contains(&_hotspot6) && (_globals->_player.getRegionIndex() == 12))
+ if (g_globals->_sceneObjects->contains(&_hotspot6) && (g_globals->_player.getRegionIndex() == 12))
setAction(&_action4);
}
}
@@ -3744,17 +3746,17 @@ void Scene4250::dispatch() {
*--------------------------------------------------------------------------*/
void Scene4300::Action1::signal() {
- Scene4300 *scene = (Scene4300 *)_globals->_sceneManager._scene;
+ Scene4300 *scene = (Scene4300 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->setFlag(56);
- _globals->_scenePalette.addRotation(240, 254, -1);
+ g_globals->setFlag(56);
+ g_globals->_scenePalette.addRotation(240, 254, -1);
scene->_hotspot7.animate(ANIM_MODE_6, this);
- _globals->_soundHandler.play(164);
+ g_globals->_soundHandler.play(164);
break;
case 1:
- _globals->_soundHandler.play(340);
+ g_globals->_soundHandler.play(340);
scene->_soundHandler1.play(341);
scene->_hotspot1.remove();
setDelay(3);
@@ -3793,10 +3795,10 @@ void Scene4300::Action1::signal() {
scene->_stripManager.start(8015, this, scene);
break;
case 9:
- _globals->_soundHandler.play(350);
- _globals->_sceneManager._fadeMode = FADEMODE_GRADUAL;
- _globals->_events.setCursor(CURSOR_USE);
- _globals->_player.enableControl();
+ g_globals->_soundHandler.play(350);
+ g_globals->_sceneManager._fadeMode = FADEMODE_GRADUAL;
+ g_globals->_events.setCursor(CURSOR_USE);
+ g_globals->_player.enableControl();
remove();
break;
@@ -3804,7 +3806,7 @@ void Scene4300::Action1::signal() {
}
void Scene4300::Action2::signal() {
- Scene4300 *scene = (Scene4300 *)_globals->_sceneManager._scene;
+ Scene4300 *scene = (Scene4300 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -3814,7 +3816,7 @@ void Scene4300::Action2::signal() {
scene->_stripManager.start(8016, this, scene);
break;
case 2:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
remove();
break;
}
@@ -3839,11 +3841,11 @@ void Scene4300::Hotspot8::doAction(int action) {
break;
case OBJECT_KEY_DEVICE:
RING_INVENTORY._keyDevice._sceneNumber = 4300;
- _globals->_scenePalette.addRotation(240, 254, -1);
+ g_globals->_scenePalette.addRotation(240, 254, -1);
animate(ANIM_MODE_5, NULL);
- _globals->setFlag(99);
- _globals->_sceneItems.push_back(this);
+ g_globals->setFlag(99);
+ g_globals->_sceneItems.push_back(this);
break;
default:
SceneHotspot::doAction(action);
@@ -3885,14 +3887,14 @@ void Scene4300::Hotspot9::doAction(int action) {
void Scene4300::Hotspot10::doAction(int action) {
// Alien
- Scene4300 *scene = (Scene4300 *)_globals->_sceneManager._scene;
+ Scene4300 *scene = (Scene4300 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(4300, 2);
break;
case CURSOR_TALK:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->setAction(&scene->_action2);
break;
case OBJECT_SCANNER:
@@ -3903,9 +3905,9 @@ void Scene4300::Hotspot10::doAction(int action) {
break;
case CURSOR_USE:
case OBJECT_HELMET:
- _globals->_stripNum = (action == CURSOR_USE) ? 4300 : 4301;
- _globals->_events.setCursor(CURSOR_NONE);
- _globals->_sceneManager.changeScene(4250);
+ g_globals->_stripNum = (action == CURSOR_USE) ? 4300 : 4301;
+ g_globals->_events.setCursor(CURSOR_NONE);
+ g_globals->_sceneManager.changeScene(4250);
break;
default:
SceneHotspot::doAction(action);
@@ -3914,11 +3916,11 @@ void Scene4300::Hotspot10::doAction(int action) {
}
void Scene4300::Hotspot15::signal() {
- Scene4300 *scene = (Scene4300 *)_globals->_sceneManager._scene;
+ Scene4300 *scene = (Scene4300 *)g_globals->_sceneManager._scene;
scene->_soundHandler2.play(345);
- _strip = (_globals->_randomSource.getRandomNumber(6) < 2) ? 2 : 1;
+ _strip = (g_globals->_randomSource.getRandomNumber(6) < 2) ? 2 : 1;
if ((RING_INVENTORY._stasisBox2._sceneNumber == 4300) ||
(RING_INVENTORY._concentrator._sceneNumber == 1)) {
setStrip(1);
@@ -3930,7 +3932,7 @@ void Scene4300::Hotspot15::signal() {
}
void Scene4300::Hotspot16::doAction(int action) {
- Scene4300 *scene = (Scene4300 *)_globals->_sceneManager._scene;
+ Scene4300 *scene = (Scene4300 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
@@ -3958,7 +3960,7 @@ void Scene4300::Hotspot16::doAction(int action) {
}
void Scene4300::Hotspot17::doAction(int action) {
- Scene4300 *scene = (Scene4300 *)_globals->_sceneManager._scene;
+ Scene4300 *scene = (Scene4300 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
@@ -3968,7 +3970,7 @@ void Scene4300::Hotspot17::doAction(int action) {
if (RING_INVENTORY._stasisBox2._sceneNumber != 4300)
SceneItem::display2(4300, 13);
else {
- _globals->_scenePalette.clearListeners();
+ g_globals->_scenePalette.clearListeners();
remove();
SceneItem::display2(4300, 12);
@@ -3983,7 +3985,7 @@ void Scene4300::Hotspot17::doAction(int action) {
break;
case OBJECT_STASIS_BOX2:
scene->_soundHandler1.play(352);
- _globals->_events.setCursor(CURSOR_USE);
+ g_globals->_events.setCursor(CURSOR_USE);
scene->_sceneMode = 4303;
scene->setAction(&scene->_sequenceManager, scene, 4303, this, NULL);
@@ -4031,27 +4033,27 @@ void Scene4300::postInit(SceneObjectList *OwnerList) {
_stripManager.addSpeaker(&_speakerMText);
_stripManager.addSpeaker(&_speakerFLText);
- _hotspot11.setup(76, 97, 102, 127, 4300, 5, 6);
+ _hotspot11.setDetails(76, 97, 102, 127, 4300, 5, 6);
_hotspot7.postInit();
_hotspot7.setPosition(Common::Point(90, 128));
_hotspot7.setVisage(4303);
_hotspot7.fixPriority(250);
- _globals->_sceneItems.push_back(&_hotspot7);
+ g_globals->_sceneItems.push_back(&_hotspot7);
- _hotspot9.setup(120, 49, 174, 91, 4300, -1, -1);
+ _hotspot9.setDetails(120, 49, 174, 91, 4300, -1, -1);
_hotspot15.postInit();
_hotspot15.setVisage(4300);
_hotspot15.setPosition(Common::Point(149, 79));
_hotspot15.signal();
- if (!_globals->getFlag(99)) {
+ if (!g_globals->getFlag(99)) {
_hotspot8.postInit();
_hotspot8.setVisage(4300);
_hotspot8.setStrip(3);
_hotspot8.setPosition(Common::Point(196, 47));
- _globals->_sceneItems.push_back(&_hotspot8);
+ g_globals->_sceneItems.push_back(&_hotspot8);
}
if (RING_INVENTORY._concentrator._sceneNumber == 4300) {
@@ -4064,15 +4066,15 @@ void Scene4300::postInit(SceneObjectList *OwnerList) {
if (RING_INVENTORY._stasisBox2._sceneNumber == 4300)
_hotspot17.setFrame(_hotspot17.getFrameCount());
- _globals->_sceneItems.push_back(&_hotspot17);
+ g_globals->_sceneItems.push_back(&_hotspot17);
}
- if (!_globals->getFlag(98)) {
+ if (!g_globals->getFlag(98)) {
_hotspot10.postInit();
_hotspot10.setVisage(4302);
_hotspot10.setPosition(Common::Point(244, 179));
_hotspot10.fixPriority(100);
- _globals->_sceneItems.push_back(&_hotspot10);
+ g_globals->_sceneItems.push_back(&_hotspot10);
_hotspot12.postInit();
_hotspot12.setVisage(4302);
@@ -4097,11 +4099,11 @@ void Scene4300::postInit(SceneObjectList *OwnerList) {
_hotspot16.setPosition(Common::Point(169, 141));
_hotspot16.fixPriority(1);
_hotspot16.setStrip(4);
- _globals->_sceneItems.push_back(&_hotspot16);
+ g_globals->_sceneItems.push_back(&_hotspot16);
}
- if (_globals->_sceneManager._previousScene == 4301) {
- _globals->_player.disableControl();
+ if (g_globals->_sceneManager._previousScene == 4301) {
+ g_globals->_player.disableControl();
_hotspot7.setFrame(_hotspot7.getFrameCount());
_hotspot1.postInit();
@@ -4141,15 +4143,15 @@ void Scene4300::postInit(SceneObjectList *OwnerList) {
setAction(&_action1);
} else {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
_sceneMode = 4304;
setAction(&_sequenceManager, this, 4304, NULL);
}
_hotspot10.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT));
_hotspot19._sceneRegionId = 0;
- _globals->_sceneItems.push_back(&_hotspot19);
- _globals->_sceneItems.push_back(&_hotspot18);
+ g_globals->_sceneItems.push_back(&_hotspot19);
+ g_globals->_sceneItems.push_back(&_hotspot18);
}
void Scene4300::stripCallback(int v) {
@@ -4165,7 +4167,7 @@ void Scene4300::stripCallback(int v) {
}
void Scene4300::remove() {
- _globals->_scenePalette.clearListeners();
+ g_globals->_scenePalette.clearListeners();
Scene::remove();
}
@@ -4174,7 +4176,7 @@ void Scene4300::signal() {
case 4302:
RING_INVENTORY._items._sceneNumber = 1;
_hotspot16.remove();
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
break;
case 4303:
RING_INVENTORY._stasisBox2._sceneNumber = 4300;
@@ -4193,8 +4195,8 @@ void Scene4300::signal() {
_gfxButton.draw();
_gfxButton._bounds.expandPanes();
- _globals->_player.enableControl();
- _globals->_scenePalette.addRotation(240, 254, -1);
+ g_globals->_player.enableControl();
+ g_globals->_scenePalette.addRotation(240, 254, -1);
break;
}
}
@@ -4207,7 +4209,7 @@ void Scene4300::dispatch() {
void Scene4300::process(Event &event) {
Scene::process(event);
if (_gfxButton.process(event))
- _globals->_sceneManager.changeScene(4250);
+ g_globals->_sceneManager.changeScene(4250);
}
/*--------------------------------------------------------------------------
@@ -4223,8 +4225,8 @@ void Scene4301::Action1::synchronize(Serializer &s) {
}
void Scene4301::Action1::remove() {
- Scene4301 *scene = (Scene4301 *)_globals->_sceneManager._scene;
- _globals->_player.enableControl();
+ Scene4301 *scene = (Scene4301 *)g_globals->_sceneManager._scene;
+ g_globals->_player.enableControl();
for (_state = 0; _state < 6; ++_state)
_buttonList[_state].remove();
@@ -4237,7 +4239,7 @@ void Scene4301::Action1::remove() {
}
void Scene4301::Action1::signal() {
- Scene4301 *scene = (Scene4301 *)_globals->_sceneManager._scene;
+ Scene4301 *scene = (Scene4301 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -4245,8 +4247,8 @@ void Scene4301::Action1::signal() {
scene->_hotspot1.animate(ANIM_MODE_5, this);
break;
case 1:
- _globals->_soundHandler.play(335);
- _globals->_events.setCursor(CURSOR_USE);
+ g_globals->_soundHandler.play(335);
+ g_globals->_events.setCursor(CURSOR_USE);
scene->_hotspot2.postInit();
scene->_hotspot2.setVisage(4303);
@@ -4269,7 +4271,7 @@ void Scene4301::Action1::signal() {
break;
case 10:
// Puzzle: Wrong code
- _globals->_events.setCursor(CURSOR_NONE);
+ g_globals->_events.setCursor(CURSOR_NONE);
scene->_soundHandler.play(337);
if (scene->_hotspot3._flags & OBJFLAG_HIDE)
scene->_hotspot3.show();
@@ -4290,11 +4292,11 @@ void Scene4301::Action1::signal() {
_actionIndex = 2;
_state = 0;
- _globals->_events.setCursor(CURSOR_USE);
+ g_globals->_events.setCursor(CURSOR_USE);
break;
case 20:
// Puzzle: Correct code
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_soundHandler.play(339);
scene->_hotspot3._frame = 3;
if (scene->_hotspot3._flags & OBJFLAG_HIDE)
@@ -4317,7 +4319,7 @@ void Scene4301::Action1::signal() {
void Scene4301::Action1::process(Event &event) {
// Puzzle
- Scene4301 *scene = (Scene4301 *)_globals->_sceneManager._scene;
+ Scene4301 *scene = (Scene4301 *)g_globals->_sceneManager._scene;
Rect buttonsRect;
Action::process(event);
@@ -4372,10 +4374,10 @@ void Scene4301::Action1::process(Event &event) {
void Scene4301::Hotspot4::doAction(int action) {
// Hatch near door
- Scene4301 *scene = (Scene4301 *)_globals->_sceneManager._scene;
+ Scene4301 *scene = (Scene4301 *)g_globals->_sceneManager._scene;
if (action == CURSOR_USE) {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->setAction(&scene->_action1);
} else {
NamedHotspot::doAction(action);
@@ -4405,14 +4407,14 @@ void Scene4301::Hotspot5::doAction(int action) {
/*--------------------------------------------------------------------------*/
void Scene4301::postInit(SceneObjectList *OwnerList) {
- _globals->setFlag(50);
+ g_globals->setFlag(50);
loadScene(4301);
Scene::postInit();
setZoomPercents(0, 100, 200, 100);
_field68E = false;
RING_INVENTORY._stasisBox2._sceneNumber = 1;
- _hotspot4.setup(97, 76, 127, 102, 4300, 5, 6);
+ _hotspot4.setDetails(97, 76, 127, 102, 4300, 5, 6);
_hotspot1.postInit();
_hotspot1.setPosition(Common::Point(90, 128));
@@ -4422,9 +4424,9 @@ void Scene4301::postInit(SceneObjectList *OwnerList) {
_hotspot1.fixPriority(250);
_hotspot5.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT));
- _globals->_sceneItems.push_back(&_hotspot5);
+ g_globals->_sceneItems.push_back(&_hotspot5);
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
}
void Scene4301::dispatch() {
@@ -4432,10 +4434,12 @@ void Scene4301::dispatch() {
_action->dispatch();
} else if (_field68E) {
_field68E = 0;
- _globals->clearFlag(50);
- _globals->_sceneManager._fadeMode = FADEMODE_NONE;
- _globals->_sceneManager.setNewScene(4300);
+ g_globals->clearFlag(50);
+ g_globals->_sceneManager._fadeMode = FADEMODE_NONE;
+ g_globals->_sceneManager.setNewScene(4300);
}
}
-} // End of namespace tSage
+} // End of namespace Ringworld
+
+} // End of namespace TsAGE
diff --git a/engines/tsage/ringworld_scenes5.h b/engines/tsage/ringworld/ringworld_scenes5.h
index c3ae9f4aa9..80e67755bd 100644
--- a/engines/tsage/ringworld_scenes5.h
+++ b/engines/tsage/ringworld/ringworld_scenes5.h
@@ -26,9 +26,14 @@
#include "common/scummsys.h"
#include "tsage/core.h"
#include "tsage/converse.h"
-#include "tsage/ringworld_logic.h"
+#include "tsage/ringworld/ringworld_logic.h"
+#include "tsage/ringworld/ringworld_speakers.h"
-namespace tSage {
+namespace TsAGE {
+
+namespace Ringworld {
+
+using namespace TsAGE;
class Scene4000 : public Scene {
/* Actions */
@@ -687,7 +692,8 @@ public:
}
};
+} // End of namespace Ringworld
-} // End of namespace tSage
+} // End of namespace TsAGE
#endif
diff --git a/engines/tsage/ringworld_scenes6.cpp b/engines/tsage/ringworld/ringworld_scenes6.cpp
index 68c184196c..57a073caee 100644
--- a/engines/tsage/ringworld_scenes6.cpp
+++ b/engines/tsage/ringworld/ringworld_scenes6.cpp
@@ -20,12 +20,14 @@
*
*/
-#include "tsage/ringworld_scenes6.h"
+#include "tsage/ringworld/ringworld_scenes6.h"
#include "tsage/scenes.h"
#include "tsage/tsage.h"
#include "tsage/staticres.h"
-namespace tSage {
+namespace TsAGE {
+
+namespace Ringworld {
/*--------------------------------------------------------------------------
* Scene 5000 - Caverns - Entrance
@@ -34,7 +36,7 @@ namespace tSage {
void Scene5000::Action1::signal() {
// Ship landing
- Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene;
+ Scene5000 *scene = (Scene5000 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -86,7 +88,7 @@ void Scene5000::Action1::signal() {
}
void Scene5000::Action1::dispatch() {
- Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene;
+ Scene5000 *scene = (Scene5000 *)g_globals->_sceneManager._scene;
Action::dispatch();
if (_actionIndex == 3) {
@@ -110,83 +112,83 @@ void Scene5000::Action1::dispatch() {
}
void Scene5000::Action2::signal() {
- Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene;
+ Scene5000 *scene = (Scene5000 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.setPosition(Common::Point(217, 76));
+ g_globals->_player.setPosition(Common::Point(217, 76));
setDelay(10);
break;
case 1:
- _globals->_player.setStrip2(3);
- _globals->_player.animate(ANIM_MODE_1, NULL);
- ADD_MOVER(_globals->_player, 214, 89);
+ g_globals->_player.setStrip2(3);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ ADD_MOVER(g_globals->_player, 214, 89);
break;
case 2:
- if (!_globals->getFlag(59))
+ if (!g_globals->getFlag(59))
setAction(&scene->_action3, this);
- _globals->_player.fixPriority(15);
- ADD_MOVER(_globals->_player, 208, 100);
+ g_globals->_player.fixPriority(15);
+ ADD_MOVER(g_globals->_player, 208, 100);
break;
case 3:
- ADD_MOVER(_globals->_player, 213, 98);
+ ADD_MOVER(g_globals->_player, 213, 98);
break;
case 4:
- _globals->_player.fixPriority(20);
- ADD_MOVER(_globals->_player, 215, 115);
+ g_globals->_player.fixPriority(20);
+ ADD_MOVER(g_globals->_player, 215, 115);
break;
case 5:
- _globals->_player.changeZoom(47);
- ADD_MOVER(_globals->_player, 220, 125);
+ g_globals->_player.changeZoom(47);
+ ADD_MOVER(g_globals->_player, 220, 125);
break;
case 6:
- ADD_MOVER(_globals->_player, 229, 115);
+ ADD_MOVER(g_globals->_player, 229, 115);
break;
case 7:
- _globals->_player.changeZoom(-1);
- _globals->_player.fixPriority(35);
- ADD_MOVER(_globals->_player, 201, 166);
+ g_globals->_player.changeZoom(-1);
+ g_globals->_player.fixPriority(35);
+ ADD_MOVER(g_globals->_player, 201, 166);
break;
case 8:
- _globals->_player.updateZoom();
- ADD_MOVER(_globals->_player, 205, 146);
+ g_globals->_player.updateZoom();
+ ADD_MOVER(g_globals->_player, 205, 146);
break;
case 9:
- _globals->_player.changeZoom(-1);
- _globals->_player.fixPriority(50);
- ADD_MOVER(_globals->_player, 220, 182);
+ g_globals->_player.changeZoom(-1);
+ g_globals->_player.fixPriority(50);
+ ADD_MOVER(g_globals->_player, 220, 182);
break;
case 10:
- _globals->_player.updateZoom();
- ADD_MOVER(_globals->_player, 208, 163);
+ g_globals->_player.updateZoom();
+ ADD_MOVER(g_globals->_player, 208, 163);
break;
case 11:
- _globals->_player.changeZoom(-1);
- _globals->_player.setStrip2(-1);
- _globals->_player.fixPriority(-1);
- ADD_MOVER(_globals->_player, 208, 175);
+ g_globals->_player.changeZoom(-1);
+ g_globals->_player.setStrip2(-1);
+ g_globals->_player.fixPriority(-1);
+ ADD_MOVER(g_globals->_player, 208, 175);
break;
case 12:
- _globals->_player.setStrip(8);
- _globals->_player.setFrame(1);
+ g_globals->_player.setStrip(8);
+ g_globals->_player.setFrame(1);
setDelay(10);
break;
case 13:
- if (!_globals->_sceneObjects->contains(&scene->_hotspot7))
+ if (!g_globals->_sceneObjects->contains(&scene->_hotspot7))
setDelay(10);
break;
case 14:
setDelay(30);
break;
case 15:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
remove();
break;
}
}
void Scene5000::Action3::signal() {
- Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene;
+ Scene5000 *scene = (Scene5000 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -204,7 +206,7 @@ void Scene5000::Action3::signal() {
scene->_hotspot7.animate(ANIM_MODE_1, NULL);
ADD_MOVER(scene->_hotspot7, 214, 89);
- _globals->_sceneItems.push_front(&scene->_hotspot7);
+ g_globals->_sceneItems.push_front(&scene->_hotspot7);
break;
case 2:
scene->_hotspot7.changeZoom(-1);
@@ -260,116 +262,116 @@ void Scene5000::Action3::signal() {
}
void Scene5000::Action4::signal() {
- Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene;
+ Scene5000 *scene = (Scene5000 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(1);
break;
case 1:
- _globals->_player.fixPriority(50);
- _globals->_player.setStrip2(4);
- ADD_MOVER(_globals->_player, 210, 182);
+ g_globals->_player.fixPriority(50);
+ g_globals->_player.setStrip2(4);
+ ADD_MOVER(g_globals->_player, 210, 182);
break;
case 2:
- ADD_MOVER(_globals->_player, 205, 146);
+ ADD_MOVER(g_globals->_player, 205, 146);
break;
case 3:
- _globals->_player.fixPriority(35);
- ADD_MOVER(_globals->_player, 201, 166);
+ g_globals->_player.fixPriority(35);
+ ADD_MOVER(g_globals->_player, 201, 166);
break;
case 4:
- ADD_MOVER(_globals->_player, 229, 115);
+ ADD_MOVER(g_globals->_player, 229, 115);
break;
case 5:
- _globals->_player.fixPriority(20);
- _globals->_player.changeZoom(47);
- ADD_MOVER(_globals->_player, 220, 125);
+ g_globals->_player.fixPriority(20);
+ g_globals->_player.changeZoom(47);
+ ADD_MOVER(g_globals->_player, 220, 125);
break;
case 6:
- ADD_MOVER(_globals->_player, 215, 115);
+ ADD_MOVER(g_globals->_player, 215, 115);
break;
case 7:
- _globals->_player.changeZoom(-1);
- ADD_MOVER(_globals->_player, 213, 98);
+ g_globals->_player.changeZoom(-1);
+ ADD_MOVER(g_globals->_player, 213, 98);
break;
case 8:
- _globals->_player.fixPriority(15);
- ADD_MOVER(_globals->_player, 208, 100);
+ g_globals->_player.fixPriority(15);
+ ADD_MOVER(g_globals->_player, 208, 100);
break;
case 9:
- ADD_MOVER(_globals->_player, 214, 89);
+ ADD_MOVER(g_globals->_player, 214, 89);
break;
case 10:
- ADD_MOVER(_globals->_player, 217, 76);
+ ADD_MOVER(g_globals->_player, 217, 76);
break;
case 11:
- _globals->_player.hide();
+ g_globals->_player.hide();
setDelay(60);
break;
case 12:
- if (!_globals->_sceneObjects->contains(&scene->_hotspot7))
- _globals->_sceneManager.changeScene(2320);
+ if (!g_globals->_sceneObjects->contains(&scene->_hotspot7))
+ g_globals->_sceneManager.changeScene(2320);
remove();
break;
}
}
void Scene5000::Action5::signal() {
- Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene;
+ Scene5000 *scene = (Scene5000 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
- ADD_MOVER(_globals->_player, 91, 155);
+ g_globals->_player.disableControl();
+ ADD_MOVER(g_globals->_player, 91, 155);
break;
case 1:
- _globals->_player.setVisage(2670);
- _globals->_player._strip = 4;
- _globals->_player._frame = 1;
- _globals->_player.animate(ANIM_MODE_5, this);
+ g_globals->_player.setVisage(2670);
+ g_globals->_player._strip = 4;
+ g_globals->_player._frame = 1;
+ g_globals->_player.animate(ANIM_MODE_5, this);
break;
case 2:
- SceneItem::display2(5000, _globals->_sceneObjects->contains(&scene->_hotspot7) ? 17 : 13);
- _globals->_player.animate(ANIM_MODE_6, this);
+ SceneItem::display2(5000, g_globals->_sceneObjects->contains(&scene->_hotspot7) ? 17 : 13);
+ g_globals->_player.animate(ANIM_MODE_6, this);
break;
case 3:
- _globals->_player.setVisage(0);
- _globals->_player._strip = 8;
- _globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.setVisage(0);
+ g_globals->_player._strip = 8;
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
remove();
}
}
void Scene5000::Action6::signal() {
// Discussion between the hero and Seeker, then the hero goes back to the lander
- Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene;
+ Scene5000 *scene = (Scene5000 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
setDelay(3);
break;
case 1:
- _globals->_events.setCursor(CURSOR_WALK);
+ g_globals->_events.setCursor(CURSOR_WALK);
scene->_stripManager.start(2150, this);
break;
case 2:
- _globals->_events.setCursor(CURSOR_NONE);
+ g_globals->_events.setCursor(CURSOR_NONE);
scene->setAction(&scene->_sequenceManager, this, 5001, &scene->_hotspot7, NULL);
break;
case 3:
ADD_PLAYER_MOVER(208, 163);
break;
case 4:
- _globals->_player.fixPriority(50);
- _globals->_player.setStrip2(4);
- ADD_MOVER(_globals->_player, 210, 182);
+ g_globals->_player.fixPriority(50);
+ g_globals->_player.setStrip2(4);
+ ADD_MOVER(g_globals->_player, 210, 182);
break;
case 5:
- _globals->_sceneManager.changeScene(2100);
+ g_globals->_sceneManager.changeScene(2100);
break;
}
}
@@ -377,7 +379,7 @@ void Scene5000::Action6::signal() {
/*--------------------------------------------------------------------------*/
void Scene5000::Hotspot7::doAction(int action) {
- Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene;
+ Scene5000 *scene = (Scene5000 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
@@ -394,7 +396,7 @@ void Scene5000::Hotspot7::doAction(int action) {
void Scene5000::Hotspot8::doAction(int action) {
// Cave
- Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene;
+ Scene5000 *scene = (Scene5000 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
@@ -413,9 +415,9 @@ void Scene5000::Hotspot8::doAction(int action) {
}
void Scene5000::HotspotGroup1::doAction(int action) {
- Scene5000 *scene = (Scene5000 *)_globals->_sceneManager._scene;
+ Scene5000 *scene = (Scene5000 *)g_globals->_sceneManager._scene;
- if (_globals->_sceneObjects->contains(&scene->_hotspot7))
+ if (g_globals->_sceneObjects->contains(&scene->_hotspot7))
scene->setAction(&scene->_action6);
else
SceneItem::display2(5000, 11);
@@ -444,13 +446,13 @@ void Scene5000::postInit(SceneObjectList *OwnerList) {
_stripManager.addSpeaker(&_speakerSText);
_stripManager.addSpeaker(&_speakerQText);
- _globals->_player.postInit();
- _globals->_player.setObjectWrapper(new SceneObjectWrapper());
- _globals->_player.setVisage(0);
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player._moveDiff = Common::Point(4, 2);
- _globals->_player.changeZoom(-1);
- _globals->_player.disableControl();
+ g_globals->_player.postInit();
+ g_globals->_player.setObjectWrapper(new SceneObjectWrapper());
+ g_globals->_player.setVisage(0);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player._moveDiff = Common::Point(4, 2);
+ g_globals->_player.changeZoom(-1);
+ g_globals->_player.disableControl();
_hotspot1.postInit();
_hotspot1.setVisage(5001);
@@ -516,14 +518,14 @@ void Scene5000::postInit(SceneObjectList *OwnerList) {
_hotspot16.setBounds(Rect(0, 86, 319, 200));
_hotspot12.setBounds(Rect(230, 143, 244, 150));
- _globals->_sceneItems.addItems(&_hotspot9, &_hotspot10, &_hotspot11, &_hotspot8, &_hotspot13,
+ g_globals->_sceneItems.addItems(&_hotspot9, &_hotspot10, &_hotspot11, &_hotspot8, &_hotspot13,
&_hotspot14, &_hotspot12, &_hotspot15, &_hotspot17, &_hotspot18, &_hotspot16, NULL);
- switch (_globals->_sceneManager._previousScene) {
+ switch (g_globals->_sceneManager._previousScene) {
case 1000:
case 2100:
case 2320:
- if (_globals->getFlag(59)) {
+ if (g_globals->getFlag(59)) {
_hotspot1.setPosition(Common::Point(233, 90));
_hotspot1.changeZoom(100);
_hotspot1.show();
@@ -533,21 +535,21 @@ void Scene5000::postInit(SceneObjectList *OwnerList) {
_hotspot5.setPosition(Common::Point(218, 76));
_hotspot5.show();
- _globals->_player.setPosition(Common::Point(217, -10));
- _globals->_player.disableControl();
+ g_globals->_player.setPosition(Common::Point(217, -10));
+ g_globals->_player.disableControl();
setAction(&_action2);
} else {
- _globals->_player.setPosition(Common::Point(217, -10));
+ g_globals->_player.setPosition(Common::Point(217, -10));
_hotspot1.setPosition(Common::Point(320, -10));
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
setAction(&_action1);
}
break;
default:
- _globals->_player.disableControl();
- _globals->_player.setPosition(Common::Point(0, 146));
+ g_globals->_player.disableControl();
+ g_globals->_player.setPosition(Common::Point(0, 146));
_hotspot1.changeZoom(100);
_hotspot1.setPosition(Common::Point(233, 90));
@@ -557,11 +559,11 @@ void Scene5000::postInit(SceneObjectList *OwnerList) {
_hotspot5.show();
_sceneMode = 5004;
- setAction(&_sequenceManager, this, 5004, &_globals->_player, NULL);
+ setAction(&_sequenceManager, this, 5004, &g_globals->_player, NULL);
break;
}
- _globals->_soundHandler.play(190);
+ g_globals->_soundHandler.play(190);
}
void Scene5000::signal() {
@@ -569,10 +571,10 @@ void Scene5000::signal() {
case 5002:
case 5003:
case 5004:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
break;
case 5005:
- _globals->_sceneManager.changeScene(5100);
+ g_globals->_sceneManager.changeScene(5100);
break;
}
}
@@ -581,29 +583,29 @@ void Scene5000::dispatch() {
Scene::dispatch();
if (!_action) {
- if (!_globals->_sceneObjects->contains(&_hotspot7) && (_globals->_player.getRegionIndex() == 10)) {
- _globals->_player.disableControl();
+ if (!g_globals->_sceneObjects->contains(&_hotspot7) && (g_globals->_player.getRegionIndex() == 10)) {
+ g_globals->_player.disableControl();
_sceneMode = 5005;
- setAction(&_sequenceManager, this, 5005, &_globals->_player, NULL);
+ setAction(&_sequenceManager, this, 5005, &g_globals->_player, NULL);
}
- if (_globals->_player.getRegionIndex() == 8) {
- _globals->_player.disableControl();
+ if (g_globals->_player.getRegionIndex() == 8) {
+ g_globals->_player.disableControl();
- if (_globals->_sceneObjects->contains(&_hotspot7)) {
+ if (g_globals->_sceneObjects->contains(&_hotspot7)) {
_sceneMode = 5003;
- _globals->_player.addMover(NULL);
- setAction(&_sequenceManager, this, 5003, &_globals->_player, NULL);
+ g_globals->_player.addMover(NULL);
+ setAction(&_sequenceManager, this, 5003, &g_globals->_player, NULL);
} else {
setAction(&_action4);
}
}
- if (_globals->_sceneObjects->contains(&_hotspot7) && (_globals->_player.getRegionIndex() == 15)) {
+ if (g_globals->_sceneObjects->contains(&_hotspot7) && (g_globals->_player.getRegionIndex() == 15)) {
_sceneMode = 5002;
- _globals->_player.disableControl();
- _globals->_player.addMover(NULL);
- setAction(&_sequenceManager, this, 5002, &_globals->_player, NULL);
+ g_globals->_player.disableControl();
+ g_globals->_player.addMover(NULL);
+ setAction(&_sequenceManager, this, 5002, &g_globals->_player, NULL);
}
}
}
@@ -615,26 +617,26 @@ void Scene5000::dispatch() {
void Scene5100::Action1::signal() {
// Quinn enters the cave for the first time
- Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene;
+ Scene5100 *scene = (Scene5100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(5);
break;
case 1:
- ADD_MOVER(_globals->_player, 1111, 165);
+ ADD_MOVER(g_globals->_player, 1111, 165);
break;
case 2:
- _globals->_player.setStrip(6);
- _globals->_player.setFrame(1);
+ g_globals->_player.setStrip(6);
+ g_globals->_player.setFrame(1);
setDelay(60);
break;
case 3:
- if (_globals->getFlag(10)) {
- _globals->_player.enableControl();
+ if (g_globals->getFlag(10)) {
+ g_globals->_player.enableControl();
remove();
} else {
- _globals->setFlag(10);
+ g_globals->setFlag(10);
scene->_stripManager.start(5102, this);
}
break;
@@ -648,7 +650,7 @@ void Scene5100::Action1::signal() {
scene->_hotspot5.animate(ANIM_MODE_1, NULL);
scene->_hotspot5.fixPriority(10);
- _globals->_sceneItems.push_front(&scene->_hotspot5);
+ g_globals->_sceneItems.push_front(&scene->_hotspot5);
ADD_MOVER(scene->_hotspot5, 999, 14);
break;
case 5:
@@ -657,7 +659,7 @@ void Scene5100::Action1::signal() {
scene->_hotspot5.animate(ANIM_MODE_5, this);
break;
case 6:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
remove();
break;
}
@@ -665,11 +667,11 @@ void Scene5100::Action1::signal() {
void Scene5100::Action2::signal() {
// Quinn and Seeker exit the cave
- Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene;
+ Scene5100 *scene = (Scene5100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
setDelay(5);
break;
case 1:
@@ -691,13 +693,13 @@ void Scene5100::Action2::signal() {
scene->_stripManager.start(5129, this);
break;
case 3:
- if (_globals->_player._position.x >= 966) {
+ if (g_globals->_player._position.x >= 966) {
ADD_PLAYER_MOVER_NULL(scene->_hotspot8, 1215, 155);
} else {
ADD_PLAYER_MOVER_NULL(scene->_hotspot8, 966, 185);
}
- if (_globals->_player._position.x >= 966) {
+ if (g_globals->_player._position.x >= 966) {
setDelay(1);
} else {
ADD_PLAYER_MOVER(966, 190);
@@ -708,40 +710,40 @@ void Scene5100::Action2::signal() {
ADD_PLAYER_MOVER(1215, 155);
break;
case 5:
- _globals->_sceneManager.changeScene(2100);
+ g_globals->_sceneManager.changeScene(2100);
break;
}
}
void Scene5100::Action3::signal() {
// Quinns shots flesheater
- Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene;
+ Scene5100 *scene = (Scene5100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->setFlag(62);
- _globals->_player.disableControl();
- _globals->_player.addMover(NULL);
+ g_globals->setFlag(62);
+ g_globals->_player.disableControl();
+ g_globals->_player.addMover(NULL);
scene->_hotspot2.addMover(NULL);
scene->_hotspot3.addMover(NULL);
- _globals->_player.setVisage(2672);
+ g_globals->_player.setVisage(2672);
- if (static_cast<SceneObject *>(_owner)->_position.x >= _globals->_player._position.x)
- _globals->_player._strip = 4;
+ if (static_cast<SceneObject *>(_owner)->_position.x >= g_globals->_player._position.x)
+ g_globals->_player._strip = 4;
else
- _globals->_player._strip = 3;
- _globals->_player._frame = 1;
- _globals->_player.animate(ANIM_MODE_5, this);
+ g_globals->_player._strip = 3;
+ g_globals->_player._frame = 1;
+ g_globals->_player.animate(ANIM_MODE_5, this);
break;
case 1:
- _globals->_player.setVisage(2674);
- _globals->_player.setFrame(1);
- _globals->_player.animate(ANIM_MODE_5, this);
+ g_globals->_player.setVisage(2674);
+ g_globals->_player.setFrame(1);
+ g_globals->_player.animate(ANIM_MODE_5, this);
break;
case 2:
scene->_soundHandler.play(28);
- if (static_cast<SceneObject *>(_owner)->_position.x < _globals->_player._position.x) {
+ if (static_cast<SceneObject *>(_owner)->_position.x < g_globals->_player._position.x) {
scene->_hotspot2.setVisage(5130);
scene->_hotspot2._strip = 1;
scene->_hotspot2._frame = 1;
@@ -762,35 +764,35 @@ void Scene5100::Action3::signal() {
}
- _globals->_player.setVisage(2672);
- _globals->_player._frame = _globals->_player.getFrameCount();
- _globals->_player.animate(ANIM_MODE_6, this);
+ g_globals->_player.setVisage(2672);
+ g_globals->_player._frame = g_globals->_player.getFrameCount();
+ g_globals->_player.animate(ANIM_MODE_6, this);
break;
case 3:
break;
case 4:
SceneItem::display2(5100, 38);
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
- _globals->_player.setVisage(0);
- _globals->_player._strip = 8;
- _globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.setVisage(0);
+ g_globals->_player._strip = 8;
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
remove();
break;
}
}
void Scene5100::Action4::signal() {
- Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene;
+ Scene5100 *scene = (Scene5100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0: {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_soundHandler.play(208);
SceneItem::display2(5100, 15);
ObjectMover3 *mover = new ObjectMover3();
- scene->_hotspot2.addMover(mover, &_globals->_player, 20, this);
+ scene->_hotspot2.addMover(mover, &g_globals->_player, 20, this);
break;
}
case 1:
@@ -804,18 +806,18 @@ void Scene5100::Action4::signal() {
setDelay(15);
break;
case 3:
- _globals->_sceneManager.changeScene(5200);
+ g_globals->_sceneManager.changeScene(5200);
break;
}
}
void Scene5100::Action5::signal() {
// Quinns forgot the statis box in the throne room, and goes back
- Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene;
+ Scene5100 *scene = (Scene5100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
setDelay(60);
break;
case 1:
@@ -826,7 +828,7 @@ void Scene5100::Action5::signal() {
break;
case 3:
scene->_sceneMode = 5106;
- scene->setAction(&scene->_sequenceManager, scene, 5106, &_globals->_player, &scene->_hotspot14, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 5106, &g_globals->_player, &scene->_hotspot14, NULL);
break;
}
}
@@ -835,11 +837,11 @@ void Scene5100::Action5::signal() {
void Scene5100::HotspotGroup1::doAction(int action) {
// Flesh Eaters
- Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene;
+ Scene5100 *scene = (Scene5100 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
- SceneItem::display2(5100, _globals->getFlag(62) ? 41 : 26);
+ SceneItem::display2(5100, g_globals->getFlag(62) ? 41 : 26);
break;
case CURSOR_USE:
SceneItem::display2(5100, 11);
@@ -848,7 +850,7 @@ void Scene5100::HotspotGroup1::doAction(int action) {
SceneItem::display2(5100, 17);
break;
case OBJECT_STUNNER:
- if (_globals->getFlag(62))
+ if (g_globals->getFlag(62))
SceneItem::display2(5100, 42);
else
setAction(&scene->_action3);
@@ -860,16 +862,16 @@ void Scene5100::HotspotGroup1::doAction(int action) {
}
void Scene5100::Hotspot4::doAction(int action) {
- Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene;
+ Scene5100 *scene = (Scene5100 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(5100, 31);
break;
case CURSOR_USE:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_sceneMode = 5110;
- scene->setAction(&scene->_sequenceManager, scene, 5110, &_globals->_player, this, &scene->_hotspot7, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 5110, &g_globals->_player, this, &scene->_hotspot7, NULL);
break;
case CURSOR_TALK:
SceneItem::display2(5100, 34);
@@ -888,11 +890,11 @@ void Scene5100::Hotspot4::doAction(int action) {
void Scene5100::HotspotGroup2::doAction(int action) {
// Bat
- Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene;
+ Scene5100 *scene = (Scene5100 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
- SceneItem::display2(5100, _globals->getFlag(108) ? 47 : 23);
+ SceneItem::display2(5100, g_globals->getFlag(108) ? 47 : 23);
break;
case CURSOR_USE:
SceneItem::display2(5100, 29);
@@ -901,7 +903,7 @@ void Scene5100::HotspotGroup2::doAction(int action) {
if (_position.x >= 600)
SceneItem::display2(5100, 28);
else {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_sceneMode = 5114;
scene->setAction(&scene->_sequenceManager, scene, 5114, NULL);
}
@@ -917,16 +919,16 @@ void Scene5100::HotspotGroup2::doAction(int action) {
void Scene5100::Hotspot9::doAction(int action) {
// Rope
- Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene;
+ Scene5100 *scene = (Scene5100 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(5100, 32);
break;
case CURSOR_USE:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_sceneMode = 5117;
- scene->setAction(&scene->_sequenceManager, scene, 5117, &_globals->_player, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 5117, &g_globals->_player, NULL);
break;
case OBJECT_STUNNER:
SceneItem::display2(5100, 35);
@@ -935,9 +937,9 @@ void Scene5100::Hotspot9::doAction(int action) {
SceneItem::display2(5100, 44);
break;
case OBJECT_BONE:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_sceneMode = 5116;
- scene->setAction(&scene->_sequenceManager, scene, 5116, &_globals->_player, this, &scene->_hotspot10,
+ scene->setAction(&scene->_sequenceManager, scene, 5116, &g_globals->_player, this, &scene->_hotspot10,
&scene->_hotspot4, NULL);
break;
default:
@@ -948,19 +950,19 @@ void Scene5100::Hotspot9::doAction(int action) {
void Scene5100::Hotspot17::doAction(int action) {
// Rock blocking pit entrance
- Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene;
+ Scene5100 *scene = (Scene5100 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(5100, 18);
break;
case CURSOR_USE:
- if (_globals->getFlag(67))
+ if (g_globals->getFlag(67))
SceneItem::display2(5100, 19);
else {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_sceneMode = 5101;
- scene->setAction(&scene->_sequenceManager, scene, 5101, &_globals->_player, this, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 5101, &g_globals->_player, this, NULL);
}
break;
default:
@@ -972,7 +974,7 @@ void Scene5100::Hotspot17::doAction(int action) {
void Scene5100::Hotspot18::doAction(int action) {
switch (action) {
case CURSOR_LOOK:
- if (_globals->_sceneManager._previousScene != 5000) {
+ if (g_globals->_sceneManager._previousScene != 5000) {
SceneItem::display2(5100, 3);
} else {
switch (_index1) {
@@ -1014,21 +1016,21 @@ void Scene5100::Hotspot18::doAction(int action) {
void Scene5100::Hotspot19::doAction(int action) {
// Pillar
- Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene;
+ Scene5100 *scene = (Scene5100 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
- SceneItem::display2(5100, _globals->_sceneObjects->contains(&scene->_hotspot14) ? 27 : 20);
+ SceneItem::display2(5100, g_globals->_sceneObjects->contains(&scene->_hotspot14) ? 27 : 20);
break;
case CURSOR_USE:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_sceneMode = 5106;
- if (_globals->getFlag(66))
- scene->setAction(&scene->_sequenceManager, scene, 5113, &_globals->_player, NULL);
+ if (g_globals->getFlag(66))
+ scene->setAction(&scene->_sequenceManager, scene, 5113, &g_globals->_player, NULL);
else {
- _globals->setFlag(66);
- scene->setAction(&scene->_sequenceManager, scene, 5106, &_globals->_player, &scene->_hotspot14, NULL);
+ g_globals->setFlag(66);
+ scene->setAction(&scene->_sequenceManager, scene, 5106, &g_globals->_player, &scene->_hotspot14, NULL);
}
break;
default:
@@ -1038,21 +1040,21 @@ void Scene5100::Hotspot19::doAction(int action) {
}
void Scene5100::Hotspot20::doAction(int action) {
- Scene5100 *scene = (Scene5100 *)_globals->_sceneManager._scene;
+ Scene5100 *scene = (Scene5100 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(5100, 21);
break;
case CURSOR_USE:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
- if (_globals->getFlag(67)) {
+ if (g_globals->getFlag(67)) {
scene->_sceneMode = 5112;
- scene->setAction(&scene->_sequenceManager, scene, 5112, &_globals->_player, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 5112, &g_globals->_player, NULL);
} else {
scene->_sceneMode = 5101;
- scene->setAction(&scene->_sequenceManager, scene, 5106, &_globals->_player, &scene->_hotspot17, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 5106, &g_globals->_player, &scene->_hotspot17, NULL);
}
break;
default:
@@ -1078,17 +1080,17 @@ void Scene5100::postInit(SceneObjectList *OwnerList) {
_stripManager.addSpeaker(&_speakerSText);
_stripManager.addSpeaker(&_speakerGameText);
_stripManager.addSpeaker(&_speakerBatText);
- _speakerQText._npc = &_globals->_player;
- _speakerMText._npc = &_globals->_player;
+ _speakerQText._npc = &g_globals->_player;
+ _speakerMText._npc = &g_globals->_player;
_speakerSText._npc = &_hotspot8;
- _globals->_player.postInit();
- _globals->_player.setVisage(0);
- _globals->_player.setObjectWrapper(new SceneObjectWrapper());
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player.disableControl();
+ g_globals->_player.postInit();
+ g_globals->_player.setVisage(0);
+ g_globals->_player.setObjectWrapper(new SceneObjectWrapper());
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.disableControl();
- if ((!_globals->getFlag(66)) || (RING_INVENTORY._stasisBox._sceneNumber != 1)) {
+ if ((!g_globals->getFlag(66)) || (RING_INVENTORY._stasisBox._sceneNumber != 1)) {
_hotspot14.postInit();
_hotspot14.setVisage(5101);
_hotspot14.setPosition(Common::Point(498, 147));
@@ -1101,7 +1103,7 @@ void Scene5100::postInit(SceneObjectList *OwnerList) {
_hotspot17._strip = 2;
_hotspot17.fixPriority(200);
- if (_globals->getFlag(67))
+ if (g_globals->getFlag(67))
_hotspot17.setPosition(Common::Point(554, 192));
else
_hotspot17.setPosition(Common::Point(539, 179));
@@ -1109,26 +1111,26 @@ void Scene5100::postInit(SceneObjectList *OwnerList) {
_hotspot19.setBounds(Rect(488, 115, 508, 148));
_hotspot21.setBounds(Rect(1150, 85, 1173, 112));
_hotspot20.setBounds(Rect(517, 193, 562, 200));
- _globals->_sceneItems.addItems(&_hotspot19, &_hotspot21, NULL);
+ g_globals->_sceneItems.addItems(&_hotspot19, &_hotspot21, NULL);
- if (_globals->getFlag(67)) {
- _globals->_sceneItems.addItems(&_hotspot20, &_hotspot17, NULL);
+ if (g_globals->getFlag(67)) {
+ g_globals->_sceneItems.addItems(&_hotspot20, &_hotspot17, NULL);
} else {
- _globals->_sceneItems.addItems(&_hotspot17, &_hotspot20, NULL);
+ g_globals->_sceneItems.addItems(&_hotspot17, &_hotspot20, NULL);
}
- if (!_globals->getFlag(105)) {
+ if (!g_globals->getFlag(105)) {
_hotspot4.postInit();
_hotspot4.setVisage(5363);
_hotspot4.setPosition(Common::Point(1025, 65));
_hotspot4.setStrip(4);
_hotspot4.animate(ANIM_MODE_7, 0, NULL);;
- _globals->_sceneItems.push_back(&_hotspot4);
+ g_globals->_sceneItems.push_back(&_hotspot4);
_hotspot9.postInit();
_hotspot9.setVisage(5363);
_hotspot9.setPosition(Common::Point(966, 120));
- _globals->_sceneItems.push_back(&_hotspot9);
+ g_globals->_sceneItems.push_back(&_hotspot9);
_hotspot10.postInit();
_hotspot10.setVisage(5363);
@@ -1140,26 +1142,26 @@ void Scene5100::postInit(SceneObjectList *OwnerList) {
_hotspot6.setPosition(Common::Point(1017, 34));
_hotspot6._strip = 4;
_hotspot6._frame = _hotspot6.getFrameCount();
- _globals->_sceneItems.push_back(&_hotspot6);
+ g_globals->_sceneItems.push_back(&_hotspot6);
}
_hotspot16._sceneRegionId = 15;
- _globals->_sceneItems.push_back(&_hotspot16);
+ g_globals->_sceneItems.push_back(&_hotspot16);
- if (!_globals->getFlag(62)) {
+ if (!g_globals->getFlag(62)) {
_hotspot2.postInit();
_hotspot2.setVisage(5110);
_hotspot2.animate(ANIM_MODE_1, NULL);
_hotspot2._moveDiff.x = 4;
- _globals->_sceneItems.push_back(&_hotspot2);
+ g_globals->_sceneItems.push_back(&_hotspot2);
_hotspot3.postInit();
_hotspot3.setVisage(5110);
_hotspot3.animate(ANIM_MODE_1, NULL);
_hotspot3._moveDiff.x = 4;
- _globals->_sceneItems.push_back(&_hotspot3);
+ g_globals->_sceneItems.push_back(&_hotspot3);
- if (_globals->getFlag(61)) {
+ if (g_globals->getFlag(61)) {
_hotspot2.setPosition(Common::Point(483, 189));
_hotspot3.setPosition(Common::Point(811, 182));
} else {
@@ -1168,35 +1170,35 @@ void Scene5100::postInit(SceneObjectList *OwnerList) {
}
}
- if (_globals->getFlag(60) && (RING_INVENTORY._stasisBox._sceneNumber == 1) &&
- _globals->getFlag(107) && _globals->getFlag(67)) {
+ if (g_globals->getFlag(60) && (RING_INVENTORY._stasisBox._sceneNumber == 1) &&
+ g_globals->getFlag(107) && g_globals->getFlag(67)) {
_hotspot8.postInit();
_hotspot8.setVisage(2806);
_hotspot8.setPosition(Common::Point(557, 178));
_hotspot8.animate(ANIM_MODE_1, NULL);
_hotspot8.setObjectWrapper(new SceneObjectWrapper());
- _globals->clearFlag(59);
+ g_globals->clearFlag(59);
}
- switch (_globals->_sceneManager._previousScene) {
+ switch (g_globals->_sceneManager._previousScene) {
case 5000:
default:
- _globals->_player.setPosition(Common::Point(1184, 160));
+ g_globals->_player.setPosition(Common::Point(1184, 160));
setAction(&_action1);
break;
case 5200:
- if (_globals->_stripNum == 5200) {
- _globals->_player.setVisage(5101);
- _globals->_player.fixPriority(200);
- _globals->_player.setStrip(5);
- _globals->_player.setFrame(1);
- _globals->_player.setPosition(Common::Point(513, 199));
+ if (g_globals->_stripNum == 5200) {
+ g_globals->_player.setVisage(5101);
+ g_globals->_player.fixPriority(200);
+ g_globals->_player.setStrip(5);
+ g_globals->_player.setFrame(1);
+ g_globals->_player.setPosition(Common::Point(513, 199));
_sceneMode = 5108;
- setAction(&_sequenceManager, this, 5108, &_globals->_player, NULL);
+ setAction(&_sequenceManager, this, 5108, &g_globals->_player, NULL);
} else {
- _globals->_player.setPosition(Common::Point(20, 175));
+ g_globals->_player.setPosition(Common::Point(20, 175));
_hotspot13.postInit();
_hotspot13.setVisage(5110);
@@ -1211,7 +1213,7 @@ void Scene5100::postInit(SceneObjectList *OwnerList) {
_hotspot11.animate(ANIM_MODE_1, NULL);
ObjectMover2 *mover = new ObjectMover2();
- _hotspot11.addMover(mover, 15, 20, &_globals->_player);
+ _hotspot11.addMover(mover, 15, 20, &g_globals->_player);
_hotspot12.postInit();
_hotspot12.setVisage(5110);
@@ -1221,51 +1223,51 @@ void Scene5100::postInit(SceneObjectList *OwnerList) {
_hotspot12.animate(ANIM_MODE_1, NULL);
ObjectMover2 *mover2 = new ObjectMover2();
- _hotspot12.addMover(mover2, 25, 50, &_globals->_player);
+ _hotspot12.addMover(mover2, 25, 50, &g_globals->_player);
_hotspot17.setPosition(Common::Point(554, 182));
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
_sceneMode = 5105;
- setAction(&_sequenceManager, this, 5105, &_globals->_player, NULL);
+ setAction(&_sequenceManager, this, 5105, &g_globals->_player, NULL);
}
break;
case 5300:
- switch (_globals->_stripNum) {
+ switch (g_globals->_stripNum) {
case 5300:
_sceneMode = 5111;
- _globals->_player.setVisage(5101);
- _globals->_player.setStrip(6);
- _globals->_player.fixPriority(170);
- _globals->_player.setPosition(Common::Point(1168, 110));
+ g_globals->_player.setVisage(5101);
+ g_globals->_player.setStrip(6);
+ g_globals->_player.fixPriority(170);
+ g_globals->_player.setPosition(Common::Point(1168, 110));
- setAction(&_sequenceManager, this, 5111, &_globals->_player, NULL);
+ setAction(&_sequenceManager, this, 5111, &g_globals->_player, NULL);
_hotspot8.setPosition(Common::Point(1107, 178));
break;
case 5302:
- _globals->_player.setPosition(Common::Point(512, 190));
+ g_globals->_player.setPosition(Common::Point(512, 190));
- if (_globals->_sceneObjects->contains(&_hotspot8))
+ if (g_globals->_sceneObjects->contains(&_hotspot8))
setAction(&_action2);
else
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
break;
case 5303:
_hotspot8.setVisage(5102);
_hotspot8.setPosition(Common::Point(533, 172));
- _globals->_player.setPosition(Common::Point(512, 190));
+ g_globals->_player.setPosition(Common::Point(512, 190));
setAction(&_action2);
break;
}
- if (_globals->getFlag(108)) {
+ if (g_globals->getFlag(108)) {
_hotspot6.postInit();
_hotspot6.setVisage(5362);
_hotspot6.setPosition(Common::Point(542, 19));
_hotspot6.setStrip(6);
_hotspot6.setFrame(1);
- _globals->_sceneItems.push_back(&_hotspot6);
+ g_globals->_sceneItems.push_back(&_hotspot6);
} else if (RING_INVENTORY._vial._sceneNumber != 5100) {
_hotspot6.postInit();
_hotspot6.setVisage(5362);
@@ -1273,13 +1275,13 @@ void Scene5100::postInit(SceneObjectList *OwnerList) {
_hotspot6.fixPriority(170);
_hotspot6.setStrip(6);
_hotspot6.setFrame(1);
- _globals->_sceneItems.push_back(&_hotspot6);
+ g_globals->_sceneItems.push_back(&_hotspot6);
}
break;
}
_hotspot18.setBounds(Rect(0, 0, 1280, 200));
- _globals->_sceneItems.push_back(&_hotspot18);
+ g_globals->_sceneItems.push_back(&_hotspot18);
_hotspot15.postInit();
_hotspot15.setVisage(5140);
@@ -1287,41 +1289,41 @@ void Scene5100::postInit(SceneObjectList *OwnerList) {
_hotspot15.setPosition(Common::Point(977, 173));
_hotspot15.fixPriority(1);
- _globals->_sceneManager._scene->_sceneBounds.center(_globals->_player._position);
+ g_globals->_sceneManager._scene->_sceneBounds.center(g_globals->_player._position);
loadScene(5100);
- _globals->_soundHandler.play(205);
+ g_globals->_soundHandler.play(205);
}
void Scene5100::signal() {
switch (_sceneMode) {
case 5101:
case 5112:
- _globals->setFlag(67);
- _globals->_sceneManager.changeScene(5300);
+ g_globals->setFlag(67);
+ g_globals->_sceneManager.changeScene(5300);
break;
case 5102:
case 5114:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
break;
case 5103:
- if (_globals->getFlag(61)) {
+ if (g_globals->getFlag(61)) {
SceneItem::display2(5100, 46);
- _globals->_sceneManager.changeScene(5300);
+ g_globals->_sceneManager.changeScene(5300);
} else {
SceneItem::display2(5100, 45);
- _globals->_sceneManager.changeScene(5200);
+ g_globals->_sceneManager.changeScene(5200);
}
break;
case 5105:
- _globals->_sceneManager.changeScene(5300);
+ g_globals->_sceneManager.changeScene(5300);
break;
case 5106:
- _globals->_stripNum = 5111;
- _globals->_sceneManager.changeScene(5200);
+ g_globals->_stripNum = 5111;
+ g_globals->_sceneManager.changeScene(5200);
break;
case 5108:
- if (!_globals->getFlag(60))
- _globals->_player.enableControl();
+ if (!g_globals->getFlag(60))
+ g_globals->_player.enableControl();
else if (RING_INVENTORY._stasisBox._sceneNumber == 1)
setAction(&_action2);
else
@@ -1329,78 +1331,78 @@ void Scene5100::signal() {
break;
case 5110:
SceneItem::display2(5100, 30);
- _globals->_player._angle = 325;
- _globals->_player.enableControl();
+ g_globals->_player._angle = 325;
+ g_globals->_player.enableControl();
break;
case 5111:
- _globals->_player.setObjectWrapper(new SceneObjectWrapper());
- _globals->_player.setVisage(0);
- _globals->_player.setStrip(6);
- _globals->_player.fixPriority(-1);
- _globals->_player.animate(ANIM_MODE_1, NULL);
-
- if ((RING_INVENTORY._vial._sceneNumber != 5100) && !_globals->getFlag(108)) {
- _globals->setFlag(108);
+ g_globals->_player.setObjectWrapper(new SceneObjectWrapper());
+ g_globals->_player.setVisage(0);
+ g_globals->_player.setStrip(6);
+ g_globals->_player.fixPriority(-1);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+
+ if ((RING_INVENTORY._vial._sceneNumber != 5100) && !g_globals->getFlag(108)) {
+ g_globals->setFlag(108);
_sceneMode = 5130;
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
- _speakerBatText.setTextPos(Common::Point(_globals->_sceneManager._scene->_sceneBounds.left + 20, 30));
- setAction(&_sequenceManager, this, 5130, &_globals->_player, &_hotspot6, NULL);
- } else if (_globals->_sceneObjects->contains(&_hotspot8)) {
+ _speakerBatText.setTextPos(Common::Point(g_globals->_sceneManager._scene->_sceneBounds.left + 20, 30));
+ setAction(&_sequenceManager, this, 5130, &g_globals->_player, &_hotspot6, NULL);
+ } else if (g_globals->_sceneObjects->contains(&_hotspot8)) {
setAction(&_action2);
} else {
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
}
break;
case 5116:
- _globals->setFlag(105);
+ g_globals->setFlag(105);
RING_INVENTORY._bone._sceneNumber = 0;
- _globals->_player.setObjectWrapper(new SceneObjectWrapper());
- _globals->_player.setVisage(0);
- _globals->_player.setStrip(6);
- _globals->_player.fixPriority(-1);
- _globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.setObjectWrapper(new SceneObjectWrapper());
+ g_globals->_player.setVisage(0);
+ g_globals->_player.setStrip(6);
+ g_globals->_player.fixPriority(-1);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
// No break on purpose
case 5117:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
break;
case 5130:
_hotspot6.setVisage(5362);
_hotspot6.setPosition(Common::Point(542, 25));
_hotspot6.setStrip(6);
_hotspot6.setFrame(1);
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
break;
case 5150:
- _globals->clearFlag(60);
- _globals->_sceneManager.changeScene(5300);
+ g_globals->clearFlag(60);
+ g_globals->_sceneManager.changeScene(5300);
break;
}
}
void Scene5100::dispatch() {
// Flesheater trap
- if (_hotspot15._bounds.contains(_globals->_player._position) && !_globals->_player._visage) {
- _globals->_player.disableControl();
- _globals->_player.addMover(NULL);
+ if (_hotspot15._bounds.contains(g_globals->_player._position) && !g_globals->_player._visage) {
+ g_globals->_player.disableControl();
+ g_globals->_player.addMover(NULL);
_soundHandler.play(207);
_sceneMode = 5103;
- setAction(&_sequenceManager, this, (_globals->_player._position.x >= 966) ? 5104 : 5103,
- &_globals->_player, &_hotspot15, NULL);
+ setAction(&_sequenceManager, this, (g_globals->_player._position.x >= 966) ? 5104 : 5103,
+ &g_globals->_player, &_hotspot15, NULL);
}
- if (_globals->getFlag(61) && !_globals->getFlag(62) &&
- ((_globals->_player._position.x - _hotspot2._position.x) < 160) &&
- (_globals->_sceneManager._previousScene != 5200) && (_sceneMode != 5150)) {
+ if (g_globals->getFlag(61) && !g_globals->getFlag(62) &&
+ ((g_globals->_player._position.x - _hotspot2._position.x) < 160) &&
+ (g_globals->_sceneManager._previousScene != 5200) && (_sceneMode != 5150)) {
setAction(NULL);
_sceneMode = 5150;
_soundHandler.play(208);
if (RING_INVENTORY._vial._sceneNumber == 5100) {
- _globals->_player.addMover(NULL);
- _globals->_player.disableControl();
+ g_globals->_player.addMover(NULL);
+ g_globals->_player.disableControl();
SceneItem::display2(5100, 39);
}
@@ -1408,28 +1410,28 @@ void Scene5100::dispatch() {
_hotspot3.setStrip2(2);
ObjectMover3 *mover1 = new ObjectMover3();
- _hotspot2.addMover(mover1, &_globals->_player, 20, this);
+ _hotspot2.addMover(mover1, &g_globals->_player, 20, this);
ObjectMover3 *mover2 = new ObjectMover3();
- _hotspot3.addMover(mover2, &_globals->_player, 20, this);
+ _hotspot3.addMover(mover2, &g_globals->_player, 20, this);
}
if (!_action) {
- if (((_globals->_player._position.x - _hotspot2._position.x) < 130) && !_globals->getFlag(61)) {
- _globals->_player._canWalk = false;
- _globals->_player.addMover(NULL);
+ if (((g_globals->_player._position.x - _hotspot2._position.x) < 130) && !g_globals->getFlag(61)) {
+ g_globals->_player._canWalk = false;
+ g_globals->_player.addMover(NULL);
Common::Point pt(20, 25);
PlayerMover2 *mover = new PlayerMover2();
- _hotspot3.addMover(mover, &pt, &_globals->_player);
+ _hotspot3.addMover(mover, &pt, &g_globals->_player);
setAction(&_action4);
}
- if ((_globals->_sceneManager._scene->_backgroundBounds.right - 85) <= _globals->_player._position.x)
- _globals->_sceneManager.changeScene(5000);
+ if ((g_globals->_sceneManager._scene->_backgroundBounds.right - 85) <= g_globals->_player._position.x)
+ g_globals->_sceneManager.changeScene(5000);
- if (_globals->_player.getRegionIndex() == 8) {
+ if (g_globals->_player.getRegionIndex() == 8) {
_sceneMode = 5114;
- setAction(&_sequenceManager, this, 5115, &_globals->_player, NULL);
+ setAction(&_sequenceManager, this, 5115, &g_globals->_player, NULL);
}
}
@@ -1442,11 +1444,11 @@ void Scene5100::dispatch() {
*--------------------------------------------------------------------------*/
void Scene5200::Action1::signal() {
- Scene5200 *scene = (Scene5200 *)_globals->_sceneManager._scene;
+ Scene5200 *scene = (Scene5200 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- setDelay(_globals->_randomSource.getRandomNumber(59) + 120);
+ setDelay(g_globals->_randomSource.getRandomNumber(59) + 120);
break;
case 1:
scene->_hotspot3.animate(ANIM_MODE_8, 1, this);
@@ -1457,30 +1459,30 @@ void Scene5200::Action1::signal() {
void Scene5200::Action2::signal() {
// Quinn obtains the stasis box from the flesheater throne room
- Scene5200 *scene = (Scene5200 *)_globals->_sceneManager._scene;
+ Scene5200 *scene = (Scene5200 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
ADD_PLAYER_MOVER(92, 52);
break;
case 1:
- _globals->_player.setVisage(5202);
- _globals->_player._strip = 4;
- _globals->_player._frame = 1;
- _globals->_player.animate(ANIM_MODE_4, 3, 1, this);
+ g_globals->_player.setVisage(5202);
+ g_globals->_player._strip = 4;
+ g_globals->_player._frame = 1;
+ g_globals->_player.animate(ANIM_MODE_4, 3, 1, this);
break;
case 2:
scene->_soundHandler.stop();
scene->_hotspot14.remove();
RING_INVENTORY._stasisBox._sceneNumber = 1;
- _globals->_player.animate(ANIM_MODE_5, this);
+ g_globals->_player.animate(ANIM_MODE_5, this);
break;
case 3:
- _globals->_player.setVisage(0);
- _globals->_player._strip = 3;
- _globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.setVisage(0);
+ g_globals->_player._strip = 3;
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
scene->_hotspot8.animate(ANIM_MODE_2, NULL);
ADD_MOVER(scene->_hotspot8, 141, 77);
@@ -1493,7 +1495,7 @@ void Scene5200::Action2::signal() {
scene->_hotspot8.animate(ANIM_MODE_5, this);
break;
case 5:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
remove();
break;
}
@@ -1502,28 +1504,28 @@ void Scene5200::Action2::signal() {
void Scene5200::Action3::signal() {
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
setDelay(5);
break;
case 1:
ADD_PLAYER_MOVER(285, 62);
break;
case 2:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
remove();
break;
}
}
void Scene5200::Action4::signal() {
- Scene5200 *scene = (Scene5200 *)_globals->_sceneManager._scene;
+ Scene5200 *scene = (Scene5200 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(120);
break;
case 1:
- _globals->_soundHandler.play(209);
+ g_globals->_soundHandler.play(209);
scene->_stripManager.start(5202, this, scene);
break;
case 2:
@@ -1539,7 +1541,7 @@ void Scene5200::Action4::signal() {
setDelay(60);
break;
case 6:
- _globals->_sceneManager.changeScene(5100);
+ g_globals->_sceneManager.changeScene(5100);
break;
}
}
@@ -1560,7 +1562,7 @@ void Scene5200::Hotspot9::doAction(int action) {
SceneItem::display2(5200, 14);
break;
default:
- SceneItem::doAction(action);
+ SceneHotspot::doAction(action);
break;
}
}
@@ -1582,7 +1584,7 @@ void Scene5200::Hotspot10::doAction(int action) {
}
void Scene5200::Hotspot14::doAction(int action) {
- Scene5200 *scene = (Scene5200 *)_globals->_sceneManager._scene;
+ Scene5200 *scene = (Scene5200 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
@@ -1636,33 +1638,33 @@ void Scene5200::postInit(SceneObjectList *OwnerList) {
_hotspot8._strip = 1;
_hotspot8.setPosition(Common::Point(96, 53));
_hotspot8.fixPriority(90);
- _globals->_sceneItems.push_back(&_hotspot14);
+ g_globals->_sceneItems.push_back(&_hotspot14);
}
- if (_globals->_stripNum == 5111) {
+ if (g_globals->_stripNum == 5111) {
// Happens when the player enters the throne room via the secret passage,
// after talking with the bat. No NPCs are around and the player can
// obtain the stasis box.
- _globals->_soundHandler.play(205);
- _globals->_player.disableControl();
-
- _globals->_player.postInit();
- _globals->_player.setVisage(0);
- _globals->_player.changeZoom(75);
- _globals->_player.setObjectWrapper(new SceneObjectWrapper());
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player.setStrip(1);
- _globals->_player.setFrame(3);
- _globals->_player.setPosition(Common::Point(307, 62));
+ g_globals->_soundHandler.play(205);
+ g_globals->_player.disableControl();
+
+ g_globals->_player.postInit();
+ g_globals->_player.setVisage(0);
+ g_globals->_player.changeZoom(75);
+ g_globals->_player.setObjectWrapper(new SceneObjectWrapper());
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.setStrip(1);
+ g_globals->_player.setFrame(3);
+ g_globals->_player.setPosition(Common::Point(307, 62));
setAction(&_action3);
} else {
// Happens when the player is captured by the flesh eaters the first time.
- _globals->_player.postInit();
- _globals->_player.setVisage(2640);
- _globals->_player._strip = 1;
- _globals->_player._frame = 4;
- _globals->_player.setPosition(Common::Point(105, 199));
+ g_globals->_player.postInit();
+ g_globals->_player.setVisage(2640);
+ g_globals->_player._strip = 1;
+ g_globals->_player._frame = 4;
+ g_globals->_player.setPosition(Common::Point(105, 199));
_hotspot5.postInit();
_hotspot5.setVisage(5210);
@@ -1706,8 +1708,8 @@ void Scene5200::postInit(SceneObjectList *OwnerList) {
_hotspot4.setPosition(Common::Point(146, 110));
_hotspot4.fixPriority(90);
- _globals->_player.disableControl();
- _globals->setFlag(61);
+ g_globals->_player.disableControl();
+ g_globals->setFlag(61);
setAction(&_action4);
}
@@ -1718,8 +1720,8 @@ void Scene5200::postInit(SceneObjectList *OwnerList) {
_hotspot12._sceneRegionId = 10;
_hotspot13._sceneRegionId = 8;
- _globals->_sceneItems.addItems(&_hotspot12, &_hotspot13, &_hotspot9, &_hotspot10, &_hotspot11, NULL);
- _globals->_sceneManager._scene->_sceneBounds.center(_globals->_player._position);
+ g_globals->_sceneItems.addItems(&_hotspot12, &_hotspot13, &_hotspot9, &_hotspot10, &_hotspot11, NULL);
+ g_globals->_sceneManager._scene->_sceneBounds.center(g_globals->_player._position);
loadScene(5200);
}
@@ -1737,9 +1739,9 @@ void Scene5200::stripCallback(int v) {
void Scene5200::dispatch() {
Scene::dispatch();
- if (!_action && (_globals->_player.getRegionIndex() == 12)) {
- _globals->_stripNum = 5200;
- _globals->_sceneManager.changeScene(5100);
+ if (!_action && (g_globals->_player.getRegionIndex() == 12)) {
+ g_globals->_stripNum = 5200;
+ g_globals->_sceneManager.changeScene(5100);
}
}
@@ -1750,11 +1752,11 @@ void Scene5200::dispatch() {
void Scene5300::Action1::signal() {
// Seeker waking up
- Scene5300 *scene = (Scene5300 *)_globals->_sceneManager._scene;
+ Scene5300 *scene = (Scene5300 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
setDelay(3);
break;
case 1:
@@ -1765,30 +1767,30 @@ void Scene5300::Action1::signal() {
case 2:
scene->_hotspot2.animate(ANIM_MODE_NONE, NULL);
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player.setStrip2(-1);
- _globals->_player.setObjectWrapper(new SceneObjectWrapper());
- ADD_MOVER(_globals->_player, 85, 170);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.setStrip2(-1);
+ g_globals->_player.setObjectWrapper(new SceneObjectWrapper());
+ ADD_MOVER(g_globals->_player, 85, 170);
break;
case 3:
scene->_hotspot2.fixPriority(-1);
- _globals->_player.checkAngle(&scene->_hotspot2);
+ g_globals->_player.checkAngle(&scene->_hotspot2);
setAction(&scene->_sequenceManager, this, 5305, &scene->_hotspot2, NULL);
break;
case 4:
scene->_stripManager.start(5316, this);
break;
case 5:
- if (!_globals->getFlag(106) || !_globals->getFlag(107) || (RING_INVENTORY._stasisBox._sceneNumber != 1)) {
- _globals->_player.enableControl();
+ if (!g_globals->getFlag(106) || !g_globals->getFlag(107) || (RING_INVENTORY._stasisBox._sceneNumber != 1)) {
+ g_globals->_player.enableControl();
remove();
} else {
- _globals->setFlag(60);
+ g_globals->setFlag(60);
scene->_hotspot2._numFrames = 10;
- if (_globals->getFlag(67)) {
+ if (g_globals->getFlag(67)) {
scene->_sceneMode = 5310;
- scene->setAction(&scene->_sequenceManager, scene, 5310, &_globals->_player, &scene->_hotspot2, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 5310, &g_globals->_player, &scene->_hotspot2, NULL);
} else {
scene->_sceneMode = 5347;
scene->setAction(&scene->_sequenceManager, scene, 5347, NULL);
@@ -1799,46 +1801,46 @@ void Scene5300::Action1::signal() {
}
void Scene5300::Action2::signal() {
- Scene5300 *scene = (Scene5300 *)_globals->_sceneManager._scene;
+ Scene5300 *scene = (Scene5300 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
setDelay(60);
break;
case 1:
- _globals->setFlag(60);
+ g_globals->setFlag(60);
scene->_stripManager.start(5328, this);
break;
case 2:
if (RING_INVENTORY._stasisBox._sceneNumber == 1) {
- _globals->_stripNum = 5303;
+ g_globals->_stripNum = 5303;
setDelay(5);
} else {
- _globals->_stripNum = 5302;
+ g_globals->_stripNum = 5302;
scene->_stripManager.start(5329, this);
}
break;
case 3:
- _globals->_sceneManager.changeScene(5100);
+ g_globals->_sceneManager.changeScene(5100);
remove();
break;
}
}
void Scene5300::Action3::signal() {
- Scene5300 *scene = (Scene5300 *)_globals->_sceneManager._scene;
+ Scene5300 *scene = (Scene5300 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
setDelay(30);
break;
case 1:
- scene->_stripManager.start(_globals->_stripNum, this);
+ scene->_stripManager.start(g_globals->_stripNum, this);
break;
case 2:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
remove();
break;
}
@@ -1847,14 +1849,14 @@ void Scene5300::Action3::signal() {
/*--------------------------------------------------------------------------*/
void Scene5300::Hotspot1::doAction(int action) {
- Scene5300 *scene = (Scene5300 *)_globals->_sceneManager._scene;
+ Scene5300 *scene = (Scene5300 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(5300, 24);
break;
case CURSOR_TALK:
- _globals->_stripNum = 5312;
+ g_globals->_stripNum = 5312;
scene->setAction(&scene->_action3);
break;
default:
@@ -1864,37 +1866,37 @@ void Scene5300::Hotspot1::doAction(int action) {
}
void Scene5300::Hotspot2::doAction(int action) {
// Seeker
- Scene5300 *scene = (Scene5300 *)_globals->_sceneManager._scene;
+ Scene5300 *scene = (Scene5300 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(5300, 23);
break;
case CURSOR_USE:
- if (!_globals->getFlag(106)) {
- _globals->_player.disableControl();
+ if (!g_globals->getFlag(106)) {
+ g_globals->_player.disableControl();
scene->_sceneMode = 5302;
- scene->setAction(&scene->_sequenceManager, scene, 5302, &_globals->_player, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 5302, &g_globals->_player, NULL);
} else {
- SceneItem::display2(5300, _globals->getFlag(107) ? 25 : 20);
+ SceneItem::display2(5300, g_globals->getFlag(107) ? 25 : 20);
}
break;
case CURSOR_TALK:
- if (!_globals->getFlag(106)) {
- _globals->_player.disableControl();
+ if (!g_globals->getFlag(106)) {
+ g_globals->_player.disableControl();
scene->_sceneMode = 5302;
- scene->setAction(&scene->_sequenceManager, scene, 5302, &_globals->_player, NULL);
- } else if (!_globals->getFlag(107)) {
+ scene->setAction(&scene->_sequenceManager, scene, 5302, &g_globals->_player, NULL);
+ } else if (!g_globals->getFlag(107)) {
SceneItem::display2(5300, 11);
} else {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
if (RING_INVENTORY._stasisBox._sceneNumber != 1) {
scene->_sceneMode = 5316;
scene->setAction(&scene->_sequenceManager, scene, 5316, NULL);
} else {
- _globals->setFlag(60);
- if (_globals->getFlag(67)) {
+ g_globals->setFlag(60);
+ if (g_globals->getFlag(67)) {
scene->_sceneMode = 5315;
scene->setAction(&scene->_sequenceManager, scene, 5315, this, NULL);
} else {
@@ -1905,29 +1907,29 @@ void Scene5300::Hotspot2::doAction(int action) {
}
break;
case OBJECT_SCANNER:
- SceneItem::display2(5300, _globals->getFlag(107) ? 10 : 9);
+ SceneItem::display2(5300, g_globals->getFlag(107) ? 10 : 9);
break;
case OBJECT_MEDKIT:
- if (_globals->getFlag(106))
+ if (g_globals->getFlag(106))
SceneItem::display2(5300, 7);
else {
- _globals->setFlag(106);
- _globals->_player.disableControl();
+ g_globals->setFlag(106);
+ g_globals->_player.disableControl();
scene->_sceneMode = 5303;
- scene->setAction(&scene->_sequenceManager, scene, 5303, &_globals->_player, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 5303, &g_globals->_player, NULL);
}
break;
case OBJECT_VIAL:
- if (_globals->getFlag(107)) {
+ if (g_globals->getFlag(107)) {
SceneItem::display2(5300, 8);
} else {
RING_INVENTORY._vial._sceneNumber = 5300;
- _globals->setFlag(107);
- _globals->_player.disableControl();
+ g_globals->setFlag(107);
+ g_globals->_player.disableControl();
scene->_sceneMode = 5304;
- scene->setAction(&scene->_sequenceManager, scene, 5304, &_globals->_player, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 5304, &g_globals->_player, NULL);
}
break;
default:
@@ -1938,7 +1940,7 @@ void Scene5300::Hotspot2::doAction(int action) {
void Scene5300::Hotspot5::doAction(int action) {
// Sharp bone
- Scene5300 *scene = (Scene5300 *)_globals->_sceneManager._scene;
+ Scene5300 *scene = (Scene5300 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
@@ -1946,10 +1948,10 @@ void Scene5300::Hotspot5::doAction(int action) {
break;
case CURSOR_USE:
RING_INVENTORY._bone._sceneNumber = 1;
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_sceneMode = 5309;
- scene->setAction(&scene->_sequenceManager, scene, 5309, &_globals->_player, this, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 5309, &g_globals->_player, this, NULL);
break;
default:
SceneHotspot::doAction(action);
@@ -1959,26 +1961,26 @@ void Scene5300::Hotspot5::doAction(int action) {
void Scene5300::Hotspot6::doAction(int action) {
// Left Hole
- Scene5300 *scene = (Scene5300 *)_globals->_sceneManager._scene;
+ Scene5300 *scene = (Scene5300 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
- if (!_globals->getFlag(105) || (RING_INVENTORY._vial._sceneNumber == 1))
+ if (!g_globals->getFlag(105) || (RING_INVENTORY._vial._sceneNumber == 1))
SceneItem::display2(5300, 4);
else
SceneItem::display2(5300, 26);
break;
case CURSOR_USE:
- if (!_globals->getFlag(105) || (RING_INVENTORY._vial._sceneNumber != 5100)) {
- _globals->_player.disableControl();
+ if (!g_globals->getFlag(105) || (RING_INVENTORY._vial._sceneNumber != 5100)) {
+ g_globals->_player.disableControl();
scene->_sceneMode = 5301;
- scene->setAction(&scene->_sequenceManager, scene, 5301, &_globals->_player, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 5301, &g_globals->_player, NULL);
} else {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_sceneMode = 5307;
RING_INVENTORY._vial._sceneNumber = 1;
- scene->setAction(&scene->_sequenceManager, scene, 5307, &scene->_hotspot1, &_globals->_player,
+ scene->setAction(&scene->_sequenceManager, scene, 5307, &scene->_hotspot1, &g_globals->_player,
&scene->_hotspot4, NULL);
}
break;
@@ -1991,19 +1993,19 @@ void Scene5300::Hotspot6::doAction(int action) {
void Scene5300::Hotspot7::doAction(int action) {
switch (action) {
case CURSOR_LOOK:
- if (_globals->getFlag(63))
+ if (g_globals->getFlag(63))
SceneItem::display2(5300, 2);
else {
- _globals->setFlag(63);
+ g_globals->setFlag(63);
SceneItem::display2(5300, 0);
SceneItem::display2(5300, 1);
}
break;
case CURSOR_USE:
- if (_globals->getFlag(64))
+ if (g_globals->getFlag(64))
SceneItem::display2(5300, 15);
else {
- _globals->setFlag(64);
+ g_globals->setFlag(64);
SceneItem::display2(5300, 14);
}
break;
@@ -2016,7 +2018,7 @@ void Scene5300::Hotspot7::doAction(int action) {
void Scene5300::Hotspot8::doAction(int action) {
switch (action) {
case CURSOR_LOOK:
- SceneItem::display2(5300, _globals->getFlag(65) ? 6 : 5);
+ SceneItem::display2(5300, g_globals->getFlag(65) ? 6 : 5);
break;
case CURSOR_USE:
SceneItem::display2(5300, 18);
@@ -2048,7 +2050,7 @@ void Scene5300::postInit(SceneObjectList *OwnerList) {
_stripManager.addSpeaker(&_speakerSText);
_stripManager.addSpeaker(&_speakerGameText);
- if (_globals->getFlag(106) && _globals->getFlag(107)) {
+ if (g_globals->getFlag(106) && g_globals->getFlag(107)) {
_hotspot2.postInit();
_hotspot2.setVisage(2806);
_hotspot2.setObjectWrapper(new SceneObjectWrapper());
@@ -2075,13 +2077,13 @@ void Scene5300::postInit(SceneObjectList *OwnerList) {
_hotspot4.animate(ANIM_MODE_2, NULL);
_hotspot4.hide();
- if (_globals->getFlag(67)) {
- _globals->_player.postInit();
- _globals->_player.setVisage(5316);
- _globals->_player.setPosition(Common::Point(191, 27));
- _globals->_player.disableControl();
+ if (g_globals->getFlag(67)) {
+ g_globals->_player.postInit();
+ g_globals->_player.setVisage(5316);
+ g_globals->_player.setPosition(Common::Point(191, 27));
+ g_globals->_player.disableControl();
- if (_globals->getFlag(107) && _globals->getFlag(106)) {
+ if (g_globals->getFlag(107) && g_globals->getFlag(106)) {
_hotspot2.setVisage(2806);
_hotspot2.postInit();
_hotspot2.setObjectWrapper(new SceneObjectWrapper());
@@ -2089,14 +2091,14 @@ void Scene5300::postInit(SceneObjectList *OwnerList) {
setAction(&_action2);
} else {
- _globals->_player.setVisage(5315);
- _globals->_player.setPosition(Common::Point(204, 86));
- _globals->_player.animate(ANIM_MODE_2, NULL);
- _globals->_player.setStrip2(1);
- _globals->_player._moveDiff.y = 12;
+ g_globals->_player.setVisage(5315);
+ g_globals->_player.setPosition(Common::Point(204, 86));
+ g_globals->_player.animate(ANIM_MODE_2, NULL);
+ g_globals->_player.setStrip2(1);
+ g_globals->_player._moveDiff.y = 12;
_sceneMode = 5308;
- setAction(&_sequenceManager, this, 5308, &_globals->_player, NULL);
+ setAction(&_sequenceManager, this, 5308, &g_globals->_player, NULL);
}
} else {
_hotspot3.postInit();
@@ -2105,16 +2107,16 @@ void Scene5300::postInit(SceneObjectList *OwnerList) {
_hotspot3.fixPriority(1);
_hotspot3.animate(ANIM_MODE_NONE, NULL);
- _globals->_player.postInit();
- _globals->_player.setVisage(5315);
- _globals->_player.setPosition(Common::Point(204, 86));
- _globals->_player.animate(ANIM_MODE_2, NULL);
- _globals->_player.setStrip2(1);
- _globals->_player._moveDiff.y = 12;
- _globals->_player.disableControl();
+ g_globals->_player.postInit();
+ g_globals->_player.setVisage(5315);
+ g_globals->_player.setPosition(Common::Point(204, 86));
+ g_globals->_player.animate(ANIM_MODE_2, NULL);
+ g_globals->_player.setStrip2(1);
+ g_globals->_player._moveDiff.y = 12;
+ g_globals->_player.disableControl();
_sceneMode = 5306;
- setAction(&_sequenceManager, this, 5306, &_globals->_player, &_hotspot3, NULL);
+ setAction(&_sequenceManager, this, 5306, &g_globals->_player, &_hotspot3, NULL);
}
_field1B0A = 1;
@@ -2123,22 +2125,22 @@ void Scene5300::postInit(SceneObjectList *OwnerList) {
_hotspot5.setVisage(5301);
_hotspot5.setStrip(2);
_hotspot5.setPosition(Common::Point(190, 147));
- _globals->_sceneItems.push_back(&_hotspot5);
+ g_globals->_sceneItems.push_back(&_hotspot5);
}
_hotspot6.setBounds(Rect(74, 51, 114, 69));
_hotspot7.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT));
_hotspot8._sceneRegionId = 8;
- _globals->_sceneItems.addItems(&_hotspot8, &_hotspot2, &_hotspot6, &_hotspot3, &_hotspot7, NULL);
- _globals->_soundHandler.play(212);
+ g_globals->_sceneItems.addItems(&_hotspot8, &_hotspot2, &_hotspot6, &_hotspot3, &_hotspot7, NULL);
+ g_globals->_soundHandler.play(212);
}
void Scene5300::signal() {
switch (_sceneMode) {
case 5301:
- _globals->_stripNum = 5300;
- _globals->_sceneManager.changeScene(5100);
+ g_globals->_stripNum = 5300;
+ g_globals->_sceneManager.changeScene(5100);
break;
case 5307:
_soundHandler.fadeOut(NULL);
@@ -2147,31 +2149,31 @@ void Scene5300::signal() {
case 5308:
case 5316:
case 5347:
- _globals->_player.setStrip2(-1);
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player.enableControl();
+ g_globals->_player.setStrip2(-1);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.enableControl();
break;
case 5303:
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player.enableControl();
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.enableControl();
- if (_globals->getFlag(107))
+ if (g_globals->getFlag(107))
setAction(&_action1);
else
SceneItem::display2(5300, 28);
break;
case 5304:
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player.enableControl();
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.enableControl();
- if (_globals->getFlag(106))
+ if (g_globals->getFlag(106))
setAction(&_action1);
else
SceneItem::display2(5300, 28);
break;
case 5306:
- _globals->clearFlag(67);
- _globals->_player.setStrip2(-1);
+ g_globals->clearFlag(67);
+ g_globals->_player.setStrip2(-1);
if ((RING_INVENTORY._vial._sceneNumber == 1) || (RING_INVENTORY._vial._sceneNumber == 5300))
_stripManager.start(5303, this);
@@ -2181,7 +2183,7 @@ void Scene5300::signal() {
break;
case 5309:
_hotspot5.remove();
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
break;
case 5310:
_hotspot2.fixPriority(41);
@@ -2190,11 +2192,12 @@ void Scene5300::signal() {
setAction(&_sequenceManager, this, 5315, &_hotspot2, NULL);
break;
case 5315:
- _globals->_stripNum = 5302;
- _globals->_sceneManager.changeScene(5100);
+ g_globals->_stripNum = 5302;
+ g_globals->_sceneManager.changeScene(5100);
break;
}
}
+} // End of namespace Ringworld
-} // End of namespace tSage
+} // End of namespace TsAGE
diff --git a/engines/tsage/ringworld_scenes6.h b/engines/tsage/ringworld/ringworld_scenes6.h
index 2e99f5ab87..bf353de415 100644
--- a/engines/tsage/ringworld_scenes6.h
+++ b/engines/tsage/ringworld/ringworld_scenes6.h
@@ -24,13 +24,18 @@
#define TSAGE_RINGWORLD_SCENES6_H
#include "common/scummsys.h"
-#include "tsage/ringworld_logic.h"
+#include "tsage/ringworld/ringworld_logic.h"
+#include "tsage/ringworld/ringworld_speakers.h"
#include "tsage/events.h"
#include "tsage/core.h"
#include "tsage/scenes.h"
#include "tsage/globals.h"
-namespace tSage {
+namespace TsAGE {
+
+namespace Ringworld {
+
+using namespace TsAGE;
class Scene5000 : public Scene {
/* Actions */
@@ -324,7 +329,8 @@ public:
}
};
+} // End of namespace Ringworld
-} // End of namespace tSage
+} // End of namespace TsAGE
#endif
diff --git a/engines/tsage/ringworld_scenes8.cpp b/engines/tsage/ringworld/ringworld_scenes8.cpp
index 2b329b958a..f8fb8b01e7 100644
--- a/engines/tsage/ringworld_scenes8.cpp
+++ b/engines/tsage/ringworld/ringworld_scenes8.cpp
@@ -21,12 +21,14 @@
*/
#include "graphics/cursorman.h"
-#include "tsage/ringworld_scenes8.h"
+#include "tsage/ringworld/ringworld_scenes8.h"
#include "tsage/scenes.h"
#include "tsage/tsage.h"
#include "tsage/staticres.h"
-namespace tSage {
+namespace TsAGE {
+
+namespace Ringworld {
void NamedHotspotMult::synchronize(Serializer &s) {
SceneHotspot::synchronize(s);
@@ -49,11 +51,11 @@ void SceneObject7700::synchronize(Serializer &s) {
void Scene7000::Action1::signal() {
// Quinn walks from the lander to the seaside (action6) then discuss with Skeenar
- Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene;
+ Scene7000 *scene = (Scene7000 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
setDelay(3);
break;
case 1:
@@ -67,7 +69,7 @@ void Scene7000::Action1::signal() {
scene->_object1.animate(ANIM_MODE_5, this);
scene->_object1.setPosition(Common::Point(151, 182));
scene->_object1.fixPriority(205);
- _globals->_sceneItems.push_front(&scene->_object1);
+ g_globals->_sceneItems.push_front(&scene->_object1);
break;
case 3:
scene->_object1._numFrames = 4;
@@ -80,7 +82,7 @@ void Scene7000::Action1::signal() {
setDelay(3);
break;
case 5:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
remove();
break;
}
@@ -89,25 +91,25 @@ void Scene7000::Action1::signal() {
/*--------------------------------------------------------------------------*/
void Scene7000::Action2::signal() {
- Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene;
+ Scene7000 *scene = (Scene7000 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
setDelay(3);
break;
case 1:
- _globals->_player.addMover(NULL);
- _globals->_player.setVisage(7006);
- _globals->_player.setStrip(1);
- _globals->_player.setFrame(1);
- _globals->_player.setPosition(Common::Point(_globals->_player._position.x, _globals->_player._position.y + 13));
- _globals->_player.changeZoom(68);
- _globals->_player.animate(ANIM_MODE_5, this);
+ g_globals->_player.addMover(NULL);
+ g_globals->_player.setVisage(7006);
+ g_globals->_player.setStrip(1);
+ g_globals->_player.setFrame(1);
+ g_globals->_player.setPosition(Common::Point(g_globals->_player._position.x, g_globals->_player._position.y + 13));
+ g_globals->_player.changeZoom(68);
+ g_globals->_player.animate(ANIM_MODE_5, this);
scene->_object1.remove();
break;
case 2:
- _globals->_sceneManager.changeScene(7100);
+ g_globals->_sceneManager.changeScene(7100);
remove();
break;
}
@@ -116,7 +118,7 @@ void Scene7000::Action2::signal() {
/*--------------------------------------------------------------------------*/
void Scene7000::Action3::dispatch() {
- Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene;
+ Scene7000 *scene = (Scene7000 *)g_globals->_sceneManager._scene;
Action::dispatch();
if (_actionIndex == 4)
@@ -127,7 +129,7 @@ void Scene7000::Action3::dispatch() {
void Scene7000::Action3::signal() {
// Lander is landing
- Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene;
+ Scene7000 *scene = (Scene7000 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -163,7 +165,7 @@ void Scene7000::Action3::signal() {
}
case 4:
scene->_object4.remove();
- _globals->_sceneManager.changeScene(2100);
+ g_globals->_sceneManager.changeScene(2100);
remove();
break;
}
@@ -172,11 +174,11 @@ void Scene7000::Action3::signal() {
/*--------------------------------------------------------------------------*/
void Scene7000::Action4::signal() {
- Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene;
+ Scene7000 *scene = (Scene7000 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_object1.animate(ANIM_MODE_6, this);
break;
case 1:
@@ -184,7 +186,7 @@ void Scene7000::Action4::signal() {
setDelay(300);
break;
case 2:
- _globals->_soundHandler.play(252);
+ g_globals->_soundHandler.play(252);
scene->_object1.show();
scene->_object1.setStrip(3);
scene->_object1.setFrame(1);
@@ -193,8 +195,8 @@ void Scene7000::Action4::signal() {
case 3:
scene->_object1.setStrip(4);
scene->_object1.animate(ANIM_MODE_8, 0, NULL);
- _globals->setFlag(81);
- _globals->_player.enableControl();
+ g_globals->setFlag(81);
+ g_globals->_player.enableControl();
remove();
break;
}
@@ -203,18 +205,18 @@ void Scene7000::Action4::signal() {
/*--------------------------------------------------------------------------*/
void Scene7000::Action5::signal() {
- Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene;
+ Scene7000 *scene = (Scene7000 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0: {
NpcMover *playerMover = new NpcMover();
Common::Point pt(88, 121);
- _globals->_player.addMover(playerMover, &pt, this);
+ g_globals->_player.addMover(playerMover, &pt, this);
break;
}
case 1:
- _globals->_player.checkAngle(&scene->_object1);
- _globals->_soundHandler.play(252);
+ g_globals->_player.checkAngle(&scene->_object1);
+ g_globals->_soundHandler.play(252);
scene->_object1.setStrip(2);
scene->_stripManager.start(7015, this);
break;
@@ -227,34 +229,34 @@ void Scene7000::Action5::signal() {
scene->_object1.remove();
NpcMover *mover = new NpcMover();
Common::Point pt(31, 94);
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 4: {
NpcMover *mover = new NpcMover();
Common::Point pt(11, 94);
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 5: {
- _globals->_player.fixPriority(10);
+ g_globals->_player.fixPriority(10);
NpcMover *mover = new NpcMover();
Common::Point pt(11, 89);
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 6: {
NpcMover *mover = new NpcMover();
Common::Point pt(41, 89);
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 7:
- _globals->clearFlag(36);
- _globals->clearFlag(37);
- _globals->clearFlag(72);
- _globals->clearFlag(13);
- _globals->_sceneManager.changeScene(2100);
+ g_globals->clearFlag(36);
+ g_globals->clearFlag(37);
+ g_globals->clearFlag(72);
+ g_globals->clearFlag(13);
+ g_globals->_sceneManager.changeScene(2100);
break;
}
}
@@ -265,43 +267,43 @@ void Scene7000::Action6::signal() {
// Quinn walks from the lander to the seaside
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
setDelay(3);
break;
case 1: {
NpcMover *mover = new NpcMover();
Common::Point pt(12, 91);
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 2: {
NpcMover *mover = new NpcMover();
Common::Point pt(8, 91);
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 3: {
NpcMover *mover = new NpcMover();
Common::Point pt(31, 96);
- _globals->_player.addMover(mover, &pt, this);
- _globals->_player.fixPriority(-1);
+ g_globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.fixPriority(-1);
break;
}
case 4: {
NpcMover *mover = new NpcMover();
Common::Point pt(83, 117);
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 5: {
NpcMover *mover = new NpcMover();
Common::Point pt(95, 121);
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 6:
- _globals->_player.setStrip(3);
- _globals->_player.setFrame(1);
+ g_globals->_player.setStrip(3);
+ g_globals->_player.setFrame(1);
remove();
break;
}
@@ -312,7 +314,7 @@ void Scene7000::Action6::signal() {
void Scene7000::Action7::signal() {
switch (_actionIndex++) {
case 0:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
setDelay(3);
break;
case 1:
@@ -321,33 +323,33 @@ void Scene7000::Action7::signal() {
case 2: {
NpcMover *mover = new NpcMover();
Common::Point pt(31, 94);
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 3: {
NpcMover *mover = new NpcMover();
Common::Point pt(11, 94);
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 4: {
- _globals->_player.fixPriority(10);
+ g_globals->_player.fixPriority(10);
NpcMover *mover = new NpcMover();
Common::Point pt(11, 89);
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 5: {
NpcMover *mover = new NpcMover();
Common::Point pt(41, 89);
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 6:
- if (_globals->getFlag(13))
- _globals->_sceneManager.changeScene(2280);
+ if (g_globals->getFlag(13))
+ g_globals->_sceneManager.changeScene(2280);
else
- _globals->_sceneManager.changeScene(2320);
+ g_globals->_sceneManager.changeScene(2320);
break;
}
}
@@ -365,84 +367,84 @@ void Scene7000::Hotspot1::doAction(int action) {
void Scene7000::Object1::doAction(int action) {
// Skeenar
- Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene;
+ Scene7000 *scene = (Scene7000 *)g_globals->_sceneManager._scene;
switch (action) {
case OBJECT_TRANSLATOR:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
RING_INVENTORY._translator._sceneNumber = 7000;
if ((RING_INVENTORY._waldos._sceneNumber != 7000) && (RING_INVENTORY._jar._sceneNumber != 7000)) {
scene->_sceneMode = 7004;
- scene->setAction(&scene->_sequenceManager, scene, 7004, &_globals->_player, this, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 7004, &g_globals->_player, this, NULL);
} else if (RING_INVENTORY._waldos._sceneNumber != 7000) {
scene->_sceneMode = 7011;
- scene->setAction(&scene->_sequenceManager, scene, 7010, &_globals->_player, &scene->_object1, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 7010, &g_globals->_player, &scene->_object1, NULL);
} else if (RING_INVENTORY._jar._sceneNumber != 7000) {
scene->_sceneMode = 7012;
- scene->setAction(&scene->_sequenceManager, scene, 7010, &_globals->_player, &scene->_object1, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 7010, &g_globals->_player, &scene->_object1, NULL);
} else {
scene->_sceneMode = 7015;
- scene->setAction(&scene->_sequenceManager, scene, 7017, &_globals->_player, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 7017, &g_globals->_player, NULL);
}
break;
case OBJECT_WALDOS:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
RING_INVENTORY._waldos._sceneNumber = 7000;
if (RING_INVENTORY._translator._sceneNumber == 7000) {
if (RING_INVENTORY._jar._sceneNumber == 7000) {
scene->_sceneMode = 7015;
- scene->setAction(&scene->_sequenceManager, scene, 7015, &_globals->_player, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 7015, &g_globals->_player, NULL);
} else {
scene->_sceneMode = 7006;
- scene->setAction(&scene->_sequenceManager, scene, 7006, &_globals->_player, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 7006, &g_globals->_player, NULL);
}
} else {
scene->_sceneMode = 7009;
- scene->setAction(&scene->_sequenceManager, scene, 7009, &_globals->_player, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 7009, &g_globals->_player, NULL);
}
break;
case OBJECT_JAR:
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
RING_INVENTORY._jar._sceneNumber = 7000;
if (RING_INVENTORY._translator._sceneNumber == 7000) {
if (RING_INVENTORY._waldos._sceneNumber != 7000) {
scene->_sceneMode = 7007;
- scene->setAction(&scene->_sequenceManager, scene, 7007, &_globals->_player, &scene->_object1, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 7007, &g_globals->_player, &scene->_object1, NULL);
} else {
scene->_sceneMode = 7015;
- scene->setAction(&scene->_sequenceManager, scene, 7016, &_globals->_player, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 7016, &g_globals->_player, NULL);
}
} else {
scene->_sceneMode = 7008;
- scene->setAction(&scene->_sequenceManager, scene, 7008, &_globals->_player, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 7008, &g_globals->_player, NULL);
}
break;
case CURSOR_LOOK:
- if (_globals->getFlag(81))
+ if (g_globals->getFlag(81))
SceneItem::display2(7000, 1);
else
SceneItem::display2(7000, 0);
break;
case CURSOR_USE:
- if (_globals->getFlag(81)) {
+ if (g_globals->getFlag(81)) {
RING_INVENTORY._stasisBox2._sceneNumber = 1;
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->setAction(&scene->_action5);
} else {
SceneItem::display2(7000, 5);
}
break;
case CURSOR_TALK:
- if (_globals->getFlag(81)) {
+ if (g_globals->getFlag(81)) {
RING_INVENTORY._stasisBox2._sceneNumber = 1;
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->setAction(&scene->_action5);
- } else if (_globals->getFlag(52)) {
+ } else if (g_globals->getFlag(52)) {
scene->_sceneMode = 7005;
scene->setAction(&scene->_sequenceManager, scene, 7013, NULL);
- } else if (_globals->getFlag(13)) {
+ } else if (g_globals->getFlag(13)) {
scene->_sceneMode = 7002;
scene->setAction(&scene->_sequenceManager, scene, 7014, NULL);
} else {
@@ -459,25 +461,25 @@ void Scene7000::Object1::doAction(int action) {
/*--------------------------------------------------------------------------*/
void Scene7000::dispatch() {
- Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene;
+ Scene7000 *scene = (Scene7000 *)g_globals->_sceneManager._scene;
if (!_action) {
- if (_globals->_sceneRegions.indexOf(_globals->_player._position) == 8) {
- if (!_globals->getFlag(13)) {
- _globals->_player.disableControl();
- _globals->_player.addMover(NULL);
+ if (g_globals->_sceneRegions.indexOf(g_globals->_player._position) == 8) {
+ if (!g_globals->getFlag(13)) {
+ g_globals->_player.disableControl();
+ g_globals->_player.addMover(NULL);
SceneItem::display2(7000, 3);
_sceneMode = 7001;
- setAction(&scene->_sequenceManager, this, 7001, &_globals->_player, NULL);
- } else if (!_globals->getFlag(52)) {
+ setAction(&scene->_sequenceManager, this, 7001, &g_globals->_player, NULL);
+ } else if (!g_globals->getFlag(52)) {
setAction(&_action2);
} else {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
_sceneMode = 7003;
- setAction(&scene->_sequenceManager, this, 7003, &_globals->_player, NULL);
+ setAction(&scene->_sequenceManager, this, 7003, &g_globals->_player, NULL);
}
}
- if (_globals->_sceneRegions.indexOf(_globals->_player._position) == 9)
+ if (g_globals->_sceneRegions.indexOf(g_globals->_player._position) == 9)
scene->setAction(&scene->_action7);
}
Scene::dispatch();
@@ -496,7 +498,7 @@ void Scene7000::postInit(SceneObjectList *OwnerList) {
_stripManager.addSpeaker(&_speakerQR);
_speakerSKText._npc = &_object1;
- _speakerQText._npc = &_globals->_player;
+ _speakerQText._npc = &g_globals->_player;
_object5.postInit();
_object5.setVisage(7001);
@@ -526,7 +528,7 @@ void Scene7000::postInit(SceneObjectList *OwnerList) {
_object8.setPosition(Common::Point(176, 175));
_object8.fixPriority(1);
- if (_globals->getFlag(72)) {
+ if (g_globals->getFlag(72)) {
_object3.postInit();
_object3.setVisage(5001);
_object3.setStrip2(1);
@@ -536,7 +538,7 @@ void Scene7000::postInit(SceneObjectList *OwnerList) {
_object1.postInit();
_object1.setVisage(7003);
- if (_globals->getFlag(81))
+ if (g_globals->getFlag(81))
_object1.setStrip(4);
else
_object1.setStrip(2);
@@ -544,20 +546,20 @@ void Scene7000::postInit(SceneObjectList *OwnerList) {
_object1._numFrames = 4;
_object1.changeZoom(45);
_object1.animate(ANIM_MODE_8, 0, NULL);
- _globals->_sceneItems.push_back(&_object1);
+ g_globals->_sceneItems.push_back(&_object1);
}
_soundHandler.play(251);
- if (_globals->_sceneManager._previousScene == 2100) {
- if (_globals->getFlag(72)) {
- _globals->_player.postInit();
- _globals->_player.setVisage(0);
- _globals->_player.animate(ANIM_MODE_1, NULL);
+ if (g_globals->_sceneManager._previousScene == 2100) {
+ if (g_globals->getFlag(72)) {
+ g_globals->_player.postInit();
+ g_globals->_player.setVisage(0);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
SceneObjectWrapper *wrapper = new SceneObjectWrapper();
- _globals->_player.setObjectWrapper(wrapper);
- _globals->_player.setPosition(Common::Point(57, 94));
- _globals->_player.changeZoom(-1);
- _globals->_player.fixPriority(10);
- if (_globals->getFlag(81)) {
+ g_globals->_player.setObjectWrapper(wrapper);
+ g_globals->_player.setPosition(Common::Point(57, 94));
+ g_globals->_player.changeZoom(-1);
+ g_globals->_player.fixPriority(10);
+ if (g_globals->getFlag(81)) {
setAction(&_action4);
} else {
_object1.setPosition(Common::Point(151, 182));
@@ -565,8 +567,8 @@ void Scene7000::postInit(SceneObjectList *OwnerList) {
setAction(&_action1);
}
} else {
- _globals->_soundHandler.play(250);
- _globals->setFlag(72);
+ g_globals->_soundHandler.play(250);
+ g_globals->setFlag(72);
_object3.postInit();
_object3.setVisage(5001);
@@ -576,36 +578,36 @@ void Scene7000::postInit(SceneObjectList *OwnerList) {
_object3.changeZoom(-1);
setAction(&_action3);
}
- } else if (_globals->_sceneManager._previousScene == 2280) {
- _globals->_player.postInit();
- _globals->_player.setVisage(2170);
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player.setObjectWrapper(new SceneObjectWrapper());
- _globals->_player.setPosition(Common::Point(57, 94));
- _globals->_player.changeZoom(-1);
- _globals->_player.fixPriority(10);
- _globals->_player.disableControl();
+ } else if (g_globals->_sceneManager._previousScene == 2280) {
+ g_globals->_player.postInit();
+ g_globals->_player.setVisage(2170);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.setObjectWrapper(new SceneObjectWrapper());
+ g_globals->_player.setPosition(Common::Point(57, 94));
+ g_globals->_player.changeZoom(-1);
+ g_globals->_player.fixPriority(10);
+ g_globals->_player.disableControl();
_sceneMode = 7001;
setAction(&_action6, this);
- if (!_globals->getFlag(81)) {
+ if (!g_globals->getFlag(81)) {
_object1.setPosition(Common::Point(151, 182));
_object1.changeZoom(100);
}
_object8.remove();
_object9.remove();
- } else if (_globals->_sceneManager._previousScene == 2320) {
- _globals->_player.postInit();
- _globals->_player.setVisage(0);
- _globals->_player.animate(ANIM_MODE_1, NULL);
+ } else if (g_globals->_sceneManager._previousScene == 2320) {
+ g_globals->_player.postInit();
+ g_globals->_player.setVisage(0);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
SceneObjectWrapper *wrapper = new SceneObjectWrapper();
- _globals->_player.setObjectWrapper(wrapper);
- _globals->_player.setPosition(Common::Point(57, 94));
- _globals->_player.changeZoom(-1);
- _globals->_player.fixPriority(10);
+ g_globals->_player.setObjectWrapper(wrapper);
+ g_globals->_player.setPosition(Common::Point(57, 94));
+ g_globals->_player.changeZoom(-1);
+ g_globals->_player.fixPriority(10);
_sceneMode = 7001;
setAction(&_action6, this);
} else {
- _globals->setFlag(72);
+ g_globals->setFlag(72);
_object3.postInit();
_object3.setVisage(5001);
@@ -613,18 +615,18 @@ void Scene7000::postInit(SceneObjectList *OwnerList) {
_object3.setPosition(Common::Point(307, 0));
_soundHandler.play(151);
_soundHandler.holdAt(true);
- _globals->_soundHandler.play(250);
+ g_globals->_soundHandler.play(250);
setAction(&_action3);
}
_hotspot1.setBounds(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT));
- _globals->_sceneItems.push_back(&_hotspot1);
+ g_globals->_sceneItems.push_back(&_hotspot1);
}
/*--------------------------------------------------------------------------*/
void Scene7000::signal() {
- Scene7000 *scene = (Scene7000 *)_globals->_sceneManager._scene;
+ Scene7000 *scene = (Scene7000 *)g_globals->_sceneManager._scene;
switch (_sceneMode) {
case 7001:
case 7002:
@@ -634,19 +636,19 @@ void Scene7000::signal() {
case 7007:
case 7008:
case 7009:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
break;
case 7003:
_sceneMode = 7001;
- setAction(&scene->_sequenceManager, this, 7001, &_globals->_player, NULL);
+ setAction(&scene->_sequenceManager, this, 7001, &g_globals->_player, NULL);
break;
case 7011:
_sceneMode = 7005;
- setAction(&scene->_sequenceManager, this, 7005, &_globals->_player, NULL);
+ setAction(&scene->_sequenceManager, this, 7005, &g_globals->_player, NULL);
break;
case 7012:
_sceneMode = 7005;
- setAction(&scene->_sequenceManager, this, 7012, &_globals->_player, NULL);
+ setAction(&scene->_sequenceManager, this, 7012, &g_globals->_player, NULL);
break;
case 7015:
setAction(&_action4);
@@ -661,7 +663,7 @@ void Scene7000::signal() {
*--------------------------------------------------------------------------*/
void Scene7100::Action3::signal() {
- Scene7100 *scene = (Scene7100 *)_globals->_sceneManager._scene;
+ Scene7100 *scene = (Scene7100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -681,11 +683,11 @@ void Scene7100::Action3::signal() {
}
void Scene7100::Action4::signal() {
- Scene7100 *scene = (Scene7100 *)_globals->_sceneManager._scene;
+ Scene7100 *scene = (Scene7100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- setDelay(_globals->_randomSource.getRandomNumber(1) + 1);
+ setDelay(g_globals->_randomSource.getRandomNumber(1) + 1);
break;
case 1: {
scene->_object5.setStrip(3);
@@ -709,7 +711,7 @@ void Scene7100::Action4::signal() {
}
void Scene7100::Action5::signal() {
- Scene7100 *scene = (Scene7100 *)_globals->_sceneManager._scene;
+ Scene7100 *scene = (Scene7100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -744,7 +746,7 @@ void Scene7100::Action5::signal() {
}
void Scene7100::Action6::signal() {
- Scene7100 *scene = (Scene7100 *)_globals->_sceneManager._scene;
+ Scene7100 *scene = (Scene7100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -799,7 +801,7 @@ void Scene7100::Action6::signal() {
}
void Scene7100::Action7::signal() {
- Scene7100 *scene = (Scene7100 *)_globals->_sceneManager._scene;
+ Scene7100 *scene = (Scene7100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -827,7 +829,7 @@ void Scene7100::Action7::signal() {
}
void Scene7100::Action8::signal() {
- Scene7100 *scene = (Scene7100 *)_globals->_sceneManager._scene;
+ Scene7100 *scene = (Scene7100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -925,7 +927,7 @@ void Scene7100::Action8::signal() {
}
void Scene7100::Action9::signal() {
- Scene7100 *scene = (Scene7100 *)_globals->_sceneManager._scene;
+ Scene7100 *scene = (Scene7100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -970,7 +972,7 @@ void Scene7100::Action9::signal() {
}
void Scene7100::Action10::signal() {
- Scene7100 *scene = (Scene7100 *)_globals->_sceneManager._scene;
+ Scene7100 *scene = (Scene7100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -990,7 +992,7 @@ void Scene7100::Action10::signal() {
}
void Scene7100::Action11::signal() {
- Scene7100 *scene = (Scene7100 *)_globals->_sceneManager._scene;
+ Scene7100 *scene = (Scene7100 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -999,19 +1001,19 @@ void Scene7100::Action11::signal() {
case 1: {
Common::Point pt(154, 175);
NpcMover *mover = new NpcMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
ObjectMover2 *mover2 = new ObjectMover2();
- scene->_object1.addMover(mover2, 25, 35, &_globals->_player);
+ scene->_object1.addMover(mover2, 25, 35, &g_globals->_player);
break;
}
case 2: {
Common::Point pt(700, 155);
NpcMover *mover = new NpcMover();
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 3:
- _globals->_sceneManager.changeScene(7200);
+ g_globals->_sceneManager.changeScene(7200);
remove();
break;
}
@@ -1117,14 +1119,14 @@ void Scene7100::postInit(SceneObjectList *OwnerList) {
_object25.setAction(&_action10, NULL);
// Swimmer 1
- _globals->_player.postInit();
- _globals->_player.setVisage(7101);
- _globals->_player.animate(ANIM_MODE_2, NULL);
- _globals->_player._moveDiff.x = 4;
- _globals->_player._moveDiff.y = 2;
- _globals->_player.setPosition(Common::Point(135, 135));
- _globals->_player.fixPriority(200);
- _globals->_player.disableControl();
+ g_globals->_player.postInit();
+ g_globals->_player.setVisage(7101);
+ g_globals->_player.animate(ANIM_MODE_2, NULL);
+ g_globals->_player._moveDiff.x = 4;
+ g_globals->_player._moveDiff.y = 2;
+ g_globals->_player.setPosition(Common::Point(135, 135));
+ g_globals->_player.fixPriority(200);
+ g_globals->_player.disableControl();
// Swimmer 2
_object1.postInit();
@@ -1137,7 +1139,7 @@ void Scene7100::postInit(SceneObjectList *OwnerList) {
setAction(&_action11);
_soundHandler1.play(270);
_soundHandler2.play(275);
- _globals->_soundHandler.play(270);
+ g_globals->_soundHandler.play(270);
}
/*--------------------------------------------------------------------------
* Scene 7200 - Underwater: Entering the cave
@@ -1145,7 +1147,7 @@ void Scene7100::postInit(SceneObjectList *OwnerList) {
*--------------------------------------------------------------------------*/
void Scene7200::Action1::signal() {
- Scene7200 *scene = (Scene7200 *)_globals->_sceneManager._scene;
+ Scene7200 *scene = (Scene7200 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -1157,13 +1159,13 @@ void Scene7200::Action1::signal() {
scene->_swimmer.addMover(mover1, &pt1, this);
Common::Point pt2(207, 138);
PlayerMover *mover2 = new PlayerMover();
- _globals->_player.addMover(mover2, &pt2, this);
+ g_globals->_player.addMover(mover2, &pt2, this);
break;
}
case 2:
break;
case 3:
- _globals->_sceneManager.changeScene(7300);
+ g_globals->_sceneManager.changeScene(7300);
remove();
break;
}
@@ -1172,7 +1174,7 @@ void Scene7200::Action1::signal() {
/*--------------------------------------------------------------------------*/
void Scene7200::Action2::signal() {
- Scene7200 *scene = (Scene7200 *)_globals->_sceneManager._scene;
+ Scene7200 *scene = (Scene7200 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -1286,13 +1288,13 @@ void Scene7200::postInit(SceneObjectList *OwnerList) {
_object9._numFrames = 3;
// Orange swimmer
- _globals->_player.postInit();
- _globals->_player.setVisage(7110);
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player.setObjectWrapper(new SceneObjectWrapper());
- _globals->_player.setZoom(50);
- _globals->_player.setPosition(Common::Point(-18, 16));
- _globals->_player.disableControl();
+ g_globals->_player.postInit();
+ g_globals->_player.setVisage(7110);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.setObjectWrapper(new SceneObjectWrapper());
+ g_globals->_player.setZoom(50);
+ g_globals->_player.setPosition(Common::Point(-18, 16));
+ g_globals->_player.disableControl();
_swimmer.postInit();
_swimmer.setVisage(7101);
@@ -1311,7 +1313,7 @@ void Scene7200::postInit(SceneObjectList *OwnerList) {
*--------------------------------------------------------------------------*/
void Scene7300::Action1::signal() {
- Scene7300 *scene = (Scene7300 *)_globals->_sceneManager._scene;
+ Scene7300 *scene = (Scene7300 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -1325,18 +1327,18 @@ void Scene7300::Action1::signal() {
case 4: {
NpcMover *mover = new NpcMover();
Common::Point pt(102, 122);
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 5:
- _globals->_player.setStrip(2);
- _globals->_player.setFrame(1);
- _globals->_player.animate(ANIM_MODE_5, this);
+ g_globals->_player.setStrip(2);
+ g_globals->_player.setFrame(1);
+ g_globals->_player.animate(ANIM_MODE_5, this);
break;
case 6:
- _globals->_player.setStrip(3);
- _globals->_player._numFrames = 5;
- _globals->_player.animate(ANIM_MODE_2, this);
+ g_globals->_player.setStrip(3);
+ g_globals->_player._numFrames = 5;
+ g_globals->_player.animate(ANIM_MODE_2, this);
if (RING_INVENTORY._translator._sceneNumber == 1)
scene->_stripManager.start(7310, this);
else
@@ -1344,10 +1346,10 @@ void Scene7300::Action1::signal() {
break;
case 7:
setDelay(3);
- _globals->_soundHandler.fadeOut(NULL);
+ g_globals->_soundHandler.fadeOut(NULL);
break;
case 8:
- _globals->_sceneManager.changeScene(2280);
+ g_globals->_sceneManager.changeScene(2280);
break;
}
}
@@ -1355,7 +1357,7 @@ void Scene7300::Action1::signal() {
/*--------------------------------------------------------------------------*/
void Scene7300::Action2::signal() {
- Scene7300 *scene = (Scene7300 *)_globals->_sceneManager._scene;
+ Scene7300 *scene = (Scene7300 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -1363,7 +1365,7 @@ void Scene7300::Action2::signal() {
break;
case 1:
NpcMover *mover1 = new NpcMover();
- Common::Point pt(_globals->_randomSource.getRandomNumber(3) + 203, _globals->_randomSource.getRandomNumber(3) + 96);
+ Common::Point pt(g_globals->_randomSource.getRandomNumber(3) + 203, g_globals->_randomSource.getRandomNumber(3) + 96);
scene->_object3.addMover(mover1, &pt, this);
_actionIndex = 0;
break;
@@ -1373,7 +1375,7 @@ void Scene7300::Action2::signal() {
/*--------------------------------------------------------------------------*/
void Scene7300::Action3::signal() {
- Scene7300 *scene = (Scene7300 *)_globals->_sceneManager._scene;
+ Scene7300 *scene = (Scene7300 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
@@ -1381,7 +1383,7 @@ void Scene7300::Action3::signal() {
break;
case 1:
NpcMover *mover1 = new NpcMover();
- Common::Point pt(_globals->_randomSource.getRandomNumber(5) + 76, _globals->_randomSource.getRandomNumber(5) + 78);
+ Common::Point pt(g_globals->_randomSource.getRandomNumber(5) + 76, g_globals->_randomSource.getRandomNumber(5) + 78);
scene->_object1.addMover(mover1, &pt, this);
_actionIndex = 0;
break;
@@ -1404,7 +1406,7 @@ void Scene7300::Action4::signal() {
/*--------------------------------------------------------------------------*/
void Scene7300::dispatch() {
- Scene7300 *scene = (Scene7300 *)_globals->_sceneManager._scene;
+ Scene7300 *scene = (Scene7300 *)g_globals->_sceneManager._scene;
scene->_object4.setPosition(Common::Point(scene->_object3._position.x + 15, scene->_object3._position.y + 61));
scene->_object2.setPosition(Common::Point(scene->_object1._position.x + 1, scene->_object1._position.y - 31));
@@ -1419,9 +1421,9 @@ void Scene7300::postInit(SceneObjectList *OwnerList) {
Scene::postInit();
setZoomPercents(60, 85, 200, 100);
- _globals->setFlag(52);
- _globals->setFlag(24);
- _globals->setFlag(109);
+ g_globals->setFlag(52);
+ g_globals->setFlag(24);
+ g_globals->setFlag(109);
_stripManager.addSpeaker(&_speakerPOR);
_stripManager.addSpeaker(&_speakerPOText);
@@ -1448,11 +1450,11 @@ void Scene7300::postInit(SceneObjectList *OwnerList) {
_object3._moveRate = 2;
_object3.setAction(&_action2);
- _globals->_player.postInit();
- _globals->_player.setVisage(7305);
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player.setPosition(Common::Point(-100, 100));
- _globals->_player.disableControl();
+ g_globals->_player.postInit();
+ g_globals->_player.setVisage(7305);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.setPosition(Common::Point(-100, 100));
+ g_globals->_player.disableControl();
_object1.postInit();
_object1.setVisage(7312);
@@ -1497,7 +1499,7 @@ void Scene7300::postInit(SceneObjectList *OwnerList) {
_object8._numFrames = 2;
setAction(&_action1);
- _globals->_soundHandler.play(272);
+ g_globals->_soundHandler.play(272);
}
/*--------------------------------------------------------------------------
@@ -1513,11 +1515,11 @@ void Scene7600::Action1::signal() {
case 1: {
PlayerMover *mover = new PlayerMover();
Common::Point pt(389, 57);
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 2:
- _globals->_sceneManager.changeScene(7700);
+ g_globals->_sceneManager.changeScene(7700);
break;
}
}
@@ -1532,11 +1534,11 @@ void Scene7600::Action2::signal() {
case 1: {
NpcMover *mover = new NpcMover();
Common::Point pt(-30, 195);
- _globals->_player.addMover(mover, &pt, this);
+ g_globals->_player.addMover(mover, &pt, this);
break;
}
case 2:
- _globals->_sceneManager.changeScene(2320);
+ g_globals->_sceneManager.changeScene(2320);
remove();
break;
}
@@ -1583,23 +1585,23 @@ void Scene7600::postInit(SceneObjectList *OwnerList) {
_object6.setPosition(Common::Point(379, 191));
_object6.fixPriority(1);
- _globals->_player.postInit();
- _globals->_player.setVisage(2333);
- _globals->_player.animate(ANIM_MODE_1, NULL);
- _globals->_player.setObjectWrapper(new SceneObjectWrapper());
- _globals->_player.setStrip(1);
- _globals->_player._moveDiff = Common::Point(16, 16);
- _globals->_player.changeZoom(-1);
- _globals->_player.disableControl();
-
- if (_globals->_sceneManager._previousScene == 7700) {
- _globals->_player.setPosition(Common::Point(389, 57));
+ g_globals->_player.postInit();
+ g_globals->_player.setVisage(2333);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.setObjectWrapper(new SceneObjectWrapper());
+ g_globals->_player.setStrip(1);
+ g_globals->_player._moveDiff = Common::Point(16, 16);
+ g_globals->_player.changeZoom(-1);
+ g_globals->_player.disableControl();
+
+ if (g_globals->_sceneManager._previousScene == 7700) {
+ g_globals->_player.setPosition(Common::Point(389, 57));
setAction(&_action2);
} else {
- _globals->_player.setPosition(Common::Point(-50, 195));
+ g_globals->_player.setPosition(Common::Point(-50, 195));
setAction(&_action1);
}
- _sceneBounds.center(_globals->_player._position.x, _globals->_player._position.y);
+ _sceneBounds.center(g_globals->_player._position.x, g_globals->_player._position.y);
loadScene(7600);
_soundHandler2.play(255);
_soundHandler1.play(251);
@@ -1616,11 +1618,11 @@ void Scene7700::Action1::signal() {
case 0: {
PlayerMover *mover1 = new PlayerMover();
Common::Point pt = Common::Point(fmtObj->_position.x, fmtObj->_position.y + 30);
- _globals->_player.addMover(mover1, &pt, this);
+ g_globals->_player.addMover(mover1, &pt, this);
break;
}
case 1:
- _globals->_player.checkAngle(fmtObj);
+ g_globals->_player.checkAngle(fmtObj);
if (fmtObj->_state == 0)
fmtObj->animate(ANIM_MODE_5, this);
else
@@ -1633,11 +1635,11 @@ void Scene7700::Action1::signal() {
}
void Scene7700::Action2::signal() {
- Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene;
+ Scene7700 *scene = (Scene7700 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
case 2:
- setDelay(_globals->_randomSource.getRandomNumber(60) + 60);
+ setDelay(g_globals->_randomSource.getRandomNumber(60) + 60);
break;
case 1:
scene->_prof.animate(ANIM_MODE_7, 0, NULL);
@@ -1651,7 +1653,7 @@ void Scene7700::Action2::signal() {
}
void Scene7700::Action3::signal() {
- Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene;
+ Scene7700 *scene = (Scene7700 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
scene->_object15.animate(ANIM_MODE_5, this);
@@ -1673,14 +1675,14 @@ void Scene7700::Action3::signal() {
scene->_object8._numFrames = 3;
break;
case 3:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
remove();
break;
}
}
void Scene7700::Action4::signal() {
- Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene;
+ Scene7700 *scene = (Scene7700 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 2:
scene->_object13.remove();
@@ -1699,21 +1701,21 @@ void Scene7700::Action4::signal() {
case 3:
CursorMan.showMouse(true);
SceneItem::display2(7700, 11);
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
remove();
break;
}
}
void Scene7700::Action5::signal() {
- Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene;
+ Scene7700 *scene = (Scene7700 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
- setDelay(_globals->_randomSource.getRandomNumber(240));
+ setDelay(g_globals->_randomSource.getRandomNumber(240));
break;
case 1: {
- scene->_cloud.setFrame(_globals->_randomSource.getRandomNumber(1) + 1);
- scene->_cloud.setPosition(Common::Point(133, 145 + _globals->_randomSource.getRandomNumber(54)));
+ scene->_cloud.setFrame(g_globals->_randomSource.getRandomNumber(1) + 1);
+ scene->_cloud.setPosition(Common::Point(133, 145 + g_globals->_randomSource.getRandomNumber(54)));
Common::Point pt(360, scene->_cloud._position.y);
NpcMover *mover = new NpcMover();
@@ -1725,7 +1727,7 @@ void Scene7700::Action5::signal() {
}
void Scene7700::Action6::signal() {
- Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene;
+ Scene7700 *scene = (Scene7700 *)g_globals->_sceneManager._scene;
switch (_actionIndex++) {
case 0:
setDelay(5);
@@ -1771,7 +1773,7 @@ void Scene7700::SceneHotspot2::doAction(int action) {
}
void Scene7700::SceneHotspot3::doAction(int action) {
- Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene;
+ Scene7700 *scene = (Scene7700 *)g_globals->_sceneManager._scene;
switch (action) {
case OBJECT_KEY:
@@ -1785,13 +1787,13 @@ void Scene7700::SceneHotspot3::doAction(int action) {
SceneItem::display2(7700, 53);
break;
case CURSOR_USE:
- if (!_globals->getFlag(78)) {
+ if (!g_globals->getFlag(78)) {
scene->_sceneMode = 7712;
scene->setAction(&scene->_sequenceManager, scene, 7715, NULL);
} else if (RING_INVENTORY._key._sceneNumber == 7700) {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_sceneMode = 7705;
- scene->setAction(&scene->_sequenceManager, scene, 7705, &_globals->_player, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 7705, &g_globals->_player, NULL);
}
break;
default:
@@ -1801,14 +1803,14 @@ void Scene7700::SceneHotspot3::doAction(int action) {
}
void Scene7700::SceneHotspot4::doAction(int action) {
- Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene;
+ Scene7700 *scene = (Scene7700 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(7700, 12);
break;
case CURSOR_USE:
- if (!_globals->getFlag(78)) {
+ if (!g_globals->getFlag(78)) {
scene->_sceneMode = 7712;
scene->setAction(&scene->_sequenceManager, scene, 7715, NULL);
} else {
@@ -1822,18 +1824,18 @@ void Scene7700::SceneHotspot4::doAction(int action) {
}
void Scene7700::SceneHotspot5::doAction(int action) {
- Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene;
+ Scene7700 *scene = (Scene7700 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
SceneItem::display2(7700, 28);
break;
case CURSOR_USE:
- if (_globals->getFlag(78)) {
+ if (g_globals->getFlag(78)) {
if (RING_INVENTORY._paper._sceneNumber == 7700) {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_sceneMode = 7708;
- scene->setAction(&scene->_sequenceManager, scene, 7708, &_globals->_player, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 7708, &g_globals->_player, NULL);
}
} else {
scene->_sceneMode = 7712;
@@ -1866,7 +1868,7 @@ void Scene7700::SceneItem7::doAction(int action) {
}
void Scene7700::SceneHotspot8::doAction(int action) {
- Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene;
+ Scene7700 *scene = (Scene7700 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
@@ -1892,7 +1894,7 @@ void Scene7700::SceneHotspot8::doAction(int action) {
}
void Scene7700::SceneHotspot9::doAction(int action) {
- Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene;
+ Scene7700 *scene = (Scene7700 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
@@ -1917,7 +1919,7 @@ void Scene7700::SceneHotspot9::doAction(int action) {
} else {
scene->_field97B++;
if (scene->_field97B == 3) {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->setAction(&scene->_action3);
}
}
@@ -1935,13 +1937,13 @@ void Scene7700::SceneItem10::doAction(int action) {
}
void Scene7700::Object1::doAction(int action) {
- Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene;
+ Scene7700 *scene = (Scene7700 *)g_globals->_sceneManager._scene;
if (action == CURSOR_LOOK) {
SceneItem::display2(7700, _lookLineNum);
} else if (action == CURSOR_USE) {
- if (_globals->getFlag(78)) {
- _globals->_player.disableControl();
+ if (g_globals->getFlag(78)) {
+ g_globals->_player.disableControl();
scene->setAction(&scene->_action1, this);
} else {
scene->_sceneMode = 7712;
@@ -1973,20 +1975,20 @@ void Scene7700::Object1::signal() {
} else {
_state = 0;
}
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
}
void Scene7700::Object3::doAction(int action) {
- Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene;
+ Scene7700 *scene = (Scene7700 *)g_globals->_sceneManager._scene;
if (action == CURSOR_LOOK) {
SceneItem::display2(7700, 34);
} else if (action == CURSOR_USE) {
- if (_globals->getFlag(78)) {
+ if (g_globals->getFlag(78)) {
if (scene->_object3._frame == 1) {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_sceneMode = 7707;
- scene->setAction(&scene->_sequenceManager, scene, 7707, &_globals->_player, this, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 7707, &g_globals->_player, this, NULL);
} else {
SceneItem::display2(7700, 60);
}
@@ -2000,17 +2002,17 @@ void Scene7700::Object3::doAction(int action) {
}
void Scene7700::Object7::doAction(int action) {
- Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene;
+ Scene7700 *scene = (Scene7700 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
- if (_globals->getFlag(78))
+ if (g_globals->getFlag(78))
SceneItem::display2(7700, 45);
else
SceneItem::display2(7700, 44);
break;
case CURSOR_USE:
- if (_globals->getFlag(78)) {
+ if (g_globals->getFlag(78)) {
SceneItem::display2(7701, 41);
} else {
scene->_sceneMode = 7712;
@@ -2018,10 +2020,10 @@ void Scene7700::Object7::doAction(int action) {
}
break;
case CURSOR_TALK:
- if (_globals->getFlag(78)) {
+ if (g_globals->getFlag(78)) {
SceneItem::display2(7702, 1);
} else {
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
if (_state == 0) {
_state = 1;
scene->_sceneMode = 7703;
@@ -2033,13 +2035,13 @@ void Scene7700::Object7::doAction(int action) {
}
break;
case OBJECT_STUNNER:
- if (!_globals->getFlag(78)) {
- _globals->_soundHandler.stop();
- _globals->setFlag(78);
+ if (!g_globals->getFlag(78)) {
+ g_globals->_soundHandler.stop();
+ g_globals->setFlag(78);
setAction(NULL);
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_sceneMode = 7704;
- scene->setAction(&scene->_sequenceManager, scene, 7704, &_globals->_player, this, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 7704, &g_globals->_player, this, NULL);
}
break;
default:
@@ -2049,7 +2051,7 @@ void Scene7700::Object7::doAction(int action) {
}
void Scene7700::Object8::doAction(int action) {
- Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene;
+ Scene7700 *scene = (Scene7700 *)g_globals->_sceneManager._scene;
if ((action == CURSOR_LOOK) || (action == CURSOR_USE)) {
if (_strip == 3) {
@@ -2069,10 +2071,10 @@ void Scene7700::Object8::doAction(int action) {
scene->_gfxButton._bounds.center(140, 189);
scene->_gfxButton.draw();
- _globals->_sceneItems.push_front(&scene->_sceneItem10);
- _globals->_sceneItems.push_front(&scene->_object9);
- _globals->_player._canWalk = false;
- } else if (_globals->getFlag(78)) {
+ g_globals->_sceneItems.push_front(&scene->_sceneItem10);
+ g_globals->_sceneItems.push_front(&scene->_object9);
+ g_globals->_player._canWalk = false;
+ } else if (g_globals->getFlag(78)) {
scene->_object15.postInit();
scene->_object15.setVisage(7701);
scene->_object15.setPosition(Common::Point(140, 165));
@@ -2088,11 +2090,11 @@ void Scene7700::Object8::doAction(int action) {
scene->_object19.setStrip(6);
scene->_object19.setPosition(Common::Point(140, 192));
- _globals->_sceneItems.push_front(&scene->_sceneItem10);
- _globals->_sceneItems.push_front(&scene->_sceneHotspot8);
- _globals->_sceneItems.push_front(&scene->_sceneHotspot9);
- _globals->_events.setCursor(CURSOR_WALK);
- _globals->_player._canWalk = false;
+ g_globals->_sceneItems.push_front(&scene->_sceneItem10);
+ g_globals->_sceneItems.push_front(&scene->_sceneHotspot8);
+ g_globals->_sceneItems.push_front(&scene->_sceneHotspot9);
+ g_globals->_events.setCursor(CURSOR_WALK);
+ g_globals->_player._canWalk = false;
} else {
scene->setAction(&scene->_sequenceManager, scene, 7715, NULL);
}
@@ -2102,7 +2104,7 @@ void Scene7700::Object8::doAction(int action) {
}
void Scene7700::Object9::doAction(int action) {
- Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene;
+ Scene7700 *scene = (Scene7700 *)g_globals->_sceneManager._scene;
switch (action) {
case CURSOR_LOOK:
@@ -2116,19 +2118,19 @@ void Scene7700::Object9::doAction(int action) {
break;
case OBJECT_KEY:
if (_frame == 1) {
- if (!_globals->getFlag(80)) {
+ if (!g_globals->getFlag(80)) {
scene->_object10.postInit();
scene->_object10.setVisage(7701);
scene->_object10.setStrip(4);
scene->_object10.setPosition(Common::Point(159, 136));
- _globals->_sceneItems.push_front(&scene->_object10);
+ g_globals->_sceneItems.push_front(&scene->_object10);
scene->_object10.fixPriority(240);
}
scene->_soundHandler.play(262);
scene->_object14.animate(ANIM_MODE_5, NULL);
}
- _globals->_events.setCursor(CURSOR_WALK);
+ g_globals->_events.setCursor(CURSOR_WALK);
break;
default:
SceneHotspot::doAction(action);
@@ -2136,14 +2138,14 @@ void Scene7700::Object9::doAction(int action) {
}
void Scene7700::Object10::doAction(int action) {
- Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene;
+ Scene7700 *scene = (Scene7700 *)g_globals->_sceneManager._scene;
if (action == CURSOR_LOOK) {
SceneItem::display2(7700, 50);
} else if (action == CURSOR_USE) {
- _globals->_player._canWalk = true;
+ g_globals->_player._canWalk = true;
RING_INVENTORY._translator._sceneNumber = 1;
- _globals->setFlag(80);
+ g_globals->setFlag(80);
scene->_sceneItem10.remove();
scene->_gfxButton._bounds.expandPanes();
scene->_object14.remove();
@@ -2155,7 +2157,7 @@ void Scene7700::Object10::doAction(int action) {
}
void Scene7700::Object11::doAction(int action) {
- Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene;
+ Scene7700 *scene = (Scene7700 *)g_globals->_sceneManager._scene;
switch (action) {
case OBJECT_SCANNER:
@@ -2174,18 +2176,18 @@ void Scene7700::Object11::doAction(int action) {
if (_frame != 1) {
SceneItem::display2(7701, 8);
} else {
- _globals->setFlag(49);
- _globals->_player.disableControl();
+ g_globals->setFlag(49);
+ g_globals->_player.disableControl();
scene->_sceneMode = 7706;
- scene->setAction(&scene->_sequenceManager, scene, 7706, &_globals->_player, this, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 7706, &g_globals->_player, this, NULL);
}
break;
case OBJECT_EMPTY_JAR:
RING_INVENTORY._emptyJar._sceneNumber = 0;
RING_INVENTORY._jar._sceneNumber = 1;
- _globals->_player.disableControl();
+ g_globals->_player.disableControl();
scene->_sceneMode = 7710;
- scene->setAction(&scene->_sequenceManager, scene, 7710, &_globals->_player, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 7710, &g_globals->_player, NULL);
break;
default:
SceneHotspot::doAction(action);
@@ -2193,14 +2195,14 @@ void Scene7700::Object11::doAction(int action) {
}
void Scene7700::Object12::doAction(int action) {
- Scene7700 *scene = (Scene7700 *)_globals->_sceneManager._scene;
+ Scene7700 *scene = (Scene7700 *)g_globals->_sceneManager._scene;
if (action == CURSOR_LOOK) {
SceneItem::display2(7700, 15);
} else if (action == CURSOR_USE) {
- if (_globals->getFlag(78)) {
+ if (g_globals->getFlag(78)) {
scene->_sceneMode = 7713;
- scene->setAction(&scene->_sequenceManager, scene, 7713, &_globals->_player, NULL);
+ scene->setAction(&scene->_sequenceManager, scene, 7713, &g_globals->_player, NULL);
} else {
scene->_sceneMode = 7712;
scene->setAction(&scene->_sequenceManager, scene, 7715, NULL);
@@ -2213,46 +2215,46 @@ void Scene7700::Object12::doAction(int action) {
void Scene7700::signal() {
switch (_sceneMode) {
case 7701:
- _globals->_player.fixPriority(-1);
- _globals->_player.setStrip2(-1);
- if (_globals->getFlag(78)) {
- _globals->_player.enableControl();
+ g_globals->_player.fixPriority(-1);
+ g_globals->_player.setStrip2(-1);
+ if (g_globals->getFlag(78)) {
+ g_globals->_player.enableControl();
} else {
_sceneMode = 7711;
setAction(&_sequenceManager, this, 7711, NULL);
}
break;
case 7702:
- _soundHandler.fadeOut(0);
- _globals->_sceneManager.changeScene(7600);
+ g_globals->_soundHandler.fadeOut(NULL);
+ g_globals->_sceneManager.changeScene(7600);
break;
case 7703:
case 7706:
case 7707:
case 7711:
case 7712:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
break;
case 7704:
- _globals->_soundHandler.play(256);
+ g_globals->_soundHandler.play(256);
_prof.setStrip2(4);
_prof.setFrame2(1);
_prof.setPosition(Common::Point(159, 87));
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
break;
case 7705:
RING_INVENTORY._key._sceneNumber = 1;
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
break;
case 7708:
RING_INVENTORY._paper._sceneNumber = 1;
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
break;
case 7709:
- _globals->_events.setCursor(CURSOR_USE);
+ g_globals->_events.setCursor(CURSOR_USE);
break;
case 7710:
- _globals->_player.enableControl();
+ g_globals->_player.enableControl();
SceneItem::display2(7700, 62);
break;
case 7713:
@@ -2267,23 +2269,23 @@ void Scene7700::signal() {
void Scene7700::process(Event &event) {
Scene::process(event);
- if (contains<SceneItem *>(_globals->_sceneItems, &_sceneItem10)) {
+ if (contains<SceneItem *>(g_globals->_sceneItems, &_sceneItem10)) {
if (_gfxButton.process(event)) {
_sceneItem10.remove();
_object15.remove();
_object9.remove();
- if (_globals->_sceneObjects->contains(&_object10))
+ if (g_globals->_sceneObjects->contains(&_object10))
_object10.remove();
- if (_globals->_sceneObjects->contains(&_object14))
+ if (g_globals->_sceneObjects->contains(&_object14))
_object14.remove();
_object19.remove();
_gfxButton._bounds.expandPanes();
- _globals->_player._canWalk = true;
+ g_globals->_player._canWalk = true;
}
}
if ((event.eventType == EVENT_KEYPRESS) && (event.kbd.keycode == Common::KEYCODE_p)) {
event.handled = true;
- if (!_globals->_sceneObjects->contains(&_easterEgg1)) {
+ if (!g_globals->_sceneObjects->contains(&_easterEgg1)) {
_easterEgg1.postInit();
_easterEgg1.setVisage(7708);
_easterEgg1.setPosition(Common::Point(163, 50));
@@ -2295,15 +2297,15 @@ void Scene7700::process(Event &event) {
}
void Scene7700::dispatch() {
- if ((_globals->_sceneRegions.indexOf(_globals->_player._position) == 6) || (_globals->_player._position.x < 10))
- _globals->_player.changeZoom(100 - ((_globals->_player._position.y - 68) / 2));
+ if ((g_globals->_sceneRegions.indexOf(g_globals->_player._position) == 6) || (g_globals->_player._position.x < 10))
+ g_globals->_player.changeZoom(100 - ((g_globals->_player._position.y - 68) / 2));
else
- _globals->_player.changeZoom(-1);
+ g_globals->_player.changeZoom(-1);
- if ((_action == 0) && (_globals->_sceneRegions.indexOf(_globals->_player._position) == 30)) {
- _globals->_player.disableControl();
+ if ((_action == 0) && (g_globals->_sceneRegions.indexOf(g_globals->_player._position) == 30)) {
+ g_globals->_player.disableControl();
_sceneMode = 7702;
- setAction(&_sequenceManager, this, 7702, &_globals->_player, NULL);
+ setAction(&_sequenceManager, this, 7702, &g_globals->_player, NULL);
}
Scene::dispatch();
}
@@ -2312,33 +2314,33 @@ void Scene7700::postInit(SceneObjectList *OwnerList) {
loadScene(7700);
Scene::postInit();
setZoomPercents(100, 80, 200, 100);
- _globals->setFlag(53);
+ g_globals->setFlag(53);
_field97B = 0;
_field979 = 0;
_field977 = 0;
_stripManager.addSpeaker(&_speakerEText);
_stripManager.addSpeaker(&_speakerQText);
- _speakerQText._npc = &_globals->_player;
+ _speakerQText._npc = &g_globals->_player;
_speakerEText._npc = &_prof;
- _globals->_player.postInit();
- _globals->_player.setVisage(4201);
- _globals->_player.animate(ANIM_MODE_1, NULL);
+ g_globals->_player.postInit();
+ g_globals->_player.setVisage(4201);
+ g_globals->_player.animate(ANIM_MODE_1, NULL);
SceneObjectWrapper *wrapper = new SceneObjectWrapper();
- _globals->_player.setObjectWrapper(wrapper);
- _globals->_player.setPosition(Common::Point(-19, 68));
- _globals->_player.setStrip2(7);
- _globals->_player.fixPriority(95);
- _globals->_player.changeZoom(80);
- _globals->_player._moveDiff.x = 6;
- _globals->_player._moveDiff.y = 3;
- _globals->_player.disableControl();
+ g_globals->_player.setObjectWrapper(wrapper);
+ g_globals->_player.setPosition(Common::Point(-19, 68));
+ g_globals->_player.setStrip2(7);
+ g_globals->_player.fixPriority(95);
+ g_globals->_player.changeZoom(80);
+ g_globals->_player._moveDiff.x = 6;
+ g_globals->_player._moveDiff.y = 3;
+ g_globals->_player.disableControl();
_prof.postInit();
_prof.setVisage(7706);
- if (_globals->getFlag(78)) {
+ if (g_globals->getFlag(78)) {
_prof.setStrip2(4);
_prof.fixPriority(80);
_prof.setPosition(Common::Point(159, 87));
@@ -2412,7 +2414,7 @@ void Scene7700::postInit(SceneObjectList *OwnerList) {
_cork.setVisage(7703);
_cork.setPosition(Common::Point(32, 128));
- if (_globals->getFlag(49))
+ if (g_globals->getFlag(49))
_cork.setFrame(_cork.getFrameCount());
if (RING_INVENTORY._emptyJar._sceneNumber == 7700) {
@@ -2420,7 +2422,7 @@ void Scene7700::postInit(SceneObjectList *OwnerList) {
_emptyJar.setVisage(7700);
_emptyJar.setStrip(8);
_emptyJar.setPosition(Common::Point(189, 48));
- _globals->_sceneItems.addItems(&_emptyJar, NULL);
+ g_globals->_sceneItems.addItems(&_emptyJar, NULL);
}
_sceneHotspot1._sceneRegionId = 28;
_sceneHotspot2._sceneRegionId = 6;
@@ -2511,16 +2513,16 @@ void Scene7700::postInit(SceneObjectList *OwnerList) {
_sceneHotspot36._useLineNum = 39;
_sceneHotspot36._lookLineNum = 42;
- _globals->_sceneItems.addItems(&_prof, &_sceneHotspot35, &_object8, &_sceneHotspot34, &_sceneHotspot33, &_sceneHotspot32, NULL);
- _globals->_sceneItems.addItems(&_sceneHotspot31, &_sceneHotspot30, &_sceneHotspot29, &_sceneHotspot5, &_sceneHotspot28, &_sceneHotspot27, NULL);
- _globals->_sceneItems.addItems(&_sceneHotspot26, &_sceneHotspot25, &_sceneHotspot24, &_sceneHotspot23, &_sceneHotspot22, &_sceneHotspot21, NULL);
- _globals->_sceneItems.addItems(&_sceneHotspot20, &_sceneHotspot19, &_sceneHotspot18, &_sceneHotspot17, &_sceneHotspot4, &_sceneHotspot3, NULL);
- _globals->_sceneItems.addItems(&_sceneHotspot16, &_sceneHotspot15, &_sceneHotspot2, &_sceneHotspot14, &_cork, &_sceneHotspot1, NULL);
- _globals->_sceneItems.addItems(&_sceneHotspot13, &_sceneHotspot12, &_sceneHotspot11, &_object2, &_object1, &_object3, NULL);
- _globals->_sceneItems.addItems(&_object6, &_object5, &_object4, &_sceneHotspot6, &_sceneHotspot36, &_sceneItem7, NULL);
+ g_globals->_sceneItems.addItems(&_prof, &_sceneHotspot35, &_object8, &_sceneHotspot34, &_sceneHotspot33, &_sceneHotspot32, NULL);
+ g_globals->_sceneItems.addItems(&_sceneHotspot31, &_sceneHotspot30, &_sceneHotspot29, &_sceneHotspot5, &_sceneHotspot28, &_sceneHotspot27, NULL);
+ g_globals->_sceneItems.addItems(&_sceneHotspot26, &_sceneHotspot25, &_sceneHotspot24, &_sceneHotspot23, &_sceneHotspot22, &_sceneHotspot21, NULL);
+ g_globals->_sceneItems.addItems(&_sceneHotspot20, &_sceneHotspot19, &_sceneHotspot18, &_sceneHotspot17, &_sceneHotspot4, &_sceneHotspot3, NULL);
+ g_globals->_sceneItems.addItems(&_sceneHotspot16, &_sceneHotspot15, &_sceneHotspot2, &_sceneHotspot14, &_cork, &_sceneHotspot1, NULL);
+ g_globals->_sceneItems.addItems(&_sceneHotspot13, &_sceneHotspot12, &_sceneHotspot11, &_object2, &_object1, &_object3, NULL);
+ g_globals->_sceneItems.addItems(&_object6, &_object5, &_object4, &_sceneHotspot6, &_sceneHotspot36, &_sceneItem7, NULL);
_sceneMode = 7701;
- setAction(&_sequenceManager, this, 7701, &_globals->_player, NULL);
+ setAction(&_sequenceManager, this, 7701, &g_globals->_player, NULL);
_soundHandler.play(256);
}
@@ -2542,4 +2544,6 @@ void Scene7700::synchronize(Serializer &s) {
}
}
-} // End of namespace tSage
+} // End of namespace Ringworld
+
+} // End of namespace TsAGE
diff --git a/engines/tsage/ringworld_scenes8.h b/engines/tsage/ringworld/ringworld_scenes8.h
index fe9560d9d8..84178c36f9 100644
--- a/engines/tsage/ringworld_scenes8.h
+++ b/engines/tsage/ringworld/ringworld_scenes8.h
@@ -24,13 +24,18 @@
#define TSAGE_RINGWORLD_SCENES8_H
#include "common/scummsys.h"
-#include "tsage/ringworld_logic.h"
+#include "tsage/ringworld/ringworld_logic.h"
+#include "tsage/ringworld/ringworld_speakers.h"
#include "tsage/events.h"
#include "tsage/core.h"
#include "tsage/scenes.h"
#include "tsage/globals.h"
-namespace tSage {
+namespace TsAGE {
+
+namespace Ringworld {
+
+using namespace TsAGE;
class NamedHotspotMult : public SceneHotspot {
public:
@@ -485,6 +490,8 @@ public:
virtual void synchronize(Serializer &s);
};
-} // End of namespace tSage
+} // End of namespace Ringworld
+
+} // End of namespace TsAGE
#endif
diff --git a/engines/tsage/ringworld_logic.cpp b/engines/tsage/ringworld/ringworld_speakers.cpp
index 58501172af..dc80df40a3 100644
--- a/engines/tsage/ringworld_logic.cpp
+++ b/engines/tsage/ringworld/ringworld_speakers.cpp
@@ -20,313 +20,15 @@
*
*/
-#include "common/config-manager.h"
-#include "common/translation.h"
-#include "gui/saveload.h"
-#include "tsage/ringworld_logic.h"
+#include "tsage/ringworld/ringworld_speakers.h"
#include "tsage/scenes.h"
#include "tsage/tsage.h"
+#include "tsage/graphics.h"
#include "tsage/staticres.h"
-#include "tsage/ringworld_demo.h"
-#include "tsage/ringworld_scenes1.h"
-#include "tsage/ringworld_scenes2.h"
-#include "tsage/ringworld_scenes3.h"
-#include "tsage/ringworld_scenes4.h"
-#include "tsage/ringworld_scenes5.h"
-#include "tsage/ringworld_scenes6.h"
-#include "tsage/ringworld_scenes8.h"
-#include "tsage/ringworld_scenes10.h"
-
-namespace tSage {
-
-Scene *RingworldGame::createScene(int sceneNumber) {
- switch (sceneNumber) {
- /* Scene group 1 */
- // Kziniti Palace (Introduction)
- case 10: return new Scene10();
- // Outer Space (Introduction)
- case 15: return new Scene15();
- // Cut-scenes for Ch'mee house in distance
- case 20: return new Scene20();
- // Outside Ch'mee residence
- case 30: return new Scene30();
- // Chmeee Home
- case 40: return new Scene40();
- // By Flycycles
- case 50: return new Scene50();
- // Flycycle controls
- case 60: return new Scene60();
- // Shipyard Entrance
- case 90: return new Scene90();
- // Ship Close-up
- case 95: return new Scene95();
- // Sunflower navigation sequence
- case 6100: return new Scene6100();
-
- /* Scene group 2 */
- // Title screen
- case 1000: return new Scene1000();
- // Fleeing planet cutscene
- case 1001: return new Scene1001();
- // Unused
- case 1250: return new Scene1250();
- // Ringworld Wall
- case 1400: return new Scene1400();
- // Ringworld Space-port
- case 1500: return new Scene1500();
-
- /* Scene group 3 - Part #1 */
- // Cockpit cutscenes
- case 2000: return new Scene2000();
- // Starcraft - Cockpit
- case 2100: return new Scene2100();
- // Encyclopedia
- case 2120: return new Scene2120();
- // Starcraft - Level 2
- case 2150: return new Scene2150();
- // Starcraft - AutoDoc
- case 2200: return new Scene2200();
- // Stasis Field Map
- case 2222: return new Scene2222();
- // Starcraft - Quinn's Room
- case 2230: return new Scene2230();
-
- /* Scene group 3 - Part #2 */
- // Starcraft - Storage Room
- case 2280: return new Scene2280();
- // Starcraft - Hanger Bay
- case 2300: return new Scene2300();
- // Starcraft - Copy Protection Screen
- case 2310: return new Scene2310();
- // Starcraft - Lander Bay
- case 2320: return new Scene2320();
- // Scene 2400 - Descending in Lander
- case 2400: return new Scene2400();
-
- /* Scene group 4 */
- // Ringworld Scan
- case 3500: return new Scene3500();
- // Remote Viewer
- case 3700: return new Scene3700();
-
- /* Scene group 5 */
- // Village
- case 4000: return new Scene4000();
- // Village - Outside Lander
- case 4010: return new Scene4010();
- // Village - Puzzle Board
- case 4025: return new Scene4025();
- // Village - Temple Antechamber
- case 4045: return new Scene4045();
- // Village - Temple
- case 4050: return new Scene4050();
- // Village - Hut
- case 4100: return new Scene4100();
- // Village - Bedroom
- case 4150: return new Scene4150();
- // Village - Near Slaver Ship
- case 4250: return new Scene4250();
- // Village - Slaver Ship
- case 4300: return new Scene4300();
- // Village - Slaver Ship Keypad
- case 4301: return new Scene4301();
-
- /* Scene group 6 */
- // Caverns - Entrance
- case 5000: return new Scene5000();
- // Caverns
- case 5100: return new Scene5100();
- // Caverns - Throne-room
- case 5200: return new Scene5200();
- // Caverns - Pit
- case 5300: return new Scene5300();
-
- /* Scene group 8 */
- // Landing near beach
- case 7000: return new Scene7000();
- // Underwater: swimming
- case 7100: return new Scene7100();
- // Underwater: Entering the cave
- case 7200: return new Scene7200();
- // Underwater: Lord Poria
- case 7300: return new Scene7300();
- // Floating Buildings: Outside
- case 7600: return new Scene7600();
- // Floating Buildings: In the lab
- case 7700: return new Scene7700();
-
- /* Scene group 10 */
- // Near beach: Slave washing clothes
- case 9100: return new Scene9100();
- // Castle: Outside the bulwarks
- case 9150: return new Scene9150();
- // Castle: Near the fountain
- case 9200: return new Scene9200();
- // Castle: In front of a large guarded door
- case 9300: return new Scene9300();
- // Castle: In a hallway
- case 9350: return new Scene9350();
- // Castle: In a hallway
- case 9360: return new Scene9360();
- // Castle: Black-Smith room
- case 9400: return new Scene9400();
- // Castle: Dining room
- case 9450: return new Scene9450();
- // Castle: Bedroom
- case 9500: return new Scene9500();
- // Castle: Balcony
- case 9700: return new Scene9700();
- // Castle: In the garden
- case 9750: return new Scene9750();
- // Castle: Dressing room
- case 9850: return new Scene9850();
- // Ending
- case 9900: return new Scene9900();
- // Space travel
- case 9999: return new Scene9999();
- default:
- error("Unknown scene number - %d", sceneNumber);
- break;
- }
-}
-
-/*--------------------------------------------------------------------------*/
-
-DisplayHotspot::DisplayHotspot(int regionId, ...) {
- _sceneRegionId = regionId;
-
- // Load up the actions
- va_list va;
- va_start(va, regionId);
-
- int param = va_arg(va, int);
- while (param != LIST_END) {
- _actions.push_back(param);
- param = va_arg(va, int);
- }
-
- va_end(va);
-}
-
-bool DisplayHotspot::performAction(int action) {
- for (uint i = 0; i < _actions.size(); i += 3) {
- if (_actions[i] == action) {
- display(_actions[i + 1], _actions[i + 2], SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
- return true;
- }
- }
-
- return false;
-}
-
-/*--------------------------------------------------------------------------*/
-
-DisplayObject::DisplayObject(int firstAction, ...) {
- // Load up the actions
- va_list va;
- va_start(va, firstAction);
-
- int param = firstAction;
- while (param != LIST_END) {
- _actions.push_back(param);
- param = va_arg(va, int);
- }
-
- va_end(va);
-}
-
-bool DisplayObject::performAction(int action) {
- for (uint i = 0; i < _actions.size(); i += 3) {
- if (_actions[i] == action) {
- display(_actions[i + 1], _actions[i + 2], SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
- return true;
- }
- }
-
- return false;
-}
-
-/*--------------------------------------------------------------------------*/
-
-SceneArea::SceneArea() {
- _savedArea = NULL;
- _pt.x = _pt.y = 0;
-}
-
-SceneArea::~SceneArea() {
- delete _savedArea;
-}
-
-void SceneArea::setup(int resNum, int rlbNum, int subNum, int actionId) {
- _resNum = resNum;
- _rlbNum = rlbNum;
- _subNum = subNum;
- _actionId = actionId;
-
- _surface = surfaceFromRes(resNum, rlbNum, subNum);
-}
-
-void SceneArea::draw2() {
- _surface.draw(Common::Point(_bounds.left, _bounds.top));
-}
-
-void SceneArea::display() {
- _bounds.left = _pt.x - (_surface.getBounds().width() / 2);
- _bounds.top = _pt.y + 1 - _surface.getBounds().height();
- _bounds.setWidth(_surface.getBounds().width());
- _bounds.setHeight(_surface.getBounds().height());
-
- _savedArea = Surface_getArea(_globals->_gfxManagerInstance.getSurface(), _bounds);
- draw2();
-}
-
-void SceneArea::restore() {
- assert(_savedArea);
- _savedArea->draw(Common::Point(_bounds.left, _bounds.top));
- delete _savedArea;
- _savedArea = NULL;
-}
-
-void SceneArea::draw(bool flag) {
- _surface = surfaceFromRes(_resNum, _rlbNum, flag ? _subNum + 1 : _subNum);
- _surface.draw(Common::Point(_bounds.left, _bounds.top));
-}
-
-void SceneArea::wait() {
- // Wait until a mouse or keypress
- Event event;
- while (!_vm->getEventManager()->shouldQuit() && !_globals->_events.getEvent(event)) {
- g_system->updateScreen();
- g_system->delayMillis(10);
- }
+namespace TsAGE {
- SynchronizedList<SceneItem *>::iterator ii;
- for (ii = _globals->_sceneItems.begin(); ii != _globals->_sceneItems.end(); ++ii) {
- SceneItem *sceneItem = *ii;
- if (sceneItem->contains(event.mousePos)) {
- sceneItem->doAction(_actionId);
- break;
- }
- }
-
- _globals->_events.setCursor(CURSOR_ARROW);
-}
-
-void SceneArea::synchronize(Serializer &s) {
- if (s.getVersion() >= 2)
- SavedObject::synchronize(s);
-
- s.syncAsSint16LE(_pt.x);
- s.syncAsSint16LE(_pt.y);
- s.syncAsSint32LE(_resNum);
- s.syncAsSint32LE(_rlbNum);
- s.syncAsSint32LE(_subNum);
- s.syncAsSint32LE(_actionId);
- _bounds.synchronize(s);
-}
-
-/*--------------------------------------------------------------------------*/
+namespace Ringworld {
SpeakerGText::SpeakerGText() {
_speakerName = "GTEXT";
@@ -349,7 +51,7 @@ void SpeakerGText::setText(const Common::String &msg) {
// Set the text
Rect textRect;
- _globals->gfxManager()._font.getStringBounds(msg.c_str(), textRect, _textWidth);
+ g_globals->gfxManager()._font.getStringBounds(msg.c_str(), textRect, _textWidth);
textRect.center(_sceneObject._position.x, _sceneObject._position.y);
_textPos.x = textRect.left;
Speaker::setText(msg);
@@ -372,13 +74,13 @@ SpeakerPOR::SpeakerPOR() {
void SpeakerPOR::SpeakerAction1::signal(){
switch (_actionIndex++) {
case 0:
- setDelay(_globals->_randomSource.getRandomNumber(60) + 60);
+ setDelay(g_globals->_randomSource.getRandomNumber(60) + 60);
break;
case 1:
static_cast<SceneObject *>(_owner)->animate(ANIM_MODE_5, this, NULL);
break;
case 2:
- setDelay(_globals->_randomSource.getRandomNumber(10));
+ setDelay(g_globals->_randomSource.getRandomNumber(10));
_actionIndex = 0;
break;
default:
@@ -1198,293 +900,6 @@ void SpeakerBatR::setText(const Common::String &msg) {
Speaker::setText(msg);
}
-/*--------------------------------------------------------------------------*/
-
-RingworldInvObjectList::RingworldInvObjectList() :
- _stunner(2280, 1, 2, OBJECT_STUNNER, "This is your stunner."),
- _scanner(1, 1, 3, OBJECT_SCANNER, "A combination scanner comm unit."),
- _stasisBox(5200, 1, 4, OBJECT_STASIS_BOX, "A stasis box."),
- _infoDisk(40, 1, 1, OBJECT_INFODISK, "The infodisk you took from the assassin."),
- _stasisNegator(0, 2, 2, OBJECT_STASIS_NEGATOR, "The stasis field negator."),
- _keyDevice(4250, 1, 6, OBJECT_KEY_DEVICE, "A magnetic key device."),
- _medkit(2280, 1, 7, OBJECT_MEDKIT, "Your medkit."),
- _ladder(4100, 1, 8, OBJECT_LADDER, "The chief's ladder."),
- _rope(4150, 1, 9, OBJECT_ROPE, "The chief's rope."),
- _key(7700, 1, 11, OBJECT_KEY, "A key."),
- _translator(7700, 1, 13, OBJECT_TRANSLATOR, "The dolphin translator box."),
- _ale(2150, 1, 10, OBJECT_ALE, "A bottle of ale."),
- _paper(7700, 1, 12, OBJECT_PAPER, "A slip of paper with the numbers 2,4, and 3 written on it."),
- _waldos(0, 1, 14, OBJECT_WALDOS, "A pair of waldos from the ruined probe."),
- _stasisBox2(8100, 1, 4, OBJECT_STASIS_BOX2, "A stasis box."),
- _ring(8100, 2, 5, OBJECT_RING, "This is a signet ring sent to you by Louis Wu."),
- _cloak(9850, 2, 6, OBJECT_CLOAK, "A fine silk cloak."),
- _tunic(9450, 2, 7, OBJECT_TUNIC, "The patriarch's soiled tunic."),
- _candle(9500, 2, 8, OBJECT_CANDLE, "A tallow candle."),
- _straw(9400, 2, 9, OBJECT_STRAW, "Clean, dry straw."),
- _scimitar(9850, 1, 18, OBJECT_SCIMITAR, "A scimitar from the Patriarch's closet."),
- _sword(9850, 1, 17, OBJECT_SWORD, "A short sword from the Patriarch's closet."),
- _helmet(9500, 2, 4, OBJECT_HELMET, "Some type of helmet."),
- _items(4300, 2, 10, OBJECT_ITEMS, "Two interesting items from the Tnuctipun vessel."),
- _concentrator(4300, 2, 11, OBJECT_CONCENTRATOR, "The Tnuctipun anti-matter concentrator contained in a stasis field."),
- _nullifier(5200, 2, 12, OBJECT_NULLIFIER, "A purported neural wave nullifier."),
- _peg(4045, 2, 16, OBJECT_PEG, "A peg with a symbol."),
- _vial(5100, 2, 17, OBJECT_VIAL, "A vial of the bat creatures anti-pheromone drug."),
- _jacket(9850, 3, 1, OBJECT_JACKET, "A natty padded jacket."),
- _tunic2(9850, 3, 2, OBJECT_TUNIC2, "A very hairy tunic."),
- _bone(5300, 3, 5, OBJECT_BONE, "A very sharp bone."),
- _jar(7700, 3, 4, OBJECT_JAR, "An jar filled with a green substance."),
- _emptyJar(7700, 3, 3, OBJECT_EMPTY_JAR, "An empty jar.") {
-
- // Add the items to the list
- _itemList.push_back(&_stunner);
- _itemList.push_back(&_scanner);
- _itemList.push_back(&_stasisBox);
- _itemList.push_back(&_infoDisk);
- _itemList.push_back(&_stasisNegator);
- _itemList.push_back(&_keyDevice);
- _itemList.push_back(&_medkit);
- _itemList.push_back(&_ladder);
- _itemList.push_back(&_rope);
- _itemList.push_back(&_key);
- _itemList.push_back(&_translator);
- _itemList.push_back(&_ale);
- _itemList.push_back(&_paper);
- _itemList.push_back(&_waldos);
- _itemList.push_back(&_stasisBox2);
- _itemList.push_back(&_ring);
- _itemList.push_back(&_cloak);
- _itemList.push_back(&_tunic);
- _itemList.push_back(&_candle);
- _itemList.push_back(&_straw);
- _itemList.push_back(&_scimitar);
- _itemList.push_back(&_sword);
- _itemList.push_back(&_helmet);
- _itemList.push_back(&_items);
- _itemList.push_back(&_concentrator);
- _itemList.push_back(&_nullifier);
- _itemList.push_back(&_peg);
- _itemList.push_back(&_vial);
- _itemList.push_back(&_jacket);
- _itemList.push_back(&_tunic2);
- _itemList.push_back(&_bone);
- _itemList.push_back(&_jar);
- _itemList.push_back(&_emptyJar);
-
- _selectedItem = NULL;
-}
-
-/*--------------------------------------------------------------------------*/
-
-void RingworldGame::restartGame() {
- if (MessageDialog::show(RESTART_MSG, CANCEL_BTN_STRING, RESTART_BTN_STRING) == 1)
- _globals->_game->restart();
-}
-
-void RingworldGame::saveGame() {
- if (!_vm->canSaveGameStateCurrently())
- MessageDialog::show(SAVING_NOT_ALLOWED_MSG, OK_BTN_STRING);
- else {
- // Show the save dialog
- handleSaveLoad(true, _globals->_sceneHandler._saveGameSlot, _globals->_sceneHandler._saveName);
- }
-}
-
-void RingworldGame::restoreGame() {
- if (!_vm->canLoadGameStateCurrently())
- MessageDialog::show(RESTORING_NOT_ALLOWED_MSG, OK_BTN_STRING);
- else {
- // Show the load dialog
- handleSaveLoad(false, _globals->_sceneHandler._loadGameSlot, _globals->_sceneHandler._saveName);
- }
-}
-
-void RingworldGame::quitGame() {
- if (MessageDialog::show(QUIT_CONFIRM_MSG, CANCEL_BTN_STRING, QUIT_BTN_STRING) == 1)
- _vm->quitGame();
-}
-
-void RingworldGame::handleSaveLoad(bool saveFlag, int &saveSlot, Common::String &saveName) {
- const EnginePlugin *plugin = 0;
- EngineMan.findGame(_vm->getGameId(), &plugin);
- GUI::SaveLoadChooser *dialog;
- if (saveFlag)
- dialog = new GUI::SaveLoadChooser(_("Save game:"), _("Save"));
- else
- dialog = new GUI::SaveLoadChooser(_("Load game:"), _("Load"));
-
- dialog->setSaveMode(saveFlag);
-
- saveSlot = dialog->runModalWithPluginAndTarget(plugin, ConfMan.getActiveDomainName());
- saveName = dialog->getResultString();
-
- delete dialog;
-}
-
-void RingworldGame::start() {
- // Set some default flags
- _globals->setFlag(12);
- _globals->setFlag(34);
-
- // Set the screen to scroll in response to the player moving off-screen
- _globals->_scrollFollower = &_globals->_player;
-
- // Set the object's that will be in the player's inventory by default
- RING_INVENTORY._stunner._sceneNumber = 1;
- RING_INVENTORY._scanner._sceneNumber = 1;
- RING_INVENTORY._ring._sceneNumber = 1;
-
- int slot = -1;
-
- if (ConfMan.hasKey("save_slot")) {
- slot = ConfMan.getInt("save_slot");
- Common::String file = _vm->generateSaveName(slot);
- Common::InSaveFile *in = _vm->_system->getSavefileManager()->openForLoading(file);
- if (in)
- delete in;
- else
- slot = -1;
- }
-
- if (slot >= 0)
- _globals->_sceneHandler._loadGameSlot = slot;
- else
- // Switch to the title screen
- _globals->_sceneManager.setNewScene(1000);
-
- _globals->_events.showCursor();
-}
-
-void RingworldGame::restart() {
- _globals->_scenePalette.clearListeners();
- _globals->_soundHandler.stop();
-
- // Reset the flags
- _globals->reset();
- _globals->setFlag(34);
-
- // Clear save/load slots
- _globals->_sceneHandler._saveGameSlot = -1;
- _globals->_sceneHandler._loadGameSlot = -1;
-
- _globals->_stripNum = 0;
- _globals->_events.setCursor(CURSOR_WALK);
-
- // Reset item properties
- RING_INVENTORY._stunner._sceneNumber = 1;
- RING_INVENTORY._scanner._sceneNumber = 1;
- RING_INVENTORY._stasisBox._sceneNumber = 5200;
- RING_INVENTORY._infoDisk._sceneNumber = 40;
- RING_INVENTORY._stasisNegator._sceneNumber = 0;
- RING_INVENTORY._keyDevice._sceneNumber = 0;
- RING_INVENTORY._medkit._sceneNumber = 2280;
- RING_INVENTORY._ladder._sceneNumber = 4100;
- RING_INVENTORY._rope._sceneNumber = 4150;
- RING_INVENTORY._key._sceneNumber = 7700;
- RING_INVENTORY._translator._sceneNumber = 2150;
- RING_INVENTORY._paper._sceneNumber = 7700;
- RING_INVENTORY._waldos._sceneNumber = 0;
- RING_INVENTORY._ring._sceneNumber = 1;
- RING_INVENTORY._stasisBox2._sceneNumber = 8100;
- RING_INVENTORY._cloak._sceneNumber = 9850;
- RING_INVENTORY._tunic._sceneNumber = 9450;
- RING_INVENTORY._candle._sceneNumber = 9500;
- RING_INVENTORY._straw._sceneNumber = 9400;
- RING_INVENTORY._scimitar._sceneNumber = 9850;
- RING_INVENTORY._sword._sceneNumber = 9850;
- RING_INVENTORY._helmet._sceneNumber = 9500;
- RING_INVENTORY._items._sceneNumber = 4300;
- RING_INVENTORY._concentrator._sceneNumber = 4300;
- RING_INVENTORY._nullifier._sceneNumber = 4300;
- RING_INVENTORY._peg._sceneNumber = 4045;
- RING_INVENTORY._vial._sceneNumber = 5100;
- RING_INVENTORY._jacket._sceneNumber = 9850;
- RING_INVENTORY._tunic2._sceneNumber = 9850;
- RING_INVENTORY._bone._sceneNumber = 5300;
- RING_INVENTORY._jar._sceneNumber = 7700;
- RING_INVENTORY._emptyJar._sceneNumber = 7700;
- RING_INVENTORY._selectedItem = NULL;
-
- // Change to the first game scene
- _globals->_sceneManager.changeScene(30);
-}
-
-void RingworldGame::endGame(int resNum, int lineNum) {
- _globals->_events.setCursor(CURSOR_WALK);
- Common::String msg = _resourceManager->getMessage(resNum, lineNum);
- bool savesExist = _saver->savegamesExist();
-
- if (!savesExist) {
- // No savegames exist, so prompt the user to restart or quit
- if (MessageDialog::show(msg, QUIT_BTN_STRING, RESTART_BTN_STRING) == 0)
- _vm->quitGame();
- else
- restart();
- } else {
- // Savegames exist, so prompt for Restore/Restart
- bool breakFlag;
- do {
- if (_vm->shouldQuit()) {
- breakFlag = true;
- } else if (MessageDialog::show(msg, RESTART_BTN_STRING, RESTORE_BTN_STRING) == 0) {
- restart();
- breakFlag = true;
- } else {
- handleSaveLoad(false, _globals->_sceneHandler._loadGameSlot, _globals->_sceneHandler._saveName);
- breakFlag = _globals->_sceneHandler._loadGameSlot >= 0;
- }
- } while (!breakFlag);
- }
-
- _globals->_events.setCursorFromFlag();
-}
-
-void RingworldGame::processEvent(Event &event) {
- if (event.eventType == EVENT_KEYPRESS) {
- switch (event.kbd.keycode) {
- case Common::KEYCODE_F1:
- // F1 - Help
- MessageDialog::show(HELP_MSG, OK_BTN_STRING);
- break;
-
- case Common::KEYCODE_F2: {
- // F2 - Sound Options
- ConfigDialog *dlg = new ConfigDialog();
- dlg->runModal();
- delete dlg;
- _globals->_soundManager.syncSounds();
- _globals->_events.setCursorFromFlag();
- break;
- }
-
- case Common::KEYCODE_F3:
- // F3 - Quit
- quitGame();
- event.handled = false;
- break;
-
- case Common::KEYCODE_F4:
- // F4 - Restart
- restartGame();
- _globals->_events.setCursorFromFlag();
- break;
-
- case Common::KEYCODE_F7:
- // F7 - Restore
- restoreGame();
- _globals->_events.setCursorFromFlag();
- break;
-
- case Common::KEYCODE_F10:
- // F10 - Pause
- GfxDialog::setPalette();
- MessageDialog::show(GAME_PAUSED_MSG, OK_BTN_STRING);
- _globals->_events.setCursorFromFlag();
- break;
-
- default:
- break;
- }
- }
-}
+} // End of namespace Ringworld
-} // End of namespace tSage
+} // End of namespace TsAGE
diff --git a/engines/tsage/ringworld_logic.h b/engines/tsage/ringworld/ringworld_speakers.h
index 19b0f10b42..305984a184 100644
--- a/engines/tsage/ringworld_logic.h
+++ b/engines/tsage/ringworld/ringworld_speakers.h
@@ -20,87 +20,22 @@
*
*/
-#ifndef TSAGE_RINGWORLD_LOGIC_H
-#define TSAGE_RINGWORLD_LOGIC_H
+#ifndef TSAGE_RINGWORLD_SPEAKERS_H
+#define TSAGE_RINGWORLD_SPEAKERS_H
#include "common/scummsys.h"
+#include "tsage/converse.h"
#include "tsage/events.h"
#include "tsage/core.h"
#include "tsage/scenes.h"
#include "tsage/globals.h"
+#include "tsage/ringworld/ringworld_logic.h"
-namespace tSage {
+namespace TsAGE {
-#define ADD_PLAYER_MOVER(X, Y) { Common::Point pt(X, Y); PlayerMover *mover = new PlayerMover(); \
- _globals->_player.addMover(mover, &pt, this); }
-#define ADD_PLAYER_MOVER_NULL(OBJ, X, Y) { Common::Point pt(X, Y); PlayerMover *mover = new PlayerMover(); \
- OBJ.addMover(mover, &pt, NULL); }
-#define ADD_PLAYER_MOVER_THIS(OBJ, X, Y) { Common::Point pt(X, Y); PlayerMover *mover = new PlayerMover(); \
- OBJ.addMover(mover, &pt, this); }
+namespace Ringworld {
-#define ADD_MOVER(OBJ, X, Y) { Common::Point pt(X, Y); NpcMover *mover = new NpcMover(); \
- OBJ.addMover(mover, &pt, this); }
-#define ADD_MOVER_NULL(OBJ, X, Y) { Common::Point pt(X, Y); NpcMover *mover = new NpcMover(); \
- OBJ.addMover(mover, &pt, NULL); }
-
-
-class SceneFactory {
-public:
- static Scene *createScene(int sceneNumber);
-};
-
-class DisplayHotspot : public SceneObject {
-private:
- Common::Array<int> _actions;
- bool performAction(int action);
-public:
- DisplayHotspot(int regionId, ...);
-
- virtual void doAction(int action) {
- if (!performAction(action))
- SceneHotspot::doAction(action);
- }
-};
-
-class DisplayObject : public SceneObject {
-private:
- Common::Array<int> _actions;
- bool performAction(int action);
-public:
- DisplayObject(int firstAction, ...);
-
- virtual void doAction(int action) {
- if (!performAction(action))
- SceneHotspot::doAction(action);
- }
-};
-
-class SceneArea : public SavedObject {
-public:
- GfxSurface _surface;
- GfxSurface *_savedArea;
- Common::Point _pt;
- int _resNum;
- int _rlbNum;
- int _subNum;
- int _actionId;
- Rect _bounds;
-public:
- SceneArea();
- ~SceneArea();
-
- void setup(int resNum, int rlbNum, int subNum, int actionId);
- void draw2();
- void display();
- void restore();
-
- virtual void synchronize(Serializer &s);
- virtual void draw(bool flag);
- virtual void wait();
-};
-
-/*--------------------------------------------------------------------------*/
-// Ringworld specific game speakers
+using namespace TsAGE;
class SpeakerGText : public Speaker {
public:
@@ -395,67 +330,8 @@ public:
virtual void setText(const Common::String &msg);
};
-/*--------------------------------------------------------------------------*/
-
-class RingworldInvObjectList : public InvObjectList {
-public:
- InvObject _stunner;
- InvObject _scanner;
- InvObject _stasisBox;
- InvObject _infoDisk;
- InvObject _stasisNegator;
- InvObject _keyDevice;
- InvObject _medkit;
- InvObject _ladder;
- InvObject _rope;
- InvObject _key;
- InvObject _translator;
- InvObject _ale;
- InvObject _paper;
- InvObject _waldos;
- InvObject _stasisBox2;
- InvObject _ring;
- InvObject _cloak;
- InvObject _tunic;
- InvObject _candle;
- InvObject _straw;
- InvObject _scimitar;
- InvObject _sword;
- InvObject _helmet;
- InvObject _items;
- InvObject _concentrator;
- InvObject _nullifier;
- InvObject _peg;
- InvObject _vial;
- InvObject _jacket;
- InvObject _tunic2;
- InvObject _bone;
- InvObject _jar;
- InvObject _emptyJar;
-public:
- RingworldInvObjectList();
-
- virtual Common::String getClassName() { return "RingworldInvObjectList"; }
-};
-
-#define RING_INVENTORY (*((RingworldInvObjectList *)_globals->_inventory))
-
-class RingworldGame: public Game {
-protected:
- virtual void handleSaveLoad(bool saveFlag, int &saveSlot, Common::String &saveName);
-public:
- virtual void start();
- virtual void restart();
- virtual void restartGame();
- virtual void saveGame();
- virtual void restoreGame();
- virtual void quitGame();
- virtual void endGame(int resNum, int lineNum);
-
- virtual Scene *createScene(int sceneNumber);
- virtual void processEvent(Event &event);
-};
-
-} // End of namespace tSage
+} // End of namespace Ringworld
+
+} // End of namespace TsAGE
#endif
diff --git a/engines/tsage/ringworld2/ringworld2_dialogs.cpp b/engines/tsage/ringworld2/ringworld2_dialogs.cpp
new file mode 100644
index 0000000000..8d4863f332
--- /dev/null
+++ b/engines/tsage/ringworld2/ringworld2_dialogs.cpp
@@ -0,0 +1,193 @@
+/* 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/translation.h"
+
+#include "gui/dialog.h"
+#include "gui/widget.h"
+
+#include "tsage/tsage.h"
+#include "tsage/core.h"
+#include "tsage/dialogs.h"
+#include "tsage/staticres.h"
+#include "tsage/globals.h"
+#include "tsage/ringworld2/ringworld2_dialogs.h"
+
+namespace TsAGE {
+
+namespace Ringworld2 {
+
+/**
+ * This dialog implements the right-click dialog
+ */
+RightClickDialog::RightClickDialog() : GfxDialog() {
+ // Setup button positions
+ _btnList[0] = Common::Point(48, 12);
+ _btnList[1] = Common::Point(31, 29);
+ _btnList[2] = Common::Point(65, 29);
+ _btnList[3] = Common::Point(14, 47);
+ _btnList[4] = Common::Point(48, 47);
+ _btnList[5] = Common::Point(83, 47);
+
+ // Set the palette and change the cursor
+ BF_GLOBALS._events.setCursor(CURSOR_ARROW);
+
+ setPalette();
+
+ // Get the dialog image and selected button images
+ if (R2_GLOBALS._sceneManager._sceneNumber == 2900) {
+ _surface = surfaceFromRes(2902, 1, 1);
+ _btnImages.setVisage(2902, 2);
+ } else {
+ _surface = surfaceFromRes(1, 1, 1);
+ _btnImages.setVisage(1, 2);
+ }
+
+ // Set the dialog position
+ Rect dialogRect;
+ dialogRect.resize(_surface, 0, 0, 100);
+ dialogRect.center(g_globals->_events._mousePos.x, g_globals->_events._mousePos.y);
+
+ // Ensure the dialog will be entirely on-screen
+ Rect screenRect = g_globals->gfxManager()._bounds;
+ screenRect.collapse(4, 4);
+ dialogRect.contain(screenRect);
+
+ _bounds = dialogRect;
+ _gfxManager._bounds = _bounds;
+
+ _highlightedAction = -1;
+ _selectedAction = -1;
+}
+
+RightClickDialog::~RightClickDialog() {
+}
+
+void RightClickDialog::draw() {
+ // Save the covered background area
+ _savedArea = Surface_getArea(g_globals->_gfxManagerInstance.getSurface(), _bounds);
+
+ // Draw the dialog image
+ g_globals->gfxManager().copyFrom(_surface, _bounds.left, _bounds.top);
+}
+
+bool RightClickDialog::process(Event &event) {
+ switch (event.eventType) {
+ case EVENT_MOUSE_MOVE: {
+ // Check whether a button is highlighted
+ int buttonIndex;
+ for (buttonIndex = 6; buttonIndex >= 0; --buttonIndex) {
+ Rect tempRect(0, 0, 28, 29);
+ tempRect.moveTo(_btnList[buttonIndex].x, _btnList[buttonIndex].y);
+
+ if (tempRect.contains(event.mousePos))
+ break;
+ }
+ // If selection has changed, handle it
+ if (buttonIndex != _highlightedAction) {
+ if (_highlightedAction != -1) {
+ // Another button was previously selected, so restore dialog
+ _gfxManager.copyFrom(_surface, 0, 0);
+ }
+
+ if (buttonIndex != -1) {
+ // Draw newly selected button
+ GfxSurface btn = _btnImages.getFrame(buttonIndex + 1);
+ _gfxManager.copyFrom(btn, _btnList[buttonIndex].x, _btnList[buttonIndex].y);
+ }
+
+ _highlightedAction = buttonIndex;
+ }
+
+ event.handled = true;
+ return true;
+ }
+
+ case EVENT_BUTTON_DOWN:
+ // Specify the selected action
+ _selectedAction = (_highlightedAction == -1) ? 999 : _highlightedAction;
+ event.handled = true;
+ return true;
+
+ default:
+ break;
+ }
+
+ return false;
+}
+
+void RightClickDialog::execute() {
+ // Draw the dialog
+ draw();
+
+ // Dialog event handler loop
+ _gfxManager.activate();
+
+ while (!g_vm->shouldQuit() && (_selectedAction == -1)) {
+ Event evt;
+ while (g_globals->_events.getEvent(evt, EVENT_MOUSE_MOVE | EVENT_BUTTON_DOWN)) {
+ evt.mousePos.x -= _bounds.left;
+ evt.mousePos.y -= _bounds.top;
+
+ process(evt);
+ }
+
+ g_system->delayMillis(10);
+ g_system->updateScreen();
+ }
+
+ // Execute the specified action
+ CursorType cursorNum = CURSOR_NONE;
+ switch (_selectedAction) {
+ case 0:
+ // Look action
+ cursorNum = CURSOR_LOOK;
+ break;
+ case 1:
+ // Walk action
+ cursorNum = CURSOR_WALK;
+ break;
+ case 2:
+ // Use action
+ cursorNum = CURSOR_USE;
+ break;
+ case 3:
+ // Talk action
+ cursorNum = CURSOR_TALK;
+ break;
+ case 4:
+ // Change player
+ break;
+ case 5:
+ // Options dialog
+ break;
+ }
+
+ if (cursorNum != CURSOR_NONE)
+ BF_GLOBALS._events.setCursor(cursorNum);
+
+ _gfxManager.deactivate();
+}
+
+} // End of namespace Ringworld2
+
+} // End of namespace TsAGE
diff --git a/engines/tsage/blueforce_logic.h b/engines/tsage/ringworld2/ringworld2_dialogs.h
index 9237e50a13..bbc35da3ea 100644
--- a/engines/tsage/blueforce_logic.h
+++ b/engines/tsage/ringworld2/ringworld2_dialogs.h
@@ -20,23 +20,47 @@
*
*/
-#ifndef TSAGE_BLUEFORCE_LOGIC_H
-#define TSAGE_BLUEFORCE_LOGIC_H
+#ifndef TSAGE_RINGWORLD2_DIALOGS_H
+#define TSAGE_RINGWORLD2_DIALOGS_H
-#include "common/scummsys.h"
+#include "gui/options.h"
+#include "tsage/dialogs.h"
#include "tsage/events.h"
-#include "tsage/core.h"
-#include "tsage/scenes.h"
-#include "tsage/globals.h"
+#include "tsage/graphics.h"
+#include "common/list.h"
+#include "common/rect.h"
+#include "common/system.h"
-namespace tSage {
+namespace TsAGE {
-class BlueForceGame: public Game {
+namespace Ringworld2 {
+
+using namespace TsAGE;
+
+class RightClickDialog : public GfxDialog {
+private:
+ GfxSurface _surface;
+ Visage _btnImages;
+ Common::Point _btnList[6];
+
+ Rect _rectList1[5];
+ Rect _rectList2[5];
+ Rect _rectList3[5];
+ Rect _rectList4[5];
+
+ int _highlightedAction;
+ int _selectedAction;
public:
- virtual void start();
- virtual Scene *createScene(int sceneNumber);
+ RightClickDialog();
+ ~RightClickDialog();
+
+ virtual void draw();
+ virtual bool process(Event &event);
+ void execute();
};
-} // End of namespace tSage
+} // End of namespace Ringworld2
+
+} // End of namespace TsAGE
#endif
diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp
new file mode 100644
index 0000000000..0bdcf36d0c
--- /dev/null
+++ b/engines/tsage/ringworld2/ringworld2_logic.cpp
@@ -0,0 +1,761 @@
+/* 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/scenes.h"
+#include "tsage/tsage.h"
+#include "tsage/staticres.h"
+#include "tsage/ringworld2/ringworld2_logic.h"
+#include "tsage/ringworld2/ringworld2_dialogs.h"
+#include "tsage/ringworld2/ringworld2_scenes0.h"
+
+namespace TsAGE {
+
+namespace Ringworld2 {
+
+Scene *Ringworld2Game::createScene(int sceneNumber) {
+ switch (sceneNumber) {
+ /* Scene group #0 */
+ // Quinn's room
+ case 100: return new Scene100();
+
+ default:
+ error("Unknown scene number - %d", sceneNumber);
+ break;
+ }
+}
+
+/**
+ * Returns true if it is currently okay to restore a game
+ */
+bool Ringworld2Game::canLoadGameStateCurrently() {
+ return true;
+}
+
+/**
+ * Returns true if it is currently okay to save the game
+ */
+bool Ringworld2Game::canSaveGameStateCurrently() {
+ return true;
+}
+
+/*--------------------------------------------------------------------------*/
+
+SceneExt::SceneExt(): Scene() {
+ _stripManager._onBegin = SceneExt::startStrip;
+ _stripManager._onEnd = SceneExt::endStrip;
+
+ _field372 = _field37A = 0;
+ _savedPlayerEnabled = false;
+ _savedUiEnabled = false;
+ _savedCanWalk = false;
+ _focusObject = NULL;
+}
+
+void SceneExt::postInit(SceneObjectList *OwnerList) {
+ Scene::postInit(OwnerList);
+
+ // Exclude the bottom area of the screen to allow room for the UI
+ T2_GLOBALS._interfaceY = UI_INTERFACE_Y;
+}
+
+void SceneExt::remove() {
+/*
+ R2_GLOBALS._uiElements.hide();
+ R2_GLOBALS._uiElements.resetClear();
+
+ if (_action) {
+ if (_action->_endHandler)
+ _action->_endHandler = NULL;
+ _action->remove();
+ }
+
+ _focusObject = NULL;
+*/
+}
+
+void SceneExt::process(Event &event) {
+ if (!event.handled)
+ Scene::process(event);
+}
+
+void SceneExt::dispatch() {
+/*
+ _timerList.dispatch();
+
+ if (_field37A) {
+ if ((--_field37A == 0) && R2_GLOBALS._dayNumber) {
+ if (R2_GLOBALS._uiElements._active && R2_GLOBALS._player._enabled) {
+ R2_GLOBALS._uiElements.show();
+ }
+
+ _field37A = 0;
+ }
+ }
+*/
+ Scene::dispatch();
+}
+
+void SceneExt::loadScene(int sceneNum) {
+ Scene::loadScene(sceneNum);
+
+ _v51C34.top = 0;
+ _v51C34.bottom = 300;
+}
+
+bool SceneExt::display(CursorType action) {
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(9000, R2_GLOBALS._randomSource.getRandomNumber(2));
+ break;
+ case CURSOR_USE:
+ SceneItem::display2(9000, R2_GLOBALS._randomSource.getRandomNumber(2) + 6);
+ break;
+ case CURSOR_TALK:
+ SceneItem::display2(9000, R2_GLOBALS._randomSource.getRandomNumber(2) + 3);
+ break;
+ default:
+ return false;
+ }
+
+ return true;
+}
+
+void SceneExt::fadeOut() {
+ uint32 black = 0;
+ R2_GLOBALS._scenePalette.fade((const byte *)&black, false, 100);
+}
+
+void SceneExt::startStrip() {
+ SceneExt *scene = (SceneExt *)R2_GLOBALS._sceneManager._scene;
+ scene->_field372 = 1;
+ scene->_savedPlayerEnabled = R2_GLOBALS._player._enabled;
+
+ if (scene->_savedPlayerEnabled) {
+ scene->_savedUiEnabled = R2_GLOBALS._player._uiEnabled;
+ scene->_savedCanWalk = R2_GLOBALS._player._canWalk;
+ R2_GLOBALS._player.disableControl();
+/*
+ if (!R2_GLOBALS._v50696 && R2_GLOBALS._uiElements._active)
+ R2_GLOBALS._uiElements.hide();
+*/
+ }
+}
+
+void SceneExt::endStrip() {
+ SceneExt *scene = (SceneExt *)R2_GLOBALS._sceneManager._scene;
+ scene->_field372 = 0;
+
+ if (scene->_savedPlayerEnabled) {
+ R2_GLOBALS._player.enableControl();
+ R2_GLOBALS._player._uiEnabled = scene->_savedUiEnabled;
+ R2_GLOBALS._player._canWalk = scene->_savedCanWalk;
+/*
+ if (!R2_GLOBALS._v50696 && R2_GLOBALS._uiElements._active)
+ R2_GLOBALS._uiElements.show();
+*/
+ }
+}
+
+void SceneExt::clearScreen() {
+ R2_GLOBALS._screenSurface.fillRect(R2_GLOBALS._screenSurface.getBounds(), 0);
+}
+
+void SceneExt::refreshBackground(int xAmount, int yAmount) {
+ switch (_activeScreenNumber) {
+ case 700:
+ case 1020:
+ case 1100:
+ case 1700:
+ case 2600:
+ case 2950:
+ case 3100:
+ case 3101:
+ case 3275:
+ case 3600:
+ // Use traditional style sectioned screen loading
+ Scene::refreshBackground(xAmount, yAmount);
+ return;
+ default:
+ // Break out to new style screen loading
+ break;
+ }
+
+ /* New style background loading */
+
+ // Get the screen data
+ byte *dataP = g_resourceManager->getResource(RT18, _activeScreenNumber, 0);
+ int screenSize = g_vm->_memoryManager.getSize(dataP);
+
+ // Lock the background for update
+ Graphics::Surface s = _backSurface.lockSurface();
+ assert(screenSize == (s.w * s.h));
+
+ // Copy the data
+ byte *destP = (byte *)s.getBasePtr(0, 0);
+ Common::copy(dataP, dataP + (s.w * s.h), destP);
+ _backSurface.unlockSurface();
+
+ // Free the resource data
+ DEALLOCATE(dataP);
+}
+
+/*--------------------------------------------------------------------------*/
+
+DisplayHotspot::DisplayHotspot(int regionId, ...) {
+ _sceneRegionId = regionId;
+
+ // Load up the actions
+ va_list va;
+ va_start(va, regionId);
+
+ int param = va_arg(va, int);
+ while (param != LIST_END) {
+ _actions.push_back(param);
+ param = va_arg(va, int);
+ }
+
+ va_end(va);
+}
+
+bool DisplayHotspot::performAction(int action) {
+ for (uint i = 0; i < _actions.size(); i += 3) {
+ if (_actions[i] == action) {
+ display(_actions[i + 1], _actions[i + 2], SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
+ return true;
+ }
+ }
+
+ return false;
+}
+
+/*--------------------------------------------------------------------------*/
+
+DisplayObject::DisplayObject(int firstAction, ...) {
+ // Load up the actions
+ va_list va;
+ va_start(va, firstAction);
+
+ int param = firstAction;
+ while (param != LIST_END) {
+ _actions.push_back(param);
+ param = va_arg(va, int);
+ }
+
+ va_end(va);
+}
+
+bool DisplayObject::performAction(int action) {
+ for (uint i = 0; i < _actions.size(); i += 3) {
+ if (_actions[i] == action) {
+ display(_actions[i + 1], _actions[i + 2], SET_WIDTH, 200, SET_EXT_BGCOLOR, 7, LIST_END);
+ return true;
+ }
+ }
+
+ return false;
+}
+
+/*--------------------------------------------------------------------------*/
+
+Ringworld2InvObjectList::Ringworld2InvObjectList():
+ _none(1, 1),
+ _inv1(1, 2),
+ _inv2(1, 3),
+ _inv3(1, 4),
+ _steppingDisks(1, 5),
+ _inv5(1, 6),
+ _inv6(1, 7),
+ _inv7(1, 8),
+ _inv8(1, 9),
+ _inv9(1, 10),
+ _inv10(1, 11),
+ _inv11(1, 12),
+ _inv12(1, 13),
+ _inv13(1, 14),
+ _inv14(1, 15),
+ _inv15(1, 16),
+ _inv16(1, 17),
+ _inv17(2, 2),
+ _inv18(2, 3),
+ _inv19(2, 4),
+ _inv20(2, 5),
+ _inv21(2, 5),
+ _inv22(2, 6),
+ _inv23(2, 7),
+ _inv24(2, 8),
+ _inv25(2, 9),
+ _inv26(2, 10),
+ _inv27(2, 11),
+ _inv28(2, 12),
+ _inv29(2, 13),
+ _inv30(2, 14),
+ _inv31(2, 15),
+ _inv32(2, 16),
+ _inv33(3, 2),
+ _inv34(3, 3),
+ _inv35(3, 4),
+ _inv36(3, 5),
+ _inv37(3, 6),
+ _inv38(3, 7),
+ _inv39(1, 10),
+ _inv40(3, 8),
+ _inv41(3, 9),
+ _inv42(3, 10),
+ _inv43(3, 11),
+ _inv44(3, 12),
+ _inv45(3, 13),
+ _inv46(3, 17),
+ _inv47(3, 14),
+ _inv48(3, 14),
+ _inv49(3, 15),
+ _inv50(3, 15),
+ _inv51(3, 17),
+ _inv52(4, 2) {
+
+ // Add the items to the list
+ _itemList.push_back(&_none);
+ _itemList.push_back(&_inv1);
+ _itemList.push_back(&_inv2);
+ _itemList.push_back(&_inv3);
+ _itemList.push_back(&_steppingDisks);
+ _itemList.push_back(&_inv5);
+ _itemList.push_back(&_inv6);
+ _itemList.push_back(&_inv7);
+ _itemList.push_back(&_inv8);
+ _itemList.push_back(&_inv9);
+ _itemList.push_back(&_inv10);
+ _itemList.push_back(&_inv11);
+ _itemList.push_back(&_inv12);
+ _itemList.push_back(&_inv13);
+ _itemList.push_back(&_inv14);
+ _itemList.push_back(&_inv15);
+ _itemList.push_back(&_inv16);
+ _itemList.push_back(&_inv17);
+ _itemList.push_back(&_inv18);
+ _itemList.push_back(&_inv19);
+ _itemList.push_back(&_inv20);
+ _itemList.push_back(&_inv21);
+ _itemList.push_back(&_inv22);
+ _itemList.push_back(&_inv23);
+ _itemList.push_back(&_inv24);
+ _itemList.push_back(&_inv25);
+ _itemList.push_back(&_inv26);
+ _itemList.push_back(&_inv27);
+ _itemList.push_back(&_inv28);
+ _itemList.push_back(&_inv29);
+ _itemList.push_back(&_inv30);
+ _itemList.push_back(&_inv31);
+ _itemList.push_back(&_inv32);
+ _itemList.push_back(&_inv33);
+ _itemList.push_back(&_inv34);
+ _itemList.push_back(&_inv35);
+ _itemList.push_back(&_inv36);
+ _itemList.push_back(&_inv37);
+ _itemList.push_back(&_inv38);
+ _itemList.push_back(&_inv39);
+ _itemList.push_back(&_inv40);
+ _itemList.push_back(&_inv41);
+ _itemList.push_back(&_inv42);
+ _itemList.push_back(&_inv43);
+ _itemList.push_back(&_inv44);
+ _itemList.push_back(&_inv45);
+ _itemList.push_back(&_inv46);
+ _itemList.push_back(&_inv47);
+ _itemList.push_back(&_inv48);
+ _itemList.push_back(&_inv49);
+ _itemList.push_back(&_inv50);
+ _itemList.push_back(&_inv51);
+ _itemList.push_back(&_inv52);
+
+ _selectedItem = NULL;
+}
+
+void Ringworld2InvObjectList::reset() {
+ // Reset all object scene numbers
+ SynchronizedList<InvObject *>::iterator i;
+ for (i = _itemList.begin(); i != _itemList.end(); ++i) {
+ (*i)->_sceneNumber = 0;
+ }
+
+ // Set up default inventory
+ setObjectScene(R2_1, 800);
+ setObjectScene(R2_2, 400);
+ setObjectScene(R2_3, 100);
+ setObjectScene(R2_STEPPING_DISKS, 100);
+ setObjectScene(R2_5, 400);
+ setObjectScene(R2_6, 400);
+ setObjectScene(R2_7, 500);
+ setObjectScene(R2_8, 700);
+ setObjectScene(R2_9, 800);
+ setObjectScene(R2_10, 100);
+ setObjectScene(R2_11, 400);
+ setObjectScene(R2_12, 500);
+ setObjectScene(R2_13, 1550);
+ setObjectScene(R2_14, 850);
+ setObjectScene(R2_15, 850);
+ setObjectScene(R2_16, 0);
+ setObjectScene(R2_17, 1550);
+ setObjectScene(R2_18, 1550);
+ setObjectScene(R2_19, 1550);
+ setObjectScene(R2_20, 500);
+ setObjectScene(R2_21, 500);
+ setObjectScene(R2_22, 1550);
+ setObjectScene(R2_23, 1580);
+ setObjectScene(R2_24, 9999);
+ setObjectScene(R2_25, 1550);
+ setObjectScene(R2_26, 1550);
+ setObjectScene(R2_27, 1580);
+ setObjectScene(R2_28, 1550);
+ setObjectScene(R2_29, 2525);
+ setObjectScene(R2_30, 2440);
+ setObjectScene(R2_31, 2455);
+ setObjectScene(R2_32, 2535);
+ setObjectScene(R2_33, 2530);
+ setObjectScene(R2_34, 1950);
+ setObjectScene(R2_35, 1950);
+ setObjectScene(R2_36, 9999);
+ setObjectScene(R2_37, 2430);
+ setObjectScene(R2_38, 9999);
+ setObjectScene(R2_39, 2);
+ setObjectScene(R2_40, 9999);
+ setObjectScene(R2_41, 3150);
+ setObjectScene(R2_42, 0);
+ setObjectScene(R2_43, 3260);
+ setObjectScene(R2_44, 2);
+ setObjectScene(R2_45, 1550);
+ setObjectScene(R2_46, 0);
+ setObjectScene(R2_47, 3150);
+ setObjectScene(R2_48, 2435);
+ setObjectScene(R2_49, 2440);
+ setObjectScene(R2_50, 2435);
+ setObjectScene(R2_51, 1580);
+ setObjectScene(R2_52, 3260);
+}
+
+void Ringworld2InvObjectList::setObjectScene(int objectNum, int sceneNumber) {
+ // Find the appropriate object
+ int num = objectNum;
+ SynchronizedList<InvObject *>::iterator i = _itemList.begin();
+ while (num-- > 0) ++i;
+ (*i)->_sceneNumber = sceneNumber;
+
+ // If the item is the currently active one, default back to the use cursor
+ if (R2_GLOBALS._events.getCursor() == objectNum)
+ R2_GLOBALS._events.setCursor(CURSOR_USE);
+
+ // Update the user interface if necessary
+ T2_GLOBALS._uiElements.updateInventory();
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Ringworld2Game::start() {
+ int slot = -1;
+
+ if (ConfMan.hasKey("save_slot")) {
+ slot = ConfMan.getInt("save_slot");
+ Common::String file = g_vm->generateSaveName(slot);
+ Common::InSaveFile *in = g_vm->_system->getSavefileManager()->openForLoading(file);
+ if (in)
+ delete in;
+ else
+ slot = -1;
+ }
+
+ if (slot >= 0)
+ g_globals->_sceneHandler->_loadGameSlot = slot;
+ else {
+ // Switch to the first game scene
+ g_globals->_events.setCursor(CURSOR_WALK);
+ g_globals->_sceneManager.setNewScene(100);
+ }
+
+ g_globals->_events.showCursor();
+}
+
+void Ringworld2Game::restart() {
+ g_globals->_scenePalette.clearListeners();
+ g_globals->_soundHandler.stop();
+
+ // Change to the first game scene
+ g_globals->_sceneManager.changeScene(100);
+}
+
+void Ringworld2Game::endGame(int resNum, int lineNum) {
+ g_globals->_events.setCursor(CURSOR_WALK);
+ Common::String msg = g_resourceManager->getMessage(resNum, lineNum);
+ bool savesExist = g_saver->savegamesExist();
+
+ if (!savesExist) {
+ // No savegames exist, so prompt the user to restart or quit
+ if (MessageDialog::show(msg, QUIT_BTN_STRING, RESTART_BTN_STRING) == 0)
+ g_vm->quitGame();
+ else
+ restart();
+ } else {
+ // Savegames exist, so prompt for Restore/Restart
+ bool breakFlag;
+ do {
+ if (g_vm->shouldQuit()) {
+ breakFlag = true;
+ } else if (MessageDialog::show(msg, RESTART_BTN_STRING, RESTORE_BTN_STRING) == 0) {
+ restart();
+ breakFlag = true;
+ } else {
+ handleSaveLoad(false, g_globals->_sceneHandler->_loadGameSlot, g_globals->_sceneHandler->_saveName);
+ breakFlag = g_globals->_sceneHandler->_loadGameSlot >= 0;
+ }
+ } while (!breakFlag);
+ }
+
+ g_globals->_events.setCursorFromFlag();
+}
+
+void Ringworld2Game::processEvent(Event &event) {
+ if (event.eventType == EVENT_KEYPRESS) {
+ switch (event.kbd.keycode) {
+ case Common::KEYCODE_F1:
+ // F1 - Help
+// MessageDialog::show(HELP_MSG, OK_BTN_STRING);
+ break;
+
+ case Common::KEYCODE_F2:
+ // F2 - Sound Options
+ SoundDialog::execute();
+ break;
+
+ case Common::KEYCODE_F3:
+ // F3 - Quit
+ quitGame();
+ event.handled = false;
+ break;
+
+ case Common::KEYCODE_F4:
+ // F4 - Restart
+ restartGame();
+ g_globals->_events.setCursorFromFlag();
+ break;
+
+ case Common::KEYCODE_F7:
+ // F7 - Restore
+ restoreGame();
+ g_globals->_events.setCursorFromFlag();
+ break;
+
+ case Common::KEYCODE_F10:
+ // F10 - Pause
+ GfxDialog::setPalette();
+ MessageDialog::show(GAME_PAUSED_MSG, OK_BTN_STRING);
+ g_globals->_events.setCursorFromFlag();
+ break;
+
+ default:
+ break;
+ }
+ }
+}
+
+void Ringworld2Game::rightClick() {
+ RightClickDialog *dlg = new RightClickDialog();
+ dlg->execute();
+ delete dlg;
+}
+
+/*--------------------------------------------------------------------------*/
+
+NamedHotspot::NamedHotspot() : SceneHotspot() {
+ _resNum = 0;
+ _lookLineNum = _useLineNum = _talkLineNum = -1;
+}
+
+bool NamedHotspot::startAction(CursorType action, Event &event) {
+ switch (action) {
+ case CURSOR_WALK:
+ // Nothing
+ return false;
+ case CURSOR_LOOK:
+ if (_lookLineNum == -1)
+ return SceneHotspot::startAction(action, event);
+
+ SceneItem::display2(_resNum, _lookLineNum);
+ return true;
+ case CURSOR_USE:
+ if (_useLineNum == -1)
+ return SceneHotspot::startAction(action, event);
+
+ SceneItem::display2(_resNum, _useLineNum);
+ return true;
+ case CURSOR_TALK:
+ if (_talkLineNum == -1)
+ return SceneHotspot::startAction(action, event);
+
+ SceneItem::display2(_resNum, _talkLineNum);
+ return true;
+ default:
+ return SceneHotspot::startAction(action, event);
+ }
+}
+
+void NamedHotspot::setDetails(int ys, int xs, int ye, int xe, const int resnum, const int lookLineNum, const int useLineNum) {
+ setBounds(ys, xe, ye, xs);
+ _resNum = resnum;
+ _lookLineNum = lookLineNum;
+ _useLineNum = useLineNum;
+ _talkLineNum = -1;
+ g_globals->_sceneItems.addItems(this, NULL);
+}
+
+void NamedHotspot::setDetails(const Rect &bounds, int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode, SceneItem *item) {
+ setBounds(bounds);
+ _resNum = resNum;
+ _lookLineNum = lookLineNum;
+ _talkLineNum = talkLineNum;
+ _useLineNum = useLineNum;
+
+ switch (mode) {
+ case 2:
+ g_globals->_sceneItems.push_front(this);
+ break;
+ case 4:
+ g_globals->_sceneItems.addBefore(item, this);
+ break;
+ case 5:
+ g_globals->_sceneItems.addAfter(item, this);
+ break;
+ default:
+ g_globals->_sceneItems.push_back(this);
+ break;
+ }
+}
+
+void NamedHotspot::setDetails(int sceneRegionId, int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode) {
+ _sceneRegionId = sceneRegionId;
+ _resNum = resNum;
+ _lookLineNum = lookLineNum;
+ _talkLineNum = talkLineNum;
+ _useLineNum = useLineNum;
+
+ // Handle adding hotspot to scene items list as necessary
+ switch (mode) {
+ case 2:
+ GLOBALS._sceneItems.push_front(this);
+ break;
+ case 3:
+ break;
+ default:
+ GLOBALS._sceneItems.push_back(this);
+ break;
+ }
+}
+
+void NamedHotspot::synchronize(Serializer &s) {
+ SceneHotspot::synchronize(s);
+ s.syncAsSint16LE(_resNum);
+ s.syncAsSint16LE(_lookLineNum);
+ s.syncAsSint16LE(_useLineNum);
+
+ if (g_vm->getGameID() == GType_BlueForce)
+ s.syncAsSint16LE(_talkLineNum);
+}
+
+void SceneActor::postInit(SceneObjectList *OwnerList) {
+ _lookLineNum = _talkLineNum = _useLineNum = -1;
+ SceneObject::postInit();
+}
+
+void SceneActor::synchronize(Serializer &s) {
+ SceneObject::synchronize(s);
+ s.syncAsSint16LE(_resNum);
+ s.syncAsSint16LE(_lookLineNum);
+ s.syncAsSint16LE(_talkLineNum);
+ s.syncAsSint16LE(_useLineNum);
+
+ s.syncAsSint16LE(_effect);
+ s.syncAsSint16LE(_shade);
+}
+
+bool SceneActor::startAction(CursorType action, Event &event) {
+ bool handled = true;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ if (_lookLineNum == -1)
+ handled = false;
+ else
+ SceneItem::display2(_resNum, _lookLineNum);
+ break;
+ case CURSOR_USE:
+ if (_useLineNum == -1)
+ handled = false;
+ else
+ SceneItem::display2(_resNum, _useLineNum);
+ break;
+ case CURSOR_TALK:
+ if (_talkLineNum == -1)
+ handled = false;
+ else
+ SceneItem::display2(_resNum, _talkLineNum);
+ break;
+ default:
+ handled = false;
+ break;
+ }
+
+ if (!handled)
+ handled = ((SceneExt *)R2_GLOBALS._sceneManager._scene)->display(action);
+ return handled;
+}
+
+void SceneActor::setDetails(int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode, SceneItem *item) {
+ _resNum = resNum;
+ _lookLineNum = lookLineNum;
+ _talkLineNum = talkLineNum;
+ _useLineNum = useLineNum;
+
+ switch (mode) {
+ case 2:
+ g_globals->_sceneItems.push_front(this);
+ break;
+ case 4:
+ g_globals->_sceneItems.addBefore(item, this);
+ break;
+ case 5:
+ g_globals->_sceneItems.addAfter(item, this);
+ break;
+ default:
+ g_globals->_sceneItems.push_back(this);
+ break;
+ }
+}
+
+void SceneActor::setDetails(int resNum, int lookLineNum, int talkLineNum, int useLineNum) {
+ _resNum = resNum;
+ _lookLineNum = lookLineNum;
+ _talkLineNum = talkLineNum;
+ _useLineNum = useLineNum;
+}
+
+
+} // End of namespace Ringworld2
+
+} // End of namespace TsAGE
diff --git a/engines/tsage/ringworld2/ringworld2_logic.h b/engines/tsage/ringworld2/ringworld2_logic.h
new file mode 100644
index 0000000000..bfb3281d5d
--- /dev/null
+++ b/engines/tsage/ringworld2/ringworld2_logic.h
@@ -0,0 +1,250 @@
+/* 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.
+ *
+ */
+
+#ifndef TSAGE_RINGWORLD2_LOGIC_H
+#define TSAGE_RINGWORLD2_LOGIC_H
+
+#include "common/scummsys.h"
+#include "tsage/events.h"
+#include "tsage/core.h"
+#include "tsage/scenes.h"
+#include "tsage/globals.h"
+
+namespace TsAGE {
+
+namespace Ringworld2 {
+
+using namespace TsAGE;
+
+#define R2_INVENTORY (*((::TsAGE::Ringworld2::Ringworld2InvObjectList *)g_globals->_inventory))
+
+class SceneFactory {
+public:
+ static Scene *createScene(int sceneNumber);
+};
+
+class SceneExt: public Scene {
+private:
+ static void startStrip();
+ static void endStrip();
+public:
+ int _field372;
+ bool _savedPlayerEnabled;
+ bool _savedUiEnabled;
+ bool _savedCanWalk;
+ int _field37A;
+
+ SceneObject *_focusObject;
+ Visage _cursorVisage;
+
+ Rect _v51C34;
+public:
+ SceneExt();
+
+ virtual Common::String getClassName() { return "SceneExt"; }
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void remove();
+ virtual void process(Event &event);
+ virtual void dispatch();
+ virtual void loadScene(int sceneNum);
+ virtual void refreshBackground(int xAmount, int yAmount);
+
+ bool display(CursorType action);
+ void fadeOut();
+ void clearScreen();
+};
+
+class DisplayHotspot : public SceneObject {
+private:
+ Common::Array<int> _actions;
+ bool performAction(int action);
+public:
+ DisplayHotspot(int regionId, ...);
+
+ virtual void doAction(int action) {
+ if (!performAction(action))
+ SceneHotspot::doAction(action);
+ }
+};
+
+class DisplayObject : public SceneObject {
+private:
+ Common::Array<int> _actions;
+ bool performAction(int action);
+public:
+ DisplayObject(int firstAction, ...);
+
+ virtual void doAction(int action) {
+ if (!performAction(action))
+ SceneHotspot::doAction(action);
+ }
+};
+
+class SceneObjectExt : public SceneObject {
+public:
+ int _state;
+
+ virtual void synchronize(Serializer &s) {
+ SceneObject::synchronize(s);
+ s.syncAsSint16LE(_state);
+ }
+ virtual Common::String getClassName() { return "SceneObjectExt"; }
+};
+
+/*--------------------------------------------------------------------------*/
+
+class Ringworld2InvObjectList : public InvObjectList {
+public:
+ InvObject _none;
+ InvObject _inv1;
+ InvObject _inv2;
+ InvObject _inv3;
+ InvObject _steppingDisks;
+ InvObject _inv5;
+ InvObject _inv6;
+ InvObject _inv7;
+ InvObject _inv8;
+ InvObject _inv9;
+ InvObject _inv10;
+ InvObject _inv11;
+ InvObject _inv12;
+ InvObject _inv13;
+ InvObject _inv14;
+ InvObject _inv15;
+ InvObject _inv16;
+ InvObject _inv17;
+ InvObject _inv18;
+ InvObject _inv19;
+ InvObject _inv20;
+ InvObject _inv21;
+ InvObject _inv22;
+ InvObject _inv23;
+ InvObject _inv24;
+ InvObject _inv25;
+ InvObject _inv26;
+ InvObject _inv27;
+ InvObject _inv28;
+ InvObject _inv29;
+ InvObject _inv30;
+ InvObject _inv31;
+ InvObject _inv32;
+ InvObject _inv33;
+ InvObject _inv34;
+ InvObject _inv35;
+ InvObject _inv36;
+ InvObject _inv37;
+ InvObject _inv38;
+ InvObject _inv39;
+ InvObject _inv40;
+ InvObject _inv41;
+ InvObject _inv42;
+ InvObject _inv43;
+ InvObject _inv44;
+ InvObject _inv45;
+ InvObject _inv46;
+ InvObject _inv47;
+ InvObject _inv48;
+ InvObject _inv49;
+ InvObject _inv50;
+ InvObject _inv51;
+ InvObject _inv52;
+
+ Ringworld2InvObjectList();
+ void reset();
+ void setObjectScene(int objectNum, int sceneNumber);
+
+ virtual Common::String getClassName() { return "Ringworld2InvObjectList"; }
+};
+
+#define RING2_INVENTORY (*((::TsAGE::Ringworld2::Ringworld2InvObjectList *)g_globals->_inventory))
+
+class Ringworld2Game: public Game {
+public:
+ virtual void start();
+ virtual void restart();
+ virtual void endGame(int resNum, int lineNum);
+
+ virtual Scene *createScene(int sceneNumber);
+ virtual void processEvent(Event &event);
+ virtual void rightClick();
+ virtual bool canSaveGameStateCurrently();
+ virtual bool canLoadGameStateCurrently();
+};
+
+class NamedHotspot : public SceneHotspot {
+public:
+ int _resNum, _lookLineNum, _useLineNum, _talkLineNum;
+ NamedHotspot();
+
+ virtual bool startAction(CursorType action, Event &event);
+ virtual Common::String getClassName() { return "NamedHotspot"; }
+ virtual void synchronize(Serializer &s);
+ virtual void setDetails(int ys, int xs, int ye, int xe, const int resnum, const int lookLineNum, const int useLineNum);
+ virtual void setDetails(const Rect &bounds, int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode, SceneItem *item);
+ virtual void setDetails(int sceneRegionId, int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode = 0);
+};
+
+class NamedHotspotExt : public NamedHotspot {
+public:
+ int _flag;
+ NamedHotspotExt() { _flag = 0; }
+
+ virtual Common::String getClassName() { return "NamedHotspot"; }
+ virtual void synchronize(Serializer &s) {
+ NamedHotspot::synchronize(s);
+ s.syncAsSint16LE(_flag);
+ }
+};
+
+class SceneActor: public SceneObject {
+public:
+ int _resNum;
+ int _lookLineNum, _talkLineNum, _useLineNum;
+ int _effect, _shade;
+
+ virtual Common::String getClassName() { return "SceneActor"; }
+ virtual void synchronize(Serializer &s);
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual bool startAction(CursorType action, Event &event);
+
+ void setDetails(int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode, SceneItem *item);
+ void setDetails(int resNum, int lookLineNum, int talkLineNum, int useLineNum);
+};
+
+class SceneActorExt: public SceneActor {
+public:
+ int _state;
+
+ SceneActorExt() { _state = 0; }
+ virtual Common::String getClassName() { return "SceneActorExt"; }
+ virtual void synchronize(Serializer &s) {
+ SceneActor::synchronize(s);
+ s.syncAsSint16LE(_state);
+ }
+};
+
+
+} // End of namespace Ringworld2
+
+} // End of namespace TsAGE
+
+#endif
diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.cpp b/engines/tsage/ringworld2/ringworld2_scenes0.cpp
new file mode 100644
index 0000000000..526bf6e3c9
--- /dev/null
+++ b/engines/tsage/ringworld2/ringworld2_scenes0.cpp
@@ -0,0 +1,331 @@
+/* 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/scenes.h"
+#include "tsage/tsage.h"
+#include "tsage/staticres.h"
+#include "tsage/ringworld2/ringworld2_scenes0.h"
+
+namespace TsAGE {
+
+namespace Ringworld2 {
+
+/*--------------------------------------------------------------------------
+ * Scene 100 - Quinn's Room
+ *
+ *--------------------------------------------------------------------------*/
+
+bool Scene100::Object7::startAction(CursorType action, Event &event) {
+ Scene100 *scene = (Scene100 *)R2_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_USE:
+ if (_state) {
+ SceneItem::display2(100, 6);
+ } else {
+ R2_GLOBALS._player.disableControl();
+ scene->_sceneMode = 101;
+ scene->setAction(&scene->_sequenceManager1, scene, 101, &R2_GLOBALS._player, this, NULL);
+ }
+ return true;
+ case CURSOR_TALK:
+ if (_state) {
+ SceneItem::display2(100, 26);
+ _state = 0;
+ scene->_object10.setFrame(1);
+ } else {
+ SceneItem::display2(100, 27);
+ _state = 1;
+ scene->_object10.setFrame(2);
+ }
+ return true;
+ default:
+ return SceneActor::startAction(action, event);
+ }
+}
+
+bool Scene100::Object8::startAction(CursorType action, Event &event) {
+ Scene100 *scene = (Scene100 *)R2_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_USE:
+ R2_GLOBALS._player.disableControl();
+ if (_strip == 2) {
+ scene->_sceneMode = 108;
+ scene->_object3.postInit();
+ scene->_object9.postInit();
+
+ if (R2_INVENTORY.getObjectScene(R2_3) == 1) {
+ scene->_object9.setup(100, 7, 2);
+ } else {
+ scene->_object9.setup(100, 7, 1);
+ scene->_object9.setDetails(100, 21, 22, 23, 2, NULL);
+ }
+
+ scene->setAction(&scene->_sequenceManager2, scene, 108, this, &scene->_object3,
+ &scene->_object9, &R2_GLOBALS._player, NULL);
+ } else {
+ scene->_sceneMode = 109;
+ scene->setAction(&scene->_sequenceManager2, scene, 109, this, &scene->_object3,
+ &scene->_object9, &R2_GLOBALS._player, NULL);
+ }
+ return true;
+ case CURSOR_TALK:
+ R2_GLOBALS._player.disableControl();
+
+ if (_strip == 2) {
+ SceneItem::display2(100, 18);
+ scene->_sceneMode = 102;
+ scene->_object3.postInit();
+ scene->_object9.postInit();
+
+ if (R2_INVENTORY.getObjectScene(R2_3) == 1) {
+ scene->_object9.setup(100, 7, 2);
+ } else {
+ scene->_object9.setup(100, 7, 1);
+ scene->_object9.setDetails(100, 21, 22, 23, 2, NULL);
+ }
+
+ scene->setAction(&scene->_sequenceManager2, scene, 102, this, &scene->_object3,
+ &scene->_object9, NULL);
+ } else {
+ SceneItem::display2(100, 19);
+ scene->_sceneMode = 103;
+ scene->setAction(&scene->_sequenceManager2, scene, 103, this, &scene->_object3,
+ &scene->_object9, NULL);
+ }
+ return true;
+ default:
+ return SceneActor::startAction(action, event);
+ }
+}
+
+bool Scene100::Object9::startAction(CursorType action, Event &event) {
+ Scene100 *scene = (Scene100 *)R2_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_USE:
+ R2_GLOBALS._player.disableControl();
+ scene->_sceneMode = 107;
+ scene->setAction(&scene->_sequenceManager1, scene, 107, &R2_GLOBALS._player, &scene->_object9, NULL);
+ return true;
+ default:
+ return SceneActor::startAction(action, event);
+ }
+}
+
+bool Scene100::Object10::startAction(CursorType action, Event &event) {
+ Scene100 *scene = (Scene100 *)R2_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_LOOK:
+ SceneItem::display2(100, _state ? 24 : 25);
+ return true;
+ case CURSOR_TALK:
+ SceneItem::display2(100, _state ? 26 : 27);
+ return true;
+ case CURSOR_USE:
+ R2_GLOBALS._player.disableControl();
+ scene->_sceneMode = 110;
+ scene->setAction(&scene->_sequenceManager1, scene, 110, &R2_GLOBALS._player, NULL);
+ return true;
+ default:
+ return SceneActor::startAction(action, event);
+ }
+}
+
+bool Scene100::SteppingDisks::startAction(CursorType action, Event &event) {
+ Scene100 *scene = (Scene100 *)R2_GLOBALS._sceneManager._scene;
+
+ switch (action) {
+ case CURSOR_USE:
+ R2_GLOBALS._player.disableControl();
+ scene->_sceneMode = 111;
+ scene->setAction(&scene->_sequenceManager1, scene, 111, &R2_GLOBALS._player, this, NULL);
+ return true;
+ default:
+ return SceneActor::startAction(action, event);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene100::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+ loadScene(100);
+ R2_GLOBALS._scenePalette.loadPalette(0);
+
+ if (R2_GLOBALS._sceneManager._previousScene != 125)
+ R2_GLOBALS._sound1.play(10);
+
+ _object7.postInit();
+ _object7._state = 0;
+ _object7.setVisage(100);
+ _object7.setPosition(Common::Point(160, 84));
+ _object7.setDetails(100, 3, 4, 5, 1, NULL);
+
+ _object10.postInit();
+ _object10.setup(100, 2, 1);
+ _object10.setDetails(100, -1, -1, -1, 1, NULL);
+
+ _object8.postInit();
+ _object8.setup(100, 2, 3);
+ _object8.setPosition(Common::Point(175, 157));
+ _object8.setDetails(100, 17, 18, 20, 1, NULL);
+
+ _object1.postInit();
+ _object1.setup(100, 3, 1);
+ _object1.setPosition(Common::Point(89, 79));
+ _object1.fixPriority(250);
+ _object1.animate(ANIM_MODE_2, NULL);
+ _object1._numFrames = 3;
+
+ _object2.postInit();
+ _object2.setup(100, 3, 1);
+ _object2.setPosition(Common::Point(89, 147));
+ _object2.fixPriority(250);
+ _object2.animate(ANIM_MODE_7, 0, NULL);
+ _object2._numFrames = 3;
+
+ _object6.postInit();
+ _object6.setVisage(101);
+ _object6.setPosition(Common::Point(231, 126));
+ _object6.fixPriority(10);
+ _object6.setDetails(100, 37, -1, 39, 1, NULL);
+
+ if (R2_INVENTORY.getObjectScene(R2_STEPPING_DISKS) == 100) {
+ _steppingDisks.postInit();
+ _steppingDisks.setup(100, 8, 1);
+ _steppingDisks.setPosition(Common::Point(274, 130));
+ _steppingDisks.setDetails(100, 40, -1, 42, 1, NULL);
+ }
+
+ _item5.setDetails(11, 100, 14, 15, 16);
+ _item4.setDetails(12, 100, 11, -1, 13);
+ _item3.setDetails(13, 100, 8, 9, 10);
+ _item2.setDetails(14, 100, 34, -1, 36);
+
+ R2_GLOBALS._player.postInit();
+ R2_GLOBALS._player.setVisage(10);
+ R2_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ R2_GLOBALS._player.disableControl();
+
+ _item1.setDetails(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), 100, 0, 1, -1, 1, NULL);
+
+ switch (R2_GLOBALS._sceneManager._previousScene) {
+ case 50:
+ case 180:
+ _object5.postInit();
+ _object4.postInit();
+ _sceneMode = 104;
+ setAction(&_sequenceManager1, this, 104, &R2_GLOBALS._player, &_object6, &_object4, &_object5, NULL);
+ break;
+ case 125:
+ _sceneMode = 100;
+ setAction(&_sequenceManager1, this, 106, &R2_GLOBALS._player, NULL);
+ break;
+ case 200:
+ _sceneMode = 100;
+ setAction(&_sequenceManager1, this, 100, &R2_GLOBALS._player, &_object7, NULL);
+ break;
+ default:
+ R2_GLOBALS._player.setStrip(3);
+ R2_GLOBALS._player.setPosition(Common::Point(180, 100));
+ R2_GLOBALS._player.enableControl();
+ break;
+ }
+}
+
+void Scene100::remove() {
+ R2_GLOBALS._sound1.play(10);
+ SceneExt::remove();
+}
+
+void Scene100::signal() {
+ switch (_sceneMode) {
+ case 101:
+ R2_GLOBALS._sceneManager.changeScene(200);
+ break;
+ case 103:
+ case 109:
+ _object8.setStrip(2);
+ _object8.setFrame(3);
+
+ _object3.remove();
+ _object9.remove();
+ R2_GLOBALS._player.enableControl();
+ break;
+ case 104:
+ _sceneMode = 0;
+ _object5.remove();
+ _object4.remove();
+
+ R2_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ R2_GLOBALS._player._numFrames = 10;
+ R2_GLOBALS._player.fixPriority(-1);
+ R2_GLOBALS._player.enableControl();
+ break;
+ case 105:
+ R2_GLOBALS._sceneManager.changeScene(125);
+ break;
+ case 107:
+ R2_GLOBALS._sceneItems.remove(&_object9);
+
+ _object9.setFrame(2);
+ R2_INVENTORY.setObjectScene(3, 1);
+ R2_GLOBALS._player.enableControl();
+ break;
+ case 110:
+ if (_object7._state) {
+ _object7._state = 0;
+ _object10.setFrame(1);
+ } else {
+ _object7._state = 1;
+ _object10.setFrame(2);
+ }
+ R2_GLOBALS._player.enableControl();
+ break;
+ default:
+ R2_GLOBALS._player.enableControl();
+ break;
+ }
+}
+
+void Scene100::dispatch() {
+/*
+ int regionIndex = R2_GLOBALS._player.getRegionIndex();
+ if (regionIndex == 13)
+ R2_GLOBALS._player._shade = 4;
+
+ if ((R2_GLOBALS._player._visage == 13) || (R2_GLOBALS._player._visage == 101))
+ (R2_GLOBALS._player._shade = 0;
+*/
+ SceneExt::dispatch();
+
+ if ((_sceneMode == 101) && (_object7._frame == 2) && (_object8._strip == 5)) {
+ _object8.setAction(&_sequenceManager2, NULL, 103, &_object8, &_object3, &_object9, NULL);
+ }
+}
+
+} // End of namespace Ringworld2
+
+} // End of namespace TsAGE
diff --git a/engines/tsage/ringworld2/ringworld2_scenes0.h b/engines/tsage/ringworld2/ringworld2_scenes0.h
new file mode 100644
index 0000000000..c51b044137
--- /dev/null
+++ b/engines/tsage/ringworld2/ringworld2_scenes0.h
@@ -0,0 +1,84 @@
+/* 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.
+ *
+ */
+
+#ifndef TSAGE_RINGWORLD2_SCENES0_H
+#define TSAGE_RINGWORLD2_SCENES0_H
+
+#include "common/scummsys.h"
+#include "tsage/converse.h"
+#include "tsage/events.h"
+#include "tsage/core.h"
+#include "tsage/scenes.h"
+#include "tsage/globals.h"
+#include "tsage/sound.h"
+#include "tsage/ringworld2/ringworld2_logic.h"
+
+namespace TsAGE {
+
+namespace Ringworld2 {
+
+using namespace TsAGE;
+
+class Scene100: public SceneExt {
+ /* Objects */
+ class Object7: public SceneActorExt {
+ public:
+ bool startAction(CursorType action, Event &event);
+ };
+ class Object8: public SceneActor {
+ public:
+ bool startAction(CursorType action, Event &event);
+ };
+ class Object9: public SceneActor {
+ public:
+ bool startAction(CursorType action, Event &event);
+ };
+ class Object10: public SceneActorExt {
+ public:
+ bool startAction(CursorType action, Event &event);
+ };
+ class SteppingDisks: public SceneActor {
+ public:
+ bool startAction(CursorType action, Event &event);
+ };
+public:
+ NamedHotspot _item1, _item2, _item3, _item4, _item5;
+ SceneActor _object1, _object2, _object3, _object4, _object5;
+ SceneActor _object6;
+ Object7 _object7;
+ Object8 _object8;
+ Object9 _object9;
+ Object10 _object10;
+ SteppingDisks _steppingDisks;
+ SequenceManager _sequenceManager1, _sequenceManager2;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void remove();
+ virtual void signal();
+ virtual void dispatch();
+};
+
+} // End of namespace Ringworld2
+
+} // End of namespace TsAGE
+
+#endif
diff --git a/engines/tsage/saveload.cpp b/engines/tsage/saveload.cpp
index 522e40c236..db52050b03 100644
--- a/engines/tsage/saveload.cpp
+++ b/engines/tsage/saveload.cpp
@@ -21,23 +21,25 @@
*/
#include "common/savefile.h"
+#include "common/mutex.h"
#include "graphics/palette.h"
#include "graphics/scaler.h"
#include "graphics/thumbnail.h"
#include "tsage/globals.h"
#include "tsage/saveload.h"
+#include "tsage/sound.h"
#include "tsage/tsage.h"
-namespace tSage {
+namespace TsAGE {
-Saver *_saver;
+Saver *g_saver;
SavedObject::SavedObject() {
- _saver->addObject(this);
+ g_saver->addObject(this);
}
SavedObject::~SavedObject() {
- _saver->removeObject(this);
+ g_saver->removeObject(this);
}
/*--------------------------------------------------------------------------*/
@@ -50,7 +52,7 @@ Saver::Saver() {
Saver::~Saver() {
// Internal validation that no saved object is still present
int totalLost = 0;
- for (SynchronizedList<SavedObject *>::iterator i = _saver->_objList.begin(); i != _saver->_objList.end(); ++i) {
+ for (SynchronizedList<SavedObject *>::iterator i = g_saver->_objList.begin(); i != g_saver->_objList.end(); ++i) {
SavedObject *so = *i;
if (so)
++totalLost;
@@ -70,7 +72,7 @@ void Serializer::syncPointer(SavedObject **ptr, Common::Serializer::Version minV
if (isSaving()) {
// Get the object index for the given pointer and write it out
if (*ptr) {
- idx = _saver->blockIndexOf(*ptr);
+ idx = g_saver->blockIndexOf(*ptr);
assert(idx > 0);
}
syncAsUint32LE(idx);
@@ -80,7 +82,7 @@ void Serializer::syncPointer(SavedObject **ptr, Common::Serializer::Version minV
*ptr = NULL;
if (idx > 0)
// For non-zero (null) pointers, create a record for later resolving it to an address
- _saver->addSavedObjectPtr(ptr, idx);
+ g_saver->addSavedObjectPtr(ptr, idx);
}
}
@@ -101,10 +103,24 @@ void Serializer::validate(int v, Common::Serializer::Version minVersion,
error("Savegame is corrupt");
}
+#define DOUBLE_PRECISION 1000000000
+
+void Serializer::syncAsDouble(double &v) {
+ int32 num = (int32)(v);
+ uint32 fraction = (uint32)((v - (int32)v) * DOUBLE_PRECISION);
+
+ syncAsSint32LE(num);
+ syncAsUint32LE(fraction);
+
+ if (isLoading())
+ v = num + (double)fraction / DOUBLE_PRECISION;
+}
+
/*--------------------------------------------------------------------------*/
Common::Error Saver::save(int slot, const Common::String &saveName) {
assert(!getMacroRestoreFlag());
+ Common::StackLock slock1(g_globals->_soundManager._serverDisabledMutex);
// Signal any objects registered for notification
_saveNotifiers.notify(false);
@@ -113,8 +129,12 @@ Common::Error Saver::save(int slot, const Common::String &saveName) {
_macroSaveFlag = true;
_saveSlot = slot;
+ // Try and create the save file
+ Common::OutSaveFile *saveFile = g_system->getSavefileManager()->openForSaving(g_vm->generateSaveName(slot));
+ if (!saveFile)
+ return Common::kCreatingFileFailed;
+
// Set up the serializer
- Common::OutSaveFile *saveFile = g_system->getSavefileManager()->openForSaving(_vm->generateSaveName(slot));
Serializer serializer(NULL, saveFile);
serializer.setSaveVersion(TSAGE_SAVEGAME_VERSION);
@@ -149,6 +169,7 @@ Common::Error Saver::save(int slot, const Common::String &saveName) {
Common::Error Saver::restore(int slot) {
assert(!getMacroRestoreFlag());
+ Common::StackLock slock1(g_globals->_soundManager._serverDisabledMutex);
// Signal any objects registered for notification
_loadNotifiers.notify(false);
@@ -159,7 +180,10 @@ Common::Error Saver::restore(int slot) {
_unresolvedPtrs.clear();
// Set up the serializer
- Common::InSaveFile *saveFile = g_system->getSavefileManager()->openForLoading(_vm->generateSaveName(slot));
+ Common::InSaveFile *saveFile = g_system->getSavefileManager()->openForLoading(g_vm->generateSaveName(slot));
+ if (!saveFile)
+ return Common::kReadingFailed;
+
Serializer serializer(saveFile, NULL);
// Read in the savegame header
@@ -205,7 +229,7 @@ Common::Error Saver::restore(int slot) {
// Final post-restore notifications
_macroRestoreFlag = false;
- _loadNotifiers.notify(false);
+ _loadNotifiers.notify(true);
return Common::kNoError;
}
@@ -232,12 +256,9 @@ bool Saver::readSavegameHeader(Common::InSaveFile *in, tSageSavegameHeader &head
while ((ch = (char)in->readByte()) != '\0') header.saveName += ch;
// Get the thumbnail
- header.thumbnail = new Graphics::Surface();
- if (!Graphics::loadThumbnail(*in, *header.thumbnail)) {
- delete header.thumbnail;
- header.thumbnail = NULL;
+ header.thumbnail = Graphics::loadThumbnail(*in);
+ if (!header.thumbnail)
return false;
- }
// Read in save date/time
header.saveYear = in->readSint16LE();
@@ -265,10 +286,10 @@ void Saver::writeSavegameHeader(Common::OutSaveFile *out, tSageSavegameHeader &h
// Create a thumbnail and save it
Graphics::Surface *thumb = new Graphics::Surface();
- Graphics::Surface s = _globals->_screenSurface.lockSurface();
+ Graphics::Surface s = g_globals->_screenSurface.lockSurface();
::createThumbnail(thumb, (const byte *)s.pixels, SCREEN_WIDTH, SCREEN_HEIGHT, thumbPalette);
Graphics::saveThumbnail(*out, *thumb);
- _globals->_screenSurface.unlockSurface();
+ g_globals->_screenSurface.unlockSurface();
delete thumb;
// Write out the save date/time
@@ -279,7 +300,7 @@ void Saver::writeSavegameHeader(Common::OutSaveFile *out, tSageSavegameHeader &h
out->writeSint16LE(td.tm_mday);
out->writeSint16LE(td.tm_hour);
out->writeSint16LE(td.tm_min);
- out->writeUint32LE(_globals->_events.getFrameNumber());
+ out->writeUint32LE(g_globals->_events.getFrameNumber());
}
/**
@@ -321,7 +342,7 @@ void Saver::removeObject(SavedObject *obj) {
* Returns true if any savegames exist
*/
bool Saver::savegamesExist() const {
- Common::String slot1Name = _vm->generateSaveName(1);
+ Common::String slot1Name = g_vm->generateSaveName(1);
Common::InSaveFile *saveFile = g_system->getSavefileManager()->openForLoading(slot1Name);
bool result = saveFile != NULL;
@@ -396,4 +417,4 @@ void Saver::resolveLoadPointers() {
error("Could not resolve savegame block pointers");
}
-} // End of namespace tSage
+} // End of namespace TsAGE
diff --git a/engines/tsage/saveload.h b/engines/tsage/saveload.h
index c1c2851f28..52b23413d4 100644
--- a/engines/tsage/saveload.h
+++ b/engines/tsage/saveload.h
@@ -29,11 +29,11 @@
#include "common/savefile.h"
#include "common/serializer.h"
-namespace tSage {
+namespace TsAGE {
typedef void (*SaveNotifierFn)(bool postFlag);
-#define TSAGE_SAVEGAME_VERSION 5
+#define TSAGE_SAVEGAME_VERSION 7
class SavedObject;
@@ -77,6 +77,7 @@ public:
Common::Serializer::Version maxVersion = kLastVersion);
void validate(int v, Common::Serializer::Version minVersion = 0,
Common::Serializer::Version maxVersion = kLastVersion);
+ void syncAsDouble(double &v);
};
/*--------------------------------------------------------------------------*/
@@ -137,6 +138,18 @@ public:
}
}
}
+
+ void addBefore(T existingItem, T newItem) {
+ typename SynchronizedList<T>::iterator i = this->begin();
+ while ((i != this->end()) && (*i != existingItem)) ++i;
+ this->insert(i, newItem);
+ }
+ void addAfter(T existingItem, T newItem) {
+ typename SynchronizedList<T>::iterator i = this->begin();
+ while ((i != this->end()) && (*i != existingItem)) ++i;
+ if (i != this->end()) ++i;
+ this->insert(i, newItem);
+ }
};
/**
@@ -219,8 +232,8 @@ public:
void listObjects();
};
-extern Saver *_saver;
+extern Saver *g_saver;
-} // End of namespace tSage
+} // End of namespace TsAGE
#endif
diff --git a/engines/tsage/scenes.cpp b/engines/tsage/scenes.cpp
index 6352918e39..686b8725f5 100644
--- a/engines/tsage/scenes.cpp
+++ b/engines/tsage/scenes.cpp
@@ -20,13 +20,17 @@
*
*/
+#include "common/config-manager.h"
+#include "common/translation.h"
+#include "gui/saveload.h"
#include "tsage/scenes.h"
#include "tsage/globals.h"
-#include "tsage/ringworld_logic.h"
+#include "tsage/ringworld/ringworld_logic.h"
#include "tsage/tsage.h"
#include "tsage/saveload.h"
+#include "tsage/staticres.h"
-namespace tSage {
+namespace TsAGE {
SceneManager::SceneManager() {
_scene = NULL;
@@ -36,8 +40,9 @@ SceneManager::SceneManager() {
_previousScene = 0;
_fadeMode = FADEMODE_GRADUAL;
_scrollerRect = Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
- _saver->addListener(this);
+ g_saver->addListener(this);
_objectCount = 0;
+ _loadMode = 0;
}
SceneManager::~SceneManager() {
@@ -45,7 +50,7 @@ SceneManager::~SceneManager() {
}
void SceneManager::setNewScene(int sceneNumber) {
- warning("SetNewScene(%d)", sceneNumber);
+ debug(1, "SetNewScene(%d)", sceneNumber);
_nextSceneNumber = sceneNumber;
}
@@ -55,7 +60,7 @@ void SceneManager::checkScene() {
_nextSceneNumber = -1;
}
- _globals->dispatchSounds();
+ g_globals->dispatchSounds();
}
void SceneManager::sceneChange() {
@@ -68,24 +73,16 @@ void SceneManager::sceneChange() {
}
// Clear the scene objects
- SynchronizedList<SceneObject *>::iterator io = _globals->_sceneObjects->begin();
- while (io != _globals->_sceneObjects->end()) {
- SceneObject *sceneObj = *io;
- ++io;
- sceneObj->removeObject();
- }
-
- // Clear the secondary scene object list
- io = _globals->_sceneManager._altSceneObjects.begin();
- while (io != _globals->_sceneManager._altSceneObjects.end()) {
+ SynchronizedList<SceneObject *>::iterator io = g_globals->_sceneObjects->begin();
+ while (io != g_globals->_sceneObjects->end()) {
SceneObject *sceneObj = *io;
++io;
sceneObj->removeObject();
}
// Clear the hotspot list
- SynchronizedList<SceneItem *>::iterator ii = _globals->_sceneItems.begin();
- while (ii != _globals->_sceneItems.end()) {
+ SynchronizedList<SceneItem *>::iterator ii = g_globals->_sceneItems.begin();
+ while (ii != g_globals->_sceneItems.end()) {
SceneItem *sceneItem = *ii;
++ii;
sceneItem->remove();
@@ -110,47 +107,47 @@ void SceneManager::sceneChange() {
// Ensure that the same number of objects are registered now as when the scene started
if (_objectCount > 0) {
- assert(_objectCount == _saver->getObjectCount());
+ assert(_objectCount == g_saver->getObjectCount());
}
- _objectCount = _saver->getObjectCount();
- _globals->_sceneHandler._delayTicks = 2;
+ _objectCount = g_saver->getObjectCount();
+ g_globals->_sceneHandler->_delayTicks = 2;
// Instantiate and set the new scene
_scene = getNewScene();
- if (!_saver->getMacroRestoreFlag())
+ if (!g_saver->getMacroRestoreFlag())
_scene->postInit();
else
_scene->loadScene(activeScreenNumber);
}
Scene *SceneManager::getNewScene() {
- return _globals->_game->createScene(_nextSceneNumber);
+ return g_globals->_game->createScene(_nextSceneNumber);
}
void SceneManager::fadeInIfNecessary() {
if (_hasPalette) {
uint32 adjustData = 0;
for (int percent = 0; percent < 100; percent += 5) {
- if (_globals->_sceneManager._fadeMode == FADEMODE_IMMEDIATE)
+ if (g_globals->_sceneManager._fadeMode == FADEMODE_IMMEDIATE)
percent = 100;
- _globals->_scenePalette.fade((const byte *)&adjustData, false, percent);
+ g_globals->_scenePalette.fade((const byte *)&adjustData, false, percent);
g_system->updateScreen();
g_system->delayMillis(10);
}
- _globals->_scenePalette.refresh();
+ g_globals->_scenePalette.refresh();
_hasPalette = false;
}
}
void SceneManager::changeScene(int newSceneNumber) {
- warning("changeScene(%d)", newSceneNumber);
+ debug(1, "changeScene(%d)", newSceneNumber);
// Fade out the scene
ScenePalette scenePalette;
uint32 adjustData = 0;
- _globals->_scenePalette.clearListeners();
+ g_globals->_scenePalette.clearListeners();
scenePalette.getPalette();
for (int percent = 100; percent >= 0; percent -= 5) {
@@ -160,7 +157,7 @@ void SceneManager::changeScene(int newSceneNumber) {
// Stop any objects that were animating
SynchronizedList<SceneObject *>::iterator i;
- for (i = _globals->_sceneObjects->begin(); i != _globals->_sceneObjects->end(); ++i) {
+ for (i = g_globals->_sceneObjects->begin(); i != g_globals->_sceneObjects->end(); ++i) {
SceneObject *sceneObj = *i;
Common::Point pt(0, 0);
sceneObj->addMover(NULL, &pt);
@@ -171,37 +168,42 @@ void SceneManager::changeScene(int newSceneNumber) {
}
// Blank out the screen
- _globals->_screenSurface.fillRect(_globals->_screenSurface.getBounds(), 0);
+ g_globals->_screenSurface.fillRect(g_globals->_screenSurface.getBounds(), 0);
+
+ // If there are any fading sounds, wait until fading is complete
+ while (g_globals->_soundManager.isFading()) {
+ g_system->delayMillis(10);
+ }
// Set the new scene to be loaded
setNewScene(newSceneNumber);
}
void SceneManager::setup() {
- _saver->addLoadNotifier(SceneManager::loadNotifier);
+ g_saver->addLoadNotifier(SceneManager::loadNotifier);
setBackSurface();
}
void SceneManager::setBackSurface() {
- int size = _globals->_sceneManager._scene->_backgroundBounds.width() *
- _globals->_sceneManager._scene->_backgroundBounds.height();
+ int size = g_globals->_sceneManager._scene->_backgroundBounds.width() *
+ g_globals->_sceneManager._scene->_backgroundBounds.height();
if (size > 96000) {
- if (_globals->_sceneManager._scene->_backgroundBounds.width() <= SCREEN_WIDTH) {
+ if (g_globals->_sceneManager._scene->_backgroundBounds.width() <= SCREEN_WIDTH) {
// Standard size creation
- _globals->_sceneManager._scene->_backSurface.create(SCREEN_WIDTH, SCREEN_HEIGHT * 3 / 2);
- _globals->_sceneManager._scrollerRect = Rect(0, 30, SCREEN_WIDTH, SCREEN_HEIGHT - 30);
+ g_globals->_sceneManager._scene->_backSurface.create(SCREEN_WIDTH, SCREEN_HEIGHT * 3 / 2);
+ g_globals->_sceneManager._scrollerRect = Rect(0, 30, SCREEN_WIDTH, SCREEN_HEIGHT - 30);
} else {
// Wide screen needs extra space to allow for scrolling
- _globals->_sceneManager._scene->_backSurface.create(SCREEN_WIDTH * 3 / 2, SCREEN_HEIGHT);
- _globals->_sceneManager._scrollerRect = Rect(80, 0, SCREEN_WIDTH - 80, SCREEN_HEIGHT);
+ g_globals->_sceneManager._scene->_backSurface.create(SCREEN_WIDTH * 3 / 2, SCREEN_HEIGHT);
+ g_globals->_sceneManager._scrollerRect = Rect(80, 0, SCREEN_WIDTH - 80, SCREEN_HEIGHT);
}
} else {
- _globals->_sceneManager._scene->_backSurface.create(
- _globals->_sceneManager._scene->_backgroundBounds.width(),
- _globals->_sceneManager._scene->_backgroundBounds.height()
+ g_globals->_sceneManager._scene->_backSurface.create(
+ g_globals->_sceneManager._scene->_backgroundBounds.width(),
+ g_globals->_sceneManager._scene->_backgroundBounds.height()
);
- _globals->_sceneManager._scrollerRect = Rect(80, 20, SCREEN_WIDTH - 80, SCREEN_HEIGHT - 20);
+ g_globals->_sceneManager._scrollerRect = Rect(80, 20, SCREEN_WIDTH - 80, SCREEN_HEIGHT - 20);
}
}
@@ -210,9 +212,9 @@ void SceneManager::saveListener(int saveMode) {
void SceneManager::loadNotifier(bool postFlag) {
if (postFlag) {
- if (_globals->_sceneManager._scene->_activeScreenNumber != -1)
- _globals->_sceneManager._scene->loadSceneData(_globals->_sceneManager._scene->_activeScreenNumber);
- _globals->_sceneManager._hasPalette = true;
+ if (g_globals->_sceneManager._scene->_activeScreenNumber != -1)
+ g_globals->_sceneManager._scene->loadSceneData(g_globals->_sceneManager._scene->_activeScreenNumber);
+ g_globals->_sceneManager._hasPalette = true;
}
}
@@ -224,22 +226,29 @@ void SceneManager::setBgOffset(const Common::Point &pt, int loadCount) {
void SceneManager::listenerSynchronize(Serializer &s) {
s.validate("SceneManager");
- if (s.isLoading() && !_globals->_sceneManager._scene)
+ if (s.isLoading() && !g_globals->_sceneManager._scene)
// Loading a savegame straight from the launcher, so instantiate a blank placeholder scene
// in order for the savegame loading to work correctly
- _globals->_sceneManager._scene = new Scene();
+ g_globals->_sceneManager._scene = new Scene();
+
+ // Depreciated: the background scene objects used to be located here
+ uint32 unused = 0;
+ s.syncAsUint32LE(unused);
- _altSceneObjects.synchronize(s);
s.syncAsSint32LE(_sceneNumber);
- s.syncAsUint16LE(_globals->_sceneManager._scene->_activeScreenNumber);
+ s.syncAsUint16LE(g_globals->_sceneManager._scene->_activeScreenNumber);
if (s.isLoading()) {
changeScene(_sceneNumber);
- checkScene();
+
+ if (_nextSceneNumber != -1) {
+ sceneChange();
+ _nextSceneNumber = -1;
+ }
}
- _globals->_sceneManager._scrollerRect.synchronize(s);
- SYNC_POINTER(_globals->_scrollFollower);
+ g_globals->_sceneManager._scrollerRect.synchronize(s);
+ SYNC_POINTER(g_globals->_scrollFollower);
s.syncAsSint16LE(_loadMode);
}
@@ -248,6 +257,7 @@ void SceneManager::listenerSynchronize(Serializer &s) {
Scene::Scene() : _sceneBounds(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT),
_backgroundBounds(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT) {
_sceneMode = 0;
+ _activeScreenNumber = 0;
_oldSceneBounds = Rect(4000, 4000, 4100, 4100);
Common::set_to(&_zoomPercents[0], &_zoomPercents[256], 0);
}
@@ -273,6 +283,9 @@ void Scene::synchronize(Serializer &s) {
s.syncAsUint16LE(_enabledSections[i]);
for (int i = 0; i < 256; ++i)
s.syncAsSint16LE(_zoomPercents[i]);
+
+ if (s.getVersion() >= 7)
+ _bgSceneObjects.synchronize(s);
}
void Scene::postInit(SceneObjectList *OwnerList) {
@@ -292,10 +305,10 @@ void Scene::dispatch() {
}
void Scene::loadScene(int sceneNum) {
- warning("loadScene(%d)", sceneNum);
+ debug(1, "loadScene(%d)", sceneNum);
_screenNumber = sceneNum;
- if (_globals->_scenePalette.loadPalette(sceneNum))
- _globals->_sceneManager._hasPalette = true;
+ if (g_globals->_scenePalette.loadPalette(sceneNum))
+ g_globals->_sceneManager._hasPalette = true;
loadSceneData(sceneNum);
}
@@ -303,20 +316,48 @@ void Scene::loadScene(int sceneNum) {
void Scene::loadSceneData(int sceneNum) {
_activeScreenNumber = sceneNum;
- // Get the basic scene size
- byte *data = _resourceManager->getResource(RES_BITMAP, sceneNum, 9999);
- _backgroundBounds = Rect(0, 0, READ_LE_UINT16(data), READ_LE_UINT16(data + 2));
- _globals->_sceneManager._scene->_sceneBounds.contain(_backgroundBounds);
- DEALLOCATE(data);
+ if (g_vm->getGameID() == GType_Ringworld2) {
+ // Most scenes in Ringworld 2 don't have a scene size resource, but rather just have
+ // a standard 320x200 size. Only read the scene size data for the specific few scenes
+ switch (sceneNum) {
+ case 700:
+ case 1020:
+ case 1100:
+ case 1700:
+ case 2600:
+ case 2950:
+ case 3100:
+ case 3101:
+ case 3275:
+ case 3600: {
+ // Get the basic scene size from the resource
+ byte *data = g_resourceManager->getResource(RES_BITMAP, sceneNum, 9999);
+ _backgroundBounds = Rect(0, 0, READ_LE_UINT16(data), READ_LE_UINT16(data + 2));
+ DEALLOCATE(data);
+ break;
+ }
+ default:
+ // For all other scenes, use a standard screen size
+ _backgroundBounds = Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
+ break;
+ }
+ } else {
+ // Get the basic scene size
+ byte *data = g_resourceManager->getResource(RES_BITMAP, sceneNum, 9999);
+ _backgroundBounds = Rect(0, 0, READ_LE_UINT16(data), READ_LE_UINT16(data + 2));
+ DEALLOCATE(data);
+ }
+
+ g_globals->_sceneManager._scene->_sceneBounds.contain(_backgroundBounds);
// Set up a surface for storing the scene background
SceneManager::setBackSurface();
// Load the data lists for the scene
- _globals->_walkRegions.load(sceneNum);
+ g_globals->_walkRegions.load(sceneNum);
// Load the item regions of the scene
- _globals->_sceneRegions.load(sceneNum);
+ g_globals->_sceneRegions.load(sceneNum);
// Load the priority regions
_priorities.load(sceneNum);
@@ -324,13 +365,13 @@ void Scene::loadSceneData(int sceneNum) {
// Initialize the section enabled list
Common::set_to(&_enabledSections[0], &_enabledSections[16 * 16], 0xffff);
- _globals->_sceneOffset.x = (_sceneBounds.left / 160) * 160;
- _globals->_sceneOffset.y = (_sceneBounds.top / 100) * 100;
- _globals->_paneRefreshFlag[0] = 1;
- _globals->_paneRefreshFlag[1] = 1;
- _globals->_sceneManager._loadMode = 1;
- _globals->_sceneManager._sceneLoadCount = 0;
- _globals->_sceneManager._sceneBgOffset = Common::Point(0, 0);
+ g_globals->_sceneOffset.x = (_sceneBounds.left / 160) * 160;
+ g_globals->_sceneOffset.y = (_sceneBounds.top / 100) * 100;
+ g_globals->_paneRefreshFlag[0] = 1;
+ g_globals->_paneRefreshFlag[1] = 1;
+ g_globals->_sceneManager._loadMode = 1;
+ g_globals->_sceneManager._sceneLoadCount = 0;
+ g_globals->_sceneManager._sceneBgOffset = Common::Point(0, 0);
// Load the background for the scene
loadBackground(0, 0);
@@ -342,35 +383,35 @@ void Scene::loadBackground(int xAmount, int yAmount) {
_sceneBounds.contain(_backgroundBounds);
_sceneBounds.left &= ~3;
_sceneBounds.right &= ~3;
- _globals->_sceneOffset.x &= ~3;
+ g_globals->_sceneOffset.x &= ~3;
if ((_sceneBounds.top != _oldSceneBounds.top) || (_sceneBounds.left != _oldSceneBounds.left)) {
- if (_globals->_sceneManager._loadMode == 0) {
- _globals->_paneRefreshFlag[0] = 2;
- _globals->_paneRefreshFlag[1] = 2;
- _globals->_sceneManager._loadMode = 2;
+ if (g_globals->_sceneManager._loadMode == 0) {
+ g_globals->_paneRefreshFlag[0] = 2;
+ g_globals->_paneRefreshFlag[1] = 2;
+ g_globals->_sceneManager._loadMode = 2;
}
_oldSceneBounds = _sceneBounds;
}
- _globals->_sceneOffset.x = (_sceneBounds.left / 160) * 160;
- _globals->_sceneOffset.y = (_sceneBounds.top / 100) * 100;
+ g_globals->_sceneOffset.x = (_sceneBounds.left / 160) * 160;
+ g_globals->_sceneOffset.y = (_sceneBounds.top / 100) * 100;
if ((_backgroundBounds.width() / 160) == 3)
- _globals->_sceneOffset.x = 0;
+ g_globals->_sceneOffset.x = 0;
if ((_backgroundBounds.height() / 100) == 3)
- _globals->_sceneOffset.y = 0;
+ g_globals->_sceneOffset.y = 0;
- if ((_globals->_sceneOffset.x != _globals->_prevSceneOffset.x) ||
- (_globals->_sceneOffset.y != _globals->_prevSceneOffset.y)) {
+ if ((g_globals->_sceneOffset.x != g_globals->_prevSceneOffset.x) ||
+ (g_globals->_sceneOffset.y != g_globals->_prevSceneOffset.y)) {
// Change has happend, so refresh background
- _globals->_prevSceneOffset = _globals->_sceneOffset;
+ g_globals->_prevSceneOffset = g_globals->_sceneOffset;
refreshBackground(xAmount, yAmount);
}
}
void Scene::refreshBackground(int xAmount, int yAmount) {
- if (_globals->_sceneManager._scene->_activeScreenNumber == -1)
+ if (g_globals->_sceneManager._scene->_activeScreenNumber == -1)
return;
// Set the quadrant ranges
@@ -415,6 +456,11 @@ void Scene::refreshBackground(int xAmount, int yAmount) {
(xSectionSrc + 1) * 160, (ySectionSrc + 1) * 100);
Rect destBounds(xSectionDest * 160, ySectionDest * 100,
(xSectionDest + 1) * 160, (ySectionDest + 1) * 100);
+ if (g_vm->getGameID() == GType_BlueForce) {
+ // For Blue Force, if the scene has an interface area, exclude it from the copy
+ srcBounds.bottom = MIN<int16>(srcBounds.bottom, BF_GLOBALS._interfaceY);
+ destBounds.bottom = MIN<int16>(destBounds.bottom, BF_GLOBALS._interfaceY);
+ }
_backSurface.copyFrom(_backSurface, srcBounds, destBounds);
}
@@ -427,28 +473,27 @@ void Scene::refreshBackground(int xAmount, int yAmount) {
}
if (changedFlag) {
- drawAltObjects();
+ drawBackgroundObjects();
}
}
-void Scene::drawAltObjects() {
+void Scene::drawBackgroundObjects() {
Common::Array<SceneObject *> objList;
// Initial loop to set the priority for entries in the list
- for (SynchronizedList<SceneObject *>::iterator i = _globals->_sceneManager._altSceneObjects.begin();
- i != _globals->_sceneManager._altSceneObjects.end(); ++i) {
+ for (SynchronizedList<SceneObject *>::iterator i = _bgSceneObjects.begin(); i != _bgSceneObjects.end(); ++i) {
SceneObject *obj = *i;
objList.push_back(obj);
// Handle updating object priority
if (!(obj->_flags & OBJFLAG_FIXED_PRIORITY)) {
obj->_priority = MIN((int)obj->_position.y - 1,
- (int)_globals->_sceneManager._scene->_backgroundBounds.bottom);
+ (int)g_globals->_sceneManager._scene->_backgroundBounds.bottom);
}
}
// Sort the list by priority
- _globals->_sceneManager._altSceneObjects.sortList(objList);
+ _bgSceneObjects.sortList(objList);
// Drawing loop
for (uint objIndex = 0; objIndex < objList.size(); ++objIndex) {
@@ -494,6 +539,51 @@ void Scene::setZoomPercents(int yStart, int minPercent, int yEnd, int maxPercent
/*--------------------------------------------------------------------------*/
+void Game::restartGame() {
+ if (MessageDialog::show(RESTART_MSG, CANCEL_BTN_STRING, RESTART_BTN_STRING) == 1)
+ g_globals->_game->restart();
+}
+
+void Game::saveGame() {
+ if (!g_vm->canSaveGameStateCurrently())
+ MessageDialog::show(SAVING_NOT_ALLOWED_MSG, OK_BTN_STRING);
+ else {
+ // Show the save dialog
+ handleSaveLoad(true, g_globals->_sceneHandler->_saveGameSlot, g_globals->_sceneHandler->_saveName);
+ }
+}
+
+void Game::restoreGame() {
+ if (!g_vm->canLoadGameStateCurrently())
+ MessageDialog::show(RESTORING_NOT_ALLOWED_MSG, OK_BTN_STRING);
+ else {
+ // Show the load dialog
+ handleSaveLoad(false, g_globals->_sceneHandler->_loadGameSlot, g_globals->_sceneHandler->_saveName);
+ }
+}
+
+void Game::quitGame() {
+ if (MessageDialog::show(QUIT_CONFIRM_MSG, CANCEL_BTN_STRING, QUIT_BTN_STRING) == 1)
+ g_vm->quitGame();
+}
+
+void Game::handleSaveLoad(bool saveFlag, int &saveSlot, Common::String &saveName) {
+ const EnginePlugin *plugin = 0;
+ EngineMan.findGame(g_vm->getGameId(), &plugin);
+ GUI::SaveLoadChooser *dialog;
+ if (saveFlag)
+ dialog = new GUI::SaveLoadChooser(_("Save game:"), _("Save"));
+ else
+ dialog = new GUI::SaveLoadChooser(_("Load game:"), _("Load"));
+
+ dialog->setSaveMode(saveFlag);
+
+ saveSlot = dialog->runModalWithPluginAndTarget(plugin, ConfMan.getActiveDomainName());
+ saveName = dialog->getResultString();
+
+ delete dialog;
+}
+
void Game::execute() {
// Main game loop
bool activeFlag = false;
@@ -507,7 +597,7 @@ void Game::execute() {
activeFlag = true;
}
}
- } while (activeFlag && !_vm->getEventManager()->shouldQuit());
+ } while (activeFlag && !g_vm->shouldQuit());
}
-} // End of namespace tSage
+} // End of namespace TsAGE
diff --git a/engines/tsage/scenes.h b/engines/tsage/scenes.h
index 5845efaec9..2daa71ba98 100644
--- a/engines/tsage/scenes.h
+++ b/engines/tsage/scenes.h
@@ -29,11 +29,11 @@
#include "tsage/core.h"
#include "tsage/saveload.h"
-namespace tSage {
+namespace TsAGE {
class Scene : public StripCallback {
private:
- void drawAltObjects();
+ void drawBackgroundObjects();
public:
int _field12;
int _screenNumber;
@@ -48,6 +48,7 @@ public:
int _enabledSections[256];
int _zoomPercents[256];
ScenePriorities _priorities;
+ SceneObjectList _bgSceneObjects;
int _fieldA;
int _fieldE;
@@ -62,17 +63,18 @@ public:
virtual void process(Event &event);
virtual void dispatch();
virtual void loadScene(int sceneNum);
+ virtual void refreshBackground(int xAmount, int yAmount);
void setZoomPercents(int yStart, int minPercent, int yEnd, int maxPercent);
void loadBackground(int xAmount, int yAmount);
- void refreshBackground(int xAmount, int yAmount);
+
void loadSceneData(int sceneNum);
};
class SceneManager : public GameHandler, public SaveListener {
private:
- void disposeRegions() {
- // No need to do anything, since regions will be freed automatically when the scene is
+ void disposeRegions() {
+ // No need to do anything, since regions will be freed automatically when the scene is
}
Scene *getNewScene();
public:
@@ -86,7 +88,6 @@ public:
Common::Point _sceneBgOffset;
int _sceneLoadCount;
Rect _scrollerRect;
- SceneObjectList _altSceneObjects;
int _objectCount;
public:
SceneManager();
@@ -115,7 +116,7 @@ protected:
SynchronizedList<GameHandler *> _handlers;
static bool notLockedFn(GameHandler *g);
- virtual void handleSaveLoad(bool saveFlag, int &saveSlot, Common::String &saveName) {}
+ virtual void handleSaveLoad(bool saveFlag, int &saveSlot, Common::String &saveName);
public:
virtual ~Game() {}
@@ -125,15 +126,18 @@ public:
void execute();
virtual void start() = 0;
virtual void restart() {}
- virtual void restartGame() {}
- virtual void saveGame() {}
- virtual void restoreGame() {}
- virtual void quitGame() {}
+ virtual void restartGame();
+ virtual void saveGame();
+ virtual void restoreGame();
+ virtual void quitGame();
virtual void endGame(int resNum, int lineNum) {}
virtual Scene *createScene(int sceneNumber) = 0;
virtual void processEvent(Event &event) {}
+ virtual void rightClick() {}
+ virtual bool canSaveGameStateCurrently() = 0;
+ virtual bool canLoadGameStateCurrently() = 0;
};
-} // End of namespace tSage
+} // End of namespace TsAGE
#endif
diff --git a/engines/tsage/sound.cpp b/engines/tsage/sound.cpp
index dc7b6599ed..b61e63236b 100644
--- a/engines/tsage/sound.cpp
+++ b/engines/tsage/sound.cpp
@@ -20,6 +20,7 @@
*
*/
+#include "audio/decoders/raw.h"
#include "common/config-manager.h"
#include "tsage/core.h"
#include "tsage/globals.h"
@@ -27,7 +28,7 @@
#include "tsage/graphics.h"
#include "tsage/tsage.h"
-namespace tSage {
+namespace TsAGE {
static SoundManager *_soundManager = NULL;
@@ -44,7 +45,6 @@ SoundManager::SoundManager() {
_groupsAvail = 0;
_newVolume = _masterVol = 127;
- _suspendedCount = 0;
_driversDetected = false;
_needToRethink = false;
@@ -53,6 +53,9 @@ SoundManager::SoundManager() {
SoundManager::~SoundManager() {
if (__sndmgrReady) {
+ Common::StackLock slock(_serverDisabledMutex);
+ g_vm->_mixer->stopAll();
+
for (Common::List<Sound *>::iterator i = _soundList.begin(); i != _soundList.end(); ) {
Sound *s = *i;
++i;
@@ -64,6 +67,16 @@ SoundManager::~SoundManager() {
delete driver;
}
_sfTerminate();
+
+// g_system->getTimerManager()->removeTimerProc(_sfUpdateCallback);
+ }
+
+ // Free any allocated voice type structures
+ for (int idx = 0; idx < SOUND_ARR_SIZE; ++idx) {
+ if (sfManager()._voiceTypeStructPtrs[idx]) {
+ delete sfManager()._voiceTypeStructPtrs[idx];
+ sfManager()._voiceTypeStructPtrs[idx] = NULL;
+ }
}
_soundManager = NULL;
@@ -71,9 +84,16 @@ SoundManager::~SoundManager() {
void SoundManager::postInit() {
if (!__sndmgrReady) {
- _saver->addSaveNotifier(&SoundManager::saveNotifier);
- _saver->addLoadNotifier(&SoundManager::loadNotifier);
- _saver->addListener(this);
+ g_saver->addSaveNotifier(&SoundManager::saveNotifier);
+ g_saver->addLoadNotifier(&SoundManager::loadNotifier);
+ g_saver->addListener(this);
+
+
+// I originally separated the sound manager update method into a separate thread, since
+// it handles updates for both music and Fx. However, since Adlib updates also get done in a
+// thread, and doesn't get too far ahead, I've left it to the AdlibSoundDriver class to
+// call the update method, rather than having it be called separately
+// g_system->getTimerManager()->installTimerProc(_sfUpdateCallback, 1000000 / SOUND_FREQUENCY, NULL, "tsageSoundUpdate");
__sndmgrReady = true;
}
}
@@ -119,7 +139,10 @@ Common::List<SoundDriverEntry> &SoundManager::buildDriverList(bool detectFlag) {
assert(__sndmgrReady);
_availableDrivers.clear();
- // Build up a list of available drivers. Currently we only implement an Adlib driver
+ // Build up a list of available drivers. Currently we only implement an Adlib music
+ // and SoundBlaster FX driver
+
+ // Adlib driver
SoundDriverEntry sd;
sd.driverNum = ADLIB_DRIVER_NUM;
sd.status = detectFlag ? SNDSTATUS_DETECTED : SNDSTATUS_SKIPPED;
@@ -129,12 +152,23 @@ Common::List<SoundDriverEntry> &SoundManager::buildDriverList(bool detectFlag) {
sd.longDescription = "3812fm";
_availableDrivers.push_back(sd);
+ // SoundBlaster entry
+ SoundDriverEntry sdFx;
+ sdFx.driverNum = SBLASTER_DRIVER_NUM;
+ sdFx.status = detectFlag ? SNDSTATUS_DETECTED : SNDSTATUS_SKIPPED;
+ sdFx.field2 = 0;
+ sdFx.field6 = 15000;
+ sdFx.shortDescription = "SndBlast";
+ sdFx.longDescription = "SoundBlaster";
+ _availableDrivers.push_back(sdFx);
+
_driversDetected = true;
return _availableDrivers;
}
void SoundManager::installConfigDrivers() {
installDriver(ADLIB_DRIVER_NUM);
+ installDriver(SBLASTER_DRIVER_NUM);
}
Common::List<SoundDriverEntry> &SoundManager::getDriverList(bool detectFlag) {
@@ -177,7 +211,7 @@ void SoundManager::installDriver(int driverNum) {
case ROLAND_DRIVER_NUM:
case ADLIB_DRIVER_NUM: {
// Handle loading bank infomation
- byte *bankData = _resourceManager->getResource(RES_BANK, driverNum, 0, true);
+ byte *bankData = g_resourceManager->getResource(RES_BANK, driverNum, 0, true);
if (bankData) {
// Install the patch bank data
_sfInstallPatchBank(driver, bankData);
@@ -199,8 +233,14 @@ void SoundManager::installDriver(int driverNum) {
* Instantiate a driver class for the specified driver number
*/
SoundDriver *SoundManager::instantiateDriver(int driverNum) {
- assert(driverNum == ADLIB_DRIVER_NUM);
- return new AdlibSoundDriver();
+ switch (driverNum) {
+ case ADLIB_DRIVER_NUM:
+ return new AdlibSoundDriver();
+ case SBLASTER_DRIVER_NUM:
+ return new SoundBlasterDriver();
+ default:
+ error("Unknown sound driver - %d", driverNum);
+ }
}
/**
@@ -328,9 +368,6 @@ void SoundManager::rethinkVoiceTypes() {
}
void SoundManager::_sfSoundServer() {
- Common::StackLock slock1(sfManager()._serverDisabledMutex);
- Common::StackLock slock2(sfManager()._serverSuspendedMutex);
-
if (sfManager()._needToRethink) {
_sfRethinkVoiceTypes();
sfManager()._needToRethink = false;
@@ -342,13 +379,25 @@ void SoundManager::_sfSoundServer() {
if (sfManager()._newVolume != sfManager()._masterVol)
_sfSetMasterVol(sfManager()._newVolume);
+ // If a time index has been set for any sound, fast forward to it
+ SynchronizedList<Sound *>::iterator i;
+ for (i = sfManager()._playList.begin(); i != sfManager()._playList.end(); ++i) {
+ Sound *s = *i;
+ if (s->_newTimeIndex != 0) {
+ s->mute(true);
+ s->_soSetTimeIndex(s->_newTimeIndex);
+ s->mute(false);
+ s->_newTimeIndex = 0;
+ }
+ }
+
// Handle any fading if necessary
_sfProcessFading();
// Poll all sound drivers in case they need it
- for (Common::List<SoundDriver *>::iterator i = sfManager()._installedDrivers.begin();
- i != sfManager()._installedDrivers.end(); ++i) {
- (*i)->poll();
+ for (Common::List<SoundDriver *>::iterator j = sfManager()._installedDrivers.begin();
+ j != sfManager()._installedDrivers.end(); ++j) {
+ (*j)->poll();
}
}
@@ -410,6 +459,22 @@ void SoundManager::_sfProcessFading() {
}
}
+bool SoundManager::isFading() {
+ Common::StackLock slock(sfManager()._serverSuspendedMutex);
+
+ // Loop through any active sounds to see if any are being actively faded
+ Common::List<Sound *>::iterator i = sfManager()._playList.begin();
+ while (i != sfManager()._playList.end()) {
+ Sound *s = *i;
+ ++i;
+
+ if (s->_fadeDest != -1)
+ return true;
+ }
+
+ return false;
+}
+
void SoundManager::_sfUpdateVoiceStructs() {
for (int voiceIndex = 0; voiceIndex < SOUND_ARR_SIZE; ++voiceIndex) {
VoiceTypeStruct *vs = sfManager()._voiceTypeStructPtrs[voiceIndex];
@@ -474,7 +539,7 @@ void SoundManager::saveNotifier(bool postFlag) {
}
void SoundManager::saveNotifierProc(bool postFlag) {
- warning("TODO: SoundManager::saveNotifierProc");
+ // Nothing needs to be done when saving the game
}
void SoundManager::loadNotifier(bool postFlag) {
@@ -482,12 +547,37 @@ void SoundManager::loadNotifier(bool postFlag) {
}
void SoundManager::loadNotifierProc(bool postFlag) {
- warning("TODO: SoundManager::loadNotifierProc");
+ if (!postFlag) {
+ // Stop any currently playing sounds
+ if (__sndmgrReady) {
+ Common::StackLock slock(_serverDisabledMutex);
+
+ for (Common::List<Sound *>::iterator i = _soundList.begin(); i != _soundList.end(); ) {
+ Sound *s = *i;
+ ++i;
+ s->stop();
+ }
+ }
+ } else {
+ // Savegame is now loaded, so iterate over the sound list to prime any sounds as necessary
+ for (Common::List<Sound *>::iterator i = _soundList.begin(); i != _soundList.end(); ++i) {
+ Sound *s = *i;
+ s->orientAfterRestore();
+ }
+ }
}
void SoundManager::listenerSynchronize(Serializer &s) {
s.validate("SoundManager");
- warning("TODO: SoundManager listenerSynchronise");
+ assert(__sndmgrReady && _driversDetected);
+
+ if (s.getVersion() < 6)
+ return;
+
+ Common::StackLock slock(_serverDisabledMutex);
+ _playList.synchronize(s);
+
+ _soundList.synchronize(s);
}
/*--------------------------------------------------------------------------*/
@@ -626,11 +716,11 @@ void SoundManager::_sfRethinkSoundDrivers() {
byteVal = *groupData;
groupData += 2;
- for (idx = 0; idx < byteVal; ++idx) {
+ for (int entryIndez = 0; entryIndez < byteVal; ++entryIndez) {
VoiceStructEntry ve;
memset(&ve, 0, sizeof(VoiceStructEntry));
- ve._voiceNum = idx;
+ ve._voiceNum = entryIndez;
ve._driver = driver;
ve._type1._field4 = -1;
ve._type1._field5 = 0;
@@ -1128,8 +1218,7 @@ void SoundManager::_sfRethinkVoiceTypes() {
if (!vse2._sound && (vse2._sound3 == sound) && (vse2._channelNum3 == channelNum)) {
vse2._sound = sound;
vse2._channelNum = channelNum;
- vse._channelNum = vse2._channelNum2;
- vse._priority = vse2._priority2;
+ vse2._priority = vse._priority2;
vse._sound2 = NULL;
break;
}
@@ -1150,7 +1239,7 @@ void SoundManager::_sfRethinkVoiceTypes() {
vse2._sound = vse._sound2;
vse2._channelNum = vse._channelNum2;
vse2._priority = vse._priority2;
- vse._field4 = -1;
+ vse2._field4 = -1;
vse2._field5 = 0;
vse2._field6 = 0;
@@ -1175,7 +1264,7 @@ void SoundManager::_sfRethinkVoiceTypes() {
SoundDriver *driver = vs->_entries[idx]._driver;
assert(driver);
- driver->updateVoice(voiceIndex);
+ driver->updateVoice(vs->_entries[idx]._voiceNum);
}
}
}
@@ -1188,7 +1277,7 @@ void SoundManager::_sfUpdateVolume(Sound *sound) {
}
void SoundManager::_sfDereferenceAll() {
- // Orignal used handles for both the driver list and voiceStructPtrs list. This method then refreshed
+ // Orignal used handles for both the driver list and voiceTypeStructPtrs list. This method then refreshed
// pointer lists based on the handles. Since in ScummVM we're just using pointers directly, this
// method doesn't need any implementation
}
@@ -1273,11 +1362,10 @@ void SoundManager::_sfExtractGroupMask() {
bool SoundManager::_sfInstallDriver(SoundDriver *driver) {
if (!driver->open())
return false;
-
- driver->setUpdateCallback(_sfUpdateCallback, (void *)&sfManager());
+
sfManager()._installedDrivers.push_back(driver);
driver->_groupOffset = driver->getGroupData();
- driver->_groupMask = READ_LE_UINT32(driver->_groupOffset);
+ driver->_groupMask = driver->_groupOffset->groupMask;
_sfExtractGroupMask();
_sfRethinkSoundDrivers();
@@ -1295,7 +1383,7 @@ void SoundManager::_sfUnInstallDriver(SoundDriver *driver) {
}
void SoundManager::_sfInstallPatchBank(SoundDriver *driver, const byte *bankData) {
- driver->installPatch(bankData, _vm->_memoryManager.getSize(bankData));
+ driver->installPatch(bankData, g_vm->_memoryManager.getSize(bankData));
}
/**
@@ -1379,6 +1467,7 @@ Sound::Sound() {
_fadeCounter = 0;
_stopAfterFadeFlag = false;
_timer = 0;
+ _newTimeIndex = 0;
_loopTimer = 0;
_trackInfo._numTracks = 0;
_primed = false;
@@ -1411,13 +1500,43 @@ Sound::~Sound() {
stop();
}
+void Sound::synchronize(Serializer &s) {
+ if (s.getVersion() < 6)
+ return;
+
+ assert(!_remoteReceiver);
+
+ s.syncAsSint16LE(_soundResID);
+ s.syncAsByte(_primed);
+ s.syncAsByte(_stoppedAsynchronously);
+ s.syncAsSint16LE(_group);
+ s.syncAsSint16LE(_sndResPriority);
+ s.syncAsSint16LE(_fixedPriority);
+ s.syncAsSint16LE(_sndResLoop);
+ s.syncAsSint16LE(_fixedLoop);
+ s.syncAsSint16LE(_priority);
+ s.syncAsSint16LE(_volume);
+ s.syncAsSint16LE(_loop);
+ s.syncAsSint16LE(_pausedCount);
+ s.syncAsSint16LE(_mutedCount);
+ s.syncAsSint16LE(_hold);
+ s.syncAsSint16LE(_cueValue);
+ s.syncAsSint16LE(_fadeDest);
+ s.syncAsSint16LE(_fadeSteps);
+ s.syncAsUint32LE(_fadeTicks);
+ s.syncAsUint32LE(_fadeCounter);
+ s.syncAsByte(_stopAfterFadeFlag);
+ s.syncAsUint32LE(_timer);
+ s.syncAsSint16LE(_loopTimer);
+}
+
void Sound::play(int soundNum) {
prime(soundNum);
_soundManager->addToPlayList(this);
}
void Sound::stop() {
- _globals->_soundManager.removeFromPlayList(this);
+ g_globals->_soundManager.removeFromPlayList(this);
_unPrime();
}
@@ -1436,11 +1555,12 @@ void Sound::_prime(int soundResID, bool dontQueue) {
if (_primed)
unPrime();
+ _soundResID = soundResID;
if (_soundResID != -1) {
// Sound number specified
_isEmpty = false;
_remoteReceiver = NULL;
- byte *soundData = _resourceManager->getResource(RES_SOUND, soundResID, 0);
+ byte *soundData = g_resourceManager->getResource(RES_SOUND, soundResID, 0);
_soundManager->checkResVersion(soundData);
_group = _soundManager->determineGroup(soundData);
_sndResPriority = _soundManager->extractPriority(soundData);
@@ -1448,7 +1568,7 @@ void Sound::_prime(int soundResID, bool dontQueue) {
_soundManager->extractTrackInfo(&_trackInfo, soundData, _group);
for (int idx = 0; idx < _trackInfo._numTracks; ++idx) {
- _channelData[idx] = _resourceManager->getResource(RES_SOUND, soundResID, _trackInfo._chunks[idx]);
+ _channelData[idx] = g_resourceManager->getResource(RES_SOUND, soundResID, _trackInfo._chunks[idx]);
}
DEALLOCATE(soundData);
@@ -1501,12 +1621,13 @@ void Sound::orientAfterDriverChange() {
_trackInfo._numTracks = 0;
_primed = false;
_prime(_soundResID, true);
+
setTimeIndex(timeIndex);
}
}
void Sound::orientAfterRestore() {
- if (_isEmpty) {
+ if (!_isEmpty) {
int timeIndex = getTimeIndex();
_primed = false;
_prime(_soundResID, true);
@@ -1546,7 +1667,7 @@ bool Sound::isMuted() const {
}
void Sound::pause(bool flag) {
- Common::StackLock slock(_globals->_soundManager._serverSuspendedMutex);
+ Common::StackLock slock(g_globals->_soundManager._serverSuspendedMutex);
if (flag)
++_pausedCount;
@@ -1557,7 +1678,7 @@ void Sound::pause(bool flag) {
}
void Sound::mute(bool flag) {
- Common::StackLock slock(_globals->_soundManager._serverSuspendedMutex);
+ Common::StackLock slock(g_globals->_soundManager._serverSuspendedMutex);
if (flag)
++_mutedCount;
@@ -1568,7 +1689,7 @@ void Sound::mute(bool flag) {
}
void Sound::fade(int fadeDest, int fadeSteps, int fadeTicks, bool stopAfterFadeFlag) {
- Common::StackLock slock(_globals->_soundManager._serverSuspendedMutex);
+ Common::StackLock slock(g_globals->_soundManager._serverSuspendedMutex);
if (fadeDest > 127)
fadeDest = 127;
@@ -1585,11 +1706,8 @@ void Sound::fade(int fadeDest, int fadeSteps, int fadeTicks, bool stopAfterFadeF
}
void Sound::setTimeIndex(uint32 timeIndex) {
- if (_primed) {
- mute(true);
- _soSetTimeIndex(timeIndex);
- mute(false);
- }
+ if (_primed)
+ _newTimeIndex = timeIndex;
}
uint32 Sound::getTimeIndex() const {
@@ -1665,12 +1783,13 @@ void Sound::_soPrimeSound(bool dontQueue) {
}
_timer = 0;
+ _newTimeIndex = 0;
_loopTimer = 0;
_soPrimeChannelData();
}
void Sound::_soSetTimeIndex(uint timeIndex) {
- Common::StackLock slock(_globals->_soundManager._serverSuspendedMutex);
+ Common::StackLock slock(g_globals->_soundManager._serverSuspendedMutex);
if (timeIndex != _timer) {
_soundManager->_soTimeIndexFlag = true;
@@ -1685,6 +1804,8 @@ void Sound::_soSetTimeIndex(uint timeIndex) {
_soundManager->_needToRethink = true;
break;
}
+
+ --timeIndex;
}
_soundManager->_soTimeIndexFlag = false;
@@ -1868,11 +1989,11 @@ void Sound::_soServiceTrackType0(int trackIndex, const byte *channelData) {
b &= 0x7f;
if (channelNum != -1) {
- if (voiceType == VOICETYPE_1) {
+ if (voiceType != VOICETYPE_0) {
if (chFlags & 0x10)
- _soProc42(vtStruct, channelNum, chVoiceType, v);
+ _soPlaySound2(vtStruct, channelData, channelNum, chVoiceType, v);
else
- _soProc32(vtStruct, channelNum, chVoiceType, v, b);
+ _soPlaySound(vtStruct, channelData, channelNum, chVoiceType, v, b);
} else if (voiceNum != -1) {
assert(driver);
driver->proc20(voiceNum, chVoiceType);
@@ -2040,7 +2161,7 @@ void Sound::_soUpdateDamper(VoiceTypeStruct *voiceType, int channelNum, VoiceTyp
}
}
-void Sound::_soProc32(VoiceTypeStruct *vtStruct, int channelNum, VoiceType voiceType, int v0, int v1) {
+void Sound::_soPlaySound(VoiceTypeStruct *vtStruct, const byte *channelData, int channelNum, VoiceType voiceType, int v0, int v1) {
int entryIndex = _soFindSound(vtStruct, channelNum);
if (entryIndex != -1) {
SoundDriver *driver = vtStruct->_entries[entryIndex]._driver;
@@ -2050,11 +2171,11 @@ void Sound::_soProc32(VoiceTypeStruct *vtStruct, int channelNum, VoiceType voice
vtStruct->_entries[entryIndex]._type1._field4 = v0;
vtStruct->_entries[entryIndex]._type1._field5 = 0;
- driver->proc32(vtStruct->_entries[entryIndex]._voiceNum, _chProgram[channelNum], v0, v1);
+ driver->playSound(channelData, 0, _chProgram[channelNum], vtStruct->_entries[entryIndex]._voiceNum, v0, v1);
}
}
-void Sound::_soProc42(VoiceTypeStruct *vtStruct, int channelNum, VoiceType voiceType, int v0) {
+void Sound::_soPlaySound2(VoiceTypeStruct *vtStruct, const byte *channelData, int channelNum, VoiceType voiceType, int v0) {
for (int trackCtr = 0; trackCtr < _trackInfo._numTracks; ++trackCtr) {
const byte *instrument = _channelData[trackCtr];
if ((*(instrument + 13) == v0) && (*instrument == 1)) {
@@ -2063,13 +2184,15 @@ void Sound::_soProc42(VoiceTypeStruct *vtStruct, int channelNum, VoiceType voice
if (entryIndex != -1) {
SoundDriver *driver = vtStruct->_entries[entryIndex]._driver;
assert(driver);
+ byte *trackData = _channelData[trackCtr];
vtStruct->_entries[entryIndex]._type1._field6 = 0;
vtStruct->_entries[entryIndex]._type1._field4 = v0;
vtStruct->_entries[entryIndex]._type1._field5 = 0;
- driver->proc32(vtStruct->_entries[entryIndex]._voiceNum, -1, v0, 0x7F);
- driver->proc42(vtStruct->_entries[entryIndex]._voiceNum, voiceType, 0);
+ int v1, v2;
+ driver->playSound(trackData, 14, -1, vtStruct->_entries[entryIndex]._voiceNum, v0, 0x7F);
+ driver->proc42(vtStruct->_entries[entryIndex]._voiceNum, voiceType, 0, &v1, &v2);
}
break;
}
@@ -2196,11 +2319,34 @@ void Sound::_soServiceTrackType1(int trackIndex, const byte *channelData) {
vtStruct->_entries[entryIndex]._type1._field4 = *(channelData + 1);
vtStruct->_entries[entryIndex]._type1._field5 = 0;
- driver->proc32(vtStruct->_entries[entryIndex]._voiceNum, -1, *(channelData + 1), 0x7f);
+ int v1, v2;
+ driver->playSound(channelData, 14, -1, vtStruct->_entries[entryIndex]._voiceNum, *(channelData + 1), 0x7f);
+ driver->proc42(vtStruct->_entries[entryIndex]._voiceNum, *(channelData + 1), _loop ? 1 : 0,
+ &v1, &v2);
+ _trkState[trackIndex] = 2;
}
} else {
+ for (uint entryIndex = 0; entryIndex < vtStruct->_entries.size(); ++entryIndex) {
+ VoiceStructEntry &vte = vtStruct->_entries[entryIndex];
+ VoiceStructEntryType1 &vse = vte._type1;
+ if ((vse._sound == this) && (vse._channelNum == channel) && (vse._field4 == *(channelData + 1))) {
+ SoundDriver *driver = vte._driver;
+
+ int isEnded, resetTimer;
+ driver->proc42(vte._voiceNum, vtStruct->_total, _loop ? 1 : 0, &isEnded, &resetTimer);
+ if (isEnded) {
+ _trkState[trackIndex] = 0;
+ } else if (resetTimer) {
+ _timer = 0;
+ }
+ return;
+ }
+ }
+ _trkState[trackIndex] = 0;
}
+ } else {
+ _trkState[trackIndex] = 0;
}
}
}
@@ -2246,13 +2392,13 @@ int Sound::_soFindSound(VoiceTypeStruct *vtStruct, int channelNum) {
ASound::ASound(): EventHandler() {
_action = NULL;
_cueValue = -1;
- if (_globals)
- _globals->_sounds.push_back(this);
+ if (g_globals)
+ g_globals->_sounds.push_back(this);
}
ASound::~ASound() {
- if (_globals)
- _globals->_sounds.remove(this);
+ if (g_globals)
+ g_globals->_sounds.remove(this);
}
void ASound::synchronize(Serializer &s) {
@@ -2286,7 +2432,7 @@ void ASound::dispatch() {
}
}
-void ASound::play(int soundNum, Action *action, int volume) {
+void ASound::play(int soundNum, EventHandler *action, int volume) {
_action = action;
_cueValue = 0;
@@ -2310,13 +2456,47 @@ void ASound::unPrime() {
_action = NULL;
}
-void ASound::fade(int fadeDest, int fadeSteps, int fadeTicks, bool stopAfterFadeFlag, Action *action) {
+void ASound::fade(int fadeDest, int fadeSteps, int fadeTicks, bool stopAfterFadeFlag, EventHandler *action) {
if (action)
_action = action;
_sound.fade(fadeDest, fadeSteps, fadeTicks, stopAfterFadeFlag);
}
+void ASound::fadeSound(int soundNum) {
+ play(soundNum, NULL, 0);
+ fade(127, 5, 1, false, NULL);
+}
+
+/*--------------------------------------------------------------------------*/
+
+ASoundExt::ASoundExt(): ASound() {
+ _soundNum = 0;
+}
+
+void ASoundExt::synchronize(Serializer &s) {
+ ASound::synchronize(s);
+ s.syncAsSint16LE(_soundNum);
+}
+
+void ASoundExt::signal() {
+ if (_soundNum != 0) {
+ fadeSound(_soundNum);
+ }
+}
+
+void ASoundExt::fadeOut2(EventHandler *action) {
+ fade(0, 10, 10, true, action);
+}
+
+void ASoundExt::changeSound(int soundNum) {
+ if (isPlaying()) {
+ _soundNum = soundNum;
+ fadeOut2(this);
+ } else {
+ fadeSound(soundNum);
+ }
+}
/*--------------------------------------------------------------------------*/
@@ -2355,8 +2535,6 @@ const int v440D4[48] = {
};
AdlibSoundDriver::AdlibSoundDriver(): SoundDriver() {
- _upCb = NULL;
- _upRef = NULL;
_minVersion = 0x102;
_maxVersion = 0x10A;
_masterVolume = 0;
@@ -2366,9 +2544,17 @@ AdlibSoundDriver::AdlibSoundDriver(): SoundDriver() {
_groupData.v2 = 0;
_groupData.pData = &adlib_group_data[0];
- _mixer = _vm->_mixer;
+ _mixer = g_vm->_mixer;
_sampleRate = _mixer->getOutputRate();
- _opl = makeAdLibOPL(_sampleRate);
+ _opl = OPL::Config::create();
+ assert(_opl);
+ _opl->init(_sampleRate);
+
+ _samplesTillCallback = 0;
+ _samplesTillCallbackRemainder = 0;
+ _samplesPerCallback = getRate() / CALLBACKS_PER_SECOND;
+ _samplesPerCallbackRemainder = getRate() % CALLBACKS_PER_SECOND;
+
_mixer->playStream(Audio::Mixer::kPlainSoundType, &_soundHandle, this, -1, Audio::Mixer::kMaxChannelVolume, 0, DisposeAfterUse::NO, true);
Common::set_to(_channelVoiced, _channelVoiced + ADLIB_CHANNEL_COUNT, false);
@@ -2387,7 +2573,7 @@ AdlibSoundDriver::AdlibSoundDriver(): SoundDriver() {
AdlibSoundDriver::~AdlibSoundDriver() {
DEALLOCATE(_patchData);
_mixer->stopHandle(_soundHandle);
- OPLDestroy(_opl);
+ delete _opl;
}
bool AdlibSoundDriver::open() {
@@ -2413,10 +2599,7 @@ void AdlibSoundDriver::close() {
bool AdlibSoundDriver::reset() {
write(1, 0x20);
- write(4, 0x80);
-
- write(2, 1);
- write(4, 1);
+ write(1, 0x20);
return true;
}
@@ -2441,7 +2624,7 @@ int AdlibSoundDriver::setMasterVolume(int volume) {
return oldVolume;
}
-void AdlibSoundDriver::proc32(int channel, int program, int v0, int v1) {
+void AdlibSoundDriver::playSound(const byte *channelData, int dataOffset, int program, int channel, int v0, int v1) {
if (program == -1)
return;
@@ -2500,7 +2683,16 @@ void AdlibSoundDriver::setPitch(int channel, int pitchBlend) {
void AdlibSoundDriver::write(byte reg, byte value) {
_portContents[reg] = value;
- OPLWriteReg(_opl, reg, value);
+ _queue.push(RegisterValue(reg, value));
+}
+
+void AdlibSoundDriver::flush() {
+ Common::StackLock slock(SoundManager::sfManager()._serverDisabledMutex);
+
+ while (!_queue.empty()) {
+ RegisterValue v = _queue.pop();
+ _opl->writeReg(v._regNum, v._value);
+ }
}
void AdlibSoundDriver::updateChannelVolume(int channelNum) {
@@ -2624,33 +2816,138 @@ void AdlibSoundDriver::setFrequency(int channel) {
}
int AdlibSoundDriver::readBuffer(int16 *buffer, const int numSamples) {
- update(buffer, numSamples);
+ Common::StackLock slock1(SoundManager::sfManager()._serverDisabledMutex);
+ Common::StackLock slock2(SoundManager::sfManager()._serverSuspendedMutex);
+
+ int32 samplesLeft = numSamples;
+ memset(buffer, 0, sizeof(int16) * numSamples);
+ while (samplesLeft) {
+ if (!_samplesTillCallback) {
+ SoundManager::_sfUpdateCallback(NULL);
+ flush();
+
+ _samplesTillCallback = _samplesPerCallback;
+ _samplesTillCallbackRemainder += _samplesPerCallbackRemainder;
+ if (_samplesTillCallbackRemainder >= CALLBACKS_PER_SECOND) {
+ _samplesTillCallback++;
+ _samplesTillCallbackRemainder -= CALLBACKS_PER_SECOND;
+ }
+ }
+
+ int32 render = MIN<int>(samplesLeft, _samplesTillCallback);
+ samplesLeft -= render;
+ _samplesTillCallback -= render;
+
+ _opl->readBuffer(buffer, render);
+ buffer += render;
+ }
return numSamples;
}
-void AdlibSoundDriver::update(int16 *buf, int len) {
- static int samplesLeft = 0;
- while (len != 0) {
- int count = samplesLeft;
- if (count > len) {
- count = len;
- }
- samplesLeft -= count;
- len -= count;
- YM3812UpdateOne(_opl, buf, count);
- if (samplesLeft == 0) {
- if (_upCb) {
- (*_upCb)(_upRef);
- }
- samplesLeft = _sampleRate / 50;
- }
- buf += count;
+/*--------------------------------------------------------------------------*/
+
+
+SoundBlasterDriver::SoundBlasterDriver(): SoundDriver() {
+ _minVersion = 0x102;
+ _maxVersion = 0x10A;
+ _masterVolume = 0;
+
+ _groupData.groupMask = 1;
+ _groupData.v1 = 0x3E;
+ _groupData.v2 = 0;
+ static byte const group_data[] = { 3, 1, 1, 0, 0xff };
+ _groupData.pData = group_data;
+
+ _mixer = g_vm->_mixer;
+ _sampleRate = _mixer->getOutputRate();
+ _audioStream = NULL;
+ _channelData = NULL;
+}
+
+SoundBlasterDriver::~SoundBlasterDriver() {
+ _mixer->stopHandle(_soundHandle);
+}
+
+bool SoundBlasterDriver::open() {
+ return true;
+}
+
+void SoundBlasterDriver::close() {
+}
+
+bool SoundBlasterDriver::reset() {
+ return true;
+}
+
+const GroupData *SoundBlasterDriver::getGroupData() {
+ return &_groupData;
+}
+
+int SoundBlasterDriver::setMasterVolume(int volume) {
+ int oldVolume = _masterVolume;
+ _masterVolume = volume;
+
+ return oldVolume;
+}
+
+void SoundBlasterDriver::playSound(const byte *channelData, int dataOffset, int program, int channel, int v0, int v1) {
+ if (program != -1)
+ return;
+
+ assert(channel == 0);
+
+ // If sound data has been previously set, then release it
+ if (_channelData)
+ updateVoice(channel);
+
+ // Set the new channel data
+ _channelData = channelData + dataOffset;
+
+ // Make a copy of the buffer
+ int dataSize = g_vm->_memoryManager.getSize(channelData);
+ byte *soundData = (byte *)malloc(dataSize - dataOffset);
+ Common::copy(_channelData, _channelData + (dataSize - dataOffset), soundData);
+
+ _audioStream = Audio::makeQueuingAudioStream(11025, false);
+ _audioStream->queueBuffer(soundData, dataSize - dataOffset, DisposeAfterUse::YES, Audio::FLAG_UNSIGNED);
+
+ // Start the new sound
+ if (!_mixer->isSoundHandleActive(_soundHandle))
+ _mixer->playStream(Audio::Mixer::kSFXSoundType, &_soundHandle, _audioStream);
+}
+
+void SoundBlasterDriver::updateVoice(int channel) {
+ // Stop the playing voice
+ if (_mixer->isSoundHandleActive(_soundHandle))
+ _mixer->stopHandle(_soundHandle);
+
+ _audioStream = NULL;
+ _channelData = NULL;
+}
+
+void SoundBlasterDriver::proc38(int channel, int cmd, int value) {
+ if (cmd == 7) {
+ // Set channel volume
+ _channelVolume = value;
+ _mixer->setChannelVolume(_soundHandle, (byte)MIN(255, value * 2));
}
}
-void AdlibSoundDriver::setUpdateCallback(UpdateCallback upCb, void *ref) {
- _upCb = upCb;
- _upRef = ref;
+void SoundBlasterDriver::proc42(int channel, int cmd, int value, int *v1, int *v2) {
+ // TODO: v2 is used for flagging a reset of the timer. I'm not sure if it's needed
+ *v1 = 0;
+ *v2 = 0;
+
+ // Note: Checking whether a playing Fx sound had finished was originally done in another
+ // method in the sample playing code. But since we're using the ScummVM audio soundsystem,
+ // it's easier simply to do the check right here
+ if (_audioStream && (_audioStream->numQueuedStreams() == 0)) {
+ updateVoice(channel);
+ }
+
+ if (!_channelData)
+ // Flag that sound isn't playing
+ *v1 = 1;
}
-} // End of namespace tSage
+} // End of namespace TsAGE
diff --git a/engines/tsage/sound.h b/engines/tsage/sound.h
index 9a8cfb3cfc..2c5d2ac951 100644
--- a/engines/tsage/sound.h
+++ b/engines/tsage/sound.h
@@ -25,6 +25,7 @@
#include "common/scummsys.h"
#include "common/mutex.h"
+#include "common/queue.h"
#include "audio/audiostream.h"
#include "audio/fmopl.h"
#include "audio/mixer.h"
@@ -32,13 +33,15 @@
#include "tsage/saveload.h"
#include "tsage/core.h"
-namespace tSage {
+namespace TsAGE {
class Sound;
#define SOUND_ARR_SIZE 16
#define ROLAND_DRIVER_NUM 2
#define ADLIB_DRIVER_NUM 3
+#define SBLASTER_DRIVER_NUM 4
+#define CALLBACKS_PER_SECOND 60
struct trackInfoStruct {
int _numTracks;
@@ -65,6 +68,15 @@ struct GroupData {
const byte *pData;
};
+struct RegisterValue {
+ uint8 _regNum;
+ uint8 _value;
+
+ RegisterValue(int regNum, int value) {
+ _regNum = regNum; _value = value;
+ }
+};
+
class SoundDriver {
public:
Common::String _shortDescription, _longDescription;
@@ -73,10 +85,6 @@ public:
uint32 _groupMask;
const GroupData *_groupOffset;
int _driverResID;
-
- typedef void (*UpdateCallback)(void *);
- UpdateCallback _upCb;
- void *_upRef;
public:
SoundDriver();
virtual ~SoundDriver() {};
@@ -100,14 +108,12 @@ public:
virtual void setProgram(int channel, int program) {} // Method #13
virtual void setVolume1(int channel, int v2, int v3, int volume) {}
virtual void setPitchBlend(int channel, int pitchBlend) {} // Method #15
- virtual void proc32(int channel, int program, int v0, int v1) {}// Method #16
+ virtual void playSound(const byte *channelData, int dataOffset, int program, int channel, int v0, int v1) {}// Method #16
virtual void updateVoice(int channel) {} // Method #17
virtual void proc36() {} // Method #18
virtual void proc38(int channel, int cmd, int value) {} // Method #19
virtual void setPitch(int channel, int pitchBlend) {} // Method #20
- virtual void proc42(int channel, int v0, int v1) {} // Method #21
-
- virtual void setUpdateCallback(UpdateCallback upCb, void *ref) {}
+ virtual void proc42(int channel, int cmd, int value, int *v1, int *v2) {} // Method #21
};
struct VoiceStructEntryType0 {
@@ -123,7 +129,6 @@ struct VoiceStructEntryType0 {
int _channelNum3;
int _priority3;
int _field1A;
- int _field1B;
};
struct VoiceStructEntryType1 {
@@ -166,7 +171,7 @@ private:
public:
bool __sndmgrReady;
int _ourSndResVersion, _ourDrvResVersion;
- Common::List<Sound *> _playList;
+ SynchronizedList<Sound *> _playList;
Common::List<SoundDriver *> _installedDrivers;
VoiceTypeStruct *_voiceTypeStructPtrs[SOUND_ARR_SIZE];
uint32 _groupsAvail;
@@ -174,9 +179,8 @@ public:
int _newVolume;
Common::Mutex _serverDisabledMutex;
Common::Mutex _serverSuspendedMutex;
- int _suspendedCount;
bool _driversDetected;
- Common::List<Sound *> _soundList;
+ SynchronizedList<Sound *> _soundList;
Common::List<SoundDriverEntry> _availableDrivers;
bool _needToRethink;
// Misc flags
@@ -221,6 +225,7 @@ public:
int getMasterVol() const;
void loadSound(int soundNum, bool showErrors);
void unloadSound(int soundNum);
+ bool isFading();
// _sf methods
static SoundManager &sfManager();
@@ -255,7 +260,6 @@ class Sound: public EventHandler {
private:
void _prime(int soundResID, bool dontQueue);
void _unPrime();
- void orientAfterRestore();
public:
bool _stoppedAsynchronously;
int _soundResID;
@@ -276,7 +280,8 @@ public:
int _fadeTicks;
int _fadeCounter;
bool _stopAfterFadeFlag;
- uint _timer;
+ uint32 _timer;
+ uint32 _newTimeIndex;
int _loopTimer;
int _chProgram[SOUND_ARR_SIZE];
int _chModulation[SOUND_ARR_SIZE];
@@ -306,6 +311,9 @@ public:
Sound();
~Sound();
+ void synchronize(Serializer &s);
+ void orientAfterRestore();
+
void play(int soundResID);
void stop();
void prime(int soundResID);
@@ -342,8 +350,8 @@ public:
void _soRemoteReceive();
void _soServiceTrackType0(int trackIndex, const byte *channelData);
void _soUpdateDamper(VoiceTypeStruct *voiceType, int channelNum, VoiceType mode, int v0);
- void _soProc32(VoiceTypeStruct *vtStruct, int channelNum, VoiceType voiceType, int v0, int v1);
- void _soProc42(VoiceTypeStruct *vtStruct, int channelNum, VoiceType voiceType, int v0);
+ void _soPlaySound(VoiceTypeStruct *vtStruct, const byte *channelData, int channelNum, VoiceType voiceType, int v0, int v1);
+ void _soPlaySound2(VoiceTypeStruct *vtStruct, const byte *channelData, int channelNum, VoiceType voiceType, int v0);
void _soProc38(VoiceTypeStruct *vtStruct, int channelNum, VoiceType voiceType, int cmd, int value);
void _soProc40(VoiceTypeStruct *vtStruct, int channelNum, int pitchBlend);
void _soDoTrackCommand(int channelNum, int command, int value);
@@ -357,7 +365,7 @@ public:
class ASound: public EventHandler {
public:
Sound _sound;
- Action *_action;
+ EventHandler *_action;
int _cueValue;
ASound();
@@ -365,7 +373,7 @@ public:
virtual void synchronize(Serializer &s);
virtual void dispatch();
- void play(int soundNum, Action *action = NULL, int volume = 127);
+ void play(int soundNum, EventHandler *action = NULL, int volume = 127);
void stop();
void prime(int soundNum, Action *action = NULL);
void unPrime();
@@ -377,7 +385,7 @@ public:
bool isMuted() const { return _sound.isMuted(); }
void pause(bool flag) { _sound.pause(flag); }
void mute(bool flag) { _sound.mute(flag); }
- void fade(int fadeDest, int fadeSteps, int fadeTicks, bool stopAfterFadeFlag, Action *action);
+ void fade(int fadeDest, int fadeSteps, int fadeTicks, bool stopAfterFadeFlag, EventHandler *action);
void fadeIn() { fade(127, 5, 10, false, NULL); }
void fadeOut(Action *action) { fade(0, 5, 10, true, action); }
void setTimeIndex(uint32 timeIndex) { _sound.setTimeIndex(timeIndex); }
@@ -390,8 +398,23 @@ public:
int getVol() const { return _sound.getVol(); }
void holdAt(int v) { _sound.holdAt(v); }
void release() { _sound.release(); }
+ void fadeSound(int soundNum);
};
+class ASoundExt: public ASound {
+public:
+ int _soundNum;
+
+ ASoundExt();
+ void fadeOut2(EventHandler *action);
+ void changeSound(int soundNum);
+
+ virtual Common::String getClassName() { return "ASoundExt"; }
+ virtual void synchronize(Serializer &s);
+ virtual void signal();
+};
+
+
#define ADLIB_CHANNEL_COUNT 9
class AdlibSoundDriver: public SoundDriver, Audio::AudioStream {
@@ -404,6 +427,11 @@ private:
byte _portContents[256];
const byte *_patchData;
int _masterVolume;
+ Common::Queue<RegisterValue> _queue;
+ int _samplesTillCallback;
+ int _samplesTillCallbackRemainder;
+ int _samplesPerCallback;
+ int _samplesPerCallbackRemainder;
bool _channelVoiced[ADLIB_CHANNEL_COUNT];
int _channelVolume[ADLIB_CHANNEL_COUNT];
@@ -417,6 +445,7 @@ private:
void write(byte reg, byte value);
+ void flush();
void updateChannelVolume(int channel);
void setVoice(int channel);
void clearVoice(int channel);
@@ -432,11 +461,10 @@ public:
virtual const GroupData *getGroupData();
virtual void installPatch(const byte *data, int size);
virtual int setMasterVolume(int volume);
- virtual void proc32(int channel, int program, int v0, int v1);
+ virtual void playSound(const byte *channelData, int dataOffset, int program, int channel, int v0, int v1);
virtual void updateVoice(int channel);
virtual void proc38(int channel, int cmd, int value);
virtual void setPitch(int channel, int pitchBlend);
- virtual void setUpdateCallback(UpdateCallback upCb, void *ref);
// AudioStream interface
virtual int readBuffer(int16 *buffer, const int numSamples);
@@ -447,6 +475,33 @@ public:
void update(int16 *buf, int len);
};
-} // End of namespace tSage
+class SoundBlasterDriver: public SoundDriver {
+private:
+ GroupData _groupData;
+ Audio::Mixer *_mixer;
+ Audio::SoundHandle _soundHandle;
+ Audio::QueuingAudioStream *_audioStream;
+ int _sampleRate;
+
+ byte _masterVolume;
+ byte _channelVolume;
+ const byte *_channelData;
+public:
+ SoundBlasterDriver();
+ virtual ~SoundBlasterDriver();
+
+ virtual bool open();
+ virtual void close();
+ virtual bool reset();
+ virtual const GroupData *getGroupData();
+ virtual int setMasterVolume(int volume);
+ virtual void playSound(const byte *channelData, int dataOffset, int program, int channel, int v0, int v1);
+ virtual void updateVoice(int channel);
+ virtual void proc38(int channel, int cmd, int value);
+ virtual void proc42(int channel, int cmd, int value, int *v1, int *v2);
+};
+
+
+} // End of namespace TsAGE
#endif
diff --git a/engines/tsage/staticres.cpp b/engines/tsage/staticres.cpp
index 9f36268ce3..c98d9d2e53 100644
--- a/engines/tsage/staticres.cpp
+++ b/engines/tsage/staticres.cpp
@@ -22,7 +22,7 @@
#include "tsage/staticres.h"
-namespace tSage {
+namespace TsAGE {
const byte CURSOR_ARROW_DATA[] = {
15, 0, 15, 0, 0, 0, 0, 0, 9, 0,
@@ -72,13 +72,8 @@ const char *DEFAULT_SCENE_HOTSPOT = "That accomplishes nothing.";
const char *SAVE_ERROR_MSG = "Error occurred saving game. Please do not try to restore this game!";
const char *SAVING_NOT_ALLOWED_MSG = "Saving is not allowed at this time.";
const char *RESTORING_NOT_ALLOWED_MSG = "Restoring is not allowed at this time.";
-const char *RESTART_CONFIRM_MSG = "Do you want to restart your game?";
-const char *WATCH_INTRO_MSG = "Do you wish to watch the introduction?";
const char *INV_EMPTY_MSG = "You have nothing in your possesion.";
-const char *HELP_MSG = "Ringworld\rRevenge of the Patriarch\x14\rScummVM Version\r\r\
-\x01 Keyboard shortcuts...\rF2 - Sound options\rF3 - Quit\r\
-F4 - Restart\rF5 - Save game\rF7 - Restore Game\rF10 - Pause game";
const char *QUIT_CONFIRM_MSG = "Do you want to quit playing this game?";
const char *RESTART_MSG = "Do you want to restart this game?";
const char *GAME_PAUSED_MSG = "Game is paused.";
@@ -93,9 +88,19 @@ const char *SOUND_BTN_STRING = "Sound";
const char *RESUME_BTN_STRING = " Resume \rplay";
const char *LOOK_BTN_STRING = "Look";
const char *PICK_BTN_STRING = "Pick";
+
+
+namespace Ringworld {
+
+// Dialog resources
+const char *HELP_MSG = "Ringworld\rRevenge of the Patriarch\x14\rScummVM Version\r\r\
+\x01 Keyboard shortcuts...\rF2 - Sound options\rF3 - Quit\r\
+F4 - Restart\rF5 - Save game\rF7 - Restore Game\rF10 - Pause game";
+const char *WATCH_INTRO_MSG = "Do you wish to watch the introduction?";
const char *START_PLAY_BTN_STRING = " Start Play ";
const char *INTRODUCTION_BTN_STRING = "Introduction";
+// Scene specific resources
const char *EXIT_MSG = " EXIT ";
const char *SCENE6100_CAREFUL = "Be careful! The probe cannot handle too much of that.";
const char *SCENE6100_TOUGHER = "Hey! This is tougher than it looks!";
@@ -118,4 +123,61 @@ const char *EXIT_BTN_STRING = "Exit";
const char *DEMO_BTN_STRING = "Demo";
const char *DEMO_RESUME_BTN_STRING = "Resume";
-} // End of namespace tSage
+} // End of namespace Ringworld
+
+namespace BlueForce {
+
+// Dialog resources
+const char *HELP_MSG = "Blue Force\x14\rScummVM Version\r\r\
+Keyboard shortcuts...\rF2 - Sound options\rF3 - Quit\r\
+F4 - Restart\rF5 - Save game\rF7 - Restore Game\rF10 - Pause game";
+const char *WATCH_INTRO_MSG = "Do you wish to watch the introduction?";
+const char *START_PLAY_BTN_STRING = " Play ";
+const char *INTRODUCTION_BTN_STRING = " Watch ";
+
+// Blue Force general messages
+const char *BF_NAME = "Blue Force";
+const char *BF_COPYRIGHT = " Copyright, 1993 Tsunami Media, Inc.";
+const char *BF_ALL_RIGHTS_RESERVED = "All Rights Reserved";
+const char *BF_19840518 = "May 18, 1984";
+const char *BF_19840515 = "May 15, 1984";
+const char *BF_3_DAYS = "Three days later";
+const char *BF_11_YEARS = "Eleven years later.";
+const char *BF_NEXT_DAY = "The Next Day";
+const char *BF_ACADEMY = "Here we are at the Academy";
+
+// Scene 50 hotspots
+const char *GRANDMA_FRANNIE = "Grandma Frannie";
+const char *MARINA = "Marina";
+const char *POLICE_DEPARTMENT = "Police Department";
+const char *TONYS_BAR = "Tony's Bar";
+const char *CHILD_PROTECTIVE_SERVICES = "Child Protective Services";
+const char *ALLEY_CAT = "Alley Cat";
+const char *CITY_HALL_JAIL = "City Hall & Jail";
+const char *JAMISON_RYAN = "Jamison & Ryan";
+const char *BIKINI_HUT = "Bikini Hut";
+
+// Scene 60 radio messages
+const char *RADIO_BTN_LIST[8] = { "10-2 ", "10-4 ", "10-13", "10-15", "10-27", "10-35", "10-97", "10-98" };
+
+// Scene 570 computer messageS
+const char *SCENE570_PASSWORD = "PASSWORD -> ";
+const char *SCENE570_C_DRIVE = "C:\\";
+const char *SCENE570_RING = "RING";
+const char *SCENE570_PROTO = "PROTO";
+const char *SCENE570_WACKY = "WACKY";
+const char *SCENE570_COBB = "COBB";
+const char *SCENE570_LETTER = "LETTER";
+const char *SCENE570_RINGEXE = "RINGEXE";
+const char *SCENE570_RINGDATA = "RINGDATA";
+const char *SCENE570_PROTOEXE = "PROTOEXE";
+const char *SCENE570_PROTODATA = "PROTODATA";
+const char *SCENE570_WACKYEXE = "WACKYEXE";
+const char *SCENE570_WACKYDATA = "WACKYDATA";
+
+// Scene 180 messages
+const char *THE_NEXT_DAY = "The Next Day";
+
+} // End of namespace BlueForce
+
+} // End of namespace TsAGE
diff --git a/engines/tsage/staticres.h b/engines/tsage/staticres.h
index fa93511779..203fa1481d 100644
--- a/engines/tsage/staticres.h
+++ b/engines/tsage/staticres.h
@@ -25,7 +25,7 @@
#include "common/scummsys.h"
-namespace tSage {
+namespace TsAGE {
extern const byte CURSOR_ARROW_DATA[];
@@ -39,11 +39,8 @@ extern const char *DEFAULT_SCENE_HOTSPOT;
extern const char *SAVE_ERROR_MSG;
extern const char *SAVING_NOT_ALLOWED_MSG;
extern const char *RESTORING_NOT_ALLOWED_MSG;
-extern const char *RESTART_CONFIRM_MSG;
-extern const char *WATCH_INTRO_MSG;
// Dialogs
-extern const char *HELP_MSG;
extern const char *QUIT_CONFIRM_MSG;
extern const char *RESTART_MSG;
extern const char *GAME_PAUSED_MSG;
@@ -59,6 +56,12 @@ extern const char *RESUME_BTN_STRING;
extern const char *LOOK_BTN_STRING;
extern const char *PICK_BTN_STRING;
extern const char *INV_EMPTY_MSG;
+
+namespace Ringworld {
+
+// Dialog resources
+extern const char *HELP_MSG;
+extern const char *WATCH_INTRO_MSG;
extern const char *START_PLAY_BTN_STRING;
extern const char *INTRODUCTION_BTN_STRING;
@@ -86,6 +89,60 @@ extern const char *EXIT_BTN_STRING;
extern const char *DEMO_BTN_STRING;
extern const char *DEMO_RESUME_BTN_STRING;
-} // End of namespace tSage
+} // End of namespace Ringworld
+
+namespace BlueForce {
+
+// Dialog resources
+extern const char *HELP_MSG;
+extern const char *WATCH_INTRO_MSG;
+extern const char *START_PLAY_BTN_STRING;
+extern const char *INTRODUCTION_BTN_STRING;
+
+// Blue Force messages
+extern const char *BF_NAME;
+extern const char *BF_COPYRIGHT;
+extern const char *BF_ALL_RIGHTS_RESERVED;
+extern const char *BF_19840518;
+extern const char *BF_19840515;
+extern const char *BF_3_DAYS;
+extern const char *BF_11_YEARS;
+extern const char *BF_NEXT_DAY;
+extern const char *BF_ACADEMY;
+
+// Scene 50 tooltips
+extern const char *GRANDMA_FRANNIE;
+extern const char *MARINA;
+extern const char *POLICE_DEPARTMENT;
+extern const char *TONYS_BAR;
+extern const char *CHILD_PROTECTIVE_SERVICES;
+extern const char *ALLEY_CAT;
+extern const char *CITY_HALL_JAIL;
+extern const char *JAMISON_RYAN;
+extern const char *BIKINI_HUT;
+
+extern const char *SCENE570_PASSWORD;
+extern const char *SCENE570_C_DRIVE;
+extern const char *SCENE570_RING;
+extern const char *SCENE570_PROTO;
+extern const char *SCENE570_WACKY;
+extern const char *SCENE570_COBB;
+extern const char *SCENE570_LETTER;
+extern const char *SCENE570_RINGEXE;
+extern const char *SCENE570_RINGDATA;
+extern const char *SCENE570_PROTOEXE;
+extern const char *SCENE570_PROTODATA;
+extern const char *SCENE570_WACKYEXE;
+extern const char *SCENE570_WACKYDATA;
+
+// Scene 60 radio dispatch buttons
+extern const char *RADIO_BTN_LIST[8];
+
+// Scene 180 message
+extern const char *THE_NEXT_DAY;
+
+} // End of namespace BlueForce
+
+} // End of namespace TsAGE
#endif
diff --git a/engines/tsage/tsage.cpp b/engines/tsage/tsage.cpp
index 41f3d58897..7e7198fc2b 100644
--- a/engines/tsage/tsage.cpp
+++ b/engines/tsage/tsage.cpp
@@ -30,13 +30,13 @@
#include "tsage/resources.h"
#include "tsage/globals.h"
-namespace tSage {
+namespace TsAGE {
-TSageEngine *_vm = NULL;
+TSageEngine *g_vm = NULL;
TSageEngine::TSageEngine(OSystem *system, const tSageGameDescription *gameDesc) : Engine(system),
_gameDescription(gameDesc) {
- _vm = this;
+ g_vm = this;
DebugMan.addDebugChannel(kRingDebugScripts, "scripts", "Scripts debugging");
_debugger = new Debugger();
}
@@ -61,45 +61,64 @@ bool TSageEngine::hasFeature(EngineFeature f) const {
}
void TSageEngine::initialize() {
- _saver = new Saver();
+ g_saver = new Saver();
// Set up the resource manager
- _resourceManager = new ResourceManager();
- if (_vm->getFeatures() & GF_DEMO) {
+ g_resourceManager = new ResourceManager();
+ if (g_vm->getFeatures() & GF_DEMO) {
// Add the single library file associated with the demo
- _resourceManager->addLib(getPrimaryFilename());
- } else if (_vm->getGameID() == GType_Ringworld) {
- _resourceManager->addLib("RING.RLB");
- _resourceManager->addLib("TSAGE.RLB");
- } else if (_vm->getGameID() == GType_BlueForce) {
- _resourceManager->addLib("BLUE.RLB");
- if (_vm->getFeatures() & GF_FLOPPY) {
- _resourceManager->addLib("FILES.RLB");
- _resourceManager->addLib("TSAGE.RLB");
+ g_resourceManager->addLib(getPrimaryFilename());
+ g_globals = new Globals();
+
+ } else if (g_vm->getGameID() == GType_Ringworld) {
+ g_resourceManager->addLib("RING.RLB");
+ g_resourceManager->addLib("TSAGE.RLB");
+ g_globals = new Globals();
+
+ } else if (g_vm->getGameID() == GType_BlueForce) {
+ g_resourceManager->addLib("BLUE.RLB");
+ if (g_vm->getFeatures() & GF_FLOPPY) {
+ g_resourceManager->addLib("FILES.RLB");
+ g_resourceManager->addLib("TSAGE.RLB");
}
+ g_globals = new BlueForce::BlueForceGlobals();
+
+ // Setup the user interface
+ T2_GLOBALS._uiElements.setup(Common::Point(0, UI_INTERFACE_Y - 2));
+
+ // Reset all global variables
+ BF_GLOBALS.reset();
+ } else if (g_vm->getGameID() == GType_Ringworld2) {
+ g_resourceManager->addLib("R2RW.RLB");
+ g_globals = new Ringworld2::Ringworld2Globals();
+
+ // Setup the user interface
+ T2_GLOBALS._uiElements.setup(Common::Point(0, UI_INTERFACE_Y - 2));
+
+ // Reset all global variables
+ R2_GLOBALS.reset();
}
- _globals = new Globals();
- _globals->gfxManager().setDefaults();
+ g_globals->gfxManager().setDefaults();
// Setup sound settings
syncSoundSettings();
}
void TSageEngine::deinitialize() {
- delete _globals;
- delete _resourceManager;
- delete _saver;
- _resourceManager = NULL;
- _saver = NULL;
+ delete g_globals;
+ delete g_resourceManager;
+ delete g_saver;
+ g_resourceManager = NULL;
+ g_saver = NULL;
}
Common::Error TSageEngine::run() {
// Basic initialisation
initialize();
- _globals->_sceneHandler.registerHandler();
- _globals->_game->execute();
+ g_globals->_sceneHandler->registerHandler();
+ g_globals->_game->execute();
deinitialize();
return Common::kNoError;
@@ -109,28 +128,28 @@ Common::Error TSageEngine::run() {
* Returns true if it is currently okay to restore a game
*/
bool TSageEngine::canLoadGameStateCurrently() {
- return (_globals->getFlag(50) == 0);
+ return (g_globals != NULL) && (g_globals->_game != NULL) && g_globals->_game->canLoadGameStateCurrently();
}
/**
* Returns true if it is currently okay to save the game
*/
bool TSageEngine::canSaveGameStateCurrently() {
- return (_globals->getFlag(50) == 0);
+ return (g_globals != NULL) && (g_globals->_game != NULL) && g_globals->_game->canSaveGameStateCurrently();
}
/**
* Load the savegame at the specified slot index
*/
Common::Error TSageEngine::loadGameState(int slot) {
- return _saver->restore(slot);
+ return g_saver->restore(slot);
}
/**
* Save the game to the given slot index, and with the given name
*/
Common::Error TSageEngine::saveGameState(int slot, const Common::String &desc) {
- return _saver->save(slot, desc);
+ return g_saver->save(slot, desc);
}
/**
@@ -144,7 +163,11 @@ Common::String TSageEngine::generateSaveName(int slot) {
void TSageEngine::syncSoundSettings() {
Engine::syncSoundSettings();
- _globals->_soundManager.syncSounds();
+ g_globals->_soundManager.syncSounds();
}
-} // End of namespace tSage
+bool TSageEngine::shouldQuit() {
+ return getEventManager()->shouldQuit() || getEventManager()->shouldRTL();
+}
+
+} // End of namespace TsAGE
diff --git a/engines/tsage/tsage.h b/engines/tsage/tsage.h
index f004c7f625..eb36cf0790 100644
--- a/engines/tsage/tsage.h
+++ b/engines/tsage/tsage.h
@@ -36,11 +36,12 @@
#include "tsage/resources.h"
-namespace tSage {
+namespace TsAGE {
enum {
GType_Ringworld = 0,
- GType_BlueForce = 1
+ GType_BlueForce = 1,
+ GType_Ringworld2 = 2
};
enum {
@@ -62,6 +63,7 @@ struct tSageGameDescription;
#define SCREEN_HEIGHT 200
#define SCREEN_CENTER_X 160
#define SCREEN_CENTER_Y 100
+#define UI_INTERFACE_Y 168
class TSageEngine : public Engine {
private:
@@ -78,6 +80,7 @@ public:
uint32 getGameID() const;
uint32 getFeatures() const;
Common::String getPrimaryFilename() const;
+ bool shouldQuit();
virtual Common::Error init();
virtual Common::Error run();
@@ -92,12 +95,12 @@ public:
void deinitialize();
};
-extern TSageEngine *_vm;
+extern TSageEngine *g_vm;
-#define ALLOCATE_HANDLE(x) _vm->_memoryManager.allocate(x)
-#define ALLOCATE(x) _vm->_memoryManager.allocate2(x)
-#define DEALLOCATE(x) _vm->_memoryManager.deallocate(x)
+#define ALLOCATE_HANDLE(x) g_vm->_memoryManager.allocate(x)
+#define ALLOCATE(x) g_vm->_memoryManager.allocate2(x)
+#define DEALLOCATE(x) g_vm->_memoryManager.deallocate(x)
-} // End of namespace tSage
+} // End of namespace TsAGE
#endif
diff --git a/engines/tsage/user_interface.cpp b/engines/tsage/user_interface.cpp
new file mode 100644
index 0000000000..b7f96b3806
--- /dev/null
+++ b/engines/tsage/user_interface.cpp
@@ -0,0 +1,529 @@
+/* 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/user_interface.h"
+#include "tsage/core.h"
+#include "tsage/tsage.h"
+#include "tsage/blue_force/blueforce_dialogs.h"
+#include "tsage/blue_force/blueforce_logic.h"
+
+namespace TsAGE {
+
+void StripProxy::process(Event &event) {
+ if (_action)
+ _action->process(event);
+}
+
+/*--------------------------------------------------------------------------*/
+
+void UIElement::synchronize(Serializer &s) {
+ BackgroundSceneObject::synchronize(s);
+ s.syncAsSint16LE(_field88);
+ s.syncAsSint16LE(_enabled);
+ s.syncAsSint16LE(_frameNum);
+}
+
+void UIElement::setup(int visage, int stripNum, int frameNum, int posX, int posY, int priority) {
+ _field88 = 0;
+ _frameNum = frameNum;
+ _enabled = true;
+
+ SceneObject::setup(visage, stripNum, frameNum, posX, posY, priority);
+}
+
+void UIElement::setEnabled(bool flag) {
+ if (_enabled != flag) {
+ _enabled = flag;
+ setFrame(_enabled ? _frameNum : _frameNum + 2);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+void UIQuestion::process(Event &event) {
+ if (event.eventType == EVENT_BUTTON_DOWN) {
+ CursorType currentCursor = GLOBALS._events.getCursor();
+ GLOBALS._events.hideCursor();
+ showDescription(currentCursor);
+
+ event.handled = true;
+ }
+}
+
+void UIQuestion::showDescription(CursorType cursor) {
+ if (cursor == INV_FOREST_RAP) {
+ // Forest rap item has a graphical display
+ showItem(5, 1, 1);
+ } else {
+ // Display object description
+ SceneItem::display2(9001, (int)cursor);
+ }
+}
+
+void UIQuestion::setEnabled(bool flag) {
+ if (_enabled != flag) {
+ UIElement::setEnabled(flag);
+ T2_GLOBALS._uiElements.draw();
+ }
+}
+
+void UIQuestion::showItem(int resNum, int rlbNum, int frameNum) {
+ GfxDialog::setPalette();
+
+ // Get the item to display
+ GfxSurface objImage = surfaceFromRes(resNum, rlbNum, frameNum);
+ Rect imgRect;
+ imgRect.resize(objImage, 0, 0, 100);
+ imgRect.center(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2);
+
+ // Save the area behind where the image will be displayed
+ GfxSurface *savedArea = Surface_getArea(BF_GLOBALS.gfxManager().getSurface(), imgRect);
+
+ // Draw the image
+ BF_GLOBALS.gfxManager().copyFrom(objImage, imgRect);
+
+ // Wait for a press
+ BF_GLOBALS._events.waitForPress();
+
+ // Restore the old area
+ BF_GLOBALS.gfxManager().copyFrom(*savedArea, imgRect);
+ delete savedArea;
+}
+
+/*--------------------------------------------------------------------------*/
+
+void UIScore::postInit(SceneObjectList *OwnerList) {
+ int xp = 266;
+ _digit3.setup(1, 6, 1, xp, 180, 255);
+ _digit3.reposition();
+ xp += 7;
+ _digit2.setup(1, 6, 1, xp, 180, 255);
+ _digit2.reposition();
+ xp += 7;
+ _digit1.setup(1, 6, 1, xp, 180, 255);
+ _digit1.reposition();
+ xp += 7;
+ _digit0.setup(1, 6, 1, xp, 180, 255);
+ _digit0.reposition();
+}
+
+void UIScore::draw() {
+ _digit3.draw();
+ _digit2.draw();
+ _digit1.draw();
+ _digit0.draw();
+}
+
+void UIScore::updateScore() {
+ int score = T2_GLOBALS._uiElements._scoreValue;
+
+ _digit3.setFrame(score / 1000 + 1); score %= 1000;
+ _digit2.setFrame(score / 100 + 1); score %= 100;
+ _digit1.setFrame(score / 10 + 1); score %= 10;
+ _digit0.setFrame(score + 1);
+}
+
+/*--------------------------------------------------------------------------*/
+
+UIInventorySlot::UIInventorySlot(): UIElement() {
+ _objIndex = 0;
+ _object = NULL;
+}
+
+void UIInventorySlot::synchronize(Serializer &s) {
+ UIElement::synchronize(s);
+ s.syncAsSint16LE(_objIndex);
+ SYNC_POINTER(_object);
+}
+
+void UIInventorySlot::process(Event &event) {
+ if (event.eventType == EVENT_BUTTON_DOWN) {
+ event.handled = true;
+
+ // Check if game has a select item handler, and if so, give it a chance to check
+ // whether something special happens when the item is selected
+ if (!T2_GLOBALS._onSelectItem || !T2_GLOBALS._onSelectItem((CursorType)_objIndex))
+ _object->setCursor();
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+UIInventoryScroll::UIInventoryScroll() {
+ _isLeft = false;
+}
+
+void UIInventoryScroll::synchronize(Serializer &s) {
+ UIElement::synchronize(s);
+ s.syncAsSint16LE(_isLeft);
+}
+
+void UIInventoryScroll::process(Event &event) {
+ switch (event.eventType) {
+ case EVENT_BUTTON_DOWN:
+ // Draw the button as selected
+ toggle(true);
+
+ event.handled = true;
+ break;
+ case EVENT_BUTTON_UP:
+ // Restore unselected version
+ toggle(false);
+
+ // Scroll the inventory as necessary
+ T2_GLOBALS._uiElements.scrollInventory(_isLeft);
+ event.handled = true;
+ break;
+ default:
+ break;
+ }
+}
+
+void UIInventoryScroll::toggle(bool pressed) {
+ if (_enabled) {
+ setFrame(pressed ? (_frameNum + 1) : _frameNum);
+ T2_GLOBALS._uiElements.draw();
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+UICollection::UICollection(): EventHandler() {
+ _clearScreen = false;
+ _visible = false;
+ _cursorChanged = false;
+}
+
+void UICollection::setup(const Common::Point &pt) {
+ _position = pt;
+ _bounds.left = _bounds.right = pt.x;
+ _bounds.top = _bounds.bottom = pt.y;
+}
+
+void UICollection::hide() {
+ erase();
+ _visible = false;
+}
+
+void UICollection::show() {
+ _visible = true;
+ draw();
+}
+
+void UICollection::erase() {
+ if (_clearScreen) {
+ Rect tempRect(0, UI_INTERFACE_Y, SCREEN_WIDTH, SCREEN_HEIGHT);
+ BF_GLOBALS._screenSurface.fillRect(tempRect, 0);
+ BF_GLOBALS._sceneManager._scene->_backSurface.fillRect(tempRect, 0);
+ _clearScreen = false;
+ }
+}
+
+void UICollection::resetClear() {
+ _clearScreen = false;
+}
+
+void UICollection::draw() {
+ if (_visible) {
+ // Temporarily reset the sceneBounds when drawing UI elements to force them on-screen
+ Rect savedBounds = g_globals->_sceneManager._scene->_sceneBounds;
+ g_globals->_sceneManager._scene->_sceneBounds = Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
+
+ // Draw the elements onto the background
+ for (uint idx = 0; idx < _objList.size(); ++idx)
+ _objList[idx]->draw();
+
+ // Draw the resulting UI onto the screen
+ BF_GLOBALS._screenSurface.copyFrom(BF_GLOBALS._sceneManager._scene->_backSurface,
+ Rect(0, UI_INTERFACE_Y, SCREEN_WIDTH, SCREEN_HEIGHT),
+ Rect(0, UI_INTERFACE_Y, SCREEN_WIDTH, SCREEN_HEIGHT));
+
+ _clearScreen = 1;
+ g_globals->_sceneManager._scene->_sceneBounds = savedBounds;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+UIElements::UIElements(): UICollection() {
+ _cursorVisage.setVisage(1, 5);
+ g_saver->addLoadNotifier(&UIElements::loadNotifierProc);
+ _characterIndex = 0;
+}
+
+void UIElements::synchronize(Serializer &s) {
+ UICollection::synchronize(s);
+
+ s.syncAsSint16LE(_slotStart);
+ s.syncAsSint16LE(_scoreValue);
+ s.syncAsByte(_active);
+
+ int count = _itemList.size();
+ s.syncAsSint16LE(count);
+ if (s.isLoading()) {
+ // Load in item list
+ _itemList.clear();
+
+ for (int idx = 0; idx < count; ++idx) {
+ int itemId;
+ s.syncAsSint16LE(itemId);
+ _itemList.push_back(itemId);
+ }
+ } else {
+ // Save item list
+ for (int idx = 0; idx < count; ++idx) {
+ int itemId = _itemList[idx];
+ s.syncAsSint16LE(itemId);
+ }
+ }
+
+ if (g_vm->getGameID() == GType_Ringworld2)
+ s.syncAsSint16LE(_characterIndex);
+}
+
+void UIElements::process(Event &event) {
+ if (_clearScreen && BF_GLOBALS._player._enabled && (BF_GLOBALS._sceneManager._sceneNumber != 50)) {
+ if (_bounds.contains(event.mousePos)) {
+ // Cursor inside UI area
+ if (!_cursorChanged) {
+ if (BF_GLOBALS._events.isInventoryIcon()) {
+ // Inventory icon being displayed, so leave alone
+ } else {
+ // Change to the inventory use cursor
+ GfxSurface surface = _cursorVisage.getFrame(6);
+ BF_GLOBALS._events.setCursor(surface);
+ }
+ _cursorChanged = true;
+ }
+
+ // Pass event to any element that the cursor falls on
+ for (int idx = (int)_objList.size() - 1; idx >= 0; --idx) {
+ if (_objList[idx]->_bounds.contains(event.mousePos) && _objList[idx]->_enabled) {
+ _objList[idx]->process(event);
+ if (event.handled)
+ break;
+ }
+ }
+
+ if (event.eventType == EVENT_BUTTON_DOWN)
+ event.handled = true;
+
+ } else if (_cursorChanged) {
+ // Cursor outside UI area, so reset as necessary
+ BF_GLOBALS._events.setCursor(BF_GLOBALS._events.getCursor());
+ _cursorChanged = false;
+/*
+ SceneExt *scene = (SceneExt *)BF_GLOBALS._sceneManager._scene;
+ if (scene->_focusObject) {
+ GfxSurface surface = _cursorVisage.getFrame(7);
+ BF_GLOBALS._events.setCursor(surface);
+ }
+*/
+ }
+ }
+}
+
+void UIElements::setup(const Common::Point &pt) {
+ _slotStart = 0;
+ _itemList.clear();
+ _scoreValue = 0;
+ _active = true;
+ UICollection::setup(pt);
+ hide();
+
+ _background.setup(1, 3, 1, 0, 0, 255);
+ add(&_background);
+
+ // Set up the inventory slots
+ int xp = 0;
+ for (int idx = 0; idx < 4; ++idx) {
+ UIElement *item = NULL;
+ switch (idx) {
+ case 0:
+ item = &_slot1;
+ break;
+ case 1:
+ item = &_slot2;
+ break;
+ case 2:
+ item = &_slot3;
+ break;
+ case 3:
+ item = &_slot4;
+ break;
+ }
+
+ xp = idx * 63 + 2;
+ if (g_vm->getGameID() == GType_BlueForce) {
+ item->setup(9, 1, idx, xp, 4, 255);
+ } else {
+ item->setup(7, 1, idx, xp, 4, 255);
+ }
+ add(item);
+ }
+
+ // Setup bottom-right hand buttons
+ xp += 62;
+ int yp = (g_vm->getGameID() == GType_BlueForce) ? 16 : 17;
+ _question.setup(1, 4, 7, xp, yp, 255);
+ _question.setEnabled(false);
+ add(&_question);
+
+ xp += 21;
+ _scrollLeft.setup(1, 4, 1, xp, yp, 255);
+ add(&_scrollLeft);
+ _scrollLeft._isLeft = true;
+
+ xp += 22;
+ _scrollRight.setup(1, 4, 4, xp, yp, 255);
+ add(&_scrollRight);
+ _scrollRight._isLeft = false;
+
+ switch (g_vm->getGameID()) {
+ case GType_BlueForce:
+ // Set up the score
+ _score.postInit();
+ add(&_score);
+ case GType_Ringworld2:
+ // Set up the character display
+ _character.setup(1, 5, _characterIndex, 285, 11, 255);
+ add(&_character);
+ break;
+ default:
+ break;
+ }
+
+ // Set interface area
+ _bounds = Rect(0, UI_INTERFACE_Y - 1, SCREEN_WIDTH, SCREEN_HEIGHT);
+
+ updateInventory();
+}
+
+void UIElements::add(UIElement *obj) {
+ // Add object
+ assert(_objList.size() < 12);
+ _objList.push_back(obj);
+
+ obj->setPosition(Common::Point(_bounds.left + obj->_position.x, _bounds.top + obj->_position.y));
+ obj->reposition();
+
+ GfxSurface s = obj->getFrame();
+ s.draw(obj->_position);
+}
+
+/**
+ * Handles updating the visual inventory in the user interface
+ */
+void UIElements::updateInventory() {
+ _score.updateScore();
+ updateInvList();
+
+ // Enable scroll buttons if the player has more than four items
+ if (_itemList.size() > 4) {
+ _scrollLeft.setEnabled(true);
+ _scrollRight.setEnabled(true);
+ } else {
+ _scrollLeft.setEnabled(false);
+ _scrollRight.setEnabled(false);
+ }
+
+ // Handle cropping the slots start within inventory
+ int lastPage = (_itemList.size() - 1) / 4 + 1;
+ if (_slotStart < 0)
+ _slotStart = lastPage - 1;
+ else if (_slotStart > (lastPage - 1))
+ _slotStart = 0;
+
+ // Handle refreshing slot graphics
+ UIInventorySlot *slotList[4] = { &_slot1, &_slot2, &_slot3, &_slot4 };
+
+ // Loop through the inventory objects
+ SynchronizedList<InvObject *>::iterator i;
+ int objIndex = 0;
+ for (i = BF_INVENTORY._itemList.begin(); i != BF_INVENTORY._itemList.end(); ++i, ++objIndex) {
+ InvObject *obj = *i;
+
+ // Check whether the object is in any of the four inventory slots
+ for (int slotIndex = 0; slotIndex < 4; ++slotIndex) {
+ int idx = _slotStart * 4 + slotIndex;
+ int objectIdx = (idx < (int)_itemList.size()) ? _itemList[idx] : 0;
+
+ if (objectIdx == objIndex) {
+ UIInventorySlot *slot = slotList[slotIndex];
+
+ slot->_objIndex = objIndex;
+ slot->_object = obj;
+ slot->setVisage(obj->_visage);
+ slot->setStrip(obj->_strip);
+ slot->setFrame(obj->_frame);
+ }
+ }
+ }
+
+ // Refresh the display if necessary
+ if (_active)
+ draw();
+}
+
+/**
+ * Update the list of the indexes of items in the player's inventory
+ */
+void UIElements::updateInvList() {
+ // Update the index list of items in the player's inventory
+ _itemList.clear();
+
+ SynchronizedList<InvObject *>::iterator i;
+ int itemIndex = 0;
+ for (i = BF_GLOBALS._inventory->_itemList.begin(); i != BF_GLOBALS._inventory->_itemList.end(); ++i, ++itemIndex) {
+ InvObject *invObject = *i;
+ if (invObject->inInventory())
+ _itemList.push_back(itemIndex);
+ }
+}
+
+/**
+ * Set the game score
+ */
+void UIElements::addScore(int amount) {
+ _scoreValue += amount;
+ BF_GLOBALS._sound2.play(0);
+ updateInventory();
+}
+
+/*
+ * Scroll the inventory slots
+ */
+void UIElements::scrollInventory(bool isLeft) {
+ if (isLeft)
+ --_slotStart;
+ else
+ ++_slotStart;
+
+ updateInventory();
+}
+
+void UIElements::loadNotifierProc(bool postFlag) {
+ if (postFlag && T2_GLOBALS._uiElements._active)
+ T2_GLOBALS._uiElements.show();
+}
+
+} // End of namespace TsAGE
diff --git a/engines/tsage/user_interface.h b/engines/tsage/user_interface.h
new file mode 100644
index 0000000000..94a2444e39
--- /dev/null
+++ b/engines/tsage/user_interface.h
@@ -0,0 +1,150 @@
+/* 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.
+ *
+ */
+
+#ifndef TSAGE_USER_INTERFACE_H
+#define TSAGE_USER_INTERFACE_H
+
+#include "common/scummsys.h"
+#include "tsage/core.h"
+#include "tsage/graphics.h"
+#include "tsage/sound.h"
+
+namespace TsAGE {
+
+class StripProxy: public EventHandler {
+public:
+ virtual void process(Event &event);
+};
+
+class UIElement: public BackgroundSceneObject {
+public:
+ int _field88;
+ bool _enabled;
+ int _frameNum;
+
+ virtual Common::String getClassName() { return "UIElement"; }
+ virtual void synchronize(Serializer &s);
+
+ void setup(int visage, int stripNum, int frameNum, int posX, int posY, int priority);
+ void setEnabled(bool flag);
+};
+
+// This class implements the Question mark button
+class UIQuestion: public UIElement {
+private:
+ void showDescription(CursorType item);
+ void showItem(int resNum, int rlbNum, int frameNum);
+public:
+ virtual void process(Event &event);
+ void setEnabled(bool flag);
+};
+
+// This class implements the score counter
+class UIScore: public UIElement {
+private:
+ void showDescription(int lineNum);
+public:
+ UIElement _digit3, _digit2, _digit1, _digit0;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void draw();
+
+ void updateScore();
+};
+
+class UIInventorySlot: public UIElement {
+public:
+ int _objIndex;
+ InvObject *_object;
+
+ UIInventorySlot();
+ virtual Common::String getClassName() { return "UIInventorySlot"; }
+ virtual void synchronize(Serializer &s);
+ virtual void process(Event &event);
+};
+
+class UIInventoryScroll: public UIElement {
+private:
+ void toggle(bool pressed);
+public:
+ bool _isLeft;
+
+ UIInventoryScroll();
+ virtual Common::String getClassName() { return "UIInventoryScroll"; }
+ virtual void synchronize(Serializer &s);
+ virtual void process(Event &event);
+};
+
+class UICollection: public EventHandler {
+protected:
+ void erase();
+public:
+ Common::Point _position;
+ Rect _bounds;
+ bool _visible;
+ bool _clearScreen;
+ bool _cursorChanged;
+ Common::Array<UIElement *> _objList;
+
+ UICollection();
+ void setup(const Common::Point &pt);
+ void hide();
+ void show();
+ void resetClear();
+ void draw();
+};
+
+class UIElements: public UICollection {
+private:
+ void add(UIElement *obj);
+ void updateInvList();
+public:
+ UIElement _background;
+ UIQuestion _question;
+ UIScore _score;
+ UIInventorySlot _slot1, _slot2, _slot3, _slot4;
+ UIInventoryScroll _scrollLeft, _scrollRight;
+ ASound _sound;
+ int _slotStart, _scoreValue;
+ bool _active;
+ Common::Array<int> _itemList;
+ Visage _cursorVisage;
+ UIElement _character;
+ int _characterIndex;
+
+ UIElements();
+ virtual Common::String getClassName() { return "UIElements"; }
+ virtual void synchronize(Serializer &s);
+ virtual void postInit(SceneObjectList *OwnerList = NULL) { error("Wrong init() called"); }
+ virtual void process(Event &event);
+
+ void setup(const Common::Point &pt);
+ void updateInventory();
+ void addScore(int amount);
+ void scrollInventory(bool isLeft);
+
+ static void loadNotifierProc(bool postFlag);
+};
+
+} // End of namespace TsAGE
+
+#endif