aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/tsage/core.cpp4
-rw-r--r--engines/tsage/core.h1
-rw-r--r--engines/tsage/ringworld_logic.cpp2
-rw-r--r--engines/tsage/ringworld_scenes3.cpp59
-rw-r--r--engines/tsage/ringworld_scenes3.h14
-rw-r--r--engines/tsage/scenes.cpp2
6 files changed, 81 insertions, 1 deletions
diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp
index 503dd54103..f06e7f532b 100644
--- a/engines/tsage/core.cpp
+++ b/engines/tsage/core.cpp
@@ -1682,6 +1682,10 @@ void SceneObject::setZoom(int percent) {
}
}
+void SceneObject::updateZoom() {
+ changeZoom(_percent);
+}
+
void SceneObject::changeZoom(int percent) {
if (percent == -1)
_flags &= ~OBJFLAG_ZOOMED;
diff --git a/engines/tsage/core.h b/engines/tsage/core.h
index 79731bf46a..d961f8bdd1 100644
--- a/engines/tsage/core.h
+++ b/engines/tsage/core.h
@@ -507,6 +507,7 @@ public:
void setStrip(int frameNum);
void setStrip2(int frameNum);
void setZoom(int percent);
+ void updateZoom();
void changeZoom(int percent);
void setFrame(int frameNum);
void setFrame2(int frameNum);
diff --git a/engines/tsage/ringworld_logic.cpp b/engines/tsage/ringworld_logic.cpp
index 7d6980045f..fa7a6f1f31 100644
--- a/engines/tsage/ringworld_logic.cpp
+++ b/engines/tsage/ringworld_logic.cpp
@@ -95,6 +95,8 @@ Scene *SceneFactory::createScene(int sceneNumber) {
case 2310: return new Scene2310();
// Starcraft - Lander Bay
case 2320: return new Scene2320();
+ // Scene 2400 - Descending in Lander
+ case 2400: return new Scene2400();
/* Scene group 4 */
diff --git a/engines/tsage/ringworld_scenes3.cpp b/engines/tsage/ringworld_scenes3.cpp
index 6c793c83b4..a12a7c41f0 100644
--- a/engines/tsage/ringworld_scenes3.cpp
+++ b/engines/tsage/ringworld_scenes3.cpp
@@ -6034,6 +6034,65 @@ void Scene2320::signal() {
}
}
+/*--------------------------------------------------------------------------
+ * Scene 2400 - Descending in Lander
+ *
+ *--------------------------------------------------------------------------*/
+
+void Scene2400::Action1::signal() {
+ switch (_actionIndex++) {
+ case 0:
+ setDelay(60);
+ break;
+ case 1:
+ ADD_MOVER(_globals->_player, 160, 71);
+ break;
+ case 2:
+ ADD_MOVER(_globals->_player, 160, 360);
+ break;
+ case 3:
+ _globals->_player._moveDiff = Common::Point(1, 1);
+ ADD_MOVER(_globals->_player, 140, 375);
+ break;
+ case 4:
+ ADD_MOVER(_globals->_player, 87, 338);
+ break;
+ case 5:
+ _globals->_player.flag100();
+ setDelay(60);
+ break;
+ case 6:
+ _globals->_sceneManager.changeScene(4000);
+ break;
+ }
+}
+void Scene2400::Action1::dispatch() {
+ Action::dispatch();
+ if ((_actionIndex == 4) && (_globals->_player._percent > 5))
+ _globals->_player.changeZoom(_globals->_player._percent - 2);
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene2400::postInit(SceneObjectList *OwnerList) {
+ loadScene(2400);
+ Scene::postInit();
+ setZoomPercents(0, 100, 200, 100);
+
+ _globals->_player.postInit();
+ _globals->_player.setVisage(2410);
+ _globals->_player.setPosition(Common::Point(340, -10));
+ _globals->_player.animate(ANIM_MODE_2, NULL);
+ _globals->_player.disableControl();
+
+ setAction(&_action1);
+
+ _globals->_sceneManager._scene->_sceneBounds.centre(_globals->_player._position.x, _globals->_player._position.y);
+ _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds);
+ _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.left / 160) * 160;
+
+ _globals->_soundHandler.startSound(153);
+}
} // End of namespace tSage
diff --git a/engines/tsage/ringworld_scenes3.h b/engines/tsage/ringworld_scenes3.h
index 24b3ee3f22..420307ca99 100644
--- a/engines/tsage/ringworld_scenes3.h
+++ b/engines/tsage/ringworld_scenes3.h
@@ -886,6 +886,20 @@ public:
virtual void signal();
};
+class Scene2400: public Scene {
+ /* Actions */
+ class Action1: public Action {
+ public:
+ virtual void signal();
+ virtual void dispatch();
+ };
+public:
+ Action1 _action1;
+ SceneObject _object;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+};
+
} // End of namespace tSage
#endif
diff --git a/engines/tsage/scenes.cpp b/engines/tsage/scenes.cpp
index a1dfe0b2ce..40f29e661a 100644
--- a/engines/tsage/scenes.cpp
+++ b/engines/tsage/scenes.cpp
@@ -164,7 +164,7 @@ void SceneManager::setBackSurface() {
if (size > 96000) {
if (_globals->_sceneManager._scene->_backgroundBounds.width() <= SCREEN_WIDTH) {
// Standard size creation
- _globals->_sceneManager._scene->_backSurface.create(SCREEN_WIDTH, SCREEN_HEIGHT);
+ _globals->_sceneManager._scene->_backSurface.create(SCREEN_WIDTH, SCREEN_HEIGHT * 3 / 2);
_globals->_sceneManager._scrollerRect = Rect(0, 30, SCREEN_WIDTH, SCREEN_HEIGHT - 30);
} else {
// Wide screen needs extra space to allow for scrolling