[Scummvm-cvs-logs] scummvm master -> 9908fa3b61bff96a921160b3c90c73e6f2a40ccc

dreammaster dreammaster at scummvm.org
Tue Sep 6 12:01:21 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:
ad85a25f88 TSAGE: Added new walking code for Blue Force that uses flipped horizontal images
9908fa3b61 TSAGE: Some cleanup of Blue Force Scene 300, and implementing Scene 190


Commit: ad85a25f88f6d060f8477df7a6b5bfec1c620d84
    https://github.com/scummvm/scummvm/commit/ad85a25f88f6d060f8477df7a6b5bfec1c620d84
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2011-09-06T02:54:22-07:00

Commit Message:
TSAGE: Added new walking code for Blue Force that uses flipped horizontal images

Changed paths:
    engines/tsage/core.cpp
    engines/tsage/core.h



diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp
index 71f001d..ad082d6 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"
@@ -307,8 +308,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 (_vm->getGameID() == GType_Ringworld)
+			_sceneObject->_objectWrapper->dispatch();
+		else
+			_sceneObject->updateAngle(destPos);
+	}
 
 	// Get the difference
 	int diffX = destPos.x - _sceneObject->_position.x;
@@ -1799,11 +1804,11 @@ void SceneObjectWrapper::dispatch() {
 
 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))
@@ -1812,7 +1817,7 @@ void SceneObjectWrapper::check() {
 			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))
@@ -1831,8 +1836,8 @@ void SceneObjectWrapper::check() {
 			strip = 8;
 	}
 
-	if (strip > frameCount)
-		strip = frameCount;
+	if (strip > visageCount)
+		strip = visageCount;
 
 	_sceneObject->setStrip(strip);
 }
@@ -2165,9 +2170,16 @@ 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 ((_vm->getGameID() == GType_Ringworld) || 
+			((angleAmount != -1) && (_animateMode == ANIM_MODE_9)))
+		_angle = angleAmount;
+
+	if (_objectWrapper && (_vm->getGameID() == GType_Ringworld))
 		_objectWrapper->dispatch();
 }
 
@@ -2438,8 +2450,8 @@ void SceneObject::updateScreen() {
 	}
 }
 
-void SceneObject::updateAngle(SceneObject *sceneObj) {
-	checkAngle(sceneObj);
+void SceneObject::updateAngle(const Common::Point &pt) {
+	checkAngle(pt);
 	if (_objectWrapper)
 		_objectWrapper->check();
 }
@@ -2780,8 +2792,10 @@ void SceneText::synchronize(Serializer &s) {
 }
 
 void SceneText::updateScreen() {
-	// In Blue Force, stop clearing text in the user interface area screwing up user interface
-	if ((_vm->getGameID() != GType_BlueForce) || (_bounds.top < BF_INTERFACE_Y))
+	// 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 ((_vm->getGameID() != GType_BlueForce) || (_bounds.top < BF_INTERFACE_Y) ||
+			!BF_GLOBALS._uiElements._active)
 		SceneObject::updateScreen();
 }
 
