[Scummvm-cvs-logs] SF.net SVN: scummvm:[47484] scummvm/trunk/engines/sci/engine

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Sat Jan 23 21:27:15 CET 2010


Revision: 47484
          http://scummvm.svn.sourceforge.net/scummvm/?rev=47484&view=rev
Author:   thebluegr
Date:     2010-01-23 20:27:14 +0000 (Sat, 23 Jan 2010)

Log Message:
-----------
kSetSynonyms is really parser related, but it's an empty function in games without a parser

Modified Paths:
--------------
    scummvm/trunk/engines/sci/engine/kernel.cpp
    scummvm/trunk/engines/sci/engine/kparse.cpp
    scummvm/trunk/engines/sci/engine/kscripts.cpp

Modified: scummvm/trunk/engines/sci/engine/kernel.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kernel.cpp	2010-01-23 19:10:56 UTC (rev 47483)
+++ scummvm/trunk/engines/sci/engine/kernel.cpp	2010-01-23 20:27:14 UTC (rev 47484)
@@ -763,12 +763,10 @@
 		break;
 
 	case SCI_VERSION_1_1:
-		// In SCI1.1, this kernel function is empty, apart from KQ6CD,
-		// where it has been replaced with kPortrait
+		// In KQ6CD, the empty kSetSynonyms function has been replaced
+		// with kPortrait
 		if (gameId == "kq6")
 			_kernelNames[0x26] = "Portrait";
-		else
-			_kernelNames[0x26] = "Dummy";
 		_kernelNames[0x71] = "PalVary";
 		_kernelNames[0x7c] = "Message";
 		break;

Modified: scummvm/trunk/engines/sci/engine/kparse.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kparse.cpp	2010-01-23 19:10:56 UTC (rev 47483)
+++ scummvm/trunk/engines/sci/engine/kparse.cpp	2010-01-23 20:27:14 UTC (rev 47484)
@@ -148,5 +148,63 @@
 	return s->r_acc;
 }
 
+reg_t kSetSynonyms(EngineState *s, int argc, reg_t *argv) {
+	SegManager *segMan = s->_segMan;
+	reg_t object = argv[0];
+	List *list;
+	Node *node;
+	int script;
+	int numSynonyms = 0;
 
+	// Only SCI0-SCI1 EGA games had a parser. In newer versions, this is a stub
+	if (getSciVersion() > SCI_VERSION_1_EGA)
+		return s->r_acc;
+
+	s->_voc->clearSynonyms();
+
+	list = s->_segMan->lookupList(GET_SEL32(segMan, object, elements));
+	node = s->_segMan->lookupNode(list->first);
+
+	while (node) {
+		reg_t objpos = node->value;
+		int seg;
+
+		script = GET_SEL32V(segMan, objpos, number);
+		seg = s->_segMan->getScriptSegment(script);
+
+		if (seg > 0)
+			numSynonyms = s->_segMan->getScript(seg)->getSynonymsNr();
+
+		if (numSynonyms) {
+			byte *synonyms = s->_segMan->getScript(seg)->getSynonyms();
+
+			if (synonyms) {
+				debugC(2, kDebugLevelParser, "Setting %d synonyms for script.%d\n",
+				          numSynonyms, script);
+
+				if (numSynonyms > 16384) {
+					error("Segtable corruption: script.%03d has %d synonyms",
+					         script, numSynonyms);
+					/* We used to reset the corrupted value here. I really don't think it's appropriate.
+					 * Lars */
+				} else
+					for (int i = 0; i < numSynonyms; i++) {
+						synonym_t tmp;
+						tmp.replaceant = (int16)READ_LE_UINT16(synonyms + i * 4);
+						tmp.replacement = (int16)READ_LE_UINT16(synonyms + i * 4 + 2);
+						s->_voc->addSynonym(tmp);
+					}
+			} else
+				warning("Synonyms of script.%03d were requested, but script is not available", script);
+
+		}
+
+		node = s->_segMan->lookupNode(node->succ);
+	}
+
+	debugC(2, kDebugLevelParser, "A total of %d synonyms are active now.\n", numSynonyms);
+
+	return s->r_acc;
+}
+
 } // End of namespace Sci

Modified: scummvm/trunk/engines/sci/engine/kscripts.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kscripts.cpp	2010-01-23 19:10:56 UTC (rev 47483)
+++ scummvm/trunk/engines/sci/engine/kscripts.cpp	2010-01-23 20:27:14 UTC (rev 47484)
@@ -242,57 +242,4 @@
 	return make_reg(0, s->_segMan->isHeapObject(obj) && lookup_selector(s->_segMan, obj, selector, NULL, NULL) != kSelectorNone);
 }
 
-reg_t kSetSynonyms(EngineState *s, int argc, reg_t *argv) {
-	SegManager *segMan = s->_segMan;
-	reg_t object = argv[0];
-	List *list;
-	Node *node;
-	int script;
-	int numSynonyms = 0;
-
-	list = s->_segMan->lookupList(GET_SEL32(segMan, object, elements));
-	node = s->_segMan->lookupNode(list->first);
-
-	while (node) {
-		reg_t objpos = node->value;
-		int seg;
-
-		script = GET_SEL32V(segMan, objpos, number);
-		seg = s->_segMan->getScriptSegment(script);
-
-		if (seg > 0)
-			numSynonyms = s->_segMan->getScript(seg)->getSynonymsNr();
-
-		if (numSynonyms) {
-			byte *synonyms = s->_segMan->getScript(seg)->getSynonyms();
-
-			if (synonyms) {
-				debugC(2, kDebugLevelParser, "Setting %d synonyms for script.%d\n",
-				          numSynonyms, script);
-
-				if (numSynonyms > 16384) {
-					error("Segtable corruption: script.%03d has %d synonyms",
-					         script, numSynonyms);
-					/* We used to reset the corrupted value here. I really don't think it's appropriate.
-					 * Lars */
-				} else
-					for (int i = 0; i < numSynonyms; i++) {
-						synonym_t tmp;
-						tmp.replaceant = (int16)READ_LE_UINT16(synonyms + i * 4);
-						tmp.replacement = (int16)READ_LE_UINT16(synonyms + i * 4 + 2);
-						s->_voc->addSynonym(tmp);
-					}
-			} else
-				warning("Synonyms of script.%03d were requested, but script is not available", script);
-
-		}
-
-		node = s->_segMan->lookupNode(node->succ);
-	}
-
-	debugC(2, kDebugLevelParser, "A total of %d synonyms are active now.\n", numSynonyms);
-
-	return s->r_acc;
-}
-
 } // End of namespace Sci


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