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

thebluegr at users.sourceforge.net thebluegr at users.sourceforge.net
Fri Nov 19 11:27:23 CET 2010


Revision: 54364
          http://scummvm.svn.sourceforge.net/scummvm/?rev=54364&view=rev
Author:   thebluegr
Date:     2010-11-19 10:27:22 +0000 (Fri, 19 Nov 2010)

Log Message:
-----------
SCI: Added support for script -> string copying (used by late SCI2.1 and SCI3 games)

Modified Paths:
--------------
    scummvm/trunk/engines/sci/engine/klists.cpp

Modified: scummvm/trunk/engines/sci/engine/klists.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/klists.cpp	2010-11-19 10:23:33 UTC (rev 54363)
+++ scummvm/trunk/engines/sci/engine/klists.cpp	2010-11-19 10:27:22 UTC (rev 54364)
@@ -719,11 +719,23 @@
 	}
 	case 7: // Cmp
 		// Not implemented in SSCI
+		warning("kArray(Cmp) called");
 		return s->r_acc;
 	case 8: { // Dup
-		if (s->_segMan->getSegmentObj(argv[1].segment)->getType() != SEG_TYPE_ARRAY) {
-			// Happens in the RAMA demo and LSL7
-			warning("kArray(Dup): Request to duplicate a segment which isn't an array, ignoring");
+		SegmentType sourceType = s->_segMan->getSegmentObj(argv[1].segment)->getType();
+		if (sourceType == SEG_TYPE_SCRIPT) {
+			// A technique used in later SCI2.1 and SCI3 games: the contents of a script
+			// are loaded in an array (well, actually a string).
+			Script *scr = s->_segMan->getScript(argv[1].segment);
+			reg_t stringHandle;
+
+			SciString *dupString = s->_segMan->allocateString(&stringHandle);
+			dupString->setSize(scr->getBufSize());
+			dupString->fromString(Common::String((const char *)scr->getBuf()));
+
+			return stringHandle;
+		} else if (sourceType != SEG_TYPE_ARRAY && sourceType != SEG_TYPE_SCRIPT) {
+			warning("kArray(Dup): Request to duplicate a segment which isn't an array or a script, ignoring");
 			return NULL_REG;
 		}
 


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