
Date: 02 ��� 98  02:12:01
From: Dmitriy Shishkin
To:   All
Subj: WATER FX

^MSGID: 2:5020/1174.19 34aca179
^Shin: A1240/50Mhz/18Mb !
^RFC-Path:
ddt.demos.su!f400.n5020!f443.n5020!f423.n5020!f1174.n5020!not-for-mail
��������� ������� + ������ ���� + c2p (040/060)����� ��� �������� :)))

3-� ����� �� #amycoders channel compo (shortest version) 

ps: ������ ����� ���� 4 :))))

Sincerely, 
Dmitriy

 **********************************************************
*                                                          *
*      System friendly startup written by Shin^lkr         *
*             support DBLPAL and PAL modes                 *
*                                                          *
 **********************************************************

        include exec/exec_lib.i
        include intuition/intuition_lib.i
        include intuition/screens.i
        include graphics/graphics_lib.i
        include graphics/view.i 

** set task priority up to 127
        sub.l   a1,a1
        CALLEXEC        FindTask
        move.l  d0,a1
        moveq   #0,d0
        jsr     _LVOSetTaskPri(a6)
        
libsopen
        move.l  4.w,a6
        lea     liblist,a5
        lea     libbase,a4
.opennext       moveq   #0,d0
        move.l  (a5)+,a1
        tst.l   a1
        bmi.s   .exit
        jsr     _LVOOpenLibrary(a6)
        move.l  d0,(a4)+
        beq     libexit
        bra.s   .opennext
.exit

** init bitmaps
        lea     dbufinfo1,a0
        moveq   #8,d0
        move.l  #256,d1
        move.l  #256,d2
        CALLGRAF        InitBitMap
        lea     dbufinfo2,a0
        moveq   #8,d0
        move.l  #256,d1
        move.l  #256,d2
        jsr     _LVOInitBitMap(a6)
        lea     dbufinfo3,a0
        moveq   #8,d0
        move.l  #256,d1
        move.l  #256,d2
        jsr     _LVOInitBitMap(a6)

*** open screen
        SUB.l   a0,a0
        lea     OStaglist,a1
        CALLINT OpenScreenTagList
        move.l  d0,scr_struct
        bne     .dblpalok
        move.l  #PAL_MONITOR_ID,monitor+4
        SUB.l   a0,a0
        lea     OStaglist,a1
        jsr     _LVOOpenScreenTagList(a6)
        move.l  d0,scr_struct
        beq     libexit
.dblpalok       

*** change palette
        move.l  scr_struct,a0
        lea     sc_ViewPort(a0),a0
        lea     palette,a1
        CALLGRAF        LoadRGB32
***
        move.l  scr_struct,a0
        lea     sc_ViewPort(a0),a0
        jsr     _LVOAllocDBufInfo(a6)
        move.l  d0,dbufstruct
        beq     scr.close



        ***************
        *** M A I N ***
        ***************

;       move.l  chunky,a0
;       move.b  #114,((256*128+128).l,a0)

nextframe
*** triple buffering
        lea     buffers,a0
        move.l  a0,a1
        move.l  (a1)+,d0
        move.l  (a1)+,d1
        rept    4
        move.l  (a1)+,(a0)+
        endr
        move.l  d0,(a0)+
        move.l  d1,(a0)+
        *********************
        move.l  scr_struct,a0
        lea     sc_ViewPort(a0),a0
        move.l  buffers,a1
        move.l  dbufstruct,a2
        CALLGRAF        ChangeVPBitMap


        jsr     movement
        lea     chunky,a0
        jsr     water_do
        lea     chunky,a0
        jsr     c2p

        btst    #2,$dff016
        bne.s   nextframe


        ***************
        *** E X I T ***
        ***************
        move.l  dbufstruct,a1
        CALLGRAF        FreeDBufInfo
***     close screen
scr.close       move.l  scr_struct,a0
        CALLINT CloseScreen

libexit
        move.l  4.w,a6
        lea     libbase,a5
.close  move.l  (a5)+,a1
        tst.l   a1
        beq.s   .close
        bmi.s   .exit
        jsr     _LVOCloseLibrary(a6)
        bra.s   .close
