diff options
| -rw-r--r-- | engines/access/access.cpp | 58 | ||||
| -rw-r--r-- | engines/access/access.h | 9 | ||||
| -rw-r--r-- | engines/access/amazon/amazon_game.cpp | 40 | ||||
| -rw-r--r-- | engines/access/amazon/amazon_game.h | 48 | ||||
| -rw-r--r-- | engines/access/data.cpp | 14 | ||||
| -rw-r--r-- | engines/access/data.h | 6 | ||||
| -rw-r--r-- | engines/access/inventory.cpp | 10 | ||||
| -rw-r--r-- | engines/access/inventory.h | 5 | ||||
| -rw-r--r-- | engines/access/player.cpp | 8 | ||||
| -rw-r--r-- | engines/access/player.h | 6 | ||||
| -rw-r--r-- | engines/access/sound.cpp | 2 | 
11 files changed, 170 insertions, 36 deletions
| diff --git a/engines/access/access.cpp b/engines/access/access.cpp index 3e8eff3614..9525608b2b 100644 --- a/engines/access/access.cpp +++ b/engines/access/access.cpp @@ -76,8 +76,6 @@ AccessEngine::AccessEngine(OSystem *syst, const AccessGameDescription *gameDesc)  	_currentMan = 0;  	_newTime = 0;  	_newDate = 0; -	_intTim[3] = 0; -	_timer[3] = 0;  	Common::fill(&_objectsTable[0], &_objectsTable[100], (SpriteResource *)nullptr);  	Common::fill(&_establishTable[0], &_establishTable[100], false);  	Common::fill(&_flags[0], &_flags[256], 0); @@ -180,33 +178,9 @@ Common::Error AccessEngine::run() {  	playGame(); -	dummyLoop();  	return Common::kNoError;  } -void AccessEngine::dummyLoop() { -	// Dummy game loop -	while (!shouldQuit()) { -		_events->pollEvents(); - -		_curTime = g_system->getMillis(); -		// Process machine once every tick -		while (_curTime - _lastTime < 20) { -			g_system->delayMillis(5); -			_curTime = g_system->getMillis(); -		} - -		_lastTime = _curTime; - -		g_system->updateScreen(); - -		if (_events->_leftButton) { -			CursorType cursorId = _events->getCursor(); -			_events->setCursor((cursorId == CURSOR_HELP) ? CURSOR_ARROW : (CursorType)(cursorId + 1)); -		} -	} -} -  int AccessEngine::getRandomNumber(int maxNumber) {  	return _randomSource.getRandomNumber(maxNumber);  } @@ -411,4 +385,36 @@ void AccessEngine::freeChar() {  	_animation->freeAnimationData();  } +void AccessEngine::synchronize(Common::Serializer &s) { +	s.syncAsUint16LE(_conversation); +	s.syncAsUint16LE(_currentMan); +	s.syncAsUint32LE(_newTime); +	s.syncAsUint32LE(_newDate); + +	for (int i = 0; i < 256; ++i) +		s.syncAsUint16LE(_flags[i]); +	for (int i = 0; i < 366; ++i) { +		s.syncAsByte(_help1[i]); +		s.syncAsByte(_help2[i]); +		s.syncAsByte(_help3[i]); +	} + +	s.syncAsUint16LE(_travel); +	s.syncAsUint16LE(_ask); +	s.syncAsUint16LE(_rScrollRow); +	s.syncAsUint16LE(_rScrollCol); +	s.syncAsSint16LE(_rScrollX); +	s.syncAsSint16LE(_rScrollY); +	s.syncAsUint16LE(_rOldRectCount); +	s.syncAsUint16LE(_rNewRectCount); +	s.syncAsUint16LE(_rKeyFlag); +	s.syncAsUint16LE(_mapOffset); +	s.syncAsUint16LE(_screenVirtX); + +	// Synchronize sub-objects +	_timers.synchronize(s); +	_inventory->synchronize(s); +	_player->synchronize(s); +} +  } // End of namespace Access diff --git a/engines/access/access.h b/engines/access/access.h index 55810e8a16..7d76be9039 100644 --- a/engines/access/access.h +++ b/engines/access/access.h @@ -27,6 +27,7 @@  #include "common/system.h"  #include "common/error.h"  #include "common/random.h" +#include "common/serializer.h"  #include "common/util.h"  #include "engines/engine.h"  #include "graphics/surface.h" @@ -90,7 +91,6 @@ private:  	 */  	void setVGA(); -	void dummyLoop();  protected:  	const AccessGameDescription *_gameDescription;  	Common::RandomSource _randomSource; @@ -110,6 +110,11 @@ protected:  	 * Play the game  	 */  	virtual void playGame() = 0; + +	/** +	* Synchronize savegame data +	*/ +	virtual void synchronize(Common::Serializer &s);  public:  	AnimationManager *_animation;  	BubbleBox *_bubbleBox; @@ -177,8 +182,6 @@ public:  	int _currentMan;  	uint32 _newTime;  	uint32 _newDate; -	int _intTim[3]; -	int _timer[3];  	int _flags[256];  	byte _help1[366];  	byte _help2[366]; diff --git a/engines/access/amazon/amazon_game.cpp b/engines/access/amazon/amazon_game.cpp index cf383ce45a..0ccaae85dc 100644 --- a/engines/access/amazon/amazon_game.cpp +++ b/engines/access/amazon/amazon_game.cpp @@ -44,7 +44,7 @@ AmazonEngine::AmazonEngine(OSystem *syst, const AccessGameDescription *gameDesc)  	_hitCount = 0;  	_saveRiver = 0;  	_hitSafe = 0; -	_oldTitleChap = _chapter = 0; +	_oldTitleChapter = _chapter = 0;  	_updateChapter = -1;  	_topList = 0;  	_botList = 0; @@ -291,10 +291,10 @@ void AmazonEngine::tileScreen() {  	if (!_screen->_vesaMode)  		return; -	if (!_clearSummaryFlag && (_oldTitleChap == _chapter)) +	if (!_clearSummaryFlag && (_oldTitleChapter == _chapter))  		return; -	_oldTitleChap = _chapter; +	_oldTitleChapter = _chapter;  	int idx = _chapter - 1;  	if (!_files->existFile(_tileFiles[idx])) @@ -361,6 +361,40 @@ void AmazonEngine::drawHelp() {  	error("TODO: drawHelp");  } +void AmazonEngine::synchronize(Common::Serializer &s) { +	AccessEngine::synchronize(s); + +	s.syncAsSint16LE(_canoeLane); +	s.syncAsSint16LE(_canoeYPos); +	s.syncAsSint16LE(_hitCount); +	s.syncAsSint16LE(_saveRiver); +	s.syncAsSint16LE(_hitSafe); +	s.syncAsSint16LE(_chapter); +	s.syncAsSint16LE(_topList); +	s.syncAsSint16LE(_botList); +	s.syncAsSint16LE(_riverIndex); +	s.syncAsSint16LE(_rawInactiveX); +	s.syncAsSint16LE(_rawInactiveY); +	s.syncAsSint16LE(_inactiveYOff); +	for (int i = 0; i < 100; ++i) +		s.syncAsSint16LE(_esTabTable[i]); +} + +/*------------------------------------------------------------------------*/ + +Guard::Guard() { +	_guardCel = 0; +	_gCode1 = _gCode2 = 0; +	_xMid = _yMid = 0; +} + +Plane::Plane() { +	_pCount = 0; +	_planeCount = 0; +	_propCount = 0; +	_xCount = 0; +} +  } // End of namespace Amazon  } // End of namespace Access diff --git a/engines/access/amazon/amazon_game.h b/engines/access/amazon/amazon_game.h index 59511c4546..6511b377ae 100644 --- a/engines/access/amazon/amazon_game.h +++ b/engines/access/amazon/amazon_game.h @@ -29,6 +29,29 @@ namespace Access {  namespace Amazon { +class Plane { +public: +	int _pCount; +	Common::Point _position; +	int _planeCount; +	int _propCount; +	int _xCount; +public: +	Plane(); +}; + +class Guard { +public: +	int _guardCel; +	Common::Point _position; +	int _gCode1; +	int _gCode2; +	Common::Rect _bounds; +	int _xMid, _yMid; +public: +	Guard(); +}; +  class AmazonEngine : public AccessEngine {  private:  	bool _skipStart; @@ -39,7 +62,6 @@ private:  	int _hitCount;  	int _saveRiver;  	int _hitSafe; -	int _oldTitleChap;  	int _topList;  	int _botList;  	int _riverIndex; @@ -47,6 +69,8 @@ private:  	int _rawInactiveY;  	int _inactiveYOff;  	int _esTabTable[100]; + +	// Other fields  	Common::Point _tilePos;  	byte _tileData[1455]; @@ -84,6 +108,11 @@ protected:  	 * Play the game  	 */  	virtual void playGame(); + +	/** +	* Synchronize savegame data +	*/ +	virtual void synchronize(Common::Serializer &s);  public:  	// Fields that are mapped to flags  	int &_guardLocation; @@ -100,11 +129,24 @@ public:  	int &_allenFlag;  	int &_noSound; +	// Saved fields +	int _chapter; +  	// Other game specific fields +	Guard _guard; +	Plane _plane;  	int _hintLevel; - -	int _chapter;  	int _updateChapter; +	int _oldTitleChapter; +	int _maxHits; +	int _oldScrollCol; +	bool _deathFlag; +	int _deathCount; +	int _deathType; +	int _mapPtr; +	int _canoeVXPos; +	int _canoeMoveCount; +	int _canoeFrame;  public:  	AmazonEngine(OSystem *syst, const AccessGameDescription *gameDesc); diff --git a/engines/access/data.cpp b/engines/access/data.cpp index 0279cd5052..cbc52c0a26 100644 --- a/engines/access/data.cpp +++ b/engines/access/data.cpp @@ -59,4 +59,18 @@ void TimerList::updateTimers() {  	}  } +void TimerList::synchronize(Common::Serializer &s) { +	int count = size(); +	s.syncAsUint16LE(count); + +	if (!s.isSaving()) +		resize(count); + +	for (int i = 0; i < count; ++i) { +		s.syncAsUint32LE((*this)[i]._initTm); +		s.syncAsUint32LE((*this)[i]._timer); +		s.syncAsByte((*this)[i]._flag); +	} +} +  } // End of namespace Access diff --git a/engines/access/data.h b/engines/access/data.h index 1d64a6ff86..3b3485e459 100644 --- a/engines/access/data.h +++ b/engines/access/data.h @@ -26,6 +26,7 @@  #include "common/scummsys.h"  #include "common/array.h"  #include "common/rect.h" +#include "common/serializer.h"  #include "common/types.h"  #include "graphics/surface.h"  #include "access/files.h" @@ -74,6 +75,11 @@ public:  	 * Update the timer list  	 */  	void updateTimers(); + +	/** +	 * Synchronize savegame data  +	 */ +	void synchronize(Common::Serializer &s);  };  class ExtraCell { diff --git a/engines/access/inventory.cpp b/engines/access/inventory.cpp index dbc3cbac89..25c906056f 100644 --- a/engines/access/inventory.cpp +++ b/engines/access/inventory.cpp @@ -354,5 +354,15 @@ void InventoryManager::combineItems() {  	warning("TODO: combineItems");  } +void InventoryManager::synchronize(Common::Serializer &s) { +	int count = _inv.size(); +	s.syncAsUint16LE(count); + +	if (!s.isSaving()) +		_inv.resize(count); + +	for (int i = 0; i < count; ++i) +		s.syncAsUint16LE((*this)[i]); +}  } // End of namespace Access diff --git a/engines/access/inventory.h b/engines/access/inventory.h index a95581c2d0..0ff9020250 100644 --- a/engines/access/inventory.h +++ b/engines/access/inventory.h @@ -108,6 +108,11 @@ public:  	void refreshInventory();  	int newDisplayInv(); + +	/** +	* Synchronize savegame data +	*/ +	void synchronize(Common::Serializer &s);  };  } // End of namespace Access diff --git a/engines/access/player.cpp b/engines/access/player.cpp index df2ad67826..b8eb08acd8 100644 --- a/engines/access/player.cpp +++ b/engines/access/player.cpp @@ -827,4 +827,12 @@ bool Player::scrollRight() {  	return true;  } +void Player::synchronize(Common::Serializer &s) { +	s.syncAsUint16LE(_roomNumber); +	s.syncAsSint16LE(_rawPlayerLow.x); +	s.syncAsSint16LE(_rawPlayer.x); +	s.syncAsSint16LE(_rawPlayerLow.y); +	s.syncAsSint16LE(_rawPlayer.y); +} +  } // End of namespace Access diff --git a/engines/access/player.h b/engines/access/player.h index 7ba0c05b21..c5c9afa087 100644 --- a/engines/access/player.h +++ b/engines/access/player.h @@ -25,6 +25,7 @@  #include "common/scummsys.h"  #include "common/rect.h" +#include "common/serializer.h"  #include "access/asurface.h"  #include "access/data.h" @@ -127,6 +128,11 @@ public:  	void calcPlayer();  	void checkScroll(); + +	/** +	* Synchronize savegame data +	*/ +	void synchronize(Common::Serializer &s);  };  } // End of namespace Access diff --git a/engines/access/sound.cpp b/engines/access/sound.cpp index 52d9d00e08..91910f2917 100644 --- a/engines/access/sound.cpp +++ b/engines/access/sound.cpp @@ -39,7 +39,7 @@ SoundManager::~SoundManager() {  }  void SoundManager::clearSounds() { -	for (int i = 0; i < _soundTable.size(); ++i) +	for (uint i = 0; i < _soundTable.size(); ++i)  		delete _soundTable[i];  	_soundTable.clear();  	_soundPriority.clear(); | 
