Miracle #03
16 июля 1999

Кто там кодит? - Chanky flame: описание алгоритма чанкового огня.

<b>Кто там кодит?</b> - Chanky flame: описание алгоритма чанкового огня.
    (c) Steelzer/Triumph    
    -------------------------

            FLAME

    Вы  конечно же видели эффект FLAME'а
(пламени) в демках, интрах и т.д. и если
для  вас секрет, как он сделан - читайте
далее.

    Для  начала определим какой огонь мы
хотим  получить.  Мода на атрибуты давно
канула,  и сейчас более актуальны chunky
(dithering).   Поэтому   речь  пойдет  о
'чанковом'  FLAME.  Огонь должен быть не
слишком высоким, но и не слишком малень-
ким. Пусть будет на треть экрана. Гореть
он  может вертикально вверх, а может и в
сторону,  что создает эффект ветра, но о
том как это сделать немного попозже.

    Для  начала инициализируем таблицу -
некий  буфер,  с  которым мы будем рабо-
тать,  а  потом печатать на экран. Усло-
вимся,  что  использоватся  будут  чанки
4x4,  и  под 1 чанк в буфере будет выде-
ляться  1  байт - так с ними проще рабо-
тать.   Итого  нам  потребуется  таблица
64x16 (1024 байт).

    Ну  а  теперь  собственно  о том как
делается   огонь.  Внизу  пламени  точки
имеют  максимальную яркость и постепенно
переходя к самому верху тускнеют.

      Вот элементы нашего буфера:
0, 2, 3, ... 61, 62, 63
     64, 65, 66, ... 125, 126, 127

    Следует  понять, что мы имеем массив
64x16,  и  что  номер  нижнего  элемента
(смещение в памяти) отличается от номера
верхнего на 64.

    Вот сам алгоритм:

1) взять байт из X;
2) сложить с байтом из X+64;
3) проверить, равны ли они;
4) если да, то обнулить X;
5) сложить X с X+64 и разделить сумму на
   2;
6) положить частное в X;
7) и т.д. для всех элементов буфера;
8) напечать буфер на экран;
9) после  обработки  и  печати,  следует
   обновить  64  байта  из  конца буфера
   случайными  цифрами  от 0 до 15 (т.к.
   всего  чанков 16) чтобы пламя не гас-
   ло.

    Чтобы  пламя  шло вверх и в сторону,
нужно  в п.2 алгоритма поменять число 64
на 63 (вправо), или на 65 (влево).

    Вот  примерно  что  должно  быть  на
экране после печати буфера:

                              
                              
                              
                              
                              
                              

    Сильно не заглядывайтесь - на эффект
нужно смотреть в действии, а не прикалы-
ваться по screenshot'ам.

    Если вам кажется, что пламени чего -
то  не  хватает,  то  можно  попробовать
изменить алгоритм.

    Вместо  того,  чтобы складывать эле-
мент  с  нижним и делить на 2, попробуем
сложить элемент не только с нижним, но и
с  нижним  -  левым  и  с  нижним правым
элементами и разделить сумму уже на 4.

    Тогда  на  экране  появится примерно
такое:

                              
                              
                              
                              
                              
                              
                              

    Лично  мне  больше  нравится  второй
FLAME.  Вот  3  minutes coded програмка,
которая как раз и делает второй вариант.

    Там  правда я использую подгружаемый
блок  - "чанковый фонт", и печатаю чанки
по  2 за раз. Не буду спорить, печаталка
далеко не идеальная. Но это сделано лишь
для  того,  чтобы  оставить "простор для
оптимизации" начинающим кодерам. Надеюсь
сами   сгенерите   "чанковый   фонт",  и
подгрузите  под адрес #7800. Лично я его
генерил из 32 байт.

    ;(c)Steelzer/CRZ
    ; 3 minut coded flame
    ; rem can be modifed :)

    ORG 25000
    LD HL,#C000    ;инициализация
    LD DE,#C001    ;буфера
    LD (HL),L
    LD BC,1024
    LDIR

    FLAME   LD IX,#C000+63 ;смещение вверх и вправо
    LD DE,#C000
    LD BC,1024     ;столько элементов придется
                           ;обработать
    BEGIN   LD A,(DE)
    CP (IX+0)
    JR NZ,LOOP1
    XOR A
    LOOP1   CP (IX-1)
    JR NZ,LOOP2
    XOR A
    LOOP2   ADD A,(IX+0)
    ADD A,(IX+1)
    ADD A,(IX+2)
    SRA A
    SRA A
    LD (DE),A
    INC IX
    INC DE
    DEC BC
    LD A,B
    OR C
    JR NZ,BEGIN

    CALL PRINT

    LD A,R         ;заполнялка RANDOM'ом из почти ПЗУ ;)
    AND %00111111
    LD H,A
    LD A,R
    LD L,A
    LD DE,#C000+1024
    LD B,64
    RND     LD A,R
    OR (HL)
    OR 8
    AND 15
    LD (DE),A
    INC HL
    INC DE
    DJNZ RND
    JR FLAME

    PRINT   LD HL,#C000
    LD DE,#5000
    LD B,16
    LI1     PUSH DE

    LD A,(HL)            ;весь этот блок
    INC HL               ;нужно повторить 32 раза
    ADD A,A              ;
    ADD A,A              ;
    ADD A,A              ;
    ADD A,A              ;
    OR (HL)              ;
    PUSH HL              ;
    PUSH DE              ;
    LD L,A               ;
    LD H,30              ;
    ADD HL,HL            ;
    ADD HL,HL            ;
    LD A,(HL)            ;
    LD (DE),A            ;
    INC HL               ;
    INC D                ;
    LD A,(HL)            ;
    LD (DE),A            ;
    INC HL               ;
    INC D                ;
    LD A,(HL)            ;
    LD (DE),A            ;
    INC HL               ;
    INC D                ;
    LD A,(HL)            ;
    LD (DE),A            ;
    POP DE               ;
    POP HL               ;
    INC DE               ;
    INC HL               ;

    POP DE
    CALL NL1
    DEC B
    JP NZ,LI1

    LD BC,#7FFE
    IN A,(C)
    BIT 0,A
    JP Z,EXIT            ;адрес выхода установите сами
    RET

    NL1     LD A,4
    ADD A,D
    LD D,A
    NEXTL2  LD A,D
    NEXTL3  AND 7
    JR NZ,V1
    LD A,E
    ADD A,32
    LD E,A
    JR C,V1
    LD A,D
    SUB 8
    LD D,A
    V1      RET
    NX      INC D
    JR NEXTL2

