[Scummvm-cvs-logs] scummvm master -> 4f5a708d7dc8d4040e866430df7ab019379f3e03

Strangerke Strangerke at scummvm.org
Wed Dec 28 01:17:51 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:
4f5a708d7d TSAGE: R2R - Implement scene 3700


Commit: 4f5a708d7dc8d4040e866430df7ab019379f3e03
    https://github.com/scummvm/scummvm/commit/4f5a708d7dc8d4040e866430df7ab019379f3e03
Author: Strangerke (strangerke at scummvm.org)
Date: 2011-12-27T16:17:34-08:00

Commit Message:
TSAGE: R2R - Implement scene 3700

Changed paths:
    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/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp
index dfa135b..1b6c375 100644
--- a/engines/tsage/ringworld2/ringworld2_logic.cpp
+++ b/engines/tsage/ringworld2/ringworld2_logic.cpp
@@ -224,7 +224,10 @@ Scene *Ringworld2Game::createScene(int sceneNumber) {
 		return new Scene3400();
 	case 3500:
 	case 3600:
+		error("Missing scene %d from group 3", sceneNumber);
 	case 3700:
+		// Cutscene - Teleport outside
+		return new Scene3700();
 	case 3800:
 	case 3900:
 		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 85e1f77..4c749a9 100644
--- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp
+++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp
@@ -1945,5 +1945,78 @@ void Scene3400::signal() {
 	}
 }
 
+/*--------------------------------------------------------------------------
+ * Scene 3700 - Cutscene - Teleport outside
+ *
+ *--------------------------------------------------------------------------*/
+void Scene3700::postInit(SceneObjectList *OwnerList) {
+	loadScene(3700);
+	R2_GLOBALS._v58CE2 = 0;
+	SceneExt::postInit();
+
+	_stripManager.setColors(60, 255);
+	_stripManager.setFontNumber(3);
+	_stripManager.addSpeaker(&_quinnSpeaker);
+	_stripManager.addSpeaker(&_seekerSpeaker);
+	_stripManager.addSpeaker(&_mirandaSpeaker);
+
+	_actor1.postInit();
+	_actor1._moveDiff = Common::Point(3, 2);
+
+	_actor2.postInit();
+	_actor2._numFrames = 7;
+	_actor2._moveDiff = Common::Point(5, 3);
+	_actor2.hide();
+
+	_actor3.postInit();
+	_actor3._moveDiff = Common::Point(3, 2);
+	_actor3.hide();
+
+	_actor4.postInit();
+	_actor4._numFrames = 7;
+	_actor4._moveDiff = Common::Point(5, 3);
+	_actor4.hide();
+
+	_actor5.postInit();
+
+	R2_GLOBALS._player.postInit();
+	R2_GLOBALS._sound1.play(332);
+
+	_sceneMode = 3700;
+	setAction(&_sequenceManager, this, 3700, &_actor1, &_actor2, &_actor3, &_actor4, &_actor5, NULL);
+}
+
+void Scene3700::remove() {
+	R2_GLOBALS._sound1.fadeOut2(NULL);
+	SceneExt::remove();
+}
+
+void Scene3700::signal() {
+	switch (_sceneMode) {
+	case 3328:
+	// No break on purpose
+	case 3329:
+		warning("STUB: sub_1D227()");
+		setAction(&_sequenceManager, this, 3701, &_actor2, &_actor3, &_actor4, NULL);
+		break;
+	case 3700:
+		_actor1.setup(10, 6, 1);
+		_actor2.setup(20, 5, 1);
+		if (R2_GLOBALS.getFlag(71)) {
+			_sceneMode = 3329;
+			_stripManager.start(3329, this);
+		} else {
+			_sceneMode = 3328;
+			_stripManager.start(3328, this);
+		}
+	case 3701:
+		R2_GLOBALS._sceneManager.changeScene(1000);
+		break;
+	default:
+		R2_GLOBALS._player.enableControl();
+		break;
+	}
+}
+
 } // End of namespace Ringworld2
 } // End of namespace TsAGE
diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.h b/engines/tsage/ringworld2/ringworld2_scenes3.h
index 8968bdd..f83417e 100644
--- a/engines/tsage/ringworld2/ringworld2_scenes3.h
+++ b/engines/tsage/ringworld2/ringworld2_scenes3.h
@@ -424,6 +424,23 @@ public:
 	virtual void signal();
 	virtual void synchronize(Serializer &s);
 };