.exit
        moveq   #0,d0
        rts


        *************************************
        ************** D A T A **************
        *************************************
;       L I B S
liblist dc.l    intuition,graphics,-1
intuition               INTNAME
        even
graphics                GRAFNAME
        even
libbase
_IntuitionBase  dc.l    0
_GfxBase                dc.l    0
.libend         dc.l    -1

;       S C R E E N
scr_struct      dc.l    0
OStaglist       dc.l    SA_Width,256
        dc.l    SA_Height,256
        dc.l    SA_Left,32
        dc.l    SA_Depth,8
        dc.l    SA_Type,CUSTOMBITMAP|CUSTOMSCREEN
        dc.l    SA_BitMap,dbufinfo1
;       dc.l    SA_Exclusive,1
;       dc.l    SA_Draggable,1
        dc.l    SA_Quiet,1
        dc.l    SA_AutoScroll,1
monitor dc.l    SA_DisplayID,DBLPAL_MONITOR_ID
        dc.l    TAG_END

        * dbufinfo struct.

dbufinfo1       dc.l    0,0
        dc.l    b1p0,b1p1,b1p2,b1p3,b1p4,b1p5,b1p6,b1p7,0
dbufinfo2       dc.l    0,0
        dc.l    b2p0,b2p1,b2p2,b2p3,b2p4,b2p5,b2p6,b2p7,0
dbufinfo3       dc.l    0,0
        dc.l    b3p0,b3p1,b3p2,b3p3,b3p4,b3p5,b3p6,b3p7,0

buffers dc.l    dbufinfo1,b1p0
        dc.l    dbufinfo2
scr.buf dc.l    b2p0
        dc.l    dbufinfo3,b3p0
dbufstruct      dc.l    0

