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

m_kiewitz at users.sourceforge.net m_kiewitz at users.sourceforge.net
Wed Jul 28 23:47:16 CEST 2010


Revision: 51435
          http://scummvm.svn.sourceforge.net/scummvm/?rev=51435&view=rev
Author:   m_kiewitz
Date:     2010-07-28 21:47:15 +0000 (Wed, 28 Jul 2010)

Log Message:
-----------
SCI: implement additional variants of kRandom

fixes pq1vga poker game (bug #3036125)

Modified Paths:
--------------
    scummvm/trunk/engines/sci/engine/kernel_tables.h
    scummvm/trunk/engines/sci/engine/kmath.cpp

Modified: scummvm/trunk/engines/sci/engine/kernel_tables.h
===================================================================
--- scummvm/trunk/engines/sci/engine/kernel_tables.h	2010-07-28 21:40:47 UTC (rev 51434)
+++ scummvm/trunk/engines/sci/engine/kernel_tables.h	2010-07-28 21:47:15 UTC (rev 51435)
@@ -407,6 +407,8 @@
     { MAP_CALL(Portrait),          SIG_EVERYWHERE,           "i(.*)",                 NULL,            NULL }, // subop
     { MAP_CALL(PrevNode),          SIG_EVERYWHERE,           "n",                     NULL,            NULL },
     { MAP_CALL(PriCoord),          SIG_EVERYWHERE,           "i",                     NULL,            NULL },
+    { MAP_CALL(Random),            SIG_SCI11, SIGFOR_ALL,    "i(i)(i)",               NULL,            NULL },
+    // ^^ they actually changed it in SCI1, but it seems its never called that way ffs. kRandom
     { MAP_CALL(Random),            SIG_EVERYWHERE,           "ii",                    NULL,            NULL },
     { MAP_CALL(ReadNumber),        SIG_EVERYWHERE,           "r",                     NULL,            NULL },
     { MAP_CALL(ResCheck),          SIG_EVERYWHERE,           "ii(iiii)",              NULL,            NULL },

Modified: scummvm/trunk/engines/sci/engine/kmath.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kmath.cpp	2010-07-28 21:40:47 UTC (rev 51434)
+++ scummvm/trunk/engines/sci/engine/kmath.cpp	2010-07-28 21:47:15 UTC (rev 51435)
@@ -29,10 +29,27 @@
 namespace Sci {
 
 reg_t kRandom(EngineState *s, int argc, reg_t *argv) {
-	int fromNumber = argv[0].toUint16();
-	int toNumber = argv[1].toUint16();
-	double randomNumber = fromNumber + ((toNumber + 1.0 - fromNumber) * (rand() / (RAND_MAX + 1.0)));
-	return make_reg(0, (int)randomNumber);
+	// SCI1 actually supported those argcs as well
+	// SCI0 only supported argc = 1 to reset the seed (no input was used, it was reset to 0)
+	switch (argc) {
+	case 1: // set seed to argv[0]
+		return NULL_REG;
+
+	case 2: { // get random number
+		int fromNumber = argv[0].toUint16();
+		int toNumber = argv[1].toUint16();
+		double randomNumber = fromNumber + ((toNumber + 1.0 - fromNumber) * (rand() / (RAND_MAX + 1.0)));
+		return make_reg(0, (int)randomNumber);
+	}
+
+	case 3: // get seed
+		// Actually we would have to return the previous seed
+		error("kRandom: scripts asked for previous seed");
+		break;
+
+	default:
+		error("kRandom: unsupported argc");
+	}
 }
 
 reg_t kAbs(EngineState *s, int argc, reg_t *argv) {


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