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

  1. ; Stasis interrupted. Fire.. in.. cryogenic.. compartment.
  2. ; Somekind of light-thru-wall effect, for delta..
  3. ; Uses u-fly ofcourse.
  4.  
  5. ******** OBJECT EQUATES ********
  6.  
  7. Volumetric.POINT:        =    800        ; timepoint
  8. Volumetric.VECTORLENGTH:    =    0 300        ; length of emitted rays
  9.  
  10. ******** OBJECT TABLE ********
  11.  
  12. * Must be first in object!!
  13. Volumetric.table:
  14.     DC.L    Volumetric.mainLoop
  15.     DC.L    Volumetric.init
  16.     DC.L    Volumetric.setRes
  17.     DC.L    Volumetric.triggerEnter
  18.     DC.L    Volumetric.incLength
  19.     DC.L    Volumetric.decLength
  20.     DC.L    Volumetric.switchLite
  21.     DC.L    Volumetric.setExit
  22.     DC.L    Volumetric.triggerZoom
  23.     DC.L    0
  24.  
  25.     IFND    DEMO_SYSTEM
  26.     INCLUDE    SFLY_DSP.S                * Include the CPU-DSP engine.
  27.     TEXT
  28.     ENDC
  29.  
  30. ******** RESOLUTION SETTING ROUTINE ********
  31.  
  32. Volumetric.setRes:
  33.     IFEQ    testmode
  34.     move.l    #rts,vbl_gfx
  35.  
  36.     move.w    $0468.w,d0
  37. .ck468:    cmp.w    $0468.w,d0
  38.     beq.s    .ck468
  39.     move.w    monitormode,d0
  40.     cmpi.w    #vga60,d0
  41.     beq.s    .vga60
  42.     cmpi.w    #vga100,d0
  43.     beq.s    .vga100
  44.     cmpi.w    #rgb50,d0
  45.     beq.s    .rgb50
  46. * Unknown monitormode..
  47.     rts
  48. .vga60:    bra.l    vga60_16bit_320_200
  49. .vga100:bra.l    vga100_16bit_320_200
  50. .rgb50:    bra.l    rgb50_16bit_320_200
  51.     ENDC
  52.     rts
  53.  
  54. ******** INIT SUBROUTINE ********
  55.  
  56. ; OUTPUT:
  57. ; d0.l: =0: all clear
  58. ;       <0: error, not initialized
  59. Volumetric.init:
  60.     lea    sine_tbl,a1
  61.     bsr.l    Matrix.init
  62.  
  63. ;    bsr    Volumetric.calcFadePal
  64.  
  65. * Insert pre-running initialising stuff here! Loading, precalculating, etc.
  66. .success:
  67.     moveq    #0,d0
  68.     rts
  69. .error:    moveq    #-1,d0
  70.     rts
  71.  
  72. ******** REALTIME INIT SUBROUTINE ********
  73.  
  74. Volumetric.realtimeInit:
  75.     bsr    Volumetric.resetTime
  76.  
  77.     bsr.l    HumanFly.init
  78.  
  79.     lea    Viewport.settingsTable,a0
  80.     move.w    #320,Viewport.XSCREEN(a0)
  81.     move.w    #200,Viewport.YSCREEN(a0)
  82.     move.w    #0,Viewport.XSTART(a0)
  83.     move.w    #0,Viewport.YSTART(a0)
  84.     move.w    #320,Viewport.XEND(a0)
  85.     move.w    #200,Viewport.YEND(a0)
  86.     move.w    #160,Viewport.XCENTER(a0)
  87.     move.w    #100,Viewport.YCENTER(a0)
  88.     move.w    #256+32,Viewport.ASPECT(a0)
  89.     move.w    #$100,Viewport.FOCAL(a0)
  90.     bsr.l    Viewport.update
  91.  
  92.     bsr    Volumetric.initPal
  93.  
  94.     lea    Volumetric.textureTable,a0
  95.     lea    Volumetric.colorTable,a1
  96.     bsr.l    Polygon.init
  97.  
  98.     move.l    #Volumetric.enter,Volumetric.movementRout
  99.     move.l    #Volumetric.fadeLiteOut,Volumetric.liteRout
  100.     move.l    #Volumetric.VECTORLENGTH,Volumetric.vectorLength
  101.     clr.w    Volumetric.lite
  102.     clr.w    Volumetric.exit
  103.     rts
  104.  
  105. ******** SCREENINIT SUBROUTINE ********
  106.  
  107. Volumetric.initScreen:
  108.     lea    Viewport.settingsTable,a0
  109.     movem.w    Viewport.XSTART(a0),d0/d6
  110.     movem.w    Viewport.YSTART(a0),d1/d7
  111.     moveq    #$00000000,d4
  112.     bsr.l    Viewport.paintRectangle
  113.     rts
  114.  
  115. ******** MAINLOOP SUBROUTINE ********
  116.  
  117. Volumetric.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    Volumetric.realtimeInit
  128.     move.l    (sp)+,d0
  129. .end_realtime_init:
  130.     cmpi.l    #3,d0
  131.     bhs.s    .end_screeninit
  132.     bsr    Volumetric.initScreen
  133. .end_screeninit:
  134.  
  135.     movea.l    Volumetric.liteRout,a0
  136.     jsr    (a0)
  137.     movea.l    Volumetric.movementRout,a0
  138.     jsr    (a0)
  139.  
  140.     bsr    Volumetric.getTime
  141.     lea    sine_tbl,a0
  142.     move.w    d0,d1
  143.     mulu.w    #5,d0
  144.     lsr.w    #1,d0
  145.     mulu.w    #3,d1
  146.     lsr.w    #1,d1
  147.     addi.w    #$580,d0
  148.     addi.w    #$280,d1
  149.     Do_SinModulo    d0
  150.     Do_SinModulo    d1
  151.     Get_Sin    a0,d0,d0
  152.     Get_Sin    a0,d1,d1
  153.     asr.w    #7,d0
  154.     asr.w    #7,d1
  155.     move.w    #$80,d2
  156.     movem.w    d0-d2,Volumetric.center
  157.  
  158.     IFNE    0
  159.     lea    Viewport.settingsTable,a0
  160.     movem.w    Viewport.XSTART(a0),d0/d6
  161.     movem.w    Viewport.YSTART(a0),d1/d7
  162.     moveq    #$00000000,d4
  163.     bsr.l    Viewport.paintRectangle
  164.     ELSE
  165.     movea.l    Volumetric.rectTableAddys,a0
  166.     move.w    (a0)+,d7
  167.     beq.s    .end_restore
  168.     subq.w    #1,d7
  169. .restore_loop:
  170.     move.w    d7,-(sp)
  171.     movem.w    (a0)+,d1/d7
  172.     movem.w    (a0)+,d0/d6
  173.     move.l    a0,-(sp)
  174.     moveq    #$00000000,d4
  175.     bsr.l    Viewport.paintRectangle
  176.     movea.l    (sp)+,a0
  177.     move.w    (sp)+,d7
  178.     dbra    d7,.restore_loop
  179. .end_restore:
  180.     ENDC
  181.  
  182.     bsr.l    ObjectRegistry.clear
  183.  
  184.     lea    Volumetric.deltaContour,a1
  185.     bsr    Volumetric.createConcave
  186. ; d0.l= object size
  187.  
  188.     lea    Volumetric.object,a0
  189.     bsr.l    ObjectRegistry.set
  190.     tst.w    d0
  191.     bmi    .error
  192.  
  193.     bsr.l    PrimitiveMesh.new
  194.  
  195.     movem.w    Volumetric.rotation,d0-d2
  196.     bsr.l    Matrix.generate
  197.     movem.w    Volumetric.translation,d0-d2
  198.     bsr.l    Matrix.translate
  199.     bsr.l    Matrix.push
  200.     moveq    #TransformObject.BACKFACE_CULLING|TransformObject.PERSPECTIVATE,d0
  201.     moveq    #0,d1
  202.     bsr.l    TransformObject.transform
  203.     bsr.l    Matrix.pop
  204.  
  205.     bsr.l    PrimitiveMesh.complete
  206.  
  207.     movea.l    Volumetric.rectTableAddys,a0
  208.     bsr.l    PrimitiveMesh.paint
  209.  
  210. ;    bsr    Volumetric.paintLogo
  211.  
  212.     lea    Volumetric.rectTableAddys,a0
  213.      move.l    (a0)+,d0
  214.     move.l    (a0)+,d1
  215.     move.l    (a0),-(a0)
  216.     move.l    d0,4(a0)
  217.     move.l    d1,-(a0)
  218.  
  219.     lea    scr,a0
  220.      move.l    (a0)+,d0
  221.     move.l    (a0)+,d1
  222.     move.l    (a0),-(a0)
  223.     move.l    d0,4(a0)
  224.     move.l    d1,-(a0)
  225.     IFEQ    testmode
  226.     move.l    d0,d1
  227.     lsr.w    #8,d0
  228.     move.l    d0,$ffff8200.w
  229.     move.b    d1,$ffff820d.w
  230.     ENDC
  231.  
  232.     move.l    frmcnt,d0
  233.     sub.l    lastframecount,d0
  234.     bne.s    .res_done
  235.     bsr    Volumetric.setRes
  236. .res_done:
  237.  
  238.     move.w    .old468(pc),d0
  239. .cmp:    cmp.w    $468.w,d0
  240.     beq.s    .cmp
  241.  
  242. .error:    rts
  243.  
  244. .old468:DC.W    0
  245.  
  246. ******** OBJECT SUBROUTINES ********
  247.  
  248. Volumetric.incLength:
  249.     addq.l    #8,Volumetric.vectorLength
  250.     rts
  251.  
  252. Volumetric.decLength:
  253.     subq.l    #8,Volumetric.vectorLength
  254.     rts
  255.  
  256. Volumetric.triggerEnter:
  257.     bsr    Volumetric.resetTime
  258.     move.l    #Volumetric.enter,Volumetric.movementRout
  259.     rts
  260.  
  261. Volumetric.switchLite:
  262.     bsr    Volumetric.resetLiteTime
  263.     not.w    Volumetric.lite
  264.     bne.s    .fade_in
  265.     move.l    #Volumetric.fadeLiteOut,Volumetric.liteRout
  266.     rts
  267. .fade_in:
  268.     move.l    #Volumetric.fadeLiteIn,Volumetric.liteRout
  269.     rts
  270.  
  271. Volumetric.setExit:
  272.     bsr    Volumetric.resetExitTime
  273.     move.l    #Volumetric.exitDelta,Volumetric.movementRout
  274.     rts
  275.  
  276. Volumetric.triggerZoom:
  277.     bsr    Volumetric.resetZoomTime
  278.     move.l    #Volumetric.zoom,Volumetric.movementRout
  279.     rts
  280.  
  281. Volumetric.standStill:
  282.     lea    Volumetric.rotation,a0
  283.     REPT    3
  284.     clr.w    (a0)+
  285.     ENDR
  286.     lea    Volumetric.translation,a0
  287.     clr.w    (a0)+
  288.     clr.w    (a0)+
  289.     move.w    #$0400,(a0)+
  290.     rts
  291.  
  292. Volumetric.exitDelta:
  293.     bsr    Volumetric.getExitTime
  294.     move.l    d0,d2
  295.     clr.w    d0
  296.     clr.w    d1
  297.     mulu.w    d2,d2
  298.     lsr.l    #7,d2
  299.     movem.w    d0-d2,Volumetric.rotation
  300.  
  301.     bsr    Volumetric.getExitTime
  302.     mulu.w    d0,d0
  303.     lsr.l    #8,d0
  304.     clr.w    d1
  305.     move.w    #$0400,d2
  306.     movem.w    d0-d2,Volumetric.translation
  307.     rts
  308.  
  309. Volumetric.enter:
  310.     bsr    Volumetric.getTime
  311.     cmpi.l    #$00000400,d0
  312.     blt.s    .move_pos
  313.     clr.w    d0
  314.     move.w    #$0400,d2
  315.     bra.s    .end_calc_pos
  316. .move_pos:
  317.     move.w    d0,d2
  318.     subi.w    #$0400,d2
  319.     muls.w    d2,d2
  320.     lsr.l    #8,d2
  321.     lsr.l    #2,d2
  322.     neg.l    d2
  323.     move.w    d2,d0
  324.     addi.w    #$0400,d2
  325.     asr.w    #1,d0
  326. .end_calc_pos:
  327.     clr.w    d1
  328.     movem.w    d0-d2,Volumetric.translation
  329.  
  330.     lea    Volumetric.rotation,a0
  331.     REPT    3
  332.     clr.w    (a0)+
  333.     ENDR
  334.     rts
  335.  
  336. Volumetric.zoom:
  337.     bsr    Volumetric.getZoomTime
  338.     cmpi.l    #$00000100,d0
  339.     blt.s    .move_pos
  340.     move.w    #$0100,d0
  341. .move_pos:
  342.     move.w    d0,d2
  343.     mulu.w    d2,d2
  344.     lsr.l    #7,d2
  345.     neg.l    d2
  346.     addi.w    #$0400,d2
  347. .end_calc_pos:
  348.     clr.w    d0
  349.     clr.w    d1
  350.     movem.w    d0-d2,Volumetric.translation
  351.  
  352.     lea    Volumetric.rotation,a0
  353.     REPT    3
  354.     clr.w    (a0)+
  355.     ENDR
  356.     rts
  357.  
  358. ; OUTPUT:
  359. ; d0.l=time
  360. Volumetric.getTime:
  361.     move.l    $04BA.w,d0
  362.     sub.l    Volumetric.startTime,d0
  363.     rts
  364.  
  365. Volumetric.resetTime:
  366.     move.l    $04BA.w,Volumetric.startTime
  367.     rts
  368.  
  369. ; OUTPUT:
  370. ; d0.l=time
  371. Volumetric.getLiteTime:
  372.     move.l    $04BA.w,d0
  373.     sub.l    Volumetric.startLiteTime,d0
  374.     rts
  375.  
  376. Volumetric.resetLiteTime:
  377.     move.l    $04BA.w,Volumetric.startLiteTime
  378.     rts
  379.  
  380. ; OUTPUT:
  381. ; d0.l=time
  382. Volumetric.getExitTime:
  383.     move.l    $04BA.w,d0
  384.     sub.l    Volumetric.startExitTime,d0
  385.     rts
  386.  
  387. Volumetric.resetExitTime:
  388.     move.l    $04BA.w,Volumetric.startExitTime
  389.     rts
  390.  
  391. ; OUTPUT:
  392. ; d0.l=time
  393. Volumetric.getZoomTime:
  394.     move.l    $04BA.w,d0
  395.     sub.l    Volumetric.startZoomTime,d0
  396.     rts
  397.  
  398. Volumetric.resetZoomTime:
  399.     move.l    $04BA.w,Volumetric.startZoomTime
  400.     rts
  401.  
  402. Volumetric.fadeLiteIn:
  403.     bsr    Volumetric.getLiteTime
  404.     cmpi.l    #300,d0
  405.     blt.s    .length_okay
  406.     move.l    #300,d0
  407. .length_okay:
  408.     move.l    d0,Volumetric.vectorLength
  409. .end:    rts
  410.  
  411. Volumetric.fadeLiteOut:
  412.     bsr    Volumetric.getLiteTime
  413.     neg.l    d0
  414.     addi.l    #300,d0
  415.     bpl.s    .length_okay
  416.     clr.l    d0
  417. .length_okay:
  418.     move.l    d0,Volumetric.vectorLength
  419. .end:    rts
  420.  
  421. Volumetric.initPal:
  422.     lea    Volumetric.colorTable,a0
  423.  
  424.     move.w    #$ffff,d0
  425.     moveq    #32-1,d7
  426.  
  427. .greyloop:
  428.     move.w    d0,(a0)+
  429.     move.w    d0,(a0)+
  430.     subi.w    #$0821,d0
  431.     move.w    d0,(a0)+
  432.     move.w    d0,(a0)+
  433.     subi.w    #$0020,d0
  434.     dbra    d7,.greyloop
  435.  
  436.     move.w    #$ffff,d0
  437.     moveq    #128-1,d7
  438. .whiteloop:
  439.     move.w    d0,(a0)+
  440.     dbra    d7,.whiteloop
  441.     rts
  442.  
  443. ; INPUT:
  444. ; a1: contour table
  445. ; OUTPUT:
  446. ; d0.l: output size
  447. Volumetric.createConcave:
  448.     clr.l    d0
  449.     move.w    (a1)+,d7                ; d7.w=#vertices
  450.     ble    .end
  451.  
  452.     movea.l    a1,a6                    ; a6: vertex table
  453.     movea.l    a1,a4                    ; a4: vertex table
  454.  
  455. ; First we center the points to vectors.
  456.     lea    Volumetric.lineTable,a0
  457.     movem.w    Volumetric.center,d3/d4/d5
  458.     subq.w    #1,d7
  459.     move.w    d7,d6
  460.  
  461. .center_loop:
  462.     movem.w    (a1)+,d0/d1/d2
  463.     sub.w    d3,d0
  464.     sub.w    d4,d1
  465.     sub.w    d5,d2
  466.     move.w    d0,(a0)+
  467.     move.w    d1,(a0)+
  468.     move.w    d2,(a0)+
  469.     dbra    d7,.center_loop
  470.  
  471.     movea.l    a1,a5                    ; a5: line table
  472.  
  473. ; Now we normalize the vectors.
  474.     lea    Volumetric.lineTable,a0
  475.     move.w    d6,d7
  476.     move.l    Volumetric.vectorLength,d5
  477.  
  478. ; norm(a,l) = a*l/|a|
  479. .norm_loop:
  480.     movem.w    (a0),d0-d2
  481.     muls.w    d0,d0
  482.     muls.w    d1,d1
  483.     muls.w    d2,d2
  484.     add.l    d0,d1
  485.     add.l    d2,d1
  486.     bsr.l    CALC_ATARISQRT
  487.     swap    d0
  488.     movem.w    (a0),d1-d3
  489.     muls.w    d5,d1
  490.     muls.w    d5,d2
  491.     muls.w    d5,d3
  492.     divs.w    d0,d1
  493.     divs.w    d0,d2
  494.     divs.w    d0,d3
  495.     add.w    (a4)+,d1
  496.     add.w    (a4)+,d2
  497.     add.w    (a4)+,d3
  498.     move.w    d1,(a0)+
  499.     move.w    d2,(a0)+
  500.     move.w    d3,(a0)+
  501.     dbra    d7,.norm_loop
  502.  
  503. ; Now we pump the vectors and mesh data in a HumanFly object...
  504.     lea    Volumetric.object,a0
  505.     move.w    d6,d0
  506.     addq.w    #1,d0
  507.     add.w    d0,d0
  508.     move.w    d0,(a0)+            ; Store amount of vertices.
  509.     clr.w    (a0)+                ; Store amount of normals (=0).
  510.  
  511. ; Store original vertices.
  512.     move.w    d6,d7
  513. .store_orgvertex_loop:
  514.     move.w    (a6)+,(a0)+
  515.     move.w    (a6)+,(a0)+
  516.  
  517.     move.w    (a6)+,(a0)+
  518.     dbra    d7,.store_orgvertex_loop
  519.  
  520. ; Store projected vertices.
  521.     lea    Volumetric.lineTable,a1
  522.     move.w    d6,d7
  523. .store_projvertex_loop:
  524.     move.w    (a1)+,(a0)+
  525.     move.w    (a1)+,(a0)+
  526.     move.w    (a1)+,(a0)+
  527.     dbra    d7,.store_projvertex_loop
  528.  
  529.     clr.w    (a0)+                ; Store amount of 2d vertices (=0).
  530.  
  531.     move.w    (a5)+,d0            ; d0.w=#lines=#sidepolys
  532.     move.w    d6,d1
  533.     addq.w    #1,d1
  534.     move.w    d0,d6
  535.     add.w    (a5,d0.w*4),d0            ; d0.w=#sidepolys+#basepolys=#polys
  536.     move.w    d0,(a0)+            ; Store amount of polys.
  537.     subq.w    #1,d6
  538. ; d1.w=#org vertices
  539. ; d6.w=#sidepolys-1
  540.  
  541. ; Store the polygons. The loops transforms a line into a polygon using
  542. ; it's original and projected vertices.
  543. ; poly: (a,a',b',b)
  544.     move.w    #Polygon.QUAD|Polygon.GOURAUDSHADED|0,d0
  545. .store_poly_loop:
  546.     move.w    d0,(a0)+
  547.     move.w    (a5)+,d7
  548.     move.w    d7,(a0)+            ; Store a.
  549.     move.w    d7,d2
  550.     add.w    d1,d2
  551.     move.w    d2,(a0)+            ; Store a'.
  552.     move.w    (a5)+,d7
  553.     move.w    d7,d2
  554.     add.w    d1,d2
  555.     move.w    d2,(a0)+            ; Store b'.
  556.     move.w    d7,(a0)+            ; Store b.
  557.  
  558. ; Shading still a dummy!!
  559.     move.w    #1,(a0)+
  560.     move.w    #125,(a0)+
  561.     move.w    #125,(a0)+
  562.     move.w    #1,(a0)+
  563.     dbra    d6,.store_poly_loop
  564.  
  565.     move.w    (a5)+,d7
  566.     beq.s    .end
  567.     subq.w    #1,d7
  568.  
  569. .base_poly_loop:
  570.     move.w    (a5)+,d5
  571.     subq.w    #1,d5
  572.     move.w    d5,d3
  573.     moveq    #Primitive.TYPESHIFT,d4
  574.     lsl.w    d4,d3
  575.     ori.w    #Polygon.FLATSHADED|1,d3
  576.     move.w    d3,(a0)+
  577.  
  578. .base_vertex_loop:
  579.     move.w    (a5)+,(a0)+
  580.     dbra    d5,.base_vertex_loop
  581.  
  582.     dbra    d7,.base_poly_loop
  583.  
  584. ; Calculate object size.
  585.     move.l    a0,d0
  586.     subi.l    #Volumetric.object,d0
  587.  
  588. .end:    rts
  589.  
  590. Volumetric.calcFadePal:
  591.     lea    Volumetric.fadepalTable,a0
  592.     moveq    #0,d7
  593.  
  594. .loop:    move.w    d7,d0
  595.     move.w    d7,d1
  596.     move.w    d7,d2
  597.     andi.w    #%1111100000000000,d0
  598.     andi.w    #%0000011111000000,d1
  599.     andi.w    #%0000000000011111,d2
  600.     mulu.w    #$00ff,d0
  601.     mulu.w    #$00ff,d1
  602.     mulu.w    #$00ff,d2
  603.     lsr.l    #8,d0
  604.     lsr.l    #8,d1
  605.     lsr.l    #8,d2
  606.     andi.w    #%1111100000000000,d0
  607.     andi.w    #%0000011111000000,d1
  608.     andi.w    #%0000000000011111,d2
  609.     or.w    d2,d0
  610.     or.w    d1,d0
  611.     move.w    d0,(a0)+
  612.     addq.w    #1,d7    
  613.     bne.s    .loop
  614.     rts
  615.  
  616. ; Ugly shit. Not needed!
  617.     IFNE    0
  618. Volumetric.paintLogo:
  619. ; Calc window dimensions..
  620.     clr.l    d3
  621.     move.w    $04BC.w,d3
  622.     lsr.w    d3
  623.     divu.w    #$00CC,d3
  624.     clr.w    d3
  625.     swap    d3
  626.     addi.w    #$0034,d3
  627.     move.l    #64<<8,d5
  628.     divu.w    d3,d5
  629.     move.w    d5,.segTable
  630.  
  631.     lea    Volumetric.fadepalTable,a3
  632.  
  633. ; First, clear last crap..
  634.     movea.l    scr,a0
  635.     movea.l    scr+8,a2
  636.     move.w    d5,d0
  637.     movea.w    d0,a5
  638.     adda.l    a5,a5
  639.     lsr.w    d0
  640.     sub.w    d0,d5
  641.     move.w    #160-1,d4
  642.     sub.w    d5,d4
  643.     move.w    #160,d6
  644.     sub.w    d0,d6
  645.  
  646.     subq.w    #1,d6
  647.     moveq    #18-1,d7
  648.     clr.l    d0
  649.  
  650. .clearloop1:
  651.     move.w    d6,d5
  652.  
  653. .clearxloop:
  654.     move.w    (a2)+,d0
  655.     move.w    (a3,d0.l*2),(a0)+
  656.     dbf    d5,.clearxloop
  657.  
  658.     adda.l    a5,a0
  659.     adda.l    a5,a2
  660.     move.w    d4,d5
  661.  
  662. .clearxloop2:
  663.     move.w    (a2)+,d0
  664.     move.w    (a3,d0.l*2),(a0)+
  665.     dbf    d5,.clearxloop2
  666.  
  667.     dbf    d7,.clearloop1
  668.  
  669. ; Secondly, paint logo..
  670.     lea    Volumetric.deltaLogo+20,a1
  671.     movea.l    scr,a0
  672.     movea.l    scr+8,a2
  673.     move.w    .segTable(pc),d5
  674.     move.w    d5,d4
  675.     lsr.w    d4
  676.     neg.w    d4
  677.     lea    (a0,d4.w*2),a0
  678.     adda.w    #160*2,a0
  679.     lea    (a2,d4.w*2),a2
  680.     adda.w    #160*2,a2
  681.  
  682.     subq.w    #1,d5
  683.     lsl.l    #8,d3
  684.     moveq    #18-1,d7
  685.     clr.l    d1
  686.  
  687. .yloop:    move.w    d5,d6
  688.     clr.l    d4
  689.  
  690. .xloop:    move.w    (a1,d4.w*2),d2
  691.     lsr.w    #2,d2
  692.     andi.w    #%0011100111000111,d2
  693.     move.w    (a2)+,d1
  694.  
  695.     add.w    (a3,d1.l*2),d2
  696.     bcc.s    .no_ceil
  697.     moveq    #$FFFFFFFF,d2
  698. .no_ceil:
  699.     move.w    d2,(a0)+
  700. ;    or.w    (a3,d1.l*2),d2
  701. ;    move.w    d2,(a0)+
  702.  
  703.     swap    d4
  704.     add.l    d3,d4
  705.     swap    d4
  706.     dbra    d6,.xloop
  707.  
  708.     adda.w    #320*2,a0
  709.     adda.w    #320*2,a2
  710.     suba.w    d5,a0
  711.     suba.w    d5,a0
  712.     suba.w    d5,a2
  713.     suba.w    d5,a2
  714.     subq    #2,a0
  715.     subq    #2,a2
  716.     adda.w    #64*2,a1
  717.     dbra    d7,.yloop
  718.  
  719. ; swap segment lengths.
  720.     lea    .segTable(pc),a0
  721.     move.w    (a0),d0
  722.     move.w    4(a0),(a0)
  723.     move.w    2(a0),4(a0)
  724.     move.w    d0,2(a0)
  725.  
  726.     rts
  727.  
  728. .segTable:
  729.     DC.W    0,0,0
  730.     ENDC
  731.  
  732. ******** OBJECT DATA ********
  733.  
  734.     DATA
  735.  
  736. ;Volumetric.deltaLogo:
  737. ;    INCBIN    DELTALE2.APX
  738.  
  739. Volumetric.textureTable:
  740.     DC.L    0
  741.  
  742. Volumetric.center:
  743.     DC.W    0,20,100
  744.  
  745. ;    /\
  746. ;   //\\
  747. ;  //__\\
  748. ; /______\
  749. Volumetric.deltaContour:
  750.     DC.W    6                ; # vertices
  751.     DC.W    -100,+100,0
  752.     DC.W    +000,-100,0
  753.     DC.W    +100,+100,0
  754.     DC.W    -070,+070,0
  755.     DC.W    +000,-070,0
  756.     DC.W    +070,+070,0
  757.     DC.W    6                ; # lines
  758.     DC.W    0,1
  759.     DC.W    1,2
  760.     DC.W    2,0
  761.     DC.W    4,3
  762.     DC.W    5,4
  763.     DC.W    3,5
  764.     DC.W    3                ; # base polys
  765.     DC.W    4,3,4,1,0
  766.     DC.W    4,4,5,2,1
  767.     DC.W    4,5,3,0,2
  768.  
  769. Volumetric.rectTableAddys:
  770.     DC.L    Volumetric.rectTable
  771.     DC.L    Volumetric.rectTable2
  772.     DC.L    Volumetric.rectTable3
  773.  
  774. ******** OBJECT RESERVES ********
  775.  
  776.     BSS
  777.  
  778. Volumetric.colorTable:
  779.     DS.W    256
  780.  
  781. Volumetric.rectangleTable:
  782.     DS.W    4*3*10
  783.  
  784. Volumetric.lineTable:
  785.     DS.W    1000
  786.  
  787. Volumetric.object:
  788.     DS.W    2
  789.     DS.B    100*Vertex.SIZE
  790.     DS.W    1
  791.     DS.W    1000
  792.  
  793. Volumetric.startTime:
  794.     DS.L    1
  795. Volumetric.startLiteTime:
  796.     DS.L    1
  797. Volumetric.startExitTime:
  798.     DS.L    1
  799. Volumetric.startZoomTime:
  800.     DS.L    1
  801.  
  802. Volumetric.rectTable:
  803.     DS.W    1+4*32
  804. Volumetric.rectTable2:
  805.     DS.W    1+4*32
  806. Volumetric.rectTable3:
  807.     DS.W    1+4*32
  808.  
  809. Volumetric.rotation:
  810.     DS.W    3
  811. Volumetric.translation:
  812.     DS.W    3
  813.  
  814. Volumetric.fadepalTable:
  815. ;    DS.W    65536
  816.  
  817. Volumetric.movementRout:
  818.     DS.L    1
  819. Volumetric.liteRout:
  820.     DS.L    1
  821. Volumetric.vectorLength:
  822.     DS.L    1
  823. Volumetric.lite:
  824.     DS.W    1
  825. Volumetric.exit:
  826.     DS.W    1
  827.  
  828. ******** END OF DEMO-EFFECT OBJECT ********