[Scummvm-cvs-logs] SF.net SVN: scummvm:[55646] scummvm/trunk/engines/gob

drmccoy at users.sourceforge.net drmccoy at users.sourceforge.net
Sun Jan 30 01:03:12 CET 2011


Revision: 55646
          http://scummvm.svn.sourceforge.net/scummvm/?rev=55646&view=rev
Author:   drmccoy
Date:     2011-01-30 00:03:12 +0000 (Sun, 30 Jan 2011)

Log Message:
-----------
GOB: Add Inter_Playtoons::readSprite()

Modified Paths:
--------------
    scummvm/trunk/engines/gob/inter.h
    scummvm/trunk/engines/gob/inter_playtoons.cpp

Modified: scummvm/trunk/engines/gob/inter.h
===================================================================
--- scummvm/trunk/engines/gob/inter.h	2011-01-30 00:02:42 UTC (rev 55645)
+++ scummvm/trunk/engines/gob/inter.h	2011-01-30 00:03:12 UTC (rev 55646)
@@ -585,6 +585,9 @@
 	void oPlaytoons_openItk();
 
 	Common::String getFile(const char *path);
+
+private:
+	bool readSprite(const Common::String &file, int32 dataVar, int32 size, int32 offset);
 };
 
 class Inter_v7 : public Inter_Playtoons {

Modified: scummvm/trunk/engines/gob/inter_playtoons.cpp
===================================================================
--- scummvm/trunk/engines/gob/inter_playtoons.cpp	2011-01-30 00:02:42 UTC (rev 55645)
+++ scummvm/trunk/engines/gob/inter_playtoons.cpp	2011-01-30 00:03:12 UTC (rev 55646)
@@ -265,7 +265,8 @@
 		return;
 
 	if (size < 0) {
-		warning("Attempted to read a raw sprite from file \"%s\"", file.c_str());
+		if (readSprite(file, dataVar, size, offset))
+			WRITE_VAR(1, 0);
 		return;
 	} else if (size == 0) {
 		dataVar = 0;
@@ -404,4 +405,50 @@
 	return path;
 }
 
+bool Inter_Playtoons::readSprite(const Common::String &file, int32 dataVar,
+		int32 size, int32 offset) {
+
+	bool palette = false;
+	if (size < -1000) {
+		palette = true;
+		size += 1000;
+	}
+
+	int index = -size - 1;
+	if ((index < 0) || (index >= Draw::kSpritesCount) || !_vm->_draw->_spritesArray[index]) {
+		warning("No such sprite");
+		return false;
+	}
+
+	SurfacePtr sprite = _vm->_draw->_spritesArray[index];
+	if (sprite->getBPP() != 1) {
+		warning("bpp != 1");
+		return false;
+	}
+
+	Common::SeekableReadStream *stream = _vm->_dataIO->getFile(file);
+	if (!stream) {
+		warning("No such file \"%s\"", file.c_str());
+		return false;
+	}
+
+	int32 spriteSize = sprite->getWidth() * sprite->getHeight();
+	int32 dataSize   = stream->size();
+
+	if (palette)
+		dataSize -= 768;
+
+	int32 readSize = MIN(spriteSize, dataSize);
+	if (readSize <= 0)
+		return true;
+
+	stream->read(sprite->getData(), readSize);
+
+	if (palette)
+		stream->read((byte *)_vm->_global->_pPaletteDesc->vgaPal, 768);
+
+	delete stream;
+	return true;
+}
+
 } // End of namespace Gob


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list