home *** CD-ROM | disk | FTP | other *** search
/ Fujiology Archive / fujiology_archive_v1_0.iso / !FALCON / LINEOUT / DELTA.ZIP / DELTASRC.ZIP / DELTA.SRC / ZWATER2.SO < prev    next >
Text File  |  2002-12-16  |  9KB  |  547 lines

  1. ; Fixed voxel water. A screen for delta.
  2.  
  3. ;======= EQUATES ========
  4.  
  5. ZWater.WIDTH:        =    150
  6. ZWater.HEIGHT:        =    78
  7. ZWater.TOTALWIDTH:    =    ZWater.WIDTH+1
  8. ZWater.TOTALHEIGHT:    =    ZWater.HEIGHT+1
  9.  
  10. ;======= OBJECT TABLE ========
  11.  
  12. * Must be first in object!!
  13. ZWater.table:
  14.     DC.L    ZWater.mainLoop
  15.     DC.L    ZWater.init
  16.     DC.L    ZWater.setRes
  17.     DC.L    ZWater.setPiss
  18.     DC.L    ZWater.setRain
  19.     DC.L    ZWater.setDrop
  20.     DC.L    ZWater.setPic
  21.     DC.L    0
  22.  
  23. ;======= RESOLUTION SETTING ROUTINE ========
  24.  
  25. ZWater.setRes:
  26.     move.l    frmcnt,d0
  27.     sub.l    lastframecount,d0
  28.     beq.s    .end
  29.  
  30.     move.l    #rts,vbl_gfx
  31.  
  32.     move.w    monitormode,d0
  33.     cmpi.w    #vga60,d0
  34.     beq.s    .vga60
  35.     cmpi.w    #vga100,d0
  36.     beq.s    .vga100
  37.     cmpi.w    #rgb50,d0
  38.     beq.s    .rgb50
  39. ; Unknown monitormode..
  40.     rts
  41. .vga60:    bra.l    vga60_16bit_160_200
  42. .vga100:bra.l    vga100_16bit_160_100
  43. .rgb50:    bra.l    rgb50_16bit_320_100
  44. .end:    rts
  45.  
  46. ;======= INIT SUBROUTINE ========
  47.  
  48. * OUTPUT: d0.l: 0   = All clear.
  49. *               neg = Error! Not initialized!
  50. ZWater.init:
  51.     lea    ZWater.palette,a0
  52.     lea    ZWater.flowPal,a1
  53.     bsr.l    Pal.makeGradientHc
  54.  
  55.     move.l    #$516A32F1,random
  56.  
  57. .success:
  58.     moveq    #0,d0
  59.     rts
  60. .error:    moveq    #-1,d0
  61.     rts
  62.  
  63. ;======= REALTIME INIT SUBROUTINE ========
  64.  
  65. ZWater.realtimeInit:
  66.     move.l    #ZWater.setRes,vbl_gfx
  67.  
  68. ; Run dsp proggy..
  69.     move.l    #(ZWater.p56End-ZWater.p56)/3,d0
  70.     lea    ZWater.p56,a0
  71.     bsr.l    Dsp.loadProgram
  72.  
  73.     bsr    ZWater.sendPal
  74.  
  75.     move.w    $04BC.w,ZWater.startTime
  76.     rts
  77.  
  78. ;======= SCREENINIT SUBROUTINE ========
  79.  
  80. ZWater.initScreen:
  81.     movea.l    scr,a0
  82.     bsr.l    CLEAR_320100TSCR
  83.     rts
  84.  
  85. ;======= MAINLOOP SUBROUTINE ========
  86.  
  87. ZWater.mainLoop:
  88.     move.w    $0468.w,.old468
  89.  
  90.     move.l    frmcnt,d0
  91.     sub.l    lastframecount,d0
  92.     bne.s    .end_realtime_init
  93.     move.l    d0,-(sp)
  94.     bsr    ZWater.realtimeInit
  95.     move.l    (sp)+,d0
  96. .end_realtime_init:
  97.     cmpi.l    #3,d0
  98.     bhs.s    .end_screeninit
  99.     bsr    ZWater.initScreen
  100. .end_screeninit:
  101.  
  102.     movea.l    ZWater.dropRout,a0
  103.     jsr    (a0)
  104.  
  105.     bsr    ZWater.paint
  106.  
  107.     move.w    .old468(pc),d0
  108.     moveq    #1,d3
  109.     cmpi.w    #vga100,monitormode
  110.     bne.s    .wait
  111.     moveq    #2,d3
  112. .wait:    move.w    $0468.w,d2
  113.     sub.w    d0,d2
  114.     cmp.w    d3,d2
  115.     blt.s    .wait
  116.  
  117.     IFEQ    testmode
  118.     lea    scr,a0
  119.     move.l    (a0)+,d0
  120.     move.l    (a0)+,d1
  121.     move.l    (a0),-4(a0)
  122.     move.l    d0,(a0)
  123.     move.l    d1,-8(a0)
  124.     move.l    d0,d1
  125.     lsr.w    #8,d0
  126.     move.l    d0,$ffff8200.w
  127.     move.b    d1,$ffff820d.w
  128.     ENDC
  129.  
  130.     rts
  131.  
  132. .old468:DC.W    0
  133.  
  134. ;======= OBJECT SUBROUTINES ========
  135.  
  136. ZWater.setPiss:
  137.     move.w    $04BC.w,ZWater.startTime
  138.     move.l    #ZWater.piss,ZWater.dropRout
  139.     rts
  140.  
  141. ZWater.setRain:
  142.     move.w    $04BC.w,ZWater.startTime
  143.     move.l    #ZWater.rain,ZWater.dropRout
  144.     rts
  145.  
  146. ZWater.setDrop:
  147.     move.w    $04BC.w,ZWater.startTime
  148.     move.l    #ZWater.dropBigOne,ZWater.dropRout
  149.     rts
  150.  
  151. ZWater.setPic:
  152.     move.w    $04BC.w,ZWater.startTime
  153.     move.l    #ZWater.sendPic,ZWater.dropRout
  154.     rts
  155.  
  156. ZWater.sendPal:
  157.     lea    ZWater.palette,a0
  158.     move.w    #256-1,d7
  159. .loop:    sendWordToDsp    (a0)+
  160.     dbf    d7,.loop
  161.     rts
  162.  
  163. ZWater.piss:
  164.     lea    ZWater.dropTable,a0
  165.     move.w    #1,(a0)+
  166.     move.w    $04BC.w,d0
  167.     sub.w    ZWater.startTime,d0
  168.     move.w    d0,d1
  169.     mulu.w    #11,d1
  170.     lsr.l    #3,d1
  171.     Do_SinModulo    d0
  172.     Do_SinModulo    d1
  173.     lea    sine_tbl,a1
  174.     Get_Sin    a1,d0,d0
  175.     Get_Cos    a1,d1,d1
  176.     muls.w    #ZWater.WIDTH*9/10,d0
  177.     muls.w    #ZWater.HEIGHT*8/10,d1
  178.     swap    d0
  179.     swap    d1
  180.     addi.w    #ZWater.TOTALWIDTH/2,d0
  181.     addi.w    #ZWater.TOTALHEIGHT/2,d1
  182.     mulu.w    #ZWater.TOTALWIDTH,d1
  183.     add.w    d0,d1
  184.     move.w    d1,(a0)+
  185.     move.w    #-500,(a0)+
  186.     lea    ZWater.dropTable,a0
  187.     bra    ZWater.sendDrops
  188.  
  189. ZWater.rain:
  190.     lea    ZWater.dropTable,a0
  191.     move.w    #1,(a0)+
  192.  
  193.     move.l    random,d0
  194.     move.l    d0,d1
  195.     mulu.w    d0,d0
  196.     eor.l    d1,d0
  197.     addq.l    #7,d0
  198.     move.l    d0,random
  199.  
  200.     muls.w    #ZWater.WIDTH*9/10,d0
  201.     muls.w    #ZWater.HEIGHT*7/10,d1
  202.     swap    d0
  203.     swap    d1
  204.     addi.w    #ZWater.TOTALWIDTH/2,d0
  205.     addi.w    #ZWater.HEIGHT*9/20,d1
  206.     mulu.w    #ZWater.TOTALWIDTH,d1
  207.     add.w    d0,d1
  208.     move.w    d1,(a0)+
  209.     move.w    #-500,(a0)+
  210.     lea    ZWater.dropTable,a0
  211.     bra    ZWater.sendDrops
  212.  
  213. ZWater.dropBigOne:
  214.     lea    ZWater.dropTable,a0
  215.     move.w    $04BC.w,d0
  216.     sub.w    ZWater.startTime,d0
  217.     andi.w    #$0400,d0
  218.     bne.s    .send_none
  219.  
  220.     move.w    #ZWater.TOTALWIDTH*(ZWater.HEIGHT/2)+ZWater.TOTALWIDTH/2,d1
  221.     move.w    #1500,d2
  222.     move.w    #6,(a0)+
  223.     move.w    d1,(a0)+
  224.     move.w    d2,(a0)+
  225.     addq.w    #1,d1
  226.     move.w    d1,(a0)+
  227.     move.w    d2,(a0)+
  228.     addq.w    #1,d1
  229.     move.w    d1,(a0)+
  230.     move.w    d2,(a0)+
  231.     addi.w    #ZWater.TOTALWIDTH-2,d1
  232.     move.w    d1,(a0)+
  233.     move.w    d2,(a0)+
  234.     addq.w    #1,d1
  235.     move.w    d1,(a0)+
  236.     move.w    d2,(a0)+
  237.     addq.w    #1,d1
  238.     move.w    d1,(a0)+
  239.     move.w    d2,(a0)+
  240.     lea    ZWater.dropTable,a0
  241.     bra    ZWater.sendDrops
  242. .send_none:
  243.     move.w    #0,(a0)
  244.     bra    ZWater.sendDrops
  245.  
  246. ; Drops a heightfield in the water.
  247. ZWater.sendPic:
  248.     move.w    $04BC.w,d0
  249.     sub.w    ZWater.startTime,d0
  250.     clr.l    d6
  251.     move.w    d0,d6
  252.     andi.w    #$0400,d0
  253.     bne    .send_none
  254.  
  255.     moveq    #-1,d0
  256.     sendLongToDsp    d0
  257.  
  258.     lea    ZWater.rleMap,a1
  259.     movem.w    (a1)+,d2/d3
  260.     movea.l    a1,a2                    ; a2=scanoffsets
  261.     lea    (a1,d3.l*2),a1                ; skip scanoffset table
  262.     move.l    d2,d0
  263.     move.l    d3,d1
  264.     lsr.l    #1,d0
  265.     lsr.l    #1,d1
  266.     neg.l    d0
  267.     neg.l    d1
  268.     addi.l    #ZWater.TOTALWIDTH/2,d0
  269.     addi.l    #ZWater.TOTALHEIGHT/2,d1
  270.     sendLongToDsp    d0                ; lx
  271.     sendLongToDsp    d1                ; ty
  272.     sendLongToDsp    d2                ; w
  273.     sendLongToDsp    d3                ; h
  274.     lsl.w    #6,d6
  275.     lsl.l    #7,d6
  276.     sendLongToDsp    d6                ; z
  277.  
  278.     clr.l    d0
  279.     subq.w    #1,d3
  280.     lea    $FFFFA204.w,a0
  281.  
  282. .yloop:    move.w    (a2)+,d0
  283.     lea    (a1,d0.l),a3
  284.     clr.l    d6
  285.  
  286. .wait:    btst.b    #1,$FFFFA202.w
  287.     beq.s    .wait
  288.  
  289. .block_loop:
  290.     move.w    (a3)+,d0
  291.     bmi.s    .masked
  292. ; Send some emptyness..
  293.     move.l    d0,(a0)
  294.     bra.s    .next
  295. ; Process some pixels..
  296. .masked:move.l    d0,(a0)
  297.     andi.w    #$7FFF,d0
  298.     move.w    d0,d4
  299.     subq.w    #1,d4
  300. .pixel_loop:
  301.     clr.l    d1
  302.     move.b    (a3)+,d1
  303.     lsl.l    #1,d1
  304.     move.l    d1,(a0)
  305.     dbra    d4,.pixel_loop
  306. .next:    add.w    d0,d6
  307.     cmp.w    d2,d6
  308.     blt.s    .block_loop
  309.  
  310.     dbra    d3,.yloop
  311.     rts
  312.  
  313. .send_none:
  314.     clr.l    d0
  315.     sendLongToDsp    d0
  316.     rts
  317.  
  318. ZWater.dropDummy:
  319.     lea    ZWater.dropTable,a0
  320.     clr.w    (a0)
  321.     bra    ZWater.sendDrops
  322.     
  323. ; INPUT:
  324. ; a0: droplet table
  325. ZWater.sendDrops:
  326.     moveq    #0,d7
  327.     move.w    (a0)+,d7
  328.     sendLongToDsp    d7
  329.     subq.w    #1,d7
  330.     bmi.s    .end
  331.  
  332. .loop:    move.w    (a0)+,d0
  333.     sendLongToDsp    d0
  334.     move.w    (a0)+,d0
  335.     ext.l    d0
  336.     sendLongToDsp    d0
  337.     dbra    d7,.loop
  338.  
  339. .end:    rts
  340.  
  341. ZWater.paint:
  342.     movea.l    scr,a0
  343.     move.w    #ZWater.WIDTH-1,d7
  344.     lea    $FFFFA206.w,a4
  345.     clr.l    d0
  346.     clr.l    d5
  347.     moveq    #1<<4-1,d3
  348.  
  349.     move.w    monitormode,d1
  350.     cmpi.w    #vga60,d1
  351.     beq    ZWater.paintVga60
  352.     cmpi.w    #rgb50,d1
  353.     beq    ZWater.paintRgb50
  354.  
  355. ZWater.paintVga100:
  356.     adda.l    #(160*99+(160-ZWater.WIDTH)/2)*2,a0
  357.     movea.w    #160*2,a5
  358.     lea    .jump(pc),a3
  359.  
  360. .columnloop:
  361.     movea.l    a0,a6
  362.  
  363. .zloop:
  364. ; Paint the column.
  365.     receiveWordFromDsp    d0
  366.     move.w    d0,d1
  367.     move.w    d0,d6
  368.     and.l    d3,d0
  369.     lsr.w    #4,d6
  370.     neg.l    d0
  371.     jmp    (a3,d0.l*4)
  372.  
  373. .loop:
  374.     REPT    1<<4
  375.     move.w    (a4),(a6)
  376.     suba.l    a5,a6
  377.     ENDR
  378. .jump:    dbf    d6,.loop
  379.  
  380. ; Clear the rest of the column.
  381.     moveq    #100,d2                ; d2.b=top=100
  382.     sub.w    d1,d2
  383.     ble.s    .end_clear
  384.     subq.w    #1,d2
  385. .clearloop:
  386.     move.w    d5,(a6)
  387.     suba.l    a5,a6
  388.     dbf    d2,.clearloop
  389. .end_clear:
  390.  
  391.     addq    #2,a0                ; Move to next column.
  392.     dbf    d7,.columnloop
  393.     rts
  394.  
  395. ZWater.paintVga60:
  396.     adda.l    #(160*199+(160-ZWater.WIDTH)/2)*2,a0
  397.     movea.w    #160*2,a5
  398.     lea    .jump(pc),a3
  399.  
  400. .columnloop:
  401.     movea.l    a0,a6
  402.  
  403. .zloop:
  404. ; Paint the column.
  405.     receiveWordFromDsp    d0
  406.     move.w    d0,d1
  407.     move.w    d0,d6
  408.     and.l    d3,d0
  409.     lsr.w    #4,d6
  410.     mulu.w    #10,d0
  411.     neg.l    d0
  412.     jmp    (a3,d0.l)
  413.  
  414. .loop:
  415.     REPT    1<<4
  416.     move.w    (a4),d0
  417.     move.w    d0,(a6)
  418.     suba.l    a5,a6
  419.     move.w    d0,(a6)
  420.     suba.l    a5,a6
  421.     ENDR
  422. .jump:    dbf    d6,.loop
  423.  
  424. ; Clear the rest of the column.
  425.     moveq    #100,d2                ; d2.b=top=100
  426.     sub.w    d1,d2
  427.     ble.s    .end_clear
  428.     subq.w    #1,d2
  429. .clearloop:
  430.     move.w    d5,(a6)
  431.     suba.l    a5,a6
  432.     move.w    d5,(a6)
  433.     suba.l    a5,a6
  434.     dbf    d2,.clearloop
  435. .end_clear:
  436.  
  437.     addq    #2,a0                ; Move to next column.
  438.     dbf    d7,.columnloop
  439.     rts
  440.  
  441. ZWater.paintRgb50:
  442.     adda.l    #(320*99+2*((160-ZWater.WIDTH)/2))*2,a0
  443.     movea.w    #320*2,a5
  444.     lea    2(a5),a2
  445.     lea    .jump(pc),a3
  446.  
  447. .columnloop:
  448.     movea.l    a0,a6
  449.  
  450. .zloop:
  451. ; Paint the column.
  452.     receiveWordFromDsp    d0
  453.     move.w    d0,d1
  454.     move.w    d0,d6
  455.     and.l    d3,d0
  456.     lsr.w    #4,d6
  457.     neg.l    d0
  458.     jmp    (a3,d0.l*8)
  459.  
  460. .loop:
  461.     REPT    1<<4
  462.     move.w    (a4),d0
  463.     move.w    d0,(a6)+
  464.     move.w    d0,(a6)
  465.     suba.l    a2,a6
  466.     ENDR
  467. .jump:    dbf    d6,.loop
  468.  
  469. ; Clear the rest of the column.
  470.     moveq    #100,d2                ; d2.b=top=100
  471.     sub.w    d1,d2
  472.     ble.s    .end_clear
  473.     subq.w    #1,d2
  474. .clearloop:
  475.     move.l    d5,(a6)
  476.     suba.l    a5,a6
  477.     dbf    d2,.clearloop
  478. .end_clear:
  479.  
  480.     addq    #4,a0                ; Move to next column.
  481.     dbf    d7,.columnloop
  482.     rts
  483.  
  484. ;======= OBJECT DATA ========
  485.  
  486.     DATA
  487.  
  488. ZWater.p56:
  489.     INCBIN    ZWATER2B.P56
  490. ZWater.p56End:
  491.     EVEN
  492.  
  493. ZWater.flowPal:
  494.     IFNE    1
  495.     DC.W    (.end-.start)/4-1
  496.     DC.W    5
  497. .start:    DC.L    $00000000
  498.     DC.L    $00000000
  499.     DC.L    $0F280018
  500.     DC.L    $1F500030
  501.     DC.L    $2F780058
  502.     DC.L    $3FA00070
  503.     DC.L    $4FC80088
  504.     DC.L    $5FF000A0
  505.     DC.L    $6FFF00B8
  506.     DC.L    $7FFF00D0
  507.     DC.L    $8FFF00E8
  508.     DC.L    $9FFF00F0
  509.     DC.L    $AFFF00FF
  510.     DC.L    $BFFF00FF
  511. .end:    
  512.     ELSE
  513.     DC.W    9
  514.     DC.W    5
  515. .start:    DC.L    $00000000
  516.     DC.L    $00000000
  517.     DC.L    $3F000000
  518.     DC.L    $9F000000
  519.     DC.L    $FF3F003F
  520.     DC.L    $FF7F007F
  521.     DC.L    $FFFF00FF
  522.     DC.L    $FFFF00FF
  523.     DC.L    $FFFF00FF
  524.     DC.L    $FFFF00FF
  525. .end:    
  526.     ENDC
  527.  
  528. ZWater.rleMap:
  529.     INCBIN    WHEEL.RLE
  530.     EVEN
  531.  
  532. ZWater.dropRout:
  533. ;    DC.L    ZWater.dropDummy
  534.     DC.L    ZWater.piss
  535.  
  536. ;======= OBJECT RESERVES ========
  537.  
  538.     BSS
  539.  
  540. ZWater.dropTable:    
  541.     DS.L    1+32
  542. ZWater.palette:
  543.     DS.W    4096
  544. ZWater.startTime:
  545.     DS.W    1
  546.  
  547. ;======= END OF DEMO-EFFECT OBJECT ========