[Scummvm-cvs-logs] scummvm master -> 406a8ca10e000fcad82f9349f944ecf51adbc0cd

dreammaster dreammaster at scummvm.org
Sun Sep 11 07:38:25 CEST 2011


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
7b73ae590c TSAGE: Implemented Scene 60 - Motorcycle
406a8ca10e TSAGE: Reworked item startAction calls from void to bool, to accommodate Blue Force changes


Commit: 7b73ae590c548de3006de3a720adabf2bcdf7025
    https://github.com/scummvm/scummvm/commit/7b73ae590c548de3006de3a720adabf2bcdf7025
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2011-09-10T22:29:43-07:00

Commit Message:
TSAGE: Implemented Scene 60 - Motorcycle

Changed paths:
    engines/tsage/blue_force/blueforce_dialogs.cpp
    engines/tsage/blue_force/blueforce_dialogs.h
    engines/tsage/ringworld/ringworld_scenes10.cpp
    engines/tsage/ringworld/ringworld_scenes5.cpp
    engines/tsage/staticres.cpp
    engines/tsage/staticres.h



diff --git a/engines/tsage/blue_force/blueforce_dialogs.cpp b/engines/tsage/blue_force/blueforce_dialogs.cpp
index f71d3d7..e074f88 100644
--- a/engines/tsage/blue_force/blueforce_dialogs.cpp
+++ b/engines/tsage/blue_force/blueforce_dialogs.cpp
@@ -365,6 +365,70 @@ void AmmoBeltDialog::draw() {
 	}
 }
 
