aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/engine/kmath.cpp
diff options
context:
space:
mode:
authorMartin Kiewitz2010-07-28 21:47:15 +0000
committerMartin Kiewitz2010-07-28 21:47:15 +0000
commitabf53f839a090fe6535390a27142964cd44f2566 (patch)
treebcd3a70f205f7e277714fc82a9f8eea6bea1756f /engines/sci/engine/kmath.cpp
parent07b67fe44b20f8f1c9dcdf659f5e2666d69834f4 (diff)
downloadscummvm-rg350-abf53f839a090fe6535390a27142964cd44f2566.tar.gz
scummvm-rg350-abf53f839a090fe6535390a27142964cd44f2566.tar.bz2
scummvm-rg350-abf53f839a090fe6535390a27142964cd44f2566.zip
SCI: implement additional variants of kRandom
fixes pq1vga poker game (bug #3036125) svn-id: r51435
Diffstat (limited to 'engines/sci/engine/kmath.cpp')
-rw-r--r--engines/sci/engine/kmath.cpp25
1 files changed, 21 insertions, 4 deletions
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) {