+
+class Scene3700 : public SceneExt {
+public:
+	SpeakerQuinn3700 _quinnSpeaker;
+	SpeakerSeeker3700 _seekerSpeaker;
+	SpeakerMiranda3700 _mirandaSpeaker;
+	SceneActor _actor1;
+	SceneActor _actor2;
+	SceneActor _actor3;
+	SceneActor _actor4;
+	SceneActor _actor5;
+	SequenceManager _sequenceManager;
+
+	virtual void postInit(SceneObjectList *OwnerList = NULL);
+	virtual void remove();
+	virtual void signal();
+};
 } // End of namespace Ringworld2
 } // End of namespace TsAGE
 
diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp
index edcf340..25ad156 100644
--- a/engines/tsage/ringworld2/ringworld2_speakers.cpp
+++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp
@@ -1915,5 +1915,222 @@ void SpeakerTeal3400::proc15() {
 	}
 }
 
+SpeakerQuinn3700::SpeakerQuinn3700() {
+	_speakerName = "QUINN";
+	_color1 = 60;
+	_color2 = 0;
+	_fieldF6 = 0;
+	_textWidth = 300;
+	_hideObjects = false;
+	_object2 = NULL;
+	_displayMode = 1;
+	_numFrames = 0;
+}
+
+void SpeakerQuinn3700::setText(const Common::String &msg) {
+	Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene;
+
+	switch (_fieldF6) {
+	case 2:
+		scene->_actor3.setup(30, 1, 1);
+		R2_GLOBALS._sound2.play(44);
+		break;
+	case 3:
+		scene->_actor3.setup(30, 1, 1);
+		break;
+	default:
+		scene->_actor3.setup(30, 7, 1);
+		break;
+	}
+	VisualSpeaker::setText(msg);
+}
+
+void SpeakerQuinn3700::proc15() {
+	Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene;
+
+	int v = _fieldF6;
+
+	if (!_object2) {
+		_object2 = &scene->_actor1;
+		_object2->hide();
+		_object1.postInit();
+		_object1.setPosition(_object2->_position);
+		_object1._numFrames = 7;
+		R2_GLOBALS._player.disableControl();
+		R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
+
+		if (_object2->_mover)
+			_object2->addMover(NULL);
+	}
+
+	_object1.setPosition(_object2->_position);
+
+	switch (v) {
+	case 0:
+		_object1.animate(ANIM_MODE_2, NULL);
+		break;
+	case 1:
+		((SceneItem *)_action)->_sceneRegionId = 0;
+		R2_GLOBALS._sound2.stop();
+		scene->_actor1.setup(10, 4, 1);
+		scene->_actor3.setup(30, 7, 1);
+		_object1.setup(3701, 1, 1);
+		_object1.animate(ANIM_MODE_5, NULL);
+		break;
+	case 2:
+		((SceneItem *)_action)->_sceneRegionId = 0;
+		scene->_actor2.setup(20, 1, 1);
+		scene->_actor3.setup(30, 1, 1);
+		_object1.setup(3701, 2, 1);
+		_object1.animate(ANIM_MODE_5, NULL);
+		break;
+	case 3:
+		((SceneItem *)_action)->_sceneRegionId = 0;
+		scene->_actor1.setup(10, 2, 1);
+		scene->_actor3.setup(30, 1, 1);
+		_object1.setup(4011, 1, 1);
+		_object1.animate(ANIM_MODE_5, NULL);
+		break;
+	default:
+		signal();
+		break;
+	}
+}
+
+SpeakerSeeker3700::SpeakerSeeker3700() {
+	_speakerName = "SEEKER";
+	_color1 = 35;
+	_color2 = 0;
+	_fieldF6 = 0;
+	_textWidth = 300;
+	_hideObjects = false;
+	_object2 = NULL;
+	_displayMode = 1;
+	_numFrames = 0;
+}
+
+void SpeakerSeeker3700::setText(const Common::String &msg) {
+	Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene;
+
+	if (_fieldF6 == 1) {
+		R2_GLOBALS._sound2.play(44);
+		scene->_actor3.setup(30, 8, 1);
+	} else {
+		scene->_actor3.setup(30, 2, 1);
+	}
+	VisualSpeaker::setText(msg);
+}
+
+void SpeakerSeeker3700::proc15() {
+	Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene;
+
+	int v = _fieldF6;
+
+	if (!_object2) {
+		_object2 = &scene->_actor2;
+		_object2->hide();
+		_object1.postInit();
+		_object1.setPosition(_object2->_position);
+		_object1._numFrames = 7;
+		R2_GLOBALS._player.disableControl();
+		R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
+
+		if (_object2->_mover)
+			_object2->addMover(NULL);
+	}
+
+	_object1.setPosition(_object2->_position);
+
+	switch (v) {
+	case 0:
+		_object1.animate(ANIM_MODE_2, NULL);
+		break;
+	case 1:
+		((SceneItem *)_action)->_sceneRegionId = 0;
+		R2_GLOBALS._sound2.stop();
+		scene->_actor1.setup(10, 8, 1);
+		scene->_actor2.setup(20, 7, 1);
+		scene->_actor3.setup(30, 8, 1);
+		_object1.setup(3701, 3, 1);
+		_object1.animate(ANIM_MODE_5, NULL);
+		break;
+	case 2:
+		((SceneItem *)_action)->_sceneRegionId = 0;
+		scene->_actor1.setup(10, 2, 1);
+		scene->_actor2.setup(20, 1, 1);
+		scene->_actor3.setup(30, 1, 1);
+		_object1.setup(4031, 1, 1);
+		_object1.animate(ANIM_MODE_5, NULL);
+		break;
+	default:
+		signal();
+		break;
+	}
+}
+
+SpeakerMiranda3700::SpeakerMiranda3700() {
+	_speakerName = "MIRANDA";
+	_color1 = 154;
+	_color2 = 0;
+	_fieldF6 = 0;
+	_textWidth = 300;
+	_hideObjects = false;
+	_object2 = NULL;
+	_displayMode = 1;
+	_numFrames = 0;
+}
+
+void SpeakerMiranda3700::proc15() {
+	Scene3700 *scene = (Scene3700 *)R2_GLOBALS._sceneManager._scene;
+
+	int v = _fieldF6;
+
+	if (!_object2) {
+		_object2 = &scene->_actor3;
+		_object2->hide();
+		_object1.postInit();
+		_object1.setPosition(_object2->_position);
+		_object1._numFrames = 7;
+		R2_GLOBALS._player.disableControl();
+		R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
+
+		if (_object2->_mover)
+			_object2->addMover(NULL);
+	}
+
+	_object1.setPosition(_object2->_position);
+
+	switch (v) {
+	case 0:
+		_object1.animate(ANIM_MODE_2, NULL);
+		break;
+	case 1:
+		((SceneItem *)_action)->_sceneRegionId = 0;
+		scene->_actor1.setup(10, 6, 1);
+		scene->_actor2.setup(20, 5, 1);
+		_object2->setup(30, 1, 1);
+		scene->_actor4.setup(40, 1, 1);
+		_object1.setup(4050, 5, 1);
+		_object1.animate(ANIM_MODE_5, NULL);
+		break;
+	case 2:
+		((SceneItem *)_action)->_sceneRegionId = 0;
+		scene->_actor3.setup(30, 8, 1);
+		_object1.setup(4052, 3, 1);
+		_object1.animate(ANIM_MODE_5, NULL);
+		break;
+	case 3:
+		((SceneItem *)_action)->_sceneRegionId = 0;
+		scene->_actor2.setup(20, 1, 1);
+		scene->_actor3.setup(30, 1, 1);
+		_object1.setup(4051, 7, 1);
+		_object1.animate(ANIM_MODE_5, NULL);
+		break;
+	default:
+		signal();
+		break;
+	}
+}
+
 } // End of namespace Ringworld2
 } // End of namespace TsAGE
