[Scummvm-cvs-logs] CVS: scummvm/scumm intern.h,2.252,2.253 script_v72he.cpp,2.95,2.96 script_v7he.cpp,2.88,2.89

Travis Howell kirben at users.sourceforge.net
Tue Sep 14 23:42:01 CEST 2004


Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26262/scumm

Modified Files:
	intern.h script_v72he.cpp script_v7he.cpp 
Log Message:

Still not quite right.


Index: intern.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/intern.h,v
retrieving revision 2.252
retrieving revision 2.253
diff -u -d -r2.252 -r2.253
--- intern.h	14 Sep 2004 15:06:00 -0000	2.252
+++ intern.h	15 Sep 2004 06:41:11 -0000	2.253
@@ -616,8 +616,6 @@
 	virtual void executeOpcode(byte i);
 	virtual const char *getOpcodeDesc(byte i);
 
-	byte stringLen(byte *);
-	int getCharsetOffsets(int chr);
 	void arrrays_unk2(int dst, int src, int len2, int len);
 
 	void polygonErase(int fromId, int toId);

Index: script_v72he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v72he.cpp,v
retrieving revision 2.95
retrieving revision 2.96
diff -u -d -r2.95 -r2.96
--- script_v72he.cpp	15 Sep 2004 01:56:42 -0000	2.95
+++ script_v72he.cpp	15 Sep 2004 06:41:11 -0000	2.96
@@ -512,6 +512,31 @@
 	}
 }
 
