From abf53f839a090fe6535390a27142964cd44f2566 Mon Sep 17 00:00:00 2001 From: Martin Kiewitz Date: Wed, 28 Jul 2010 21:47:15 +0000 Subject: SCI: implement additional variants of kRandom fixes pq1vga poker game (bug #3036125) svn-id: r51435 --- engines/sci/engine/kmath.cpp | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) (limited to 'engines/sci/engine/kmath.cpp') diff --git a/engines/sci/engine/kmath.cpp b/engines/sci/engine/kmath.cpp index eab964d624..124a64d913 100644 --- a/engines/sci/engine/kmath.cpp +++ b/engines/sci/engine/kmath.cpp @@ -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) { -- cgit v1.2.3