This adds optional EPX scaling and 640x480 resolution for
LucasArts Macintosh games other than Indy3 and Loom.
This includes:
* Monkey Island 1
* Monkey Island 2
* Indy4
* Day of the Tentacle
* Sam&Max
* Full Throttle
* The Dig
In doing this, I reverted the ugly code which previously offset
the game screen 20 pixels below (to create an internal 320x240
buffer, instead of 320x200). Instead of just offsetting mouse
coordinates and the final screen texture, I used to offset the
in-engine graphics elements. Ew.
This ensures flawless savegame compatibility between old and
new, without touching anything.
There was a mismatch of sound pause and
unpause counts. In particular, there was more
pausing than unpausing. So the mixer could
get stuck permanently.
I noticed this when loading from the GMM
and getting the sound driver incompatibility
warning dialog.
Checking all the necessary disasms, the camera._last update
(and the sound as well...) should be executed before checkExecVerbs().
This successfully fixes#15398:
"SCUMM: DIG: Fast room skipping in first two screens produces glitches"
This has been bugging me for a while...
Note that ifNotStateCommon and ifStateCommon have
been semantically inverted until now. I also fixed their
naming now to reflect what they are actually doing.
...so users can't overwrite them.
This commit includes a small self-correction routine,
which moves all savegames down a slot, if the savestate
at slot 0 is non-empty and is not an autosave.
Now we instate a convention: on the original menus we
don't show the autosaves, ever. If an user wants to
use an autosave they will have to use the GMM.
Why? Because games with script based menus (v0-3, v8)
already exhibit this behavior, and I want consistency across
all SCUMM versions.
Naturally this commit excludes all HE games, since they
can't use anything other than the GMM, to save and load.
This was most definitely done on purpose to limit the range
of "damage" :-) an user could do when selecting non-trivial
render modes for non-trivial versions of the games.
But there is an actual use for the EGA renderer setting on MI1 Amiga,
as there were two versions of the executable back in the day:
- One which had the EGA palette for actors (believe me, it exists,
I have seen it with my own eyes on an actual Amiga 500 :-) )
- One which had a more pale palette, which is the most known
version.
This fixes and closes#7455:
"MI1 Amiga: choose actor palette"
No more cases of SCUMM quit dialogs followed by frontend
quit dialogs, and no more cases of versions not having an
override quitting without confirmation (ignoring the frontend
setting).
This fixes and closes#9591:
"SCUMM: ZAK (FM-Towns): Intro animation runs faster than intro music"
Also, make sure that the timer frequency is always used by calling
getTimerFrequency()...
This closes and fixes#11971:
"SCUMM: MANIAC/ZAK C64: GUI & dialog text are incorrectly
positioned on screen, and cursor is improperly layered"
The ticket also mentions improperly layered cursor:
"the pointer cursors pass *behind* the various character sprites
on screen", but there's really nothing we can do about it,
our cursor handling is way too different to function like the original
(and anyway, it looks like a severe C64 hardware limitation quirk...)
This fixes and closes#15047:
"SCUMM: DIG: "Holding an object"-state gets cancelled by cutscene override"
Once again this is one of those cases in which v7-v8 shuffled
elements around the main loop.
Fixing this also forced me to remove an hack for v7 which attempted
to fix timing for e.g. the screen shake + breakHere() combination.
This is also properly fixed now.
It makes sense to allow using the Amiga render option for Indy3 EGA, as it's
already quite popular to do so for Maniac Mansion and Zak in order to avoid
the so-called "sunburnt effect", and also for personal palette preferences.
Then, the question is also open for Loom EGA and Monkey1 EGA, maybe?
See similar commit 4586d2fc9d for V2 games.
(Walking animation when turning not correct)
Also match v1/2 walk code more to the orginal behavior
in general, to eliminate accuracy glitches.
Also, get rid of memory leaks in resetScumm().
English versions usually run in a 320 x 240 resolution in ScummVM.
The original interpreter uses 640 x 480. It has a unique pause/restart
banner that we cannot display in 320 x 240. So that is really the only
reason for adding this option.
MI1 Amiga does set up the shadow palette at the beginning
and also updates it from o5_roomOps()[SO_ROOM_PALETTE].
But it never actually applies any use of the shadow palette when
doing screen palette adjustments. I've also confirmed that the
shadow is ignored in DOS CGA and Hercules mode.
(fix bug #14618: Inaccurate fades in INDY4, "Test 1")
This part of the bug ticket is not about fades. The reason
for the glitch is that the driver has no unused channels left
and the newer allocation mechanism is not able to free up
some of the used channels here.