[Scummvm-cvs-logs] scummvm master -> 3539c5e981b2a07eba18c5c58a9a9b8215b0c4c3

Strangerke Strangerke at scummvm.org
Thu Dec 29 00:17:26 CET 2011


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

Summary:
3539c5e981 TSAGE: R2R - Partial implementation of scene 3375.


Commit: 3539c5e981b2a07eba18c5c58a9a9b8215b0c4c3
    https://github.com/scummvm/scummvm/commit/3539c5e981b2a07eba18c5c58a9a9b8215b0c4c3
Author: Strangerke (strangerke at scummvm.org)
Date: 2011-12-28T15:16:58-08:00

Commit Message:
TSAGE: R2R - Partial implementation of scene 3375.

Changed paths:
    engines/tsage/globals.cpp
    engines/tsage/globals.h
    engines/tsage/ringworld2/ringworld2_logic.cpp
    engines/tsage/ringworld2/ringworld2_scenes3.cpp
    engines/tsage/ringworld2/ringworld2_scenes3.h
    engines/tsage/ringworld2/ringworld2_speakers.cpp
    engines/tsage/ringworld2/ringworld2_speakers.h



diff --git a/engines/tsage/globals.cpp b/engines/tsage/globals.cpp
index d30d585..2869b3b 100644
--- a/engines/tsage/globals.cpp
+++ b/engines/tsage/globals.cpp
@@ -387,6 +387,8 @@ void Ringworld2Globals::reset() {
 	_v565AE = 0;
 	for (int i = 0; i < 14; i++)
 		_v56605[i] = 0;
+	_v56A99 = 0;
+	_v56A9E = 0;
 	_v56AA0 = 0;
 	_v56AA1 = 0;
 	_v56AAB = 0;
@@ -424,6 +426,7 @@ void Ringworld2Globals::synchronize(Serializer &s) {
 
 	s.syncAsSint16LE(_v5657C);
 	s.syncAsSint16LE(_v565F5);
+	s.syncAsSint16LE(_v56A9E);
 	s.syncAsSint16LE(_v56AAB);
 	s.syncAsSint16LE(_v57C2C);
 	s.syncAsSint16LE(_v58CE2);
@@ -438,7 +441,7 @@ void Ringworld2Globals::synchronize(Serializer &s) {
 
 	for (i = 0; i < 14; ++i)
 		s.syncAsByte(_v56605[i]);
-
+	s.syncAsByte(_v56A99);
 	for (i = 0; i < 12; ++i)
 		s.syncAsByte(_stripManager_lookupList[i]);
 
diff --git a/engines/tsage/globals.h b/engines/tsage/globals.h
index 498659d..f50cb70 100644
--- a/engines/tsage/globals.h
+++ b/engines/tsage/globals.h
@@ -253,6 +253,8 @@ public:
 	int _v5657C;
 	byte _v565AE;
 	byte _v56605[14];
+	byte _v56A99;
+	int _v56A9E;
 	byte _v56AA0;
 	byte _v56AA1;
 	int _v56AAB;
diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp
index 1b6c375..0e38708 100644
--- a/engines/tsage/ringworld2/ringworld2_logic.cpp
+++ b/engines/tsage/ringworld2/ringworld2_logic.cpp
@@ -217,6 +217,7 @@ Scene *Ringworld2Game::createScene(int sceneNumber) {
 		// Cutscene - Ship landing
 		return new Scene3350();
 	case 3375:
+		return new Scene3375();
 	case 3385:
 	case 3395:
 		error("Missing scene %d from group 3", sceneNumber);
diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp
index a42bbcb..8c08299 100644
--- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp
+++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp
@@ -1699,6 +1699,416 @@ void Scene3350::signal() {
 }
 
 /*--------------------------------------------------------------------------
+ * Scene 3375 - 
+ *
+ *--------------------------------------------------------------------------*/
+Scene3375::Scene3375() {
+	_field1488 = _field1492 = 0;
+	for (int i = 0; i < 4; ++i)
+		_field148A[i] = 0;
+}
+
+void Scene3375::synchronize(Serializer &s) {
+	SceneExt::synchronize(s);
+
+	s.syncAsSint16LE(_field1488);
+	s.syncAsSint16LE(_field1492);
+	for (int i = 0; i < 4; ++i)
+		s.syncAsSint16LE(_field148A[i]);
+}
+
+bool Scene3375::Actor1::startAction(CursorType action, Event &event) {
+	Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene;
+
+	if (action != CURSOR_TALK)
+		return SceneActor::startAction(action, event);
+	
+	scene->_sceneMode = 9999;
+	if (R2_GLOBALS._player._characterIndex == 2)
+		scene->_stripManager.start(3302, scene);
+	else
+		scene->_stripManager.start(3304, scene);
+	
+	return true;
+}
+
+bool Scene3375::Actor2::startAction(CursorType action, Event &event) {
+	Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene;
+
+	if (action != CURSOR_TALK)
+		return SceneActor::startAction(action, event);
+	
+	scene->_sceneMode = 9999;
+	if (R2_GLOBALS._player._characterIndex == 3)
+		scene->_stripManager.start(3302, scene);
+	else
+		scene->_stripManager.start(3301, scene);
+	
+	return true;
+}
+
+bool Scene3375::Actor3::startAction(CursorType action, Event &event) {
+	Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene;
+
+	if (action != CURSOR_TALK)
+		return SceneActor::startAction(action, event);
+	
+	scene->_sceneMode = 9999;
+	scene->_stripManager.start(3303, scene);
+	
+	return true;
+}
+
+bool Scene3375::Actor4::startAction(CursorType action, Event &event) {
+	Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene;
+
+	if (action != CURSOR_USE)
+		return SceneActor::startAction(action, event);
+	
+	if (R2_GLOBALS._v56A9E != 0) {
+		R2_GLOBALS._walkRegions.disableRegion(2);
+		R2_GLOBALS._walkRegions.disableRegion(3);
+	} else {
+		R2_GLOBALS._walkRegions.disableRegion(1);
+		R2_GLOBALS._walkRegions.disableRegion(3);
+		R2_GLOBALS._walkRegions.disableRegion(4);
+	}
+	R2_GLOBALS._walkRegions.disableRegion(6);
+	R2_GLOBALS._walkRegions.disableRegion(7);
+	R2_GLOBALS._walkRegions.disableRegion(8);
+
+	R2_GLOBALS._player.disableControl(CURSOR_ARROW);
+	
+	scene->_sceneMode = 3375;
+	scene->setAction(&scene->_sequenceManager, scene, 3375, &R2_GLOBALS._player, &scene->_actor1, &scene->_actor2, &scene->_actor3, &scene->_actor4, NULL);
+	
+	return true;
+}
+
+void Scene3375::Exit1::changeScene() {
+	Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene;
+
+	_moving = false;
+	R2_GLOBALS._player.disableControl(CURSOR_ARROW);
+	scene->_sceneMode = 3376;
+	if (R2_GLOBALS._v56A9E != 0) {
+		R2_GLOBALS._walkRegions.disableRegion(2);
+		R2_GLOBALS._walkRegions.disableRegion(3);
+	} else {
+		R2_GLOBALS._walkRegions.disableRegion(1);
+		R2_GLOBALS._walkRegions.disableRegion(3);
+		R2_GLOBALS._walkRegions.disableRegion(4);
+	}
+	if (scene->_actor1._position.y != 163) {
+		R2_GLOBALS._player.setStrip(-1);
+		scene->_actor1.setStrip2(-1);
+		scene->_actor2.setStrip2(-1);
+		scene->_actor3.setStrip2(-1);
+		scene->setAction(&scene->_sequenceManager, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_actor1, &scene->_actor2, &scene->_actor3, NULL);
+	} else {
+		R2_GLOBALS._player.setStrip2(2);
+		scene->_actor1.setStrip2(2);
+		scene->_actor2.setStrip2(2);
+		scene->_actor3.setStrip2(2);
+		R2_GLOBALS._sound2.play(314);
+
+		Common::Point pt(50, 150);
+		NpcMover *mover = new NpcMover();
+		R2_GLOBALS._player.addMover(mover, &pt, scene);
+	}
+}
+
+void Scene3375::Exit2::changeScene() {
+	Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene;
+
+	_moving = false;
+	R2_GLOBALS._player._effect = 6;
+	R2_GLOBALS._player._shade = 4;
+	R2_GLOBALS._player.disableControl(CURSOR_ARROW);
+
+	scene->_sceneMode = 3377;
+	scene->_field1488 = 3381;
+
+	if (R2_GLOBALS._v56A9E != 0) {
+		R2_GLOBALS._walkRegions.disableRegion(2);
+		R2_GLOBALS._walkRegions.disableRegion(3);
+	} else {
+		R2_GLOBALS._walkRegions.disableRegion(1);
+		R2_GLOBALS._walkRegions.disableRegion(3);
+		R2_GLOBALS._walkRegions.disableRegion(4);
+	}
+	scene->setAction(&scene->_sequenceManager, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_actor1, &scene->_actor2, &scene->_actor3, NULL);
+}
+
+void Scene3375::Exit3::changeScene() {
+	Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene;
+
+	_moving = false;
+	R2_GLOBALS._player._effect = 6;
+	R2_GLOBALS._player._shade = 4;
+	R2_GLOBALS._player.disableControl(CURSOR_ARROW);
+
+	scene->_sceneMode = 3378;
+	scene->_field1488 = 3380;
+
+	if (R2_GLOBALS._v56A9E != 0) {
+		R2_GLOBALS._walkRegions.disableRegion(2);
+		R2_GLOBALS._walkRegions.disableRegion(3);
+	} else {
+		R2_GLOBALS._walkRegions.disableRegion(1);
+		R2_GLOBALS._walkRegions.disableRegion(3);
+		R2_GLOBALS._walkRegions.disableRegion(4);
+	}
+	scene->setAction(&scene->_sequenceManager, scene, scene->_sceneMode, &R2_GLOBALS._player, &scene->_actor1, &scene->_actor2, &scene->_actor3, NULL);
+}
+
+void Scene3375::postInit(SceneObjectList *OwnerList) {
+	_field148A[0] = 3376;
+	_field148A[1] = 3377;
+	_field148A[2] = 3375;
+	_field148A[3] = 3378;
+	
+	loadScene(_field148A[R2_GLOBALS._v56A9E]);
+	SceneExt::postInit();
+	
+	R2_GLOBALS._sound1.play(313);
+
+	_stripManager.setColors(60, 255);
+	_stripManager.setFontNumber(3);
+	_stripManager.addSpeaker(&_quinnSpeaker);
+	_stripManager.addSpeaker(&_seekerSpeaker);
+	_stripManager.addSpeaker(&_mirandaSpeaker);
+	_stripManager.addSpeaker(&_webbsterSpeaker);
+
+	R2_GLOBALS._player._characterScene[1] = 3375;
+	R2_GLOBALS._player._characterScene[2] = 3375;
+	R2_GLOBALS._player._characterScene[3] = 3375;
+
+	setZoomPercents(55, 126, 167, 200);
+	R2_GLOBALS._player.postInit();
+	
+	if (R2_GLOBALS._player._characterIndex == 2) {
+		R2_GLOBALS._player._moveDiff = Common::Point(5, 3);
+	} else {
+		R2_GLOBALS._player._moveDiff = Common::Point(3, 2);
+	}
+	R2_GLOBALS._player.changeZoom(-1);
+	
+	switch (R2_GLOBALS._player._characterIndex) {
+	case 2:
+		if (R2_GLOBALS._sceneManager._previousScene == 3385)
+			R2_GLOBALS._player.setup(20, 1, 1);
+		else
+			R2_GLOBALS._player.setup(20, 3, 1);
+		break;
+	case 3:
+		if (R2_GLOBALS._sceneManager._previousScene == 3385)
+			R2_GLOBALS._player.setup(30, 1, 1);
+		else
+			R2_GLOBALS._player.setup(30, 3, 1);
+		break;
+	default:
+		if (R2_GLOBALS._sceneManager._previousScene == 3385)
+			R2_GLOBALS._player.setup(10, 1, 1);
+		else
+			R2_GLOBALS._player.setup(10, 3, 1);
+		break;
+	}
+	
+	R2_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+	R2_GLOBALS._player.disableControl();
+
+	_actor1.postInit();
+	if (R2_GLOBALS._player._characterIndex == 2) {
+		_actor1._moveRate = 10;
+		_actor1._moveDiff = Common::Point(3, 2);
+	} else {
+		_actor1._moveRate = 7;
+		_actor1._moveDiff = Common::Point(5, 3);
+	}
+	_actor1.changeZoom(-1);
+	_actor1._effect = 1;
+	
+	int tmpStrip, tmpVisage;
+	if (R2_GLOBALS._sceneManager._previousScene == 3385)
+		tmpStrip = 1;
+	else
+		tmpStrip = 4;
+	
+	if (R2_GLOBALS._player._characterIndex == 2)
+		tmpVisage = 10;
+	else
+		tmpVisage = 20;
+	
+	_actor1.setup(tmpVisage, tmpStrip, 1);
+	_actor1.animate(ANIM_MODE_1, NULL);
+	
+	_actor2.postInit();
+	_actor2._moveDiff = Common::Point(3, 2);
+	_actor2.changeZoom(-1);
+	_actor2._effect = 1;
+	if (R2_GLOBALS._sceneManager._previousScene == 3385)
+		tmpStrip = 1;
+	else
+		tmpStrip = 8;
+
+	if (R2_GLOBALS._player._characterIndex == 3)
+		tmpVisage = 10;
+	else
+		tmpVisage = 30;
+	
+	_actor2.setup(tmpVisage, tmpStrip, 1);
+	_actor2.animate(ANIM_MODE_1, NULL);
+	
+	_actor3.postInit();
+	_actor3._moveRate = 7;
+	_actor3._moveDiff = Common::Point(5, 3);
+	_actor3.changeZoom(-1);
+	_actor3._effect = 1;
+	if (R2_GLOBALS._sceneManager._previousScene == 3385)
+		tmpStrip = 1;
+	else
+		tmpStrip = 4;
+
+	_actor3.setup(40, tmpStrip, 1);
+	_actor3.animate(ANIM_MODE_1, NULL);
+	
+	_actor2.setDetails(3375, -1, -1, -1, 1, NULL);
+	_actor3.setDetails(3375, 21, -1, -1, 1, NULL);
+	_actor1.setDetails(3375, -1, -1, -1, 1, NULL);
+	
+	_actor4.postInit();
+	_actor4.setup(3375, 1, 1);
+	_actor4.setPosition(Common::Point(254, 166));
+	_actor4.fixPriority(140);
+	_actor4.hide();
+	
+	_exit1.setDetails(Rect(0, 84, 24, 167), EXITCURSOR_W, 3375);
+	_exit1.setDest(Common::Point(65, 155));
+	_exit2.setDetails(Rect(103, 152, 183, 170), SHADECURSOR_DOWN, 3375);
+	_exit2.setDest(Common::Point(158, 151));
+	_exit3.setDetails(Rect(180, 75, 213, 132), EXITCURSOR_E, 3375);
+	_exit3.setDest(Common::Point(201, 131));
+		
+	for (int i = 0; i <= 12; ++i)
+		_itemArray[i].setDetails(i, 3375, 3, -1, -1);
+	
+	_item1.setDetails(Rect(0, 0, 320, 200), 3375, 0, -1, 1, 1, NULL);
+
+	if (R2_GLOBALS._sceneManager._previousScene == 3385)
+		_sceneMode = 3379;
+	else
+		_sceneMode = 0;
+	
+	warning("sub_FC696(_sceneMode)");
+}
+
+void Scene3375::remove() {
+	R2_GLOBALS._sound1.fadeOut2(NULL);
+	SceneExt::remove();
+}
+
+void Scene3375::signalCase3379() {
+	switch (R2_GLOBALS._v56A9E) {
+	case 0:
+		_exit1._enabled = true;
+		if (R2_GLOBALS._sceneManager._previousScene == 3385)
+			R2_GLOBALS._walkRegions.enableRegion(1);
+		else {
+			R2_GLOBALS._walkRegions.enableRegion(3);
+			R2_GLOBALS._walkRegions.enableRegion(4);
+		}
+		R2_GLOBALS._walkRegions.enableRegion(6);
+		R2_GLOBALS._walkRegions.enableRegion(7);
+	case 2:
+		_exit1._enabled = false;
+		R2_GLOBALS._walkRegions.enableRegion(2);
+		R2_GLOBALS._walkRegions.enableRegion(3);
+		R2_GLOBALS._walkRegions.enableRegion(5);
+		R2_GLOBALS._walkRegions.enableRegion(6);
+		R2_GLOBALS._walkRegions.enableRegion(7);
+		R2_GLOBALS._walkRegions.enableRegion(8);
+		R2_GLOBALS._walkRegions.enableRegion(9);
+	default:
+		_exit1._enabled = false;
+		R2_GLOBALS._walkRegions.enableRegion(2);
+		R2_GLOBALS._walkRegions.enableRegion(3);
+		R2_GLOBALS._walkRegions.enableRegion(5);
+		R2_GLOBALS._walkRegions.enableRegion(6);
+		break;
+	}
+	R2_GLOBALS._sceneManager._previousScene = 3375;
+	R2_GLOBALS._player._effect = 1;
+	_actor1._effect = 1;
+	_actor2._effect = 1;
+	_actor3._effect = 1;
+	R2_GLOBALS._player.enableControl(CURSOR_ARROW);
+}
+
+void Scene3375::signal() {
+	switch (_sceneMode) {
+	case 3375:
+		R2_GLOBALS._sceneManager.changeScene(3400);
+		break;
+	case 3376:
+		R2_GLOBALS._sceneManager.changeScene(3385);
+		break;
+	case 3377:
+		// No break on purpose
+	case 3378:
+		_sceneMode = _field1488;
+		_field1488 = 0;
+		_actor1._effect = 6;
+		_actor1._shade = 4;
+		_actor2._effect = 6;
+		_actor2._shade = 4;
+		_actor3._effect = 6;
+		_actor3._shade = 4;
+		warning("sub_FC696(_sceneMode)");
+		break;
+	case 3379:
+		signalCase3379();
+		break;
+	case 9999:
+		if (_actor1._position.y == 163)
+			R2_GLOBALS._player.setStrip(1);
+		else
+			R2_GLOBALS._player.setStrip(3);
+		R2_GLOBALS._player.enableControl(CURSOR_TALK);
+	default:
+		_actor1.setPriority(130);
+		_actor2.setPriority(132);
+		_actor3.setPriority(134);
+		signalCase3379();
+		break;
+	}
+}
+
+void Scene3375::dispatch() {
+	if ((R2_GLOBALS._player._position.y >= 168) && (R2_GLOBALS._player._effect == 1))
+		R2_GLOBALS._player._effect = 6;
+	else if ((R2_GLOBALS._player._position.y < 168) && (R2_GLOBALS._player._effect == 6))
+		R2_GLOBALS._player._effect = 1;
+
+	if ((_actor1._position.y >= 168) && (_actor1._effect == 1))
+		_actor1._effect = 6;
+	else if ((_actor1._position.y < 168) && (_actor1._effect == 6))
+		_actor1._effect = 1;
+
+	if ((_actor2._position.y >= 168) && (_actor2._effect == 1))
+		_actor2._effect = 6;
+	else if ((_actor2._position.y < 168) && (_actor2._effect == 6))
+		_actor2._effect = 1;
+
+	if ((_actor3._position.y >= 168) && (_actor3._effect == 1))
+		_actor3._effect = 6;
+	else if ((_actor3._position.y < 168) && (_actor3._effect == 6))
+		_actor3._effect = 1;
+
+	Scene::dispatch();
+}
+
+/*--------------------------------------------------------------------------
  * Scene 3400 - 
  *
  *--------------------------------------------------------------------------*/
diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.h b/engines/tsage/ringworld2/ringworld2_scenes3.h
index f83417e..3935a65 100644
--- a/engines/tsage/ringworld2/ringworld2_scenes3.h
+++ b/engines/tsage/ringworld2/ringworld2_scenes3.h
@@ -400,6 +400,61 @@ public:
 	virtual void signal();
 };
 
+class Scene3375 : public SceneExt {
+	class Actor1 : public SceneActor {
+		virtual bool startAction(CursorType action, Event &event);
+	};
+	class Actor2 : public SceneActor {
+		virtual bool startAction(CursorType action, Event &event);
+	};
+	class Actor3 : public SceneActor {
+		virtual bool startAction(CursorType action, Event &event);
+	};
+	class Actor4 : public SceneActor {
+		virtual bool startAction(CursorType action, Event &event);
+	};
+
+	class Exit1 : public SceneExit {
+	public:
+		virtual void changeScene();
+	};
+	class Exit2 : public SceneExit {
+	public:
+		virtual void changeScene();
+	};
+	class Exit3 : public SceneExit {
+	public:
+		virtual void changeScene();
+	};
+
+	void signalCase3379();
+public:
+	SpeakerQuinn3375 _quinnSpeaker;
+	SpeakerSeeker3375 _seekerSpeaker;
+	SpeakerMiranda3375 _mirandaSpeaker;
+	SpeakerWebbster3375 _webbsterSpeaker;
+	NamedHotspot _item1;
+	NamedHotspot _itemArray[13];
+	Actor1 _actor1;
+	Actor2 _actor2;
+	Actor3 _actor3;
+	Actor4 _actor4;
+	Exit1 _exit1;
+	Exit2 _exit2;
+	Exit3 _exit3;
+	SequenceManager _sequenceManager;
+	int _field1488;
+	int _field148A[4];
+	int _field1492;
+
+	Scene3375();
+	virtual void postInit(SceneObjectList *OwnerList = NULL);
+	virtual void remove();
+	virtual void signal();
+	virtual void Scene3375::dispatch();
+	virtual void Scene3375::synchronize(Serializer &s);
+};
+
 class Scene3400 : public SceneExt {
 public:
 	SpeakerQuinn3400 _quinnSpeaker;
diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp
index 25ad156..a07b689 100644
--- a/engines/tsage/ringworld2/ringworld2_speakers.cpp
+++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp
@@ -1602,6 +1602,249 @@ void SpeakerMiranda3255::proc15() {
 	}
 }
 
+SpeakerQuinn3375::SpeakerQuinn3375() {
+	_speakerName = "QUINN";
+	_color1 = 60;
+	_color2 = 0;
+	_fieldF6 = 0;
+	_textWidth = 300;
+	_hideObjects = false;
+	_object2 = NULL;
+	_displayMode = 1;
+	_numFrames = 0;
+}
+
+void SpeakerQuinn3375::proc15() {
+	Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene;
+
+	int v = _fieldF6;
+
+	if (!_object2) {
+		if (R2_GLOBALS._player._characterIndex == 1) 
+			_object2 = &R2_GLOBALS._player;
+		else if (R2_GLOBALS._player._characterIndex == 2) 
+			_object2 = &scene->_actor1;
+		else
+			_object2 = &scene->_actor2;
+
+		_object2->hide();
+		_object1.postInit();
+		_object1.setPosition(_object2->_position);
+		_object1._numFrames = 7;
+		_object1._effect = 1;
+		_object1.changeZoom(-1);
+		
+		if (scene->_actor1._position.y != 163)
+			R2_GLOBALS._player.setStrip(8);
+		else
+			R2_GLOBALS._player.setStrip(2);
+
+		if (R2_GLOBALS._player._mover)
+			R2_GLOBALS._player.addMover(NULL);
+
+		R2_GLOBALS._player.disableControl(CURSOR_TALK);
+		R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
+
+		if (_object2->_mover)
+			_object2->addMover(NULL);
+	}
+	
+
+	switch (v) {
+	case 0:
+		_object1.animate(ANIM_MODE_2, NULL);
+		break;
+	case 1:
+		((SceneItem *)_action)->_sceneRegionId = 0;
+		_object1.setup(4010, 5, 1);
+		_object1.animate(ANIM_MODE_5, NULL);
+		break;
+	default:
+		signal();
+		break;
+	}
+}
+
+SpeakerSeeker3375::SpeakerSeeker3375() {
+	_speakerName = "SEEKER";
+	_color1 = 35;
+	_color2 = 0;
+	_fieldF6 = 0;
+	_textWidth = 300;
+	_hideObjects = false;
+	_object2 = NULL;
+	_displayMode = 1;
+	_numFrames = 0;
+}
+
+void SpeakerSeeker3375::proc15() {
+	Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene;
+
+	int v = _fieldF6;
+
+	if (!_object2) {
+		if (R2_GLOBALS._player._characterIndex == 2) 
+			_object2 = &R2_GLOBALS._player;
+		else
+			_object2 = &scene->_actor1;
+
+		_object2->hide();
+		_object1.postInit();
+		_object1.setPosition(_object2->_position);
+		_object1._numFrames = 7;
+		_object1._effect = 1;
+		_object1.changeZoom(-1);
+		
+		if (scene->_actor1._position.y != 163)
+			R2_GLOBALS._player.setStrip(8);
+		else
+			R2_GLOBALS._player.setStrip(2);
+
+		if (R2_GLOBALS._player._mover)
+			R2_GLOBALS._player.addMover(NULL);
+
+		R2_GLOBALS._player.disableControl(CURSOR_TALK);
+		R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
+
+		if (_object2->_mover)
+			_object2->addMover(NULL);
+	}
+	
+
+	switch (v) {
+	case 0:
+		_object1.animate(ANIM_MODE_2, NULL);
+		break;
+	case 1:
+		((SceneItem *)_action)->_sceneRegionId = 0;
+		_object1.setup(4031, 1, 1);
+		_object1.animate(ANIM_MODE_5, NULL);
+		break;
+	default:
+		signal();
+		break;
+	}
+}
+
+SpeakerMiranda3375::SpeakerMiranda3375() {
+	_speakerName = "MIRANDA";
+	_color1 = 154;
+	_color2 = 0;
+	_fieldF6 = 0;
+	_textWidth = 300;
+	_hideObjects = false;
+	_object2 = NULL;
+	_displayMode = 1;
+	_numFrames = 0;
+}
+
+void SpeakerMiranda3375::proc15() {
+	Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene;
+
+	int v = _fieldF6;
+
+	if (!_object2) {
+		if (R2_GLOBALS._player._characterIndex == 3) 
+			_object2 = &R2_GLOBALS._player;
+		else
+			_object2 = &scene->_actor2;
+
+		_object2->hide();
+		_object1.postInit();
+		_object1.setPosition(_object2->_position);
+		_object1._numFrames = 7;
+		_object1._effect = 1;
+		_object1.changeZoom(-1);
+		
+		if (scene->_actor1._position.y != 163)
+			R2_GLOBALS._player.setStrip(8);
+		else
+			R2_GLOBALS._player.setStrip(2);
+
+		R2_GLOBALS._player.disableControl();
+
+		if (R2_GLOBALS._player._mover)
+			R2_GLOBALS._player.addMover(NULL);
+
+		R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
+
+		if (_object2->_mover)
+			_object2->addMover(NULL);
+	}
+	
+
+	switch (v) {
+	case 0:
+		_object1.animate(ANIM_MODE_2, NULL);
+		break;
+	case 1:
+		((SceneItem *)_action)->_sceneRegionId = 0;
+		_object1.setup(4051, 5, 1);
+		_object1.animate(ANIM_MODE_5, NULL);
+		break;
+	default:
+		signal();
+		break;
+	}
+}
+
+SpeakerWebbster3375::SpeakerWebbster3375() {
+	_speakerName = "WEBBSTER";
+	_color1 = 60;
+	_color2 = 0;
+	_fieldF6 = 0;
+	_textWidth = 300;
+	_hideObjects = false;
+	_object2 = NULL;
+	_displayMode = 1;
+	_numFrames = 0;
+}
+
+void SpeakerWebbster3375::proc15() {
+	Scene3375 *scene = (Scene3375 *)R2_GLOBALS._sceneManager._scene;
+
+	int v = _fieldF6;
+
+	if (!_object2) {
+		_object2 = &scene->_actor3;
+		_object2->hide();
+		_object1.postInit();
+		_object1.setPosition(_object2->_position);
+		_object1._numFrames = 7;
+		_object1._effect = 1;
+		_object1.changeZoom(-1);
+		
+		if (scene->_actor1._position.y != 163)
+			R2_GLOBALS._player.setStrip(8);
+		else
+			R2_GLOBALS._player.setStrip(2);
+
+		if (R2_GLOBALS._player._mover)
+			R2_GLOBALS._player.addMover(NULL);
+
+		R2_GLOBALS._player.disableControl();
+		R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
+
+		if (_object2->_mover)
+			_object2->addMover(NULL);
+	}
+	
+
+	switch (v) {
+	case 0:
+		_object1.animate(ANIM_MODE_2, NULL);
+		break;
+	case 1:
+		((SceneItem *)_action)->_sceneRegionId = 0;
+		_object1.setup(4110, 5, 1);
+		_object1.animate(ANIM_MODE_5, NULL);
+		break;
+	default:
+		signal();
+		break;
+	}
+}
+
 SpeakerQuinn3400::SpeakerQuinn3400() {
 	_speakerName = "QUINN";
 	_color1 = 60;
diff --git a/engines/tsage/ringworld2/ringworld2_speakers.h b/engines/tsage/ringworld2/ringworld2_speakers.h
index e4ea036..2f28917 100644
--- a/engines/tsage/ringworld2/ringworld2_speakers.h
+++ b/engines/tsage/ringworld2/ringworld2_speakers.h
@@ -389,6 +389,38 @@ public:
 	virtual void proc15();
 };
 
+class SpeakerQuinn3375 : public VisualSpeaker {
+public:
+	SpeakerQuinn3375();
+
+	virtual Common::String getClassName() { return "SpeakerQuinn3375"; }
+	virtual void proc15();
+};
+
+class SpeakerSeeker3375 : public VisualSpeaker {
+public:
+	SpeakerSeeker3375();
+
+	virtual Common::String getClassName() { return "SpeakerSeeker3375"; }
+	virtual void proc15();
+};
+
+class SpeakerMiranda3375 : public VisualSpeaker {
+public:
+	SpeakerMiranda3375();
+
+	virtual Common::String getClassName() { return "SpeakerMiranda3375"; }
+	virtual void proc15();
+};
+
+class SpeakerWebbster3375 : public VisualSpeaker {
+public:
+	SpeakerWebbster3375();
+
+	virtual Common::String getClassName() { return "SpeakerWebbster3375"; }
+	virtual void proc15();
+};
+
 class SpeakerQuinn3400 : public VisualSpeaker {
 public:
 	SpeakerQuinn3400();






More information about the Scummvm-git-logs mailing list