This disables the feature, but allows users to enable it, if they want,
via a new checkbox. An appropriate warning has been added to the
checkbox, notifying the user that saves created through the GMM may be
corrupted and unusable. This addresses bug 15358
The original interpreter expects the same arguments for
kGraph 15 as for kGraph 7. The scripts never pass the last
arguments, though. So the engine would use undefined
values here (which apparently had no visual consequence).
I was just exploring this when trying to debug a glitch (which was
not connected to this). The changes do literally nothing to the
output. So the only purpose is to have a better documentation
of what the scripts actually do here.
- The main purpose was to move more upscaling logic out of the engine
- This actually contains various precision fixes to the hires code. There
were some comments about being unsure what to. I think I managed to
fix all of these, although it shouldn't make a visible difference, since the
workarounds worked as intended.
- It does actually fix a very minor glitch: The portraits were vertically off
by one pixel. And the opening AVI video is probably also vertically fixed
by one pixel (although the video display in the original is not done very
well, anyway).
This was done only for the ScummVM save/load dialogs, but there are situations
where the global pause counter runs out of sync regardless of whether these
dialogs or the original ones get used (e. g. bug no. 15336). The counter should
always be 0 after loading a savegame.
Sierra's interpreter populated the class table and initialized objects
in one pass, until SCI3. We have always been doing two passes: one to
initialize the class table and then another to initialize objects.
This should not make a difference, except that some scripts contain two
classes with the same supposedly unique class number. When this occurs,
the first class is always overwritten before it can be used, causing any
objects in between to be associated with the wrong class.
In 2010, this condition caused the ICEMAN demo to crash. It was worked
around by adding a third pass. This prevented that particular script
from crashing, but the real problem remained.
Now we update the class table and initialize objects in one pass.
For SCI3, we continue to use two passes like the original.
- Fixes KQ5 FM-Towns save and restore dialog buttons
- Fixes ICEMAN demo properly, removes workaround (bug #4963)
See: 3485d433c5
This enables the rgb rendering for all video modes and cleans up the
engine a lot, since the engine can now be more or less agnostic of the
screen pixel format.
Game object save methods were being patched out by default, while
their restore methods weren't. This suppressed some game-specific
behavior and created a mismatch that could corrupt saves.
- PEPPER saves at start of game no longer crash
- KQ5 FM Towns now works with ScummVM restore UI
- LSL6 auto save timer no longer launches ScummVM save UI
- QFG3 no longer requires special handling
Fixes bug #15212
Congratulations to @eriktorbjorn for discovering what has to be one of
the funniest Sierra bugs yet: a truly unsolvable puzzle.
Thanks to @m-kiewitz for the initial patch and @eriktorbjorn for the
impressively thorough research.
Fixes bug #15225
Replaces uninit-variable workarounds with script patches.
The workarounds hard-coded a utility function in Hearts to always
return the first player's hand. The workarounds also used bytecode
signatures that only matched some game versions.
Now the correct Hearts hand is returned and all versions are fixed.
- Fixes LSL6 CD (SCI16 version) Electroshock freeze, bug #15165
- Improves LB2 CD "Ra Ra Amon Ra" chant scene
Neither of these scenes are perfectly reproduced in ScummVM yet, but
they are better than they were. They accidentally rely on precise
undocumented/undiscovered audio driver behavior when digital sound
and speech are played at the same time and interrupt each other.
These scripts do conflicting things that had no effect in the original
floppy versions, but caused conflicts once CD speech was added later.
They still appeared to work, but only by accident, and so no one would
have noticed the problems at the time. When LSL6 was ported to SCI32,
the Electroshock script was discovered and rewritten to be normal.
This commit implements two missing pieces of interpreter behavior:
1. processUpdateCues stops the sound if it's a digital sample and
the audio driver's AudioLoc function returns -1. To replicate
this, we query our two separate components that play digital
samples and speech.
2. kDoAudio(AudioLoc) returns the audio driver's AudioLoc result.
SSCI's audio driver could have been playing a digital sample or
speech, but we do these in two separate components, and we were
only querying one of them. Now we query both and produce the
same results as the original.
Thanks to @tsoliman for discovering this obscure discrepancy.
Confirmed in disassembly. Also confirmed that MOTHERGOOSEHIRES uses
modified attenuation, and discovered that floppy QFG4 and PQ4 do not,
and that one version of SQ6 does and one does not.