aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorstrangerke2011-04-03 23:43:36 +0200
committerstrangerke2011-04-03 23:43:36 +0200
commit38b3f18029cbcb5bca476164eeaf63800e527a7d (patch)
treeeab5761cc663be166b551c14d53687401fa207bc /engines
parent2c8bac69bbe9890b6722383c66a0f0eea85a9f39 (diff)
downloadscummvm-rg350-38b3f18029cbcb5bca476164eeaf63800e527a7d.tar.gz
scummvm-rg350-38b3f18029cbcb5bca476164eeaf63800e527a7d.tar.bz2
scummvm-rg350-38b3f18029cbcb5bca476164eeaf63800e527a7d.zip
TSAGE: Fix SpeakerGText, Add SpeakerOR, implement Scene9400
Diffstat (limited to 'engines')
-rw-r--r--engines/tsage/ringworld_logic.cpp38
-rw-r--r--engines/tsage/ringworld_logic.h7
-rw-r--r--engines/tsage/ringworld_scenes10.cpp118
-rw-r--r--engines/tsage/ringworld_scenes10.h45
4 files changed, 202 insertions, 6 deletions
diff --git a/engines/tsage/ringworld_logic.cpp b/engines/tsage/ringworld_logic.cpp
index 8a174a4822..89b298bd74 100644
--- a/engines/tsage/ringworld_logic.cpp
+++ b/engines/tsage/ringworld_logic.cpp
@@ -157,6 +157,7 @@ Scene *SceneFactory::createScene(int sceneNumber) {
case 9300: return new Scene9300();
case 9350: return new Scene9350();
case 9360: return new Scene9360();
+ case 9400: return new Scene9400();
case 9700: return new Scene9700();
case 9750: return new Scene9750();
case 9999: return new Scene9999();
@@ -325,17 +326,16 @@ void SpeakerGText::setText(const Common::String &msg) {
_globals->gfxManager()._font.getStringBounds(msg.c_str(), textRect, _textWidth);
textRect.centre(_sceneObject._position.x, _sceneObject._position.y);
_textPos.x = textRect.left;
- setText(msg);
+ Speaker::setText(msg);
}
void SpeakerGText::removeText() {
_sceneObject.remove();
- removeText();
+ Speaker::removeText();
}
/*--------------------------------------------------------------------------*/
-
SpeakerPOR::SpeakerPOR() {
_speakerName = "POR";
_newSceneNumber = 7221;
@@ -384,6 +384,38 @@ void SpeakerPOR::setText(const Common::String &msg) {
/*--------------------------------------------------------------------------*/
+SpeakerOR::SpeakerOR() {
+ _speakerName = "OR";
+ _newSceneNumber = 9430;
+ _textPos = Common::Point(8, 36);
+ _colour1 = 42;
+ _textWidth = 136;
+}
+
+void SpeakerOR::setText(const Common::String &msg) {
+ _object1.postInit(&_objectList);
+ _object1.setVisage(9431);
+ _object1.setStrip2(2);
+ _object1.setPriority2(255);
+ _object1.changeZoom(100);
+ _object1._frame = 1;
+ _object1.setPosition(Common::Point(202, 147), 0);
+ _object1.animate(ANIM_MODE_7, 0, 0);
+
+ _object2.postInit(&_objectList);
+ _object2.setVisage(9431);
+ _object2.setStrip2(1);
+ _object2.setPriority2(255);
+ _object2.setZoom(100);
+ _object2._frame = 1;
+ _object2.setPosition(Common::Point(199, 85), 0);
+ _object2.setAction(&_speakerAction, 0);
+
+ Speaker::setText(msg);
+}
+
+/*--------------------------------------------------------------------------*/
+
SpeakerOText::SpeakerOText(): SpeakerGText() {
_speakerName = "OTEXT";
_textWidth = 240;
diff --git a/engines/tsage/ringworld_logic.h b/engines/tsage/ringworld_logic.h
index 047c6220d5..281833fc38 100644
--- a/engines/tsage/ringworld_logic.h
+++ b/engines/tsage/ringworld_logic.h
@@ -131,6 +131,13 @@ public:
virtual void setText(const Common::String &msg);
};
+class SpeakerOR: public AnimatedSpeaker {
+public:
+ SpeakerOR();
+ virtual Common::String getClassName() { return "SpeakerOR"; }
+ virtual void setText(const Common::String &msg);
+};
+
class SpeakerOText: public SpeakerGText {
public:
SpeakerOText();
diff --git a/engines/tsage/ringworld_scenes10.cpp b/engines/tsage/ringworld_scenes10.cpp
index bebf199a2d..add5a6ba0c 100644
--- a/engines/tsage/ringworld_scenes10.cpp
+++ b/engines/tsage/ringworld_scenes10.cpp
@@ -697,6 +697,124 @@ void Scene9360::postInit(SceneObjectList *OwnerList) {
}
/*--------------------------------------------------------------------------
+ * Scene 9400
+ *
+ *--------------------------------------------------------------------------*/
+Scene9400::Scene9400() {
+ _field1032 = 0;
+}
+
+void Scene9400::SceneHotspot7::doAction(int action) {
+ Scene9400 *scene = (Scene9400 *)_globals->_sceneManager._scene;
+
+ if ((action == CURSOR_USE) && (_globals->_inventory._straw._sceneNumber != 1)) {
+ scene->_sceneState = 1;
+ scene->setAction(&scene->_sequenceManager, scene, 9408, &_globals->_player, 0);
+ } else {
+ SceneHotspot_3::doAction(action);
+ }
+}
+
+void Scene9400::SceneHotspot8::doAction(int action) {
+ Scene9400 *scene = (Scene9400 *)_globals->_sceneManager._scene;
+
+ if (action == CURSOR_TALK) {
+ _globals->_player.disableControl();
+ scene->_sceneState = 2;
+ scene->signal();
+ } else {
+ SceneHotspot_3::doAction(action);
+ }
+}
+
+void Scene9400::signal() {
+ switch (_sceneState ++) {
+ case 0:
+ _object1._numFrames = 6;
+ _stripManager.start(9400, this);
+ break;
+ case 1:
+ _object1._numFrames = 6;
+ _object1.animate(ANIM_MODE_2, 0);
+ _globals->_player.enableControl();
+ break;
+ case 2:
+ _object1.animate(ANIM_MODE_5, this);
+ break;
+ case 3:
+ _stripManager.start(9405, this);
+ break;
+ case 4:
+ _object1.animate(ANIM_MODE_2, this);
+ _globals->_player.enableControl();
+ break;
+ case 9350:
+ _globals->_sceneManager.changeScene(9350);
+ break;
+ default:
+ break;
+ }
+}
+
+void Scene9400::dispatch() {
+ if ((_object1._animateMode == 2) && (_object1._strip == 1) && (_object1._frame == 4)){
+ if (_field1032 == 0) {
+ _soundHandler.startSound(296, 0, 127);
+ _field1032 = 1;
+ }
+ } else {
+ _field1032 = 0;
+ }
+ if (_action == 0) {
+ if (_globals->_player._position.y < 120) {
+ _sceneState = 9350;
+ _globals->_player.disableControl();
+ setAction(&_action1);
+ Common::Point pt(-45, 88);
+ NpcMover *mover = new NpcMover();
+ _globals->_player.addMover(mover, &pt, this);
+ }
+ } else {
+ Scene::dispatch();
+ }
+}
+
+void Scene9400::postInit(SceneObjectList *OwnerList) {
+ Scene::postInit();
+ _sceneNumber = 9400;
+ setZoomPercents(0, 100, 200, 100);
+ _globals->_player.postInit();
+ _object1.postInit(0);
+ _object3.postInit(0);
+ _speakerQText._textPos.x = 20;
+
+ _hotspot7.quickInit(157, 66, 180, 110, 9400, 21, 23);
+ _hotspot5.quickInit(130, 133, 152, 198, 9400, 22, -1);
+ _hotspot1.quickInit(33, 280, 69, 297, 9400, 1, 2);
+ _hotspot2.quickInit(73, 96, 87, 159, 9400, 3, 4);
+ _hotspot3.quickInit(89, 253, 111, 305, 9400, 5, 6);
+ _hotspot4.quickInit(46, 0, 116, 35, 9400, 7, 8);
+ _hotspot8.quickInit(58, 169, 122, 200, 9400, 9, 10);
+ _hotspot6.quickInit(0, 0, 199, 319, 9400, 16, 0);
+
+ _stripManager.addSpeaker(&_speakerQText);
+ _stripManager.addSpeaker(&_speakerOR);
+ _stripManager.addSpeaker(&_speakerOText);
+
+ _globals->_events.setCursor(CURSOR_WALK);
+ _globals->_player.disableControl();
+
+ // Useless check (skipped) : if (_globals->_sceneManager._previousScene == 9350)
+ _sceneState = 2;
+ if (!_globals->getFlag(89)) {
+ _globals->setFlag(89);
+ _sceneState = 0;
+ }
+
+ setAction(&_sequenceManager, this, 9400, &_globals->_player, &_object1, &_object3, 0);
+}
+
+/*--------------------------------------------------------------------------
* Scene 9700
*
*--------------------------------------------------------------------------*/
diff --git a/engines/tsage/ringworld_scenes10.h b/engines/tsage/ringworld_scenes10.h
index c321d53e85..35a35e193a 100644
--- a/engines/tsage/ringworld_scenes10.h
+++ b/engines/tsage/ringworld_scenes10.h
@@ -58,7 +58,7 @@ class Scene9100: public Scene {
public:
virtual void doAction(int action);
};
-
+public:
SequenceManager _sequenceManager;
SceneObject _object1;
SceneObject _object2;
@@ -84,7 +84,7 @@ class Scene9150: public Scene2 {
virtual void signal();
virtual void dispatch();
};
-
+public:
SequenceManager _sequenceManager1;
SequenceManager _sequenceManager2;
SceneObject _object1;
@@ -111,7 +111,7 @@ class Scene9200: public Scene2 {
public:
virtual void doAction(int action);
};
-
+public:
SequenceManager _sequenceManager;
SceneObject _object1;
SceneObject _object2;
@@ -137,6 +137,7 @@ class Scene9200: public Scene2 {
};
class Scene9300: public Scene {
+public:
SequenceManager _sequenceManager;
SceneObject _object1;
SceneObject _object2;
@@ -160,6 +161,7 @@ class Scene9300: public Scene {
};
class Scene9350: public Scene2 {
+public:
SequenceManager _sequenceManager;
Object9350 _object1;
SceneObject _object2;
@@ -175,6 +177,7 @@ class Scene9350: public Scene2 {
};
class Scene9360: public Scene2 {
+public:
SequenceManager _sequenceManager;
Action _action1;
Object9350 _object1;
@@ -192,6 +195,42 @@ class Scene9360: public Scene2 {
virtual void dispatch();
};
+class Scene9400: public Scene2 {
+ class SceneHotspot7: public SceneHotspot_3{
+ public:
+ virtual void doAction(int action);
+ };
+
+ class SceneHotspot8: public SceneHotspot_3{
+ public:
+ virtual void doAction(int action);
+ };
+public:
+ Scene9400();
+ SequenceManager _sequenceManager;
+ Action _action1;
+ SceneObject _object1;
+ SceneObject _object2;
+ SceneObject _object3;
+ SpeakerOText _speakerOText;
+ SpeakerOR _speakerOR;
+ SpeakerQText _speakerQText;
+ SceneHotspot_3 _hotspot1;
+ SceneHotspot_3 _hotspot2;
+ SceneHotspot_3 _hotspot3;
+ SceneHotspot_3 _hotspot4;
+ SceneHotspot_3 _hotspot5;
+ SceneHotspot_3 _hotspot6;
+ SoundHandler _soundHandler;
+ int _field1032;
+ SceneHotspot7 _hotspot7;
+ SceneHotspot8 _hotspot8;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+ virtual void dispatch();
+};
+
class Scene9700: public Scene2 {
SequenceManager _sequenceManager;
SceneObject _object1;