[Scummvm-git-logs] scummvm master -> 04d4c111006892487fc069c67699a3cef88861d1

csnover csnover at users.noreply.github.com
Sat Sep 9 04:18:57 CEST 2017


This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
5228aa29fa SCI32: Fix crash when changing security level of dead people in Phant2
7eedfdbeaf SCI32: Fix kString signatures to allow null references where appropriate
94b39c83b6 SCI32: Remove redundant kStringGetData implementation
04d4c11100 SCI32: Order nulls consistently in kernel signatures


Commit: 5228aa29fa632249c835f98fbc4cfc01fa5f222b
    https://github.com/scummvm/scummvm/commit/5228aa29fa632249c835f98fbc4cfc01fa5f222b
Author: Colin Snover (github.com at zetafleet.com)
Date: 2017-09-08T21:10:51-05:00

Commit Message:
SCI32: Fix crash when changing security level of dead people in Phant2

In the original interpreter, is it valid to pass a null reference
to both kArray(GetData) (it just acts as an identity function when
the passed argument is not an object) and to kString functions (it
always dereferences to an empty string).

Fixes Trac#10039.

Changed paths:
    engines/sci/engine/kernel_tables.h


diff --git a/engines/sci/engine/kernel_tables.h b/engines/sci/engine/kernel_tables.h
index ac93219..f4f96ad 100644
--- a/engines/sci/engine/kernel_tables.h
+++ b/engines/sci/engine/kernel_tables.h
@@ -521,7 +521,7 @@ static const SciKernelMapSubEntry kArray_subops[] = {
 	{ SIG_SCI32,           6, MAP_CALL(ArrayCopy),                 "ririi",                NULL },
 	// there is no subop 7
 	{ SIG_SCI32,           8, MAP_CALL(ArrayDuplicate),            "r",                    NULL },
-	{ SIG_SCI32,           9, MAP_CALL(ArrayGetData),              "[or]",                 NULL },
+	{ SIG_SCI32,           9, MAP_CALL(ArrayGetData),              "[0or]",                NULL },
 	{ SIG_SCI3,           10, MAP_CALL(ArrayByteCopy),             "ririi",                NULL },
 	SCI_SUBOPENTRY_TERMINATOR
 };