+/*--------------------------------------------------------------------------*/
+
+RadioConvDialog::RadioConvDialog() : ModalDialog() {
+	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 = ModalDialog::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
index 0fee0eb..e9ce29c 100644
--- a/engines/tsage/blue_force/blueforce_dialogs.h
+++ b/engines/tsage/blue_force/blueforce_dialogs.h
@@ -24,6 +24,7 @@
 #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"
@@ -34,6 +35,8 @@ namespace TsAGE {
 
 namespace BlueForce {
 
+using namespace TsAGE;
+
 class RightClickDialog : public GfxDialog {
 private:
 	GfxSurface _surface;
@@ -71,6 +74,16 @@ public:
 	void execute();
 };
 
+class RadioConvDialog : public ModalDialog {
+private:
+	GfxButton _buttons[8];
+public:
+	RadioConvDialog();
+	virtual ~RadioConvDialog();
+	int execute();
+
+	static int show();
+};
 
 } // End of namespace BlueForce
 
diff --git a/engines/tsage/ringworld/ringworld_scenes10.cpp b/engines/tsage/ringworld/ringworld_scenes10.cpp
index df25c32..1d310c6 100644
--- a/engines/tsage/ringworld/ringworld_scenes10.cpp
+++ b/engines/tsage/ringworld/ringworld_scenes10.cpp
@@ -145,13 +145,13 @@ void Scene9100::postInit(SceneObjectList *OwnerList) {
 		_object6.setStrip(6);
 		_object6.setFrame(1);
 		_object6.setPosition(Common::Point(138, 166));
-		_sceneHotspot3.setup(145, 125, 166, 156, 9100, 40, 43);
+		_sceneHotspot3.setDetails(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);
+	_sceneHotspot1.setDetails(140, 176, 185, 215, 9100, 36, 37);
+	_sceneHotspot2.setDetails(161, 138, 182, 175, 9100, 38, 39);
+	_sceneHotspot4.setDetails(37, 196, 47, 320, 9100, 44, -1);
+	_sceneHotspot5.setDetails(69, 36, 121, 272, 9100, 45, 46);
+	_sceneHotspot6.setDetails(127, 0, 200, 52, 9100, 47, 48);
 
 	_globals->_soundHandler.play(251);
 	if (_globals->_sceneManager._previousScene == 9150) {
@@ -261,16 +261,16 @@ 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);
+	_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);
 
 	_globals->_soundHandler.play(285);
 	_globals->_player.disableControl();
@@ -412,15 +412,15 @@ void Scene9200::postInit(SceneObjectList *OwnerList) {
 
 	if (!_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();
@@ -514,19 +514,19 @@ void Scene9300::postInit(SceneObjectList *OwnerList) {
 	_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);
+	_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 (_globals->_sceneManager._previousScene == 9350) {
 		_globals->_player.disableControl();
@@ -593,11 +593,11 @@ void Scene9350::postInit(SceneObjectList *OwnerList) {
 	_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();
@@ -677,14 +677,14 @@ void Scene9360::postInit(SceneObjectList *OwnerList) {
 	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);
+	_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);
 	_globals->_events.setCursor(CURSOR_WALK);
 	_globals->_player.disableControl();
 	if (_globals->_sceneManager._previousScene == 9350) {
@@ -796,14 +796,14 @@ void Scene9400::postInit(SceneObjectList *OwnerList) {
 	_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);
@@ -992,23 +992,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);
 }
 
 /*--------------------------------------------------------------------------
@@ -1024,7 +1024,7 @@ void Scene9500::Hotspot1::doAction(int action) {
 		RING_INVENTORY._sword._sceneNumber = 9500;
 		_globals->_player.disableControl();
 		_globals->_sceneItems.remove(this);
-		scene->_hotspot2.setup(87, 294, 104, 314, 9400, 17, -1);
+		scene->_hotspot2.setDetails(87, 294, 104, 314, 9400, 17, -1);
 		scene->setAction(&scene->_sequenceManager, scene, 9510, &_globals->_player, &scene->_object2, NULL);
 	} else {
 		NamedHotspot::doAction(action);
@@ -1182,37 +1182,37 @@ void Scene9500::postInit(SceneObjectList *OwnerList) {
 		_object2.setPosition(Common::Point(303, 130));
 		_object2.fixPriority(132);
 		if (RING_INVENTORY._helmet._sceneNumber == 1) {
-			_hotspot2.setup(87, 294, 104, 314, 9400, 17, -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);
-	}
-
-	_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);
+		_hotspot5.setDetails(111, 68, 155, 244, 9500, 17, -1);
+		_hotspot4.setDetails(57, 71, 120, 126, 9500, 16, -1);
+	}
+
+	_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();
@@ -1223,7 +1223,7 @@ void Scene9500::postInit(SceneObjectList *OwnerList) {
 			setAction(&_sequenceManager, this, 9501, &_globals->_player, &_candle, NULL);
 		} else {
 			RING_INVENTORY._helmet._sceneNumber = 9500;
-			_hotspot2.setup(87, 294, 104, 314, 9400, 17, -1);
+			_hotspot2.setDetails(87, 294, 104, 314, 9400, 17, -1);
 			setAction(&_sequenceManager, this, 9513, &_globals->_player, &_object2, NULL);
 		}
 	} else {
@@ -1282,12 +1282,12 @@ 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();
@@ -1617,26 +1617,26 @@ 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);
+	_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);
 
 	_globals->_player.postInit();
 	_globals->_player.disableControl();
diff --git a/engines/tsage/ringworld/ringworld_scenes5.cpp b/engines/tsage/ringworld/ringworld_scenes5.cpp
index 58f47d7..30093b7 100644
--- a/engines/tsage/ringworld/ringworld_scenes5.cpp
+++ b/engines/tsage/ringworld/ringworld_scenes5.cpp
@@ -4033,7 +4033,7 @@ 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));
@@ -4041,7 +4041,7 @@ void Scene4300::postInit(SceneObjectList *OwnerList) {
 	_hotspot7.fixPriority(250);
 	_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);
@@ -4414,7 +4414,7 @@ void Scene4301::postInit(SceneObjectList *OwnerList) {
 
 	_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));
diff --git a/engines/tsage/staticres.cpp b/engines/tsage/staticres.cpp
index 03e1954..aff0528 100644
--- a/engines/tsage/staticres.cpp
+++ b/engines/tsage/staticres.cpp
@@ -158,6 +158,9 @@ 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" };
+
 } // End of namespace BlueForce
 
 } // End of namespace TsAGE
diff --git a/engines/tsage/staticres.h b/engines/tsage/staticres.h
index 1baf29f..53f671a 100644
--- a/engines/tsage/staticres.h
+++ b/engines/tsage/staticres.h
@@ -122,6 +122,9 @@ extern const char *CITY_HALL_JAIL;
 extern const char *JAMISON_RYAN;
 extern const char *BIKINI_HUT;
 
+// Scene 60 radio dispatch buttons
+extern const char *RADIO_BTN_LIST[8];
+
 } // End of namespace BlueForce
 
 } // End of namespace TsAGE


Commit: 406a8ca10e000fcad82f9349f944ecf51adbc0cd
    https://github.com/scummvm/scummvm/commit/406a8ca10e000fcad82f9349f944ecf51adbc0cd
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2011-09-10T22:30:34-07:00

Commit Message:
TSAGE: Reworked item startAction calls from void to bool, to accommodate Blue Force changes

Changed paths:
    engines/tsage/blue_force/blueforce_logic.cpp
    engines/tsage/blue_force/blueforce_logic.h
    engines/tsage/blue_force/blueforce_scenes0.cpp
    engines/tsage/blue_force/blueforce_scenes0.h
    engines/tsage/blue_force/blueforce_scenes1.cpp
    engines/tsage/blue_force/blueforce_scenes1.h
    engines/tsage/blue_force/blueforce_scenes3.cpp
    engines/tsage/blue_force/blueforce_scenes3.h
    engines/tsage/blue_force/blueforce_speakers.cpp
    engines/tsage/blue_force/blueforce_speakers.h
    engines/tsage/core.cpp
    engines/tsage/core.h
    engines/tsage/globals.cpp
    engines/tsage/globals.h



diff --git a/engines/tsage/blue_force/blueforce_logic.cpp b/engines/tsage/blue_force/blueforce_logic.cpp
index 73467d8..5cdd102 100644
--- a/engines/tsage/blue_force/blueforce_logic.cpp
+++ b/engines/tsage/blue_force/blueforce_logic.cpp
@@ -48,9 +48,11 @@ Scene *BlueForceGame::createScene(int sceneNumber) {
 		// Tsunami Title Screen
 		return new Scene20();
 	case 50:
+		// Map screen
 		return new Scene50();
 	case 60:
-		error("Scene group 0 not implemented");
+		// Motorcycle
+		return new Scene60();
 	/* Scene Group #1 */
 	case 100:
 		// Tsnunami Title Screen #2
@@ -364,7 +366,7 @@ void NamedObject::synchronize(Serializer &s) {
 	s.syncAsSint16LE(_useLineNum);
 }
 
-void NamedObject::startAction(CursorType action, Event &event) {
+bool NamedObject::startAction(CursorType action, Event &event) {
 	bool handled = true;
 
 	switch (action) {
@@ -393,9 +395,10 @@ void NamedObject::startAction(CursorType action, Event &event) {
 
 	if (!handled)
 		((SceneExt *)BF_GLOBALS._sceneManager._scene)->display(action);
+	return handled;
 }
 
-void NamedObject::setup(int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode, SceneItem *item) {
+void NamedObject::setDetails(int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode, SceneItem *item) {
 	_resNum = resNum;
 	_lookLineNum = lookLineNum;
 	_talkLineNum = talkLineNum;
diff --git a/engines/tsage/blue_force/blueforce_logic.h b/engines/tsage/blue_force/blueforce_logic.h
index 11719e7..0850854 100644
--- a/engines/tsage/blue_force/blueforce_logic.h
+++ b/engines/tsage/blue_force/blueforce_logic.h
@@ -107,9 +107,9 @@ public:
 	virtual Common::String getClassName() { return "NamedObject"; }
 	virtual void synchronize(Serializer &s);
 	virtual void postInit(SceneObjectList *OwnerList = NULL);
-	virtual void startAction(CursorType action, Event &event);
+	virtual bool startAction(CursorType action, Event &event);
 
-	void setup(int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode, SceneItem *item);
+	void setDetails(int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode, SceneItem *item);
 };
 
 class CountdownObject: public NamedObject {
@@ -170,6 +170,7 @@ public:
 	void addTimer(Timer *timer) { _timerList.add(timer); }
 	void removeTimer(Timer *timer) { _timerList.remove(timer); }
 	bool display(CursorType action);
+	void fadeOut() {}
 };
 
 class GroupedScene: public SceneExt {
diff --git a/engines/tsage/blue_force/blueforce_scenes0.cpp b/engines/tsage/blue_force/blueforce_scenes0.cpp
index d658398..c623fc5 100644
--- a/engines/tsage/blue_force/blueforce_scenes0.cpp
+++ b/engines/tsage/blue_force/blueforce_scenes0.cpp
@@ -21,6 +21,7 @@
  */
 
 #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"
@@ -499,6 +500,613 @@ void Scene50::process(Event &event) {
 	}
 }
 
+/*--------------------------------------------------------------------------
+ * Scene 60 - Motorcycle
+ *
+ *--------------------------------------------------------------------------*/
+
+bool Scene60::Item2::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::Item2::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._v4CEA8 = 19;
+				BF_GLOBALS._sceneManager.changeScene(666);
+				return true;
+			}
+		}
+	}
+
+	BF_GLOBALS._v5098C |= 1;
+	return false;
+}
+
+bool Scene60::Item2::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)) {
+				BF_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)) {
+				BF_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)) {
+				BF_GLOBALS._uiElements.addScore(10);
+				_state = 606;
+			} else if (BF_GLOBALS.removeFlag(fCan1004Drunk)) {
+				BF_GLOBALS._uiElements.addScore(10);
+				_state = 606;
+			} else {
+				_state = 611;
+			}
+			break;
+		case 2:
+			_state = 612;
+			break;
+		case 3:
+			if (BF_GLOBALS.removeFlag(f1015Marina)) {
+				BF_GLOBALS._uiElements.addScore(10);
+				_state = 613;
+			} else if (BF_GLOBALS.removeFlag(f1015Frankie)) {
+				BF_GLOBALS._uiElements.addScore(10);
+				_state = 614;
+			} else if (BF_GLOBALS.removeFlag(f1015Drunk)) {
+				BF_GLOBALS._uiElements.addScore(10);
+				_state = 615;
+			} else {
+				_state = 616;
+			}
+			break;
+		case 4:
+			if (BF_GLOBALS.removeFlag(f1027Marina)) {
+				BF_GLOBALS._uiElements.addScore(10);
+				_actionIndex = 5;
+				_state = 617;
+			} else if (BF_GLOBALS.removeFlag(f1027Frankie)) {
+				BF_GLOBALS._uiElements.addScore(10);
+				_actionIndex = 5;
+				_state = 618;
+			} else if (BF_GLOBALS.removeFlag(f1015Drunk)) {
+				BF_GLOBALS._uiElements.addScore(10);
+				_actionIndex = 5;
+				_state = 619;
+			} else {
+				_state = 620;
+			}
+			break;
+		case 5:
+			if (BF_GLOBALS.removeFlag(f1035Marina)) {
+				BF_GLOBALS.setFlag(fCalledBackup);
+				BF_GLOBALS._uiElements.addScore(50);
+				_state = 621;
+			} else if (BF_GLOBALS.removeFlag(f1035Frankie)) {
+				BF_GLOBALS.setFlag(fCalledBackup);
+				BF_GLOBALS._uiElements.addScore(50);
+				_actionIndex = 5;
+				_state = 622;
+			} else if (BF_GLOBALS.removeFlag(f1035Drunk)) {
+				BF_GLOBALS._uiElements.addScore(10);
+				_state = 623;
+			} else {
+				_state = 624;
+			}
+			break;
+		case 6:
+			if (BF_GLOBALS.removeFlag(f1097Marina)) {
+				BF_GLOBALS._uiElements.addScore(10);
+				_state = 625;
+			} else if (BF_GLOBALS.removeFlag(f1097Frankie)) {
+				BF_GLOBALS._uiElements.addScore(10);
+				_actionIndex = 5;
+				_state = 626;
+			} else if (BF_GLOBALS.removeFlag(f1097Drunk)) {
+				BF_GLOBALS._uiElements.addScore(10);
+				_state = 627;
+			} else {
+				_state = 628;
+			}
+			break;
+		case 7:
+			if (BF_GLOBALS.removeFlag(f1098Marina)) {
+				BF_GLOBALS._uiElements.addScore(10);
+				_state = 629;
+			} else if (BF_GLOBALS.removeFlag(f1098Frankie)) {
+				BF_GLOBALS._uiElements.addScore(10);
+				_state = 630;
+			} else if (BF_GLOBALS.removeFlag(f1098Drunk)) {
+				BF_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() {
+	_field1222 = false;
+	_newScene = 0;
+}
+
+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;
+		_item2._sceneRegionId = 22;
+	} else if (BF_GLOBALS.getFlag(onDuty)) {
+		_visage = 63;
+		_item2._sceneRegionId = 20;
+	} else {
+		_visage = 61;
+		_item2._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(&_item2);
+	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::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
index 5c98184..963f8b2 100644
--- a/engines/tsage/blue_force/blueforce_scenes0.h
+++ b/engines/tsage/blue_force/blueforce_scenes0.h
@@ -25,6 +25,7 @@
 
 #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"
@@ -96,6 +97,90 @@ public:
 	virtual void process(Event &event);
 };
 
