[Scummvm-cvs-logs] scummvm master -> 4095b76939fac2e1852a07de73d19ebbb55015b9

somaen einarjohants at gmail.com
Tue Jan 22 20:59:32 CET 2013


This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
d322592037 WINTERMUTE: Guard ConfMan a bit better.
c6df5f9994 WINTERMUTE: Mark drawLine as unused with dirty-rects.
bede97c52c WINTERMUTE: Store larger thumbnails (Bump Savegame-version to 1.2.0.0)
4095b76939 WINTERMUTE: Silence a warning.


Commit: d322592037da4bd013a9c1868c0d76d89b487750
    https://github.com/scummvm/scummvm/commit/d322592037da4bd013a9c1868c0d76d89b487750
Author: Einar Johan Trøan Sømåen (einarjohants at gmail.com)
Date: 2013-01-22T10:18:29-08:00

Commit Message:
WINTERMUTE: Guard ConfMan a bit better.

Changed paths:
    engines/wintermute/base/base_game.cpp
    engines/wintermute/utils/string_util.cpp



diff --git a/engines/wintermute/base/base_game.cpp b/engines/wintermute/base/base_game.cpp
index 7402bc6..46acd8c 100644
--- a/engines/wintermute/base/base_game.cpp
+++ b/engines/wintermute/base/base_game.cpp
@@ -1258,7 +1258,7 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
 		stack->correctParams(2);
 		const char *key = stack->pop()->getString();
 		const char *val = stack->pop()->getString();
-		Common::String privKey = "priv_" + StringUtil::encodeSetting(key);
+		Common::String privKey = "wme_" + StringUtil::encodeSetting(key);
 		Common::String privVal = StringUtil::encodeSetting(val);
 		ConfMan.set(privKey, privVal);
 		stack->pushNULL();
@@ -1272,7 +1272,7 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack
 		stack->correctParams(2);
 		const char *key = stack->pop()->getString();
 		const char *initVal = stack->pop()->getString();