@@ -2791,6 +2805,7 @@ Visage::Visage() {
 	_resNum = -1;
 	_rlbNum = -1;
 	_data = NULL;
+	_flipHoriz = false;
 }
 
 Visage::Visage(const Visage &v) {
@@ -2821,20 +2836,25 @@ void Visage::setVisage(int resNum, int rlbNum) {
 			// In Ringworld, we immediately get the data
 			_data = _resourceManager->getResource(RES_VISAGE, resNum, rlbNum);
 		} else {
-			// Blue Force has an extra indirection via a visage index file
+			// Blue Force has an extra indirection via the visage index file
 			byte *indexData = _resourceManager->getResource(RES_VISAGE, resNum, 9999);
-			if (rlbNum == 0)
-				rlbNum = 1;
+			if (rlbNum == 9999) {
+				_data = indexData;
+			} else {
+				if (rlbNum == 0)
+					rlbNum = 1;
 
-			// Get the flags/rlbNum to use
-			uint32 flags = READ_LE_UINT32(indexData + (rlbNum - 1) * 4 + 2);
+				// Get the flags/rlbNum to use
+				uint32 v = READ_LE_UINT32(indexData + (rlbNum - 1) * 4 + 2);
+				int flags = v >> 30;
 
-			if (flags & 0xC0000000) {
-				// TODO: See whether rest of flags dword is needed
-				rlbNum = (int)(flags & 0xff);
-			}
+				if (flags & 3) {
+					rlbNum = (int)(v & 0xff);
+				}
+				_flipHoriz = flags & 1;
 
-			_data = _resourceManager->getResource(RES_VISAGE, resNum, rlbNum);
+				_data = _resourceManager->getResource(RES_VISAGE, resNum, rlbNum);
+			}
 		}
 
 		assert(_data);
@@ -2855,13 +2875,28 @@ 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() {
diff --git a/engines/tsage/core.h b/engines/tsage/core.h
index d8a21c7..5496087 100644
--- a/engines/tsage/core.h
+++ b/engines/tsage/core.h
@@ -467,9 +467,12 @@ class SceneObject;
 class Visage {
 private:
 	byte *_data;
+
+	void flip(GfxSurface &s);
 public:
 	int _resNum;
 	int _rlbNum;
+	bool _flipHoriz;
 public:
 	Visage();
 	Visage(const Visage &v);
@@ -478,7 +481,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 {
@@ -562,6 +565,7 @@ 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);
@@ -580,8 +584,8 @@ public:
 	virtual void draw();
 	virtual void proc19() {}
 	virtual void updateScreen();
-	// New methods introduced by Blue FOrce
-	virtual void updateAngle(SceneObject *sceneObj);
+	// 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);


Commit: 9908fa3b61bff96a921160b3c90c73e6f2a40ccc
    https://github.com/scummvm/scummvm/commit/9908fa3b61bff96a921160b3c90c73e6f2a40ccc
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2011-09-06T02:55:29-07:00

Commit Message:
TSAGE: Some cleanup of Blue Force Scene 300, and implementing Scene 190

Changed paths:
    engines/tsage/blue_force/blueforce_logic.cpp
    engines/tsage/blue_force/blueforce_logic.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/converse.cpp



diff --git a/engines/tsage/blue_force/blueforce_logic.cpp b/engines/tsage/blue_force/blueforce_logic.cpp
index 048aaf1..99e3c38 100644
--- a/engines/tsage/blue_force/blueforce_logic.cpp
+++ b/engines/tsage/blue_force/blueforce_logic.cpp
@@ -67,8 +67,10 @@ Scene *BlueForceGame::createScene(int sceneNumber) {
 	case 150:
 	case 160:
 	case 180:
-	case 190:
 		error("Scene group 1 not implemented");
+	case 190:
+		// Front of Police Station
+		return new Scene190();
 	case 200:
 	case 210:
 	case 220:
@@ -501,6 +503,7 @@ SceneExt::SceneExt(): Scene() {
 	_field372 = 0;
 	_field37A = 0;
 	_eventHandler = NULL;
+	_cursorVisage.setVisage(1, 8);
 }
 
 void SceneExt::postInit(SceneObjectList *OwnerList) {
@@ -598,17 +601,17 @@ void SceneExt::gunDisplay() {
 
 /*--------------------------------------------------------------------------*/
 
-GameScene::GameScene() {
+GroupedScene::GroupedScene() {
 
 }
 
-void GameScene::postInit(SceneObjectList *OwnerList) {
+void GroupedScene::postInit(SceneObjectList *OwnerList) {
 	_field794 = 0;
 	_field412 = 1;
 	SceneExt::postInit(OwnerList);
 }
 
-void GameScene::remove() {
+void GroupedScene::remove() {
 	SceneExt::remove();
 	if (_field794 == 1) {
 		for (SynchronizedList<SceneObject *>::iterator i = BF_GLOBALS._sceneObjects->begin();
diff --git a/engines/tsage/blue_force/blueforce_logic.h b/engines/tsage/blue_force/blueforce_logic.h
index 762833b..c4c1b22 100644
--- a/engines/tsage/blue_force/blueforce_logic.h
+++ b/engines/tsage/blue_force/blueforce_logic.h
@@ -137,6 +137,8 @@ public:
 	void setup(SceneObject *object, int visage, int frameNum, int yDiff);
 };
 
+enum ExitFrame { EXITFRAME_NE = 2, EXITFRAME_E = 3 };
+
 class SceneExt: public Scene {
 private:
 	void gunDisplay();
@@ -145,6 +147,7 @@ public:
 	int _field372;
 	int _field37A;
 	EventHandler *_eventHandler;
+	Visage _cursorVisage;
 
 	Rect _v51C34;
 public:
@@ -162,12 +165,12 @@ public:
 	void display(CursorType action);
 };
 
-class GameScene: public SceneExt {
+class GroupedScene: public SceneExt {
 public:
 	int _field412;
 	int _field794;
 public:
-	GameScene();
+	GroupedScene();
 
 	virtual void postInit(SceneObjectList *OwnerList = NULL);
 	virtual void remove();
diff --git a/engines/tsage/blue_force/blueforce_scenes1.cpp b/engines/tsage/blue_force/blueforce_scenes1.cpp
index 7cccb0d..acb1592 100644
--- a/engines/tsage/blue_force/blueforce_scenes1.cpp
+++ b/engines/tsage/blue_force/blueforce_scenes1.cpp
@@ -346,11 +346,11 @@ void Scene109::Text::dispatch() {
 
 /*--------------------------------------------------------------------------*/
 
-Scene109::Scene109(): GameScene() {
+Scene109::Scene109(): GroupedScene() {
 }
 
 void Scene109::postInit(SceneObjectList *OwnerList) {
-	GameScene::postInit(OwnerList);
+	GroupedScene::postInit(OwnerList);
 	loadScene(999);
 
 	_protaginist2.postInit();
@@ -427,6 +427,283 @@ void Scene109::signal() {
 	}
 }
 
+/*--------------------------------------------------------------------------
+ * Scene 190 - Front of Police Station
+ *
+ *--------------------------------------------------------------------------*/
+
+void Scene190::Object4::startAction(CursorType action) {
+	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);
+		break;
+	}
+	default:
+		NamedObject::startAction(action);
+		break;
+	}
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene190::Item1::startAction(CursorType action) {
+	Scene190 *scene = (Scene190 *)BF_GLOBALS._sceneManager._scene;
+
+	switch (action) {
+	case CURSOR_USE:
+		scene->setAction(&scene->_action1);
+		break;
+	default:
+		NamedHotspot::startAction(action);
+		break;
+	}
+}
+
+void Scene190::Item2::startAction(CursorType action) {
+	Scene190 *scene = (Scene190 *)BF_GLOBALS._sceneManager._scene;
+
+	switch (action) {
+	case CURSOR_USE:
+		scene->_stripManager.start(1900, scene);
+		break;
+	default:
+		NamedHotspot::startAction(action);
+		break;
+	}
+}
+
+void Scene190::Exit::startAction(CursorType action) {
+	Scene190 *scene = (Scene190 *)BF_GLOBALS._sceneManager._scene;
+
+	Common::Point pt(316, 91);
+	PlayerMover *mover = new PlayerMover();
+	BF_GLOBALS._player.addMover(mover, &pt, scene);
+}
+
+/*--------------------------------------------------------------------------*/
+
+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.setup(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.setup(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();
+			_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.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);
+}
+
+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 && !_eventHandler && (event.mousePos.y < (BF_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
index 2b07e2b..3f4d1cb 100644
--- a/engines/tsage/blue_force/blueforce_scenes1.h
+++ b/engines/tsage/blue_force/blueforce_scenes1.h
@@ -79,7 +79,7 @@ public:
 	virtual void signal();
 };
 
-class Scene109: public GameScene {
+class Scene109: public GroupedScene {
 	/* Actions */
 	class Action1: public Action {
 	public:
@@ -124,6 +124,58 @@ public:
 	virtual void signal();
 };
 
+class Scene190: public SceneExt {
+	/* Objects */
+	class Object4: public NamedObject {
+	public:
+		virtual void startAction(CursorType action);
+	};
+
+	/* Items */
+	class Item1: public NamedHotspot {
+	public:
+		virtual void startAction(CursorType action);
+	};
+	class Item2: public NamedHotspot {
+	public:
+		virtual void startAction(CursorType action);
+	};
+	class Exit: public NamedHotspot {
+	public:
+		virtual void startAction(CursorType action);
+	};
+
+	/* 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
diff --git a/engines/tsage/blue_force/blueforce_scenes3.cpp b/engines/tsage/blue_force/blueforce_scenes3.cpp
index fd1e613..d9d7590 100644
--- a/engines/tsage/blue_force/blueforce_scenes3.cpp
+++ b/engines/tsage/blue_force/blueforce_scenes3.cpp
@@ -222,8 +222,6 @@ void Scene300::Action5::signal() {
 Scene300::Scene300(): SceneExt(), _object13(3000), _object14(3001), _object15(3002),
 			_object16(3003) {
 	_field2760 = _field2762 = 0;
-	
-	_cursorVisage.setVisage(1, 8);
 }
 
 void Scene300::postInit(SceneObjectList *OwnerList) {
@@ -282,12 +280,6 @@ void Scene300::postInit(SceneObjectList *OwnerList) {
 	_object11.setPosition(Common::Point(265, 91));
 	_object11.hide();
 
- //***DEBUG***
-BF_GLOBALS.setFlag(2);
-BF_GLOBALS._sceneManager._previousScene = 315; // 190;
-BF_GLOBALS._player.setVisage(190);
-BF_GLOBALS._player.setStrip(1);
-
 	switch (BF_GLOBALS._sceneManager._previousScene) {
 	case 50:
 	case 60:
@@ -526,11 +518,12 @@ void Scene300::process(Event &event) {
 	SceneExt::process(event);
 
 	if (BF_GLOBALS._player._enabled && !_eventHandler && (event.mousePos.y < (BF_INTERFACE_Y - 1))) {
+		// Check if the cursor is on an exit
 		if (_item14.contains(event.mousePos)) {
-			GfxSurface surface = _cursorVisage.getFrame(2);
+			GfxSurface surface = _cursorVisage.getFrame(EXITFRAME_NE);
 			BF_GLOBALS._events.setCursor(surface);
 		} else if (_item15.contains(event.mousePos)) {
-			GfxSurface surface = _cursorVisage.getFrame(3);
+			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
diff --git a/engines/tsage/blue_force/blueforce_scenes3.h b/engines/tsage/blue_force/blueforce_scenes3.h
index 4acb424..fba2d04 100644
--- a/engines/tsage/blue_force/blueforce_scenes3.h
+++ b/engines/tsage/blue_force/blueforce_scenes3.h
@@ -97,7 +97,6 @@ private:
 public:
 	SequenceManager _sequenceManager1, _sequenceManager2;
 	SequenceManager _sequenceManager3, _sequenceManager4;
-	Visage _cursorVisage;
 	NamedObject _object1;
 	FollowerObject _object2, _object3, _object4, _object5, _object6, _object7;
 	SceneObject _object8, _object9, _object10;
diff --git a/engines/tsage/converse.cpp b/engines/tsage/converse.cpp
index 615b1c3..af9bca2 100644
--- a/engines/tsage/converse.cpp
+++ b/engines/tsage/converse.cpp
@@ -287,7 +287,7 @@ void SequenceManager::signal() {
 		/* Following indexes were introduced for Blue Force */
 		case 35:
 			v1 = getNextValue();
-			_sceneObject->updateAngle(_objectList[v1]);
+			_sceneObject->updateAngle(_objectList[v1]->_position);
 			break;
 		case 36:
 			_sceneObject->animate(ANIM_MODE_9, NULL);






More information about the Scummvm-git-logs mailing list