diff options
| -rw-r--r-- | engines/agos/agos.cpp | 34 | ||||
| -rw-r--r-- | engines/agos/agos.h | 2 | ||||
| -rw-r--r-- | engines/agos/items.cpp | 18 | ||||
| -rw-r--r-- | engines/agos/saveload.cpp | 58 | 
4 files changed, 79 insertions, 33 deletions
| diff --git a/engines/agos/agos.cpp b/engines/agos/agos.cpp index bbbed04756..c83606629a 100644 --- a/engines/agos/agos.cpp +++ b/engines/agos/agos.cpp @@ -569,7 +569,7 @@ void AGOSEngine::setupGame() {  #endif  		_tableMemSize = 200000;  		_vgaBaseDelay = 5; -		_numVars = 256; +		_numVars = 255;  	} else if (getGameType() == GType_SIMON2) {  		gss = PTR(simon2_settings);  		_tableIndexBase = 1580 / 4; @@ -589,23 +589,25 @@ void AGOSEngine::setupGame() {  			_musicIndexBase = 1128 / 4;  		_soundIndexBase = 1660 / 4;  		_vgaBaseDelay = 1; -		_numVars = 256; -	} else if (getGameType() == GType_ELVIRA) { +		_numVars = 255; +	} else if (getGameType() == GType_SIMON1) {  		gss = PTR(simon1_settings); +		_tableIndexBase = 1576 / 4; +		_textIndexBase = 1460 / 4;  		_numTextBoxes = 20; -		_numVideoOpcodes = 56; +		_numVideoOpcodes = 64;  #ifndef PALMOS_68K  		_vgaMemSize = 1000000;  #else  		_vgaMemSize = gVars->memory[kMemSimon1Games];  #endif  		_tableMemSize = 150000; +		_musicIndexBase = 1316 / 4; +		_soundIndexBase = 0;  		_vgaBaseDelay = 1; -		_numVars = 512; -	} else { +		_numVars = 255; +	} else if (getGameType() == GType_WW) {  		gss = PTR(simon1_settings); -		_tableIndexBase = 1576 / 4; -		_textIndexBase = 1460 / 4;  		_numTextBoxes = 20;  		_numVideoOpcodes = 64;  #ifndef PALMOS_68K @@ -614,10 +616,20 @@ void AGOSEngine::setupGame() {  		_vgaMemSize = gVars->memory[kMemSimon1Games];  #endif  		_tableMemSize = 150000; -		_musicIndexBase = 1316 / 4; -		_soundIndexBase = 0;  		_vgaBaseDelay = 1; -		_numVars = 256; +		_numVars = 255; +	} else if (getGameType() == GType_ELVIRA) { +		gss = PTR(simon1_settings); +		_numTextBoxes = 20; +		_numVideoOpcodes = 56; +#ifndef PALMOS_68K +		_vgaMemSize = 1000000; +#else +		_vgaMemSize = gVars->memory[kMemSimon1Games]; +#endif +		_tableMemSize = 150000; +		_vgaBaseDelay = 1; +		_numVars = 512;  	}  	allocItemHeap(); diff --git a/engines/agos/agos.h b/engines/agos/agos.h index 4799c46a11..b60aea1cea 100644 --- a/engines/agos/agos.h +++ b/engines/agos/agos.h @@ -1196,7 +1196,7 @@ protected:  	Item *getNextItemPtrStrange(); -	bool saveGame(uint slot, char *caption); +	bool saveGame(uint slot, const char *caption);  	bool loadGame(uint slot);  	void openTextWindow(); diff --git a/engines/agos/items.cpp b/engines/agos/items.cpp index 23dd2ace13..abe484786b 100644 --- a/engines/agos/items.cpp +++ b/engines/agos/items.cpp @@ -2548,10 +2548,28 @@ void AGOSEngine::o4_saveUserGame() {  	if (_clockStopped != 0)  		_gameTime += time(NULL) - _clockStopped;  	_clockStopped = 0; + +	if (getGameId() == GID_DIMP) { +		saveGame(1, (const char *)"dimp"); +	} else if (!getBitFlag(110)) { +		// Swampy adventures +		saveGame(1, (const char *)"swampy"); +	} + +	//saveHiScores()  }  void AGOSEngine::o4_loadUserGame() {  	// 133: load usergame + +	// NoPatience or Jumble +	if (getBitFlag(110)) { +		//getHiScoreName(); +		return; +	} + +	// XXX +	loadGame(1);  }  void AGOSEngine::o4_saveOopsPosition() { diff --git a/engines/agos/saveload.cpp b/engines/agos/saveload.cpp index 956d3aed32..dcaef46624 100644 --- a/engines/agos/saveload.cpp +++ b/engines/agos/saveload.cpp @@ -110,7 +110,11 @@ int AGOSEngine::displaySaveGameList(int curpos, bool load, char *dst) {  char *AGOSEngine::genSaveName(int slot) {  	static char buf[15]; -	if (getGameType() == GType_FF) { +	if (getGameId() == GID_DIMP) { +		sprintf(buf, "dimp.sav"); +	} else if (getGameType() == GType_PP) { +		sprintf(buf, "swampy.sav"); +	} else if (getGameType() == GType_FF) {  		if (slot == 999) {  			// Restart state  			if (getPlatform() == Common::kPlatformWindows) @@ -576,7 +580,7 @@ loop:;  	undefineBox(0x7FFF);  } -bool AGOSEngine::saveGame(uint slot, char *caption) { +bool AGOSEngine::saveGame(uint slot, const char *caption) {  	Common::WriteStream *f;  	uint item_index, num_item, i, j;  	TimeEvent *te; @@ -592,7 +596,7 @@ bool AGOSEngine::saveGame(uint slot, char *caption) {  		return false;  	} -	if (getGameType() == GType_FF) { +	if (getGameType() == GType_FF || getGameType() == GType_PP) {  		f->write(caption, 100);  		curTime = time(NULL);  	} else { @@ -609,7 +613,7 @@ bool AGOSEngine::saveGame(uint slot, char *caption) {  		i++;  	f->writeUint32BE(i); -	if (_clockStopped) +	if (getGameType() == GType_FF && _clockStopped)  		gsc += ((uint32)time(NULL) - _clockStopped);  	for (te = _firstTimeStruct; te; te = te->next) {  		f->writeUint32BE(te->time - curTime + gsc); @@ -650,8 +654,8 @@ bool AGOSEngine::saveGame(uint slot, char *caption) {  		}  	} -	// write the 255 variables -	for (i = 0; i != 255; i++) { +	// write the variables +	for (i = 0; i != _numVars; i++) {  		f->writeUint16BE(readVariable(i));  	} @@ -660,13 +664,19 @@ bool AGOSEngine::saveGame(uint slot, char *caption) {  		f->writeUint16BE(itemPtrToID(_itemStore[i]));  	} -	// Write the bits in array 1 -	for (i = 0; i != 16; i++) -		f->writeUint16BE(_bitArray[i]); +	if (getGameType() == GType_PP) { +		// Write the bits in array 1 +		for (i = 0; i != 128; i++) +			f->writeUint16BE(_bitArray[i]); +	} else { +		// Write the bits in array 1 +		for (i = 0; i != 16; i++) +			f->writeUint16BE(_bitArray[i]); -	// Write the bits in array 2 -	for (i = 0; i != 16; i++) -		f->writeUint16BE(_bitArrayTwo[i]); +		// Write the bits in array 2 +		for (i = 0; i != 16; i++) +			f->writeUint16BE(_bitArrayTwo[i]); +	}  	// Write the bits in array 3  	if (getGameType() == GType_FF) { @@ -709,7 +719,7 @@ bool AGOSEngine::loadGame(uint slot) {  		return false;  	} -	if (getGameType() == GType_FF) { +	if (getGameType() == GType_FF || getGameType() == GType_PP) {  		f->read(ident, 100);  	} else {  		f->read(ident, 18); @@ -781,8 +791,8 @@ bool AGOSEngine::loadGame(uint slot) {  	} -	// read the 255 variables -	for (i = 0; i != 255; i++) { +	// read the variables +	for (i = 0; i != _numVars; i++) {  		writeVariable(i, f->readUint16BE());  	} @@ -791,13 +801,19 @@ bool AGOSEngine::loadGame(uint slot) {  		_itemStore[i] = derefItem(f->readUint16BE());  	} -	// Read the bits in array 1 -	for (i = 0; i != 16; i++) -		_bitArray[i] = f->readUint16BE(); +	if (getGameType() == GType_PP) { +		// Read the bits in array 1 +		for (i = 0; i != 128; i++) +			_bitArray[i] = f->readUint16BE(); +	} else { +		// Read the bits in array 1 +		for (i = 0; i != 16; i++) +			_bitArray[i] = f->readUint16BE(); -	// Read the bits in array 2 -	for (i = 0; i != 16; i++) -		_bitArrayTwo[i] = f->readUint16BE(); +		// Read the bits in array 2 +		for (i = 0; i != 16; i++) +			_bitArrayTwo[i] = f->readUint16BE(); +	}  	// Read the bits in array 3  	if (getGameType() == GType_FF) { | 
