diff options
author | Travis Howell | 2004-10-02 07:46:06 +0000 |
---|---|---|
committer | Travis Howell | 2004-10-02 07:46:06 +0000 |
commit | 1345fcac14c17ba63e0db8b2dfb68c2e7cf5577c (patch) | |
tree | ed5b574010bab370fd80e122dcb9d67672f14fc1 /scumm | |
parent | 168c9757d300c218143d96a64abf6be414aaac29 (diff) | |
download | scummvm-rg350-1345fcac14c17ba63e0db8b2dfb68c2e7cf5577c.tar.gz scummvm-rg350-1345fcac14c17ba63e0db8b2dfb68c2e7cf5577c.tar.bz2 scummvm-rg350-1345fcac14c17ba63e0db8b2dfb68c2e7cf5577c.zip |
Array corrections
svn-id: r15381
Diffstat (limited to 'scumm')
-rw-r--r-- | scumm/script_v72he.cpp | 46 | ||||
-rw-r--r-- | scumm/script_v90he.cpp | 3 |
2 files changed, 36 insertions, 13 deletions
diff --git a/scumm/script_v72he.cpp b/scumm/script_v72he.cpp index 46990d3b0b..18f97d74a9 100644 --- a/scumm/script_v72he.cpp +++ b/scumm/script_v72he.cpp @@ -1345,13 +1345,14 @@ void ScummEngine_v72he::o72_findObject() { void ScummEngine_v72he::o72_arrayOps() { byte subOp = fetchScriptByte(); int array = fetchScriptWord(); - int b, c, offs; + int offs, tmp, tmp2, tmp3; int dim1end, dim1start, dim2end, dim2start; - int id, len, len2; + int id, len, b, c; ArrayHeader *ah; int list[128]; byte string[2048]; + debug(1,"o72_arrayOps: case %d", subOp); switch (subOp) { case 7: // SO_ASSIGN_STRING @@ -1362,7 +1363,7 @@ void ScummEngine_v72he::o72_arrayOps() { break; case 126: - len2 = getStackList(list, ARRAYSIZE(list)); + len = getStackList(list, ARRAYSIZE(list)); dim1end = pop(); dim1start = pop(); dim2end = pop(); @@ -1371,10 +1372,14 @@ void ScummEngine_v72he::o72_arrayOps() { if (id == 0) { defineArray(array, kDwordArray, dim2start, dim2end, dim1start, dim1end); } - while (dim2start < dim2end) { - len = len2; - while (--len >= 0) { - writeArray(array, dim2start, len, list[len]); + tmp2 = len; + while (dim2start <= dim2end) { + tmp = dim1start; + while (tmp <= dim1end) { + writeArray(array, dim2start, tmp, list[--tmp2]); + if (tmp2 == 0) + tmp2 = len; + tmp++; } dim2start++; } @@ -1407,14 +1412,23 @@ void ScummEngine_v72he::o72_arrayOps() { if (id == 0) { defineArray(array, kDwordArray, dim2start, dim2end, dim1start, dim1end); } - len2 = ((c - b) | dim2end) - dim2end + 1; + + len = c - b; + len |= dim2end; + len = len - dim2end + 1; offs = (b >= c) ? 1 : -1; - while (dim2start < dim2end) { - len = len2; - while (--len >= 0) { - writeArray(array, dim2start, len, c); + while (dim2start <= dim2end) { + tmp = dim1start; + tmp2 = c; + tmp3 = len; + while (tmp <= dim1end) { + writeArray(array, dim2start, tmp, tmp2); + if (--tmp3 == 0) + tmp2 = c; + else + tmp2 += offs; + tmp++; } - c += offs; dim2start++; } break; @@ -1854,6 +1868,12 @@ void ScummEngine_v72he::o72_openFile() { mode = pop(); copyScriptString(filename); + // HACK bb2demo uses incorrect filename + if (!strcmp((char *)filename,".HE9")) { + memset(filename, 0, sizeof(filename)); + sprintf((char *)filename, "%s.he9", _gameName.c_str()); + } + for (r = strlen((char*)filename); r != 0; r--) { if (filename[r - 1] == '\\') break; diff --git a/scumm/script_v90he.cpp b/scumm/script_v90he.cpp index 87b0db709b..51055bc9bd 100644 --- a/scumm/script_v90he.cpp +++ b/scumm/script_v90he.cpp @@ -849,6 +849,9 @@ void ScummEngine_v90he::o90_unknown26() { case 52: // HE 98+ pop(); break; + case 58: // HE 99+ + pop(); + break; case 63: // HE 98+ pop(); break; |