aboutsummaryrefslogtreecommitdiff
path: root/engines/saga
diff options
context:
space:
mode:
authorMax Horn2008-11-03 18:32:16 +0000
committerMax Horn2008-11-03 18:32:16 +0000
commit55c10e0ec6f2d6ea7c58ec1e4b74e5552fda5ddc (patch)
tree4df4d54fc783f837004ab2419c90aaf5c7f5930a /engines/saga
parent646666125232064f2c4657c4025433b243e42af9 (diff)
downloadscummvm-rg350-55c10e0ec6f2d6ea7c58ec1e4b74e5552fda5ddc.tar.gz
scummvm-rg350-55c10e0ec6f2d6ea7c58ec1e4b74e5552fda5ddc.tar.bz2
scummvm-rg350-55c10e0ec6f2d6ea7c58ec1e4b74e5552fda5ddc.zip
Patch #2122869: ALL: Common load dialog
svn-id: r34883
Diffstat (limited to 'engines/saga')
-rw-r--r--engines/saga/detection.cpp26
-rw-r--r--engines/saga/saga.cpp8
-rw-r--r--engines/saga/saga.h3
3 files changed, 36 insertions, 1 deletions
diff --git a/engines/saga/detection.cpp b/engines/saga/detection.cpp
index eecff5f511..e26cf48dcb 100644
--- a/engines/saga/detection.cpp
+++ b/engines/saga/detection.cpp
@@ -33,7 +33,9 @@
#include "common/advancedDetector.h"
#include "common/system.h"
+#include "saga/animation.h"
#include "saga/displayinfo.h"
+#include "saga/events.h"
#include "saga/rscfile.h"
#include "saga/interface.h"
#include "saga/scene.h"
@@ -157,7 +159,9 @@ bool SagaMetaEngine::hasFeature(MetaEngineFeature f) const {
(f == kSupportsRTL) ||
(f == kSupportsListSaves) ||
(f == kSupportsLoadingDuringStartup) ||
- (f == kSupportsDeleteSave);
+ (f == kSupportsDeleteSave) ||
+ (f == kSupportsLoadingDuringRuntime) ||
+ (f == kSupportsSavingDuringRuntime);
}
bool SagaMetaEngine::createInstance(OSystem *syst, Engine **engine, const Common::ADGameDescription *desc) const {
@@ -237,4 +241,24 @@ int SagaEngine::getDisplayHeight() const {
return di.logicalHeight;
}
+int SagaEngine::loadGameState(int slot) {
+ // Init the current chapter to 8 (character selection) for IHNM
+ if (getGameType() == GType_IHNM)
+ _scene->changeScene(-2, 0, kTransitionFade, 8);
+
+ // First scene sets up palette
+ _scene->changeScene(getStartSceneNumber(), 0, kTransitionNoFade);
+ _events->handleEvents(0); // Process immediate events
+
+ if (getGameType() != GType_IHNM)
+ _interface->setMode(kPanelMain);
+ else
+ _interface->setMode(kPanelChapterSelection);
+
+ load(calcSaveFileName((uint)slot));
+ syncSoundSettings();
+
+ return 0; // TODO: return success/failure
+}
+
} // End of namespace Saga
diff --git a/engines/saga/saga.cpp b/engines/saga/saga.cpp
index 7904e60d1c..4ee81269d2 100644
--- a/engines/saga/saga.cpp
+++ b/engines/saga/saga.cpp
@@ -532,4 +532,12 @@ void SagaEngine::syncSoundSettings() {
_sound->setVolume();
}
+bool SagaEngine::canLoadGameStateCurrently() {
+ return !this->_scene->isInIntro();
+}
+
+bool SagaEngine::canSaveGameStateCurrently() {
+ return !this->_scene->isInIntro();
+}
+
} // End of namespace Saga
diff --git a/engines/saga/saga.h b/engines/saga/saga.h
index 2be74e1766..5417217065 100644
--- a/engines/saga/saga.h
+++ b/engines/saga/saga.h
@@ -650,6 +650,9 @@ public:
const Common::Rect &getDisplayClip() const { return _displayClip;}
int getDisplayWidth() const;
int getDisplayHeight() const;
+ int loadGameState(int slot);
+ bool canLoadGameStateCurrently();
+ bool canSaveGameStateCurrently();
const GameDisplayInfo &getDisplayInfo();
const char *getTextString(int textStringId);