[Scummvm-git-logs] scummvm master -> 6f8bd666b6285703269f9cc328b16598f0ff7835
bluegr
noreply at scummvm.org
Wed Jun 15 23:57:42 UTC 2022
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
6f8bd666b6 SCUMM: Restore the first frame of Indy's reaction drinking from the Grail
Commit: 6f8bd666b6285703269f9cc328b16598f0ff7835
https://github.com/scummvm/scummvm/commit/6f8bd666b6285703269f9cc328b16598f0ff7835
Author: Donovan Watteau (contrib at dwatteau.fr)
Date: 2022-06-16T02:57:39+03:00
Commit Message:
SCUMM: Restore the first frame of Indy's reaction drinking from the Grail
The original game always hides this first frame behind the second one,
probably so that this cutscene never starts with some previous frame
leftovers (since this animation will repeat as long as you pick up the
wrong Grail).
This is a bit unfortunate, especially since it also makes Indy appear
older if he drinks from the real Grail. So, restore this first frame
and just reset any previously drawn object when starting this animation.
Changed paths:
engines/scumm/detection_tables.h
engines/scumm/script_v5.cpp
diff --git a/engines/scumm/detection_tables.h b/engines/scumm/detection_tables.h
index bc6a7a57766..d3235aa2c35 100644
--- a/engines/scumm/detection_tables.h
+++ b/engines/scumm/detection_tables.h
@@ -169,9 +169,9 @@ static const GameSettings gameVariantsTable[] = {
{"indyloom", "FM-TOWNS", 0, GID_ZAK, 3, 0, MDT_TOWNS, GF_OLD256 | GF_AUDIOTRACKS, Common::kPlatformFMTowns, GUIO4(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_MIDITOWNS, GUIO_TRIM_FMTOWNS_TO_200_PIXELS)},
{"indyzak", "FM-TOWNS", 0, GID_ZAK, 3, 0, MDT_TOWNS, GF_OLD256 | GF_AUDIOTRACKS, Common::kPlatformFMTowns, GUIO4(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_MIDITOWNS, GUIO_TRIM_FMTOWNS_TO_200_PIXELS)},
- {"indy3", "EGA", "ega", GID_INDY3, 3, 0, MDT_PCSPK | MDT_PCJR | MDT_CMS | MDT_ADLIB, 0, UNK, GUIO2(GUIO_NOSPEECH, GUIO_NOMIDI)},
+ {"indy3", "EGA", "ega", GID_INDY3, 3, 0, MDT_PCSPK | MDT_PCJR | MDT_CMS | MDT_ADLIB, 0, UNK, GUIO3(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_ENHANCEMENTS)},
{"indy3", "Mac", "ega", GID_INDY3, 3, 0, MDT_PCSPK | MDT_PCJR, 0, Common::kPlatformMacintosh, GUIO3(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_ENHANCEMENTS)},
- {"indy3", "No AdLib", "ega", GID_INDY3, 3, 0, MDT_PCSPK | MDT_PCJR, 0, UNK, GUIO2(GUIO_NOSPEECH, GUIO_NOMIDI)},
+ {"indy3", "No AdLib", "ega", GID_INDY3, 3, 0, MDT_PCSPK | MDT_PCJR, 0, UNK, GUIO3(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_ENHANCEMENTS)},
{"indy3", "VGA", "vga", GID_INDY3, 3, 0, MDT_PCSPK | MDT_PCJR | MDT_CMS | MDT_ADLIB, GF_OLD256 | GF_FEW_LOCALS, Common::kPlatformDOS, GUIO3(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_ENHANCEMENTS)},
{"indy3", "Steam", "steam", GID_INDY3, 3, 0, MDT_PCSPK | MDT_PCJR | MDT_CMS | MDT_ADLIB, GF_OLD256 | GF_FEW_LOCALS, UNK, GUIO3(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_ENHANCEMENTS)},
{"indy3", "FM-TOWNS", 0, GID_INDY3, 3, 0, MDT_TOWNS, GF_OLD256 | GF_FEW_LOCALS | GF_AUDIOTRACKS, Common::kPlatformFMTowns, GUIO5(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_MIDITOWNS, GUIO_TRIM_FMTOWNS_TO_200_PIXELS, GUIO_ENHANCEMENTS)},
diff --git a/engines/scumm/script_v5.cpp b/engines/scumm/script_v5.cpp
index 35599d27131..b4acdd178d2 100644
--- a/engines/scumm/script_v5.cpp
+++ b/engines/scumm/script_v5.cpp
@@ -977,6 +977,21 @@ void ScummEngine_v5::o5_drawObject() {
return;
}
+ // WORKAROUND: In Indy3, the first close-up frame of Indy's reaction after drinking
+ // from the Grail is never shown; it always starts at the second step, with Indy
+ // already appearing a bit older. This is a bit unfortunate, especially if you
+ // picked up the real Grail. This was probably done as a way to unconditionally
+ // reset the animation if it's already been played, but we can just do an
+ // unconditional reset of all previous frames instead, restoring the first one.
+ if (_game.id == GID_INDY3 && _roomResource == 87 && vm.slot[_currentScript].number == 200 && obj == 899 && state == 1 && VAR(VAR_TIMER_NEXT) != 12 && _enableEnhancements) {
+ i = _numLocalObjects - 1;
+ do {
+ if (_objs[i].obj_nr)
+ putState(_objs[i].obj_nr, 0);
+ } while (--i);
+ return;
+ }
+
idx = getObjectIndex(obj);
if (idx == -1)
return;
More information about the Scummvm-git-logs
mailing list