diff --git a/engines/tsage/ringworld2/ringworld2_speakers.h b/engines/tsage/ringworld2/ringworld2_speakers.h
index f85b412..e4ea036 100644
--- a/engines/tsage/ringworld2/ringworld2_speakers.h
+++ b/engines/tsage/ringworld2/ringworld2_speakers.h
@@ -428,6 +428,32 @@ public:
 	virtual Common::String getClassName() { return "SpeakerTeal3400"; }
 	virtual void proc15();
 };
+
+class SpeakerQuinn3700 : public VisualSpeaker {
+public:
+	SpeakerQuinn3700();
+
+	virtual Common::String getClassName() { return "SpeakerQuinn3700"; }
+	virtual void setText(const Common::String &msg);
+	virtual void proc15();
+};
+
+class SpeakerSeeker3700 : public VisualSpeaker {
+public:
+	SpeakerSeeker3700();
+
+	virtual Common::String getClassName() { return "SpeakerSeeker3700"; }
+	virtual void setText(const Common::String &msg);
+	virtual void proc15();
+};
+
+class SpeakerMiranda3700 : public VisualSpeaker {
+public:
+	SpeakerMiranda3700();
+
+	virtual Common::String getClassName() { return "SpeakerMiranda3700"; }
+	virtual void proc15();
+};
 } // End of namespace Ringworld2
 } // End of namespace TsAGE
 






More information about the Scummvm-git-logs mailing list