Расскажу как я сделал цвет, вдруг кому интересно.
Рисование одного тайла в этой игре заканчивается тем, что у нас есть буфер тайла в виде восьми байт пикселов, плюс байт атрибутов -- это в оригинале.
Здесь же вместо байта атрибутов у меня собирается байт "стратегии" вывода тайла, всего стратегий шесть:
Код:
Стратегии записи байта в два плана:
1. Байт в 1-й план, очистить 2-й план - blue / black
2. Очистить 1-й план, байт во 2-й план - yellow / black
3. Байт в оба плана - red / black
4. $FF в 1-й план, байт во 2-й план - red / blue
5. Байт в 1-й план, $FF во 2-й план - red / yellow
6. Байт в 1-й план, инв.байт во 2-й план - blue / yellow
Можно заметить, что я не добавлял сюда "инверсные" стратегии, потому что того же эффекта можно добиться предварительно инвертировав тайл.
Дальше, для четырёх цветов рассмотрим какие у нас получаются комбинации (INK/PAPER) и расставим стратегии, учитывая нашу палитру:
Код:
| | black | blue | yellow | red |
| -------- | ----- | ---- | ------ | --- |
| black | -- | 1 | 2 | 3 |
| blue | 1 | -- | 6 | 4 |
| yellow | 2 | 6 | -- | 5 |
| red | 3 | 4 | 5 | -- |
Дальше остаётся подготовить исходные тайлы, записав в байт атрибутов байт стратегии.
В игре при рисовании тайла переход на код нужной стратегии выполняется через switch -- по таблице адресов.