[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