diff options
Diffstat (limited to 'engines/xeen/files.h')
| -rw-r--r-- | engines/xeen/files.h | 93 | 
1 files changed, 72 insertions, 21 deletions
| diff --git a/engines/xeen/files.h b/engines/xeen/files.h index 1fcfa6a7b8..f18d23671a 100644 --- a/engines/xeen/files.h +++ b/engines/xeen/files.h @@ -26,6 +26,8 @@  #include "common/scummsys.h"  #include "common/array.h"  #include "common/file.h" +#include "common/memstream.h" +#include "common/savefile.h"  #include "common/serializer.h"  #include "common/str-array.h"  #include "graphics/surface.h" @@ -34,7 +36,12 @@ namespace Xeen {  class XeenEngine;  class CCArchive; +class BaseCCArchive;  class File; +class SaveArchive; +class Party; +class OutFile; +class SavesManager;  #define SYNC_AS(SUFFIX,STREAM,TYPE,SIZE) \  	template<typename T> \ @@ -50,6 +57,20 @@ class File;  		_bytesSynced += SIZE; \  	} +/** + * Details of a single entry in a CC file index + */ +struct CCEntry { +	uint16 _id; +	uint32 _offset; +	uint16 _size; + +	CCEntry() : _id(0), _offset(0), _size(0) {} +	CCEntry(uint16 id, uint32 offset, uint32 size) +		: _id(id), _offset(offset), _size(size) { +	} +}; +  /*   * Main resource manager   */ @@ -79,15 +100,23 @@ public:   */  class File : public Common::File {  	friend class FileManager; +	friend class OutFile; +	friend class SavesManager;  private: -	static CCArchive *_currentArchive; -	static CCArchive *_xeenCc; -	static CCArchive *_darkCc; +	static CCArchive *_xeenCc, *_darkCc; +	static SaveArchive *_xeenSave, *_darkSave; +	static BaseCCArchive *_currentArchive; +	static SaveArchive *_currentSave;  public:  	/**  	 * Sets which archive is used by default  	 */  	static void setCurrentArchive(int ccMode); + +	/** +	 * Synchronizes a boolean array as a bitfield set +	 */ +	static void syncBitFlags(Common::Serializer &s, bool *startP, bool *endP);  public:  	File() : Common::File() {}  	File(const Common::String &filename); @@ -175,22 +204,8 @@ public:  };  /** -* Details of a single entry in a CC file index -*/ -struct CCEntry { -	uint16 _id; -	uint32 _offset; -	uint16 _size; - -	CCEntry() : _id(0), _offset(0), _size(0) {} -	CCEntry(uint16 id, uint32 offset, uint32 size) -		: _id(id), _offset(offset), _size(size) { -	} -}; - -/** -* Base Xeen CC file implementation -*/ + * Base Xeen CC file implementation + */  class BaseCCArchive : public Common::Archive {  protected:  	Common::Array<CCEntry> _index; @@ -220,8 +235,8 @@ public:  };  /** -* Xeen CC file implementation -*/ + * Xeen CC file implementation + */  class CCArchive : public BaseCCArchive {  private:  	Common::String _filename; @@ -238,6 +253,42 @@ public:  	virtual Common::SeekableReadStream *createReadStreamForMember(const Common::String &name) const;  }; +class SaveArchive : public BaseCCArchive { +	friend class OutFile; +private: +	Party *_party; +	byte *_data; +	Common::HashMap<uint16, Common::MemoryWriteStreamDynamic *> _newData; + +	void load(Common::SeekableReadStream *stream); +public: +	SaveArchive(Party *party); +	~SaveArchive(); + +	/** +	* Sets up the dynamic data for the game for a new game +	*/ +	void reset(CCArchive *src); + +	// Archive implementation +	virtual Common::SeekableReadStream *createReadStreamForMember(const Common::String &name) const; +}; + +class OutFile : public Common::WriteStream { +private: +	SaveArchive *_archive; +	Common::String _filename; +	Common::MemoryWriteStreamDynamic _backingStream; +public: +	OutFile(const Common::String filename); + +	void finalize(); + +	uint32 write(const void *dataPtr, uint32 dataSize) override; + +	int32 pos() const override; +}; +  } // End of namespace Xeen  #endif /* XEEN_FILES_H */ | 
