User Tag List

Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 24

Тема: Сhanky-flame

  1. #1

    Регистрация
    10.01.2010
    Адрес
    Смоленская обл.
    Сообщений
    556
    Спасибо Благодарностей отдано 
    187
    Спасибо Благодарностей получено 
    197
    Поблагодарили
    100 сообщений
    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

    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,453
    Записей в дневнике
    42
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    163
    Поблагодарили
    120 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  4. #3

    Регистрация
    10.01.2010
    Адрес
    Смоленская обл.
    Сообщений
    556
    Спасибо Благодарностей отдано 
    187
    Спасибо Благодарностей получено 
    197
    Поблагодарили
    100 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  5. #4

    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,453
    Записей в дневнике
    42
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    163
    Поблагодарили
    120 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  6. #5

    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,866
    Спасибо Благодарностей отдано 
    328
    Спасибо Благодарностей получено 
    310
    Поблагодарили
    234 сообщений
    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

    Регистрация
    10.01.2010
    Адрес
    Смоленская обл.
    Сообщений
    556
    Спасибо Благодарностей отдано 
    187
    Спасибо Благодарностей получено 
    197
    Поблагодарили
    100 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  8. #7

    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,453
    Записей в дневнике
    42
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    163
    Поблагодарили
    120 сообщений
    Mentioned
    7 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

    Регистрация
    10.01.2010
    Адрес
    Смоленская обл.
    Сообщений
    556
    Спасибо Благодарностей отдано 
    187
    Спасибо Благодарностей получено 
    197
    Поблагодарили
    100 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

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

  10. #9

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

    По умолчанию

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

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

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

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

  11. #10

    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,453
    Записей в дневнике
    42
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    163
    Поблагодарили
    120 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

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

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

Страница 1 из 3 123 ПоследняяПоследняя

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

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

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

Похожие темы

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

Ваши права

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