+class Scene60 : public SceneExt {
+	/* Items */
+	class Item2: 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;
+	AltSceneObject _car;
+	NamedHotspot _item1;
+	Item2 _item2;
+	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 postInit(SceneObjectList *OwnerList = NULL);
+	virtual void signal();
+	virtual void dispatch();
+};
+
+
 } // End of namespace BlueForce
 
 } // End of namespace TsAGE
diff --git a/engines/tsage/blue_force/blueforce_scenes1.cpp b/engines/tsage/blue_force/blueforce_scenes1.cpp
index 3ff8296..b4e41c2 100644
--- a/engines/tsage/blue_force/blueforce_scenes1.cpp
+++ b/engines/tsage/blue_force/blueforce_scenes1.cpp
@@ -432,7 +432,7 @@ void Scene109::signal() {
  *
  *--------------------------------------------------------------------------*/
 
-void Scene190::Object4::startAction(CursorType action, Event &event) {
+bool Scene190::Object4::startAction(CursorType action, Event &event) {
 	Scene190 *scene = (Scene190 *)BF_GLOBALS._sceneManager._scene;
 
 	switch (action) {
@@ -442,48 +442,46 @@ void Scene190::Object4::startAction(CursorType action, Event &event) {
 		Common::Point pt(62, 96);
 		PlayerMover *mover = new PlayerMover();
 		BF_GLOBALS._player.addMover(mover, &pt, scene);
-		break;
+		return true;
 	}
 	default:
-		NamedObject::startAction(action, event);
-		break;
+		return NamedObject::startAction(action, event);
 	}
 }
 
 /*--------------------------------------------------------------------------*/
 
-void Scene190::Item1::startAction(CursorType action, Event &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);
-		break;
+		return true;
 	default:
-		NamedHotspot::startAction(action, event);
-		break;
+		return NamedHotspot::startAction(action, event);
 	}
 }
 
