[Scummvm-cvs-logs] SF.net SVN: scummvm:[47210] scummvm/trunk/engines/sci/graphics
m_kiewitz at users.sourceforge.net
m_kiewitz at users.sourceforge.net
Sat Jan 9 22:12:20 CET 2010
Revision: 47210
http://scummvm.svn.sourceforge.net/scummvm/?rev=47210&view=rev
Author: m_kiewitz
Date: 2010-01-09 21:12:08 +0000 (Sat, 09 Jan 2010)
Log Message:
-----------
kPortrait: found the coordinate offsets, corrected actual bitmap size (sometimes extra bytes are appended per line) animation bitmaps now valid
Modified Paths:
--------------
scummvm/trunk/engines/sci/graphics/portrait.cpp
scummvm/trunk/engines/sci/graphics/portrait.h
Modified: scummvm/trunk/engines/sci/graphics/portrait.cpp
===================================================================
--- scummvm/trunk/engines/sci/graphics/portrait.cpp 2010-01-09 20:50:45 UTC (rev 47209)
+++ scummvm/trunk/engines/sci/graphics/portrait.cpp 2010-01-09 21:12:08 UTC (rev 47210)
@@ -103,14 +103,29 @@
// Read all bitmaps
PortraitBitmap *curBitmap = _bitmaps;
uint16 bitmapNr;
+ uint16 bytesPerLine;
for (bitmapNr = 0; bitmapNr < _bitmapCount; bitmapNr++) {
+ curBitmap->width = READ_LE_UINT16(data + 2);
curBitmap->height = READ_LE_UINT16(data + 4);
- curBitmap->width = READ_LE_UINT16(data + 6);
+ bytesPerLine = READ_LE_UINT16(data + 6);
+ if (bytesPerLine < curBitmap->width)
+ error("kPortrait: bytesPerLine larger than actual width");
+ curBitmap->extraBytesPerLine = bytesPerLine - curBitmap->width;
curBitmap->rawBitmap = data + 14;
- data += 14 + (curBitmap->height * curBitmap->width);
+ data += 14 + (curBitmap->height * bytesPerLine);
curBitmap++;
}
+
+ // Offset table follows
+ curBitmap = _bitmaps;
+ data += 18;
+ for (bitmapNr = 0; bitmapNr < _bitmapCount; bitmapNr++) {
+ curBitmap->displaceX = READ_LE_UINT16(data);
+ curBitmap->displaceY = READ_LE_UINT16(data + 2);
+ data += 14;
+ curBitmap++;
+ }
}
void Portrait::doit(Common::Point position, uint16 resourceId, uint16 noun, uint16 verb, uint16 cond, uint16 seq) {
@@ -169,15 +184,20 @@
byte *data = _bitmaps[bitmapNr].rawBitmap;
uint16 bitmapHeight = _bitmaps[bitmapNr].height;
uint16 bitmapWidth = _bitmaps[bitmapNr].width;
+ Common::Point bitmapPosition = _position;
+ bitmapPosition.x += _bitmaps[bitmapNr].displaceX;
+ bitmapPosition.y += _bitmaps[bitmapNr].displaceY;
+
for (int y = 0; y < bitmapHeight; y++) {
for (int x = 0; x < bitmapWidth; x++) {
- _screen->putPixelOnDisplay(_position.x + x, _position.y + y, _portraitPalette.mapping[*data++]);
+ _screen->putPixelOnDisplay(bitmapPosition.x + x, bitmapPosition.y + y, _portraitPalette.mapping[*data++]);
}
+ data += _bitmaps[bitmapNr].extraBytesPerLine;
}
Common::Rect bitmapRect = Common::Rect(bitmapWidth, bitmapHeight);
- bitmapRect.moveTo(_position.x, _position.y);
+ bitmapRect.moveTo(bitmapPosition.x, bitmapPosition.y);
_screen->copyDisplayRectToScreen(bitmapRect);
g_system->updateScreen();
}
Modified: scummvm/trunk/engines/sci/graphics/portrait.h
===================================================================
--- scummvm/trunk/engines/sci/graphics/portrait.h 2010-01-09 20:50:45 UTC (rev 47209)
+++ scummvm/trunk/engines/sci/graphics/portrait.h 2010-01-09 21:12:08 UTC (rev 47210)
@@ -30,6 +30,8 @@
struct PortraitBitmap {
int16 width, height;
+ int16 extraBytesPerLine;
+ uint16 displaceX, displaceY;
byte *rawBitmap;
};
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