aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Horn2010-01-30 19:08:00 +0000
committerMax Horn2010-01-30 19:08:00 +0000
commit87856c545c5b46a0d6062cf4f953e7ee4e0e2d8e (patch)
treeecf5b7f032dab841d1c146d148ca5d5ec93a851e
parent4f4b559d1cf9ecabe7d395428e14518ee7ed664d (diff)
downloadscummvm-rg350-87856c545c5b46a0d6062cf4f953e7ee4e0e2d8e.tar.gz
scummvm-rg350-87856c545c5b46a0d6062cf4f953e7ee4e0e2d8e.tar.bz2
scummvm-rg350-87856c545c5b46a0d6062cf4f953e7ee4e0e2d8e.zip
SCI: Don't mess with save_slot just to be able to decide whether we already honored a load request or not
svn-id: r47726
-rw-r--r--engines/sci/engine/vm.cpp12
-rw-r--r--engines/sci/sci.cpp9
2 files changed, 12 insertions, 9 deletions
diff --git a/engines/sci/engine/vm.cpp b/engines/sci/engine/vm.cpp
index 06cfc0b6b0..af57bb88e9 100644
--- a/engines/sci/engine/vm.cpp
+++ b/engines/sci/engine/vm.cpp
@@ -46,6 +46,7 @@ const reg_t SIGNAL_REG = {0, SIGNAL_OFFSET};
//#define VM_DEBUG_SEND
ScriptState scriptState; // FIXME: Avoid non-const global vars
+int g_loadFromLauncher; // FIXME: Avoid non-const global vars
int script_abort_flag = 0; // Set to 1 to abort execution. Set to 2 to force a replay afterwards // FIXME: Avoid non-const global vars
int script_step_counter = 0; // Counts the number of steps executed // FIXME: Avoid non-const global vars
@@ -543,11 +544,6 @@ void run_vm(EngineState *s, int restoring) {
reg_t r_temp; // Temporary register
StackPtr s_temp; // Temporary stack pointer
int16 opparams[4]; // opcode parameters
- bool loadFromLauncher = ConfMan.hasKey("save_slot") ? true : false;
- if (loadFromLauncher) {
- if (ConfMan.getInt("save_slot") < 0)
- loadFromLauncher = false; // already loaded
- }
scriptState.restAdjust = s->restAdjust;
// &rest adjusts the parameter count by this value
@@ -1042,13 +1038,11 @@ void run_vm(EngineState *s, int restoring) {
//warning("callk %s", kfun.orig_name.c_str());
// TODO: SCI2/SCI2.1+ equivalent, once saving/loading works in SCI2/SCI2.1+
- if (loadFromLauncher && opparams[0] == 0x8) {
+ if (g_loadFromLauncher >= 0 && opparams[0] == 0x8) {
// A game is being loaded from the launcher, and kDisplay is called, all initialization has taken
// place (i.e. menus have been constructed etc). Therefore, inject a kRestoreGame call
// here, instead of the requested function.
- int saveSlot = ConfMan.getInt("save_slot");
- ConfMan.setInt("save_slot", -1); // invalidate slot
- loadFromLauncher = false;
+ int saveSlot = g_loadFromLauncher;
if (saveSlot < 0)
error("Requested to load invalid save slot"); // should never happen, really
diff --git a/engines/sci/sci.cpp b/engines/sci/sci.cpp
index 20a0b1af2e..980b04ed61 100644
--- a/engines/sci/sci.cpp
+++ b/engines/sci/sci.cpp
@@ -50,6 +50,8 @@
namespace Sci {
+extern int g_loadFromLauncher;
+
class GfxDriver;
SciEngine::SciEngine(OSystem *syst, const ADGameDescription *desc)
@@ -215,6 +217,13 @@ Common::Error SciEngine::run() {
debug("Emulating SCI version %s\n", getSciVersionDesc(getSciVersion()).c_str());
+ // Check whether loading a savestate was requested
+ if (ConfMan.hasKey("save_slot")) {
+ g_loadFromLauncher = ConfMan.getInt("save_slot");
+ } else {
+ g_loadFromLauncher = -1;
+ }
+
game_run(&_gamestate); // Run the game
game_exit(_gamestate);