[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