diff options
| -rw-r--r-- | engines/fullpipe/gameloader.cpp | 18 | ||||
| -rw-r--r-- | engines/fullpipe/gameloader.h | 6 | ||||
| -rw-r--r-- | engines/fullpipe/modal.cpp | 4 | 
3 files changed, 24 insertions, 4 deletions
diff --git a/engines/fullpipe/gameloader.cpp b/engines/fullpipe/gameloader.cpp index 64c744ff24..d7e40f9806 100644 --- a/engines/fullpipe/gameloader.cpp +++ b/engines/fullpipe/gameloader.cpp @@ -696,6 +696,17 @@ const char *getSavegameFile(int saveGameIdx) {  	return buffer;  } +void parseSavegameHeader(Fullpipe::FullpipeSavegameHeader &header, SaveStateDescriptor &desc) { +	int day = (header.date >> 24) & 0xFF; +	int month = (header.date >> 16) & 0xFF; +	int year = header.date & 0xFFFF; +	desc.setSaveDate(year, month, day); +	int hour = (header.time >> 8) & 0xFF; +	int minutes = header.time & 0xFF; +	desc.setSaveTime(hour, minutes); +	desc.setPlayTime(header.playtime * 1000); +} +  bool readSavegameHeader(Common::InSaveFile *in, FullpipeSavegameHeader &header) {  	char saveIdentBuffer[6];  	header.thumbnail = NULL; @@ -709,8 +720,13 @@ bool readSavegameHeader(Common::InSaveFile *in, FullpipeSavegameHeader &header)  	// Validate the header Id  	in->read(saveIdentBuffer, 6); -	if (strcmp(saveIdentBuffer, "SVMCR")) +	if (strcmp(saveIdentBuffer, "SVMCR")) { +		// This is wrong header, perhaps it is original savegame. Thus fill out dummy values +		header.date = (16 >> 24) | (9 >> 20) | 2016; +		header.time = (9 >> 8) | 56; +		header.playtime = 1000;  		return false; +	}  	header.version = in->readByte();  	if (header.version != FULLPIPE_SAVEGAME_VERSION) diff --git a/engines/fullpipe/gameloader.h b/engines/fullpipe/gameloader.h index d984020ff1..5687e6bba3 100644 --- a/engines/fullpipe/gameloader.h +++ b/engines/fullpipe/gameloader.h @@ -23,6 +23,8 @@  #ifndef FULLPIPE_GAMELOADER_H  #define FULLPIPE_GAMELOADER_H +#include "engines/savestate.h" +  #include "fullpipe/objects.h"  #include "fullpipe/inventory.h"  #include "fullpipe/messages.h" @@ -77,6 +79,9 @@ class PreloadItems : public Common::Array<PreloadItem *>, public CObject {  struct FullpipeSavegameHeader {  	uint8 version;  	Common::String saveName; +	uint32 date; +	uint16 time; +	uint32 playtime;  	Graphics::Surface *thumbnail;  }; @@ -134,6 +139,7 @@ class GameLoader : public CObject {  const char *getSavegameFile(int saveGameIdx);  bool readSavegameHeader(Common::InSaveFile *in, FullpipeSavegameHeader &header); +void parseSavegameHeader(Fullpipe::FullpipeSavegameHeader &header, SaveStateDescriptor &desc);  Inventory2 *getGameLoaderInventory();  InteractionController *getGameLoaderInteractionController(); diff --git a/engines/fullpipe/modal.cpp b/engines/fullpipe/modal.cpp index cceec4a852..468d4219fc 100644 --- a/engines/fullpipe/modal.cpp +++ b/engines/fullpipe/modal.cpp @@ -1640,9 +1640,7 @@ bool ModalSaveGame::getFileInfo(int slot, FileInfo *fileinfo) {  	SaveStateDescriptor desc(slot, header.saveName);  	char res[17]; -	// FIXME. HACK. TODO: Set proper dates -	desc.setSaveDate(2016, 9, 18); -	desc.setSaveTime(9, 56); +	Fullpipe::parseSavegameHeader(header, desc);  	snprintf(res, 17, "%s %s", desc.getSaveDate().c_str(), desc.getSaveTime().c_str());  | 