palette
        dc.l    $1000000
        dcb.l   3,0
        dcb.l   3,$2020202
        dcb.l   3,$4040404
        dcb.l   3,$6060606
        dcb.l   3,$8080808
        dcb.l   3,$A0A0A0A
        dcb.l   3,$C0C0C0C
        dcb.l   3,$E0E0E0E
        dcb.l   3,$10101010
        dcb.l   3,$12121212
        dcb.l   3,$14141414
        dcb.l   3,$16161616
        dcb.l   3,$18181818
        dcb.l   3,$1A1A1A1A
        dcb.l   3,$1C1C1C1C
        dcb.l   3,$1E1E1E1E
        dcb.l   3,$20202020
        dcb.l   3,$22222222
        dcb.l   3,$24242424
        dcb.l   3,$26262626
        dcb.l   3,$28282828
        dcb.l   3,$2A2A2A2A
        dcb.l   3,$2C2C2C2C
        dcb.l   3,$2E2E2E2E
        dcb.l   3,$30303030
        dcb.l   3,$32323232
        dcb.l   3,$34343434
        dcb.l   3,$36363636
        dcb.l   3,$38383838
        dcb.l   3,$3A3A3A3A
        dcb.l   3,$3C3C3C3C
        dcb.l   3,$3E3E3E3E
        dcb.l   3,$40404040
        dcb.l   3,$42424242
        dcb.l   3,$44444444
        dcb.l   3,$46464646
        dcb.l   3,$48484848
        dcb.l   3,$4A4A4A4A
        dcb.l   3,$4C4C4C4C
        dcb.l   3,$4E4E4E4E
        dcb.l   3,$50505050
        dcb.l   3,$52525252
        dcb.l   3,$54545454
        dcb.l   3,$56565656
        dcb.l   3,$58585858
        dcb.l   3,$5A5A5A5A
        dcb.l   3,$5C5C5C5C
        dcb.l   3,$5E5E5E5E
        dcb.l   3,$60606060
        dcb.l   3,$62626262
        dcb.l   3,$64646464
        dcb.l   3,$66666666
        dcb.l   3,$68686868
        dcb.l   3,$6A6A6A6A
        dcb.l   3,$6C6C6C6C
        dcb.l   3,$6E6E6E6E
        dcb.l   3,$70707070
        dcb.l   3,$72727272
        dcb.l   3,$74747474
        dcb.l   3,$76767676
        dcb.l   3,$78787878
        dcb.l   3,$7A7A7A7A
        dcb.l   3,$7C7C7C7C
        dcb.l   3,$7E7E7E7E
        dcb.l   3,$80808080
        dcb.l   3,$81818181
        dcb.l   3,$83838383
        dcb.l   3,$85858585
        dcb.l   3,$87878787
        dcb.l   3,$89898989
        dcb.l   3,$8B8B8B8B
        dcb.l   3,$8D8D8D8D
        dcb.l   3,$8F8F8F8F
        dcb.l   3,$91919191
        dcb.l   3,$93939393
        dcb.l   3,$95959595
        dcb.l   3,$97979797
        dcb.l   3,$99999999
        dcb.l   3,$9B9B9B9B
        dcb.l   3,$9D9D9D9D
        dcb.l   3,$9F9F9F9F
        dcb.l   3,$A1A1A1A1
        dcb.l   3,$A3A3A3A3
        dcb.l   3,$A5A5A5A5
        dcb.l   3,$A7A7A7A7
        dcb.l   3,$A9A9A9A9
        dcb.l   3,$ABABABAB
        dcb.l   3,$ADADADAD
        dcb.l   3,$AFAFAFAF
        dcb.l   3,$B1B1B1B1
        dcb.l   3,$B3B3B3B3
        dcb.l   3,$B5B5B5B5
        dcb.l   3,$B7B7B7B7
        dcb.l   3,$B9B9B9B9
        dcb.l   3,$BBBBBBBB
        dcb.l   3,$BDBDBDBD
        dcb.l   3,$BFBFBFBF
        dcb.l   3,$C1C1C1C1
        dcb.l   3,$C3C3C3C3
        dcb.l   3,$C5C5C5C5
        dcb.l   3,$C7C7C7C7
        dcb.l   3,$C9C9C9C9
        dcb.l   3,$CBCBCBCB
        dcb.l   3,$CDCDCDCD
        dcb.l   3,$CFCFCFCF
        dcb.l   3,$D1D1D1D1
        dcb.l   3,$D3D3D3D3
        dcb.l   3,$D5D5D5D5
        dcb.l   3,$D7D7D7D7
        dcb.l   3,$D9D9D9D9
        dcb.l   3,$DBDBDBDB
        dcb.l   3,$DDDDDDDD
        dcb.l   3,$DFDFDFDF
        dcb.l   3,$E1E1E1E1
        dcb.l   3,$E3E3E3E3
        dcb.l   3,$E5E5E5E5
        dcb.l   3,$E7E7E7E7
        dcb.l   3,$E9E9E9E9
        dcb.l   3,$EBEBEBEB
        dcb.l   3,$EDEDEDED
        dcb.l   3,$EFEFEFEF
        dcb.l   3,$F1F1F1F1
        dcb.l   3,$F3F3F3F3
        dcb.l   3,$F5F5F5F5
        dcb.l   3,$F7F7F7F7
        dcb.l   3,$F9F9F9F9
        dcb.l   3,$FBFBFBFB
        dcb.l   3,$FDFDFDFD
        dcb.l   3,$FFFFFFFF
        dcb.l   3,$FDFDFDFD
        dcb.l   3,$FBFBFBFB
        dcb.l   3,$F9F9F9F9
        dcb.l   3,$F7F7F7F7
        dcb.l   3,$F5F5F5F5
        dcb.l   3,$F3F3F3F3
        dcb.l   3,$F1F1F1F1
        dcb.l   3,$EFEFEFEF
        dcb.l   3,$EDEDEDED
        dcb.l   3,$EBEBEBEB
        dcb.l   3,$E9E9E9E9
        dcb.l   3,$E7E7E7E7
        dcb.l   3,$E5E5E5E5
        dcb.l   3,$E3E3E3E3
        dcb.l   3,$E1E1E1E1
        dcb.l   3,$DFDFDFDF
        dcb.l   3,$DDDDDDDD
        dcb.l   3,$DBDBDBDB
        dcb.l   3,$D9D9D9D9
        dcb.l   3,$D7D7D7D7
        dcb.l   3,$D5D5D5D5
        dcb.l   3,$D3D3D3D3
        dcb.l   3,$D1D1D1D1
        dcb.l   3,$CFCFCFCF
        dcb.l   3,$CDCDCDCD
        dcb.l   3,$CBCBCBCB
        dcb.l   3,$C9C9C9C9
        dcb.l   3,$C7C7C7C7
        dcb.l   3,$C5C5C5C5
        dcb.l   3,$C3C3C3C3
        dcb.l   3,$C1C1C1C1
        dcb.l   3,$BFBFBFBF
        dcb.l   3,$BDBDBDBD
        dcb.l   3,$BBBBBBBB
        dcb.l   3,$B9B9B9B9
        dcb.l   3,$B7B7B7B7
        dcb.l   3,$B5B5B5B5
        dcb.l   3,$B3B3B3B3
        dcb.l   3,$B1B1B1B1
        dcb.l   3,$AFAFAFAF
        dcb.l   3,$ADADADAD
        dcb.l   3,$ABABABAB
        dcb.l   3,$A9A9A9A9
        dcb.l   3,$A7A7A7A7
        dcb.l   3,$A5A5A5A5
        dcb.l   3,$A3A3A3A3
        dcb.l   3,$A1A1A1A1
        dcb.l   3,$9F9F9F9F
        dcb.l   3,$9D9D9D9D
        dcb.l   3,$9B9B9B9B
        dcb.l   3,$99999999
        dcb.l   3,$97979797
        dcb.l   3,$95959595
        dcb.l   3,$93939393
        dcb.l   3,$91919191
        dcb.l   3,$8F8F8F8F
        dcb.l   3,$8D8D8D8D
        dcb.l   3,$8B8B8B8B
        dcb.l   3,$89898989
        dcb.l   3,$87878787
        dcb.l   3,$85858585
        dcb.l   3,$83838383
        dcb.l   3,$81818181
        dcb.l   3,$7E7E7E7E
        dcb.l   3,$7C7C7C7C
        dcb.l   3,$7A7A7A7A
        dcb.l   3,$78787878
        dcb.l   3,$76767676
        dcb.l   3,$74747474
        dcb.l   3,$72727272
        dcb.l   3,$70707070
        dcb.l   3,$6E6E6E6E
        dcb.l   3,$6C6C6C6C
        dcb.l   3,$6A6A6A6A
        dcb.l   3,$68686868
        dcb.l   3,$66666666
        dcb.l   3,$64646464
        dcb.l   3,$62626262
        dcb.l   3,$60606060
        dcb.l   3,$5E5E5E5E
        dcb.l   3,$5C5C5C5C
        dcb.l   3,$5A5A5A5A
        dcb.l   3,$58585858
        dcb.l   3,$56565656
        dcb.l   3,$54545454
        dcb.l   3,$52525252
        dcb.l   3,$50505050
        dcb.l   3,$4E4E4E4E
        dcb.l   3,$4C4C4C4C
        dcb.l   3,$4A4A4A4A
        dcb.l   3,$48484848
        dcb.l   3,$46464646
        dcb.l   3,$44444444
        dcb.l   3,$42424242
        dcb.l   3,$40404040
        dcb.l   3,$3E3E3E3E
        dcb.l   3,$3C3C3C3C
        dcb.l   3,$3A3A3A3A
        dcb.l   3,$38383838
        dcb.l   3,$36363636
        dcb.l   3,$34343434
        dcb.l   3,$32323232
        dcb.l   3,$30303030
        dcb.l   3,$2E2E2E2E
        dcb.l   3,$2C2C2C2C
        dcb.l   3,$2A2A2A2A
        dcb.l   3,$28282828
        dcb.l   3,$26262626
        dcb.l   3,$24242424
        dcb.l   3,$22222222
        dcb.l   3,$20202020
        dcb.l   3,$1E1E1E1E
        dcb.l   3,$1C1C1C1C
        dcb.l   3,$1A1A1A1A
        dcb.l   3,$18181818
        dcb.l   3,$16161616
        dcb.l   3,$14141414
        dcb.l   3,$12121212
        dcb.l   3,$10101010
        dcb.l   3,$E0E0E0E
        dcb.l   3,$C0C0C0C
        dcb.l   3,$A0A0A0A
        dcb.l   3,$8080808
        dcb.l   3,$6060606
        dcb.l   3,$4040404
        dcb.l   3,$2020202
        dcb.l   4,0


        *************************************
        ********* C H I P   D A T A *********
        *************************************
        section chipdata,BSS_C
