[Scummvm-cvs-logs] scummvm master -> 81ba9b2ebccffa0677ff1526f6ef1b017f61f61b

dreammaster dreammaster at scummvm.org
Sun Aug 14 04:29:31 CEST 2011


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

Summary:
3101dfab16 TSAGE: Added new global variables for Blue Force
fed3306b15 TSAGE: Removed recently added preloadVisage method
fd8fcc303d TSAGE: Implemented changes in SequenceManager introduced by Blue Force
81ba9b2ebc TSAGE: Further changes to Blue Force scenes, and started implementing scene 109


Commit: 3101dfab165e519c06d71f1b2a8fb653a8052aae
    https://github.com/scummvm/scummvm/commit/3101dfab165e519c06d71f1b2a8fb653a8052aae
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2011-08-13T19:23:11-07:00

Commit Message:
TSAGE: Added new global variables for Blue Force

Changed paths:
    engines/tsage/globals.h



diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h
index 9d12669..a3d02ec 100644
--- a/engines/tsage/globals.h
+++ b/engines/tsage/globals.h
@@ -100,6 +100,10 @@ class BlueForceGlobals: public Globals {
 public:
 	ASound _sound1, _sound2, _sound3;
 	int _v4CEA2;
+	int _v4CF9E;
+	int _v4E238;
+	int _v501FC;
+	int _v51C42;
 	int _v51C44;
 	int _v51C24;
 


Commit: fed3306b15666fb989a08a6e62322577de1e9414
    https://github.com/scummvm/scummvm/commit/fed3306b15666fb989a08a6e62322577de1e9414
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2011-08-13T19:24:23-07:00

Commit Message:
TSAGE: Removed recently added preloadVisage method

Method associated was actually the standard getVisage method

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



diff --git a/engines/tsage/scenes.cpp b/engines/tsage/scenes.cpp
index 954c63e..8db1a32 100644
--- a/engines/tsage/scenes.cpp
+++ b/engines/tsage/scenes.cpp
@@ -501,16 +501,6 @@ void Scene::setZoomPercents(int yStart, int minPercent, int yEnd, int maxPercent
 		_zoomPercents[yEnd++] = minPercent;
 }
 
-byte *Scene::preloadVisage(int resNum) {
-	// This isn't being used, since modern systems can load the data much quicker, and in any case
-	// visage data is specially loaded into the Visage class, and the resources discarded from memory.
-	return NULL;
-/*
-	assert(!_v52C9F);
-	return _resourceManager->getResource(RES_VISAGE, resNum, 9999, false);
-*/
-}
-
 /*--------------------------------------------------------------------------*/
 
 void Game::execute() {
diff --git a/engines/tsage/scenes.h b/engines/tsage/scenes.h
index 665da58..5845efa 100644
--- a/engines/tsage/scenes.h
+++ b/engines/tsage/scenes.h
@@ -67,7 +67,6 @@ public:
 	void loadBackground(int xAmount, int yAmount);
 	void refreshBackground(int xAmount, int yAmount);
 	void loadSceneData(int sceneNum);
-	byte *preloadVisage(int resNum);
 };
 
 class SceneManager : public GameHandler, public SaveListener {


Commit: fd8fcc303dbca30383ac0651e36014079b2ffc88
    https://github.com/scummvm/scummvm/commit/fd8fcc303dbca30383ac0651e36014079b2ffc88
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2011-08-13T19:25:02-07:00

Commit Message:
TSAGE: Implemented changes in SequenceManager introduced by Blue Force

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



diff --git a/engines/tsage/converse.cpp b/engines/tsage/converse.cpp
index 0ae575c..cc1c596 100644
--- a/engines/tsage/converse.cpp
+++ b/engines/tsage/converse.cpp
@@ -34,7 +34,7 @@ namespace tSage {
 SequenceManager::SequenceManager() : Action() {
 	Common::set_to(&_objectList[0], &_objectList[6], (SceneObject *)NULL);
 	_sequenceData.clear();
-	_field24 = 0;
+	_fontNum = 0;
 	_sequenceOffset = 0;
 	_resNum = 0;
 	_field26 = 0;
@@ -56,7 +56,7 @@ void SequenceManager::synchronize(Serializer &s) {
 	s.syncAsSint32LE(_resNum);
 	s.syncAsSint32LE(_sequenceOffset);
 	s.syncAsByte(_keepActive);
-	s.syncAsSint32LE(_field24);
+	s.syncAsSint32LE(_fontNum);
 	s.syncAsSint32LE(_field26);
 
 	s.syncAsSint32LE(_objectIndex);
@@ -284,6 +284,32 @@ void SequenceManager::signal() {
 				_objectList[objIndex3], _objectList[objIndex4], _objectList[objIndex5], _objectList[objIndex6], NULL);
 			break;
 		}
+		/* Following indexes were introduced for Blue Force */
+		case 35:
+			v1 = getNextValue();
+			_sceneObject->updateAngle(_objectList[v1]);
+			break;
+		case 36:
+			_sceneObject->animate(ANIM_MODE_9, NULL);
+			break;
+		case 37:
+			v1 = getNextValue();
+			v2 = getNextValue();
+			warning("TODO: dword_53030(%d,%d)", v1, v2);
+			break;
+		case 38: {
+			int resNum = getNextValue();
+			int lineNum = getNextValue();
+			int fontNum = getNextValue();
+			int color1 = getNextValue();
+			int color2 = getNextValue();
+			int color3 = getNextValue();
+			int xp = getNextValue();
+			int yp = getNextValue();
+			int width = getNextValue();
+			setMessage(resNum, lineNum, fontNum, color1, color2, color3, Common::Point(xp, yp), width);
+			break;
+		}
 		default:
 			error("SequenceManager::signal - Unknown action %d at offset %xh", idx, _sequenceOffset - 2);
 			break;
@@ -337,10 +363,15 @@ uint16 SequenceManager::getNextValue() {
 }
 
 void SequenceManager::setMessage(int resNum, int lineNum, int color, const Common::Point &pt, int width) {
-	_sceneText._color1 = color;
-	_sceneText._color2 = 0;
-	_sceneText._color3 = 0;
-	_sceneText._fontNumber = 2;
+	setMessage(resNum, lineNum, 2, color, 0, 0, pt, width);
+}
+
+void SequenceManager::setMessage(int resNum, int lineNum, int fontNum, int color1, int color2, int color3,
+								 const Common::Point &pt, int width) {
+	_sceneText._color1 = color1;
+	_sceneText._color2 = color2;
+	_sceneText._color3 = color3;
+	_sceneText._fontNumber = fontNum;
 	_sceneText._width = width;
 
 	// Get the display message
diff --git a/engines/tsage/converse.h b/engines/tsage/converse.h
index 13c490e..5836b0b 100644
--- a/engines/tsage/converse.h
+++ b/engines/tsage/converse.h
@@ -39,13 +39,15 @@ private:
 	void setup();
 	uint16 getNextValue();
 	void setMessage(int resNum, int lineNum, int color, const Common::Point &pt, int width);
+	void setMessage(int resNum, int lineNum, int fontNum, int color1, int color2, int color3,
+		const Common::Point &pt, int width);
 	SequenceManager *globalManager();
 public:
 	SceneText _sceneText;
 	int _resNum;
 	uint _sequenceOffset;
 	bool _keepActive;
-	int _field24;
+	int _fontNum;
 	int _field26;
 	Common::Array<byte> _sequenceData;
 	int _objectIndex;
diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp
index 52c1a5c..492ecf7 100644
--- a/engines/tsage/core.cpp
+++ b/engines/tsage/core.cpp
@@ -1655,6 +1655,11 @@ void SceneObjectWrapper::remove() {
 }
 
 void SceneObjectWrapper::dispatch() {
+	if (_vm->getGameID() == GType_Ringworld)
+		check();
+}
+
+void SceneObjectWrapper::check() {
 	_visageImages.setVisage(_sceneObject->_visage);
 	int frameCount = _visageImages.getFrameCount();
 	int angle = _sceneObject->_angle;
@@ -2277,6 +2282,18 @@ void SceneObject::updateScreen() {
 	}
 }
 
+void SceneObject::updateAngle(SceneObject *sceneObj) {
+	checkAngle(sceneObj);
+	if (_objectWrapper)
+		_objectWrapper->check();
+}
+
+void SceneObject::changeAngle(int angle) {
+	_angle = angle;
+	if (_objectWrapper)
+		_objectWrapper->check();
+}
+
 void SceneObject::setup(int visage, int stripFrameNum, int frameNum, int posX, int posY, int priority) {
 	postInit();
 	setVisage(visage);
diff --git a/engines/tsage/core.h b/engines/tsage/core.h
index 959f96b..c4408e3 100644
--- a/engines/tsage/core.h
+++ b/engines/tsage/core.h
@@ -437,7 +437,10 @@ public:
 };
 
 enum AnimateMode {ANIM_MODE_NONE = 0, ANIM_MODE_1 = 1, ANIM_MODE_2 = 2, ANIM_MODE_3 = 3,
-		ANIM_MODE_4 = 4, ANIM_MODE_5 = 5, ANIM_MODE_6 = 6, ANIM_MODE_7 = 7, ANIM_MODE_8 = 8};
+		ANIM_MODE_4 = 4, ANIM_MODE_5 = 5, ANIM_MODE_6 = 6, ANIM_MODE_7 = 7, ANIM_MODE_8 = 8,
+		// Introduced in Blue Force
+		ANIM_MODE_9 = 9
+};
 
 class SceneObject;
 
@@ -468,6 +471,7 @@ public:
 	virtual ~SceneObjectWrapper() {}
 
 	void setSceneObject(SceneObject *so);
+	void check();
 
 	virtual void synchronize(Serializer &s);
 	virtual Common::String getClassName() { return "SceneObjectWrapper"; }
@@ -556,6 +560,10 @@ public:
 	virtual void draw();
 	virtual void proc19() {}
 	virtual void updateScreen();
+	// New methods introduced by Blue FOrce
+	virtual void updateAngle(SceneObject *sceneObj);
+	virtual void changeAngle(int angle);
+
 	void setup(int visage, int stripFrameNum, int frameNum, int posX, int posY, int priority);
 };
 


Commit: 81ba9b2ebccffa0677ff1526f6ef1b017f61f61b
    https://github.com/scummvm/scummvm/commit/81ba9b2ebccffa0677ff1526f6ef1b017f61f61b
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2011-08-13T19:25:55-07:00

Commit Message:
TSAGE: Further changes to Blue Force scenes, and started implementing scene 109

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



diff --git a/engines/tsage/blue_force/blueforce_logic.cpp b/engines/tsage/blue_force/blueforce_logic.cpp
index 87e1597..5f635da 100644
--- a/engines/tsage/blue_force/blueforce_logic.cpp
+++ b/engines/tsage/blue_force/blueforce_logic.cpp
@@ -31,7 +31,7 @@ namespace tSage {
 
 void BlueForceGame::start() {
 	// Start the game
-	_globals->_sceneManager.changeScene(20);
+	_globals->_sceneManager.changeScene(109);
 
 	_globals->_events.setCursor(CURSOR_WALK);
 }
@@ -50,6 +50,8 @@ Scene *BlueForceGame::createScene(int sceneNumber) {
 		// Tsnunami Title Screen #2
 		return new BF_Scene100();
 	case 109:
+		// Introduction Bar Room
+		return new BF_Scene109();
 	case 110:
 	case 114:
 	case 115:
@@ -125,4 +127,124 @@ Scene *BlueForceGame::createScene(int sceneNumber) {
 	}
 }
 
+/*--------------------------------------------------------------------------*/
+
+ObjArray::ObjArray(): EventHandler() {
+	_inUse = false;
+	clear();
+}
+
+void ObjArray::clear() {
+	for (int i = 0; i < OBJ_ARRAY_SIZE; ++i)
+		_objList[i] = NULL;
+}
+
+void ObjArray::synchronize(Serializer &s) {
+	EventHandler::synchronize(s);
+	for (int i = 0; i < OBJ_ARRAY_SIZE; ++i)
+		SYNC_POINTER(_objList[i]);	
+}
+
+void ObjArray::process(Event &event) {
+	if (_inUse)
+		error("Array error");
+	_inUse = true;
+
+	for (int i = 0; i < OBJ_ARRAY_SIZE; ++i) {
+		if (_objList[i])
+			_objList[i]->process(event);
+	}
+
+	_inUse = false;
+}
+
+void ObjArray::dispatch() {
+	if (_inUse)
+		error("Array error");
+	_inUse = true;
+
+	for (int i = 0; i < OBJ_ARRAY_SIZE; ++i) {
+		if (_objList[i])
+			_objList[i]->dispatch();
+	}
+
+	_inUse = false;
+}
+
+/*--------------------------------------------------------------------------*/
+
+SceneExt::SceneExt(): Scene() {
+	warning("TODO: dword_503AA/dword_503AE/dword_53030");
+
+	_field372 = 0;
+	_field37C = NULL;
+}
+
+void SceneExt::postInit(SceneObjectList *OwnerList) {
+	Scene::postInit(OwnerList);
+	if (BF_GLOBALS._v4CEA2) {
+		// Blank out the bottom portion of the screen
+		BF_GLOBALS._v51C24 = BF_INTERFACE_Y;
+
+		Rect r(0, BF_INTERFACE_Y, SCREEN_WIDTH, SCREEN_HEIGHT);
+		BF_GLOBALS.gfxManager().getSurface().fillRect(r, 0);
+	}
+}
+
+void SceneExt::process(Event &event) {
+	_objArray2.process(event);
+	if (!event.handled)
+		Scene::process(event);
+}
+
+void SceneExt::dispatch() {
+	_objArray1.dispatch();
+
+	if (_field37A) {
+		if ((--_field37A == 0) && BF_GLOBALS._v4CEA2) {
+			if (BF_GLOBALS._v4E238 && (BF_GLOBALS._v4CF9E == 1)) {
+				warning("sub_1B052");
+			}
+			
+			_field37A = 0;
+		}
+	}
+
+	Scene::dispatch();
+}
+
+void SceneExt::loadScene(int sceneNum) {
+	Scene::loadScene(sceneNum);
+	warning("TODO: word_51C38/word_51C3C");
+}
+
+/*--------------------------------------------------------------------------*/
+
+GameScene::GameScene() {
+
+}
+
+void GameScene::postInit(SceneObjectList *OwnerList) {
+	_field794 = 0;
+	_field412 = 1;
+	SceneExt::postInit(OwnerList);
+}
+
+void GameScene::remove() {
+	SceneExt::remove();
+	if (_field794 == 1) {
+		for (SynchronizedList<SceneObject *>::iterator i = BF_GLOBALS._sceneObjects->begin();
+				i != BF_GLOBALS._sceneObjects->end(); ++i)
+			(*i)->remove();
+		
+		BF_GLOBALS._sceneObjects->draw();
+		BF_GLOBALS._scenePalette.loadPalette(2);
+		BF_GLOBALS._v51C44 = 1;
+		BF_GLOBALS._v51C42 = 1;
+	}
+
+	BF_GLOBALS._scenePalette._field412 = 1;
+}
+
+
 } // End of namespace tSage
diff --git a/engines/tsage/blue_force/blueforce_logic.h b/engines/tsage/blue_force/blueforce_logic.h
index 9237e50..6cfbe91 100644
--- a/engines/tsage/blue_force/blueforce_logic.h
+++ b/engines/tsage/blue_force/blueforce_logic.h
@@ -29,6 +29,8 @@
 #include "tsage/scenes.h"
 #include "tsage/globals.h"
 
+#define BF_INTERFACE_Y 168
+
 namespace tSage {
 
 class BlueForceGame: public Game {
@@ -37,6 +39,54 @@ public:
 	virtual Scene *createScene(int sceneNumber);
 };
 
+#define OBJ_ARRAY_SIZE 10
+class ObjArray: public EventHandler {
+public:
+	EventHandler *_objList[OBJ_ARRAY_SIZE];
+	bool _inUse;
+public:
+	ObjArray();
+	void clear();
+
+	virtual Common::String getClassName() { return "ObjArray"; }
+	virtual void synchronize(Serializer &s);
+	virtual void process(Event &event);
+	virtual void dispatch();
+};
+
+class SceneExt: public Scene {
+public:
+	ObjArray _objArray1, _objArray2;
+	int _field372;
+	int _field37A;
+	EventHandler *_field37C;
+public:
+	SceneExt();
+
+	virtual Common::String getClassName() { return "SceneExt"; }
+	virtual void postInit(SceneObjectList *OwnerList = NULL);
+	virtual void process(Event &event);
+	virtual void dispatch();
+	virtual void loadScene(int sceneNum);
+	virtual void proc13() { warning("TODO: SceneExt::proc13"); }
+};
+
+class GameScene: public SceneExt {
+public:
+	int _field412;
+	int _field794;
+public:
+	GameScene();
+
+	virtual void postInit(SceneObjectList *OwnerList = NULL);
+	virtual void remove();
+};
+
+class BlueAnimatedSpeaker: public Speaker {
+public:
+};
+
+
 } // End of namespace tSage
 
 #endif
diff --git a/engines/tsage/blue_force/blueforce_scenes0.cpp b/engines/tsage/blue_force/blueforce_scenes0.cpp
index 3eaa2bf..5f271d4 100644
--- a/engines/tsage/blue_force/blueforce_scenes0.cpp
+++ b/engines/tsage/blue_force/blueforce_scenes0.cpp
@@ -33,7 +33,7 @@ namespace tSage {
  *--------------------------------------------------------------------------*/
 
 void BF_Scene20::Action1::signal() {
-	BF_Scene20 *scene = (BF_Scene20 *)_globals->_sceneManager._scene;
+	BF_Scene20 *scene = (BF_Scene20 *)BF_GLOBALS._sceneManager._scene;
 	static byte black[3] = { 0, 0, 0 };
 
 	switch (_actionIndex++) {
@@ -42,7 +42,7 @@ void BF_Scene20::Action1::signal() {
 		break;
 	case 1:
 		_sound.play(1);
-		_globals->_scenePalette.addRotation(64, 127, -1, 1, this);
+		BF_GLOBALS._scenePalette.addRotation(64, 127, -1, 1, this);
 		break;
 	case 2:
 		scene->_object1.setVisage(22);
@@ -88,7 +88,7 @@ void BF_Scene20::Action1::signal() {
 		setDelay(1);
 		break;
 	case 3:
-		_globals->_scenePalette.addFader(scene->_scenePalette._palette, 256, 8, this);
+		BF_GLOBALS._scenePalette.addFader(scene->_scenePalette._palette, 256, 8, this);
 		break;
 	case 4:
 		setDelay(60);
@@ -105,10 +105,10 @@ void BF_Scene20::Action1::signal() {
 		setDelay(120);
 		break;
 	case 7:
-		_globals->_scenePalette.addFader(black, 1, 5, this);
+		BF_GLOBALS._scenePalette.addFader(black, 1, 5, this);
 		break;
 	case 8:
-		_globals->_sceneManager.changeScene(100);
+		BF_GLOBALS._sceneManager.changeScene(100);
 		remove();
 		break;
 	}
@@ -121,8 +121,6 @@ void BF_Scene20::postInit(SceneObjectList *OwnerList) {
 	Scene::postInit();
 	setZoomPercents(60, 85, 200, 100);
 
-	preloadVisage(21);
-	preloadVisage(22);
 	_scenePalette.loadPalette(1);
 	_scenePalette.loadPalette(22);
 
diff --git a/engines/tsage/blue_force/blueforce_scenes0.h b/engines/tsage/blue_force/blueforce_scenes0.h
index c176a17..182a45f 100644
--- a/engines/tsage/blue_force/blueforce_scenes0.h
+++ b/engines/tsage/blue_force/blueforce_scenes0.h
@@ -34,7 +34,7 @@
 
 namespace tSage {
 
-class BF_Scene20 : public Scene {
+class BF_Scene20 : public SceneExt {
 	/* Actions */
 	class Action1 : public Action {
 	private:
diff --git a/engines/tsage/blue_force/blueforce_scenes1.cpp b/engines/tsage/blue_force/blueforce_scenes1.cpp
index 0f0ab6c..8e744a4 100644
--- a/engines/tsage/blue_force/blueforce_scenes1.cpp
+++ b/engines/tsage/blue_force/blueforce_scenes1.cpp
@@ -192,4 +192,221 @@ void BF_Scene100::signal() {
 	}
 }
 
+/*--------------------------------------------------------------------------
+ * Scene 109 - Introduction Bar Room
+ *
+ *--------------------------------------------------------------------------*/
+
+void BF_Scene109::Action1::signal() {
+	BF_Scene109 *scene = (BF_Scene109 *)BF_GLOBALS._sceneManager._scene;
+
+	switch (_actionIndex++) {
+	case 0:
+		setDelay(30);
+		break;
+	case 1:
+		BF_GLOBALS._sound1.play(12);
+		BF_GLOBALS._sceneObjects->draw();
+		BF_GLOBALS._scenePalette.loadPalette(2);
+		BF_GLOBALS._scenePalette.refresh();
+		setDelay(10);
+		break;
+	case 2:
+		scene->_text.setup(BF_19840515, this);
+		break;
+	case 3:
+		BF_GLOBALS._v51C44 = 1;
+		scene->loadScene(115);
+
+		scene->_protaginist2.show();
+		scene->_protaginist2.setPriority(133);
+		scene->_protaginist1.show();
+		scene->_bartender.show();
+		scene->_object1.show();
+		scene->_object6.show();
+		scene->_object6.setAction(&scene->_action3);
+		scene->_object2.show();
+		scene->_object9.show();
+		scene->_object9.setAction(&scene->_action2);
+
+		BF_GLOBALS._v501FC = 170;
+		setDelay(60);
+		break;
+	case 4:
+		scene->_bartender.setAction(&scene->_sequenceManager4, NULL, 109, &scene->_bartender, &scene->_object2, NULL);
+		scene->_protaginist1.setAction(&scene->_sequenceManager5, NULL, 107, &scene->_protaginist1, NULL);
+		scene->_protaginist2.setAction(&scene->_sequenceManager6, this, 106, &scene->_protaginist2, NULL);
+		break;
+	case 5:
+		scene->setAction(&scene->_sequenceManager6, this, 105, &scene->_object10, NULL);
+		break;
+	case 6:
+		scene->_object10.remove();
+		scene->setAction(&scene->_sequenceManager6, this, 100, &scene->_object10, NULL);
+		break;
+	case 7:
+		scene->_object7.setAction(&scene->_sequenceManager7, NULL, 103, &scene->_object7, NULL);
+		scene->_object5.setAction(&scene->_sequenceManager8, this, 102, &scene->_object5, NULL);
+		scene->_protaginist2.setAction(&scene->_sequenceManager6, NULL, 104, &scene->_protaginist2, &scene->_bartender, NULL);
+		break;
+	case 8:
+		scene->setAction(&scene->_sequenceManager8, this, 101, &scene->_object5, &scene->_protaginist1, NULL);
+		break;
+	case 9:
+		scene->_protaginist1.setAction(&scene->_sequenceManager5, this, 98, &scene->_protaginist1, NULL);
+		scene->_object7.setAction(&scene->_sequenceManager7, NULL, 99, &scene->_object7, NULL);
+		break;
+	case 10:
+		scene->_sceneMode = 1;
+		remove();
+		break;
+	}
+}
+
+void BF_Scene109::Action2::signal() {
+	BF_Scene109 *scene = (BF_Scene109 *)BF_GLOBALS._sceneManager._scene;
+	scene->setAction(&scene->_sequenceManager2, this, 3117, &scene->_object9, NULL);
+}
+
+void BF_Scene109::Action3::signal() {
+	BF_Scene109 *scene = (BF_Scene109 *)BF_GLOBALS._sceneManager._scene;
+	scene->setAction(&scene->_sequenceManager3, this, 108, &scene->_object6, NULL);
+}
+
+/*--------------------------------------------------------------------------*/
+
+BF_Scene109::Text::Text(): SceneText() {
+	_action = NULL;
+	_frameNumber = 0;
+	_diff = 0;
+}
+
+void BF_Scene109::Text::setup(const Common::String &msg, Action *action) {
+	_frameNumber = BF_GLOBALS._events.getFrameNumber();
+	_diff = 180;
+	_action = action;
+	_fontNumber = 4;
+	_width = 300;
+	_textMode = ALIGN_CENTER;
+	_color1 = BF_GLOBALS._scenePalette._colors.background;
+	_color2 = _color3 = 0;
+
+	SceneText::setup(msg);
+
+	// Center the text on-screen
+	reposition();
+	_bounds.center(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2);
+
+	// Set the new position
+	_position.x = _bounds.left;
+	_position.y = _bounds.top;
+}
+
+void BF_Scene109::Text::synchronize(Serializer &s) {
+	SceneText::synchronize(s);
+	SYNC_POINTER(_action);
+	s.syncAsUint32LE(_frameNumber);
+	s.syncAsSint16LE(_diff);
+}
+
+void BF_Scene109::Text::dispatch() {
+	if (_diff) {
+		uint32 frameNumber = BF_GLOBALS._events.getFrameNumber();
+		if (_frameNumber < frameNumber) {
+			_diff -= frameNumber - _frameNumber;
+			_frameNumber = frameNumber;
+
+			if (_diff <= 0) {
+				// Time has expired, so remove the text and signal the designated action
+				remove();
+				if (_action)
+					_action->signal();
+			}
+		}
+	}
+}
+
+/*--------------------------------------------------------------------------*/
+
+BF_Scene109::BF_Scene109(): GameScene() {
+}
+
+void BF_Scene109::postInit(SceneObjectList *OwnerList) {
+	GameScene::postInit(OwnerList);
+	loadScene(999);
+
+	_protaginist2.postInit();
+	_protaginist2.setVisage(119);
+	_protaginist2.setFrame(11);
+	_protaginist2.setFrame2(133);
+	_protaginist2.setPosition(Common::Point(165, 124));
+	_protaginist2.hide();
+
+	_protaginist1.postInit();
+	_protaginist1.setVisage(118);
+	_protaginist1.setStrip(1);
+	_protaginist1.setFrame(8);
+	_protaginist1.setFrame2(132);
+	_protaginist1.setPosition(Common::Point(143, 125));
+	_protaginist1.hide();
+
+	_bartender.postInit();
+	_bartender.setVisage(121);
+	_bartender.setStrip(2);
+	_bartender.setFrame(1);
+	_bartender.setPriority(-1);
+	_bartender.setPosition(Common::Point(92, 64));
+	_bartender.hide();
+
+	_object1.postInit();
+	_object1.setVisage(121);
+	_object1.setStrip(6);
+	_object1.setFrame(1);
+	_object1.setPriority(-1);
+	_object1.setPosition(Common::Point(110, 64));
+	_object1.hide();
+
+	_object6.postInit();
+	_object6.setVisage(120);
+	_object6.setStrip(2);
+	_object6.setFrame(5);
+	_object6.setPriority(-1);
+	_object6.setPosition(Common::Point(127, 97));
+	_object6.hide();
+
+	_object2.postInit();
+	_object2.setVisage(121);
+	_object2.setStrip(5);
+	_object2.setFrame(1);
+	_object2.setPriority(-1);
+	_object2.setPosition(Common::Point(104, 64));
+	_object2.hide();
+
+	_object9.postInit();
+	_object9.setVisage(115);
+	_object9.setStrip(4);
+	_object9.setFrame(1);
+	_object9.setPosition(Common::Point(262, 29));
+	_object9.hide();
+
+	_object5.postInit();
+	_object5.hide();
+
+	_object7.postInit();
+	_object7.hide();
+
+	_object10.postInit();
+	_object10.hide();
+
+	BF_GLOBALS._player.disableControl();
+	setAction(&_action1);
+}
+
+void BF_Scene109::signal() {
+	if (_sceneMode == 1) {
+		BF_GLOBALS._scenePalette.clearListeners();
+		BF_GLOBALS._sceneManager.changeScene(110);
+	}
+}
+
 } // End of namespace tSage
diff --git a/engines/tsage/blue_force/blueforce_scenes1.h b/engines/tsage/blue_force/blueforce_scenes1.h
index 16d327f..b3d16ab 100644
--- a/engines/tsage/blue_force/blueforce_scenes1.h
+++ b/engines/tsage/blue_force/blueforce_scenes1.h
@@ -52,7 +52,6 @@ class BF_Scene100: public Scene {
 	};
 	class Action2: public ActionExt {
 	public:
-		virtual Common::String getClassName() { return "BF100Action2"; }
 		virtual void signal();
 	};
 public:
@@ -68,6 +67,52 @@ public:
 	virtual void signal();
 };
 
+class BF_Scene109: public GameScene {
+	/* Actions */
+	class Action1: public Action {
+	public:
+		virtual void signal();
+	};
+	class Action2: public Action {
+	public:
+		virtual void signal();
+	};
+	class Action3: public Action {
+	public:
+		virtual void signal();
+	};
+
+	/* Texts */
+	class Text: public SceneText {
+	public:
+		Action *_action;
+		uint32 _frameNumber;
+		int _diff;
+	public:
+		Text();
+		void setup(const Common::String &msg, Action *action);
+
+		virtual Common::String getClassName() { return "BF109Text"; }
+		virtual void synchronize(Serializer &s);
+		virtual void dispatch();
+	};
+public:
+	SequenceManager _sequenceManager1, _sequenceManager2, _sequenceManager3;
+	SequenceManager _sequenceManager4, _sequenceManager5, _sequenceManager6;
+	SequenceManager _sequenceManager7, _sequenceManager8;
+	SceneObject _object1, _object2, _protaginist2, _protaginist1, _object5;
+	SceneObject _object6, _object7, _bartender, _object9, _object10;
+	Text _text;
+	BlueAnimatedSpeaker _speaker;
+	Action1 _action1;
+	Action _action2, _action3;
+public:
+	BF_Scene109();
+
+	virtual void postInit(SceneObjectList *OwnerList = NULL);
+	virtual void signal();
+};
+
 } // End of namespace tSage
 
 #endif






More information about the Scummvm-git-logs mailing list