aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Gilbert2011-09-28 20:40:49 +1000
committerPaul Gilbert2011-09-28 20:40:49 +1000
commitf444a2544d8eada5886e6ed478ed40bb3e9841cf (patch)
tree9e89fc270790ef4b9217b172a3498fc0c6fae1df
parent10f0ea4306be2b274a79cc16a406536c36662d88 (diff)
downloadscummvm-rg350-f444a2544d8eada5886e6ed478ed40bb3e9841cf.tar.gz
scummvm-rg350-f444a2544d8eada5886e6ed478ed40bb3e9841cf.tar.bz2
scummvm-rg350-f444a2544d8eada5886e6ed478ed40bb3e9841cf.zip
TSAGE: Implemented Blue Force scene 600
-rw-r--r--engines/tsage/blue_force/blueforce_logic.cpp2
-rw-r--r--engines/tsage/blue_force/blueforce_scenes6.cpp101
-rw-r--r--engines/tsage/blue_force/blueforce_scenes6.h18
3 files changed, 121 insertions, 0 deletions
diff --git a/engines/tsage/blue_force/blueforce_logic.cpp b/engines/tsage/blue_force/blueforce_logic.cpp
index eff363f2a1..b0f3b21e3a 100644
--- a/engines/tsage/blue_force/blueforce_logic.cpp
+++ b/engines/tsage/blue_force/blueforce_logic.cpp
@@ -144,6 +144,8 @@ Scene *BlueForceGame::createScene(int sceneNumber) {
case 590:
error("Scene group 5 not implemented");
case 600:
+ // Crash cut-scene
+ return new Scene600();
case 620:
error("Scene group 6 not implemented");
case 666:
diff --git a/engines/tsage/blue_force/blueforce_scenes6.cpp b/engines/tsage/blue_force/blueforce_scenes6.cpp
index e150a6e5b7..5c48de3f30 100644
--- a/engines/tsage/blue_force/blueforce_scenes6.cpp
+++ b/engines/tsage/blue_force/blueforce_scenes6.cpp
@@ -31,6 +31,107 @@ namespace TsAGE {
namespace BlueForce {
/*--------------------------------------------------------------------------
+ * Scene 600 - Crash cut-scene
+ *
+ *--------------------------------------------------------------------------*/
+
+void Scene600::Action1::signal() {
+ Scene600 *scene = (Scene600 *)BF_GLOBALS._sceneManager._scene;
+ static const uint32 black = 0;
+
+ switch (_actionIndex++) {
+ case 0:
+ setDelay(2);
+ break;
+ case 1:
+ BF_GLOBALS._sound1.play(57);
+ setDelay(120);
+ break;
+ case 2:
+ scene->_sound1.play(59);
+ setAction(&scene->_sequenceManager, this, 600, &scene->_object2, &scene->_object1,
+ &BF_GLOBALS._player, &scene->_object3, NULL);
+ break;
+ case 3:
+ BF_GLOBALS._sound1.play(61);
+ setDelay(180);
+ break;
+ case 4:
+ setDelay(180);
+ break;
+ case 5: {
+ BF_GLOBALS._player.remove();
+ scene->_object1.remove();
+ scene->_object2.remove();
+ scene->_object3.remove();
+
+ for (int percent = 100; percent >= 0; percent -= 5) {
+ BF_GLOBALS._scenePalette.fade((byte *)&black, false, percent);
+ g_system->delayMillis(10);
+ }
+
+ SynchronizedList<SceneObject *>::iterator i;
+ for (i = BF_GLOBALS._sceneObjects->begin(); i != BF_GLOBALS._sceneObjects->end(); ++i) {
+ SceneObject *pObj = *i;
+ pObj->addMover(NULL);
+ pObj->setObjectWrapper(NULL);
+ pObj->animate(ANIM_MODE_NONE, NULL);
+ }
+
+ BF_GLOBALS._screenSurface.fillRect(BF_GLOBALS._screenSurface.getBounds(), 0);
+ BF_GLOBALS._v51C44 = 1;
+ scene->loadScene(999);
+ setDelay(5);
+ break;
+ }
+ case 6:
+ setDelay(5);
+ break;
+ case 7:
+ BF_GLOBALS._v51C44 = 0;
+ remove();
+ break;
+ }
+}
+
+/*--------------------------------------------------------------------------*/
+
+void Scene600::postInit(SceneObjectList *OwnerList) {
+ SceneExt::postInit();
+ loadScene(600);
+ setZoomPercents(0, 100, 200, 100);
+ _sceneBounds.moveTo(320, 0);
+
+ _sound1.play(58);
+ _sound1.holdAt(1);
+
+ BF_GLOBALS._player.postInit();
+ BF_GLOBALS._player.hide();
+ BF_GLOBALS._player.setPosition(Common::Point(639, 0));
+ BF_GLOBALS._player.disableControl();
+
+ _object3.postInit();
+ _object3.hide();
+ _object2.postInit();
+
+ _object1.postInit();
+ _object1.setVisage(600);
+ _object1.setStrip(7);
+ _object1.setPosition(Common::Point(417, 82));
+
+ BF_GLOBALS.clearFlag(onDuty);
+ BF_INVENTORY.setObjectScene(INV_TICKET_BOOK, 60);
+ BF_INVENTORY.setObjectScene(INV_MIRANDA_CARD, 60);
+ _sceneMode = 600;
+
+ setAction(&_action1, this);
+}
+
+void Scene600::signal() {
+ BF_GLOBALS._sceneManager.changeScene(620);
+}
+
+/*--------------------------------------------------------------------------
* Scene 666 - Death Scene
*
*--------------------------------------------------------------------------*/
diff --git a/engines/tsage/blue_force/blueforce_scenes6.h b/engines/tsage/blue_force/blueforce_scenes6.h
index b7449c5e30..8b97af8bfe 100644
--- a/engines/tsage/blue_force/blueforce_scenes6.h
+++ b/engines/tsage/blue_force/blueforce_scenes6.h
@@ -39,6 +39,24 @@ namespace BlueForce {
using namespace TsAGE;
+class Scene600 : public SceneExt {
+ /* Actions */
+ class Action1 : public Action {
+ public:
+ virtual void signal();
+ };
+public:
+ SequenceManager _sequenceManager;
+ Action1 _action1;
+ ASoundExt _sound1;
+ NamedObject _object1, _object2, _object3;
+ BackgroundSceneObject _object4, _object5;
+ BackgroundSceneObject _object6, _object7, _object8;
+
+ virtual void postInit(SceneObjectList *OwnerList = NULL);
+ virtual void signal();
+};
+
class Scene666 : public SceneExt {
/* Actions */
class Action1 : public Action {