buf_width       equ     256
buf_height      equ     256

b1p0    ds.l    buf_width*buf_height/32
b1p1    ds.l    buf_width*buf_height/32
b1p2    ds.l    buf_width*buf_height/32
b1p3    ds.l    buf_width*buf_height/32
b1p4    ds.l    buf_width*buf_height/32
b1p5    ds.l    buf_width*buf_height/32
b1p6    ds.l    buf_width*buf_height/32
b1p7    ds.l    buf_width*buf_height/32

b2p0    ds.l    buf_width*buf_height/32
b2p1    ds.l    buf_width*buf_height/32
b2p2    ds.l    buf_width*buf_height/32
b2p3    ds.l    buf_width*buf_height/32
b2p4    ds.l    buf_width*buf_height/32
b2p5    ds.l    buf_width*buf_height/32
b2p6    ds.l    buf_width*buf_height/32
b2p7    ds.l    buf_width*buf_height/32

b3p0    ds.l    buf_width*buf_height/32
b3p1    ds.l    buf_width*buf_height/32
b3p2    ds.l    buf_width*buf_height/32
b3p3    ds.l    buf_width*buf_height/32
b3p4    ds.l    buf_width*buf_height/32
b3p5    ds.l    buf_width*buf_height/32
b3p6    ds.l    buf_width*buf_height/32
b3p7    ds.l    buf_width*buf_height/32


        ******************************
        ***** O T H E R  C O D E *****
        ******************************
        section c2p,CODE
