Sometimes, games accidentally use palette entries that are not
marked as used and expect them to be a particular colour, like the
Phantasmagoria title screen, or the white palette entry (always
255 in DOS/Win).
Several functions in Audio32 would call into the mixer to pause
or resume the audio handle, which would cause a deadlock if the
mixer's mixCallback timer fired while one of these functions was
running on the main thread.
To address this, calls to mixer to pause/unpause the digital audio
handle have been removed. Since this was just an optimisation to
prevent unnecessary calls to fill the audio buffer, the only
problem now is that a tiny amount of CPU is wasted on unnecessary
callbacks to read from the empty SCI mixer.
The subtitles in KQ7 were not finished and don't quite work right,
drawing off the screen and in weird positions. They could probably
be fixed with some aggressive script patching, but for now, they
are just disabled (as they are in the official release).
In SSCI, VMD is drawn by a standard CelObjMem wrapped by a
ScreenItem, giving the location of the bitmap memory to the
decoder. The decoder already supports this, but the API was
previously hidden behind the AdvancedVMDDecoder wrapper
(which is more convenient to use than the VMDDecoder class).
At least Phantasmagoria and PQ:SWAT require this.
This adds a ReadStream/WriteStream to support this. It replaces
the previous VirtualIndexFile which required reimplementation of
most read/write functions.
Since _decodedSamples[] is filled with either 2 or 4 samples, we
can't use 1 - (count - 1) to "ensure that acts as a FIFO". When
we have 4 samples, that index will become negative, putting
uninitialized data into the buffer.
We could still use a similar trick, but I think it's much clearer
to use an index variable like this. We need an addition variable
either way.
The sound is rather bad, but I assume that's something with our
CinePak video decoder so I'll leave it like this for now. The player
itself is based on the BBVS engine.
This avoids a conflict between the "all" directory and the "all"
archive, if the directory happens to be named in all lower case.
While it isn't on the CD, we shouldn't introduce case sensitivity
in the file names if we can avoid it.
At least in my copy, the voices directory is on the same level as
the other directories. (Though the whole thing is inside a
directory called "data", so maybe that's where that came from?)