aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStrangerke2012-01-08 23:56:27 +0100
committerStrangerke2012-01-08 23:57:08 +0100
commitd1e9d382143e94f2b1129a7993933825a731bfd3 (patch)
tree08f53876534b00b98aec2a3c60c3b2137839b1ca
parentfed0ef350d51d16566137ec975c7bfcbbccecaae (diff)
downloadscummvm-rg350-d1e9d382143e94f2b1129a7993933825a731bfd3.tar.gz
scummvm-rg350-d1e9d382143e94f2b1129a7993933825a731bfd3.tar.bz2
scummvm-rg350-d1e9d382143e94f2b1129a7993933825a731bfd3.zip
TSAGE: R2R - Implement scene 1530
-rw-r--r--engines/tsage/ringworld2/ringworld2_logic.cpp1
-rw-r--r--engines/tsage/ringworld2/ringworld2_scenes1.cpp101
-rw-r--r--engines/tsage/ringworld2/ringworld2_scenes1.h15
-rw-r--r--engines/tsage/ringworld2/ringworld2_speakers.h10
4 files changed, 127 insertions, 0 deletions
diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp
index 5eccafefdf..8b4d86532d 100644
--- a/engines/tsage/ringworld2/ringworld2_logic.cpp
+++ b/engines/tsage/ringworld2/ringworld2_logic.cpp
@@ -113,6 +113,7 @@ Scene *Ringworld2Game::createScene(int sceneNumber) {
// Cutscene - Ship
return new Scene1525();
case 1530:
+ return new Scene1530();
case 1550:
case 1575:
case 1580:
diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp
index 1afb1b6509..997331f94c 100644
--- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp
+++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp
@@ -1057,5 +1057,106 @@ void Scene1525::signal() {
}
}
+/*--------------------------------------------------------------------------
+ * Scene 1530 -
+ *
+ *--------------------------------------------------------------------------*/
+void Scene1530::postInit(SceneObjectList *OwnerList) {
+ if (R2_GLOBALS._sceneManager._previousScene == 1000)
+ loadScene(1650);
+ else if (R2_GLOBALS._sceneManager._previousScene == 1580)
+ loadScene(1550);
+ else
+ loadScene(1530);
+
+ R2_GLOBALS._v58CE2 = 0;
+ SceneExt::postInit();
+
+ _stripManager.addSpeaker(&_quinnSpeaker);
+ _stripManager.addSpeaker(&_seekerSpeaker);
+
+ if (R2_GLOBALS._sceneManager._previousScene == 1000) {
+ R2_GLOBALS._player.postInit();
+ R2_GLOBALS._player.hide();
+ R2_GLOBALS._player.disableControl();
+
+ R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
+ _stripManager.start(538, this);
+ R2_GLOBALS._sound1.play(114);
+
+ _sceneMode = 3;
+ } else if (R2_GLOBALS._sceneManager._previousScene == 1580) {
+ R2_GLOBALS._player.postInit();
+ R2_GLOBALS._player._characterIndex = R2_QUINN;
+ R2_GLOBALS._player.setObjectWrapper(NULL);
+ R2_GLOBALS._player.setup(1516, 6, 1);
+ R2_GLOBALS._player.setPosition(Common::Point(160, 125));
+ R2_GLOBALS._player._moveRate = 30;
+ R2_GLOBALS._player._moveDiff = Common::Point(4, 1);
+
+ _actor2.postInit();
+ _actor2.setup(1516, 7, 1);
+ _actor2.setPosition(Common::Point(121, 41));
+ _actor2.animate(ANIM_MODE_2, NULL);
+
+ _actor3.postInit();
+ _actor3.setup(1516, 8, 1);
+ _actor3.setPosition(Common::Point(107, 116));
+ _actor3.animate(ANIM_MODE_2, NULL);
+
+ R2_GLOBALS._player.disableControl();
+ Common::Point pt(480, 75);
+ NpcMover *mover = new NpcMover();
+ R2_GLOBALS._player.addMover(mover, &pt, this);
+ R2_GLOBALS._sound1.play(111);
+
+ _sceneMode = 1;
+ } else {
+ _actor1.postInit();
+ _actor1._effect = 1;
+
+ R2_GLOBALS._player.postInit();
+ R2_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ R2_GLOBALS._player.disableControl();
+
+ setAction(&_sequenceManager, this, 1530, &R2_GLOBALS._player, &_actor1, NULL);
+
+ _sceneMode = 2;
+ }
+
+}
+
+void Scene1530::signal() {
+ switch (_sceneMode - 1) {
+ case 0:
+ R2_GLOBALS._sceneManager.changeScene(1000);
+ break;
+ case 1:
+ R2_GLOBALS._sceneManager.changeScene(1525);
+ break;
+ case 2:
+ R2_GLOBALS._player.disableControl();
+ _sceneMode = 4;
+ R2_GLOBALS._player.show();
+ setAction(&_sequenceManager, this, 1650, &R2_GLOBALS._player, NULL);
+ break;
+ case 3:
+ R2_GLOBALS._sceneManager.changeScene(1700);
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene1530::dispatch() {
+ int16 x = R2_GLOBALS._player._position.x;
+ int16 y = R2_GLOBALS._player._position.y;
+
+ _actor2.setPosition(Common::Point(x - 39, y - 85));
+ _actor3.setPosition(Common::Point(x - 53, y - 9));
+
+ Scene::dispatch();
+}
+
} // End of namespace Ringworld2
} // End of namespace TsAGE
diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.h b/engines/tsage/ringworld2/ringworld2_scenes1.h
index 4c6d3ba6dc..4631c4f0ce 100644
--- a/engines/tsage/ringworld2/ringworld2_scenes1.h
+++ b/engines/tsage/ringworld2/ringworld2_scenes1.h
@@ -138,6 +138,21 @@ public:
virtual void postInit(SceneObjectList *OwnerList = NULL);
virtual void signal();
};
+
+class Scene1530 : public SceneExt {
+public:
+ SpeakerQuinn1530 _quinnSpeaker;
+ SpeakerSeeker1530 _seekerSpeaker;
+ SceneActor _actor1;
+ SceneActor _actor2;
+ SceneActor _actor3;
+
+ SequenceManager _sequenceManager;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+ virtual void dispatch();
+};
} // 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 13c770a4a3..49ac9f555f 100644
--- a/engines/tsage/ringworld2/ringworld2_speakers.h
+++ b/engines/tsage/ringworld2/ringworld2_speakers.h
@@ -269,6 +269,11 @@ public:
virtual void proc15();
};
+class SpeakerQuinn1530 : public SpeakerQuinn {
+public:
+ virtual Common::String getClassName() { return "SpeakerQuinn1530"; }
+};
+
class SpeakerQuinn2435 : public SpeakerQuinn {
public:
virtual Common::String getClassName() { return "SpeakerQuinn2435"; }
@@ -407,6 +412,11 @@ public:
virtual void proc15();
};
+class SpeakerSeeker1530 : public SpeakerSeeker {
+public:
+ virtual Common::String getClassName() { return "SpeakerSeeker1530"; }
+};
+
class SpeakerSeeker2435 : public SpeakerSeeker {
public:
virtual Common::String getClassName() { return "SpeakerSeeker2435"; }