c2p
        move.l  scr.buf,a1

.BPLX   EQU     256
.BPLY   EQU     256
.BPLSIZE        EQU     .BPLX*.BPLY/8
; a0    c2pscreen
; a1    bitplanes

        movem.l a0/a1,-(sp)

        add.w   #.BPLSIZE,a1
        lea     (.BPLSIZE*4.l,a1),a2

        lea     (.BPLX*.BPLY.l,a0),a3

        move.l  (a0)+,d0
        move.l  (a0)+,d1
        move.l  (a0)+,d2
        move.l  (a0)+,d3

        move.l  #$0f0f0f0f,d5           ; Swap 4x1, parts 1 & 2
        move.l  d1,d6
        move.l  d3,d7
        lsr.l   #4,d6
        lsr.l   #4,d7
        eor.l   d0,d6
        eor.l   d2,d7
        and.l   d5,d6
        and.l   d5,d7
        eor.l   d6,d0
        eor.l   d7,d2
        lsl.l   #4,d6
        lsl.l   #4,d7
        eor.l   d6,d1
        eor.l   d7,d3

        move.l  d0,a4
        move.l  d1,a5
        move.l  d2,a6
        move.l  d3,d5

        move.l  (a0)+,d0
        move.l  (a0)+,d1
        move.l  (a0)+,d2
        move.l  (a0)+,d3

        move.l  d1,d6                   ; Swap 4x1, parts 3 & 4
        move.l  d3,d7
        lsr.l   #4,d6
        lsr.l   #4,d7
        eor.l   d0,d6
        eor.l   d2,d7
        and.l   #$0f0f0f0f,d6
        and.l   #$0f0f0f0f,d7
        eor.l   d6,d0
        eor.l   d7,d2
        lsl.l   #4,d6
        lsl.l   #4,d7
        eor.l   d6,d1
        eor.l   d7,d3

        exg     d1,a4
        exg     d3,a6

        move.w  d0,d6                   ; Swap 16x4, parts 1 & 3
        move.w  d2,d7
        move.w  d1,d0
        move.w  d3,d2
        swap    d0
        swap    d2
        move.w  d0,d1
        move.w  d2,d3
        move.w  d6,d0
        move.w  d7,d2

        bra     .start
