diff options
| author | Travis Howell | 2012-08-12 15:00:58 +1000 | 
|---|---|---|
| committer | Travis Howell | 2012-08-12 15:00:58 +1000 | 
| commit | 61af435d8a870a0630b5dea2ecf69cd58fc95946 (patch) | |
| tree | 6c39122685964c21f0f96d5fd10e8bd559388064 | |
| parent | ab3b052c6f16843bda7bd1ded8a210d1192a389f (diff) | |
| download | scummvm-rg350-61af435d8a870a0630b5dea2ecf69cd58fc95946.tar.gz scummvm-rg350-61af435d8a870a0630b5dea2ecf69cd58fc95946.tar.bz2 scummvm-rg350-61af435d8a870a0630b5dea2ecf69cd58fc95946.zip | |
AGOS: Improve the quick load/save code.
| -rw-r--r-- | engines/agos/event.cpp | 6 | ||||
| -rw-r--r-- | engines/agos/saveload.cpp | 44 | 
2 files changed, 32 insertions, 18 deletions
| diff --git a/engines/agos/event.cpp b/engines/agos/event.cpp index ed26b96381..cc1c40c207 100644 --- a/engines/agos/event.cpp +++ b/engines/agos/event.cpp @@ -467,11 +467,7 @@ void AGOSEngine::delay(uint amount) {  					memset(_saveLoadName, 0, sizeof(_saveLoadName));  					sprintf(_saveLoadName, "Quick %d", _saveLoadSlot);  					_saveLoadType = (event.kbd.hasFlags(Common::KBD_ALT)) ? 1 : 2; - -					// We should only allow a load or save when it was possible in original -					// This stops load/save during copy protection, conversations and cut scenes -					if (!_mouseHideCount && !_showPreposition) -						quickLoadOrSave(); +					quickLoadOrSave();  				} else if (event.kbd.hasFlags(Common::KBD_CTRL)) {  					if (event.kbd.keycode == Common::KEYCODE_a) {  						GUI::Dialog *_aboutDialog; 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; | 