+void ScummEngine_v72he::arrrays_unk2(int dst, int src, int len2, int len) {
+	int edi, value;
+	int i = 0;
+
+	if (len == -1) {
+		len = resStrLen(getStringAddress(src));
+		len2 = 0;
+	}
+
+	edi = resStrLen(getStringAddress(dst));
+
+	len -= len2;
+	len++;
+
+	while (i < len) {
+		writeVar(0, src);
+		value = readArray(0, 0, len2 + i);
+		writeVar(0, dst);
+		writeArray(0, 0, edi + i, value);
+		i++;
+	}
+
+	writeArray(0, 0, edi + i, 0);
+}
+
 void ScummEngine_v72he::copyScriptString(byte *dst) {
 	int i = 0;
 	byte b;
@@ -539,7 +564,7 @@
 	memset(string, 0, sizeof(string));
 
 	getStackList(args, ARRAYSIZE(args));
-	pop();
+	int id = pop();
 
 	if (scriptString) {
 		addMessageToStack(_scriptPointer, string, sizeof(string));
@@ -552,13 +577,15 @@
 
 	while (len--) {
 		chr = string[num++];
-		if (chr == 0x25) {
+		if (chr == '%') {
 			chr = string[num++];
-			if (chr == 0x64)
+			if (chr == 'd') {
 				dst += snprintf((char *)dst, 10, "%d", args[val++]);
-			else if (chr == 0x73)
-				dst += addStringToStack(dst, 512, args[val++]);
-			continue;
+				continue;
+			} else if (chr == 's') {
+				dst += addStringToStack(dst, 512, id++);
+				continue;
+			}
 		}
 		*dst++ = chr;
 	}
@@ -1503,9 +1530,6 @@
 	if (!strcmp((char *)filename,".he3")) {
 		memset(filename, 0, sizeof(filename));
 		sprintf((char *)filename, "%s.he3", _gameName.c_str());
-	} else if (!strcmp((char *)filename,".he7")) {
-		memset(filename, 0, sizeof(filename));
-		sprintf((char *)filename, "%s.he7", _gameName.c_str());
 	}
 
 	debug(1,"File %s", filename);
@@ -1761,31 +1785,6 @@
 	ah->dim2end = TO_LE_32(newDim2end);
 }
 
-void ScummEngine_v72he::arrrays_unk2(int dst, int src, int len2, int len) {
-	int edi, value;
-	int i = 0;
-
-	if (len == -1) {
-		len = resStrLen(getStringAddress(src));
-		len2 = 0;
-	}
-
-	edi = resStrLen(getStringAddress(dst));
-
-	len -= len2;
-	len++;
-
-	while (i < len) {
-		writeVar(0, src);
-		value = readArray(0, 0, len2 + i);
-		writeVar(0, dst);
-		writeArray(0, 0, edi + i, value);
-		i++;
-	}
-
-	writeArray(0, 0, edi + i, 0);
-}
-
 void ScummEngine_v72he::o72_unknownEC() {
 	int dst, size;
 	int src = pop();
@@ -1819,7 +1818,8 @@
 	writeVar(0, array);
 	while (pos <= len) {
 		chr = readArray(0, 0, pos);
-		result += getCharsetOffsets(chr);
+		if (chr)
+			result += _charset->getCharWidth(chr);
 		pos++;
 	}
 
@@ -1871,7 +1871,6 @@
 
 void ScummEngine_v72he::o72_unknownF1() {
 	byte *addr, *addr2;
-	byte chr, chr2;
 
 	int id = pop();
 	int id2 = pop();
@@ -1884,13 +1883,17 @@
 	if (!addr)
 		error("o72_stringLen: Reference to zeroed array pointer (%d)", id);
 
-	chr = *addr++;
-	chr2 = *addr2++;
-
+	while (*addr == *addr2) {
+		if (addr == 0) {
+			push(0);
+			return;
+		}
+		addr++;
+		addr2++;
+	}
 
+	push (1);
 	debug(1,"o7_unknownF1 stub (%d, %d)", id, id2);
-
-	push(0);
 }
 
 void ScummEngine_v72he::o72_checkGlobQueue() {
@@ -1963,9 +1966,9 @@
 	len = resStrLen(getStringAddress(array));
 
 	writeVar(0, array);
-	while (pos < len) {
+	while (pos <= len) {
 		chr = readArray(0, 0, pos);
-		result += getCharsetOffsets(chr);
+		result += _charset->getCharWidth(chr);
 		if (result >= max) {
 			push(pos);
 			return;

Index: script_v7he.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/script_v7he.cpp,v
retrieving revision 2.88
retrieving revision 2.89
diff -u -d -r2.88 -r2.89
--- script_v7he.cpp	15 Sep 2004 01:56:42 -0000	2.88
+++ script_v7he.cpp	15 Sep 2004 06:41:11 -0000	2.89
@@ -379,52 +379,29 @@
 	return _opcodesV7he[i].desc;
 }
 
+void ScummEngine_v7he::arrrays_unk2(int dst, int src, int len2, int len) {
+	int edi, value;
+	int i = 0;
 
-byte ScummEngine_v7he::stringLen(byte *ptr) {
-	byte len;
-	byte c;
-	if (!ptr)
-		error("ScummEngine_v7he::stringLen(): zero ptr. Undimplemented behaviour");
-
-	len = 0;
-	c = *ptr++;
-
-	if (len == c)
-		return 0;
-
-	do {
-		len++;
-		if (c == 0xff) {
-			ptr += 3;
-			len += 3;
-		}
-		c = *ptr++;
-	} while (c);
-
-	return len;
-}
-
-int ScummEngine_v7he::getCharsetOffsets(int chr) {
-	int width, offsX;
-	int result = 0;
+	if (len == -1) {
+		len = resStrLen(getStringAddress(src));
+		len2 = 0;
+	}
 
-	byte *fontPtr = getResourceAddress(rtCharset, _string[0]._default.charset);
-	if (!fontPtr)
-		error("getCharsetOffsets: charset %d not found!", _string[0]._default.charset);
+	edi = resStrLen(getStringAddress(dst));
 
-	int offs = READ_LE_UINT32(fontPtr + 29 + chr * 4 + 4);
-	if (!offs)
-		return 0;
+	len -= len2;
+	len++;
 
-	width = fontPtr[offs] + (signed char)fontPtr[offs + 0];
-	offsX = fontPtr[offs] + (signed char)fontPtr[offs + 2];
-	
-	if (offsX >= 0x80)
-		result = (offsX & 0xff) + width - 256;
-	else
-		result = (offsX & 0xff) + width;
+	while (i < len) {
+		writeVar(0, src);
+		value = readArray(0, 0, len2 + i);
+		writeVar(0, dst);
+		writeArray(0, 0, edi + i, value);
+		i++;
+	}
 
-	return result;
+	writeArray(0, 0, edi + i, 0);
 }
 
 void ScummEngine_v7he::o7_cursorCommand() {
@@ -695,7 +672,7 @@
 		debug(5,"stub o7_resourceRoutines unlock object %d", resid);
 		break;
 	default:
-		warning("o7_resourceRoutines: default case %d", op);
+		debug(1,"o7_resourceRoutines: default case %d", op);
 	}
 }
 
@@ -746,7 +723,7 @@
 	writeVar(0, array);
 	while (pos <= len) {
 		chr = readArray(0, 0, pos);
-		result += getCharsetOffsets(chr);
+		result += _charset->getCharWidth(chr);
 		pos++;
 	}
 
@@ -814,31 +791,6 @@
 	push(len);
 }
 
-void ScummEngine_v7he::arrrays_unk2(int dst, int src, int len2, int len) {
-	int edi, value;
-	int i = 0;
-
-	if (len == -1) {
-		len = resStrLen(getStringAddress(src));
-		len2 = 0;
-	}
-
-	edi = resStrLen(getStringAddress(dst));
-
-	len -= len2;
-	len++;
-
-	while (i < len) {
-		writeVar(0, src);
-		value = readArray(0, 0, len2 + i);
-		writeVar(0, dst);
-		writeArray(0, 0, edi + i, value);
-		i++;
-	}
-
-	writeArray(0, 0, edi + i, 0);
-}
-
 void ScummEngine_v7he::o7_unknownEF() {
 	int dst, size;
 	int b = pop();
@@ -929,9 +881,9 @@
 	len = resStrLen(getStringAddress(array));
 
 	writeVar(0, array);
-	while (pos < len) {
+	while (pos <= len) {
 		chr = readArray(0, 0, pos);
-		result += getCharsetOffsets(chr);
+		result += _charset->getCharWidth(chr);
 		if (result >= max) {
 			push(pos);
 			return;
@@ -1040,9 +992,6 @@
 							int vert2y, int vert3x, int vert3y, int vert4x, int vert4y) {
 	int i;
 
-	debug(1, "polygonStore(%d, %d, %d, %d, %d, %d, %d, %d, %d, %d)", id, flag, vert1x,
-		  vert1y, vert2x, vert2y, vert3x, vert3y, vert4x, vert4y);
-
 	for (i = 0; i < _WizNumPolygons; i++)
 		if (_WizPolygons[i].id == 0)
 			break;
@@ -1090,14 +1039,10 @@
 	int y = pop();
 	int x = pop();
 
-	debug(1, "o7_polygonHit(%d, %d)", x, y);
-
 	push(polygonHit(0, x, y));
 }
 
 int ScummEngine_v7he::polygonHit(int id, int x, int y) {
-	debug(1, "polygonHit(%d, %d, %d)", id, x, y);
-
 	for (int i = 0; i < _WizNumPolygons; i++) {
 		if ((!id || _WizPolygons[i].id == id) && _WizPolygons[i].bound.contains(x, y)) {
 			if (polygonContains(_WizPolygons[i], x, y)) {





More information about the Scummvm-git-logs mailing list