.x
        move.l  (a0)+,d0
        move.l  (a0)+,d1
        move.l  (a0)+,d2
        move.l  (a0)+,d3

        move.l  d7,.BPLSIZE*2(a1)

        move.l  #$0f0f0f0f,d5           ; Swap 4x1, parts 1 & 2
        move.l  d1,d6
        move.l  d3,d7
        lsr.l   #4,d6
        lsr.l   #4,d7
        eor.l   d0,d6
        eor.l   d2,d7
        and.l   d5,d6
        and.l   d5,d7
        move.l  a6,-.BPLSIZE(a1)
        eor.l   d6,d0
        eor.l   d7,d2
        lsl.l   #4,d6
        lsl.l   #4,d7
        eor.l   d6,d1
        eor.l   d7,d3

        move.l  a5,d7

        move.l  d0,a4
        move.l  d1,a5
        move.l  d2,a6
        move.l  d3,d5

        move.l  (a0)+,d0
        move.l  (a0)+,d1
        move.l  (a0)+,d2
        move.l  (a0)+,d3

        move.l  d7,(a1)+

        move.l  d1,d6                   ; Swap 4x1, parts 3 & 4
        move.l  d3,d7
        lsr.l   #4,d6
        lsr.l   #4,d7
        eor.l   d0,d6
        eor.l   d2,d7
        and.l   #$0f0f0f0f,d6
        and.l   #$0f0f0f0f,d7
        eor.l   d6,d0
        eor.l   d7,d2
        lsl.l   #4,d6
        lsl.l   #4,d7
        eor.l   d6,d1
        eor.l   d7,d3

        exg     d1,a4
        exg     d3,a6

        move.w  d0,d6                   ; Swap 16x4, parts 1 & 3
        move.w  d2,d7
        move.w  d1,d0
        move.w  d3,d2
        swap    d0
        swap    d2
        move.w  d0,d1
        move.w  d2,d3
        move.w  d6,d0
        move.w  d7,d2

        move.l  d4,.BPLSIZE-4(a1)
.start
        move.l  #$33333333,d4           ; Swap 2x4, parts 1 & 3
        move.l  d0,d6
        move.l  d2,d7
        lsr.l   #2,d6
        lsr.l   #2,d7
        eor.l   d1,d6
        eor.l   d3,d7
        and.l   d4,d6
        and.l   d4,d7
        eor.l   d6,d1
        eor.l   d7,d3
        lsl.l   #2,d6
        lsl.l   #2,d7
        eor.l   d6,d0
        eor.l   d7,d2

        move.l  #$00ff00ff,d4           ; Swap 8x2, parts 1 & 3
        move.l  d2,d6
        move.l  d3,d7
        lsr.l   #8,d6
        lsr.l   #8,d7
        eor.l   d0,d6
        eor.l   d1,d7
        and.l   d4,d6
        and.l   d4,d7
        eor.l   d6,d0
        eor.l   d7,d1
        lsl.l   #8,d6
        lsl.l   #8,d7
        eor.l   d6,d2
        eor.l   d7,d3

        move.l  #$55555555,d4           ; Swap 1x2, parts 1 & 3
        move.l  d2,d6
        move.l  d3,d7
        lsr.l   #1,d6
        lsr.l   #1,d7
        eor.l   d0,d6
        eor.l   d1,d7
        and.l   d4,d6
        and.l   d4,d7
        eor.l   d6,d0
        eor.l   d7,d1
        move.l  d1,.BPLSIZE*2(a2)
        add.l   d6,d6
        add.l   d7,d7
        eor.l   d6,d2
        eor.l   d7,d3

        exg     a5,d0
        exg     d5,d1
        exg     a4,d2
        exg     a6,d3

        move.w  d2,d6                   ; Swap 16x4, parts 2 & 4
        move.w  d3,d7
        move.w  d0,d2
        move.w  d1,d3
        swap    d2
        swap    d3
        move.l  a6,.BPLSIZE(a2)
        move.w  d2,d0
        move.w  d3,d1
        move.w  d6,d2
        move.w  d7,d3

        move.l  #$33333333,d4           ; Swap 2x4, parts 2 & 4
        move.l  d2,d6
        move.l  d3,d7
        lsr.l   #2,d6
        lsr.l   #2,d7
        eor.l   d0,d6
        eor.l   d1,d7
        and.l   d4,d6
        and.l   d4,d7
        eor.l   d6,d0
        eor.l   d7,d1
        lsl.l   #2,d6
        lsl.l   #2,d7
        move.l  a5,(a2)+
        eor.l   d6,d2
        eor.l   d7,d3

        move.l  #$00ff00ff,d4           ; Swap 8x2, parts 2 & 4
        move.l  d1,d6
        move.l  d3,d7
        lsr.l   #8,d6
        lsr.l   #8,d7
        eor.l   d0,d6
        eor.l   d2,d7
        and.l   d4,d6
        and.l   d4,d7
        eor.l   d6,d0
        eor.l   d7,d2
        lsl.l   #8,d6
        lsl.l   #8,d7
        move.l  a4,-.BPLSIZE-4(a2)
        eor.l   d6,d1
        eor.l   d7,d3

        move.l  #$55555555,d4           ; Swap 1x2, parts 2 & 4
        move.l  d1,d6
        move.l  d3,d7
        lsr.l   #1,d6
        lsr.l   #1,d7
        eor.l   d0,d6
        eor.l   d2,d7
        and.l   d4,d6
        and.l   d4,d7
        eor.l   d6,d0
        eor.l   d7,d2
        add.l   d6,d6
        add.l   d7,d7
        eor.l   d6,d1
        eor.l   d7,d3

        move.l  d0,d7
        move.l  d1,d4
        move.l  d2,a5
        move.l  d3,a6

        cmp.l   a0,a3
        bne     .x
