aboutsummaryrefslogtreecommitdiff
path: root/engines/agos/saveload.cpp
diff options
context:
space:
mode:
authorTravis Howell2012-08-12 15:00:58 +1000
committerTravis Howell2012-08-12 15:00:58 +1000
commit61af435d8a870a0630b5dea2ecf69cd58fc95946 (patch)
tree6c39122685964c21f0f96d5fd10e8bd559388064 /engines/agos/saveload.cpp
parentab3b052c6f16843bda7bd1ded8a210d1192a389f (diff)
downloadscummvm-rg350-61af435d8a870a0630b5dea2ecf69cd58fc95946.tar.gz
scummvm-rg350-61af435d8a870a0630b5dea2ecf69cd58fc95946.tar.bz2
scummvm-rg350-61af435d8a870a0630b5dea2ecf69cd58fc95946.zip
AGOS: Improve the quick load/save code.
Diffstat (limited to 'engines/agos/saveload.cpp')
-rw-r--r--engines/agos/saveload.cpp44
1 files changed, 31 insertions, 13 deletions
diff --git a/engines/agos/saveload.cpp b/engines/agos/saveload.cpp
index b3ec916b47..c6bca1a6e6 100644
--- a/engines/agos/saveload.cpp
+++ b/engines/agos/saveload.cpp
@@ -142,23 +142,41 @@ void AGOSEngine_Feeble::quickLoadOrSave() {
}
#endif
+// The function uses segments of code from the original game scripts
+// to allow quick loading and saving, but isn't perfect.
+//
+// Unfortuntely this allows loading and saving in locations,
+// which aren't supported, and will not restore correctly:
+// Various locations in Elvira 1/2 and Waxworks where saving
+// was disabled
void AGOSEngine::quickLoadOrSave() {
- // The function uses segments of code from the original game scripts
- // to allow quick loading and saving, but isn't perfect.
- //
- // Unfortuntely this allows loading and saving in locations,
- // which aren't supported, and will not restore correctly:
- // Any overhead maps in Simon the Sorcerer 2
- // Various locations in Elvira 1/2 and Waxworks where saving
- // was disabled
-
- // The floppy disk demo of Simon the Sorcerer 1 doesn't work.
- if (getFeatures() & GF_DEMO)
- return;
-
bool success;
Common::String buf;
+ // Disable loading and saving when it was not possible in the original:
+ // In overhead maps areas in Simon the Sorcerer 2
+ // In the floppy disk demo of Simon the Sorcerer 1
+ // In copy protection, conversations and cut scenes
+ if ((getGameType() == GType_SIMON2 && _boxStarHeight == 200) ||
+ (getGameType() == GType_SIMON1 && (getFeatures() & GF_DEMO)) ||
+ _mouseHideCount || _showPreposition) {
+ buf = Common::String::format("Quick load or save game isn't supported in this location");
+ GUI::MessageDialog dialog(buf, "OK");
+ dialog.runModal();
+ return;
+ }
+
+ // Check if Simon is walking, and stop when required
+ if (getGameType() == GType_SIMON1 && getBitFlag(11)) {
+ vcStopAnimation(11, 1122);
+ animate(4, 11, 1122, 0, 0, 2);
+ waitForSync(1122);
+ } else if (getGameType() == GType_SIMON2 && getBitFlag(11)) {
+ vcStopAnimation(11, 232);
+ animate(4, 11, 232, 0, 0, 2);
+ waitForSync(1122);
+ }
+
char *filename = genSaveName(_saveLoadSlot);
if (_saveLoadType == 2) {
Subroutine *sub;