home *** CD-ROM | disk | FTP | other *** search
/ Fujiology Archive / fujiology_archive_v1_0.iso / !FALCON / LINEOUT / DELTA.ZIP / DELTASRC.ZIP / DELTA.SRC / FLARE.SO < prev    next >
Text File  |  2002-09-05  |  13KB  |  696 lines

  1. ; Flare. Looks okay. Maybe mess up colors to match demo a bit.
  2. ; A screen for delta.
  3.  
  4. ;======= OBJECT EQUATES ========
  5.  
  6. ; Physical map dimensions.
  7. Flare.MAP_WIDTH:    =    256
  8. Flare.MAP_HEIGHT:    =    256
  9. Flare.MAP_SIZE:        =    Flare.MAP_WIDTH*Flare.MAP_HEIGHT
  10. Flare.MAP_MID:        =    Flare.MAP_WIDTH-160+(Flare.MAP_HEIGHT-100)*Flare.MAP_WIDTH
  11.  
  12. ; Logical (visible) map dimensions!
  13. Flare.WIDTH:        =    256
  14. Flare.HEIGHT:        =    256
  15.  
  16.             RSRESET
  17. Flare.flowIndexTable:    RS.W    256
  18. Flare.flowColorTable:    RS.L    1024
  19. Flare.destFlowTable:    RS.L    64
  20. Flare.fieldTable:    RS.W    Flare.MAP_SIZE
  21. Flare.BLOCK_SIZE:    RS.B    0
  22.  
  23. ;======= OBJECT TABLE ========
  24.  
  25. * Must be first in object!!
  26. Flare.table:
  27.     DC.L    Flare.mainLoop
  28.     DC.L    Flare.init
  29.     DC.L    Flare.setRes
  30. * Add more addresses here..
  31.     DC.L    0
  32.  
  33. ;======= RESOLUTION SETTING ROUTINE ========
  34.  
  35. Flare.setRes:
  36.     IFEQ    testmode
  37.     move.l    frmcnt,d0
  38.     sub.l    lastframecount,d0
  39.     beq.s    .end
  40.  
  41.     move.l    #rts,vbl_gfx
  42.  
  43.     move.w    monitormode,d0
  44.     cmpi.w    #vga60,d0
  45.     beq.s    .vga60
  46.     cmpi.w    #vga100,d0
  47.     beq.s    .vga100
  48.     cmpi.w    #rgb50,d0
  49.     beq.s    .rgb50
  50. * Unknown monitormode..
  51.     rts
  52. .vga60:    bra.l    vga60_16bit_160_200
  53. .vga100:bra.l    vga100_16bit_160_100
  54. .rgb50:    bra.l    rgb50_16bit_320_100
  55.     ENDC
  56. .end:    rts
  57.  
  58. ;======= INIT SUBROUTINE ========
  59.  
  60. ; OUTPUT:
  61. ; d0.l: 0: All clear, <0: Error! Not initialized!
  62. Flare.init:
  63.     move.l    #Flare.BLOCK_SIZE,d0
  64.     bsr.l    Mem.register
  65.  
  66. .success:
  67.     moveq    #0,d0
  68.     rts
  69. .error:    moveq    #-1,d0
  70.     rts
  71.  
  72. ;======= REALTIME INIT SUBROUTINE ========
  73.  
  74. Flare.realtimeInit:
  75.     move.l    #Flare.setRes,vbl_gfx
  76.  
  77.     bsr.l    Mem.getBlock
  78.     move.l    d0,Flare.baseAdr
  79.  
  80.     bsr.w    Flare.calcField
  81.     rts
  82.  
  83. ;======= SCREENINIT SUBROUTINE ========
  84.  
  85. Flare.initScreen:
  86. ; Insert screenarea initialising, etc. in here!
  87.     rts
  88.  
  89. ;======= MAINLOOP SUBROUTINE ========
  90.  
  91. Flare.mainLoop:
  92.     move.w    $0468,.old468
  93.  
  94.     move.l    frmcnt,d0
  95.     sub.l    lastframecount,d0
  96.     bne.s    .end_realtime_init
  97.     move.l    d0,-(sp)
  98.     bsr.w    Flare.realtimeInit
  99.     move.l    (sp)+,d0
  100. .end_realtime_init:
  101.     cmpi.l    #3,d0
  102.     bhs.s    .end_screeninit
  103.     bsr.w    Flare.initScreen
  104. .end_screeninit:
  105.  
  106.     lea    Flare.flowOrderTable,a0
  107.     move.w    (a0)+,d0
  108.     addq    #2,a0
  109.     moveq    #1,d1
  110.     lsl.l    d0,d1
  111.     subq.w    #1,d1
  112.     move.w    $4bc.w,d0
  113.     lsr.w    #2,d0
  114.     move.w    d0,d2
  115.     lsr.w    #8,d2
  116.     and.w    d1,d2
  117.     lea    (a0,d2.w*4),a0
  118.     movea.l    (a0)+,a1
  119.     movea.l    (a0)+,a2
  120.     andi.w    #$00ff,d0
  121.     addq.w    #1,d0
  122.     movea.l    Flare.baseAdr,a0
  123.     adda.l    #Flare.destFlowTable,a0
  124.     bsr.w    Flare.interpolateInstructionTable
  125.  
  126. ; Calculate the new pallette.
  127.     movea.l    Flare.baseAdr,a1
  128.     adda.l    #Flare.destFlowTable,a1
  129.     movea.l    Flare.baseAdr,a0
  130.     adda.l    #Flare.flowColorTable,a0
  131.     bsr.l    Pal.makeGradient2Hc
  132. ; Calculate spectrum.
  133.     bsr.w    Flare.calcSpectralFlowTable
  134.  
  135.     IFNE    0
  136.     movec    cacr,d0
  137.     move.l    d0,-(sp)
  138. ; d+i on and in burst
  139. ; write alloc off.
  140.     ori.w    #%0001000100010001,d0
  141.     andi.w    #%1101111111111111,d0
  142.     movec    d0,cacr
  143.     ENDC
  144.  
  145. ; Paint the flare using current spectrum and pallette.
  146.     bsr.w    Flare.paint
  147.  
  148.     IFNE    0
  149.     move.l    (sp)+,d0
  150.     movec    d0,cacr
  151.     ENDC
  152.  
  153.     IFEQ    testmode
  154.     lea    scr,a0
  155.     move.l    (a0)+,d0
  156.     move.l    (a0)+,d1
  157.     move.l    (a0),-4(a0)
  158.     move.l    d0,(a0)
  159.     move.l    d1,-8(a0)
  160.     move.l    d0,d1
  161.     lsr.w    #8,d0
  162.     move.l    d0,$ffff8200.w
  163.     move.b    d1,$ffff820d.w
  164.  
  165.     move.w    .old468(pc),d0
  166. .wait:    cmp.w    $0468.w,d0
  167.     beq.s    .wait
  168.     ENDC
  169.  
  170.     rts
  171.  
  172. .old468:DC.W    0
  173.  
  174. ;======= OBJECT SUBROUTINES ========
  175.  
  176. ; Generate offsettable flare.
  177. ; Only one quadrant is actually calculated. The rest is (inverse) mirrored.
  178. ; 0 1  + -
  179. ; 2 3  - +
  180. ; note: due to optimisation, only works with square dimensions! w=h.
  181. Flare.calcField:
  182.  
  183.     IFNE    1
  184.  
  185. ; speed-optimised version using precalced octant.
  186.     movea.l    Flare.baseAdr,a0
  187.     adda.l    #Flare.fieldTable,a0
  188.     lea    Tunnel.flareOctant,a6        ; a6: flare data
  189.     lea    Tunnel.flareOctant,a5        ; a6: flare data
  190.     lea    Flare.MAP_WIDTH*2(a0),a1
  191.     movea.l    a0,a2
  192.     adda.l    #Flare.MAP_WIDTH*(Flare.MAP_HEIGHT-1)*2,a2
  193.     movea.l    a0,a3
  194.     adda.l    #Flare.MAP_SIZE*2,a3
  195.     move.l    #Flare.MAP_HEIGHT-1,d7
  196.     clr.l    d5
  197.  
  198. .yloop:    move.l    #Flare.MAP_WIDTH-1,d6
  199.     lea    (a5,d5.l),a4
  200.     move.w    #127*2,d3
  201.  
  202. .xloop:    cmp.l    d6,d7
  203.     bhs.s    .calc
  204.  
  205. ; In lower triangle, so copy/mirror some shit.
  206.     move.w    (a4),d4
  207.     subi.w    #128*256,d4
  208.     move.w    d4,(a2)+
  209.     move.w    d4,-(a1)
  210.     not.w    d4
  211.     not.b    d4
  212.     move.w    d4,(a0)+
  213.     move.w    d4,-(a3)
  214.     adda.w    d3,a4
  215.     subq.w    #2,d3
  216.     bra.s    .next
  217.  
  218. ; In upper triangle, so calc it..
  219. .calc:    move.w    (a6)+,d4
  220.     move.w    d4,(a0)+
  221.     move.w    d4,-(a3)
  222.     not.w    d4
  223.     not.b    d4
  224.     move.w    d4,(a2)+
  225.     move.w    d4,-(a1)
  226.  
  227. .next:    subq.w    #2,d6
  228.     bpl.s    .xloop
  229.  
  230.     addq    #2,d5
  231.     adda.w    #(Flare.MAP_WIDTH/2)*2,a0
  232.     suba.w    #(Flare.MAP_WIDTH*3/2)*2,a2
  233.     adda.w    #(Flare.MAP_WIDTH*3/2)*2,a1
  234.     suba.w    #(Flare.MAP_WIDTH/2)*2,a3
  235.     subq.w    #2,d7
  236.     bpl.s    .yloop
  237.  
  238.     ELSE
  239.  
  240.     lea    Flare.squareTable,a0
  241.     move.w    #-255,d0
  242.  
  243. .calc_sqr_loop:
  244.     move.w    d0,d1
  245.     muls.w    d1,d1
  246.     move.l    d1,(a0)+
  247.     addq.w    #2,d0
  248.     bmi.s    .calc_sqr_loop
  249.  
  250.     movea.l    Flare.baseAdr,a0
  251.     adda.l    #Flare.fieldTable,a0
  252.     movea.l    a0,a6                ; a6: flare data
  253.     lea    Flare.MAP_WIDTH*2(a0),a1
  254.     movea.l    a0,a2
  255.     adda.l    #Flare.MAP_WIDTH*(Flare.MAP_HEIGHT-1)*2,a2
  256.     movea.l    a0,a3
  257.     adda.l    #Flare.MAP_SIZE*2,a3
  258.     move.l    #Flare.MAP_HEIGHT-1,d7
  259.     lea    Flare.squareTable,a4
  260.  
  261. .yloop:    move.l    #Flare.MAP_WIDTH-1,d6
  262.     move.l    (a4)+,d5
  263.     lea    Flare.squareTable,a5
  264.  
  265. .xloop:    cmp.l    d6,d7
  266.     bhs.s    .calc
  267.  
  268. ; In lower triangle, so copy/mirror some shit.
  269.     move.w    (a6),d4
  270.     subi.w    #128*256,d4
  271.     move.w    d4,(a2)+
  272.     move.w    d4,-(a1)
  273.     neg.w    d4
  274.     neg.b    d4
  275.     move.w    d4,(a0)+
  276.     move.w    d4,-(a3)
  277.     bra.s    .next
  278.  
  279. ; In upper triangle, so calc it..
  280. .calc:
  281.  
  282. ; Calc raynumber.. tan(rayangle)=y/x, rayangle=arctan(y/x)
  283.     move.l    d7,d0
  284.     move.l    d6,d1
  285.     bsr.l    Frac.atan2
  286. ; Convert radians to degrees [0..127].
  287.     lsr.l    #8,d1
  288.     mulu.w    #20860,d1
  289.     lsr.l    #8,d1
  290.     move.w    d1,d4
  291.  
  292. ; Calc ringnumber..
  293.     move.l    (a5),d1
  294.     add.l    d5,d1
  295. ; d1.l=trunc(2x)^2+trunc(2y)^2
  296.     bsr.l    Math.sqrt
  297. ; d0.l=sqrt[trunc(2x)^2+trunc(2y)^2]
  298.     divu.w    #362,d0                ; d0=/(2*sqrt[2*(128)^2])
  299.     lsr.w    #8,d0
  300.     move.b    d0,d4
  301.  
  302.     move.w    d4,(a0)+
  303.     move.w    d4,-(a3)
  304.     neg.w    d4
  305.     neg.b    d4
  306.     move.w    d4,(a2)+
  307.     move.w    d4,-(a1)
  308.  
  309. .next:    addq    #4,a5
  310.     adda.w    #Flare.MAP_WIDTH*2,a6
  311.     subq.w    #2,d6
  312.     bpl.s    .xloop
  313.  
  314.     adda.l    #(1-Flare.MAP_WIDTH*(Flare.MAP_HEIGHT/2))*2,a6
  315.     adda.w    #(Flare.MAP_WIDTH/2)*2,a0
  316.     suba.w    #(Flare.MAP_WIDTH*3/2)*2,a2
  317.     adda.w    #(Flare.MAP_WIDTH*3/2)*2,a1
  318.     suba.w    #(Flare.MAP_WIDTH/2)*2,a3
  319.     subq.w    #2,d7
  320.     bpl.s    .yloop
  321.  
  322.     ENDC
  323.  
  324.     rts
  325.  
  326. * Interpolates between two truecolor instruction tables.
  327. * NOTE: Tables must all have the same length!
  328. * INPUT:
  329. * d0.w: interpolation point [1..256]
  330. * a0: destination instruction table
  331. * a1: truecolor instruction table start
  332. * a2: truecolor instruction table end
  333. Flare.interpolateInstructionTable:
  334.     move.w    (a1)+,d7
  335.     move.w    d7,(a0)+
  336.     move.w    (a1)+,(a0)+
  337.     subq.w    #1,d7
  338.     addq    #4,a2
  339.  
  340. .loop:
  341. * Calculate source 2 colors.
  342.     moveq    #0,d1
  343.     move.b    (a2)+,d1
  344.     mulu.w    d0,d1
  345.     lsr.l    #8,d1
  346.     moveq    #0,d2
  347.     move.b    (a2)+,d2
  348.     mulu.w    d0,d2
  349.     lsr.l    #8,d2
  350.     moveq    #0,d3
  351.     move.w    (a2)+,d3
  352.     mulu.w    d0,d3
  353.     lsr.l    #8,d3
  354.  
  355.     subi.w    #256,d0
  356.     neg.w    d0
  357.  
  358. * Calculate source 1 colors.
  359.     moveq    #0,d4
  360.     move.b    (a1)+,d4
  361.     mulu.w    d0,d4
  362.     lsr.l    #8,d4
  363.     moveq    #0,d5
  364.     move.b    (a1)+,d5
  365.     mulu.w    d0,d5
  366.     lsr.l    #8,d5
  367.     moveq    #0,d6
  368.     move.w    (a1)+,d6
  369.     mulu.w    d0,d6
  370.     lsr.l    #8,d6
  371.  
  372.     subi.w    #256,d0
  373.     neg.w    d0
  374.  
  375. * Mix the bastards.
  376.     add.w    d1,d4
  377.     add.w    d2,d5
  378.     add.w    d3,d6
  379.  
  380. * Output the color.
  381.     move.b    d4,(a0)+
  382.     move.b    d5,(a0)+
  383.     move.w    d6,(a0)+
  384.  
  385.     dbra    d7,.loop
  386.     rts
  387.  
  388. Flare.calcFlowTables:
  389.     movea.l    Flare.baseAdr,a0
  390.     adda.l    #Flare.flowColorTable,a0
  391.     move.w    #512-1,d6
  392.  
  393. .colorloop:
  394.     move.w    #$ffd0,d1
  395.     move.w    d6,d0
  396.     move.w    #32-1,d2
  397.     add.w    d2,d2
  398.     add.w    d2,d1
  399.     add.w    d0,d1
  400.     bpl.s    .pok
  401.     moveq    #0,d1
  402.     bra.s    .oki
  403. .pok:    cmpi.w    #$01ff,d1
  404.     bls.s    .oki
  405.     move.w    #$01ff,d1
  406.     move.w    #$ffff,(a0)+
  407.     bra.s    .endcolor
  408. .oki:    lsl.w    #8,d1
  409.     move.w    d1,d0
  410.     andi.w    #$f800,d1
  411.     lsr.w    #6,d0
  412.     move.w    d0,d2
  413.     lsr.w    #8,d2
  414.     lsr.w    #1,d2
  415.     andi.w    #$07e0,d0
  416.     andi.w    #$001f,d2
  417.     or.w    d0,d1
  418.     or.w    d2,d1
  419.     move.w    d1,(a0)+
  420. .endcolor:
  421.     dbra    d6,.colorloop
  422.  
  423.     rts
  424.  
  425. ; Calculates a spectral table as a sinoid. This uses 3 sines with different
  426. ; period and phase.
  427. Flare.calcSpectralFlowTable:
  428.     lea    sine_tbl,a1
  429.     movea.l    Flare.baseAdr,a0
  430.     adda.l    #Flare.flowIndexTable,a0
  431.      move.w    #256-1,d7
  432.     move.w    $4bc.w,d1
  433.     move.w    d1,d2
  434.     move.w    d1,d3
  435.     mulu.w    #5,d3
  436.     lsr.l    #2,d3
  437.     mulu.w    #3,d1
  438.     movea.w    #8,a2
  439.     movea.w    #16,a3
  440.     movea.w    #16,a4
  441. * d1.w: phase 1
  442. * d2.w:    phase 2
  443. * d3.w:    phase 3
  444. * a2.w: angular step 1
  445. * a3.w: angular step 2
  446. * a4.w: angular step 3
  447.  
  448. .loop:    Do_SinModulo    d1
  449.     Do_SinModulo    d2
  450.     Do_SinModulo    d3
  451.     move.w    (a1,d1.w*4),d0
  452.     add.w    2(a1,d2.w*4),d0
  453.     add.w    (a1,d3.w*4),d0
  454.     bmi.s    .negative
  455.     not.w    d0
  456. .negative:
  457.     lsr.w    #8,d0
  458.     move.w    d0,(a0)+
  459.     add.w    a2,d1
  460.     add.w    a3,d2
  461.     add.w    a4,d3
  462.     dbra    d7,.loop
  463.     rts
  464.  
  465. Flare.paint:
  466.     movea.l    scr,a0
  467.     movea.l    Flare.baseAdr,a1
  468.     adda.l    #Flare.fieldTable+Flare.MAP_MID,a1
  469.  
  470.     lea    sine_tbl,a2
  471.     move.w    $4bc.w,d0
  472.     move.w    d0,d1
  473.     mulu.w    #5,d1
  474.     lsr.w    #3,d1
  475.     Do_SinModulo    d0
  476.     Do_SinModulo    d1
  477.     Get_Sin    a2,d0,d0
  478.     Get_Cos    a2,d1,d1
  479.     muls.w    #Flare.WIDTH-160,d0
  480.     muls.w    #Flare.HEIGHT-100,d1
  481.     swap    d0
  482.     swap    d1
  483.     muls.w    #Flare.MAP_WIDTH,d1
  484.     add.w    d0,d1
  485.     lea    (a1,d1.w*2),a1
  486.  
  487.     movea.l    Flare.baseAdr,a2
  488.     adda.l    #Flare.flowColorTable,a2
  489.     movea.l    Flare.baseAdr,a3
  490.     adda.l    #Flare.flowIndexTable,a3
  491.     moveq    #100-1,d7
  492.     moveq    #0,d0
  493.     moveq    #0,d1
  494.  
  495.     move.w    monitormode,d2
  496.     cmpi.w    #vga60,d2
  497.     beq    Flare.paintVga60
  498.     cmpi.w    #vga100,d2
  499.     beq    Flare.paintVga100
  500.     cmpi.w    #rgb50,d2
  501.     beq    Flare.paintRgb50
  502. * Unknown monitormode..
  503.     rts
  504.  
  505. Flare.paintVga100:
  506. .yloop:    moveq    #160/10-1,d6
  507.  
  508. .xloop:
  509.     REPT    10
  510.     move.b    (a1)+,d1
  511.     move.w    (a3,d1.l*2),d0
  512.     move.b    (a1)+,d1
  513.     add.l    d1,d0
  514.     move.w    (a2,d0.l*4),(a0)+
  515.     ENDR
  516.     dbf    d6,.xloop
  517.  
  518.     lea    (Flare.MAP_WIDTH-160)*2(a1),a1
  519.     dbf    d7,.yloop
  520.     rts
  521.  
  522. Flare.paintVga60:
  523.     movea.w    #160*2,a5
  524.     lea    (a0,a5.l),a6
  525.  
  526. .yloop:    moveq    #160/10-1,d6
  527.  
  528. .xloop:
  529.     REPT    10
  530.     moveq    #0,d0
  531.     move.b    (a1)+,d1
  532.     move.b    (a1)+,d0
  533.     add.w    (a3,d1.l*2),d0
  534.     move.w    (a2,d0.l*4),d0
  535.     move.w    d0,(a0)+
  536.     move.w    d0,(a6)+
  537.     ENDR
  538.     dbf    d6,.xloop
  539.  
  540.     lea    (Flare.MAP_WIDTH-160)*2(a1),a1
  541.     adda.l    a5,a0
  542.     adda.l    a5,a6
  543.     dbf    d7,.yloop
  544.     rts
  545.  
  546. Flare.paintRgb50:
  547. .yloop:    moveq    #160/10-1,d6
  548.  
  549. .xloop:
  550.     REPT    10
  551.     move.b    (a1)+,d1
  552.     move.w    (a3,d1.l*2),d0
  553.     move.b    (a1)+,d1
  554.     add.l    d1,d0
  555.     move.l    (a2,d0.l*4),(a0)+
  556.     ENDR
  557.     dbf    d6,.xloop
  558.  
  559.     lea    (Flare.MAP_WIDTH-160)*2(a1),a1
  560.     dbf    d7,.yloop
  561.     rts
  562.  
  563. ;======= OBJECT DATA ========
  564.  
  565.     DATA
  566.  
  567. Flare.flowOrderTable:
  568.     DC.W    2,0                * 2log of amount, pad value
  569.     DC.L    Flare.flowTable2
  570.     DC.L    Flare.flowTable3
  571.     DC.L    Flare.flowTable4
  572.     DC.L    Flare.flowTable5
  573.     DC.L    Flare.flowTable2        * repeated first for wrapping
  574.  
  575. Flare.flowTable1:
  576.     DC.W    18    (.end-.start)/4
  577.     DC.W    5
  578. .start:    DC.L    $00000000
  579.     DC.L    $003f0000
  580.     DC.L    $007f0000
  581.     DC.L    $3fdf0000
  582.     DC.L    $7fff0000
  583.     DC.L    $dfff0000
  584.     DC.L    $ffff0000
  585.     DC.L    $ffff003f
  586.     DC.L    $ffff007f
  587.     DC.L    $ffff00bf
  588.     DC.L    $ffff00ff
  589.     DC.L    $ffff00ff
  590.     DC.L    $ffff00ff
  591.     DC.L    $ffff00ff
  592.     DC.L    $ffff00ff
  593.     DC.L    $ffff00ff
  594.     DC.L    $ffff00ff
  595.     DC.L    $ffff00ff
  596. .end:
  597.  
  598. Flare.flowTable2:
  599.     DC.W    18    (.end-.start)/4
  600.     DC.W    5
  601. .start:    DC.L    $ffff0000
  602.     DC.L    $ffff0000
  603.     DC.L    $ffff0000
  604.     DC.L    $ffff0000
  605.     DC.L    $ffff0000
  606.     DC.L    $ffff0000
  607.     DC.L    $ffff0000
  608.     DC.L    $ffbf0000
  609.     DC.L    $ff7f0000
  610.     DC.L    $ff3f0000
  611.     DC.L    $ff000000
  612.     DC.L    $ff000000
  613.     DC.L    $bf000000
  614.     DC.L    $7f000000
  615.     DC.L    $3f000000
  616.     DC.L    $00000000
  617.     DC.L    $00000000
  618. .end:
  619.  
  620. Flare.flowTable3:
  621.     DC.W    18    (.end-.start)/4
  622.     DC.W    5
  623. .start:    DC.L    $00ff00ff
  624.     DC.L    $00ff00ff
  625.     DC.L    $00ff00ff
  626.     DC.L    $00ff00ff
  627.     DC.L    $00ff00ff
  628.     DC.L    $00ff00ff
  629.     DC.L    $00ff00ff
  630.     DC.L    $00bf00ff
  631.     DC.L    $007f00ff
  632.     DC.L    $003f00ff
  633.     DC.L    $000000ff
  634.     DC.L    $000000ff
  635.     DC.L    $000000bf
  636.     DC.L    $0000007f
  637.     DC.L    $0000003f
  638.     DC.L    $00000000
  639.     DC.L    $00000000
  640. .end:
  641.  
  642. Flare.flowTable4:
  643.     DC.W    18    (.end-.start)/4
  644.     DC.W    5
  645. .start:    DC.L    $00ff00ff
  646.     DC.L    $00ff00ff
  647.     DC.L    $00ff00ff
  648.     DC.L    $00ff00ff
  649.     DC.L    $00ff00ff
  650.     DC.L    $00ff00ff
  651.     DC.L    $00ff00ff
  652.     DC.L    $00ff00bf
  653.     DC.L    $00ff007f
  654.     DC.L    $00ff003f
  655.     DC.L    $00ff0000
  656.     DC.L    $00ff0000
  657.     DC.L    $00bf0000
  658.     DC.L    $007f0000
  659.     DC.L    $003f0000
  660.     DC.L    $00000000
  661.     DC.L    $00000000
  662. .end:
  663.  
  664. Flare.flowTable5:
  665.     DC.W    18    (.end-.start)/4
  666.     DC.W    5
  667. .start:    DC.L    $ffff0000
  668.     DC.L    $ffff0000
  669.     DC.L    $ffff0000
  670.     DC.L    $ffff0000
  671.     DC.L    $ffff0000
  672.     DC.L    $ffff0000
  673.     DC.L    $ffff0000
  674.     DC.L    $bfff0000
  675.     DC.L    $7fff0000
  676.     DC.L    $3fff0000
  677.     DC.L    $00ff0000
  678.     DC.L    $00ff0000
  679.     DC.L    $00bf0000
  680.     DC.L    $007f0000
  681.     DC.L    $003f0000
  682.     DC.L    $00000000
  683.     DC.L    $00000000
  684. .end:
  685.  
  686. ;======= OBJECT RESERVES ========
  687.  
  688.     BSS
  689.  
  690. Flare.baseAdr:
  691.     DS.L    1
  692.  
  693. Flare.squareTable:
  694.     DS.L    128
  695.  
  696. ;======= END OF DEMO-EFFECT OBJECT ========