aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStrangerke2011-12-24 01:15:28 +0100
committerStrangerke2011-12-24 01:16:29 +0100
commit544e241d221a5d503e2acf574fbde66c8a4fa527 (patch)
tree7fe698c22bd3ffb79c3f8bf56c03920cfe2d3abe
parent99a5db20494eff00d6d149c08b75ba83d9a7af20 (diff)
downloadscummvm-rg350-544e241d221a5d503e2acf574fbde66c8a4fa527.tar.gz
scummvm-rg350-544e241d221a5d503e2acf574fbde66c8a4fa527.tar.bz2
scummvm-rg350-544e241d221a5d503e2acf574fbde66c8a4fa527.zip
TSAGE: R2R - Implement scene 3255
-rw-r--r--engines/tsage/ringworld2/ringworld2_logic.cpp1
-rw-r--r--engines/tsage/ringworld2/ringworld2_scenes3.cpp105
-rw-r--r--engines/tsage/ringworld2/ringworld2_scenes3.h18
-rw-r--r--engines/tsage/ringworld2/ringworld2_speakers.cpp68
-rw-r--r--engines/tsage/ringworld2/ringworld2_speakers.h16
5 files changed, 208 insertions, 0 deletions
diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp
index dbde0ee27a..5cb66a50f7 100644
--- a/engines/tsage/ringworld2/ringworld2_logic.cpp
+++ b/engines/tsage/ringworld2/ringworld2_logic.cpp
@@ -206,6 +206,7 @@ Scene *Ringworld2Game::createScene(int sceneNumber) {
// Room with large stasis field negator
return new Scene3250();
case 3255:
+ return new Scene3255();
case 3260:
// Computer room
return new Scene3260();
diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.cpp b/engines/tsage/ringworld2/ringworld2_scenes3.cpp
index 8b8d8c479c..f7e7be02f2 100644
--- a/engines/tsage/ringworld2/ringworld2_scenes3.cpp
+++ b/engines/tsage/ringworld2/ringworld2_scenes3.cpp
@@ -1257,6 +1257,111 @@ void Scene3250::dispatch() {
}
/*--------------------------------------------------------------------------
+ * Scene 3255 -
+ *
+ *--------------------------------------------------------------------------*/
+void Scene3255::postInit(SceneObjectList *OwnerList) {
+ loadScene(3255);
+ SceneExt::postInit();
+
+ _stripManager.addSpeaker(&_quinnSpeaker);
+ _stripManager.addSpeaker(&_mirandaSpeaker);
+
+ if (R2_GLOBALS._sceneManager._previousScene == -1)
+ R2_GLOBALS.setFlag(79);
+
+ R2_GLOBALS._player.postInit();
+ R2_GLOBALS._player.disableControl();
+
+ if (R2_GLOBALS.getFlag(79)) {
+ R2_GLOBALS._sound1.play(267);
+ R2_GLOBALS._sound2.play(268);
+ _sceneMode = 3257;
+ _actor3.postInit();
+ _actor4.postInit();
+ _actor4._effect = 1;
+ setAction(&_sequenceManager, this, 3257, &R2_GLOBALS._player, &_actor4, &_actor3, NULL);
+ } else {
+ _actor1.postInit();
+ _actor1.setup(303, 1, 1);
+ _actor1.setPosition(Common::Point(208, 128));
+ _actor2.postInit();
+ _actor2.setup(3107, 3, 1);
+ _actor2.setPosition(Common::Point(230, 127));
+ _sceneMode = 3255;
+ setAction(&_sequenceManager, this, 3255, &R2_GLOBALS._player, NULL);
+ }
+ R2_GLOBALS._player._oldCharacterScene[3] = 3255;
+}
+
+void Scene3255::signal() {
+ switch (_sceneMode) {
+ case 10:
+ _sceneMode = 3258;
+ _actor5.postInit();
+ _actor6.postInit();
+ _actor7.postInit();
+ setAction(&_sequenceManager, this, 3258, &R2_GLOBALS._player, &_actor4, &_actor3, &_actor5, &_actor6, &_actor7, NULL);
+ break;
+ case 3256:
+ R2_GLOBALS._sceneManager.changeScene(3250);
+ break;
+ case 3257:
+ _sceneMode = 10;
+ R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
+ _stripManager.start(607, this);
+ break;
+ case 3258:
+ R2_GLOBALS._sceneManager.changeScene(3100);
+ break;
+ default:
+ SceneItem::display(3255, 0, 0, 280, 1, 160, 9, 1, 2, 20, 7, 7, -999);
+ _sceneMode = 3256;
+ setAction(&_sequenceManager, this, 3256, &R2_GLOBALS._player, NULL);
+ }
+}
+
+void Scene3255::dispatch() {
+ if (R2_GLOBALS.getFlag(79)) {
+ if (_actor5._position.y >= 95) {
+ if (_actor5._position.y <= 110)
+ _actor5._shade = 6 - (_actor5._position.y - 95) / 3;
+ else
+ _actor5._effect = 1;
+ } else {
+ _actor5._effect = 6;
+ _actor5._shade = 6;
+ }
+
+ if (_actor6._position.y >= 95) {
+ if (_actor6._position.y <= 110)
+ _actor6._shade = 6 - (_actor6._position.y - 95) / 3;
+ else
+ _actor6._effect = 1;
+ } else {
+ _actor6._effect = 6;
+ _actor6._shade = 6;
+ }
+
+ if (_actor7._position.y >= 95) {
+ if (_actor7._position.y <= 110)
+ _actor7._shade = 6 - (_actor7._position.y - 95) / 3;
+ else
+ _actor7._effect = 1;
+ } else {
+ _actor7._effect = 6;
+ _actor7._shade = 6;
+ }
+ }
+
+ if ((R2_GLOBALS._player._position.x > 250) && (R2_GLOBALS._player._shade == 1)) {
+ R2_GLOBALS._player._effect = 6;
+ _actor4._effect = 6;
+ }
+ Scene::dispatch();
+}
+
+/*--------------------------------------------------------------------------
* Scene 3260 - Computer room
*
*--------------------------------------------------------------------------*/
diff --git a/engines/tsage/ringworld2/ringworld2_scenes3.h b/engines/tsage/ringworld2/ringworld2_scenes3.h
index 2a4899c205..22e5fea477 100644
--- a/engines/tsage/ringworld2/ringworld2_scenes3.h
+++ b/engines/tsage/ringworld2/ringworld2_scenes3.h
@@ -291,6 +291,24 @@ public:
virtual void dispatch();
};
+class Scene3255 : public SceneExt {
+public:
+ SceneActor _actor1;
+ SceneActor _actor2;
+ SceneActor _actor3;
+ SceneActor _actor4;
+ SceneActor _actor5;
+ SceneActor _actor6;
+ SceneActor _actor7;
+ SpeakerQuinn3255 _quinnSpeaker;
+ SpeakerMiranda3255 _mirandaSpeaker;
+ SequenceManager _sequenceManager;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+ virtual void dispatch();
+};
+
class Scene3260 : public SceneExt {
class Actor13 : public SceneActor {
virtual bool startAction(CursorType action, Event &event);
diff --git a/engines/tsage/ringworld2/ringworld2_speakers.cpp b/engines/tsage/ringworld2/ringworld2_speakers.cpp
index 619b1c291f..b63409e387 100644
--- a/engines/tsage/ringworld2/ringworld2_speakers.cpp
+++ b/engines/tsage/ringworld2/ringworld2_speakers.cpp
@@ -1534,5 +1534,73 @@ void SpeakerTomko3245::proc15() {
}
}
+SpeakerQuinn3255::SpeakerQuinn3255() {
+ _speakerName = "QUINN";
+ _color1 = 60;
+ _color2 = 0;
+ _fieldF6 = 0;
+ _textWidth = 300;
+ _hideObjects = false;
+ _object2 = NULL;
+ _displayMode = 1;
+ _numFrames = 0;
+}
+
+void SpeakerQuinn3255::proc15() {
+ Scene3255 *scene = (Scene3255 *)R2_GLOBALS._sceneManager._scene;
+
+ int v = _fieldF6;
+
+ if (!_object2) {
+ _object2 = &scene->_actor4;
+ _object2->hide();
+ _object1.postInit();
+ _object1._effect = _object2->_effect;
+ _object1._shade = _object2->_shade;
+ _object1.setPosition(_object2->_position);
+ }
+
+ if (v == 0) {
+ _object1.animate(ANIM_MODE_2, NULL);
+ } else {
+ ((SceneItem *)_action)->_sceneRegionId = 0;
+ _object1.setup(3257, 3, 1);
+ _object1.animate(ANIM_MODE_5, this);
+ }
+}
+
+SpeakerMiranda3255::SpeakerMiranda3255() {
+ _speakerName = "MIRANDA";
+ _color1 = 154;
+ _color2 = 0;
+ _fieldF6 = 0;
+ _textWidth = 300;
+ _hideObjects = false;
+ _object2 = NULL;
+ _displayMode = 1;
+ _numFrames = 0;
+}
+
+void SpeakerMiranda3255::proc15() {
+ int v = _fieldF6;
+
+ if (!_object2) {
+ _object2 = &R2_GLOBALS._player;
+ _object2->hide();
+ _object1.postInit();
+ _object1._effect = _object2->_effect;
+ _object1._shade = _object2->_shade;
+ _object1.setPosition(_object2->_position);
+ }
+
+ if (v == 0) {
+ _object1.animate(ANIM_MODE_2, NULL);
+ } else {
+ ((SceneItem *)_action)->_sceneRegionId = 0;
+ _object1.setup(3257, 5, 1);
+ _object1.animate(ANIM_MODE_5, this);
+ }
+}
+
} // 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 e6a1819eb3..dba402b64a 100644
--- a/engines/tsage/ringworld2/ringworld2_speakers.h
+++ b/engines/tsage/ringworld2/ringworld2_speakers.h
@@ -372,6 +372,22 @@ public:
virtual Common::String getClassName() { return "SpeakerTomko3245"; }
virtual void proc15();
};
+
+class SpeakerQuinn3255 : public VisualSpeaker {
+public:
+ SpeakerQuinn3255();
+
+ virtual Common::String getClassName() { return "SpeakerQuinn3255"; }
+ virtual void proc15();
+};
+
+class SpeakerMiranda3255 : public VisualSpeaker {
+public:
+ SpeakerMiranda3255();
+
+ virtual Common::String getClassName() { return "SpeakerMiranda3255"; }
+ virtual void proc15();
+};
} // End of namespace Ringworld2
} // End of namespace TsAGE