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

kirben at users.sourceforge.net kirben at users.sourceforge.net
Sat Apr 15 15:15:03 CEST 2006


Revision: 21924
Author:   kirben
Date:     2006-04-15 15:14:39 -0700 (Sat, 15 Apr 2006)
ViewCVS:  http://svn.sourceforge.net/scummvm/?rev=21924&view=rev

Log Message:
-----------
Use different methods to avoid overflows to FF, to avoid regressions

Modified Paths:
--------------
    scummvm/trunk/engines/simon/simon.h
    scummvm/trunk/engines/simon/vga.cpp
Modified: scummvm/trunk/engines/simon/simon.h
===================================================================
--- scummvm/trunk/engines/simon/simon.h	2006-04-15 22:14:18 UTC (rev 21923)
+++ scummvm/trunk/engines/simon/simon.h	2006-04-15 22:14:39 UTC (rev 21924)
@@ -383,8 +383,9 @@
 	uint16 _speechIdArray4[40];
 
 	uint16 _bitArray[48];
-	int32 _variableArray[256];
-	int32 _variableArray2[256];
+	int16 _variableArray[256];
+	int16 _variableArray2[256];
+	int16 *_variableArrayPtr;
 
 	WindowBlock *_windowArray[16];
 

Modified: scummvm/trunk/engines/simon/vga.cpp
===================================================================
--- scummvm/trunk/engines/simon/vga.cpp	2006-04-15 22:14:18 UTC (rev 21923)
+++ scummvm/trunk/engines/simon/vga.cpp	2006-04-15 22:14:39 UTC (rev 21924)
@@ -172,18 +172,12 @@
 
 uint SimonEngine::vcReadVar(uint var) {
 	assert(var < 255);
-	if (getGameType() == GType_FF && getBitFlag(82))
-		return (uint16)_variableArray2[var];
-	else
-		return (uint16)_variableArray[var];
+	return (uint16)_variableArrayPtr[var];
 }
 
 void SimonEngine::vcWriteVar(uint var, int16 value) {
 	assert(var < 255);
-	if (getGameType() == GType_FF && getBitFlag(82))
-		_variableArray2[var] = value;
-	else
-		_variableArray[var] = value;
+	_variableArrayPtr[var] = value;
 }
 
 void SimonEngine::vcSkipNextInstruction() {
@@ -1308,9 +1302,8 @@
 	_scrollYMax = 0;
 	_scrollImage = state->depack_src;
 	_scrollHeight = state->height;
-	int tmp = vcReadVar(34);
-	if (tmp < 0)
-		state->x = vcReadVar(251);
+	if (_variableArrayPtr[34] < 0)
+		state->x = _variableArrayPtr[251];
 
 	_scrollX = state->x;
 
@@ -1341,9 +1334,8 @@
 	_scrollYMax = state->height - 480;
 	_scrollImage = state->depack_src;
 	_scrollWidth = state->width;
-	int tmp = vcReadVar(34);
-	if (tmp < 0)
-		state->y = vcReadVar(250);
+	if (_variableArrayPtr[34] < 0)
+		state->y = _variableArrayPtr[250];
 
 	_scrollY = state->y;
 
@@ -1861,7 +1853,7 @@
 }
 
 void SimonEngine::vc48_setPathFinder() {
-	uint a = (uint16)vcReadVar(12);
+	uint a = (uint16)_variableArrayPtr[12];
 	const uint16 *p = _pathFindArray[a - 1];
 
 	if (getGameType() == GType_FF) {
@@ -1900,8 +1892,8 @@
 		vsp->y = y1;
 		checkScrollY(y1 - y, y1);
 
-		vcWriteVar(11, x1);
-		vcWriteVar(13, pos);
+		_variableArrayPtr[11] = x1;
+		_variableArrayPtr[13] = pos;
 	} else {
 		uint b = (uint16)_variableArray[13];
 		p += b * 2 + 1;
@@ -1909,7 +1901,7 @@
 
 		int step;
 		int y1, y2;
-		int32 *vp;
+		int16 *vp;
 
 		step = 2;
 		if (c < 0) {
@@ -1935,6 +1927,13 @@
 void SimonEngine::setBitFlag(uint bit, bool value) {
 	uint16 *bits = &_bitArray[bit / 16];
 	*bits = (*bits & ~(1 << (bit & 15))) | (value << (bit & 15));
+
+	if (getGameType() == GType_FF && bit == 82) {
+		if (value == true)
+			_variableArrayPtr = _variableArray2;
+		else
+			_variableArrayPtr = _variableArray;
+	}
 }
 
 bool SimonEngine::getBitFlag(uint bit) {
@@ -2375,7 +2374,7 @@
 	int var = vcReadNextWord();
 
 	vsp->x += getScale(vsp->y, x);
-	vcWriteVar(var, vsp->x);
+	_variableArrayPtr[var] = vsp->x;
 
 	checkScrollX(x, vsp->x);
 
@@ -2390,7 +2389,7 @@
 	int var = vcReadNextWord();
 
 	vsp->y += getScale(vsp->y, y);
-	vcWriteVar(var, vsp->y);
+	_variableArrayPtr[var] = vsp->y;
 
 	if (y != 0) 
 		checkScrollY(y, vsp->y);
@@ -2401,18 +2400,18 @@
 void SimonEngine::vc78_computeXY() {
 	VgaSprite *vsp = findCurSprite();
 
-	uint a = (uint16)vcReadVar(12);
-	uint b = (uint16)vcReadVar(13);
+	uint a = (uint16)_variableArrayPtr[12];
+	uint b = (uint16)_variableArrayPtr[13];
 
 	const uint16 *p = _pathFindArray[a - 1];
 	p += b * 2;
 
 	uint16 posx = readUint16Wrapper(p);
-	vcWriteVar(15, posx);
+	_variableArrayPtr[15] = posx;
 	vsp->x = posx;
 
 	uint16 posy = readUint16Wrapper(p + 1);
-	vcWriteVar(16, posy);
+	_variableArrayPtr[16] = posy;
 	vsp->y = posy;
 
 	setBitFlag(85, false);
@@ -2422,17 +2421,17 @@
 }
 
 void SimonEngine::vc79_computePosNum() {
-	uint a = (uint16)vcReadVar(12);
+	uint a = (uint16)_variableArrayPtr[12];
 	const uint16 *p = _pathFindArray[a - 1];
 	uint pos = 0;
 
-	uint16 y = vcReadVar(16);
+	int16 y = _variableArrayPtr[16];
 	while (y >= readUint16Wrapper(p + 1)) {
 		p += 2;
 		pos++;
 	}
 
-	vcWriteVar(13, pos);
+	_variableArrayPtr[13] = pos;
 }
 
 void SimonEngine::vc80_setOverlayImage() {


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