aboutsummaryrefslogtreecommitdiff
path: root/engines/tsage
diff options
context:
space:
mode:
authorStrangerke2012-01-20 19:03:12 +0100
committerStrangerke2012-01-20 19:03:12 +0100
commit69a2c72c47558dfd54762d2361b0fc2c5e680317 (patch)
treed0062a751bea0e92c9252cb8943a4487812e1ded /engines/tsage
parent00a9d394a502598afcc3502d0bdd7cee88a065cc (diff)
downloadscummvm-rg350-69a2c72c47558dfd54762d2361b0fc2c5e680317.tar.gz
scummvm-rg350-69a2c72c47558dfd54762d2361b0fc2c5e680317.tar.bz2
scummvm-rg350-69a2c72c47558dfd54762d2361b0fc2c5e680317.zip
TSAGE: R2R - Implement scene 1800
Diffstat (limited to 'engines/tsage')
-rw-r--r--engines/tsage/ringworld2/ringworld2_logic.cpp2
-rw-r--r--engines/tsage/ringworld2/ringworld2_scenes1.cpp524
-rw-r--r--engines/tsage/ringworld2/ringworld2_scenes1.h53
3 files changed, 579 insertions, 0 deletions
diff --git a/engines/tsage/ringworld2/ringworld2_logic.cpp b/engines/tsage/ringworld2/ringworld2_logic.cpp
index 15d2331cba..ff694a69fd 100644
--- a/engines/tsage/ringworld2/ringworld2_logic.cpp
+++ b/engines/tsage/ringworld2/ringworld2_logic.cpp
@@ -129,7 +129,9 @@ Scene *Ringworld2Game::createScene(int sceneNumber) {
case 1700:
return new Scene1700();
case 1750:
+ error("Missing scene %d from group 1", sceneNumber);
case 1800:
+ return new Scene1800();
case 1850:
case 1875:
case 1900:
diff --git a/engines/tsage/ringworld2/ringworld2_scenes1.cpp b/engines/tsage/ringworld2/ringworld2_scenes1.cpp
index 9a0a34a93e..2fa7f50cb4 100644
--- a/engines/tsage/ringworld2/ringworld2_scenes1.cpp
+++ b/engines/tsage/ringworld2/ringworld2_scenes1.cpp
@@ -5640,5 +5640,529 @@ void Scene1700::signal() {
}
}
+/*--------------------------------------------------------------------------
+ * Scene 1800 -
+ *
+ *--------------------------------------------------------------------------*/
+Scene1800::Scene1800() {
+ _field412 = 0;
+}
+
+void Scene1800::synchronize(Serializer &s) {
+ SceneExt::synchronize(s);
+
+ s.syncAsSint16LE(_field412);
+}
+
+bool Scene1800::Hotspot5::startAction(CursorType action, Event &event) {
+ if ((action != R2_9) && (action != R2_39))
+ return false;
+
+ Scene1800 *scene = (Scene1800 *)R2_GLOBALS._sceneManager._scene;
+
+ R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
+
+ if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
+ if (R2_GLOBALS._v565F6 == 1201) {
+ scene->_stripManager.start(548, this);
+ } else if (R2_GLOBALS.getFlag(66)) {
+ return false;
+ } else {
+ scene->_stripManager.start(546, this);
+ }
+ } else {
+ if (R2_GLOBALS._v565F6 == 1201) {
+ scene->_stripManager.start(549, this);
+ } else if (R2_GLOBALS.getFlag(66)) {
+ return false;
+ } else {
+ scene->_stripManager.start(547, this);
+ }
+ }
+
+ R2_GLOBALS.setFlag(66);
+ return true;
+}
+
+bool Scene1800::Actor6::startAction(CursorType action, Event &event) {
+ if (action != CURSOR_USE)
+ return SceneActor::startAction(action, event);
+
+ if (!R2_GLOBALS.getFlag(14))
+ return false;
+
+ if (R2_GLOBALS._player._characterIndex != R2_QUINN)
+ return SceneActor::startAction(action, event);
+
+ Scene1800 *scene = (Scene1800 *)R2_GLOBALS._sceneManager._scene;
+ R2_GLOBALS._player.disableControl();
+
+ if (_frame == 1) {
+ R2_GLOBALS.setFlag(64);
+ scene->_sceneMode = 1810;
+ scene->setAction(&scene->_sequenceManager, scene, 1810, &R2_GLOBALS._player, &scene->_actor6, &scene->_actor4, &scene->_actor5, NULL);
+ } else {
+ R2_GLOBALS.clearFlag(64);
+ scene->_sceneMode = 1811;
+ scene->setAction(&scene->_sequenceManager, scene, 1811, &R2_GLOBALS._player, &scene->_actor6, &scene->_actor4, &scene->_actor5, NULL);
+ }
+ return true;
+}
+
+bool Scene1800::Actor7::startAction(CursorType action, Event &event) {
+ if (action != CURSOR_USE)
+ return SceneActor::startAction(action, event);
+
+ Scene1800 *scene = (Scene1800 *)R2_GLOBALS._sceneManager._scene;
+
+ if (R2_GLOBALS._player._characterIndex == R2_SEEKER) {
+ R2_GLOBALS._player.disableControl();
+ if (scene->_field412 >= 2) {
+ if (R2_GLOBALS.getFlag(14)) {
+ scene->_sceneMode = 1809;
+ scene->setAction(&scene->_sequenceManager, scene, 1809, &R2_GLOBALS._player, &scene->_actor7, NULL);
+ R2_GLOBALS.clearFlag(14);
+ } else {
+ scene->_sceneMode = 1808;
+ scene->setAction(&scene->_sequenceManager, scene, 1808, &R2_GLOBALS._player, &scene->_actor7, NULL);
+ R2_GLOBALS.setFlag(14);
+ }
+ } else {
+ scene->_sceneMode = 1813;
+ scene->setAction(&scene->_sequenceManager, scene, 1813, &R2_GLOBALS._player, NULL);
+ }
+ } else if (R2_GLOBALS.getFlag(14)) {
+ return SceneActor::startAction(action, event);
+ } else {
+ R2_GLOBALS._player.disableControl();
+ scene->_sceneMode = 1812;
+ scene->setAction(&scene->_sequenceManager, scene, 1812, &R2_GLOBALS._player, NULL);
+ }
+
+ return true;
+}
+
+bool Scene1800::Actor8::startAction(CursorType action, Event &event) {
+ if (action != CURSOR_USE)
+ return SceneActor::startAction(action, event);
+
+ Scene1800 *scene = (Scene1800 *)R2_GLOBALS._sceneManager._scene;
+
+ if (_position.x < 160) {
+ if (scene->_actor4._frame == 1) {
+ return SceneActor::startAction(action, event);
+ } else {
+ R2_GLOBALS.setFlag(29);
+ R2_GLOBALS._player.disableControl();
+ if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
+ if (R2_GLOBALS.getFlag(14)) {
+ scene->_sceneMode = 1804;
+ scene->setAction(&scene->_sequenceManager, scene, 1804, &R2_GLOBALS._player, &scene->_actor2, &scene->_actor8, NULL);
+ } else {
+ scene->_sceneMode = 1;
+ scene->setAction(&scene->_sequenceManager, scene, 1809, &R2_GLOBALS._player, &scene->_actor2, &scene->_actor7, NULL);
+ R2_GLOBALS.clearFlag(14);
+ }
+ } else {
+ if (R2_GLOBALS.getFlag(14)) {
+ scene->_sceneMode = 1;
+ scene->setAction(&scene->_sequenceManager, scene, 1809, &R2_GLOBALS._player, &scene->_actor7, NULL);
+ R2_GLOBALS.clearFlag(14);
+ } else {
+ scene->_sceneMode = 1805;
+ scene->setAction(&scene->_sequenceManager, scene, 1805, &R2_GLOBALS._player, &scene->_actor2, &scene->_actor8, NULL);
+ }
+ }
+ }
+ } else {
+ if (scene->_actor4._frame == 1) {
+ return SceneActor::startAction(action, event);
+ } else {
+ R2_GLOBALS.clearFlag(29);
+ R2_GLOBALS._player.disableControl();
+ if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
+ if (R2_GLOBALS.getFlag(14)) {
+ scene->_sceneMode = 2;
+ scene->setAction(&scene->_sequenceManager, scene, 1809, &R2_GLOBALS._player, &scene->_actor2, &scene->_actor7, NULL);
+ R2_GLOBALS.clearFlag(14);
+ } else {
+ scene->_sceneMode = 1806;
+ scene->setAction(&scene->_sequenceManager, scene, 1806, &R2_GLOBALS._player, &scene->_actor2, &scene->_actor9, NULL);
+ }
+ } else {
+ if (R2_GLOBALS.getFlag(14)) {
+ scene->_sceneMode = 2;
+ scene->setAction(&scene->_sequenceManager, scene, 1809, &R2_GLOBALS._player, &scene->_actor7, NULL);
+ R2_GLOBALS.clearFlag(14);
+ } else {
+ scene->_sceneMode = 1807;
+ scene->setAction(&scene->_sequenceManager, scene, 1807, &R2_GLOBALS._player, &scene->_actor2, &scene->_actor9, NULL);
+ }
+ }
+ }
+ }
+
+ return true;
+}
+
+void Scene1800::Exit1::changeScene() {
+ Scene1800 *scene = (Scene1800 *)R2_GLOBALS._sceneManager._scene;
+
+ _enabled = false;
+ R2_GLOBALS._events.setCursor(CURSOR_ARROW);
+ R2_GLOBALS._player.disableControl();
+ if (R2_GLOBALS.getFlag(14)) {
+ scene->_sceneMode = 3;
+ if (R2_GLOBALS._player._characterIndex == R2_QUINN)
+ scene->setAction(&scene->_sequenceManager, scene, 1809, &R2_GLOBALS._player, &scene->_actor7, NULL);
+ else
+ scene->setAction(&scene->_sequenceManager, scene, 1809, &scene->_actor2, &scene->_actor7, NULL);
+ R2_GLOBALS.clearFlag(14);
+ } else {
+ scene->_sceneMode = 1802;
+ if (R2_GLOBALS._player._characterIndex == R2_QUINN)
+ scene->setAction(&scene->_sequenceManager, scene, 1802, &R2_GLOBALS._player, &scene->_actor2, NULL);
+ else
+ scene->setAction(&scene->_sequenceManager, scene, 1802, &R2_GLOBALS._player, &scene->_actor2, NULL);
+ }
+}
+
+void Scene1800::postInit(SceneObjectList *OwnerList) {
+ loadScene(1800);
+ SceneExt::postInit();
+ R2_GLOBALS._sound1.play(116);
+ _stripManager.addSpeaker(&_quinnSpeaker);
+ _stripManager.addSpeaker(&_seekerSpeaker);
+
+ if (R2_GLOBALS._sceneManager._previousScene == -1)
+ R2_GLOBALS._v565F6 = 1201;
+
+ if (R2_GLOBALS._v565F6 == 1201)
+ _field412 = 2;
+ else
+ _field412 = 0;
+
+ scalePalette(65, 65, 65);
+ _exit1.setDetails(Rect(0, 160, 319, 168), EXITCURSOR_S, 1800);
+ _item5.setDetails(Rect(0, 0, 320, 200), -1, -1, -1, -1, 1, NULL);
+
+ _actor6.postInit();
+ _actor6.setup(1801, 4, 1);
+ _actor6.setPosition(Common::Point(170, 24));
+ _actor6.setDetails(1800, 13, 14, 15, 1, (SceneItem *) NULL);
+
+ _actor7.postInit();
+ _actor7.setup(1801, 3, 1);
+ _actor7.setPosition(Common::Point(160, 139));
+ _actor7.setDetails(1800, 6, -1, -1, 1, (SceneItem *) NULL);
+
+ _actor8.postInit();
+ _actor8.setup(1800, 1, 1);
+ _actor8.setPosition(Common::Point(110, 78));
+ _actor8.fixPriority(135);
+ _actor8.setDetails(1800, 20, -1, -1, 1, (SceneItem *) NULL);
+
+ _actor9.postInit();
+ _actor9.setup(1800, 2, 1);
+ _actor9.setPosition(Common::Point(209, 78));
+ _actor9.fixPriority(135);
+ _actor9.setDetails(1800, 20, -1, -1, 1, (SceneItem *) NULL);
+
+ _actor4.postInit();
+ if ((_field412 != 1) && (_field412 != 3) && (!R2_GLOBALS.getFlag(64)))
+ _actor4.setup(1801, 2, 1);
+ else
+ _actor4.setup(1801, 2, 10);
+ _actor4.setPosition(Common::Point(76, 142));
+ _actor4.setDetails(1800, 3, -1, -1, 1, (SceneItem *) NULL);
+
+ _actor5.postInit();
+ if ((_field412 != 1) && (_field412 != 3) && (!R2_GLOBALS.getFlag(64)))
+ _actor5.setup(1801, 1, 1);
+ else
+ _actor5.setup(1801, 1, 10);
+ _actor5.setPosition(Common::Point(243, 142));
+ _actor5.setDetails(1800, 3, -1, -1, 1, (SceneItem *) NULL);
+
+ R2_GLOBALS._player.postInit();
+ R2_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
+ if (R2_GLOBALS.getFlag(14)) {
+ R2_GLOBALS._player.animate(ANIM_MODE_NONE, NULL);
+ R2_GLOBALS._player.setObjectWrapper(NULL);
+ R2_GLOBALS._player.setup(1801, 5, 12);
+ R2_GLOBALS._player.setPosition(Common::Point(160, 139));
+ R2_GLOBALS._walkRegions.enableRegion(9);
+ _actor7.hide();
+ } else {
+ R2_GLOBALS._player.setVisage(1507);
+ }
+ R2_GLOBALS._player._moveDiff = Common::Point(4, 2);
+ } else {
+ R2_GLOBALS._player.setVisage(1503);
+ R2_GLOBALS._player._moveDiff = Common::Point(2, 2);
+ }
+
+ _actor2.postInit();
+ _actor2.animate(ANIM_MODE_1, NULL);
+ _actor2.setObjectWrapper(new SceneObjectWrapper());
+ if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
+ if (R2_GLOBALS.getFlag(14)) {
+ _actor2.animate(ANIM_MODE_NONE, NULL);
+ _actor2.setObjectWrapper(NULL);
+ _actor2.setup(1801, 5, 12);
+
+ R2_GLOBALS._walkRegions.enableRegion(9);
+ _actor7.hide();
+ } else {
+ _actor2.setup(1507, 1, 1);
+ _actor2.setPosition(Common::Point(180, 160));
+ }
+ _actor2.setDetails(9002, 0, 4, 3, 1, (SceneItem *) NULL);
+ _actor2._moveDiff = Common::Point(4, 2);
+ } else {
+ _actor2.setDetails(9001, 0, 5, 3, 1, (SceneItem *) NULL);
+ _actor2.setVisage(1503);
+ _actor2._moveDiff = Common::Point(2, 2);
+ }
+
+ if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 1800) {
+ if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
+ R2_GLOBALS._player.setPosition(Common::Point(114, 150));
+ R2_GLOBALS._player.setStrip(5);
+ if (R2_GLOBALS.getFlag(14)) {
+ _actor2.setPosition(Common::Point(160, 139));
+ R2_GLOBALS._walkRegions.enableRegion(8);
+ } else {
+ _actor2.setPosition(Common::Point(209, 150));
+ _actor2.setStrip(6);
+ R2_GLOBALS._walkRegions.enableRegion(8);
+ }
+ } else {
+ if (R2_GLOBALS.getFlag(14)) {
+ R2_GLOBALS._player.setup(1801, 5, 12);
+ R2_GLOBALS._player.setPosition(Common::Point(160, 139));
+ } else {
+ R2_GLOBALS._player.setPosition(Common::Point(209, 150));
+ R2_GLOBALS._player.setStrip(6);
+ }
+ _actor2.setPosition(Common::Point(114, 150));
+ _actor2.setStrip(5);
+ R2_GLOBALS._walkRegions.enableRegion(10);
+ R2_GLOBALS._walkRegions.enableRegion(11);
+ }
+ } else {
+ if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
+ R2_GLOBALS._player.setPosition(Common::Point(140, 160));
+ _actor2.setPosition(Common::Point(180, 160));
+ } else {
+ R2_GLOBALS._player.setPosition(Common::Point(180, 160));
+ _actor2.setPosition(Common::Point(140, 160));
+ }
+ }
+
+ _actor1.postInit();
+ _actor1.fixPriority(10);
+ if (R2_GLOBALS._player._characterIndex == R2_QUINN)
+ _actor1.setVisage(1111);
+ else
+ _actor1.setVisage(1110);
+
+ _actor1._effect = 5;
+ _actor1._field9C = _field312;
+
+ R2_GLOBALS._player._linkedActor = &_actor1;
+
+ _actor3.postInit();
+ _actor3.fixPriority(10);
+ if (R2_GLOBALS._player._characterIndex == R2_QUINN)
+ _actor3.setVisage(1110);
+ else
+ _actor3.setVisage(1111);
+
+ _actor3._effect = 5;
+ _actor3._field9C = _field312;
+
+ _actor2._linkedActor = &_actor3;
+
+ R2_GLOBALS._player._characterScene[1] = 1800;
+ R2_GLOBALS._player._characterScene[2] = 1800;
+
+ _item2.setDetails(Rect(128, 95, 190, 135), 1800, 10, -1, -1, 1, NULL);
+ _item1.setDetails(Rect(95, 3, 223, 135), 1800, 0, -1, -1, 1, NULL);
+
+ // Original was calling _item3.setDetails(Rect(1800, 11, 24, 23), 25, -1, -1, -1, 1, NULL);
+ // This is *wrong*. The following statement is a wild guess based on good common sense
+ _item3.setDetails(11, 1800, 23, 24, 25);
+ _item4.setDetails(Rect(0, 0, 320, 200), 1800, 17, -1, 19, 1, NULL);
+
+ R2_GLOBALS._player.disableControl();
+ if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 1800) {
+ if ((R2_GLOBALS.getFlag(14)) && (R2_GLOBALS._player._characterIndex == R2_SEEKER)) {
+ R2_GLOBALS._player.enableControl(CURSOR_USE);
+ R2_GLOBALS._player._canWalk = false;
+ } else {
+ R2_GLOBALS._player.enableControl(CURSOR_ARROW);
+ }
+ } else if (R2_GLOBALS._player._oldCharacterScene[R2_GLOBALS._player._characterIndex] == 1850) {
+ if (R2_GLOBALS.getFlag(29)) {
+ if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
+ _sceneMode = 1814;
+ setAction(&_sequenceManager, this, 1814, &R2_GLOBALS._player, &_actor2, &_actor8, NULL);
+ } else {
+ _sceneMode = 1815;
+ setAction(&_sequenceManager, this, 1815, &R2_GLOBALS._player, &_actor2, &_actor8, NULL);
+ }
+ } else {
+ if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
+ _sceneMode = 1816;
+ setAction(&_sequenceManager, this, 1816, &R2_GLOBALS._player, &_actor2, &_actor9, NULL);
+ } else {
+ _sceneMode = 1817;
+ setAction(&_sequenceManager, this, 1817, &R2_GLOBALS._player, &_actor2, &_actor9, NULL);
+ }
+ }
+ } else {
+ if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
+ _sceneMode = 1800;
+ setAction(&_sequenceManager, this, 1800, &R2_GLOBALS._player, &_actor2, NULL);
+ } else {
+ _sceneMode = 1801;
+ setAction(&_sequenceManager, this, 1801, &R2_GLOBALS._player, &_actor2, NULL);
+ }
+ }
+
+ R2_GLOBALS._player._oldCharacterScene[1] = 1800;
+ R2_GLOBALS._player._oldCharacterScene[2] = 1800;
+}
+
+void Scene1800::signal() {
+ switch (_sceneMode) {
+ case 1:
+ if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
+ _sceneMode = 1804;
+ setAction(&_sequenceManager, this, 1804, &R2_GLOBALS._player, &_actor2, &_actor8, NULL);
+ } else {
+ _sceneMode = 1805;
+ setAction(&_sequenceManager, this, 1805, &R2_GLOBALS._player, &_actor2, &_actor8, NULL);
+ }
+ break;
+ case 2:
+ if (R2_GLOBALS._player._characterIndex == R2_QUINN) {
+ _sceneMode = 1806;
+ setAction(&_sequenceManager, this, 1806, &R2_GLOBALS._player, &_actor2, &_actor9, NULL);
+ } else {
+ _sceneMode = 1807;
+ setAction(&_sequenceManager, this, 1807, &R2_GLOBALS._player, &_actor2, &_actor9, NULL);
+ }
+ break;
+ case 3:
+ _sceneMode = 1802;
+ if (R2_GLOBALS._player._characterIndex == R2_QUINN)
+ setAction(&_sequenceManager, this, 1802, &R2_GLOBALS._player, &_actor2, NULL);
+ else
+ setAction(&_sequenceManager, this, 1803, &R2_GLOBALS._player, &_actor2, NULL);
+ break;
+ case 10:
+ // No break on purpose
+ case 11:
+ R2_GLOBALS._player.enableControl(CURSOR_TALK);
+ break;
+ case 12:
+ R2_GLOBALS._player.enableControl(CURSOR_TALK);
+ R2_GLOBALS._player._canWalk = false;
+ break;
+ case 13:
+ _sceneMode = 14;
+ R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
+ R2_GLOBALS._player.setup(1801, 7, 1);
+ R2_GLOBALS._player.animate(ANIM_MODE_8, NULL);
+ _stripManager.start(550, this);
+ break;
+ case 14:
+ _sceneMode = 15;
+ R2_GLOBALS._player.disableControl();
+ R2_GLOBALS._player.setup(1801, 6, 1);
+ R2_GLOBALS._player.animate(ANIM_MODE_6, this);
+ break;
+ case 15:
+ R2_GLOBALS._player.setup(1503, 4, 1);
+ R2_GLOBALS._player.animate(ANIM_MODE_1, NULL);
+ R2_GLOBALS._player.enableControl(CURSOR_USE);
+ break;
+ case 1800:
+ R2_GLOBALS._walkRegions.enableRegion(8);
+ if (R2_GLOBALS.getFlag(63))
+ R2_GLOBALS._player.enableControl(CURSOR_USE);
+ else {
+ _sceneMode = 10;
+ R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
+ _stripManager.start(544, this);
+ }
+ break;
+ case 1801:
+ R2_GLOBALS._walkRegions.enableRegion(10);
+ R2_GLOBALS._walkRegions.enableRegion(11);
+ R2_GLOBALS.setFlag(63);
+
+ // The following check is completely dumb.
+ // Either an original bug, or dead code.
+ if (R2_GLOBALS.getFlag(63)) {
+ R2_GLOBALS._player.enableControl(CURSOR_ARROW);
+ } else {
+ _sceneMode = 10;
+ R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
+ _stripManager.start(545, this);
+ }
+ break;
+ case 1802:
+ R2_GLOBALS.clearFlag(14);
+ R2_GLOBALS._sceneManager.changeScene(1700);
+ break;
+ case 1804:
+ // No break on purpose
+ case 1805:
+ // No break on purpose
+ case 1806:
+ // No break on purpose
+ case 1807:
+ R2_GLOBALS.clearFlag(14);
+ R2_GLOBALS._sceneManager.changeScene(1850);
+ break;
+ case 1808:
+ _sceneMode = 12;
+ R2_GLOBALS._events.setCursor(CURSOR_CROSSHAIRS);
+ _stripManager.start(553, this);
+ break;
+ case 1812:
+ _sceneMode = 13;
+ R2_GLOBALS._player.animate(ANIM_MODE_5, this);
+ break;
+ case 1814:
+ // No break on purpose
+ case 1815:
+ R2_GLOBALS._walkRegions.enableRegion(10);
+ R2_GLOBALS._walkRegions.enableRegion(11);
+ R2_GLOBALS._player.enableControl();
+ break;
+ case 1816:
+ // No break on purpose
+ case 1817:
+ R2_GLOBALS._walkRegions.enableRegion(8);
+ R2_GLOBALS._player.enableControl();
+ break;
+ default:
+ R2_GLOBALS._player.enableControl();
+ break;
+ }
+}
+
+void Scene1800::saveCharacter(int characterIndex) {
+ if (R2_GLOBALS._player._characterIndex == R2_MIRANDA)
+ R2_GLOBALS._sound1.fadeOut2(NULL);
+
+ SceneExt::saveCharacter(characterIndex);
+}
+
} // 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 cfd701b2d5..08d35edf06 100644
--- a/engines/tsage/ringworld2/ringworld2_scenes1.h
+++ b/engines/tsage/ringworld2/ringworld2_scenes1.h
@@ -581,6 +581,59 @@ public:
virtual void remove();
virtual void signal();
};
+
+class Scene1800 : public SceneExt {
+ class Hotspot5 : public NamedHotspot {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ class Actor6 : public SceneActor {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Actor7 : public SceneActor {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+ class Actor8 : public SceneActor {
+ public:
+ virtual bool startAction(CursorType action, Event &event);
+ };
+
+ class Exit1 : public SceneExit {
+ public:
+ virtual void changeScene();
+ };
+public:
+ int _field412;
+ SpeakerQuinn _quinnSpeaker;
+ SpeakerSeeker _seekerSpeaker;
+ NamedHotspot _item1;
+ NamedHotspot _item2;
+ NamedHotspot _item3;
+ NamedHotspot _item4;
+ Hotspot5 _item5;
+ SceneActor _actor1;
+ SceneActor _actor2;
+ SceneActor _actor3;
+ SceneActor _actor4;
+ SceneActor _actor5;
+ Actor6 _actor6;
+ Actor7 _actor7;
+ Actor8 _actor8;
+ Actor8 _actor9;
+ Exit1 _exit1;
+ SequenceManager _sequenceManager;
+
+ Scene1800();
+ void synchronize(Serializer &s);
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+ virtual void saveCharacter(int characterIndex);
+};
+
} // End of namespace Ringworld2
} // End of namespace TsAGE