From 18a7b010be586c73d5eacdfdaf68aed6c2b910ec Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Sun, 29 Mar 2015 16:14:26 -0400 Subject: [PATCH] BURIED: Implement the trial version's auto-recall --- engines/buried/environ/ai_lab.cpp | 4 +++ engines/buried/environ/castle.cpp | 4 +++ engines/buried/environ/da_vinci.cpp | 4 +++ engines/buried/environ/mayan.cpp | 4 +++ engines/buried/environ/scene_common.cpp | 34 +++++++++++++++++++++++++ engines/buried/environ/scene_common.h | 6 +++++ 6 files changed, 56 insertions(+) diff --git a/engines/buried/environ/ai_lab.cpp b/engines/buried/environ/ai_lab.cpp index 5a01158fde6..8de87e289e1 100644 --- a/engines/buried/environ/ai_lab.cpp +++ b/engines/buried/environ/ai_lab.cpp @@ -3776,6 +3776,10 @@ bool SceneViewWindow::checkCustomSpaceStationAICommentDependencies(const Locatio } SceneBase *SceneViewWindow::constructAILabSceneObject(Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation) { + // Special scene for the trial version + if (_vm->isTrial()) + return new TrialRecallScene(_vm, viewWindow, sceneStaticData, priorLocation); + switch (sceneStaticData.classID) { case 0: // Default scene diff --git a/engines/buried/environ/castle.cpp b/engines/buried/environ/castle.cpp index c265d465872..ab854530ec5 100644 --- a/engines/buried/environ/castle.cpp +++ b/engines/buried/environ/castle.cpp @@ -1115,6 +1115,10 @@ bool SceneViewWindow::checkCustomCastleAICommentDependencies(const Location &com } SceneBase *SceneViewWindow::constructCastleSceneObject(Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation) { + // Special scene for the trial version + if (_vm->isTrial()) + return new TrialRecallScene(_vm, viewWindow, sceneStaticData, priorLocation); + switch (sceneStaticData.classID) { case 0: // Default scene diff --git a/engines/buried/environ/da_vinci.cpp b/engines/buried/environ/da_vinci.cpp index 4aec6e87f7c..fcad1d2c5b1 100644 --- a/engines/buried/environ/da_vinci.cpp +++ b/engines/buried/environ/da_vinci.cpp @@ -2582,6 +2582,10 @@ bool SceneViewWindow::checkCustomDaVinciAICommentDependencies(const Location &co } SceneBase *SceneViewWindow::constructDaVinciSceneObject(Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation) { + // Special scene for the trial version + if (_vm->isTrial()) + return new TrialRecallScene(_vm, viewWindow, sceneStaticData, priorLocation); + switch (sceneStaticData.classID) { case 0: // Default scene diff --git a/engines/buried/environ/mayan.cpp b/engines/buried/environ/mayan.cpp index 515c40d7b56..0cb95812ef2 100644 --- a/engines/buried/environ/mayan.cpp +++ b/engines/buried/environ/mayan.cpp @@ -2351,6 +2351,10 @@ bool SceneViewWindow::checkCustomMayanAICommentDependencies(const Location &comm } SceneBase *SceneViewWindow::constructMayanSceneObject(Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation) { + // Special scene for the trial version + if (_vm->isTrial()) + return new TrialRecallScene(_vm, viewWindow, sceneStaticData, priorLocation); + switch (sceneStaticData.classID) { case 0: // Default scene diff --git a/engines/buried/environ/scene_common.cpp b/engines/buried/environ/scene_common.cpp index af6fcb7148a..f10344d6d58 100644 --- a/engines/buried/environ/scene_common.cpp +++ b/engines/buried/environ/scene_common.cpp @@ -28,6 +28,7 @@ #include "buried/gameui.h" #include "buried/graphics.h" #include "buried/inventory_window.h" +#include "buried/message.h" #include "buried/navarrow.h" #include "buried/resources.h" #include "buried/sound.h" @@ -35,6 +36,7 @@ #include "buried/environ/scene_common.h" #include "common/stream.h" +#include "common/system.h" #include "graphics/surface.h" namespace Buried { @@ -1276,4 +1278,36 @@ int ClickPlaySoundSynchronous::specifyCursor(Window *viewWindow, const Common::P return kCursorArrow; } +TrialRecallScene::TrialRecallScene(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation) : + SceneBase(vm, viewWindow, sceneStaticData, priorLocation) { + // Disable all movement + _staticData.destUp.destinationScene = Location(-1, -1, -1, -1, -1, -1); + _staticData.destLeft.destinationScene = Location(-1, -1, -1, -1, -1, -1); + _staticData.destRight.destinationScene = Location(-1, -1, -1, -1, -1, -1); + _staticData.destDown.destinationScene = Location(-1, -1, -1, -1, -1, -1); + _staticData.destForward.destinationScene = Location(-1, -1, -1, -1, -1, -1); +} + +int TrialRecallScene::postEnterRoom(Window *viewWindow, const Location &priorLocation) { + // Display the message + static const char *const message = + "This timezone is not available in this Trial Version. " + "Call (800) 943-3664 to purchase the complete version of Buried in Time.\n" + "Initiating Auto-Recall to Future Apartment..."; + ((SceneViewWindow *)viewWindow)->displayLiveText(message, false); + + // Wait about 10 seconds + Cursor oldCursor = _vm->_gfx->setCursor(kCursorWait); + uint32 start = g_system->getMillis(); + while (g_system->getMillis() - start < 10000) + _vm->yield(); + _vm->_gfx->setCursor(oldCursor); + + // Force a recall + ((GameUIWindow *)viewWindow->getParent())->_bioChipRightWindow->changeCurrentBioChip(kItemBioChipJump); + ((GameUIWindow *)viewWindow->getParent())->_bioChipRightWindow->sendMessage(new LButtonUpMessage(Common::Point(50, 150), 0)); + + return SC_TRUE; +} + } // End of namespace Buried diff --git a/engines/buried/environ/scene_common.h b/engines/buried/environ/scene_common.h index efa41acfc59..c55fa2f8430 100644 --- a/engines/buried/environ/scene_common.h +++ b/engines/buried/environ/scene_common.h @@ -408,6 +408,12 @@ private: int _flagOffset; }; +class TrialRecallScene : public SceneBase { +public: + TrialRecallScene(BuriedEngine *vm, Window *viewWindow, const LocationStaticData &sceneStaticData, const Location &priorLocation); + int postEnterRoom(Window *viewWindow, const Location &priorLocation); +}; + } // End of namespace Buried #endif