.xend

        move.l  d7,.BPLSIZE*2(a1)
        move.l  d4,.BPLSIZE(a1)
        move.l  a5,(a1)+
        move.l  a6,-.BPLSIZE-4(a1)
.none
        movem.l (sp)+,a0/a1
        rts

*************************************************
*************************************************
*************************************************
        section movepoint,code
movement
; cut from amycoders hp ;)

        moveq   #31,d7
.loop   move.l  rnd,d4
        ror.l   d4,d4
        add.l   d7,d4
        move.l  d4,rnd
        moveq   #0,d0
        moveq   #0,d1
        move.b  d4,d0
        swap    d4
        move.b  d4,d1
        jsr     water_drop
        dbf     d7,.loop
        rts

*************************************************


water_drop      asl.w   #8,d1
        lea     chunky1,a0
        move.b  d0,d1
        move.b  #15,(a0,d1.l)
        addq.b  #1,d1
        move.b  #31,(a0,d1.l)
        addq.b  #1,d1
        move.b  #15,(a0,d1.l)
        rts


*************************************************
water_do
        lea     chunky2,a1
        lea     chunky1-1,a2
        not.b   (a2)+
        beq.s   .n1
        exg     a2,a1
.n1
        add.w   #256,a1
        moveq   #-1,d7
.next
        move.b  255(a2),d1
        add.b   512(a2),d1
        add.b   (a2)+,d1
        add.b   256(a2),d1
        
        move.b  (a1),d0
        asr.b   d1
        sub.w   d0,d1

        move.b  d1,d0
        asr.b   #5,d0
        sub.b   d0,d1
        
        move.b  d1,(a1)+
        move.b  d1,(a0)+
        
        dbf     d7,.next
water_init      rts

*************************************************
        section chunky,BSS
chunky  ds.l    256*256/4
        ds.w    256
chunky1 ds.l    256*256/4
        ds.w    256
chunky2 ds.l    256*256/4
        ds.w    256
rnd     ds.l    1


--- Spot 1.3a #118
 * Origin: ������� ����� ��� ������ - ���� ������ ����� ��� ..
(2:5020/1174.19)
SEEN-BY: 2:50/381@FidoNet 461/121 463/18 464/100 467/67 469/999 5001/211
SEEN-BY: 5006/1 5007/1 5010/21 48 49 55 57 62 .1 77 106 109 112 5015/28
SEEN-BY: 5020/15 35 52 68 118 200 225 238 251 252 302 378 400 423 441 443
SEEN-BY: 5020/477 509 618 659 685 689 718 724 747 748 758 869 901 1174 1307
SEEN-BY: 5023/8 5029/5 5030/87 5031/3 5033/2 3 5034/1 5036/1 5049/1
SEEN-BY: 5050/5050 5051/15 5053/16 5054/10 5060/88 5069/1 5080/80 5083/21
SEEN-BY: 5090/2
^PATH: 2:5020/1174@FidoNet 423 443 400 5010/21 57 62



