ZX Review #11-12
26 ноября 1997

Этюды - Эффект "пламя".

(c) Иван Рощин, Москва, 1997

 Несколько графических эффектов

          1. "Пламя"

   Существует множество  вариан-
тов этого  эффекта  (см., напри-
мер, музыкальные demo  F.S.R.D.,
INSANE, S4B, NOUMENON, EYE  ACHE
2, RAGE и т.п.). Я  же  реализо-
вал до сих пор нигде  не  встре-
чавшийся:  на  экране  находится
некоторая картинка (скажем, зас-
тавка  программы), и  на  заднем
фоне (а  это  участки  картинки,
окрашенные  черным  цветом)  как
раз и виднеется "пламя". Как это
выглядит, вы можете увидеть, за-
пустив "ZX FORUM 4" (эффект  ис-
пользуется в главном меню  этого
электронного издания).
   Итак, текст программы (при ее
разработке я  использовал  фраг-
менты процедуры  "Пламя", взятой
из статьи С.Телицына в  ZX  РЕВЮ
5-6 1997):
140.
BUF1    EQU  #8000 ;Здесь запоминаются
                   ;атрибуты картинки.
BUF2    EQU  #8300 ;Массив, соотв.
                   ;выводимому изобра-
                   ;жению (длина #340).
BUF3    EQU  #8700 ;Палитра (младший
                   ;байт адреса = 0!)

        LD      HL,BUF3
        EXX

        XOR     A
        LD      (23560),A

        LD      HL,BUF3     ;формируем
        LD      DE,BUF3+1   ;палитру
        LD      (HL),0
        LD      BC,8
        LDIR
        LD      A,%1000
        LD      (BUF3+4),A
        LD      (HL),A
        LD      BC,8
        LDIR
        LD      (HL),%10000
        LD      BC,8
        LDIR
        LD      (HL),%11000
        LD      BC,#E7
        LDIR

        LD      HL,#9000    ;перебросили
        LD      DE,#4000    ;картинку
        LD      BC,#1B00    ;на экран
        LDIR

        LD      HL,#5800    ;сохранили
        LD      DE,BUF1     ;ее атрибуты
        LD      BC,#300
        LDIR

        LD      HL,BUF2     ;обнулили
        LD      (HL),0      ;рабочий
        LD      DE,BUF2+1   ;буфер
        LD      BC,#2FF
        LDIR

SSAVER  LD      HL,BUF2+#320 ;заполняем
        LD      (HL),-60     ;часть
        LD      DE,BUF2+#321 ;буфера
        LD      BC,#1F       ;числом -60
                    ;(от его значения
        LDIR        ;зависит вид эффекта)

        LD      HL,0 ;исходное положение
                     ;в ПЗУ

;Цикл обновления содержимого буфера BUF2:

LOOP_1  LD      DE,BUF2+#300
        LD      B,#20

LOOP_2  INC     HL
        LD      A,H
        AND     #1F
        LD      H,A
        LD      A,(HL)   ;сл.байт из ПЗУ
        AND     %00111111
        ADD     A,%11000
        JR      NC,LL
        LD      A,%11000
LL      LD      (DE),A
        INC     DE
        DJNZ    LOOP_2

        PUSH    HL

        LD      IX,BUF2
        LD      DE,#5800
        LD      HL,BUF1
        LD      BC,#2FF
LOOP_4  LD      A,(IX+32)
        ADD     A,(IX+33)
        ADD     A,(IX+34)
        ADD     A,(IX+65)
        SRL     A
        SRL     A
        JR      Z,LOOP_5
        DEC     A
LOOP_5  INC     IX
        INC     HL
        INC     DE
        LD      (IX),A

;Изменили значение байта в буфере,
;теперь изменяем соотв. атрибут на экране:

        PUSH    BC

        EXX
        LD      L,A    ;адрес в палитре
        LD      A,(HL) ;A = нужный цвет
        EXX
        LD      B,A