-		Common::String privKey = "priv_" + StringUtil::encodeSetting(key);
+		Common::String privKey = "wme_" + StringUtil::encodeSetting(key);
 		Common::String result = initVal;
 		if (ConfMan.hasKey(privKey)) {
 			result = StringUtil::decodeSetting(ConfMan.get(key));
diff --git a/engines/wintermute/utils/string_util.cpp b/engines/wintermute/utils/string_util.cpp
index 7b3b0e1..02946db 100644
--- a/engines/wintermute/utils/string_util.cpp
+++ b/engines/wintermute/utils/string_util.cpp
@@ -213,8 +213,10 @@ int StringUtil::indexOf(const WideString &str, const WideString &toFind, size_t
 }
 
 Common::String StringUtil::encodeSetting(const Common::String &str) {
-	if (str.contains('=')) {
-		error("Setting contains '='");
+	for (int i = 0; i < str.size(); i++) {
+		if ((str[i] < 33) || (str[i] == '=') || (str[i] > 126)) {
+			error("Setting contains illegal characters: %s", str.c_str());
+		}
 	}
 	return str;
 }


Commit: c6df5f99949809fceb998d760ec332ce8626c615
    https://github.com/scummvm/scummvm/commit/c6df5f99949809fceb998d760ec332ce8626c615
Author: Einar Johan Trøan Sømåen (einarjohants at gmail.com)
Date: 2013-01-22T10:53:55-08:00

Commit Message:
WINTERMUTE: Mark drawLine as unused with dirty-rects.

Changed paths:
    engines/wintermute/base/gfx/base_renderer.h
    engines/wintermute/base/gfx/osystem/base_render_osystem.cpp



diff --git a/engines/wintermute/base/gfx/base_renderer.h b/engines/wintermute/base/gfx/base_renderer.h
index 9027c66..796dee8 100644
--- a/engines/wintermute/base/gfx/base_renderer.h
+++ b/engines/wintermute/base/gfx/base_renderer.h
@@ -84,8 +84,9 @@ public:
 	 * @param rect the portion of the screen to fade (if NULL, the entire screen will be faded).
 	 */
 	virtual void fadeToColor(byte r, byte g, byte b, byte a, Common::Rect *rect = NULL) = 0;
-	virtual bool drawLine(int x1, int y1, int x2, int y2, uint32 color);
-	virtual bool drawRect(int x1, int y1, int x2, int y2, uint32 color, int width = 1);
+
+	virtual bool drawLine(int x1, int y1, int x2, int y2, uint32 color); 	// Unused outside indicator-display
+	virtual bool drawRect(int x1, int y1, int x2, int y2, uint32 color, int width = 1); 	// Unused outside indicator-display
 	BaseRenderer(BaseGame *inGame = NULL);
 	virtual ~BaseRenderer();
 	virtual bool setProjection() {
diff --git a/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp b/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp
index df88e3b..6a27f8d 100644
--- a/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp
+++ b/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp
@@ -482,10 +482,10 @@ void BaseRenderOSystem::drawFromSurface(RenderTicket *ticket, Common::Rect *dstR
 
 //////////////////////////////////////////////////////////////////////////
 bool BaseRenderOSystem::drawLine(int x1, int y1, int x2, int y2, uint32 color) {
-	static bool hasWarned = false; // TODO: Fix this, this only avoids spamming warnings for now.
-	if (!_disableDirtyRects && !hasWarned) {
-		warning("BaseRenderOSystem::DrawLine - doesn't work for dirty rects yet");
-		hasWarned = true;
+	// This function isn't used outside of indicator-displaying, and thus quite unused in
+	// BaseRenderOSystem when dirty-rects are enabled.
+	if (!_disableDirtyRects && !_indicatorDisplay) {
+		error("BaseRenderOSystem::DrawLine - doesn't work for dirty rects yet");
 	}
 
 	byte r = RGBCOLGetR(color);


Commit: bede97c52c703366dbcf64fbfff4c7a6e77763d2
    https://github.com/scummvm/scummvm/commit/bede97c52c703366dbcf64fbfff4c7a6e77763d2
Author: Einar Johan Trøan Sømåen (einarjohants at gmail.com)
Date: 2013-01-22T11:58:12-08:00

Commit Message:
WINTERMUTE: Store larger thumbnails (Bump Savegame-version to 1.2.0.0)

Changed paths:
    engines/wintermute/base/base_persistence_manager.cpp
    engines/wintermute/base/base_persistence_manager.h
    engines/wintermute/base/base_save_thumb_helper.cpp
    engines/wintermute/base/base_save_thumb_helper.h
    engines/wintermute/dcgf.h



diff --git a/engines/wintermute/base/base_persistence_manager.cpp b/engines/wintermute/base/base_persistence_manager.cpp
index bd53ed3..1e2c06e 100644
--- a/engines/wintermute/base/base_persistence_manager.cpp
+++ b/engines/wintermute/base/base_persistence_manager.cpp
@@ -71,6 +71,9 @@ BasePersistenceManager::BasePersistenceManager(const char *savePrefix, bool dele
 	_richBuffer = NULL;
 	_richBufferSize = 0;
 
+	_scummVMThumbnailData = NULL;
+	_scummVMThumbSize = 0;
+
 	_savedDescription = NULL;
 //	_savedTimestamp = 0;
 	_savedVerMajor = _savedVerMinor = _savedVerBuild = 0;
@@ -123,6 +126,12 @@ void BasePersistenceManager::cleanup() {
 		_thumbnailData = NULL;
 	}
 
+	_scummVMThumbSize = 0;
+	if (_scummVMThumbnailData) {
+		delete[] _scummVMThumbnailData;
+		_scummVMThumbnailData = NULL;
+	}
+
 	delete _loadStream;
 	delete _saveStream;
 	_loadStream = NULL;
@@ -131,7 +140,7 @@ void BasePersistenceManager::cleanup() {
 
 Common::String BasePersistenceManager::getFilenameForSlot(int slot) const {
 	// 3 Digits, to allow for one save-slot for autosave + slot 1 - 100 (which will be numbered 0-99 filename-wise)
-	return Common::String::format("%s-save%03d.wsv", _savePrefix.c_str(), slot);
+	return Common::String::format("%s.%03d", _savePrefix.c_str(), slot);
 }
 
 void BasePersistenceManager::getSaveStateDesc(int slot, SaveStateDescriptor &desc) {
@@ -146,8 +155,18 @@ void BasePersistenceManager::getSaveStateDesc(int slot, SaveStateDescriptor &des
 	desc.setDeletableFlag(true);
 	desc.setWriteProtectedFlag(false);
 
-	if (_thumbnailDataSize > 0) {
-		Common::MemoryReadStream thumbStream(_thumbnailData, _thumbnailDataSize);
+	int thumbSize = 0;
+	byte *thumbData = NULL;
+	if (_scummVMThumbSize > 0) {
+		thumbSize = _scummVMThumbSize;
+		thumbData = _scummVMThumbnailData;
+	} else if (_thumbnailDataSize > 0) {
+		thumbSize = _thumbnailDataSize;
+		thumbData = _thumbnailData;
+	}
+
+	if (thumbSize > 0) {
+		Common::MemoryReadStream thumbStream(thumbData, thumbSize);
 		Graphics::BitmapDecoder bmpDecoder;
 		if (bmpDecoder.loadStream(thumbStream)) {
 			Graphics::Surface *surf = NULL;
@@ -171,13 +190,13 @@ void BasePersistenceManager::deleteSaveSlot(int slot) {
 }
 
 uint32 BasePersistenceManager::getMaxUsedSlot() {
-	Common::String saveMask = Common::String::format("%s-save???.wsv", _savePrefix.c_str());
+	Common::String saveMask = Common::String::format("%s.???", _savePrefix.c_str());
 	Common::StringArray saves = g_system->getSavefileManager()->listSavefiles(saveMask);
 	Common::StringArray::iterator it = saves.begin();
 	int ret = -1;
 	for (; it != saves.end(); ++it) {
 		int num = -1;
-		sscanf(it->c_str(), "save%d", &num);
+		sscanf(it->c_str(), ".%d", &num);
 		ret = MAX(ret, num);
 	}
 	return ret;
@@ -249,6 +268,25 @@ bool BasePersistenceManager::initSave(const char *desc) {
 		if (!thumbnailOK) {
 			putDWORD(0);
 		}
+		thumbnailOK = false;
+		// Again for the ScummVM-thumb:
+		if (_gameRef->_cachedThumbnail) {
+			if (_gameRef->_cachedThumbnail->_scummVMThumb) {
+				Common::MemoryWriteStreamDynamic scummVMthumbStream(DisposeAfterUse::YES);
+				if (_gameRef->_cachedThumbnail->_scummVMThumb->writeBMPToStream(&scummVMthumbStream)) {
+					_saveStream->writeUint32LE(scummVMthumbStream.size());
+					_saveStream->write(scummVMthumbStream.getData(), scummVMthumbStream.size());
+				} else {
+					_saveStream->writeUint32LE(0);
+				}
+				
+				thumbnailOK = true;
+			}
+		}
+		if (!thumbnailOK) {
+			putDWORD(0);
+		}
+
 
 		// in any case, destroy the cached thumbnail once used
 		delete _gameRef->_cachedThumbnail;
@@ -308,6 +346,15 @@ bool BasePersistenceManager::readHeader(const Common::String &filename) {
 						_thumbnailDataSize = 0;
 					}
 				}
+				if (_savedVerMajor >= 1 && _savedVerMinor >= 2) {
+					_scummVMThumbSize = getDWORD();
+					_scummVMThumbnailData = new byte[_scummVMThumbSize];
+					if (_scummVMThumbnailData) {
+						getBytes(_scummVMThumbnailData, _scummVMThumbSize);
+					} else {
+						_scummVMThumbSize = 0;
+					}
+				}
 			} else {
 				_savedVerBuild = 35;    // last build with ver1 savegames
 			}
diff --git a/engines/wintermute/base/base_persistence_manager.h b/engines/wintermute/base/base_persistence_manager.h
index a262c92..114f6e0 100644
--- a/engines/wintermute/base/base_persistence_manager.h
+++ b/engines/wintermute/base/base_persistence_manager.h
@@ -93,6 +93,8 @@ public:
 
 	uint32 _thumbnailDataSize;
 	byte *_thumbnailData;
+	uint32 _scummVMThumbSize;
+	byte *_scummVMThumbnailData;
 	Common::String getFilenameForSlot(int slot) const;
 private:
 	bool _deleteSingleton;
diff --git a/engines/wintermute/base/base_save_thumb_helper.cpp b/engines/wintermute/base/base_save_thumb_helper.cpp
index b4205c2..d4df1df 100644
--- a/engines/wintermute/base/base_save_thumb_helper.cpp
+++ b/engines/wintermute/base/base_save_thumb_helper.cpp
@@ -30,51 +30,83 @@
 #include "engines/wintermute/base/gfx/base_image.h"
 #include "engines/wintermute/base/gfx/base_renderer.h"
 #include "engines/wintermute/base/base_game.h"
+#include "graphics/scaler.h"
 
 namespace Wintermute {
 
 //////////////////////////////////////////////////////////////////////////
 BaseSaveThumbHelper::BaseSaveThumbHelper(BaseGame *inGame) : BaseClass(inGame) {
 	_thumbnail = NULL;
+	_scummVMThumb = NULL;
 }
 
 //////////////////////////////////////////////////////////////////////////
 BaseSaveThumbHelper::~BaseSaveThumbHelper(void) {
 	delete _thumbnail;
 	_thumbnail = NULL;
+	delete _scummVMThumb;
+	_scummVMThumb = NULL;
 }
 
-//////////////////////////////////////////////////////////////////////////
-bool BaseSaveThumbHelper::storeThumbnail(bool doFlip) {
-	delete _thumbnail;
-	_thumbnail = NULL;
-
+BaseImage *BaseSaveThumbHelper::storeThumb(bool doFlip, int width, int height) {
+	BaseImage *thumbnail = NULL;
 	if (_gameRef->_thumbnailWidth > 0 && _gameRef->_thumbnailHeight > 0) {
 		if (doFlip) {
 			// when using opengl on windows it seems to be necessary to do this twice
 			// works normally for direct3d
 			_gameRef->displayContent(false);
 			_gameRef->_renderer->flip();
-
+			
 			_gameRef->displayContent(false);
 			_gameRef->_renderer->flip();
 		}
-
+		
 		BaseImage *screenshot = _gameRef->_renderer->takeScreenshot();
 		if (!screenshot) {
 			return STATUS_FAILED;
 		}
-
+		
 		// normal thumbnail
 		if (_gameRef->_thumbnailWidth > 0 && _gameRef->_thumbnailHeight > 0) {
-			_thumbnail = new BaseImage();
-			_thumbnail->copyFrom(screenshot, _gameRef->_thumbnailWidth, _gameRef->_thumbnailHeight);
+			thumbnail = new BaseImage();
+			thumbnail->copyFrom(screenshot, width, height);
 		}
-
-
+		
+		
 		delete screenshot;
 		screenshot = NULL;
 	}
+	return thumbnail;
+}
+
+//////////////////////////////////////////////////////////////////////////
+bool BaseSaveThumbHelper::storeThumbnail(bool doFlip) {
+	delete _thumbnail;
+	_thumbnail = NULL;
+
+	if (_gameRef->_thumbnailWidth > 0 && _gameRef->_thumbnailHeight > 0) {
+
+		_thumbnail = storeThumb(doFlip, _gameRef->_thumbnailWidth, _gameRef->_thumbnailHeight);
+		if (!_thumbnail) {
+			return STATUS_FAILED;
+		}
+	}
+	storeScummVMThumbNail();
+	return STATUS_OK;
+}
+
+//////////////////////////////////////////////////////////////////////////
+bool BaseSaveThumbHelper::storeScummVMThumbNail(bool doFlip) {
+	delete _thumbnail;
+	_thumbnail = NULL;
+	
+	if (_gameRef->_thumbnailWidth > 0 && _gameRef->_thumbnailHeight > 0) {
+		
+		_scummVMThumb = storeThumb(doFlip, kThumbnailWidth, kThumbnailHeight2);
+		if (!_scummVMThumb) {
+			return STATUS_FAILED;
+		}
+	}
 	return STATUS_OK;
 }
 
diff --git a/engines/wintermute/base/base_save_thumb_helper.h b/engines/wintermute/base/base_save_thumb_helper.h
index 8863508..8e8a718 100644
--- a/engines/wintermute/base/base_save_thumb_helper.h
+++ b/engines/wintermute/base/base_save_thumb_helper.h
@@ -40,9 +40,12 @@ public:
 	BaseSaveThumbHelper(BaseGame *inGame);
 	virtual ~BaseSaveThumbHelper(void);
 	bool storeThumbnail(bool doFlip = false);
+	bool storeScummVMThumbNail(bool doFlip = false);
 
 	BaseImage *_thumbnail;
+	BaseImage *_scummVMThumb;
 private:
+	BaseImage *storeThumb(bool doFlip, int width, int height);
 	BaseImage *_richThumbnail;
 };
 
diff --git a/engines/wintermute/dcgf.h b/engines/wintermute/dcgf.h
index fc41740..0fbb1c6 100644
--- a/engines/wintermute/dcgf.h
+++ b/engines/wintermute/dcgf.h
@@ -32,7 +32,7 @@
 
 //////////////////////////////////////////////////////////////////////////
 #define DCGF_VER_MAJOR 1
-#define DCGF_VER_MINOR 1
+#define DCGF_VER_MINOR 2
 #define DCGF_VER_BUILD 1
 #define DCGF_VER_SUFFIX "beta"
 #define DCGF_VER_BETA true


Commit: 4095b76939fac2e1852a07de73d19ebbb55015b9
    https://github.com/scummvm/scummvm/commit/4095b76939fac2e1852a07de73d19ebbb55015b9
Author: Einar Johan Trøan Sømåen (einarjohants at gmail.com)
Date: 2013-01-22T11:58:23-08:00

Commit Message:
WINTERMUTE: Silence a warning.

Changed paths:
    engines/wintermute/utils/string_util.cpp



diff --git a/engines/wintermute/utils/string_util.cpp b/engines/wintermute/utils/string_util.cpp
index 02946db..a1053bb 100644
--- a/engines/wintermute/utils/string_util.cpp
+++ b/engines/wintermute/utils/string_util.cpp
@@ -213,7 +213,7 @@ int StringUtil::indexOf(const WideString &str, const WideString &toFind, size_t
 }
 
 Common::String StringUtil::encodeSetting(const Common::String &str) {
-	for (int i = 0; i < str.size(); i++) {
+	for (uint32 i = 0; i < str.size(); i++) {
 		if ((str[i] < 33) || (str[i] == '=') || (str[i] > 126)) {
 			error("Setting contains illegal characters: %s", str.c_str());
 		}






More information about the Scummvm-git-logs mailing list