From 29adf97a141324f9a98cc0e8d128a2a711ea46e3 Mon Sep 17 00:00:00 2001 From: Filippos Karapetis Date: Fri, 20 Aug 2010 21:02:24 +0000 Subject: SCI: Reverted kRandom to use unsigned integers again (used e.g. in LSL5) and added a temporary hack for the special case in Hoyle 4 (0x0, 0xFFFF), till we find out how this is handled correctly svn-id: r52240 --- engines/sci/engine/kmath.cpp | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) (limited to 'engines/sci') diff --git a/engines/sci/engine/kmath.cpp b/engines/sci/engine/kmath.cpp index 46b3e531f7..6ccc161e19 100644 --- a/engines/sci/engine/kmath.cpp +++ b/engines/sci/engine/kmath.cpp @@ -35,8 +35,29 @@ reg_t kRandom(EngineState *s, int argc, reg_t *argv) { return NULL_REG; case 2: { // get random number - int fromNumber = argv[0].toSint16(); - int toNumber = argv[1].toSint16(); + // These are unsigned (e.g. in LSL5, this is used for the 5-digit + // door access code with Patty at k rap) + int fromNumber = argv[0].toUint16(); + int toNumber = argv[1].toUint16(); + + // HACK: Hoyle 4 calls this with (0x0, 0xFFFF) in some dialogs for x, + // then it calls it with (0x0, 0x40) and puts x plus the result in y + // to displace view 924 in kDrawCel right afterwards and create a + // semi-random background in those dialogs. With the current code, + // this case isn't handled properly, and the dialog is drawn off-screen. + // -1 seems to be incorrect here, so we just return a 0 for now, till + // we figure out how to handle this. + if (fromNumber == 0 && toNumber == 0xFFFF) { + if (g_sci->getGameId() == GID_HOYLE4) { + warning("HACK: Special case for Hoyle 4 dialogs in kRandom"); + return NULL_REG; + } else { + // Just throw a warning in other games for now, but don't modify + // the result... + warning("kRandom(0x0, 0xFFFF called - special case?"); + } + + } // TODO/CHECKME: It is propbably not required to check whether // toNumber is greater than fromNumber, at least not when one -- cgit v1.2.3