aboutsummaryrefslogtreecommitdiff
path: root/engines/tsage
diff options
context:
space:
mode:
authorPaul Gilbert2011-03-12 22:01:41 +1100
committerPaul Gilbert2011-03-12 22:01:41 +1100
commitaec1aa0b52294edcdb3eb53bdbba363abd68c208 (patch)
tree5eb83016fda8dbfda72a506b345d3ff298ad854b /engines/tsage
parent97a674ca09008fc0226b5822173d3a765a460ebf (diff)
downloadscummvm-rg350-aec1aa0b52294edcdb3eb53bdbba363abd68c208.tar.gz
scummvm-rg350-aec1aa0b52294edcdb3eb53bdbba363abd68c208.tar.bz2
scummvm-rg350-aec1aa0b52294edcdb3eb53bdbba363abd68c208.zip
TSAGE: In progress implementation of Scene #2320 - Starcraft - Hanger Bay
Diffstat (limited to 'engines/tsage')
-rw-r--r--engines/tsage/core.h4
-rw-r--r--engines/tsage/ringworld_logic.cpp2
-rw-r--r--engines/tsage/ringworld_logic.h8
-rw-r--r--engines/tsage/ringworld_scenes1.cpp58
-rw-r--r--engines/tsage/ringworld_scenes1.h8
-rw-r--r--engines/tsage/ringworld_scenes3.cpp818
-rw-r--r--engines/tsage/ringworld_scenes3.h70
7 files changed, 933 insertions, 35 deletions
diff --git a/engines/tsage/core.h b/engines/tsage/core.h
index a2588f4273..95dd4c6e19 100644
--- a/engines/tsage/core.h
+++ b/engines/tsage/core.h
@@ -539,7 +539,7 @@ public:
virtual void updateScreen();
};
-class SceneObject2: public SceneObject {
+class SceneObjectExt: public SceneObject {
public:
int _state;
@@ -547,7 +547,7 @@ public:
SceneObject::synchronise(s);
s.syncAsSint16LE(_state);
}
- virtual Common::String getClassName() { return "SceneObject2"; }
+ virtual Common::String getClassName() { return "SceneObjectExt"; }
};
class SceneText: public SceneObject {
diff --git a/engines/tsage/ringworld_logic.cpp b/engines/tsage/ringworld_logic.cpp
index 83806f28c7..5b86929772 100644
--- a/engines/tsage/ringworld_logic.cpp
+++ b/engines/tsage/ringworld_logic.cpp
@@ -92,6 +92,8 @@ Scene *SceneFactory::createScene(int sceneNumber) {
case 2300: return new Scene2300();
// Starcraft - Copy Protection Screen
case 2310: return new Scene2310();
+ // Starcraft - Lander Bay
+ case 2320: return new Scene2320();
/* Scene group 4 */
diff --git a/engines/tsage/ringworld_logic.h b/engines/tsage/ringworld_logic.h
index 1524a9412a..fd48dec0b6 100644
--- a/engines/tsage/ringworld_logic.h
+++ b/engines/tsage/ringworld_logic.h
@@ -34,6 +34,14 @@
namespace tSage {
+#define ADD_PLAYER_MOVER(X, Y) { Common::Point pt(X, Y); PlayerMover *mover = new PlayerMover(); \
+ _globals->_player.addMover(mover, &pt, this); }
+#define ADD_MOVER(OBJ, X, Y) { Common::Point pt(X, Y); NpcMover *mover = new NpcMover(); \
+ OBJ.addMover(mover, &pt, this); }
+#define ADD_MOVER2(OBJ, X, Y) { Common::Point pt(X, Y); NpcMover *mover = new NpcMover(); \
+ OBJ.addMover(mover, &pt, NULL); }
+
+
class SceneFactory {
public:
static Scene *createScene(int sceneNumber);
diff --git a/engines/tsage/ringworld_scenes1.cpp b/engines/tsage/ringworld_scenes1.cpp
index e1e72128b5..b156b8961f 100644
--- a/engines/tsage/ringworld_scenes1.cpp
+++ b/engines/tsage/ringworld_scenes1.cpp
@@ -308,7 +308,7 @@ void Scene20::Action2::signal() {
Common::Point pt(455, 77);
_globals->_player.addMover(mover, &pt, this);
ObjectMover2 *mover2 = new ObjectMover2();
- scene->_sceneObject2.addMover(mover2, 5, 10, &_globals->_player);
+ scene->_SceneObjectExt.addMover(mover2, 5, 10, &_globals->_player);
ObjectMover2 *mover3 = new ObjectMover2();
scene->_sceneObject3.addMover(mover3, 10, 15, &_globals->_player);
break;
@@ -370,7 +370,7 @@ void Scene20::Action3::signal() {
Common::Point pt(615, 81);
_globals->_player.addMover(npcMover, &pt, this);
ObjectMover2 *mover1 = new ObjectMover2();
- scene->_sceneObject2.addMover(mover1, 5, 10, &_globals->_player);
+ scene->_SceneObjectExt.addMover(mover1, 5, 10, &_globals->_player);
ObjectMover2 *mover2 = new ObjectMover2();
scene->_sceneObject3.addMover(mover2, 20, 25, &_globals->_player);
break;
@@ -383,7 +383,7 @@ void Scene20::Action3::signal() {
}
case 3: {
_globals->_player._moveDiff = Common::Point(10, 10);
- scene->_sceneObject2._moveDiff = Common::Point(10, 10);
+ scene->_SceneObjectExt._moveDiff = Common::Point(10, 10);
scene->_sceneObject3._moveDiff = Common::Point(10, 10);
npcMover = new NpcMover();
Common::Point pt(445, 132);
@@ -428,12 +428,12 @@ void Scene20::Action4::signal() {
Common::Point pt(486, 134);
_globals->_player.addMover(npcMover, &pt, this);
ObjectMover2 *mover1 = new ObjectMover2();
- scene->_sceneObject2.addMover(mover1, 20, 35, &_globals->_player);
+ scene->_SceneObjectExt.addMover(mover1, 20, 35, &_globals->_player);
break;
}
case 2: {
_globals->_player._moveDiff = Common::Point(12, 12);
- scene->_sceneObject2._moveDiff = Common::Point(12, 12);
+ scene->_SceneObjectExt._moveDiff = Common::Point(12, 12);
NpcMover *mover1 = new NpcMover();
Common::Point pt(486, 134);
scene->_sceneObject3.addMover(mover1, &pt, this);
@@ -442,7 +442,7 @@ void Scene20::Action4::signal() {
_globals->_player.addMover(mover2, &pt, NULL);
NpcMover *mover3 = new NpcMover();
pt = Common::Point(-15, 134);
- scene->_sceneObject2.addMover(mover3, &pt, NULL);
+ scene->_SceneObjectExt.addMover(mover3, &pt, NULL);
break;
}
case 3: {
@@ -462,21 +462,21 @@ void Scene20::Action4::signal() {
scene->_sceneObject4._moveDiff.x = 48;
ObjectMover3 *mover = new ObjectMover3();
- scene->_sceneObject4.addMover(mover, &scene->_sceneObject2, 4, this);
+ scene->_sceneObject4.addMover(mover, &scene->_SceneObjectExt, 4, this);
break;
}
case 5: {
scene->_sound.startSound(42);
scene->_sceneObject4.remove();
- scene->_sceneObject2.setVisage(21);
- scene->_sceneObject2.setStrip(1);
- scene->_sceneObject2.setFrame(1);
- scene->_sceneObject2.animate(ANIM_MODE_5, NULL);
+ scene->_SceneObjectExt.setVisage(21);
+ scene->_SceneObjectExt.setStrip(1);
+ scene->_SceneObjectExt.setFrame(1);
+ scene->_SceneObjectExt.animate(ANIM_MODE_5, NULL);
- scene->_sceneObject2._moveDiff.x = 4;
+ scene->_SceneObjectExt._moveDiff.x = 4;
NpcMover *mover1 = new NpcMover();
- Common::Point pt(scene->_sceneObject2._position.x - 12, scene->_sceneObject2._position.y + 5);
- scene->_sceneObject2.addMover(mover1, &pt, NULL);
+ Common::Point pt(scene->_SceneObjectExt._position.x - 12, scene->_SceneObjectExt._position.y + 5);
+ scene->_SceneObjectExt.addMover(mover1, &pt, NULL);
scene->_sceneObject5.postInit();
scene->_sceneObject5.setVisage(21);
@@ -491,8 +491,8 @@ void Scene20::Action4::signal() {
}
case 6: {
scene->_sound.startSound(42);
- scene->_sceneObject2.setStrip(2);
- scene->_sceneObject2.animate(ANIM_MODE_2, NULL);
+ scene->_SceneObjectExt.setStrip(2);
+ scene->_SceneObjectExt.animate(ANIM_MODE_2, NULL);
scene->_sceneObject5.remove();
_globals->_player.setVisage(21);
@@ -539,17 +539,17 @@ void Scene20::postInit(SceneObjectList *OwnerList) {
_globals->_player._moveDiff = Common::Point(10, 10);
_globals->_player.animate(ANIM_MODE_1, NULL);
- _sceneObject2.postInit();
- _sceneObject2.setVisage(20);
- _sceneObject2.setPosition(Common::Point(400, 69));
- _sceneObject2.animate(ANIM_MODE_1, NULL);
+ _SceneObjectExt.postInit();
+ _SceneObjectExt.setVisage(20);
+ _SceneObjectExt.setPosition(Common::Point(400, 69));
+ _SceneObjectExt.animate(ANIM_MODE_1, NULL);
_sceneObject3.postInit();
_sceneObject3.setVisage(20);
_sceneObject3.setPosition(Common::Point(395, 69));
_sceneObject3.animate(ANIM_MODE_1, NULL);
- _sceneObject2._moveDiff = Common::Point(10, 10);
+ _SceneObjectExt._moveDiff = Common::Point(10, 10);
_sceneObject3._moveDiff = Common::Point(10, 10);
_globals->_soundHandler.startSound(20);
_sound.startSound(21);
@@ -583,23 +583,23 @@ void Scene20::postInit(SceneObjectList *OwnerList) {
_globals->_player.setPriority2(50);
_globals->_player.animate(ANIM_MODE_1, NULL);
- _sceneObject2.postInit();
- _sceneObject2.setVisage(20);
- _sceneObject2.setPosition(Common::Point(583, 79));
- _sceneObject2.animate(ANIM_MODE_1, NULL);
+ _SceneObjectExt.postInit();
+ _SceneObjectExt.setVisage(20);
+ _SceneObjectExt.setPosition(Common::Point(583, 79));
+ _SceneObjectExt.animate(ANIM_MODE_1, NULL);
_sceneObject3.postInit();
_sceneObject3.setVisage(20);
_sceneObject3.setStrip(2);
- _sceneObject2.setPosition(Common::Point(595, 79));
- _sceneObject2.animate(ANIM_MODE_1, NULL);
+ _SceneObjectExt.setPosition(Common::Point(595, 79));
+ _SceneObjectExt.animate(ANIM_MODE_1, NULL);
if ((_globals->getFlag(120) && _globals->getFlag(116)) ||
(_globals->getFlag(117) && _globals->getFlag(119))) {
setAction(&_action3);
} else if (_globals->getFlag(104)) {
_sceneMode = 21;
- setAction(&_sequenceManager, this, 21, &_globals->_player, &_sceneObject2, NULL);
+ setAction(&_sequenceManager, this, 21, &_globals->_player, &_SceneObjectExt, NULL);
} else {
_sceneObject3._moveDiff = Common::Point(8, 8);
setAction(&_action4);
@@ -2108,7 +2108,7 @@ void Scene60::Object6::doAction(int action) {
}
}
-void Scene60::SceneObject2::synchronise(Serialiser &s) {
+void Scene60::SceneObjectExt::synchronise(Serialiser &s) {
s.syncAsUint16LE(_state);
}
diff --git a/engines/tsage/ringworld_scenes1.h b/engines/tsage/ringworld_scenes1.h
index c75fc2131e..01b7fcf5c1 100644
--- a/engines/tsage/ringworld_scenes1.h
+++ b/engines/tsage/ringworld_scenes1.h
@@ -99,7 +99,7 @@ public:
Action2 _action2;
Action3 _action3;
Action4 _action4;
- SceneObject _sceneObject1, _sceneObject2, _sceneObject3, _sceneObject4, _sceneObject5;
+ SceneObject _sceneObject1, _SceneObjectExt, _sceneObject3, _sceneObject4, _sceneObject5;
SoundHandler _sound;
public:
Scene20();
@@ -364,16 +364,16 @@ class Scene60: public Scene {
public:
virtual void doAction(int action);
};
- class SlaveObject: public SceneObject2 {
+ class SlaveObject: public SceneObjectExt {
public:
virtual void doAction(int action);
};
- class SceneObject2: public SceneObject {
+ class SceneObjectExt: public SceneObject {
public:
int _state;
virtual void synchronise(Serialiser &s);
};
- class Object8: public SceneObject2 {
+ class Object8: public SceneObjectExt {
public:
virtual void doAction(int action);
};
diff --git a/engines/tsage/ringworld_scenes3.cpp b/engines/tsage/ringworld_scenes3.cpp
index 3be2ded4db..6921de4918 100644
--- a/engines/tsage/ringworld_scenes3.cpp
+++ b/engines/tsage/ringworld_scenes3.cpp
@@ -4990,4 +4990,822 @@ int Scene2310::findObject(int objIndex) {
return 5;
}
+/*--------------------------------------------------------------------------
+ * Scene 2320 - Starcraft - Lander Bar
+ *
+ *--------------------------------------------------------------------------*/
+
+void Scene2320::Action1::signal() {
+ Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ setDelay(10);
+ if (_globals->_sceneManager._previousScene == 2120)
+ _actionIndex = 3;
+ break;
+ case 1: {
+ Common::Point pt(513, 144);
+ NpcMover *mover = new NpcMover();
+ scene->_hotspot11.addMover(mover, &pt, this);
+ break;
+ }
+ case 2: {
+ Common::Point pt(510, 164);
+ NpcMover *mover = new NpcMover();
+ scene->_hotspot11.addMover(mover, &pt, this);
+ break;
+ }
+ case 3:
+ setAction(&scene->_sequenceManager2, this, 2328, &scene->_hotspot11, NULL);
+ break;
+ case 4:
+ scene->_hotspot11.animate(ANIM_MODE_NONE);
+ setDelay(120);
+ _actionIndex = 3;
+ break;
+ }
+}
+
+void Scene2320::Action2::signal() {
+ Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0: {
+ scene->_soundHandler.startSound(253);
+ scene->_hotspot13.setPriority2(99);
+
+ Common::Point pt(scene->_hotspot13._position.x, 200);
+ NpcMover *mover = new NpcMover();
+ scene->_hotspot13.addMover(mover, &pt, this);
+ break;
+ }
+ case 1:
+ scene->_hotspot13.flag100();
+ remove();
+ break;
+ }
+}
+
+void Scene2320::Action3::signal() {
+ Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0: {
+ Common::Point pt(320, 86);
+ PlayerMover *mover = new PlayerMover();
+ _globals->_player.addMover(mover, &pt, this);
+ break;
+ }
+ case 1:
+ scene->_soundHandler.startSound(162);
+ scene->_hotspot6.animate(ANIM_MODE_5, this);
+ break;
+ case 2: {
+ Common::Point pt(320, 79);
+ NpcMover *mover = new NpcMover();
+ _globals->_player.addMover(mover, &pt, this);
+ break;
+ }
+ case 3:
+ scene->_hotspot6.setPriority2(scene->_hotspot6._priority - 1);
+ _globals->_player._strip = 3;
+ setDelay(10);
+ break;
+ case 4:
+ scene->_area1.display();
+ scene->_area2.display();
+ scene->_area3.display();
+ scene->_area4.display();
+
+ scene->_area3.draw(true);
+ _state = 0;
+ _globals->_events.setCursor(CURSOR_USE);
+
+ while (!_state && !_vm->getEventManager()->shouldQuit()) {
+ // Wait for an event
+ Event event;
+ if (!_globals->_events.getEvent(event)) {
+ g_system->updateScreen();
+ g_system->delayMillis(10);
+ continue;
+ }
+
+ if (scene->_area1._bounds.contains(event.mousePos)) {
+ scene->_area1.draw(true);
+ scene->_area3.draw(false);
+ _state = scene->_area1._actionId;
+ }
+ if (scene->_area2._bounds.contains(event.mousePos)) {
+ scene->_area3.draw(false);
+ scene->_area2.draw(true);
+ _state = scene->_area2._actionId;
+ }
+ if (scene->_area3._bounds.contains(event.mousePos)) {
+ scene->_area3.draw(true);
+ _state = scene->_area3._actionId;
+ }
+ }
+
+ scene->_soundHandler.startSound(161);
+ scene->_area1.restore();
+ scene->_area2.restore();
+ scene->_area3.restore();
+ scene->_area4.restore();
+
+ if (_state == 2320) {
+ setDelay(10);
+ } else {
+ scene->_soundHandler.startSound(162);
+ scene->_hotspot6.animate(ANIM_MODE_6, this);
+ }
+ break;
+ case 5: {
+ if (_state == 2320)
+ _globals->_player.setPriority2(-1);
+ else
+ _globals->_sceneManager.changeScene(_state);
+
+ Common::Point pt(320, 86);
+ NpcMover *mover = new NpcMover();
+ _globals->_player.addMover(mover, &pt, this);
+ break;
+ }
+ case 6:
+ scene->_soundHandler.startSound(162);
+ scene->_hotspot6.animate(ANIM_MODE_6, this);
+ break;
+ case 7:
+ _globals->_player.enableControl();
+ remove();
+ break;
+ }
+}
+
+void Scene2320::Action4::signal() {
+ Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ _globals->_player.disableControl();
+ setDelay(3);
+ break;
+ case 1: {
+ Common::Point pt(213, 84);
+ PlayerMover *mover = new PlayerMover();
+ _globals->_player.addMover(mover, &pt, this);
+ break;
+ }
+ case 2:
+ case 16:
+ _globals->_player.setVisage(2109);
+ _globals->_player.setStrip(2);
+ _globals->_player.setFrame(1);
+ _globals->_player.animate(ANIM_MODE_5, this);
+ break;
+ case 3:
+ _globals->_player.animate(ANIM_MODE_6, NULL);
+ scene->setAction(&scene->_action2);
+ break;
+ case 4: {
+ scene->_hotspot16.postInit();
+ scene->_hotspot16.setVisage(2331);
+ scene->_hotspot16.setStrip(3);
+ scene->_hotspot16.setPriority2(149);
+ scene->_hotspot16.setPosition(Common::Point(320, 202));
+ scene->_hotspot16.unflag100();
+
+ Common::Point pt(320, 121);
+ NpcMover *mover = new NpcMover();
+ scene->_hotspot16.addMover(mover, &pt, this);
+ break;
+ }
+ case 5: {
+ scene->_hotspot16.setPriority2(200);
+ Common::Point pt(320, 180);
+ NpcMover *mover = new NpcMover();
+ scene->_hotspot16.addMover(mover, &pt, this);
+ break;
+ }
+ case 6: {
+ scene->_hotspot16.setPriority2(-1);
+ _globals->_player.setVisage(0);
+ _globals->_player.animate(ANIM_MODE_1, NULL);
+
+ Common::Point pt(233, 176);
+ PlayerMover *mover = new PlayerMover();
+ _globals->_player.addMover(mover, &pt, this);
+ break;
+ }
+ case 7: {
+ Common::Point pt(291, 194);
+ PlayerMover *mover = new PlayerMover();
+ _globals->_player.addMover(mover, &pt, this);
+ break;
+ }
+ case 8:
+ _globals->_player.setStrip(5);
+ _globals->_player.setFrame(1);
+ setDelay(13);
+ break;
+ case 9:
+ if (!_globals->getFlag(109)) {
+ SceneItem::display2(2320, 19);
+ } else {
+ _globals->_sceneManager.changeScene(7600);
+ }
+ break;
+ case 10:
+ if (_globals->getFlag(109)) {
+ _globals->_soundHandler.startSound(40);
+ _globals->_soundHandler.proc5(true);
+
+ Common::Point pt(303, 240);
+ NpcMover *mover = new NpcMover();
+ _globals->_player.addMover(mover, &pt, this);
+ } else {
+ setDelay(3);
+ }
+ break;
+ case 11:
+ if (_globals->getFlag(109)) {
+ _globals->_sceneManager.changeScene(7600);
+ } else {
+ SceneItem::display2(2320, 19);
+ setDelay(3);
+ }
+ break;
+ case 12:
+ _globals->_player.animate(ANIM_MODE_6, this);
+ break;
+ case 13:
+ _globals->_player.setVisage(0);
+ _globals->_player.setPosition(Common::Point(291, 194));
+ _globals->_player.setStrip(5);
+ _globals->_player.setFrame(1);
+ _globals->_player.animate(ANIM_MODE_1, NULL);
+
+ scene->_hotspot16.unflag100();
+ setDelay(3);
+ break;
+ case 14: {
+ Common::Point pt(233, 176);
+ PlayerMover *mover = new PlayerMover();
+ _globals->_player.addMover(mover, &pt, this);
+ break;
+ }
+ case 15: {
+ Common::Point pt(213, 85);
+ PlayerMover *mover = new PlayerMover();
+ _globals->_player.addMover(mover, &pt, this);
+ break;
+ }
+ case 17: {
+ _globals->_player.animate(ANIM_MODE_6, NULL);
+ scene->_hotspot16.setPriority2(160);
+
+ Common::Point pt(320, 121);
+ NpcMover *mover = new NpcMover();
+ scene->_hotspot16.addMover(mover, &pt, this);
+ break;
+ }
+ case 18: {
+ Common::Point pt(320, 202);
+ PlayerMover *mover = new PlayerMover();
+ scene->_hotspot16.addMover(mover, &pt, this);
+ break;
+ }
+ case 19: {
+ scene->_hotspot16.remove();
+ scene->_soundHandler.startSound(253);
+
+ scene->_hotspot13.unflag100();
+ Common::Point pt(319, 157);
+ NpcMover *mover = new NpcMover();
+ scene->_hotspot13.addMover(mover, &pt, this);
+ break;
+ }
+ case 20:
+ _globals->_player.enableControl();
+ _globals->_player.setVisage(0);
+ _globals->_player.animate(ANIM_MODE_1, NULL);
+
+ scene->_hotspot13.setPriority2(1);
+ remove();
+ break;
+ }
+}
+
+void Scene2320::Action5::signal() {
+ Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ _globals->_player.disableControl();
+ ADD_PLAYER_MOVER(163, 126);
+ break;
+ case 1:
+ ADD_PLAYER_MOVER(165, 132);
+ break;
+ case 2:
+ setDelay(2);
+ break;
+ case 3:
+ if (!_globals->getFlag(59))
+ setDelay(10);
+ else
+ scene->_stripManager.start(2323, this);
+ break;
+ case 4:
+ _globals->_player.setVisage(2347);
+ _globals->_player.setStrip(1);
+ _globals->_player.setFrame(1);
+ _globals->_player.setPriority2(137);
+ _globals->_player.animate(ANIM_MODE_5, this);
+ break;
+ case 5:
+ _globals->_player.setStrip(2);
+ _globals->_player.setFrame(1);
+ _globals->_player.animate(ANIM_MODE_5, this);
+ break;
+ case 6:
+ if (_globals->getFlag(72))
+ _globals->_sceneManager.changeScene(7000);
+ else if (_globals->getFlag(59))
+ _globals->_sceneManager.changeScene(5000);
+ else if (!_globals->getFlag(43) || (_globals->_inventory._ale._sceneNumber != 1))
+ setDelay(10);
+ else {
+ scene->_hotspot11.setAction(NULL);
+ scene->_hotspot11.setVisage(2705);
+ scene->_hotspot11.animate(ANIM_MODE_1, NULL);
+ scene->_hotspot11.setObjectWrapper(new SceneObjectWrapper());
+
+ Common::Point pt(185, 135);
+ NpcMover *mover = new NpcMover();
+ scene->_hotspot11.addMover(mover, &pt, NULL);
+
+ _globals->clearFlag(53);
+ scene->_stripManager.start(2325, this);
+ }
+ break;
+ case 7:
+ setDelay(10);
+ break;
+ case 8:
+ _globals->_sceneManager.changeScene(4000);
+ break;
+ }
+}
+
+void Scene2320::Action6::signal() {
+ Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ setDelay(30);
+ break;
+ case 1:
+ _globals->_player.animate(ANIM_MODE_6, this);
+ break;
+ case 2:
+ _globals->_player.setStrip(1);
+ _globals->_player.setFrame(1);
+ _globals->_player.animate(ANIM_MODE_6, this);
+ break;
+ case 3:
+ _globals->_player.setVisage(0);
+ _globals->_player.setStrip(3);
+ _globals->_player.setPriority2(-1);
+ _globals->_player.setObjectWrapper(new SceneObjectWrapper());
+ _globals->_player.animate(ANIM_MODE_1, NULL);
+
+ setDelay(60);
+ break;
+ case 4:
+ if ((_globals->_sceneManager._previousScene != 4000) || _globals->getFlag(43))
+ setDelay(3);
+ else if (_globals->getFlag(35)) {
+ _globals->setFlag(43);
+ scene->_stripManager.start(4200, this);
+ _globals->setFlag(69);
+ } else if (_globals->getFlag(36)) {
+ setDelay(3);
+ } else {
+ _globals->setFlag(43);
+ scene->_stripManager.start(4210, this);
+ break;
+ }
+ break;
+ case 5:
+ if (_globals->_sceneObjects->contains(&scene->_hotspot11)) {
+ scene->_hotspot11.setAction(&scene->_action1);
+
+ if (_globals->_sceneObjects->contains(&scene->_hotspot10)) {
+ ADD_MOVER(scene->_hotspot10, 491, 160);
+ } else {
+ setDelay(60);
+ }
+
+ _globals->_sceneItems.push_front(&scene->_hotspot11);
+ } else {
+ setDelay(3);
+ }
+ break;
+ case 6:
+ _globals->_events.setCursor(CURSOR_WALK);
+ _globals->_player.enableControl();
+ remove();
+ break;
+ }
+}
+
+void Scene2320::Action7::signal() {
+ Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ setDelay(30);
+ break;
+ case 1:
+ _globals->_soundHandler.startSound(162);
+ scene->_hotspot6.animate(ANIM_MODE_5, this);
+ break;
+ case 2:
+ scene->_hotspot10.setPriority2(-1);
+ ADD_MOVER2(scene->_hotspot10, 321, 94);
+ scene->_hotspot11.setPriority2(-1);
+ ADD_MOVER2(scene->_hotspot11, 346, 85);
+
+ _globals->_player.setPriority2(-1);
+ ADD_MOVER(_globals->_player, 297, 89);
+ break;
+ case 3:
+ ADD_PLAYER_MOVER(462, 182);
+ break;
+ case 4:
+ ADD_MOVER(scene->_hotspot11, 391, 88);
+ break;
+ case 5:
+ ADD_MOVER(scene->_hotspot11, 500, 164);
+ ADD_MOVER(scene->_hotspot10, 382, 93);
+ _globals->_player.setStrip(3);
+ break;
+ case 6:
+ ADD_MOVER2(scene->_hotspot10, 491, 160);
+ ADD_MOVER(_globals->_player, 391, 88);
+
+ _globals->_player.setStrip(1);
+ _globals->_player.setFrame(1);
+ _globals->_player.animate(ANIM_MODE_6, this);
+ break;
+ case 7:
+ ADD_PLAYER_MOVER(462, 182);
+ break;
+ case 8:
+ _globals->_player.setStrip(7);
+ setDelay(15);
+ break;
+ case 9:
+ scene->_stripManager.start(6020, this);
+ break;
+ case 10:
+ setDelay(6);
+ break;
+ case 11:
+ scene->_stripManager.start(6022, this);
+ break;
+ case 12:
+ _globals->_player.enableControl();
+ _globals->_inventory._stasisBox._sceneNumber = 2320;
+ break;
+ }
+}
+
+void Scene2320::Action8::signal() {
+ Scene2320 *scene = (Scene2320 *)_globals->_sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ setDelay(5);
+ break;
+ case 1:
+ ADD_PLAYER_MOVER(462, 182);
+ break;
+ case 2:
+ _globals->_player.setStrip(7);
+ setDelay(5);
+ break;
+ case 3:
+ scene->_speakerGameText.setTextPos(Common::Point(_globals->_sceneManager._scene->_sceneBounds.left + 30, 10));
+ scene->_stripManager.start(_globals->getFlag(75) ? 6030 : 2320, this);
+ break;
+ case 4:
+ if (_globals->getFlag(75))
+ setDelay(3);
+ else
+ _globals->_player.enableControl();
+ break;
+ case 5:
+ _globals->_inventory._stasisBox._sceneNumber = 2320;
+ scene->_sceneMode = 2326;
+ scene->_speakerGameText.setTextPos(Common::Point(_globals->_sceneManager._scene->_sceneBounds.left + 30, 10));
+ scene->setAction(&scene->_sequenceManager1, scene, 2326, &_globals->_player, &scene->_hotspot11, NULL);
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+Scene2320::Scene2320() {
+}
+
+void Scene2320::postInit(SceneObjectList *OwnerList) {
+ Scene::postInit();
+ setZoomPercents(60, 75, 100, 100);
+
+ _stripManager.addSpeaker(&_speakerMR);
+ _stripManager.addSpeaker(&_speakerML);
+ _stripManager.addSpeaker(&_speakerMText);
+ _stripManager.addSpeaker(&_speakerQText);
+ _stripManager.addSpeaker(&_speakerQL);
+ _stripManager.addSpeaker(&_speakerQR);
+ _stripManager.addSpeaker(&_speakerSR);
+ _stripManager.addSpeaker(&_speakerSL);
+ _stripManager.addSpeaker(&_speakerSAL);
+ _stripManager.addSpeaker(&_speakerSText);
+ _stripManager.addSpeaker(&_speakerGameText);
+
+ _speakerMText._npc = &_hotspot11;
+ _speakerQText._npc = &_globals->_player;
+ _hotspotPtr = &_hotspot10;
+
+ _hotspot6.postInit();
+ _hotspot6.setVisage(2321);
+ _hotspot6.setPosition(Common::Point(320, 67));
+
+ _hotspot7.postInit();
+ _hotspot7.setVisage(2344);
+ _hotspot7.setPosition(Common::Point(604, 92));
+
+ _hotspot13.postInit();
+ _hotspot13.setVisage(2323);
+ _hotspot13.setPosition(Common::Point(319, 157));
+ _hotspot13.setPriority2(1);
+
+ _hotspot12.postInit();
+ _hotspot12.setVisage(2321);
+ _hotspot12._strip = 4;
+ _hotspot12.animate(ANIM_MODE_8, 0, NULL);
+ _hotspot12.setPosition(Common::Point(412, 46));
+
+ if (_globals->_inventory._waldos._sceneNumber == 2320) {
+ _hotspot8.postInit();
+ _hotspot8.setVisage(2345);
+ _hotspot8.setStrip(5);
+ _hotspot8.setFrame(8);
+ _hotspot8.setPosition(Common::Point(541, 103));
+ _hotspot8.setPriority2(201);
+
+ _globals->_sceneItems.push_back(&_hotspot8);
+ }
+
+ _area1.setup(2100, 2, 1, 2150);
+ _area1._pt = Common::Point(200, 31);
+ _area2.setup(2153, 3, 1, 2150);
+ _area2._pt = Common::Point(200, 50);
+ _area3.setup(2153, 4, 1, 2320);
+ _area3._pt = Common::Point(200, 75);
+ _area4.setup(2153, 1, 1, 10);
+ _area4._pt = Common::Point(237, 77);
+
+ if (_globals->getFlag(43)) {
+ _hotspot11.postInit();
+ _hotspot11.setVisage(2705);
+ _hotspot11._strip = 3;
+ _hotspot11.setPosition(Common::Point(510, 156));
+ _hotspot11._state = 0;
+ _hotspot11.setAction(&_action1);
+
+ _globals->_sceneItems.push_back(&_hotspot11);
+ }
+
+ _globals->_player.postInit();
+ _globals->_player.animate(ANIM_MODE_1, NULL);
+ _globals->_player.setObjectWrapper(new SceneObjectWrapper());
+ _globals->_player.setPosition(Common::Point(320, 79));
+ _globals->_player.setPriority2(10);
+ _globals->_player.changeZoom(-1);
+ _globals->_player._moveDiff.y = 3;
+ _globals->_player.disableControl();
+
+ if (_globals->getFlag(114)) {
+ _hotspot10.postInit();
+ _hotspot10.setVisage(2806);
+ _hotspot10.setPosition(Common::Point(481, 162));
+ _hotspot10.changeZoom(-1);
+ _hotspot10.setStrip(5);
+ _hotspot10._state = 0;
+
+ _globals->_sceneItems.push_back(&_hotspot10);
+ }
+
+ if (_globals->getFlag(70)) {
+ _hotspot11.postInit();
+ _hotspot11.setVisage(2705);
+ _hotspot11.setPosition(Common::Point(500, 164));
+
+ _hotspot10.postInit();
+ _hotspot10.setVisage(2806);
+ _hotspot10.setPosition(Common::Point(481, 162));
+ _hotspot10.changeZoom(-1);
+ _hotspot10.setStrip(5);
+
+ _globals->_sceneItems.addItems(&_hotspot11, &_hotspot10, NULL);
+ }
+
+ switch (_globals->_sceneManager._previousScene) {
+ case 2120:
+ _globals->_soundHandler.startSound(160);
+ _globals->_soundHandler.proc5(true);
+
+ _globals->_player.setPriority2(-1);
+ _globals->_player.setPosition(Common::Point(389, 72));
+ _globals->_player.enableControl();
+ break;
+ case 4000:
+ if (!_globals->getFlag(36) && !_globals->getFlag(43)) {
+ _hotspot11.postInit();
+ _hotspot11.setVisage(2705);
+ _hotspot11.setPosition(Common::Point(178, 118));
+ _hotspot11.animate(ANIM_MODE_1, NULL);
+ }
+ // Deliberate fall-through
+ case 4250:
+ case 5000:
+ case 7000:
+ _globals->_soundHandler.startSound(160);
+ _globals->_soundHandler.proc5(true);
+ if ((_globals->_sceneManager._previousScene == 7000) && !_globals->getFlag(80))
+ _globals->setFlag(36);
+
+ _globals->_player.disableControl();
+ _globals->_player.animate(ANIM_MODE_NONE, NULL);
+ _globals->_player.setObjectWrapper(new SceneObjectWrapper());
+ _globals->_player.setVisage(2347);
+ _globals->_player.setStrip(2);
+ _globals->_player.setFrame(5);
+ _globals->_player.setPriority2(137);
+ _globals->_player.setPosition(Common::Point(165, 132));
+
+ setAction(&_action6);
+ break;
+ case 6100:
+ _globals->_soundHandler.startSound(160);
+ _globals->_soundHandler.proc5(true);
+
+ _hotspot8.postInit();
+ _hotspot8.setVisage(2345);
+ _hotspot8.setPosition(Common::Point(634, 65));
+ _hotspot8.flag100();
+
+ _sceneMode = 2325;
+ setAction(&_sequenceManager1, this, 2325, &_globals->_player, &_hotspot6, &_hotspot8, &_hotspot7, NULL);
+ break;
+ case 7600:
+ _globals->_soundHandler.startSound(160);
+ _globals->_soundHandler.proc5(true);
+ _soundHandler.startSound(21);
+
+ _globals->_player.setVisage(2323);
+ _globals->_player.setStrip(2);
+ _globals->_player.setFrame(_globals->_player.getFrameCount());
+ _globals->_player.setPosition(Common::Point(303, 176));
+ _globals->_player.setPriority2(-1);
+ _globals->_player.disableControl();
+
+ _hotspot13.setPosition(Common::Point(319, 199));
+
+ _hotspot16.postInit();
+ _hotspot16.setVisage(2331);
+ _hotspot16._strip = 3;
+ _hotspot16.setPriority2(160);
+ _hotspot16.setPosition(Common::Point(320, 202));
+ _hotspot16.flag100();
+
+ _sceneMode = 2338;
+ setAction(&_sequenceManager1, this, 2338, &_globals->_player, &_hotspot16, &_hotspot13, NULL);
+ break;
+ default:
+ switch (_globals->_stripNum) {
+ case 2101:
+ _globals->_player.disableControl();
+ _globals->_player.setStrip(3);
+ _globals->_player.setPosition(Common::Point(307, 84));
+
+ _hotspot11.postInit();
+ _hotspot11.setVisage(2705);
+ _hotspot11._strip = 2;
+ _hotspot11.setPriority2(10);
+ _hotspot11.setPosition(Common::Point(322, 80));
+ _hotspot11.setObjectWrapper(new SceneObjectWrapper());
+ _hotspot11.animate(ANIM_MODE_1, NULL);
+
+ _hotspot10.postInit();
+ _hotspot10.setVisage(2806);
+ _hotspot10.setObjectWrapper(new SceneObjectWrapper());
+ _hotspot10.changeZoom(-1);
+ _hotspot10.setPriority2(10);
+ _hotspot10.setPosition(Common::Point(318, 89));
+ _hotspot10._strip = 3;
+ _hotspot10.animate(ANIM_MODE_1, NULL);
+
+ setAction(&_action7);
+ break;
+ case 6100:
+ _hotspot8.postInit();
+ _hotspot8.setVisage(2345);
+ _hotspot8.setPosition(Common::Point(634, 65));
+ _hotspot8.flag100();
+
+ _sceneMode = 2325;
+ setAction(&_sequenceManager1, this, 2325, &_globals->_player, &_hotspot6, &_hotspot8, &_hotspot7, NULL);
+ break;
+ default:
+ _globals->_soundHandler.startSound(160);
+ _globals->_soundHandler.proc5(true);
+ _sceneMode = 2321;
+
+ _globals->_player.setStrip(3);
+ setAction(&_sequenceManager1, this, 2321, &_globals->_player, &_hotspot6, NULL);
+ break;
+ }
+ }
+
+ _globals->_stripNum = 0;
+ _globals->_sceneManager._scene->_sceneBounds.centre(_globals->_player._position);
+ loadScene(2320);
+
+ _hotspot14._sceneRegionId = 0;
+ _hotspot1.setBounds(Rect(0, 0, 640, 200));
+ _hotspot2.setBounds(Rect(278, 0, 362, 61));
+ _hotspot3.setBounds(Rect(282, 62, 367, 98));
+ _hotspot4.setBounds(Rect(67, 38, 112, 113));
+ _hotspot5.setBounds(Rect(104, 122, 174, 157));
+ _hotspot15.setBounds(Rect(191, 53, 205, 63));
+
+ _globals->_sceneItems.addItems(&_hotspot14, &_hotspot15, &_hotspot5, &_hotspot6, &_hotspot12,
+ &_hotspot13, &_hotspot4, &_hotspot3, &_hotspot2, &_hotspot1, NULL);
+}
+
+void Scene2320::synchronise(Serialiser &s) {
+ Scene::synchronise(s);
+ SYNC_POINTER(_hotspotPtr);
+}
+
+void Scene2320::signal() {
+ switch (_sceneMode) {
+ case 2321:
+ case 2327:
+ case 2329:
+ if (_globals->getFlag(43) && !_hotspot11._action)
+ _hotspot11.setAction(&_action1);
+ _globals->_player.enableControl();
+ break;
+ case 2322:
+ _globals->_sceneManager.changeScene(2120);
+ break;
+ case 2323:
+ _globals->_player.disableControl();
+ break;
+ case 2338:
+ case 2324:
+ _hotspot16.remove();
+ _globals->_player.enableControl();
+ break;
+ case 2325:
+ _globals->setFlag(76);
+ _globals->clearFlag(70);
+ _globals->_stripNum = 6100;
+ _globals->_sceneManager.changeScene(2100);
+ break;
+ case 2326:
+ _globals->clearFlag(70);
+ _globals->_inventory._nullifier._sceneNumber = 1;
+ _globals->_stripNum = 2321;
+ _globals->_sceneManager.changeScene(2100);
+ break;
+ case 2336:
+ _globals->setFlag(77);
+ _globals->_inventory._waldos._sceneNumber = 1;
+ _hotspot8.remove();
+ break;
+ case 5000:
+ _globals->_player.enableControl();
+ break;
+ }
+}
+
+
+
} // End of namespace tSage
diff --git a/engines/tsage/ringworld_scenes3.h b/engines/tsage/ringworld_scenes3.h
index cd2ce44d0f..0f2923ded8 100644
--- a/engines/tsage/ringworld_scenes3.h
+++ b/engines/tsage/ringworld_scenes3.h
@@ -775,6 +775,76 @@ public:
virtual void dispatch();
};
+class Scene2320: public Scene {
+ /* Actions */
+ class Action1: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action2: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action3: public ActionExt {
+ public:
+ virtual void signal();
+ };
+ class Action4: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action5: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action6: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action7: public Action {
+ public:
+ virtual void signal();
+ };
+ class Action8: public Action {
+ public:
+ virtual void signal();
+ };
+public:
+ SoundHandler _soundHandler;
+ SequenceManager _sequenceManager1, _sequenceManager2;
+ SpeakerMText _speakerMText;
+ SpeakerMR _speakerMR;
+ SpeakerML _speakerML;
+ SpeakerQText _speakerQText;
+ SpeakerQL _speakerQL;
+ SpeakerQR _speakerQR;
+ SpeakerSAL _speakerSAL;
+ SpeakerSL _speakerSL;
+ SpeakerSR _speakerSR;
+ SpeakerSText _speakerSText;
+ SpeakerGameText _speakerGameText;
+ SceneArea _area1, _area2, _area3, _area4;
+ SceneObject _hotspot1, _hotspot2, _hotspot3, _hotspot4, _hotspot5;
+ SceneObject _hotspot6, _hotspot7, _hotspot8, _hotspot9;
+ SceneObjectExt _hotspot10, _hotspot11;
+ SceneObject _hotspot12, _hotspot13, _hotspot14, _hotspot15;
+ SceneObject _hotspot16;
+ SceneItem *_hotspotPtr;
+ Action1 _action1;
+ Action2 _action2;
+ Action3 _action3;
+ Action4 _action4;
+ Action5 _action5;
+ Action6 _action6;
+ Action7 _action7;
+ Action8 _action8;
+
+ Scene2320();
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void synchronise(Serialiser &s);
+ virtual void signal();
+};
+
} // End of namespace tSage
#endif