aboutsummaryrefslogtreecommitdiff
path: root/engines/tsage
diff options
context:
space:
mode:
authorstrangerke2011-03-31 01:18:50 +0200
committerstrangerke2011-03-31 01:18:50 +0200
commit05df97214e54e2f8537eb3ed8822682d22343035 (patch)
tree560c74353ac15c975dc6ab618736a22ecb6047c8 /engines/tsage
parent8d25157923dabf207e46ae26db14e412d3257840 (diff)
downloadscummvm-rg350-05df97214e54e2f8537eb3ed8822682d22343035.tar.gz
scummvm-rg350-05df97214e54e2f8537eb3ed8822682d22343035.tar.bz2
scummvm-rg350-05df97214e54e2f8537eb3ed8822682d22343035.zip
TSAGE: Add scene 9150
Diffstat (limited to 'engines/tsage')
-rw-r--r--engines/tsage/ringworld_logic.cpp1
-rw-r--r--engines/tsage/ringworld_scenes10.cpp115
-rw-r--r--engines/tsage/ringworld_scenes10.h29
3 files changed, 145 insertions, 0 deletions
diff --git a/engines/tsage/ringworld_logic.cpp b/engines/tsage/ringworld_logic.cpp
index 5c026a2dd9..4dd39a6a29 100644
--- a/engines/tsage/ringworld_logic.cpp
+++ b/engines/tsage/ringworld_logic.cpp
@@ -139,6 +139,7 @@ Scene *SceneFactory::createScene(int sceneNumber) {
/* Scene group 10 */
case 9100: return new Scene9100();
+ case 9150: return new Scene9150();
case 9350: return new Scene9350();
case 9700: return new Scene9700();
case 9750: return new Scene9750();
diff --git a/engines/tsage/ringworld_scenes10.cpp b/engines/tsage/ringworld_scenes10.cpp
index 08a9738c97..b97b422497 100644
--- a/engines/tsage/ringworld_scenes10.cpp
+++ b/engines/tsage/ringworld_scenes10.cpp
@@ -158,6 +158,121 @@ void Scene9100::postInit(SceneObjectList *OwnerList) {
}
/*--------------------------------------------------------------------------
+ * Scene 9150
+ *
+ *--------------------------------------------------------------------------*/
+void Scene9150::Object3::signal() {
+ switch (_field8A++) {
+ case 0:
+ _field88 = 10 + _globals->_randomSource.getRandomNumber(90);
+ break;
+ default:
+ animate(ANIM_MODE_5, this);
+ _field88 = 0;
+ break;
+ }
+}
+
+void Scene9150::Object3::dispatch() {
+ SceneObject::dispatch();
+ if ((_field88 != 0) && (--_field88 == 0))
+ signal();
+}
+
+void Scene9150::signal() {
+ switch (_sceneMode) {
+ case 9151:
+ case 9157:
+ _globals->_sceneManager.changeScene(9100);
+ break;
+ case 9153:
+ _globals->_sceneManager.changeScene(9300);
+ break;
+ case 9152:
+ case 9155:
+ case 9156:
+ _globals->_player.enableControl();
+ break;
+ case 9154:
+ default:
+ break;
+ }
+}
+
+void Scene9150::dispatch() {
+ if ((_field30A != 0) && (_sceneBounds.left == 0)) {
+ _object3._field88 = 0;
+ _field30A = 0;
+ _sceneHotspot3.setAction(&_sequenceManager2, 0, 9154, &_object3, 0);
+ _sceneHotspot10.remove();
+ }
+
+ if (_action != 0) {
+ _action->dispatch();
+ } else {
+ if (_globals->_player._position.x >= 160) {
+ if (_globals->_player._position.x > 630) {
+ _globals->_player.disableControl();
+ _sceneMode = 9157;
+ setAction(&_sequenceManager1, this, _sceneMode, &_globals->_player, 0);
+ }
+ } else {
+ _globals->_player.disableControl();
+ if (_globals->getFlag(11)) {
+ _globals->_soundHandler.startSound(286, 0, 127);
+ _sceneMode = 9153;
+ } else {
+ _sceneMode = 9156;
+ }
+ setAction(&_sequenceManager1, this, _sceneMode, &_globals->_player, 0);
+ }
+ }
+}
+
+void Scene9150::postInit(SceneObjectList *OwnerList) {
+ Scene::postInit();
+ setZoomPercents(0, 100, 200, 100);
+ _globals->_player.postInit();
+
+ _object3.postInit();
+ _field30A = 1;
+ _object3.setVisage(9151);
+ _object3._strip = 1;
+ _object3._frame = 1;
+ _object3.setPosition(Common::Point(312, 95), 0);
+ _object3.signal();
+
+ _sceneHotspot1.quickInit(0, 0, 200, 94, 9150, 46, -1);
+ _sceneHotspot2.quickInit(51, 90, 118, 230, 9150, 47, -1);
+ _sceneHotspot3.quickInit(182, 104, 200, 320, 9150, 48, 49);
+ _sceneHotspot4.quickInit(103, 292, 152, 314, 9150, 50, 51);
+ _sceneHotspot5.quickInit(115, 350, 160, 374, 9150, 52, 53);
+ _sceneHotspot6.quickInit(0, 471, 200, 531, 9150, 54, 55);
+ _sceneHotspot7.quickInit(170, 320, 185, 640, 9150, 56, -1);
+ _sceneHotspot9.quickInit(157, 107, 186, 320, 9150, 56, -1);
+ _sceneHotspot8.quickInit(133, 584, 142, 640, 9150, 57, -1);
+ _sceneHotspot10.quickInit(83, 304, 103, 323, 9150, 58, 59);
+
+ _globals->_soundHandler.startSound(285, 0, 127);
+ _globals->_player.disableControl();
+
+ if (_globals->getFlag(20)) {
+ _globals->_scrollFollower = &_globals->_player;
+ if (_globals->getFlag(11))
+ _sceneMode = 9155;
+ else
+ _sceneMode = 9152;
+ setAction(&_sequenceManager1, this, _sceneMode, &_globals->_player, 0);
+ } else {
+ _sceneMode = 9151;
+ _object2.postInit();
+ _object2.flag100();
+ _object1.postInit();
+ setAction(&_sequenceManager1, this, _sceneMode, &_globals->_player, &_object1, &_object2, 0);
+ }
+}
+
+/*--------------------------------------------------------------------------
* Scene 9350
*
*--------------------------------------------------------------------------*/
diff --git a/engines/tsage/ringworld_scenes10.h b/engines/tsage/ringworld_scenes10.h
index 6461b665d8..98b98c9a7b 100644
--- a/engines/tsage/ringworld_scenes10.h
+++ b/engines/tsage/ringworld_scenes10.h
@@ -61,6 +61,35 @@ class Scene9100: public Scene {
virtual void dispatch();
};
+class Scene9150: public Scene {
+ class Object3: public SceneObject4 {
+ public:
+ virtual void signal();
+ virtual void dispatch();
+ };
+
+ SequenceManager _sequenceManager1;
+ SequenceManager _sequenceManager2;
+ SceneObject _object1;
+ SceneObject _object2;
+ Object3 _object3;
+ int _field30A; //_fieldB96;
+ SceneHotspot_3 _sceneHotspot1;
+ SceneHotspot_3 _sceneHotspot2;
+ SceneHotspot_3 _sceneHotspot3;
+ SceneHotspot_3 _sceneHotspot4;
+ SceneHotspot_3 _sceneHotspot5;
+ SceneHotspot_3 _sceneHotspot6;
+ SceneHotspot_3 _sceneHotspot7;
+ SceneHotspot_3 _sceneHotspot8;
+ SceneHotspot_3 _sceneHotspot9;
+ SceneHotspot_3 _sceneHotspot10;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+ virtual void dispatch();
+};
+
class Scene9350: public Scene {
/* Objects */
class Object1: public SceneObject {