aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStrangerke2012-01-08 20:41:18 +0100
committerStrangerke2012-01-08 20:41:41 +0100
commita4a2878a3716dfbb3b04e6d10d68a99c55a4dd85 (patch)
treef8d0b70cd94ba61d191168f802d9a2782d32aea4
parentfb26f7dcfa2987706f669882135c7648d365e696 (diff)
downloadscummvm-rg350-a4a2878a3716dfbb3b04e6d10d68a99c55a4dd85.tar.gz
scummvm-rg350-a4a2878a3716dfbb3b04e6d10d68a99c55a4dd85.tar.bz2
scummvm-rg350-a4a2878a3716dfbb3b04e6d10d68a99c55a4dd85.zip
TSAGE: R2R - Implement scene 1500
-rw-r--r--engines/tsage/ringworld2/ringworld2_logic.cpp4
-rw-r--r--engines/tsage/ringworld2/ringworld2_scenes1.cpp159
-rw-r--r--engines/tsage/ringworld2/ringworld2_scenes1.h13
3 files changed, 176 insertions, 0 deletions
diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp
index fa7895f407..ee49c238ee 100644
--- a/engines/tsage/ringworld2/ringworld2_logic.cpp
+++ b/engines/tsage/ringworld2/ringworld2_logic.cpp
@@ -36,6 +36,8 @@ namespace TsAGE {
namespace Ringworld2 {
Scene *Ringworld2Game::createScene(int sceneNumber) {
+ warning("Switching to scene %d", sceneNumber);
+
switch (sceneNumber) {
/* Scene group #0 */
case 50:
@@ -103,7 +105,9 @@ Scene *Ringworld2Game::createScene(int sceneNumber) {
return new Scene1100();
case 1200:
case 1330:
+ error("Missing scene %d from group 1", sceneNumber);
case 1500:
+ return new Scene1500();
case 1525:
case 1530:
case 1550:
diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp
index e773c52805..17422019b0 100644
--- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp
+++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp
@@ -856,5 +856,164 @@ void Scene1100::saveCharacter(int characterIndex) {
R2_GLOBALS._sound1.fadeOut2(NULL);
SceneExt::saveCharacter(characterIndex);
}
+
+/*--------------------------------------------------------------------------
+ * Scene 1500 -
+ *
+ *--------------------------------------------------------------------------*/
+void Scene1500::postInit(SceneObjectList *OwnerList) {
+ loadScene(1500);
+ R2_GLOBALS._v58CE2 = 0;
+ R2_GLOBALS._v5589E.top = 0;
+ R2_GLOBALS._v5589E.bottom = 200;
+ setZoomPercents(170, 13, 240, 100);
+ SceneExt::postInit();
+ scalePalette(65, 65, 65);
+
+ R2_GLOBALS._player.postInit();
+ R2_GLOBALS._player.hide();
+ R2_GLOBALS._player.disableControl();
+
+ _actor2.postInit();
+ _actor2.setup(1401, 1, 1);
+ _actor2._effect = 5;
+ _actor2.fixPriority(10);
+ _actor2._field9C = _field312;
+
+ _actor1.postInit();
+ _actor1.setup(1400, 1, 1);
+ _actor1._moveDiff = Common::Point(1, 1);
+ _actor1._linkedActor = &_actor2;
+
+ if (R2_GLOBALS._sceneManager._previousScene != 1010) {
+ _actor4.postInit();
+ _actor4.setup(1401, 2, 1);
+ _actor4._effect = 5;
+ _actor4.fixPriority(10);
+ _actor4._field9C = _field312;
+
+ _actor3.postInit();
+ _actor3._moveRate = 30;
+ _actor3._moveDiff = Common::Point(1, 1);
+ _actor3._linkedActor = &_actor4;
+ }
+
+ if (R2_GLOBALS._sceneManager._previousScene == 300) {
+ _actor1.setPosition(Common::Point(189, 139), 5);
+
+ _actor3.setup(1400, 1, 2);
+ _actor3.setPosition(Common::Point(148, 108), 0);
+
+ _sceneMode = 20;
+ R2_GLOBALS._sound1.play(110);
+ } else if (R2_GLOBALS._sceneManager._previousScene == 1550) {
+ _actor1.setPosition(Common::Point(189, 139), 5);
+
+ _actor3.setup(1400, 2, 1);
+ _actor3.changeZoom(-1);
+ _actor3.setPosition(Common::Point(298, 258), 5);
+
+ _sceneMode = 10;
+ R2_GLOBALS._sound1.play(106);
+ } else {
+ _actor1.setPosition(Common::Point(289, 239), -30);
+ _sceneMode = 0;
+ R2_GLOBALS._sound1.play(102);
+ }
+ signal();
+}
+
+void Scene1500::remove() {
+ R2_GLOBALS._v5589E.top = 3;
+ R2_GLOBALS._v5589E.bottom = 168;
+ R2_GLOBALS._v58CE2 = 1;
+
+ SceneExt::remove();
+}
+
+void Scene1500::signal() {
+ switch(_sceneMode++) {
+ case 0:
+ R2_GLOBALS.setFlag(25);
+ setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL);
+ // No break on purpose
+ case 1:
+ if (_actor1._yDiff < 50) {
+ _actor1.setPosition(Common::Point(289, 239), _actor1._yDiff + 1);
+ _sceneMode = 1;
+ }
+ setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL);
+ break;
+ case 2: {
+ Common::Point pt(189, 139);
+ NpcMover *mover = new NpcMover();
+ _actor1.addMover(mover, &pt, this);
+ }
+ break;
+ case 3:
+ if (_actor1._yDiff > 5) {
+ _actor1.setPosition(Common::Point(189, 139), _actor1._yDiff - 1);
+ _sceneMode = 3;
+ }
+ setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL);
+ break;
+ case 13:
+ R2_GLOBALS._player._characterIndex = R2_MIRANDA;
+ // No break on purpose
+ case 4:
+ R2_GLOBALS._sceneManager.changeScene(300);
+ break;
+ case 10:
+ // No break on purpose
+ case 20:
+ setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL);
+ break;
+ case 11: {
+ Common::Point pt(148, 108);
+ NpcMover *mover = new NpcMover();
+ _actor3.addMover(mover, &pt, this);
+ }
+ break;
+ case 12:
+ setAction(&_sequenceManager, this, 2, &R2_GLOBALS._player, NULL);
+ break;
+ case 21: {
+ Common::Point pt(-2, -42);
+ NpcMover *mover = new NpcMover();
+ _actor3.addMover(mover, &pt, NULL);
+ signal();
+ }
+ break;
+ case 22:
+ if (_actor1._yDiff < 50) {
+ _actor1.setPosition(Common::Point(189, 139), _actor1._yDiff + 1);
+ _sceneMode = 22;
+ }
+ setAction(&_sequenceManager, this, 1, &R2_GLOBALS._player, NULL);
+ break;
+ case 23: {
+ Common::Point pt(-13, -61);
+ NpcMover *mover = new NpcMover();
+ _actor1.addMover(mover, &pt, this);
+ }
+ break;
+ case 24:
+ R2_GLOBALS._sceneManager.changeScene(300);
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene1500::dispatch() {
+ if (_sceneMode > 10) {
+ float yDiff = sqrt((float) (_actor3._position.x * _actor3._position.x) + (_actor3._position.y * _actor3._position.y));
+ if (yDiff > 6)
+ _actor3.setPosition(_actor3._position, yDiff);
+ }
+
+ 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 a21869b6ad..a88451e406 100644
--- a/engines/tsage/ringworld2/ringworld2_scenes1.h
+++ b/engines/tsage/ringworld2/ringworld2_scenes1.h
@@ -117,6 +117,19 @@ public:
virtual void saveCharacter(int characterIndex);
};
+class Scene1500 : public SceneExt {
+public:
+ SceneActor _actor1;
+ SceneActor _actor2;
+ SceneActor _actor3;
+ SceneActor _actor4;
+ SequenceManager _sequenceManager;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void remove();
+ virtual void signal();
+ virtual void dispatch();
+};
} // End of namespace Ringworld2
} // End of namespace TsAGE