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

m_kiewitz at users.sourceforge.net m_kiewitz at users.sourceforge.net
Wed Jun 23 14:58:15 CEST 2010


Revision: 50179
          http://scummvm.svn.sourceforge.net/scummvm/?rev=50179&view=rev
Author:   m_kiewitz
Date:     2010-06-23 12:58:14 +0000 (Wed, 23 Jun 2010)

Log Message:
-----------
SCI: some initial work on global scaling

Modified Paths:
--------------
    scummvm/trunk/engines/sci/engine/selector.cpp
    scummvm/trunk/engines/sci/engine/static_selectors.cpp
    scummvm/trunk/engines/sci/engine/vm.h
    scummvm/trunk/engines/sci/graphics/animate.cpp
    scummvm/trunk/engines/sci/graphics/animate.h

Modified: scummvm/trunk/engines/sci/engine/selector.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/selector.cpp	2010-06-23 11:47:14 UTC (rev 50178)
+++ scummvm/trunk/engines/sci/engine/selector.cpp	2010-06-23 12:58:14 UTC (rev 50179)
@@ -157,6 +157,7 @@
 	FIND_SELECTOR(scaleSignal);
 	FIND_SELECTOR(scaleX);
 	FIND_SELECTOR(scaleY);
+	FIND_SELECTOR(maxScale);
 	FIND_SELECTOR(iconIndex);
 
 #ifdef ENABLE_SCI32

Modified: scummvm/trunk/engines/sci/engine/static_selectors.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/static_selectors.cpp	2010-06-23 11:47:14 UTC (rev 50178)
+++ scummvm/trunk/engines/sci/engine/static_selectors.cpp	2010-06-23 12:58:14 UTC (rev 50179)
@@ -107,6 +107,7 @@
 	{        SCI_VERSION_1_1,        SCI_VERSION_1_1,"scaleSignal", 103 },
 	{        SCI_VERSION_1_1,        SCI_VERSION_1_1,     "scaleX", 104 },
 	{        SCI_VERSION_1_1,        SCI_VERSION_1_1,     "scaleY", 105 },
+	{        SCI_VERSION_1_1,        SCI_VERSION_1_1,   "maxScale", 106 },
 	{ SCI_VERSION_NONE,             SCI_VERSION_NONE,            0,   0 }
 };
 

Modified: scummvm/trunk/engines/sci/engine/vm.h
===================================================================
--- scummvm/trunk/engines/sci/engine/vm.h	2010-06-23 11:47:14 UTC (rev 50178)
+++ scummvm/trunk/engines/sci/engine/vm.h	2010-06-23 12:58:14 UTC (rev 50179)
@@ -152,8 +152,9 @@
 	Selector syncTime;
 
 	// SCI1.1 specific selectors
-	Selector scaleSignal; // < Used by Animate() for cel scaling (SCI1.1+)
+	Selector scaleSignal; //< Used by kAnimate() for cel scaling (SCI1.1+)
 	Selector scaleX, scaleY;	///< SCI1.1 view scaling
+	Selector maxScale;		///< SCI1.1 view scaling, limit for cel, when using global scaling
 
 	// Used for auto detection purposes
 	Selector overlay;	///< Used to determine if a game is using old gfx functions or not

Modified: scummvm/trunk/engines/sci/graphics/animate.cpp
===================================================================
--- scummvm/trunk/engines/sci/graphics/animate.cpp	2010-06-23 11:47:14 UTC (rev 50178)
+++ scummvm/trunk/engines/sci/graphics/animate.cpp	2010-06-23 12:58:14 UTC (rev 50179)
@@ -185,12 +185,6 @@
 				listEntry->scaleX = 128;
 				listEntry->scaleY = 128;
 			}
-			// TODO
-			// On scaleSignal bit 1 sierra sci does some stuff with global var 2, current Port
-			//  and some other stuff and sets scaleX/Y accordingly. It seems this functionality is needed in at
-			//  least sq5 right when starting the game before wilco exists the room. Currently we dont get scaling
-			//  but sierra sci does scaling there. I dont fully understand the code yet, that's why i didnt implement
-			//  anything.
 		} else {
 			listEntry->scaleSignal = 0;
 			listEntry->scaleX = 128;
@@ -236,6 +230,20 @@
 			writeSelectorValue(_s->_segMan, curObject, SELECTOR(cel), listEntry->celNo);
 		}
 
+		// Process global scaling, if needed
+		if (listEntry->scaleSignal & kScaleSignalDoScaling) {
+			if (listEntry->scaleSignal & kScaleSignalGlobalScaling) {
+				// Global scaling uses global var 2 and some other stuff to calculate scaleX/scaleY
+				int16 maxScale = readSelectorValue(_s->_segMan, curObject, SELECTOR(maxScale));
+				int16 maxCelHeight = (maxScale * view->getHeight(listEntry->loopNo, listEntry->celNo)) >> 7;
+				// TODO!
+
+				// and set objects scale selectors
+				//writeSelectorValue(_s->_segMan, curObject, SELECTOR(scaleX), listEntry->scaleX);
+				//writeSelectorValue(_s->_segMan, curObject, SELECTOR(scaleY), listEntry->scaleY);
+			}
+		}
+
 		// Create rect according to coordinates and given cel
 		if (listEntry->scaleSignal & kScaleSignalDoScaling) {
 			view->getCelScaledRect(listEntry->loopNo, listEntry->celNo, listEntry->x, listEntry->y, listEntry->z, listEntry->scaleX, listEntry->scaleY, &listEntry->celRect);

Modified: scummvm/trunk/engines/sci/graphics/animate.h
===================================================================
--- scummvm/trunk/engines/sci/graphics/animate.h	2010-06-23 11:47:14 UTC (rev 50178)
+++ scummvm/trunk/engines/sci/graphics/animate.h	2010-06-23 12:58:14 UTC (rev 50179)
@@ -51,9 +51,9 @@
 };
 
 enum ViewScaleSignals {
-	kScaleSignalDoScaling	= 0x0001, // enables scaling when drawing that cel (involves scaleX and scaleY)
-	kScaleSignalUnknown1	= 0x0002, // seems to do something with globalvar 2, sets scaleX/scaleY
-	kScaleSignalUnknown2	= 0x0004 // really unknown
+	kScaleSignalDoScaling		= 0x0001, // enables scaling when drawing that cel (involves scaleX and scaleY)
+	kScaleSignalGlobalScaling	= 0x0002, // means that global scaling shall get applied on that cel (sets scaleX/scaleY)
+	kScaleSignalUnknown2		= 0x0004 // really unknown
 };
 
 struct AnimateEntry {


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