Попробую. Правда, я не лучший объяснятель, но всё-же. Если что, спрашивайте, да и ivagor тут рядом.
Дальше - не реклама
Видеоадаптер Вектора-06ц/06ц-02 (существенные для эффекта вещи):
- 256-цветная палитра из 332 цветового пространства
- аппаратный вертикальный скроллинг на произвольное количество строк
- 4 видеоплоскости по 8К каждая
- 2 видеорежима, высокого и низкого разрешения.
В режиме низкого разрешения, цвет пиксела на экране формируется как значения битов в плоскостях с координатами пиксела. Единичные биты в соответствующих плоскостях дают весовые коэффициенты 8,4,2,1, что приводит к 16 возможным комбинациям. Очень похоже на EGA.
При использовании всех 4х плоскостей это позволяет выводить до 2^4 = 16 из 256 различных цветов одновременно, простым программированием палитры (2х-байтовый регистр-секвенсор: номер цвета, значение и так 16 раз).
Количество цветов на экране можно уменьшать тем-же программированием палитры. Скажем, если в палитру запихнуть следующие 16 цветов, то получится 8-цветный режим:
100 101 102 103 104 105 106 107 100 100 100 100 100 100 100 100
При этом видео плоскость с весовым коэффициентом 8 может быть использована как обычный RAM (маскирование цветом).
Идея состоит в следующем: 3 плоскости отводятся под изображение.
Экран делится пополам по горизонтали. Изображение будет в пол-экрана высотой и на всю ширину.
Одна плоскость отводится под "полумаску": в ней рисуется прямоугольник на всю ширину и половину высоты экрана.
Палитра перепрограммируется каждый кадр таким образом, чтобы получилось 8 цветов, но половина экрана (верх или низ) всегда была замаскирована цветом. Скажем, если под маску выбрана плоскость с цветовым весом 8, то вторая палитра к 3-х цветному примеру выше, будет выглядеть как
100 100 100 100 100 100 100 100 100 101 102 103 104 105 106 107
Отрисовка всегда идёт в замаскированную цветом половину экрана. В это время на экране "размаскированное" изображение. По окончанию отрисовки кадра, выполняется перепрограммирование палитры и аппаратный скроллинг экрана на пол высоты. Profit. Полуэкранный 8-цветный double video frame buffer.
Уфф. Надеюсь, не затуманил ещё больше.
В принципе, код я не потёр ещё, и могу завести в репозитории branch и кинуть туда для изучения, если хотите. Все основные изменения - в файле SLR.mac (SLR - это Sprite Level Renderer, a не Single Lens Reflex). Простое сравнение в каком-нить WinMerge всё покажет лучше 1000 слов. Заливать?
---------- Post added at 20:20 ---------- Previous post was at 20:12 ----------
ivagor, да, согласен, но там ведь нет скроллинга, как такового. Только чтобы спрайты не мерцали, наверное.
Но всё-таки стратегия будет сиять в этом режиме. Там скорость скроллинга не так важна, как отсутствие мерцания. Самое то вроде.
Ну будет fps в районе 6-8, ведь не смертельно. Зато - субтайловые оверлеи на все 8 цветов и абсолютно без мырганья... эх, красота ведь!






. Надеюсь, не затуманил ещё больше.
Ответить с цитированием