From 04ed4d3a8df92e6ee7b7d55051117add2f16903d Mon Sep 17 00:00:00 2001 From: Kirben Date: Tue, 22 Jul 2014 19:47:05 +1000 Subject: [PATCH] SCUMM: Add workaround for script bugs that caused problems in Jumping Bean mini games of Pajama Sam: Games to Play on Any Day. --- engines/scumm/detection_tables.h | 2 +- engines/scumm/he/sprite_he.cpp | 7 +++++++ engines/scumm/scumm.h | 1 + 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/engines/scumm/detection_tables.h b/engines/scumm/detection_tables.h index 1dccbd32a31..ae334c201cf 100644 --- a/engines/scumm/detection_tables.h +++ b/engines/scumm/detection_tables.h @@ -389,7 +389,7 @@ static const GameSettings gameVariantsTable[] = { {"freddicove", "HE 100", 0, GID_HEGAME, 6, 100, MDT_NONE, GF_USE_KEY | GF_HE_LOCALIZED | GF_16BIT_COLOR, UNK, GUIO3(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT)}, // Restructured the Scumm engine - {"pjgames", 0, 0, GID_HEGAME, 6, 100, MDT_NONE, GF_USE_KEY | GF_HE_LOCALIZED | GF_16BIT_COLOR, UNK, GUIO3(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT)}, + {"pjgames", 0, 0, GID_PJGAMES, 6, 100, MDT_NONE, GF_USE_KEY | GF_HE_LOCALIZED | GF_16BIT_COLOR, UNK, GUIO3(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT)}, // Added the use of bink videos {"Soccer2004", 0, 0, GID_SOCCER2004, 6, 100, MDT_NONE, GF_USE_KEY | GF_16BIT_COLOR, UNK, GUIO3(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT)}, diff --git a/engines/scumm/he/sprite_he.cpp b/engines/scumm/he/sprite_he.cpp index f902b679979..245a9865310 100644 --- a/engines/scumm/he/sprite_he.cpp +++ b/engines/scumm/he/sprite_he.cpp @@ -264,6 +264,13 @@ int Sprite::getSpriteFlagRemapPalette(int spriteId) { int Sprite::getSpriteFlagAutoAnim(int spriteId) { assertRange(1, spriteId, _varNumSprites, "sprite"); + // WORKAROUND: Two scripts (room 2 script 2070/2071) compare against + // a return value of one, but the original game returned the flag value + // (0x200000) for true. These scripts bugs caused problems (infinite loop + // and beans not appearing) in the Jumping Beans mini games under ScummVM. + if (_vm->_game.id == GID_PJGAMES) + return 0; + return ((_spriteTable[spriteId].flags & kSFAutoAnim) != 0) ? 1 : 0; } diff --git a/engines/scumm/scumm.h b/engines/scumm/scumm.h index be5a83d8c9d..36d05077c6a 100644 --- a/engines/scumm/scumm.h +++ b/engines/scumm/scumm.h @@ -256,6 +256,7 @@ enum ScummGameId { GID_BASEBALL2003, GID_BASKETBALL, GID_MOONBASE, + GID_PJGAMES, GID_HECUP // CUP demos };