----------------------------------------



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

От редакции - Предисловие: С какой целью мы выпускаем журнал?

От редакции - Оболочка: описание новой оболчки к журналу.

От редакции - письма в журнал: Dr.Sioux/Phantom Family, Fistsoft, Mr.Z/HardWave, Куров Н., Eagle/Computer Ratz Group, Rom Corp/Virtual Vision Group.

От редакции - в этом номере: содержание номера.

Проект года - презентация версии игры Robo от KT-soft/ETC.

Проект года - презентация игры от группы Spark: Городки.

Проект года - презентация игры "12 Тайных книг".

Проект года - несколько слов о готовящейся к выходу игре Chip & Dale.

Проект года - потрясающая новелла к игре "Навигатор".

Проект года - Мир тьмы: описание новой real-time strategy.

Погремушки - свежие и не очень, но смачные читы.

Погремушки - крематорий: игра Сталкер - описание всех предметов.

Погремушки - крематорий: Страна мифов - советы спеца.

Основы SWAP'А - информация для начинающих, а также несколько хитрых извратов, которые можно провернуть с почтой.

Кто там кодит? - Быстрая графика: несколько рецептов от Zetter'а (печать спрайтов, обновление экрана).

Кто там кодит? - Packer'ы и Depacker'ы: вся правда о паковщиках, или разглагольствования сэра Kot'а.

Кто там кодит? - Работаем с MS-DOS: Все о mod файлах - полное описание структуры mod-файла, а также описание всех эффектов.

Кто там кодит? - Работаем с MS-DOS: Ms-Dos дискеты - описание структуры Ms-Dos диска.

Кто там кодит? - Chanky flame: описание алгоритма чанкового огня.

Кто там кодит? - Attribute bump mapping: bump mapping для тех кто не въехал.

Кто там кодит? - Гуру медитирует: оптимизация программ по времени исполнения и по размеру.

Кто там кодит? - Приближенный поиск заданной последовательности байт!

Кто там кодит? - Fast 42 print: быстрая процедура печати 42 символов в строке.

Party zone - KidSoft'98: репортаж с Воронежского фестиваля компьютерного искусства.

Party zone - EarthQuake'99: репортаж с Челябинского фестиваля компьютерного искусства.

Я сама - 128 цветов на Spectrum: схема доработки до 128 цветов от донецкой группы Spark.

Я сама - Чайникам: подключение General Sound к Profi через системный разъем.

Я сама - Бесперебойные блоки питания: информация об UPS-технологии.

Я сама - General Sound Filter: рассказ о новой примочке к GS.

Я сама - Модемы: Схемы, схемы! Схемы Г.Шепелева и М.Кондратьева подключения Hayes модема.

Я сама - Модемы: Описание команд - описание команд терминала.

Я сама - Модемы: Тотальная модемизация - призыв к подключению момедов.

Системный софт - FastCopy 3.0: полное описание навороченного турбо-копировщика.

Системный софт - Pro Tracker глюки!!! несколько глючков в ProTracker'ах.

Системный софт - Pro Tracker 3.4 final презентация ремикса Pro Tracker из Самары.

Новости - Челябинск: X-Raizor вернулся на спектрум, Wocen пишет boot, Blade отдахыет, Steelzer вступил в Triumph, Crite доделал альфа версию "Мира тьмы", Bytic купил GS, Edison делает сайт, Ironman хочет купить спектрум.

Новости - Омск: полный состав и ожидаемы продукты от группы U98.

Новости - Калининград: громкая смерть или тихая жизнь Spectrum в Калининграде.

Techno-nature - Электронная музыка: Dj.Ironman рассказывает о техно (часть 1).

Techno-nature - Электронная музыка: Dj.Ironman рассказывает о техно (часть 2).

Techno-nature - Internet music-sites: куча адресов,где можно узнать нового об электронной музыке.

Techno-nature - Наркомания XX: байка от Dj.Ironman'а.

Без четверти четыре - рассказ из повседневной жизни от X-Raizor'а.

Комната смеха - Запахи вокруг и внутри: прикольный рассказ из журнала ПТЮЧ.

Комната смеха - Пердмен: убийственный рассказ из все того-же ПТЮЧ'а.

Комната смеха - Фитиль: неколько сценариев из киножурнала ФИТИЛЬ.

Комната смеха - Ореол: окончание рассказа опубликованного во втором номере.

Прокламация - реклама и обьявления о поиске друзей на спектруме.

Прокламация - реклама и обьявления о поиске друзей на спектруме.


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

Похожие статьи:
Реклама - бесплатные обьявления и реклама.
Inferno - Вступление от редакторов.
Опрос - Результаты годового опроса спектрумистов.
NEWS of Picon - Проект будущего ПЗУ. Подпрограммы BASIC 48.
Вступление - Новая оболочка оказалась чрезвычайно неудобной.

В этот день...   25 апреля