In the end, once fully understood, the CGA rendering is very similar for all versions. So I did manage to clean out some code. Hercules mode for MI1EGA is broken here, I will have another commit for that, once I understand how it works.
This does not improve anything about these modes for v2 and v3, except:
- brighter CGA colors
- v2 will also get the more accurate Hercules mouse cursor
I will do improve v2/v3 as separate tasks. v3 seems to be mostly fine, anyway, except for the actors (we dither them just like the backgrounds, but that looks different in DOSBox).
In the 256-color versions of Indy3, there are some weird horizontal
cyan/pink lines which appear out of place in the Berlin night scene.
The official FM-TOWNS release fixed that by reusing some other colors
from the local palette, so we can apply a similar change for the DOS
and Steam versions, as long as we keep the original EGA colors for the
text and inventory.
(We still do a quick check for the original `smapLen`, just in case a
fan translation redid the background.)
Based on a somewhat blurry YouTube video, it looks like this is what the
original did. Though it also looks like it showed a wider image than the
320 pixels ScummVM shows. Possibly 352 pixels, based on the assumption
that it was 44 8-pixel blocks?
We can't pretend that the Mac text box is on the main virtual screen,
because then removing it will remove all other text on the main virtual
screen, e.g. the copy protection instructions.
Unlike the PC version, the practice mode box appears to be hard-coded in
the Mac version. The script that draws the box in the PC version just
sets variables in the Mac version. This implementation is based on
screenshots.
To keep things a bit saner, I've split out the Mac-specific drawing to
its own file.
I misunderstood the purpose of _textSurface. Now text is drawn to the
Mac screen, and a text mask is drawn to the _textSurface. I hope that's
better.
Still no luck with the non-disappearing text at the start of the game
though.
Instead of trying to keep track of the real Mac screen coordinates in
the _charset data type, use the original 320x200 coordinates and only
scale up at the time of rendering.
Either way, the output is not pixel perfect, and this is much less error
prone.
Now if only text removal worked correctly...
The main purpose of this set of changes is to refactor the code to make
it easier to pass the name of the Macintosh resource file to other parts
of the engine (it used to be hard-coded in the music players), and to
scale-up the graphics by 2.
The actual font rendering is almost completely broken.