-void Scene190::Item2::startAction(CursorType action, Event &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);
-		break;
+		return true;
 	default:
-		NamedHotspot::startAction(action, event);
-		break;
+		return NamedHotspot::startAction(action, event);
 	}
 }
 
-void Scene190::Exit::startAction(CursorType action, Event &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;
 }
 
 /*--------------------------------------------------------------------------*/
@@ -555,7 +553,7 @@ void Scene190::postInit(SceneObjectList *OwnerList) {
 	_object3.fixPriority(200);
 	_object3.setPosition(Common::Point(170, 31));
 	_object3.animate(ANIM_MODE_7, 0, NULL);
-	_object3.setup(190, 8, 26, 19, 1, NULL);
+	_object3.setDetails(190, 8, 26, 19, 1, NULL);
 
 	if (BF_GLOBALS.getFlag(fWithLyle)) {
 		BF_GLOBALS._player.setVisage(303);
@@ -567,7 +565,7 @@ void Scene190::postInit(SceneObjectList *OwnerList) {
 		_object4.setVisage(444);
 		_object4.setFrame(2);
 		_object4.setPosition(Common::Point(54, 114));
-		_object4.setup(190, -1, -1, -1, 1, NULL);
+		_object4.setDetails(190, -1, -1, -1, 1, NULL);
 		
 		switch (BF_GLOBALS._sceneManager._previousScene) {
 		case 300: {
@@ -631,17 +629,17 @@ void Scene190::postInit(SceneObjectList *OwnerList) {
 		BF_GLOBALS._sound1.play(33);
 	}
 
-	_exit.setup(Rect(310, 50, 320, 125), 190, -1, -1, -1, 1, NULL);
-	_item2.setup(Rect(108, 1, 111, 94), 190, 7, 11, 18, 1, NULL);
-	_item4.setup(2, 190, 5, 10, 16, 1);
-	_item3.setup(1, 190, 4, 10, 15, 1);
-	_item8.setup(6, 190, 20, 21, 22, 1);
-	_item1.setup(7, 190, 1, 10, -1, 1);
-	_item7.setup(5, 190, 0, 10, 12, 1);
-	_item6.setup(4, 190, 2, 10, 13, 1);
-	_item5.setup(3, 190, 3, 10, 14, 1);
-	_item9.setup(Rect(0, 0, 89, 68), 190, 6, 10, 17, 1, NULL);
-	_item10.setup(Rect(0, 0, SCREEN_WIDTH, BF_INTERFACE_Y), 190, 23, -1, -1, 1, NULL);
+	_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, BF_INTERFACE_Y), 190, 23, -1, -1, 1, NULL);
 }
 
 void Scene190::signal() {
diff --git a/engines/tsage/blue_force/blueforce_scenes1.h b/engines/tsage/blue_force/blueforce_scenes1.h
index 6eeeff9..3028dcc 100644
--- a/engines/tsage/blue_force/blueforce_scenes1.h
+++ b/engines/tsage/blue_force/blueforce_scenes1.h
@@ -128,21 +128,21 @@ class Scene190: public SceneExt {
 	/* Objects */
 	class Object4: public NamedObject {
 	public:
-		virtual void startAction(CursorType action, Event &event);
+		virtual bool startAction(CursorType action, Event &event);
 	};
 
 	/* Items */
 	class Item1: public NamedHotspot {
 	public:
-		virtual void startAction(CursorType action, Event &event);
+		virtual bool startAction(CursorType action, Event &event);
 	};
 	class Item2: public NamedHotspot {
 	public:
-		virtual void startAction(CursorType action, Event &event);
+		virtual bool startAction(CursorType action, Event &event);
 	};
 	class Exit: public NamedHotspot {
 	public:
-		virtual void startAction(CursorType action, Event &event);
+		virtual bool startAction(CursorType action, Event &event);
 	};
 
 	/* Actions */
diff --git a/engines/tsage/blue_force/blueforce_scenes3.cpp b/engines/tsage/blue_force/blueforce_scenes3.cpp
index 7ab6295..f75b698 100644
--- a/engines/tsage/blue_force/blueforce_scenes3.cpp
+++ b/engines/tsage/blue_force/blueforce_scenes3.cpp
@@ -36,53 +36,60 @@ namespace BlueForce {
  *
  *--------------------------------------------------------------------------*/
 
-void Scene300::Object::startAction(CursorType action, Event &event) {
+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 {
-		NamedObject::startAction(action, event);
+		return NamedObject::startAction(action, event);
 	}
 }
 
-void Scene300::Object19::startAction(CursorType action, Event &event) {
+bool Scene300::Object19::startAction(CursorType action, Event &event) {
 	if ((action != CURSOR_USE) || !BF_GLOBALS.getFlag(onDuty)) {
-		NamedObject::startAction(action, event);
+		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;
 }
 
-void Scene300::Item1::startAction(CursorType action, Event &event) {
+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 {
-		NamedHotspot::startAction(action, event);
+		return NamedHotspot::startAction(action, event);
 	}
 }
 
-void Scene300::Item2::startAction(CursorType action, Event &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 {
-		NamedHotspot::startAction(action, event);
+		return NamedHotspot::startAction(action, event);
 	}
 }
 
-void Scene300::Item14::startAction(CursorType action, Event &event) {
+bool Scene300::Item14::startAction(CursorType action, Event &event) {
 	ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 151, 54);
+	return true;
 }
 
-void Scene300::Item15::startAction(CursorType action, Event &event) {
+bool Scene300::Item15::startAction(CursorType action, Event &event) {
 	ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 316, 90);
+	return true;
 }
 
 /*--------------------------------------------------------------------------*/
@@ -234,8 +241,8 @@ void Scene300::postInit(SceneObjectList *OwnerList) {
 	_stripManager.addSpeaker(&_jakeSpeaker);
 
 	_field2762 = 0;
-	_item14.setup(Rect(144, 27, 160, 60), 300, -1, -1, -1, 1, NULL);
-	_item15.setup(Rect(310, 76, SCREEN_WIDTH, 105), 300, -1, -1, -1, 1, NULL);
+	_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;
@@ -258,20 +265,20 @@ void Scene300::postInit(SceneObjectList *OwnerList) {
 		_object17.setVisage(301);
 		_object17.setStrip(1);
 		_object17.setPosition(Common::Point(87, 88));
-		_object17.setup(300, 11, 13, 2, 1, NULL);
+		_object17.setDetails(300, 11, 13, 2, 1, NULL);
 		
 		_object18.postInit();
 		_object18.setVisage(301);
 		_object18.setStrip(1);
 		_object18.setPosition(Common::Point(137, 92));
-		_object18.setup(300, 11, 13, 3, 1, NULL);
+		_object18.setDetails(300, 11, 13, 3, 1, NULL);
 	}
 
 	_object19.postInit();
 	_object19.setVisage(301);
 	_object19.setStrip(1);
 	_object19.setPosition(Common::Point(175, 99));
-	_object19.setup(300, 11, 13, 34, 1, NULL);
+	_object19.setDetails(300, 11, 13, 34, 1, NULL);
 
 	_object11.postInit();
 	_object11.setVisage(301);
@@ -283,7 +290,7 @@ void Scene300::postInit(SceneObjectList *OwnerList) {
 	case 50:
 	case 60:
 		BF_GLOBALS.clearFlag(onBike);
-		if (BF_GLOBALS.getFlag(3)) {
+		if (BF_GLOBALS.getFlag(onDuty)) {
 			BF_GLOBALS._player.disableControl();
 			_sceneMode = 318;
 			setAction(&_sequenceManager1, this, 318, &BF_GLOBALS._player, &_object19, NULL);
@@ -335,19 +342,19 @@ void Scene300::postInit(SceneObjectList *OwnerList) {
 		break;
 	}
 
-	_item10.setup(4, 300, 7, 13, 16, 1);
-	_item11.setup(2, 300, 9, 13, 18, 1);
-	_item12.setup(5, 300, 10, 13, 19, 1);
-	_item13.setup(3, 300, 25, 26, 27, 1);
-	_item2.setup(Rect(266, 54, 272, 59), 300, -1, -1, -1, 1, NULL);
-	_item1.setup(Rect(262, 47, 299, 76), 300, 1, 13, -1, 1, NULL);
-	_item4.setup(Rect(0, 85, SCREEN_WIDTH - 1, BF_INTERFACE_Y - 1), 300, 6, 13, 15, 1, NULL);
-	_item7.setup(Rect(219, 46, 251, 74), 300, 22, 23, 24, 1, NULL);
-	_item8.setup(Rect(301, 53, 319, 78), 300, 22, 23, 24, 1, NULL);
-	_item5.setup(Rect(179, 44, 200, 55), 300, 8, 13, 17, 1, NULL);
-	_item6.setup(Rect(210, 46, 231, 55), 300, 8, 13, 17, 1, NULL);
-	_item3.setup(Rect(160, 0, SCREEN_WIDTH - 1, 75), 300, 4, 13, 14, 1, NULL);
-	_item9.setup(Rect(0, 0, SCREEN_WIDTH, BF_INTERFACE_Y), 300, 29, 30, 31, 1, NULL);
+	_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, BF_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, BF_INTERFACE_Y), 300, 29, 30, 31, 1, NULL);
 }
 
 void Scene300::signal() {
@@ -625,7 +632,7 @@ void Scene300::setup() {
  *
  *--------------------------------------------------------------------------*/
 
-void Scene315::Item1::startAction(CursorType action, Event &event) {
+bool Scene315::Item1::startAction(CursorType action, Event &event) {
 	Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene;
 	scene->_currentCursor = action;
 
@@ -665,6 +672,7 @@ void Scene315::Item1::startAction(CursorType action, Event &event) {
 			scene->_sceneMode = 3152;
 			scene->setAction(&scene->_sequenceManager, scene, 3153, 1888, NULL);
 		} 
+		break;
 	case INV_FOREST_RAP:
 		BF_GLOBALS._player.disableControl();
 		scene->_stripNumber = BF_GLOBALS.getFlag(onDuty) ? 3178 : 3173;
@@ -721,12 +729,13 @@ void Scene315::Item1::startAction(CursorType action, Event &event) {
 		}
 		break;
 	default:
-		NamedHotspot::startAction(action, event);
-		break;
+		return NamedHotspot::startAction(action, event);
 	}
+
+	return true;
 }
 
-void Scene315::Item2::startAction(CursorType action, Event &event) {
+bool Scene315::Item2::startAction(CursorType action, Event &event) {
 	Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene;
 
 	switch (action) {
@@ -757,12 +766,13 @@ void Scene315::Item2::startAction(CursorType action, Event &event) {
 		scene->setAction(&scene->_sequenceManager, scene, 3154, &BF_GLOBALS._player, NULL);
 		break;
 	default:
-		NamedHotspot::startAction(action, event);
-		break;
+		return NamedHotspot::startAction(action, event);
 	}
+
+	return true;
 }
 
-void Scene315::Item4::startAction(CursorType action, Event &event) {
+bool Scene315::Item4::startAction(CursorType action, Event &event) {
 	Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene;
 
 	if (action == CURSOR_LOOK) {
@@ -772,23 +782,25 @@ void Scene315::Item4::startAction(CursorType action, Event &event) {
 		scene->_object9.hide();
 		scene->_sceneMode = 3167;
 		scene->setAction(&scene->_sequenceManager, scene, 3167, &scene->_object9, this, NULL);
+		return true;
 	} else {
-		NamedHotspot::startAction(action, event);
+		return NamedHotspot::startAction(action, event);
 	}
 }
 
-void Scene315::Item5::startAction(CursorType action, Event &event) {
+bool Scene315::Item5::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 {
-		NamedHotspot::startAction(action, event);
+		return NamedHotspot::startAction(action, event);
 	}
 }
 
-void Scene315::Item14::startAction(CursorType action, Event &event) {
+bool Scene315::Item14::startAction(CursorType action, Event &event) {
 	Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene;
 
 	if ((action == INV_COLT45) && BF_GLOBALS.getFlag(onDuty)) {
@@ -805,42 +817,47 @@ void Scene315::Item14::startAction(CursorType action, Event &event) {
 			scene->_sceneMode = 3159;
 			scene->setAction(&scene->_sequenceManager, scene, 3159, &BF_GLOBALS._player, NULL);
 		}
+		return true;
 	} else {
-		NamedHotspot::startAction(action, event);
+		return NamedHotspot::startAction(action, event);
 	}
 }
 
-void Scene315::Item15::startAction(CursorType action, Event &event) {
+bool Scene315::Item15::startAction(CursorType action, Event &event) {
 	Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene;
 
 	if (action != CURSOR_USE)
-		NamedHotspot::startAction(action, event);
-	else if (BF_INVENTORY._forestRap._sceneNumber == 1)
+		return NamedHotspot::startAction(action, event);
+	else if (BF_INVENTORY._forestRap._sceneNumber == 1) {
 		SceneItem::display2(315, 37);
-	else {
+		return true;
+	} else {
 		BF_GLOBALS._player.disableControl();
 		scene->_sceneMode = 3158;
 		scene->setAction(&scene->_sequenceManager, scene, 3158, &BF_GLOBALS._player, NULL);
+		return true;
 	}
 }
 
-void Scene315::Item16::startAction(CursorType action, Event &event) {
+bool Scene315::Item16::startAction(CursorType action, Event &event) {
 	ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, 190, 75);
+	return true;
 }
 
-void Scene315::Item17::startAction(CursorType action, Event &event) {
+bool Scene315::Item17::startAction(CursorType action, Event &event) {
 	ADD_PLAYER_MOVER_NULL(BF_GLOBALS._player, event.mousePos.x, event.mousePos.y);
+	return true;
 }
 
 /*--------------------------------------------------------------------------*/
 
-void Scene315::Object1::startAction(CursorType action, Event &event) {
+bool Scene315::Object1::startAction(CursorType action, Event &event) {
 	Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene;
 
 	switch (action) {
 	case CURSOR_LOOK:
 		scene->_stripManager.start(3157, &BF_GLOBALS._stripProxy);
-		break;
+		return true;
 	case CURSOR_USE:
 		if (!BF_GLOBALS.getFlag(fGotPointsForCleaningGun)) {
 			BF_GLOBALS._uiElements.addScore(10);
@@ -848,14 +865,14 @@ void Scene315::Object1::startAction(CursorType action, Event &event) {
 		}
 		BF_GLOBALS._player.addMover(NULL);
 		scene->_stripManager.start(3159, &BF_GLOBALS._stripProxy);
-		break;
+		return true;
 	default:
-		NamedObject::startAction(action, event);
+		return NamedObject::startAction(action, event);
 		break;
 	}
 }
 
-void Scene315::Object2::startAction(CursorType action, Event &event) {
+bool Scene315::Object2::startAction(CursorType action, Event &event) {
 	Scene315 *scene = (Scene315 *)BF_GLOBALS._sceneManager._scene;
 
 	switch (action) {
@@ -865,27 +882,26 @@ void Scene315::Object2::startAction(CursorType action, Event &event) {
 		scene->_object9.hide();
 		scene->_sceneMode = 3157;
 		scene->setAction(&scene->_sequenceManager, scene, 3157, &BF_GLOBALS._player, &scene->_object9, NULL);
-		break;
+		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);
-		break;
+		return true;
 	default:
-		NamedObject::startAction(action, event);
-		break;
+		return NamedObject::startAction(action, event);
 	}
 }
 
-void Scene315::Object3::startAction(CursorType action, Event &event) {
+bool Scene315::Object3::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);
-		break;
+		return true;
 	case CURSOR_USE:
 		if (!BF_GLOBALS.getFlag(fGotPointsForMemo)) {
 			BF_GLOBALS._uiElements.addScore(30);
@@ -894,10 +910,9 @@ void Scene315::Object3::startAction(CursorType action, Event &event) {
 
 		BF_GLOBALS._player.addMover(NULL);
 		scene->_stripManager.start(3158, &BF_GLOBALS._stripProxy);
-		break;
+		return true;
 	default:
-		NamedObject::startAction(action, event);
-		break;
+		return NamedObject::startAction(action, event);
 	}
 }
 
@@ -986,7 +1001,7 @@ void Scene315::postInit(SceneObjectList *OwnerList) {
 		_object3.setStrip(4);
 		_object3.setFrame(4);
 		_object3.fixPriority(82);
-		_object3.setup(315, -1, -1, -1, 1, NULL);
+		_object3.setDetails(315, -1, -1, -1, 1, NULL);
 	}
 
 	if (BF_GLOBALS._dayNumber == 1) {
@@ -997,7 +1012,7 @@ void Scene315::postInit(SceneObjectList *OwnerList) {
 			_object1.setStrip(4);
 			_object1.setFrame(2);
 			_object1.fixPriority(82);
-			_object1.setup(315, -1, -1, -1, 1, NULL);
+			_object1.setDetails(315, -1, -1, -1, 1, NULL);
 		}
 	} else if ((BF_INVENTORY._daNote._sceneNumber != 1) && (BF_GLOBALS._dayNumber < 3)) {
 		_object2.postInit();
@@ -1006,16 +1021,16 @@ void Scene315::postInit(SceneObjectList *OwnerList) {
 		_object2.setFrame(2);
 		_object2.setPosition(Common::Point(304, 31));
 		_object2.fixPriority(70);
-		_object2.setup(315, 3, 4, -1, 1, NULL);
+		_object2.setDetails(315, 3, 4, -1, 1, NULL);
 	}
 
-	_item2.setup(12, 315, 35, -1, 36, 1);
-	_item5.setup(3, 315, -1, -1, -1, 1);
-	_item1.setup(4, 315, 10, 11, 12, 1);
-	_item3.setup(2, 315, 0, 1, 2, 1);
-	_item4.setup(Rect(190, 17, 208, 30), 315, -1, -1, -1, 1, NULL);
-	_item16.setup(Rect(184, 31, 211, 80), 315, -1, -1, -1, 1, NULL);
-	_item17.setup(Rect(0, 157, 190, 167), 315, -1, -1, -1, 1, NULL);
+	_item2.setDetails(12, 315, 35, -1, 36, 1);
+	_item5.setDetails(3, 315, -1, -1, -1, 1);
+	_item1.setDetails(4, 315, 10, 11, 12, 1);
+	_item3.setDetails(2, 315, 0, 1, 2, 1);
+	_item4.setDetails(Rect(190, 17, 208, 30), 315, -1, -1, -1, 1, NULL);
+	_item16.setDetails(Rect(184, 31, 211, 80), 315, -1, -1, -1, 1, NULL);
+	_item17.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;
@@ -1098,14 +1113,14 @@ void Scene315::postInit(SceneObjectList *OwnerList) {
 		BF_GLOBALS._walkRegions.proc1(4);
 	}
 
-	_item15.setup(24, 315, 38, 39, 40, 1);
-	_item14.setup(14, 315, 24, 25, 26, 1);
-	_item7.setup(5, 315, 8, 9, -1, 1);
-	_item6.setup(6, 315, 5, 6, 7, 1);
-	_item10.setup(8, 315, 13, -1, -1, 1);
-	_item11.setup(9, 315, 14, -1, -1, 1);
-	_item8.setup(7, 315, 15, 16, 17, 1);
-	_item9.setup(10, 315, 18, 19, 20, 1);
+	_item15.setDetails(24, 315, 38, 39, 40, 1);
+	_item14.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() {
@@ -1346,11 +1361,14 @@ void Scene315::dispatch() {
  *
  *--------------------------------------------------------------------------*/
 
-void Scene325::Item1::startAction(CursorType action, Event &event) {
+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;
 	}
 }
 
@@ -1406,7 +1424,7 @@ void Scene325::postInit(SceneObjectList *OwnerList) {
 	_object5.setStrip(1);
 	_object5.setPosition(Common::Point(135, 167));
 
-	_item1.setup(Rect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT), 560, -1, -1, -1, 1, NULL);
+	_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;
diff --git a/engines/tsage/blue_force/blueforce_scenes3.h b/engines/tsage/blue_force/blueforce_scenes3.h
index df03057..18911d5 100644
--- a/engines/tsage/blue_force/blueforce_scenes3.h
+++ b/engines/tsage/blue_force/blueforce_scenes3.h
@@ -47,29 +47,29 @@ class Scene300: public SceneExt {
 	public:
 		Object(int stripNumber) { _stripNumber = stripNumber; }
 
-		virtual void startAction(CursorType action, Event &event);
+		virtual bool startAction(CursorType action, Event &event);
 	};
 	class Object19: public NamedObject {
 	public:
-		virtual void startAction(CursorType action, Event &event);
+		virtual bool startAction(CursorType action, Event &event);
 	};
 
 	/* Items */
 	class Item1: public NamedHotspot {
 	public:
-		virtual void startAction(CursorType action, Event &event);
+		virtual bool startAction(CursorType action, Event &event);
 	};
 	class Item2: public NamedHotspot {
 	public:
-		virtual void startAction(CursorType action, Event &event);
+		virtual bool startAction(CursorType action, Event &event);
 	};
 	class Item14: public NamedHotspot {
 	public:
-		virtual void startAction(CursorType action, Event &event);
+		virtual bool startAction(CursorType action, Event &event);
 	};
 	class Item15: public NamedHotspot {
 	public:
-		virtual void startAction(CursorType action, Event &event);
+		virtual bool startAction(CursorType action, Event &event);
 	};
 
 	/* Actions */
@@ -135,49 +135,49 @@ class Scene315: public SceneExt {
 	/* Objects */
 	class Object1: public NamedObject {
 	public:
-		virtual void startAction(CursorType action, Event &event);
+		virtual bool startAction(CursorType action, Event &event);
 	};
 	class Object2: public NamedObject {
 	public:
-		virtual void startAction(CursorType action, Event &event);
+		virtual bool startAction(CursorType action, Event &event);
 	};
 	class Object3: public NamedObject {
 	public:
-		virtual void startAction(CursorType action, Event &event);
+		virtual bool startAction(CursorType action, Event &event);
 	};
 
 	/* Items */
 	class Item1: public NamedHotspot {
 	public:
-		virtual void startAction(CursorType action, Event &event);
+		virtual bool startAction(CursorType action, Event &event);
 	};
 	class Item2: public NamedHotspot {
 	public:
-		virtual void startAction(CursorType action, Event &event);
+		virtual bool startAction(CursorType action, Event &event);
 	};
 	class Item4: public NamedHotspot {
 	public:
-		virtual void startAction(CursorType action, Event &event);
+		virtual bool startAction(CursorType action, Event &event);
 	};
 	class Item5: public NamedHotspot {
 	public:
-		virtual void startAction(CursorType action, Event &event);
+		virtual bool startAction(CursorType action, Event &event);
 	};
 	class Item14: public NamedHotspot {
 	public:
-		virtual void startAction(CursorType action, Event &event);
+		virtual bool startAction(CursorType action, Event &event);
 	};
 	class Item15: public NamedHotspot {
 	public:
-		virtual void startAction(CursorType action, Event &event);
+		virtual bool startAction(CursorType action, Event &event);
 	};
 	class Item16: public NamedHotspot {
 	public:
-		virtual void startAction(CursorType action, Event &event);
+		virtual bool startAction(CursorType action, Event &event);
 	};
 	class Item17: public NamedHotspot {
 	public:
-		virtual void startAction(CursorType action, Event &event);
+		virtual bool startAction(CursorType action, Event &event);
 	};
 
 	/* Actions */
@@ -230,7 +230,7 @@ class Scene325: public SceneExt {
 	/* Items */
 	class Item1: public NamedHotspot {
 	public:
-		virtual void startAction(CursorType action, Event &event);
+		virtual bool startAction(CursorType action, Event &event);
 	};
 public:
 	SequenceManager _sequenceManager;
diff --git a/engines/tsage/blue_force/blueforce_speakers.cpp b/engines/tsage/blue_force/blueforce_speakers.cpp
index f35fa22..dc2511d 100644
--- a/engines/tsage/blue_force/blueforce_speakers.cpp
+++ b/engines/tsage/blue_force/blueforce_speakers.cpp
@@ -307,6 +307,14 @@ void SpeakerPSutter::setText(const Common::String &msg) {
 	_object2.fixCountdown(8, _numFrames);
 }
 
+/*--------------------------------------------------------------------------*/
+
+SpeakerJakeRadio::SpeakerJakeRadio(): VisualSpeaker() {
+	_color1 = 13;
+	_color2 = 7;
+	_speakerName = "JAKE_RADIO";
+}
+
 } // 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
index 1bb56ec..c059385 100644
--- a/engines/tsage/blue_force/blueforce_speakers.h
+++ b/engines/tsage/blue_force/blueforce_speakers.h
@@ -124,6 +124,13 @@ public:
 	virtual void setText(const Common::String &msg);
 };
 
+class SpeakerJakeRadio: public VisualSpeaker {
+public:
+	SpeakerJakeRadio();
+
+	virtual Common::String getClassName() { return "SpeakerJakeRadio"; }
+};
+
 
 } // End of namespace BlueForce
 
diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp
index bee2214..ea6278c 100644
--- a/engines/tsage/core.cpp
+++ b/engines/tsage/core.cpp
@@ -1467,6 +1467,19 @@ void SceneItem::remove() {
 	_globals->_sceneItems.remove(this);
 }
 
+bool SceneItem::startAction(CursorType action, Event &event) { 
+	if (_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) {
 	const char *msg = NULL;
 
@@ -1743,7 +1756,7 @@ void NamedHotspot::doAction(int action) {
 	}
 }
 
-void NamedHotspot::setup(int ys, int xs, int ye, int xe, const int resnum, const int lookLineNum, const int useLineNum) {
+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;
@@ -1752,7 +1765,7 @@ void NamedHotspot::setup(int ys, int xs, int ye, int xe, const int resnum, const
 	_globals->_sceneItems.addItems(this, NULL);
 }
 
-void NamedHotspot::setup(const Rect &bounds, int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode, SceneItem *item) {
+void NamedHotspot::setDetails(const Rect &bounds, int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode, SceneItem *item) {
 	setBounds(bounds);
 	_resNum = resNum;
 	_lookLineNum = lookLineNum;
@@ -1775,7 +1788,7 @@ void NamedHotspot::setup(const Rect &bounds, int resNum, int lookLineNum, int ta
 	}
 }
 
-void NamedHotspot::setup(int sceneRegionId, int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode) {
+void NamedHotspot::setDetails(int sceneRegionId, int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode) {
 	_sceneRegionId = sceneRegionId;
 	_resNum = resNum;
 	_lookLineNum = lookLineNum;
@@ -3645,8 +3658,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 (_vm->getGameID() == GType_Ringworld)
+			return &_defaultPriorityRegion;
+		return NULL;
+	}
 
 	if (priority > 255)
 		priority = 255;
diff --git a/engines/tsage/core.h b/engines/tsage/core.h
index 5cfaf5c..ccb3817 100644
--- a/engines/tsage/core.h
+++ b/engines/tsage/core.h
@@ -415,7 +415,7 @@ public:
 	virtual Common::String getClassName() { return "SceneItem"; }
 	virtual void remove();
 	virtual void destroy() {}
-	virtual void startAction(CursorType action, Event &event) { doAction(action); }
+	virtual bool startAction(CursorType action, Event &event);
 	virtual void doAction(int action);
 
 	bool contains(const Common::Point &pt);
@@ -453,9 +453,9 @@ public:
 	virtual void doAction(int action);
 	virtual Common::String getClassName() { return "NamedHotspot"; }
 	virtual void synchronize(Serializer &s);
-	void setup(int ys, int xs, int ye, int xe, const int resnum, const int lookLineNum, const int useLineNum);
-	virtual void setup(const Rect &bounds, int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode, SceneItem *item);
-	virtual void setup(int sceneRegionId, int resNum, int lookLineNum, int talkLineNum, int useLineNum, int mode);
+	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);
 };
 
 enum AnimateMode {ANIM_MODE_NONE = 0, ANIM_MODE_1 = 1, ANIM_MODE_2 = 2, ANIM_MODE_3 = 3,
diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp
index b13cd98..89704de 100644
--- a/engines/tsage/globals.cpp
+++ b/engines/tsage/globals.cpp
@@ -233,6 +233,8 @@ void BlueForceGlobals::reset() {
 	_v4E238 = 0;
 	_v50696 = 0;
 	_v501FC = 0;
+	_v5098C = 0;
+	_v5098D = 0;
 	_v51C42 = 0;
 	_clip1Bullets = 8;
 	_clip2Bullets = 8;
@@ -244,6 +246,19 @@ bool BlueForceGlobals::getHasBullets() {
 	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
 
 } // end of namespace TsAGE
diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h
index 2ddbfb3..9d33ea7 100644
--- a/engines/tsage/globals.h
+++ b/engines/tsage/globals.h
@@ -176,6 +176,8 @@ public:
 	int _v4E238;
 	int _v501FC;
 	int _v50696;
+	uint8 _v5098C;
+	uint8 _v5098D;
 	int _v51C42;
 	int _v51C44;
 	int _interfaceY;
@@ -189,6 +191,8 @@ public:
 
 	virtual Common::String getClassName() { return "BFGlobals"; }
 	virtual void synchronize(Serializer &s);
+	void set2Flags(int flagNum);
+	bool removeFlag(int flagNum);
 };
 
 } // End of namespace BlueForce






More information about the Scummvm-git-logs mailing list