[Scummvm-cvs-logs] SF.net SVN: scummvm:[51162] scummvm/trunk/engines/sci/graphics

m_kiewitz at users.sourceforge.net m_kiewitz at users.sourceforge.net
Thu Jul 22 22:11:53 CEST 2010


Revision: 51162
          http://scummvm.svn.sourceforge.net/scummvm/?rev=51162&view=rev
Author:   m_kiewitz
Date:     2010-07-22 20:11:53 +0000 (Thu, 22 Jul 2010)

Log Message:
-----------
SCI: fixing mirrored sci32 pictures

fixes lsl6, also slight cleanup and adding comments about sci32 picture resources

Modified Paths:
--------------
    scummvm/trunk/engines/sci/graphics/picture.cpp
    scummvm/trunk/engines/sci/graphics/picture.h

Modified: scummvm/trunk/engines/sci/graphics/picture.cpp
===================================================================
--- scummvm/trunk/engines/sci/graphics/picture.cpp	2010-07-22 20:11:09 UTC (rev 51161)
+++ scummvm/trunk/engines/sci/graphics/picture.cpp	2010-07-22 20:11:53 UTC (rev 51162)
@@ -152,22 +152,14 @@
 	return READ_LE_UINT16(inbuffer + cel_headerPos + 36);
 }
 
-int16 GfxPicture::getSci32celHeight(int16 celNo) {
-	byte *inbuffer = _resource->data;
-	int header_size = READ_LE_UINT16(inbuffer);
-	int cel_headerPos = header_size + 42 * celNo;
-	return READ_LE_UINT16(inbuffer + cel_headerPos + 2);
-}
-
 void GfxPicture::drawSci32Vga(int16 celNo, int16 callerX, int16 callerY, bool mirrored) {
 	byte *inbuffer = _resource->data;
 	int size = _resource->size;
 	int header_size = READ_LE_UINT16(inbuffer);
 	int palette_data_ptr = READ_LE_UINT16(inbuffer + 6);
-	int celCount = inbuffer[2];
+//	int celCount = inbuffer[2];
 	int cel_headerPos = header_size;
 	int cel_RlePos, cel_LiteralPos;
-//	int cel_relXpos, cel_relYpos;
 	Palette palette;
 
 	// HACK
@@ -175,30 +167,33 @@
 	_addToFlag = false;
 	_resourceType = SCI_PICTURE_TYPE_SCI32;
 
-	if ((celNo == -1) || (celNo == 0)) {
+	if (celNo == 0) {
 		// Create palette and set it
 		_palette->createFromData(inbuffer + palette_data_ptr, size - palette_data_ptr, &palette);
 		_palette->set(&palette, true);
 	}
-	if (celNo != -1) {
-		cel_headerPos += 42 * celNo;
-		celCount = 1;
-	}
 
-	while (celCount > 0) {
-		cel_RlePos = READ_LE_UINT32(inbuffer + cel_headerPos + 24);
-		cel_LiteralPos = READ_LE_UINT32(inbuffer + cel_headerPos + 28);
-		//cel_relXpos = READ_LE_UINT16(inbuffer + cel_headerPos + 38);
-		//cel_relYpos = READ_LE_UINT16(inbuffer + cel_headerPos + 40);
+	// Header
+	// [headerSize:WORD] [celCount:BYTE] [Unknown:BYTE] [Unknown:WORD] [paletteOffset:DWORD] [Unknown:DWORD]
+	// cel-header follow afterwards, each is 42 bytes
+	// Cel-Header
+	// [width:WORD] [height:WORD] [displaceX:WORD] [displaceY:WORD] [clearColor:BYTE] [compressed:BYTE]
+	//  offset 10-23 is unknown
+	// [rleOffset:DWORD] [literalOffset:DWORD] [Unknown:WORD] [Unknown:WORD] [priority:WORD] [relativeXpos:WORD] [relativeYpos:WORD]
 
-		// This is really weird, adjusting picture data to plane resolution - why...
-		//cel_relYpos = ((cel_relYpos * g_sci->_gfxScreen->getHeight()) / planeResY);
-		//cel_relXpos = ((cel_relXpos * g_sci->_gfxScreen->getWidth()) / planeResX);
+	cel_headerPos += 42 * celNo;
 
-		drawCelData(inbuffer, size, cel_headerPos, cel_RlePos, cel_LiteralPos, callerX, callerY);
-		cel_headerPos += 42;
-		celCount--;
+	if (mirrored) {
+		// switch around relativeXpos
+		Common::Rect displayArea = _coordAdjuster->pictureGetDisplayArea();
+		callerX = displayArea.width() - callerX - READ_LE_UINT16(inbuffer + cel_headerPos + 0);
 	}
+
+	cel_RlePos = READ_LE_UINT32(inbuffer + cel_headerPos + 24);
+	cel_LiteralPos = READ_LE_UINT32(inbuffer + cel_headerPos + 28);
+
+	drawCelData(inbuffer, size, cel_headerPos, cel_RlePos, cel_LiteralPos, callerX, callerY);
+	cel_headerPos += 42;
 }
 #endif
 

Modified: scummvm/trunk/engines/sci/graphics/picture.h
===================================================================
--- scummvm/trunk/engines/sci/graphics/picture.h	2010-07-22 20:11:09 UTC (rev 51161)
+++ scummvm/trunk/engines/sci/graphics/picture.h	2010-07-22 20:11:53 UTC (rev 51162)
@@ -59,7 +59,6 @@
 	int16 getSci32celY(int16 celNo);
 	int16 getSci32celX(int16 celNo);
 	int16 getSci32celPriority(int16 celNo);
-	int16 getSci32celHeight(int16 celNo);
 	void drawSci32Vga(int16 celNo, int16 callerX, int16 callerY, bool mirrored);
 #endif
 


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