Важная информация

User Tag List

Показано с 1 по 10 из 10

Тема: Сhanky-flame

  1. #1
    Activist
    Регистрация
    10.01.2010
    Адрес
    Смоленская обл.
    Сообщений
    424
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    124
    Поблагодарили
    59 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Сhanky-flame

    Мне тут вспомнился как-то эффект chanky-flame. Не то чтобы он мне нужен, просто любопытно.
    В каком-то журнале читал статью от Steelzer/CRZ с эффектом в нижней трети экрана. Исходники правда были с обшипками, но не суть.
    Cтало интересно, как сделать пламя на весь экран. И вот тут засада, медленно до ужаса )) Насколько смог поизвращался, рендом в таблицу вынес, методом тыка алгоритм покоцал, стало чуть быстрее, но все равно на пределе терпимости. ( Нет получалось и с нормальной скоростью и более-менее нормальным видом, но уже анимацией, кадров так 30-40 )
    Интересует кто нибудь делал полноэкранное пламя, секреты не раскроете ?

    Код

    Код:
            device zxspectrum128
    
     ; code by Dart Alver and previous code by (c) Steelzer/CRZ
    
    
    Chn_Boof     equ #C000   ; Здесь будет буфер чанкового изображения
    
    CH_set       equ #7800   ; Здесь будут данные изображения самих чанков
    
        ORG #8000            ; Начало кода программы
    START:
    
        ld hl, #4000         ; очистка экрана
        ld de, #4001
        ld bc, 6144
        ld (hl),l
        ldir
    
        ld (hl),#02           ; цвет экрана
        ld bc,767
        ldir
    
    
        call Chanky_init     ; создаём набор чанков для быстрого доступа
    
        xor a        ; чёрный бордюр
        out (#fe),a
    
        LD HL, Chn_Boof         ;инициализация
        LD DE, Chn_Boof+1       ;буфера
        LD (HL),L               ;буфер выбирается так что L=0
        LD BC,3072
        LDIR
    
    
    FLAMESTART:
       exx
          ld de,#4000        ; экран
          ld b,32
          ld c,#F0
       exx
    FLAME:
        LD HL, Chn_Boof+63 ;смещение вверх и вправо
    .sm:
        LD DE,Chn_Boof
        LD BC,#0006    ;#600=1536
    
    BEGIN:
    
           ld a,(de)
           cp (hl)
          jp nz, 2F
    1
           xor a
    2
          add a,(hl)
          rra
    
         inc hl
         add a,(hl)
         rra
         ld (de),a
         inc de
    
         ex af,af'
    
           ld a,(de)
           cp (hl)
          jp nz, 2F
    1
           xor a
    2
          add a, (hl)
          rra
    
         inc hl
         add a,(hl)
         rra
         ld (de),a
         inc de
    
         exx
         and c
         rrca : rrca : rrca: rrca
         ld l,a
         ex af,af'
         and c
         or l
    
        LD L,A               ;
        LD H,#1E             ; для получения старшего байта адреса чанков
        ADD HL,HL            ;
        ADD HL,HL            ;
        LD A,(HL)            ;
        LD (DE),A            ;
        INC L               ;
        INC D                ;
        LD A,(HL)            ;
        LD (DE),A            ;
        INC L               ;
        INC D                ;
        LD A,(HL)            ;
        LD (DE),A            ;
        INC L               ;
        INC D                ;
        LD A,(HL)            ;
        LD (DE),A
         dec d
         dec d
         dec d
    1    inc e
    
       djnz V1
         ld b,32
         ld a,4
         add a,d
         ld d,a
         and 7
         ld a,e
        jp nz, .v
         or a
        jp z,V1
        LD A,D
        SUB 8
        LD D,A
       jp V1
         ld a,e
    .v   sub b
         ld e,a
    
    V1
         exx
    
         djnz BEGIN
          dec c
         jp nz,BEGIN
    
    
    
         ld de,Chn_Boof+3072
    
         ld bc,64
         ld hl,Random
    .rndADDR EQU $-2
         ldir
         ld a,h
         or a
        jp nz,1F
          ld hl,Random
    1     ld (.rndADDR),hl
    
    
       jp FLAMESTART
    
    
    
    
    
    Chanky_init:
        ld de,Chanky
        ld ix, #7800
        ld c,16
    .loop1:
            ld b,16
    .loop2:
            push bc
            push ix
            ld a,16
            sub c
            add a,a
            add a,a
            ld l,a
            ld h,0
            add hl, de
    
            ld b,4
    1
            ld a,(hl)
            and #f0
            inc hl
            ld (ix),a
            inc ix
            djnz 1B
    
            pop ix
            pop bc
            push bc
    
    
             ld a,16
            sub b
            add a,a
            add a,a
            ld l,a
            ld h,0
            add hl, de
    
            ld b,4
    2
            ld a,(hl)
            and #0f
            inc hl
            or (ix)
            ld (ix),a
            inc ix
            djnz 2B
    
            pop bc
            djnz .loop2
            dec c
            jr nz,.loop1
    
    
         LD DE,Random            ; заполнялка RANDOM'ом из почти ПЗУ ;)
    .RND                         ; от последовательности сильно зависит внешний вид
         LD A,R
         AND %00111111
         LD H,A
         LD A,R
         LD L,A
         LD A,R
         XOR (HL)
         rra
         or l
         or h
    1    sub 7
         LD (DE),A
         INC HL
         dec hl
         INC DE
         ld a,d
         or a
        jr nz,.RND
    
        ret
    
    
    
    Chanky:    ; исходные коды для формирования набора чанков
    
         db %00000000, %00000000,%00000000,%00000000   ;0
         db %00000000, %00100010,%00000000,%00000000   ;1
         db %00000000, %00100010,%00000000,%10001000   ;2
         db %00000000, %00100010,%00000000,%10101010   ;3
    
         db %00000000, %10101010,%00000000,%10101010   ;4
         db %00010001, %10101010,%00000000,%10101010   ;5
         db %01000100, %10101010,%00010001,%10101010   ;6
         db %01010101, %10101010,%00010001,%10101010   ;7
    
         db %01010101, %10101010,%01010101,%10101010   ;8
         db %01010101, %11101110,%01010101,%10101010   ;9
         db %01010101, %11101110,%01010101,%10111011  ;10
         db %01010101, %10101110,%01110111,%10111011  ;11
    
         db %01110111, %11101110,%01110111,%10111011   ;12
         db %01110111, %11101110,%11111111,%10111011   ;13
         db %01110111, %11101110,%11111111,%11111111   ;14
         db %11111111, %11111111,%11111111,%11111111   ;15
    
    
    
    Random  EQU #C000+3072+128    ; здесь будет последовательность случайных чисел для формирования пламени
    
            savesna "full_flame.sna",START    ; создаём .sna файл
    
      ;     LABELSLIST "C:/us0.38.2/user.l"      ; раскомментить и прописать свой адрес для дебаггинга меток в Unreal Speccy
    [свернуть]


    SNA файл
    ASM файл
    Последний раз редактировалось Dart Alver; 05.01.2018 в 16:27.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Guru Аватар для Shiny
    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,125
    Записей в дневнике
    37
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    22
    Поблагодарили
    11 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Если бы я и делал, то по-другому.

  4. #3
    Activist
    Регистрация
    10.01.2010
    Адрес
    Смоленская обл.
    Сообщений
    424
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    124
    Поблагодарили
    59 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Да и я понимаю что надо по другому, просто мысли кончились.

  5. #4
    Guru Аватар для Shiny
    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,125
    Записей в дневнике
    37
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    22
    Поблагодарили
    11 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Вывод чанок получится быстрее, если не обрабатывать как LLLLRRRR. Не помню, где подсмотрел, в GOA 4k или нет, но вышло так. Единственный "недостаток" - чанки выводится через строчку.
    Вложения Вложения

  6. #5
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,751
    Спасибо Благодарностей отдано 
    256
    Спасибо Благодарностей получено 
    266
    Поблагодарили
    200 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Dart Alver, быстро делается только атрибутное пламя
    чанки вообще медленное явление

    а так все просто
    чем меньше обрабатываешь информации тем лучше

    у чанок 4х4 64*48
    у атрибутов 4х8 64*24
    у атрибутов 8х8 32*24

    тут надо определится что именно надо
    скорость или чанки
    С уважением,
    Jerri / Red Triangle.

  7. #6
    Activist
    Регистрация
    10.01.2010
    Адрес
    Смоленская обл.
    Сообщений
    424
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    124
    Поблагодарили
    59 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    Dart Alver, быстро делается только атрибутное пламя
    Х.з. атрибутное выглядит хуже. Можно конечно попробовать чанки 8x8, ну или только так :
    Animate ASM+RND
    Animate SNA
    Секунд 20 расчёт анимации, потом просмотр. Тут ещё есть моменты для оптимизации, да и вместо пропуска начальных кадров можно тупо сохранить состояние.

  8. #7
    Guru Аватар для Shiny
    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,125
    Записей в дневнике
    37
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    22
    Поблагодарили
    11 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    длинный прекалк, да и видно, что дергаются фазы
    Код:
        LD A,(HL)            ;
        LD (DE),A            ;
        INC HL               ;
        INC D                ;
        LD A,(HL)            ;
    Если я правильно понял, то INC L быстрее чем INC HL. К тому же PUSH/POP медленно, лучше бы избавиться.

    - - - Добавлено - - -

    Цитата Сообщение от Dart Alver Посмотреть сообщение
    Можно конечно попробовать чанки 8x8, ну или только так :
    Не решение, конечно, да и вышла засада: я готовил два буфера данных, при отрисовке сравнивал значения. Если данные совпадают, то не нужно рисовать повторно чанки.

  9. #8
    Activist
    Регистрация
    10.01.2010
    Адрес
    Смоленская обл.
    Сообщений
    424
    Спасибо Благодарностей отдано 
    132
    Спасибо Благодарностей получено 
    124
    Поблагодарили
    59 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Шынни Посмотреть сообщение
    длинный прекалк, да и видно, что дергаются фазы
    Ну подбиралось то методом тыка, так что да, есть, но все же лучше чем тормозилка.

    Цитата Сообщение от Шынни Посмотреть сообщение
    Если я правильно понял, то INC L быстрее чем INC HL. К тому же PUSH/POP медленно, лучше бы избавиться.
    Да я тут не оптимизировал это довольно старый код, можно менять на inc l, там проскочит, и вместо pash/pop dec d 3 раза.

    Цитата Сообщение от Шынни Посмотреть сообщение
    я готовил два буфера данных, при отрисовке сравнивал значения. Если данные совпадают, то не нужно рисовать повторно чанки.
    Я пробовал было два буфера в варианте с чанками без анимации - обслуга второго буфера съела больше времени чем экономия прорисовки.

  10. #9
    Banned
    Регистрация
    22.05.2011
    Адрес
    г. Дзержинск, Украина
    Сообщений
    6,841
    Спасибо Благодарностей отдано 
    483
    Спасибо Благодарностей получено 
    658
    Поблагодарили
    512 сообщений
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Шынни Посмотреть сообщение
    при отрисовке сравнивал значения. Если данные совпадают, то не нужно рисовать повторно чанки.
    только при сравнении со вторым буфером
    легко можно просрать весь выигрыш от пропуска

    это прокатывает когда в чанках происходит минимальное количество изменений.

    возможно это будет эффективно работать в каких нибудь 16с режимах
    когда один отрисованный чанк на экране занимает достаточно много видеопамяти

    но я так и не дошел для проверки этого...

  11. #10
    Guru Аватар для Shiny
    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,125
    Записей в дневнике
    37
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    22
    Поблагодарили
    11 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NEO SPECTRUMAN Посмотреть сообщение
    легко можно просрать весь выигрыш от пропуска

    это прокатывает когда в чанках происходит минимальное количество изменений.
    вроде как прокатило в двух эффектах при значениях 0-255

    - - - Добавлено - - -

    Другой вывод чанок. Наверное, быстрее.
    Вложения Вложения
    • Тип файла: zip draw.zip (1.7 Кб, Просмотров: 71)

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Flame Princess Adventure Time
    от abelenki в разделе Игры
    Ответов: 0
    Последнее: 04.07.2016, 20:35

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •