This reverts commit 0bc61d3c21.
The volume mapping does not match what the original is doing. In the
case of this bug, a volume of 127 for the fountain sound would be
mapped to 2/255 when standing right in front of it, which is too quiet.
When riding with Charon in one direction, the script stops the
background sounds. When you ride in the other direction, it doesn't.
Since the cutscenes play music, you may now have two pieces of music
playing over each other. Work around this by pausing the mixer during
the cuscenes (there are two different ones) for going back.
Some ZGI scripts use action:add(14999, [...]) to add to the score.
Without this, it would always add 0 instead. This affected the puzzles
where you use the snapdragon and where you open the first time tunnel.
Since the script that triggers a location change can also trigger other
scripts, wait one cycle before actually changing the location to give
them time to run. This fixes a couple more missing points. I've verified
that this does not cause any obvious regressions in ZGI. I'll try
Nemesis when all is done, to see if any of the fixes needs to be for ZGI
and ZGI only.
It was pointed out on the GOG forum that you can't get a perfect score
in Zork: Grand Inquisitor. Once case I've found that looks like it
should award points, but doesn't, is the Spell Checker (tp4g.scr). It
turns out that the script doesn't award the points until after it has
changed your location, and ScummVM interprets the location change as a
signal that the script has ended. With this change, the script continues
until it finishes on its own.
As far as I can see, this is how ScummVM has always done it. I don't
think the original Z-Engine project did, though.
If this was the only such case, I would feel much more comfortable about
making this change. As it is, I'm a bit nervous about it. One other
positive difference is that with the change, you get to keep the sword
and rope after entering the monastery (um1e.scr). Without it, they are
lost but apparently no longer needed?
This reverts bb2f218fa1 which was in
response to a Coverity report. Maybe it can be written in a better way -
I haven't wrapped my head around the trigonometry of it - but clicking
on a number on the safe dial is supposed to rotate the dial until that
number is at the red arrow head.
This way, it works. You can test it with "location a c 4 g 0".
It was possible to render the game unplayable simply by looking at
Jack's cigar box while waiting for him to return to examine the
lamp. Note that this bug is only present in the DVD version. For
whatever reason, it adds a dummy location for playing the cutscene.
Applying the bugfix in the CD version actually breaks the game.
I should have done this before it was merged, but I completely
forgot that dafioram had verified that the bug *does* in fact
happen in the original game as well.
Explicitly check if the time tunnel is open (and therefore shown in
close-up) before executing the scripts that draw the lever that is
shown in the normal view. This apparently doesn't happen in the
original engine, which suggests there may be a ScummVM bug. But it
still doesn't seem like the *wrong* thing to do here.
This fixes the delay outside the Frobozz Electric building.
In all other places, delay_render is called with a value
ranging from 1 to 10, so the 100 here looks to be a script
bug, and causes an unnecessary long pause in that scene.
Thus, we're capping the frame delay value to 10.
Fixes an edge case where the player goes to the dark room with the grue
without holding a torch, and then quickly runs away before the grue's
sound effect finishes. Many thanks to eriktorbjorn for the original
workaround
Before this change, text was drawn in black boxes in Zork Nemesis,
so while this does make it look better (and more like the original)
this may actually make the text slightly harder to read. The
original dialogs allowed only upper-case letters, but I think that
it's better to leave that to the player.
This is a bug in the original game script of the Zork Nemesis fist
puzzle, which we now patch so that the sound checks are correct for the
left fist animation
As suggested by Marisa-Chan. I had based my earlier implementation
on parseCritera(), and was unaware of this alternative. The good
thing is that the diff from the old code is now much smaller, which
should reduce the risk of regressions. (There is a lot I haven't
tested here...)
The volume can be either a constant or a state value. The latter is
used by ZGI to simulate a sound being heard at different distances,
e.g. the beehive in the Dungeon Master's hideout.