AGOS: Improve the quick load/save code.

This commit is contained in:
Travis Howell 2012-08-12 15:00:58 +10:00
parent ab3b052c6f
commit 61af435d8a
2 changed files with 32 additions and 18 deletions

View file

@ -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;