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

User Tag List

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

Тема: Сhanky-flame

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Activist
    Регистрация
    10.01.2010
    Адрес
    Смоленская обл.
    Сообщений
    425
    Спасибо Благодарностей отдано 
    133
    Спасибо Благодарностей получено 
    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
    Размещение рекламы на форуме способствует его дальнейшему развитию

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

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

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

Похожие темы

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

Ваши права

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