[Scummvm-cvs-logs] SF.net SVN: scummvm: [21661] scummvm/trunk/engines/simon

kirben at users.sourceforge.net kirben at users.sourceforge.net
Fri Apr 7 02:05:01 CEST 2006


Revision: 21661
Author:   kirben
Date:     2006-04-07 02:04:36 -0700 (Fri, 07 Apr 2006)
ViewCVS:  http://svn.sourceforge.net/scummvm/?rev=21661&view=rev

Log Message:
-----------
Fix some horizontal scrolling issues in FF

Modified Paths:
--------------
    scummvm/trunk/engines/simon/cursor.cpp
    scummvm/trunk/engines/simon/simon.cpp
    scummvm/trunk/engines/simon/simon.h
    scummvm/trunk/engines/simon/vga.cpp
Modified: scummvm/trunk/engines/simon/cursor.cpp
===================================================================
--- scummvm/trunk/engines/simon/cursor.cpp	2006-04-07 03:30:52 UTC (rev 21660)
+++ scummvm/trunk/engines/simon/cursor.cpp	2006-04-07 09:04:36 UTC (rev 21661)
@@ -224,7 +224,7 @@
 };
 
 void SimonEngine::drawMousePointer() {
-	debug(0, "Mouse %d Anim %d Max %d", _mouseCursor, _mouseAnim, _mouseAnimMax);
+	//debug(0, "Mouse %d Anim %d Max %d", _mouseCursor, _mouseAnim, _mouseAnimMax);
 
 	if (getGameType() == GType_SIMON2)
 		_system->setMouseCursor(_simon2_cursors[_mouseCursor], 16, 16, 7, 7);

Modified: scummvm/trunk/engines/simon/simon.cpp
===================================================================
--- scummvm/trunk/engines/simon/simon.cpp	2006-04-07 03:30:52 UTC (rev 21660)
+++ scummvm/trunk/engines/simon/simon.cpp	2006-04-07 09:04:36 UTC (rev 21661)
@@ -2359,7 +2359,9 @@
 		_usePaletteDelay = true;
 	} else {
 		_scrollX = 0;
+		_scrollY = 0;
 		_scrollXMax = 0;
+		_scrollYMax = 0;
 		_scrollCount = 0;
 		_scrollFlag = 0;
 		_scrollHeight = 134;
@@ -2491,21 +2493,35 @@
 	if (_scrollCount == 0)
 		return;
 
-	if (_scrollCount < 0) {
-		if (_scrollFlag != -1) {
-			_scrollFlag = -1;
-			if (++_scrollCount == 0)
-				return;
+	if (getGameType() == GType_FF) {
+		if (_scrollCount < 0) {
+			if (_scrollFlag != -8) {
+				_scrollFlag = -8;
+				_scrollCount += 8;
+			}
+		} else {
+			if (_scrollFlag != 8) {
+				_scrollFlag = 8;
+				_scrollCount -= 8;
+			}
 		}
 	} else {
-		if (_scrollFlag != 1) {
-			_scrollFlag = 1;
-			if (--_scrollCount == 0)
-				return;
+		if (_scrollCount < 0) {
+			if (_scrollFlag != -1) {
+				_scrollFlag = -1;
+				if (++_scrollCount == 0)
+					return;
+			}
+		} else {
+			if (_scrollFlag != 1) {
+				_scrollFlag = 1;
+				if (--_scrollCount == 0)
+					return;
+			}
 		}
+
+		add_vga_timer(6, NULL, 0, 0);
 	}
-
-	add_vga_timer(6, NULL, 0, 0);
 }
 
 void SimonEngine::vcResumeSprite(const byte *code_ptr, uint16 cur_file, uint16 cur_sprite) {
@@ -2626,7 +2642,10 @@
 	if (_paletteFlag == 2)
 		_paletteFlag = 1;
 
-	if ((getGameType() == GType_SIMON2 || getGameType() == GType_FF) && _scrollFlag) {
+	if (getGameType() == GType_FF && _scrollCount) {
+		scroll_timeout();
+	}
+	if (getGameType() == GType_SIMON2 && _scrollFlag) {
 		scrollEvent();
 	}
 
@@ -3736,6 +3755,10 @@
 
 	memcpy(_sdl_buf_attached, _sdl_buf, _screenWidth * _screenHeight);
 
+	if (getGameType() == GType_FF && _scrollFlag) {
+		scrollEvent();
+	}
+
 	if (_paletteColorCount != 0) {
 		if (getGameType() == GType_SIMON1 && _usePaletteDelay) {
 			delay(100);

Modified: scummvm/trunk/engines/simon/simon.h
===================================================================
--- scummvm/trunk/engines/simon/simon.h	2006-04-07 03:30:52 UTC (rev 21660)
+++ scummvm/trunk/engines/simon/simon.h	2006-04-07 09:04:36 UTC (rev 21661)
@@ -266,8 +266,8 @@
 	bool _vgaVar9;
 	int16 _scriptUnk1;
 	bool _restoreWindow6;
-	int _scrollX, _scrollXMax, _scrollHeight;
-	int _scrollY, _scrollYMax, _scrollWidth;
+	int _scrollX, _scrollXMax, _scrollWidth;
+	int _scrollY, _scrollYMax, _scrollHeight;
 	int _scrollCount, _scrollFlag;
 	const byte *_scrollImage;
 	byte _vgaVar8;
@@ -1000,8 +1000,8 @@
 	void vcSkipNextInstruction();
 
 	int getScale(int y, int x);
-	void checkScrollX(int x);
-	void checkScrollY(int y);
+	void checkScrollX(int x, int xpos);
+	void checkScrollY(int y, int ypos);
 
 	bool itemIsSiblingOf(uint16 val);
 	bool itemIsParentOf(uint16 a, uint16 b);

Modified: scummvm/trunk/engines/simon/vga.cpp
===================================================================
--- scummvm/trunk/engines/simon/vga.cpp	2006-04-07 03:30:52 UTC (rev 21660)
+++ scummvm/trunk/engines/simon/vga.cpp	2006-04-07 09:04:36 UTC (rev 21661)
@@ -729,7 +729,7 @@
 			byte *dst;
 			uint w;
 
-			_scrollXMax = 640;
+			_scrollXMax = width - 640;
 			_scrollYMax = 0;
 			_scrollImage = state.depack_src;
 			_scrollHeight = height;
@@ -741,13 +741,14 @@
 			vcWriteVar(251, _scrollX);
 
 			dst = getBackBuf();
-			src = state.depack_src + (_scrollX - 8) / 2;
+			src = state.depack_src + _scrollX / 2;
 
 			for (w = 0; w < 80; w++) {
 				decodeStripA(dst, src + READ_LE_UINT32(src), height);
 				dst += 8;
 				src += 4;
 			}
+			
 			return;
 		}
 		if (height > 480) {
@@ -1856,7 +1857,7 @@
 
 		y = vsp->y;
 		vsp->y = y1;
-		checkScrollY(y1 - y);
+		checkScrollY(y, y1);
 
 		_variableArray[11] = readUint16Wrapper(p);
 		_variableArray[13] = pos;
@@ -2335,7 +2336,7 @@
 	vsp->x += getScale(vsp->y, x);
 	_variableArray[var] = vsp->x;
 
-	checkScrollX(x);
+	checkScrollX(x, vsp->x);
 
 	vsp->flags = kDFScaled;
 }
@@ -2350,7 +2351,7 @@
 	vsp->y += getScale(vsp->y, y);
 	_variableArray[var] = vsp->y;
 
-	checkScrollY(y);
+	checkScrollY(y, vsp->y);
 
 	vsp->flags = kDFScaled;
 }
@@ -2438,7 +2439,7 @@
 }
 
 // Scrolling functions for Feeble Files
-void SimonEngine::checkScrollX(int x) {
+void SimonEngine::checkScrollX(int x, int xpos) {
 	if (_scrollXMax == 0 || getBitFlag(80) || getBitFlag(82) || x == 0)
 		return;
 
@@ -2453,7 +2454,7 @@
 				return;
 		}
 
-		if (x - _scrollX >= 480) {
+		if (xpos - _scrollX >= 480) {
 			_scrollCount = 320;
 			tmp = _scrollXMax - _scrollX;
 			if (tmp < 320)
@@ -2469,7 +2470,7 @@
 				return;
 		}
 
-		if ((uint16)(x - _scrollX) < 161) {
+		if ((uint16)(xpos - _scrollX) < 161) {
 			_scrollCount = -320;
 			tmp = _scrollXMax - _scrollX;
 			if (_scrollX < 320)
@@ -2478,7 +2479,7 @@
 	}
 }
 
-void SimonEngine::checkScrollY(int y) {
+void SimonEngine::checkScrollY(int y, int ypos) {
 	if (_scrollYMax == 0 || getBitFlag(80))
 		return;
 
@@ -2493,7 +2494,7 @@
 				return;
 		}
 
-		if (y - _scrollY >= 440) {
+		if (ypos - _scrollY >= 440) {
 			_scrollCount = 240;
 			tmp = _scrollYMax - _scrollY;
 			if (tmp < 240)
@@ -2509,7 +2510,7 @@
 				return;
 		}
 
-		if ((uint16)(y - _scrollY) < 100) {
+		if ((uint16)(ypos - _scrollY) < 100) {
 			_scrollCount = -240;
 			tmp = _scrollYMax - _scrollY;
 			if (_scrollY < 240)


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