home *** CD-ROM | disk | FTP | other *** search
/ Fujiology Archive / fujiology_archive_v1_0.iso / !FALCON / LINEOUT / DELTA.ZIP / DELTASRC.ZIP / DELTA.SRC / BUBBLES4.SO < prev    next >
Text File  |  2003-01-01  |  17KB  |  921 lines

  1. ; Envmapped bubbles screen. Wibble wobble..
  2.  
  3. ;******* OBJECT EQUATES ********
  4.  
  5. Bubbles.R:        =    200
  6. Bubbles.STEPS:        =    8
  7. Bubbles.FILLED:        =    1
  8.  
  9. Bubbles.NUM_V:        =    Bubbles.STEPS*Bubbles.STEPS+2
  10.  
  11. Bubbles.WIBBLESPEED:    =    5
  12.  
  13. Bubbles.BACKCOL:    =    $01E701E7        ; $00$3C$38
  14. Bubbles.BACKCOL2:    =    $00080008        ; $00$00$64
  15.  
  16.             RSRESET
  17. Bubbles.object:        RS.W    10000
  18. Bubbles.BLOCK_SIZE:    RS.B    0
  19.  
  20. ;******* OBJECT TABLE ********
  21.  
  22. ; Must be first in object!!
  23. Bubbles.table:
  24.     DC.L    Bubbles.mainLoop
  25.     DC.L    Bubbles.init
  26.     DC.L    Bubbles.setRes
  27.     DC.L    Bubbles.setZoom
  28.     DC.L    Bubbles.setFade
  29.     DC.L    Bubbles.set3d
  30.     DC.L    Bubbles.setWipe
  31.     DC.L    0
  32.  
  33.     IFND    DEMO_SYSTEM
  34.     INCLUDE    SFLY_DSP.S                ; Include the CPU-DSP engine.
  35.     TEXT
  36.     ENDC
  37.  
  38. ;******* RESOLUTION SETTING ROUTINE ********
  39.  
  40. Bubbles.setRes:
  41.     IFEQ    testmode
  42.     move.w    monitormode,d0
  43.     cmpi.w    #vga60,d0
  44.     beq.s    .vga60
  45.     cmpi.w    #vga100,d0
  46.     beq.s    .vga100
  47.     cmpi.w    #rgb50,d0
  48.     beq.s    .rgb50
  49. ; Unknown monitormode..
  50.     rts
  51. .vga60:    bra.l    vga60_16bit_320_200
  52. .vga100:bra.l    vga100_16bit_320_200
  53. .rgb50:    bra.l    rgb50_16bit_320_200
  54.     ENDC
  55.     rts
  56.  
  57. ;******* INIT SUBROUTINE ********
  58.  
  59. ; OUTPUT:
  60. ; d0.l: =0 all clear, <0 error
  61. Bubbles.init:
  62.     move.l    #Bubbles.BLOCK_SIZE,d0
  63.     bsr.l    Mem.register
  64.  
  65.     lea    sine_tbl,a1
  66.     bsr.l    Matrix.init
  67.  
  68. .success:
  69.     moveq    #0,d0
  70.     rts
  71. .error:    moveq    #-1,d0
  72.     rts
  73.  
  74. ;******* REALTIME INIT SUBROUTINE ********
  75.  
  76. Bubbles.realtimeInit:
  77.     move.l    #rts,vbl_gfx
  78.  
  79.     bsr.l    Mem.getBlock
  80.     move.l    d0,Bubbles.objAdr
  81.  
  82.     bsr.l    HumanFly.init
  83.  
  84.     lea    Viewport.settingsTable,a0
  85.     move.w    #320,Viewport.XSCREEN(a0)
  86.     move.w    #200,Viewport.YSCREEN(a0)
  87.     move.w    #0,Viewport.XSTART(a0)
  88.     move.w    #0,Viewport.YSTART(a0)
  89.     move.w    #320,Viewport.XEND(a0)
  90.     move.w    #200,Viewport.YEND(a0)
  91.     move.w    #160,Viewport.XCENTER(a0)
  92.     move.w    #100,Viewport.YCENTER(a0)
  93.     move.w    #256+32,Viewport.ASPECT(a0)
  94.     move.w    #$100,Viewport.FOCAL(a0)
  95.     bsr.l    Viewport.update
  96.  
  97.     lea    Bubbles.textureTable,a0
  98.     bsr.l    Polygon.init
  99.  
  100.     lea    Bubbles.gradTable,a1
  101.     lea    Bubbles.backPal,a0
  102.     bsr.l    Pal.makeGradientHc
  103.  
  104.     bsr    Bubbles.setFade
  105.  
  106.     clr.w    Bubbles.wiping
  107.  
  108.     rts
  109.  
  110. ;******* SCREENINIT SUBROUTINE ********
  111.  
  112. Bubbles.initScreen:
  113.     rts
  114.  
  115. ;******* MAINLOOP SUBROUTINE ********
  116.  
  117. Bubbles.mainLoop:
  118.     move.w    $0468.w,.old468
  119.  
  120.     movea.l    scr,a0
  121.     bsr.l    Primitive.setScreenbuffer
  122.  
  123.     move.l    frmcnt,d0
  124.     sub.l    lastframecount,d0
  125.     bne.s    .end_realtime_init
  126.     move.l    d0,-(sp)
  127.     bsr.w    Bubbles.realtimeInit
  128.     move.l    (sp)+,d0
  129. .end_realtime_init:
  130.     cmpi.l    #3,d0
  131.     bhs.s    .end_screeninit
  132.     bsr.w    Bubbles.initScreen
  133. .end_screeninit:
  134.  
  135. ; Set viewport dimensions.
  136.     tst.w    Bubbles.wiping
  137.     bne.s    .wipe
  138.     clr.w    d0
  139.     move.w    #320,d1
  140.     bra.s    .end_set_vp
  141. .wipe:    move.w    $04BC.w,d0
  142.     sub.w    Bubbles.wipeStart,d0
  143.     lsr.w    #2,d0
  144.     cmpi.w    #160,d0
  145.     ble.s    .width_ok
  146.     move.w    #160,d0
  147.     move.l    #rts,Bubbles.paintRout
  148. .width_ok:
  149.     move.w    d0,d1
  150.     subi.w    #320,d1
  151.     neg.w    d1
  152. .end_set_vp:
  153. ; Update viewport dimensions.
  154.     lea    Viewport.settingsTable,a0
  155.     move.w    d0,Viewport.XSTART(a0)
  156.     move.w    d1,Viewport.XEND(a0)
  157.     bsr.l    Viewport.update
  158.  
  159. ; Paint bubbles.
  160.     movea.l    Bubbles.paintRout,a0
  161.     jsr    (a0)
  162.  
  163. ; Wipe a bit..
  164.     lea    Viewport.settingsTable,a0
  165.     move.w    Viewport.XSTART(a0),d0
  166.     tst.w    d0
  167.     beq.s    .end_wiping
  168.     move.w    Viewport.XEND(a0),d1
  169.     move.w    d0,d2
  170.     sub.w    Bubbles.dimTable,d2
  171.     move.w    Bubbles.dimTable,d3
  172.     bsr    Bubbles.wipeColumn
  173.     move.w    Bubbles.dimTable+2,d2
  174.     sub.w    d1,d2
  175.     move.w    d1,d3
  176.     bsr    Bubbles.wipeColumn
  177.     movem.w    d0-d1,Bubbles.dimTable
  178. .end_wiping:
  179.  
  180. ; Swap dimension tables..
  181.     lea    Bubbles.dimTable,a0
  182.     move.l    (a0)+,d0
  183.     move.l    (a0)+,d1
  184.     move.l    (a0),-4(a0)
  185.     move.l    d0,(a0)
  186.     move.l    d1,-8(a0)
  187.  
  188.     IFEQ    testmode
  189.     lea    scr,a0
  190.     move.l    (a0)+,d0
  191.     move.l    (a0)+,d1
  192.     move.l    (a0),-4(a0)
  193.     move.l    d0,(a0)
  194.     move.l    d1,-8(a0)
  195.     move.l    d0,d1
  196.     lsr.w    #8,d0
  197.     move.l    d0,$ffff8200.w
  198.     move.b    d1,$ffff820d.w
  199.     ENDC
  200.  
  201.     move.w    .old468(pc),d0
  202. .wait:    cmp.w    $0468.w,d0
  203.     beq.s    .wait
  204.  
  205.     move.l    frmcnt,d0
  206.     sub.l    lastframecount,d0
  207.     bne.s    .res_done
  208.     bsr.w    Bubbles.setRes
  209. .res_done:
  210.  
  211.     rts
  212.  
  213. .old468:DC.W    0
  214.  
  215. ;******* OBJECT SUBROUTINES ********
  216.  
  217. Bubbles.setZoom:
  218.     st    Bubbles.zooming
  219.     move.w    #2000,Bubbles.distance
  220.     move.w    $04BC.w,Bubbles.zoomStart
  221.     rts
  222.  
  223. Bubbles.setFade:
  224.     move.l    #Bubbles.paintFade,Bubbles.paintRout
  225.     move.w    $04BC.w,Bubbles.fadeStart
  226.     rts
  227.  
  228. Bubbles.set3d:
  229.     clr.w    Bubbles.zooming
  230.     move.w    #2000,Bubbles.distance
  231.     move.l    #Bubbles.paint3d,Bubbles.paintRout
  232.     move.w    $04BC.w,Bubbles.sceneStart
  233.     rts
  234.  
  235. Bubbles.setWipe:
  236.     move.w    $04BC.w,Bubbles.wipeStart
  237.     st    Bubbles.wiping
  238.     rts
  239.  
  240. ; INPUT:
  241. ; d2.w=width
  242. ; d3.w=x_offset
  243. Bubbles.wipeColumn:
  244.     addq.w    #2,d2
  245.     subq.w    #1,d3
  246.     bpl.s    .offset_ok
  247.     clr.w    d3
  248. .offset_ok:
  249.     movea.w    #320,a6
  250.     suba.w    d2,a6
  251.     subq.w    #1,d2
  252.     bmi.s    .end
  253.     movea.l    scr,a0
  254.     lea    (a0,d3.w*2),a0
  255.     adda.l    a6,a6
  256.     move.w    #200-1,d7
  257.     moveq    #$0008,d4
  258.  
  259. .yloop:    move.w    d2,d6
  260.  
  261. .xloop:    move.w    d4,(a0)+
  262.     dbf    d6,.xloop
  263.  
  264.     adda.l    a6,a0
  265.     dbf    d7,.yloop
  266.  
  267. .end:    rts
  268.  
  269. Bubbles.paintFade:
  270.     lea    Viewport.settingsTable,a0
  271.     movem.w    Viewport.XSTART(a0),d0/d6
  272.     movem.w    Viewport.YSTART(a0),d1/d7
  273.     move.w    $04BC.w,d4
  274.     sub.w    Bubbles.fadeStart,d4
  275.     lsr.w    #2,d4
  276.     cmpi.w    #63,d4
  277.     blt.s    .ok
  278.     moveq    #63,d4
  279.     bsr    Bubbles.set3d
  280. .ok:    move.w    (Bubbles.backPal,d4.w*2),d4
  281.     move.w    d4,d2
  282.     swap    d4
  283.     move.w    d2,d4
  284.     bsr.l    Viewport.paintRectangle
  285.     rts
  286.  
  287. Bubbles.paint3d:
  288.     tst.w    Bubbles.zooming
  289.     beq.s    .end_zooming
  290.     move.w    $04BC.w,d0
  291.     sub.w    Bubbles.zoomStart,d0
  292.     neg.w    d0
  293.     addi.w    #2000,d0
  294.     cmpi.w    #1000,d0
  295.     bgt.s    .distance_okay
  296.     move.w    #1000,d0
  297.     clr.w    Bubbles.zooming
  298. .distance_okay:
  299.     move.w    d0,Bubbles.distance
  300. .end_zooming:
  301.  
  302.     bsr.w    Bubbles.paint
  303.     rts
  304.  
  305. Bubbles.paint:
  306. ; Calc bubble heights..
  307.     clr.l    d0
  308.     clr.l    d1
  309.     clr.l    d2
  310.     move.w    $04BC.w,d0
  311.     sub.w    Bubbles.sceneStart,d0
  312.     move.w    d0,d1
  313.     move.w    d0,d2
  314.  
  315.     subi.w    #$555,d0
  316.     bmi.s    .y1_calced
  317.     andi.w    #$7FF,d0
  318. .y1_calced:
  319.     subi.w    #$2AA,d1
  320.     bmi.s    .y2_calced
  321.     andi.w    #$7FF,d1
  322. .y2_calced:
  323.     tst.w    d2
  324.     bmi.s    .y3_calced
  325.     andi.w    #$7FF,d2
  326. .y3_calced:
  327.  
  328.     neg.w    d0
  329.     neg.w    d1
  330.     neg.w    d2
  331.     addi.w    #$400,d0
  332.     addi.w    #$400,d1
  333.     addi.w    #$400,d2
  334.     movem.w    d0-d2,Bubbles.y1
  335.  
  336.     bsr.l    PrimitiveMesh.new
  337.  
  338.     bsr.l    ObjectRegistry.clear
  339.     movea.l    Bubbles.objAdr,a0
  340.     bsr    Bubbles.generate
  341. ; d0.l=size of generated object
  342.     movea.l    Bubbles.objAdr,a0
  343.     bsr.l    ObjectRegistry.set
  344.     tst.w    d0
  345.     bmi    .end
  346.  
  347. ; world rotation.
  348.     clr.w    d0
  349. ;    move.w    $04BC.w,d1
  350. ;    lsl.w    #3,d1
  351. ;    move.w    d1,d2
  352. ;    lsr.w    #1,d2
  353.     clr.w    d1
  354.     clr.w    d2
  355.     bsr.l    Matrix.generate
  356.  
  357.     clr.w    d0
  358.     clr.w    d1
  359.     move.w    Bubbles.distance,d2
  360.     bsr.l    Matrix.translate
  361.     bsr.l    Matrix.push
  362.  
  363. ; bubble 1
  364.     move.w    $04BC.w,d0
  365.     move.w    d0,d1
  366.     move.w    d0,d2
  367.     mulu.w    #5,d1
  368.     lsr.l    #2,d1
  369.     mulu.w    #21,d2
  370.     lsr.l    #2,d2
  371.     bsr.l    Matrix.generate
  372.  
  373.     move.w    $04BC.w,d0
  374.     mulu.w    #23,d0
  375.     lsr.l    #3,d0
  376.     Do_SinModulo    d0
  377.     Get_Sin    sine_tbl,d0,d0
  378.     asr.w    #7,d0
  379.     move.w    Bubbles.y1,d1
  380.     clr.w    d2
  381.     bsr.l    Matrix.translate
  382.     bsr.l    Matrix.push
  383.     moveq    #TransformObject.BACKFACE_CULLING|TransformObject.PERSPECTIVATE,d0
  384.     moveq    #0,d1
  385.     bsr.l    TransformObject.transform
  386.     bsr.l    Matrix.pop
  387.  
  388. ; bubble 2
  389.     move.w    $04BC.w,d0
  390.     move.w    d0,d1
  391.     move.w    d0,d2
  392.     lsl.w    d0
  393.     mulu.w    #3,d1
  394.     mulu.w    #7,d2
  395.     lsr.l    #2,d1
  396.     lsr.l    #2,d2
  397.     bsr.l    Matrix.generate
  398.  
  399.     move.w    $04BC.w,d0
  400.     mulu.w    #13,d0
  401.     lsr.l    #2,d0
  402.     addi.w    #sintbllen/4,d0
  403.     Do_SinModulo    d0
  404.     Get_Sin    sine_tbl,d0,d0
  405.     asr.w    #7,d0
  406.     move.w    Bubbles.y2,d1
  407.     clr.w    d2
  408.     bsr.l    Matrix.translate
  409.     bsr.l    Matrix.push
  410.     moveq    #TransformObject.BACKFACE_CULLING|TransformObject.PERSPECTIVATE,d0
  411.     moveq    #0,d1
  412.     bsr.l    TransformObject.transform
  413.     bsr.l    Matrix.pop
  414.  
  415. ; bubble 3
  416.     move.w    $04BC.w,d0
  417.     move.w    d0,d1
  418.     move.w    d0,d2
  419.     mulu.w    #5,d0
  420.     lsr.l    #2,d0
  421.     mulu.w    #11,d1
  422.     lsr.l    #3,d1
  423.     mulu.w    #13,d2
  424.     lsr.l    #3,d2
  425.     bsr.l    Matrix.generate
  426.  
  427.     move.w    $04BC.w,d0
  428.     mulu.w    #11,d0
  429.     lsr.l    #2,d0
  430.     addi.w    #sintbllen/4,d0
  431.     Do_SinModulo    d0
  432.     Get_Sin    sine_tbl,d0,d0
  433.     asr.w    #7,d0
  434.     move.w    Bubbles.y3,d1
  435.     clr.w    d2
  436.     bsr.l    Matrix.translate
  437.     bsr.l    Matrix.push
  438.     moveq    #TransformObject.BACKFACE_CULLING|TransformObject.PERSPECTIVATE,d0
  439.     moveq    #0,d1
  440.     bsr.l    TransformObject.transform
  441.     bsr.l    Matrix.pop
  442.  
  443.     bsr.l    Matrix.pop            ; pop world rotation
  444.  
  445.     bsr.l    PrimitiveMesh.sortZ
  446.  
  447.     bsr.l    PrimitiveMesh.complete
  448.  
  449.     IFNE    0
  450.     lea    Viewport.settingsTable,a0
  451.     movem.w    Viewport.XSTART(a0),d0/d6
  452.     movem.w    Viewport.YSTART(a0),d1/d7
  453.     move.l    #Bubbles.BACKCOL,d4
  454.     bsr    Viewport.paintRectangle
  455.     ELSE
  456.     movea.l    Bubbles.rectAddressTable,a0
  457.     move.w    (a0)+,d7
  458.     beq.s    .end_restore
  459.     subq.w    #1,d7
  460. .restore_loop:
  461.     move.w    d7,-(sp)
  462.     movem.w    (a0)+,d1/d7
  463.     movem.w    (a0)+,d0/d6
  464.     move.l    a0,-(sp)
  465.     move.l    #Bubbles.BACKCOL,d4
  466.     bsr.l    Viewport.paintRectangle
  467.     movea.l    (sp)+,a0
  468.     move.w    (sp)+,d7
  469.     dbra    d7,.restore_loop
  470. .end_restore:
  471.     ENDC
  472.  
  473.     movea.l    Bubbles.rectAddressTable,a0
  474.     bsr.l    PrimitiveMesh.paint
  475.  
  476.     lea    Bubbles.rectAddressTable,a0
  477.      move.l    (a0)+,d0
  478.     move.l    (a0)+,d1
  479.     move.l    (a0),-(a0)
  480.     move.l    d0,4(a0)
  481.     move.l    d1,-(a0)
  482. .end:    rts
  483.  
  484. ; 1 + 8 + 1, 10 points on curve, 9 lines on curve
  485. ; INPUT:
  486. ; a0: destination object
  487. ; OUTPUT:
  488. ; d0.l=size
  489. Bubbles.generate:
  490.     movea.l    a0,a6
  491.  
  492.     move.w    #2*(Bubbles.STEPS*Bubbles.STEPS+2),(a0)+    ;#vertices+#normals
  493.     move.w    #Bubbles.STEPS*Bubbles.STEPS+2,(a0)+        ;#normals
  494.  
  495.     move.l    $04BA.w,d0
  496.     lsr.l    #2,d0
  497.     move.w    d0,.time
  498.     lea    sine_tbl,a1
  499.  
  500.     move.w    $04BC.w,d5
  501.     lsl.w    #Bubbles.WIBBLESPEED,d5
  502.     Do_SinModulo    d5
  503.     Get_Sin    a1,d5,d5
  504.     asr.w    #8,d5
  505.     asr.w    #1,d5
  506.     addi.w    #$100,d5
  507.     muls.w    #Bubbles.R,d5
  508.     asr.l    #8,d5
  509.  
  510. ; Output top vertex..
  511.     clr.w    (a0)+
  512.     move.w    d5,(a0)+
  513.     clr.w    (a0)+
  514.  
  515.     moveq    #1,d7
  516.  
  517. ; 0.1/9.2/9.3/9.4/9.5/9.6/9.7/9.8/9.1, 10 points, 9 lines
  518. ; 1 top, 1 bottom, 8 inbetween points.. 
  519.  
  520. ; Outer loop (180 degrees)
  521. .r1_loop:
  522.     move.w    d7,d0
  523.     mulu.w    #(sintbllen/(Bubbles.STEPS+1))/2,d0
  524.     Get_SinCos    a1,d0,d0,d3
  525.     muls.w    #Bubbles.R,d0
  526.     muls.w    d5,d3
  527.     add.l    d0,d0
  528.     add.l    d3,d3
  529.     swap    d0                    ; d0.w=r2
  530.     swap    d3                    ; d3.w=r*cos(t1)
  531.  
  532.     clr.w    d6
  533.  
  534. ; Inner loop (360 degrees)
  535. .r2_loop:
  536.     move.w    d6,d1
  537.     mulu.w    #sintbllen/Bubbles.STEPS,d1
  538.     Get_SinCos    a1,d1,d1,d2
  539.     muls.w    d0,d1
  540.     muls.w    d0,d2
  541.     add.l    d1,d1
  542.     add.l    d2,d2
  543.     swap    d1
  544.     swap    d2
  545.     move.w    d1,(a0)+                ; Output r2*cos(t2).
  546.     move.w    d3,(a0)+                ; Output r*cos(t1).
  547.     move.w    d2,(a0)+                ; Output r2*sin(t2).
  548.     addq.w    #1,d6
  549.     cmpi.w    #Bubbles.STEPS,d6
  550.     blt.s    .r2_loop
  551.  
  552.     addq.w    #1,d7
  553.     cmpi.w    #Bubbles.STEPS+1,d7
  554.     blt.s    .r1_loop
  555.  
  556. ; Output bottom vertex..
  557.     clr.w    (a0)+
  558.     neg.w    d5
  559.     move.w    d5,(a0)+
  560.     clr.w    (a0)+
  561.  
  562. ;----------------
  563. ; Normal vectors.
  564.  
  565.     move.w    $04BC.w,d5
  566.     lsl.w    #Bubbles.WIBBLESPEED,d5
  567.     Do_SinModulo    d5
  568.     Get_Sin    a1,d5,d5
  569.     asr.w    #8,d5
  570.     asr.w    #3,d5
  571.     addi.w    #$60,d5
  572.  
  573. ; Output top vertex..
  574.     clr.w    (a0)+
  575.     move.w    d5,(a0)+
  576.     clr.w    (a0)+
  577.  
  578.     moveq    #1,d7
  579.  
  580. ; 0.1/9.2/9.3/9.4/9.5/9.6/9.7/9.8/9.1, 10 points, 9 lines
  581. ; 1 top, 1 bottom, 8 inbetween points.. 
  582.  
  583. ; Outer loop (180 degrees)
  584. .n_r1_loop:
  585.     move.w    d7,d0
  586.     mulu.w    #(sintbllen/(Bubbles.STEPS+1))/2,d0
  587.     Get_SinCos    a1,d0,d0,d3
  588.     muls.w    #128,d0
  589.     muls.w    d5,d3
  590.     add.l    d0,d0
  591.     add.l    d3,d3
  592.     swap    d0                    ; d0.w=r2
  593.     swap    d3                    ; d3.w=r*cos(t1)
  594.  
  595.     clr.w    d6
  596.  
  597. ; Inner loop (360 degrees)
  598. .n_r2_loop:
  599.     move.w    d6,d1
  600.     mulu.w    #sintbllen/Bubbles.STEPS,d1
  601.     Get_SinCos    a1,d1,d1,d2
  602.     muls.w    d0,d1
  603.     muls.w    d0,d2
  604.     add.l    d1,d1
  605.     add.l    d2,d2
  606.     swap    d1
  607.     swap    d2
  608.     move.w    d1,(a0)+                ; Output r2*cos(t2).
  609.     move.w    d3,(a0)+                ; Output r*cos(t1).
  610.     move.w    d2,(a0)+                ; Output r2*sin(t2).
  611.     addq.w    #1,d6
  612.     cmpi.w    #Bubbles.STEPS,d6
  613.     blt.s    .n_r2_loop
  614.  
  615.     addq.w    #1,d7
  616.     cmpi.w    #Bubbles.STEPS+1,d7
  617.     blt.s    .n_r1_loop
  618.  
  619. ; Output bottom vertex..
  620.     clr.w    (a0)+
  621.     neg.w    d5
  622.     move.w    d5,(a0)+
  623.     clr.w    (a0)+
  624.  
  625.     clr.w    (a0)+                    ; Output #texels (0).
  626.  
  627. ;------------
  628. ; Primitives
  629.  
  630. ; 1 top line, 1 bottom line, 7 inbetween lines
  631.     IFNE    Bubbles.FILLED
  632. ; Filled version. Head=n tris, tail=n tris, body=n*(n-1) quads
  633. ; total=n*n faces.
  634.  
  635. ; Output primitives..
  636.     move.w    #Bubbles.STEPS*(Bubbles.STEPS+1),(a0)+
  637. ;    move.w    #Bubbles.STEPS*Bubbles.STEPS,(a0)+
  638.  
  639. ; Output head.
  640. ; 0-1-2, 0-2-3, 0-3-4,... 0, (i+1), (i+1) mod n +1
  641.     moveq    #Bubbles.STEPS-1,d7
  642. .head_loop:
  643.     move.w    #Polygon.TRI|Polygon.ENVMAPPED|0,(a0)+
  644.     clr.w    (a0)+
  645.     moveq    #1,d0
  646.     add.w    d7,d0
  647.     move.w    d0,(a0)+
  648.     move.w    d7,d0
  649.     addq.w    #1,d0
  650.     divu.w    #Bubbles.STEPS,d0
  651.     swap    d0
  652.     addq.w    #1,d0
  653.     move.w    d0,(a0)+
  654.  
  655. ; Normal refs..
  656.     move.w    #Bubbles.STEPS*Bubbles.STEPS+2,(a0)+
  657.     move.w    #Bubbles.STEPS*Bubbles.STEPS+3,d0
  658.     add.w    d7,d0
  659.     move.w    d0,(a0)+
  660.     move.w    d7,d0
  661.     addq.w    #1,d0
  662.     divu.w    #Bubbles.STEPS,d0
  663.     swap    d0
  664.     addi.w    #Bubbles.STEPS*Bubbles.STEPS+3,d0
  665.     move.w    d0,(a0)+
  666.     
  667.     dbra    d7,.head_loop
  668.  
  669. ; Output body.
  670.     moveq    #Bubbles.STEPS-1-1,d7
  671.  
  672. .segment_loop:
  673.     moveq    #Bubbles.STEPS-1,d6
  674.  
  675. ; i, i+1, i+1+n, i+n -> i+n, i+1+n, i+1, i
  676. ; 0, 1, 2, 3 -> 3, 2, 1, 0
  677. .quad_loop:
  678.     move.w    #Polygon.QUAD|Polygon.ENVMAPPED|0,(a0)+
  679.  
  680.     move.w    d7,d1
  681.     addq.w    #1,d1
  682.     mulu.w    #Bubbles.STEPS,d1
  683.  
  684. ; v4
  685.     move.w    d6,d0
  686.     add.w    d1,d0    
  687.     addq.w    #1,d0
  688.     move.w    d0,(a0)+
  689.  
  690. ; v3
  691.     clr.l    d0
  692.     move.w    d6,d0
  693.     addq.w    #1,d0
  694.     divu.w    #Bubbles.STEPS,d0
  695.     swap    d0
  696.     add.w    d1,d0    
  697.     addq.w    #1,d0
  698.     move.w    d0,(a0)+
  699.  
  700.     move.w    d7,d1
  701.     mulu.w    #Bubbles.STEPS,d1
  702.  
  703. ; v2
  704.     clr.l    d0
  705.     move.w    d6,d0
  706.     addq.w    #1,d0
  707.     divu.w    #Bubbles.STEPS,d0
  708.     swap    d0
  709.     add.w    d1,d0    
  710.     addq.w    #1,d0
  711.     move.w    d0,(a0)+
  712.  
  713. ; v1
  714.     move.w    d6,d0
  715.     add.w    d1,d0
  716.     addq.w    #1,d0
  717.     move.w    d0,(a0)+
  718.  
  719. ; Normal refs..
  720.     move.w    d7,d1
  721.     addq.w    #1,d1
  722.     mulu.w    #Bubbles.STEPS,d1
  723.  
  724. ; v4
  725.     move.w    d6,d0
  726.     add.w    d1,d0    
  727.     addi.w    #Bubbles.NUM_V+1,d0
  728.     move.w    d0,(a0)+
  729.  
  730. ; v3
  731.     clr.l    d0
  732.     move.w    d6,d0
  733.     addq.w    #1,d0
  734.     divu.w    #Bubbles.STEPS,d0
  735.     swap    d0
  736.     add.w    d1,d0    
  737.     addi.w    #Bubbles.NUM_V+1,d0
  738.     move.w    d0,(a0)+
  739.  
  740.     move.w    d7,d1
  741.     mulu.w    #Bubbles.STEPS,d1
  742.  
  743. ; v2
  744.     clr.l    d0
  745.     move.w    d6,d0
  746.     addq.w    #1,d0
  747.     divu.w    #Bubbles.STEPS,d0
  748.     swap    d0
  749.     add.w    d1,d0    
  750.     addi.w    #Bubbles.NUM_V+1,d0
  751.     move.w    d0,(a0)+
  752.  
  753. ; v1
  754.     move.w    d6,d0
  755.     add.w    d1,d0
  756.     addi.w    #Bubbles.NUM_V+1,d0
  757.     move.w    d0,(a0)+
  758.  
  759.     dbra    d6,.quad_loop
  760.  
  761.     dbra    d7,.segment_loop
  762.  
  763. ; Output tail.
  764. ; t, t-n+[(i+1) mod n], t-n+i
  765. ; t=n*n+1
  766.     moveq    #Bubbles.STEPS-1,d7
  767.  
  768. .tail_loop:
  769.     move.w    #Polygon.TRI|Polygon.ENVMAPPED|0,(a0)+
  770.     move.w    #Bubbles.STEPS*Bubbles.STEPS+1,(a0)+
  771.     clr.l    d0
  772.     move.w    d7,d0
  773.     addq.w    #1,d0
  774.     divu.w    #Bubbles.STEPS,d0
  775.     swap    d0
  776.     addi.w    #1+Bubbles.STEPS*(Bubbles.STEPS-1),d0
  777.     move.w    d0,(a0)+
  778.     move.w    #1+Bubbles.STEPS*(Bubbles.STEPS-1),d0
  779.     add.w    d7,d0
  780.     move.w    d0,(a0)+
  781.  
  782. ; Normal refs.
  783.     move.w    #Bubbles.NUM_V+Bubbles.STEPS*Bubbles.STEPS+1,(a0)+
  784.     clr.l    d0
  785.     move.w    d7,d0
  786.     addq.w    #1,d0
  787.     divu.w    #Bubbles.STEPS,d0
  788.     swap    d0
  789.     addi.w    #Bubbles.NUM_V+1+Bubbles.STEPS*(Bubbles.STEPS-1),d0
  790.     move.w    d0,(a0)+
  791.     move.w    #Bubbles.NUM_V+1+Bubbles.STEPS*(Bubbles.STEPS-1),d0
  792.     add.w    d7,d0
  793.     move.w    d0,(a0)+
  794.  
  795.     dbra    d7,.tail_loop
  796.  
  797.     ELSE
  798. ; Wireframe version.
  799.  
  800. ; Output primitives..
  801.     move.w    #Bubbles.STEPS*(Bubbles.STEPS+1),(a0)+
  802.  
  803. ; Output head primitives.
  804.     moveq    #Bubbles.STEPS-1,d7
  805.  
  806. .head_lineloop:
  807.     move.w    #Primitive.LINETYPE|Polygon.FLATSHADED|0,(a0)+
  808.     clr.w    (a0)+
  809.     move.w    d7,d0
  810.     addq.w    #1,d0
  811.     move.w    d0,(a0)+
  812.     dbra    d7,.head_lineloop
  813.  
  814. ; Output body primitives.
  815.     moveq    #Bubbles.STEPS-1-1,d7
  816.  
  817. .lineseg_loop:
  818.     moveq    #Bubbles.STEPS-1,d6
  819.  
  820. .line_loop:
  821.     move.w    #Primitive.LINETYPE|Polygon.FLATSHADED|0,(a0)+
  822.     move.w    d7,d0
  823.     mulu.w    #Bubbles.STEPS,d0
  824.     add.w    d6,d0
  825.     addq.w    #1,d0
  826.     move.w    d0,(a0)+
  827.     addi.w    #Bubbles.STEPS,d0
  828.     move.w    d0,(a0)+
  829.     dbra    d6,.line_loop
  830.  
  831.     dbra    d7,.lineseg_loop
  832.  
  833. ; Output tail primitives.
  834.     moveq    #Bubbles.STEPS-1,d7
  835.     move.w    #Bubbles.STEPS*Bubbles.STEPS+1,d1
  836.  
  837. .tail_lineloop:
  838.     move.w    #Primitive.LINETYPE|Polygon.FLATSHADED|0,(a0)+
  839.     move.w    d1,(a0)+
  840.     move.w    d1,d0
  841.     sub.w    d7,d0
  842.     subq.w    #1,d0
  843.     move.w    d0,(a0)+
  844.     dbra    d7,.tail_lineloop
  845.  
  846.     ENDC
  847.  
  848.     move.l    a0,d0
  849.     sub.l    a6,d0
  850.     rts
  851.  
  852. .time:    DC.W    0
  853.  
  854. ;******* OBJECT DATA ********
  855.  
  856.     DATA
  857.  
  858. Bubbles.textureTable:
  859.     DC.L    FlareGen.redBuffer
  860.     DC.L    0
  861.  
  862. Bubbles.rectAddressTable:
  863.     DC.L    Bubbles.rectangleTable
  864.     DC.L    Bubbles.rectangleTable2
  865.     DC.L    Bubbles.rectangleTable3
  866.  
  867. Bubbles.distance:
  868.     DC.W    2000
  869.  
  870. Bubbles.gradTable:
  871.     DC.W    1
  872.     DC.W    6
  873.     DC.L    $003C0078
  874.     DC.L    $003C0038
  875.  
  876. Bubbles.dimTable:
  877.     DC.W    0,320
  878.     DC.W    0,320
  879.     DC.W    0,320
  880.  
  881. ;******* OBJECT RESERVES ********
  882.  
  883.     BSS
  884.  
  885. Bubbles.backPal:
  886.     DS.W    64
  887.  
  888. Bubbles.rectangleTable:
  889.     DS.W    4*10
  890. Bubbles.rectangleTable2:
  891.     DS.W    4*10
  892. Bubbles.rectangleTable3:
  893.     DS.W    4*10
  894.  
  895. Bubbles.zooming:
  896.     DS.W    1
  897. Bubbles.zoomStart:
  898.     DS.W    1
  899. Bubbles.fadeStart:
  900.     DS.W    1
  901. Bubbles.sceneStart:
  902.     DS.W    1
  903. Bubbles.objAdr:
  904.     DS.L    1
  905.  
  906. Bubbles.y1:
  907.     DS.W    1
  908. Bubbles.y2:
  909.     DS.W    1
  910. Bubbles.y3:
  911.     DS.W    1
  912.  
  913. Bubbles.wipeStart:
  914.     DS.W    1
  915. Bubbles.wiping:
  916.     DS.W    1
  917.  
  918. Bubbles.paintRout:
  919.     DS.L    1
  920.  
  921. ;******* END OF DEMO-EFFECT OBJECT ********