aboutsummaryrefslogtreecommitdiff
path: root/engines/tsage/ringworld/ringworld_scenes4.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2011-08-13 19:49:54 +1000
committerPaul Gilbert2011-08-13 19:49:54 +1000
commite9c8232da864891fafcceb217b291a50096738ce (patch)
tree496ccf031f0500cd2d84bc8780ed5fc0d0ab656e /engines/tsage/ringworld/ringworld_scenes4.cpp
parentc109a60a9233bfe6f30475abf4814ad5c6bc2f70 (diff)
downloadscummvm-rg350-e9c8232da864891fafcceb217b291a50096738ce.tar.gz
scummvm-rg350-e9c8232da864891fafcceb217b291a50096738ce.tar.bz2
scummvm-rg350-e9c8232da864891fafcceb217b291a50096738ce.zip
TSAGE: Split up the hard-coded logic files for Ringworld and Blue Force into separate sub-folderes
Diffstat (limited to 'engines/tsage/ringworld/ringworld_scenes4.cpp')
-rw-r--r--engines/tsage/ringworld/ringworld_scenes4.cpp250
1 files changed, 250 insertions, 0 deletions
diff --git a/engines/tsage/ringworld/ringworld_scenes4.cpp b/engines/tsage/ringworld/ringworld_scenes4.cpp
new file mode 100644
index 0000000000..83dd559a6d
--- /dev/null
+++ b/engines/tsage/ringworld/ringworld_scenes4.cpp
@@ -0,0 +1,250 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "common/config-manager.h"
+#include "tsage/ringworld/ringworld_scenes4.h"
+#include "tsage/scenes.h"
+#include "tsage/tsage.h"
+#include "tsage/staticres.h"
+
+namespace tSage {
+
+/*--------------------------------------------------------------------------
+ * Scene 3500 - Ringworld Scan
+ *
+ *--------------------------------------------------------------------------*/
+
+void Scene3500::Action1::signal() {
+ Scene3500 *scene = (Scene3500 *)_globals->_sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ setDelay(10);
+ break;
+ case 1:
+ scene->_stripManager.start(3500, this);
+ break;
+ case 2:
+ setDelay(3);
+ break;
+ case 3:
+ _globals->_sceneManager.changeScene(9999);
+ break;
+ }
+}
+
+void Scene3500::Action2::signal() {
+ Scene3500 *scene = (Scene3500 *)_globals->_sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ setDelay(10);
+ break;
+ case 1:
+ scene->_stripManager.start(3501, this);
+ break;
+ case 2:
+ setDelay(3);
+ break;
+ case 3:
+ _globals->_sceneManager.changeScene(2012);
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene3500::postInit(SceneObjectList *OwnerList) {
+ loadScene((_globals->_stripNum == 3600) ? 3600 : 3500);
+ Scene::postInit();
+
+ _stripManager.addSpeaker(&_speakerQText);
+ _stripManager.addSpeaker(&_speakerMText);
+ _stripManager.addSpeaker(&_speakerSText);
+
+ _globals->_sceneManager._scene->_sceneBounds.contain(_globals->_sceneManager._scene->_backgroundBounds);
+ _globals->_sceneOffset.x = (_globals->_sceneManager._scene->_sceneBounds.top / 160) * 160;
+
+ setAction((_globals->_stripNum == 3600) ? (Action *)&_action2 : (Action *)&_action1);
+}
+
+/*--------------------------------------------------------------------------
+ * Scene 3700 - Remote Viewer
+ *
+ *--------------------------------------------------------------------------*/
+
+#define VIEW_FRAME_DELAY 10
+
+Scene3700::Viewer::Viewer() {
+ _images1.setVisage(3705, 1);
+ _images2.setVisage(3705, 2);
+
+ _frameList[0] = 1;
+ for (int idx = 1; idx <= 3; ++idx)
+ _frameList[idx] = _globals->_randomSource.getRandomNumber(4) + 1;
+
+ _active = true;
+ _countdownCtr = 0;
+ _percentList[0] = 120;
+ _percentList[1] = 50;
+ _percentList[2] = 75;
+ _percentList[3] = 114;
+}
+
+void Scene3700::Viewer::synchronize(Serializer &s) {
+ SceneObject::synchronize(s);
+ s.syncAsByte(_active);
+ s.syncAsSint16LE(_countdownCtr);
+ for (int idx = 0; idx < 4; ++idx) {
+ s.syncAsSint16LE(_frameList[idx]);
+ s.syncAsSint16LE(_percentList[idx]);
+ }
+}
+
+void Scene3700::Viewer::dispatch() {
+ if (_active) {
+ if (_countdownCtr-- <= 0) {
+ _countdownCtr = VIEW_FRAME_DELAY;
+
+ for (int idx = 3; idx > 1; --idx)
+ _frameList[idx] = _frameList[idx - 1];
+
+ int newFrame;
+ do {
+ newFrame = _globals->_randomSource.getRandomNumber(4) + 1;
+ } while (newFrame == _frameList[2]);
+
+ _frameList[1] = newFrame;
+ _flags |= OBJFLAG_PANES;
+ }
+ }
+}
+
+void Scene3700::Viewer::reposition() {
+ _bounds = Rect(123, 40, 285, 123);
+}
+
+void Scene3700::Viewer::draw() {
+ Region *priorityRegion = _globals->_sceneManager._scene->_priorities.find(1);
+
+ for (int idx = 0; idx < 4; ++idx) {
+ Visage &v = (idx == 0) ? _images1 : _images2;
+
+ GfxSurface img = v.getFrame(_frameList[idx]);
+ Rect destRect = img.getBounds();
+ destRect.resize(img, (_position.x - _globals->_sceneOffset.x),
+ (_position.y - _globals->_sceneOffset.y - _yDiff), _percentList[idx]);
+
+ destRect.translate(-_globals->_sceneManager._scene->_sceneBounds.left,
+ -_globals->_sceneManager._scene->_sceneBounds.top);
+
+ _globals->gfxManager().copyFrom(img, destRect, priorityRegion);
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene3700::Action1::signal() {
+ Scene3700 *scene = (Scene3700 *)_globals->_sceneManager._scene;
+
+ switch (_actionIndex++) {
+ case 0:
+ setDelay(10);
+ break;
+ case 1:
+ scene->_stripManager.start(2162, this);
+ break;
+ case 2:
+ scene->_viewer._active = false;
+ setDelay(90);
+ break;
+ case 3:
+ scene->_soundHandler.play(196);
+ scene->_viewer.hide();
+
+ scene->_hotspot1.postInit();
+ scene->_hotspot1.setVisage(3710);
+ scene->_hotspot1.setStrip(1);
+ scene->_hotspot1.setFrame(1);
+ scene->_hotspot1.setPosition(Common::Point(204, 120));
+
+ setDelay(90);
+ break;
+ case 4:
+ scene->_soundHandler.play(197);
+ scene->_hotspot1.hide();
+
+ scene->_hotspot2.postInit();
+ scene->_hotspot2.setVisage(3710);
+ scene->_hotspot2.setStrip(2);
+ scene->_hotspot2.setFrame(1);
+ scene->_hotspot2.setPosition(Common::Point(204, 120));
+
+ setDelay(30);
+ break;
+ case 5:
+ scene->_soundHandler.play(198);
+ scene->_hotspot2.hide();
+ scene->_hotspot1.show();
+ setDelay(90);
+ break;
+ case 6:
+ scene->_stripManager.start(2166, this);
+ break;
+ case 7:
+ setDelay(60);
+ break;
+ case 8:
+ scene->_hotspot1.remove();
+ scene->_hotspot2.show();
+ _globals->setFlag(59);
+ setDelay(30);
+ break;
+ case 9:
+ _globals->_sceneManager.changeScene(2100);
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene3700::postInit(tSage::SceneObjectList *OwnerList) {
+ Scene::postInit();
+ loadScene(3700);
+
+ _stripManager.addSpeaker(&_speakerSText);
+ _stripManager.addSpeaker(&_speakerMText);
+ _stripManager.addSpeaker(&_speakerMR);
+ _speakerSText.setTextPos(Common::Point(20, 15));
+ _speakerMText.setTextPos(Common::Point(20, 15));
+
+ _viewer.postInit();
+ _viewer.setVisage(3705);
+ _viewer.setStrip(1);
+ _viewer.setFrame(2);
+ _viewer.setPosition(Common::Point(195, 83));
+
+ setAction(&_action1);
+ _globals->_soundHandler.play(195);
+}
+
+} // End of namespace tSage