;Для текущего атрибута устанавливаем
;вместо черного цвета INK или PAPER
;тот цвет, который взяли из палитры;
;т.о. черный цвет является как бы
;"прозрачным":

        LD      A,(HL)    ;атр. картинки
        AND     %00111000 ;PAPER
        JP      NZ,TST_2  ;JP-для скорости
        LD      A,B       ;теперь вместо
        OR      (HL)      ;черного -
        LD      (DE),A    ;другой цвет

TST_2   LD      A,(HL)
        AND     %00000111 ;INK
        JR      NZ,TST_Q
        LD      A,B
        AND     %00111000
        RRCA
        RRCA
        RRCA
        OR      (HL)
        LD      (DE),A

TST_Q   POP     BC
        DEC     BC
        LD      A,B
        OR      C
        JP      NZ,LOOP_4
        POP     HL

;Проверка клавиатуры:

        LD      A,(23560)
        AND     A
        JP      Z,LOOP_1
        RET
2
   Что хотелось бы отметить: во-
первых, нетрудно, изменив  прог-
рамму, объявить "прозрачным"  не
черный, а любой другой цвет (или
даже  сразу  несколько  цветов).
Во-вторых, можно очень точно ре-
гулировать цвет "пламени" с  по-
мощью  палитры  (массив   BUF3).
Каждый байт палитры содержит од-
но из восьми  значений,  опреде-
ляющее цвет: %000000,%001000,...
%111000. В процессе работы прог-
раммы значения  из  буфера  BUF2
(числа от  0  до  255), которые,
можно сказать,  определяют  "яр-
кость" пламени, перекодируются в
соответствующие значения атрибу-
тов в соответствии с этой палит-
рой.
   Хотя этот эффект (как и  все,
рассмотренные в статье) не  син-
хронизируется  по   прерываниям,
они должны быть  разрешены - это
нужно для опроса клавиатуры.



Другие статьи номера:

Авторская разработка - С.Зонов, А.Ларченко. О контроллере SMUC (HDD и IBM периферия).

Компьютерная новелла - Воины Звезд (по игре Shadowfire).

Новые программы - Обзор Digital Studio v1.12, Digital Studio Compiler v1.01

Новые программы - Обзор Xas редактор-ассемблер 128К (v5.05).

Новые программы - Обзор Музыкального редактора Instrument v3.01

Новые программы - Обзор программ FASTzasm и @-zasm.

Новые программы - Обзор программы No Kempston.

Профессиональный подход - Алгоритмы построения и прохождения Лабиринтов.

Смех без причины... - Материалы из юмористического журнала SpectrofUn.

Советы экспертов - Игра FEUD.

Советы экспертов - Игра Killed Until Dead.

Советы экспертов - Игра War in Middle Earth.

Форум - Конверсия цветной спектрумовской картинки на IBM. Конверсия ч/б картинки с IBM на ZX Spectrum.

Форум - О русификации игровых программ.

Форум - Программа детекта эмулятора.

Форум - Процедура "цветные полосы на бордюре". Снижение шума FDD.

Форум - Процедура перевода числа в десятичный вид. Процедура - сканер пароля.

Форум - Снятие защиты Microprotector'а.

Форум - Эмуляторы, которые мы выбираем: 'UKV Spectrum Debugger', 'Z80TRDOS'.

Читатель-читателю - Драйвер ввода в режимах последовательного и прямого доступа из файлов системы TR-DOS.

Этюды - Графический эффект "плазма 2".

Этюды - Графический эффект "плазма 2".

Этюды - Графический эффект "плазма".

Этюды - Полезные советы. Быстрая переброска экрана.

Этюды - Ремейк процедур 93 года.

Этюды - Эффект "пламя".


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Интервью - интервью с участниками ENLiGHT'97: Flash inc.
Scene - отчет буржуя Pyromaniac о поездке на русское пати CAF'e 2003.
AD&D - описания монстров AD&D (часть третья).

В этот день...   23 февраля