@@ -553,8 +553,8 @@ static const SciKernelMapSubEntry kString_subops[] = {
 	{ SIG_THRU_SCI21MID,  18, MAP_CALL(StringReplaceSubstringEx),  "rrrr",                 NULL },
 
 	{ SIG_SINCE_SCI21LATE, 8, MAP_CALL(StringLength),              "r",                    NULL },
-	{ SIG_SINCE_SCI21LATE, 9, MAP_CALL(StringFormat),              "[ro](.*)",             NULL },
-	{ SIG_SINCE_SCI21LATE,10, MAP_CALL(StringFormatAt),            "r[ro](.*)",            NULL },
+	{ SIG_SINCE_SCI21LATE, 9, MAP_CALL(StringFormat),              "[0ro](.*)",            NULL },
+	{ SIG_SINCE_SCI21LATE,10, MAP_CALL(StringFormatAt),            "r[0ro](.*)",           NULL },
 	{ SIG_SINCE_SCI21LATE,11, MAP_CALL(StringToInteger),           "r",                    NULL },
 	{ SIG_SINCE_SCI21LATE,12, MAP_CALL(StringTrim),                "ri(i)",                NULL },
 	{ SIG_SINCE_SCI21LATE,13, MAP_CALL(StringToUpperCase),         "r",                    NULL },


Commit: 7eedfdbeaf2d1349a368ea308219f0f185322c0d
    https://github.com/scummvm/scummvm/commit/7eedfdbeaf2d1349a368ea308219f0f185322c0d
Author: Colin Snover (github.com at zetafleet.com)
Date: 2017-09-08T21:10:51-05:00

Commit Message:
SCI32: Fix kString signatures to allow null references where appropriate

The original interpreter allowed most string references to be
null references, in which case it would substitute an empty
string.

Changed paths:
    engines/sci/engine/kernel_tables.h
    engines/sci/engine/kstring.cpp


diff --git a/engines/sci/engine/kernel_tables.h b/engines/sci/engine/kernel_tables.h
index f4f96ad..0f7b9ca 100644
--- a/engines/sci/engine/kernel_tables.h
+++ b/engines/sci/engine/kernel_tables.h
@@ -533,34 +533,34 @@ static const SciKernelMapSubEntry kString_subops[] = {
 	// 3)
 	{ SIG_THRU_SCI21MID,   0, MAP_CALL(StringNew),                 "i(i)",                 NULL },
 	{ SIG_THRU_SCI21MID,   1, MAP_CALL(ArrayGetSize),              "r",                    NULL },
-	{ SIG_THRU_SCI21MID,   2, MAP_CALL(StringGetChar),             "ri",                   NULL },
+	{ SIG_THRU_SCI21MID,   2, MAP_CALL(StringGetChar),             "[0r]i",                NULL },
 	{ SIG_THRU_SCI21MID,   3, MAP_CALL(ArraySetElements),          "ri(i*)",               kArraySetElements_workarounds },
 	{ SIG_THRU_SCI21MID,   4, MAP_CALL(StringFree),                "[0r]",                 NULL },
 	{ SIG_THRU_SCI21MID,   5, MAP_CALL(ArrayFill),                 "rii",                  kArrayFill_workarounds },
 	{ SIG_THRU_SCI21MID,   6, MAP_CALL(ArrayCopy),                 "ririi",                NULL },
-	{ SIG_SCI32,           7, MAP_CALL(StringCompare),             "rr(i)",                NULL },
+	{ SIG_SCI32,           7, MAP_CALL(StringCompare),             "[0r][0r](i)",          NULL },
 
 	{ SIG_THRU_SCI21MID,   8, MAP_CALL(ArrayDuplicate),            "r",                    NULL },
 	{ SIG_THRU_SCI21MID,   9, MAP_CALL(StringGetData),             "[0or]",                NULL },
-	{ SIG_THRU_SCI21MID,  10, MAP_CALL(StringLength),              "r",                    NULL },
-	{ SIG_THRU_SCI21MID,  11, MAP_CALL(StringFormat),              "[ro](.*)",             NULL },
-	{ SIG_THRU_SCI21MID,  12, MAP_CALL(StringFormatAt),            "r[ro](.*)",            NULL },
-	{ SIG_THRU_SCI21MID,  13, MAP_CALL(StringToInteger),           "r",                    NULL },
-	{ SIG_THRU_SCI21MID,  14, MAP_CALL(StringTrim),                "ri(i)",                NULL },
-	{ SIG_THRU_SCI21MID,  15, MAP_CALL(StringToUpperCase),         "r",                    NULL },
-	{ SIG_THRU_SCI21MID,  16, MAP_CALL(StringToLowerCase),         "r",                    NULL },
-	{ SIG_THRU_SCI21MID,  17, MAP_CALL(StringReplaceSubstring),    "rrrr",                 NULL },
-	{ SIG_THRU_SCI21MID,  18, MAP_CALL(StringReplaceSubstringEx),  "rrrr",                 NULL },
-
-	{ SIG_SINCE_SCI21LATE, 8, MAP_CALL(StringLength),              "r",                    NULL },
+	{ SIG_THRU_SCI21MID,  10, MAP_CALL(StringLength),              "[0r]",                 NULL },
+	{ SIG_THRU_SCI21MID,  11, MAP_CALL(StringFormat),              "[0ro](.*)",            NULL },
+	{ SIG_THRU_SCI21MID,  12, MAP_CALL(StringFormatAt),            "r[0ro](.*)",           NULL },
+	{ SIG_THRU_SCI21MID,  13, MAP_CALL(StringToInteger),           "[0r]",                 NULL },
+	{ SIG_THRU_SCI21MID,  14, MAP_CALL(StringTrim),                "[0r]i(i)",             NULL },
+	{ SIG_THRU_SCI21MID,  15, MAP_CALL(StringToUpperCase),         "[0r]",                 NULL },
+	{ SIG_THRU_SCI21MID,  16, MAP_CALL(StringToLowerCase),         "[0r]",                 NULL },
+	{ SIG_THRU_SCI21MID,  17, MAP_CALL(StringReplaceSubstring),    "[0r][0r][0r][0r]",     NULL },
+	{ SIG_THRU_SCI21MID,  18, MAP_CALL(StringReplaceSubstringEx),  "[0r][0r][0r][0r]",     NULL },
+
+	{ SIG_SINCE_SCI21LATE, 8, MAP_CALL(StringLength),              "[0r]",                 NULL },
 	{ SIG_SINCE_SCI21LATE, 9, MAP_CALL(StringFormat),              "[0ro](.*)",            NULL },
-	{ SIG_SINCE_SCI21LATE,10, MAP_CALL(StringFormatAt),            "r[0ro](.*)",           NULL },
-	{ SIG_SINCE_SCI21LATE,11, MAP_CALL(StringToInteger),           "r",                    NULL },
-	{ SIG_SINCE_SCI21LATE,12, MAP_CALL(StringTrim),                "ri(i)",                NULL },
-	{ SIG_SINCE_SCI21LATE,13, MAP_CALL(StringToUpperCase),         "r",                    NULL },
-	{ SIG_SINCE_SCI21LATE,14, MAP_CALL(StringToLowerCase),         "r",                    NULL },
-	{ SIG_SINCE_SCI21LATE,15, MAP_CALL(StringReplaceSubstring),    "rrrr",                 NULL },
-	{ SIG_SINCE_SCI21LATE,16, MAP_CALL(StringReplaceSubstringEx),  "rrrr",                 NULL },
+	{ SIG_SINCE_SCI21LATE,10, MAP_CALL(StringFormatAt),            "[0r][0ro](.*)",        NULL },
+	{ SIG_SINCE_SCI21LATE,11, MAP_CALL(StringToInteger),           "[0r]",                 NULL },
+	{ SIG_SINCE_SCI21LATE,12, MAP_CALL(StringTrim),                "[0r]i(i)",             NULL },
+	{ SIG_SINCE_SCI21LATE,13, MAP_CALL(StringToUpperCase),         "[0r]",                 NULL },
+	{ SIG_SINCE_SCI21LATE,14, MAP_CALL(StringToLowerCase),         "[0r]",                 NULL },
+	{ SIG_SINCE_SCI21LATE,15, MAP_CALL(StringReplaceSubstring),    "[0r][0r][0r][0r]",     NULL },
+	{ SIG_SINCE_SCI21LATE,16, MAP_CALL(StringReplaceSubstringEx),  "[0r][0r][0r][0r]",     NULL },
 	SCI_SUBOPENTRY_TERMINATOR
 };
 
diff --git a/engines/sci/engine/kstring.cpp b/engines/sci/engine/kstring.cpp
index 3c6a042..5bab422 100644
--- a/engines/sci/engine/kstring.cpp
+++ b/engines/sci/engine/kstring.cpp
@@ -803,26 +803,30 @@ Common::String format(const Common::String &source, int argc, const reg_t *argv)
 }
 
 reg_t kStringFormat(EngineState *s, int argc, reg_t *argv) {
-	reg_t stringHandle;
-	SciArray &target = *s->_segMan->allocateArray(kArrayTypeString, 0, &stringHandle);
-	reg_t source = argv[0];
-	// Str objects may be passed in place of direct references to string data
-	if (s->_segMan->isObject(argv[0])) {
-		source = readSelector(s->_segMan, argv[0], SELECTOR(data));
-	}
-	target.fromString(format(s->_segMan->getString(source), argc - 1, argv + 1));
-	return stringHandle;
+	Common::Array<reg_t> args;
+	args.resize(argc + 1);
+	args[0] = NULL_REG;
+	Common::copy(argv, argv + argc, &args[1]);
+	return kStringFormatAt(s, args.size(), &args[0]);
 }
 
 reg_t kStringFormatAt(EngineState *s, int argc, reg_t *argv) {
-	SciArray &target = *s->_segMan->lookupArray(argv[0]);
+	reg_t stringHandle;
+	SciArray *target;
+	if (argv[0].isNull()) {
+		target = s->_segMan->allocateArray(kArrayTypeString, 0, &stringHandle);
+	} else {
+		target = s->_segMan->lookupArray(argv[0]);
+		stringHandle = argv[0];
+	}
+
 	reg_t source = argv[1];
 	// Str objects may be passed in place of direct references to string data
 	if (s->_segMan->isObject(argv[1])) {
 		source = readSelector(s->_segMan, argv[1], SELECTOR(data));
 	}
-	target.fromString(format(s->_segMan->getString(source), argc - 2, argv + 2));
-	return argv[0];
+	target->fromString(format(s->_segMan->getString(source), argc - 2, argv + 2));
+	return stringHandle;
 }
 
 reg_t kStringToInteger(EngineState *s, int argc, reg_t *argv) {


Commit: 94b39c83b6e526d6907f6d524e97183a9e774248
    https://github.com/scummvm/scummvm/commit/94b39c83b6e526d6907f6d524e97183a9e774248
Author: Colin Snover (github.com at zetafleet.com)
Date: 2017-09-08T21:10:51-05:00

Commit Message:
SCI32: Remove redundant kStringGetData implementation

This code is identical to the kArrayGetData implementation.

Changed paths:
    engines/sci/engine/kernel.h
    engines/sci/engine/kernel_tables.h
    engines/sci/engine/kstring.cpp


diff --git a/engines/sci/engine/kernel.h b/engines/sci/engine/kernel.h
index baa8916..a712474 100644
--- a/engines/sci/engine/kernel.h
+++ b/engines/sci/engine/kernel.h
@@ -508,7 +508,6 @@ reg_t kStringNew(EngineState *s, int argc, reg_t *argv);
 reg_t kStringGetChar(EngineState *s, int argc, reg_t *argv);
 reg_t kStringFree(EngineState *s, int argc, reg_t *argv);
 reg_t kStringCompare(EngineState *s, int argc, reg_t *argv);
-reg_t kStringGetData(EngineState *s, int argc, reg_t *argv);
 reg_t kStringLength(EngineState *s, int argc, reg_t *argv);
 reg_t kStringFormat(EngineState *s, int argc, reg_t *argv);
 reg_t kStringFormatAt(EngineState *s, int argc, reg_t *argv);
diff --git a/engines/sci/engine/kernel_tables.h b/engines/sci/engine/kernel_tables.h
index 0f7b9ca..0a1b800 100644
--- a/engines/sci/engine/kernel_tables.h
+++ b/engines/sci/engine/kernel_tables.h
@@ -541,7 +541,7 @@ static const SciKernelMapSubEntry kString_subops[] = {
 	{ SIG_SCI32,           7, MAP_CALL(StringCompare),             "[0r][0r](i)",          NULL },
 
 	{ SIG_THRU_SCI21MID,   8, MAP_CALL(ArrayDuplicate),            "r",                    NULL },
-	{ SIG_THRU_SCI21MID,   9, MAP_CALL(StringGetData),             "[0or]",                NULL },
+	{ SIG_THRU_SCI21MID,   9, MAP_CALL(ArrayGetData),              "[0or]",                NULL },
 	{ SIG_THRU_SCI21MID,  10, MAP_CALL(StringLength),              "[0r]",                 NULL },
 	{ SIG_THRU_SCI21MID,  11, MAP_CALL(StringFormat),              "[0ro](.*)",            NULL },
 	{ SIG_THRU_SCI21MID,  12, MAP_CALL(StringFormatAt),            "r[0ro](.*)",           NULL },
diff --git a/engines/sci/engine/kstring.cpp b/engines/sci/engine/kstring.cpp
index 5bab422..cbe481d 100644
--- a/engines/sci/engine/kstring.cpp
+++ b/engines/sci/engine/kstring.cpp
@@ -682,14 +682,6 @@ reg_t kStringCompare(EngineState *s, int argc, reg_t *argv) {
 	return make_reg(0, (result > 0) - (result < 0));
 }
 
-reg_t kStringGetData(EngineState *s, int argc, reg_t *argv) {
-	if (s->_segMan->isObject(argv[0])) {
-		return readSelector(s->_segMan, argv[0], SELECTOR(data));
-	}
-
-	return argv[0];
-}
-
 reg_t kStringLength(EngineState *s, int argc, reg_t *argv) {
 	return make_reg(0, s->_segMan->getString(argv[0]).size());
 }


Commit: 04d4c111006892487fc069c67699a3cef88861d1
    https://github.com/scummvm/scummvm/commit/04d4c111006892487fc069c67699a3cef88861d1
Author: Colin Snover (github.com at zetafleet.com)
Date: 2017-09-08T21:16:47-05:00

Commit Message:
SCI32: Order nulls consistently in kernel signatures

Changed paths:
    engines/sci/engine/kernel_tables.h


diff --git a/engines/sci/engine/kernel_tables.h b/engines/sci/engine/kernel_tables.h
index 0a1b800..d7a83d9 100644
--- a/engines/sci/engine/kernel_tables.h
+++ b/engines/sci/engine/kernel_tables.h
@@ -516,12 +516,12 @@ static const SciKernelMapSubEntry kArray_subops[] = {
 	{ SIG_SCI32,           1, MAP_CALL(ArrayGetSize),              "r",                    NULL },
 	{ SIG_SCI32,           2, MAP_CALL(ArrayGetElement),           "ri",                   NULL },
 	{ SIG_SCI32,           3, MAP_CALL(ArraySetElements),          "ri(.*)",               kArraySetElements_workarounds },
-	{ SIG_SCI32,           4, MAP_CALL(ArrayFree),                 "[0r]",                 NULL },
+	{ SIG_SCI32,           4, MAP_CALL(ArrayFree),                 "[r0]",                 NULL },
 	{ SIG_SCI32,           5, MAP_CALL(ArrayFill),                 "riii",                 kArrayFill_workarounds },
 	{ SIG_SCI32,           6, MAP_CALL(ArrayCopy),                 "ririi",                NULL },
 	// there is no subop 7
 	{ SIG_SCI32,           8, MAP_CALL(ArrayDuplicate),            "r",                    NULL },
-	{ SIG_SCI32,           9, MAP_CALL(ArrayGetData),              "[0or]",                NULL },
+	{ SIG_SCI32,           9, MAP_CALL(ArrayGetData),              "[or0]",                NULL },
 	{ SIG_SCI3,           10, MAP_CALL(ArrayByteCopy),             "ririi",                NULL },
 	SCI_SUBOPENTRY_TERMINATOR
 };
@@ -533,34 +533,34 @@ static const SciKernelMapSubEntry kString_subops[] = {
 	// 3)
 	{ SIG_THRU_SCI21MID,   0, MAP_CALL(StringNew),                 "i(i)",                 NULL },
 	{ SIG_THRU_SCI21MID,   1, MAP_CALL(ArrayGetSize),              "r",                    NULL },
-	{ SIG_THRU_SCI21MID,   2, MAP_CALL(StringGetChar),             "[0r]i",                NULL },
+	{ SIG_THRU_SCI21MID,   2, MAP_CALL(StringGetChar),             "[r0]i",                NULL },
 	{ SIG_THRU_SCI21MID,   3, MAP_CALL(ArraySetElements),          "ri(i*)",               kArraySetElements_workarounds },
-	{ SIG_THRU_SCI21MID,   4, MAP_CALL(StringFree),                "[0r]",                 NULL },
+	{ SIG_THRU_SCI21MID,   4, MAP_CALL(StringFree),                "[r0]",                 NULL },
 	{ SIG_THRU_SCI21MID,   5, MAP_CALL(ArrayFill),                 "rii",                  kArrayFill_workarounds },
 	{ SIG_THRU_SCI21MID,   6, MAP_CALL(ArrayCopy),                 "ririi",                NULL },
-	{ SIG_SCI32,           7, MAP_CALL(StringCompare),             "[0r][0r](i)",          NULL },
+	{ SIG_SCI32,           7, MAP_CALL(StringCompare),             "[r0][r0](i)",          NULL },
 
 	{ SIG_THRU_SCI21MID,   8, MAP_CALL(ArrayDuplicate),            "r",                    NULL },
-	{ SIG_THRU_SCI21MID,   9, MAP_CALL(ArrayGetData),              "[0or]",                NULL },
-	{ SIG_THRU_SCI21MID,  10, MAP_CALL(StringLength),              "[0r]",                 NULL },
-	{ SIG_THRU_SCI21MID,  11, MAP_CALL(StringFormat),              "[0ro](.*)",            NULL },
-	{ SIG_THRU_SCI21MID,  12, MAP_CALL(StringFormatAt),            "r[0ro](.*)",           NULL },
-	{ SIG_THRU_SCI21MID,  13, MAP_CALL(StringToInteger),           "[0r]",                 NULL },
-	{ SIG_THRU_SCI21MID,  14, MAP_CALL(StringTrim),                "[0r]i(i)",             NULL },
-	{ SIG_THRU_SCI21MID,  15, MAP_CALL(StringToUpperCase),         "[0r]",                 NULL },
-	{ SIG_THRU_SCI21MID,  16, MAP_CALL(StringToLowerCase),         "[0r]",                 NULL },
-	{ SIG_THRU_SCI21MID,  17, MAP_CALL(StringReplaceSubstring),    "[0r][0r][0r][0r]",     NULL },
-	{ SIG_THRU_SCI21MID,  18, MAP_CALL(StringReplaceSubstringEx),  "[0r][0r][0r][0r]",     NULL },
-
-	{ SIG_SINCE_SCI21LATE, 8, MAP_CALL(StringLength),              "[0r]",                 NULL },
-	{ SIG_SINCE_SCI21LATE, 9, MAP_CALL(StringFormat),              "[0ro](.*)",            NULL },
-	{ SIG_SINCE_SCI21LATE,10, MAP_CALL(StringFormatAt),            "[0r][0ro](.*)",        NULL },
-	{ SIG_SINCE_SCI21LATE,11, MAP_CALL(StringToInteger),           "[0r]",                 NULL },
-	{ SIG_SINCE_SCI21LATE,12, MAP_CALL(StringTrim),                "[0r]i(i)",             NULL },
-	{ SIG_SINCE_SCI21LATE,13, MAP_CALL(StringToUpperCase),         "[0r]",                 NULL },
-	{ SIG_SINCE_SCI21LATE,14, MAP_CALL(StringToLowerCase),         "[0r]",                 NULL },
-	{ SIG_SINCE_SCI21LATE,15, MAP_CALL(StringReplaceSubstring),    "[0r][0r][0r][0r]",     NULL },
-	{ SIG_SINCE_SCI21LATE,16, MAP_CALL(StringReplaceSubstringEx),  "[0r][0r][0r][0r]",     NULL },
+	{ SIG_THRU_SCI21MID,   9, MAP_CALL(ArrayGetData),              "[or0]",                NULL },
+	{ SIG_THRU_SCI21MID,  10, MAP_CALL(StringLength),              "[r0]",                 NULL },
+	{ SIG_THRU_SCI21MID,  11, MAP_CALL(StringFormat),              "[or0](.*)",            NULL },
+	{ SIG_THRU_SCI21MID,  12, MAP_CALL(StringFormatAt),            "r[or0](.*)",           NULL },
+	{ SIG_THRU_SCI21MID,  13, MAP_CALL(StringToInteger),           "[r0]",                 NULL },
+	{ SIG_THRU_SCI21MID,  14, MAP_CALL(StringTrim),                "[r0]i(i)",             NULL },
+	{ SIG_THRU_SCI21MID,  15, MAP_CALL(StringToUpperCase),         "[r0]",                 NULL },
+	{ SIG_THRU_SCI21MID,  16, MAP_CALL(StringToLowerCase),         "[r0]",                 NULL },
+	{ SIG_THRU_SCI21MID,  17, MAP_CALL(StringReplaceSubstring),    "[r0][r0][r0][r0]",     NULL },
+	{ SIG_THRU_SCI21MID,  18, MAP_CALL(StringReplaceSubstringEx),  "[r0][r0][r0][r0]",     NULL },
+
+	{ SIG_SINCE_SCI21LATE, 8, MAP_CALL(StringLength),              "[r0]",                 NULL },
+	{ SIG_SINCE_SCI21LATE, 9, MAP_CALL(StringFormat),              "[or0](.*)",            NULL },
+	{ SIG_SINCE_SCI21LATE,10, MAP_CALL(StringFormatAt),            "[r0][or0](.*)",        NULL },
+	{ SIG_SINCE_SCI21LATE,11, MAP_CALL(StringToInteger),           "[r0]",                 NULL },
+	{ SIG_SINCE_SCI21LATE,12, MAP_CALL(StringTrim),                "[r0]i(i)",             NULL },
+	{ SIG_SINCE_SCI21LATE,13, MAP_CALL(StringToUpperCase),         "[r0]",                 NULL },
+	{ SIG_SINCE_SCI21LATE,14, MAP_CALL(StringToLowerCase),         "[r0]",                 NULL },
+	{ SIG_SINCE_SCI21LATE,15, MAP_CALL(StringReplaceSubstring),    "[r0][r0][r0][r0]",     NULL },
+	{ SIG_SINCE_SCI21LATE,16, MAP_CALL(StringReplaceSubstringEx),  "[r0][r0][r0][r0]",     NULL },
 	SCI_SUBOPENTRY_TERMINATOR
 };
 





More information about the Scummvm-git-logs mailing list