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

  1. ; Field of spikes. A screen for delta. Now running with 338 envmapped tris.
  2.  
  3. ******** OBJECT TABLE ********
  4.  
  5. * Must be first in object!!
  6. Spikes.table:
  7.     DC.L    Spikes.mainLoop
  8.     DC.L    Spikes.init
  9.     DC.L    rts
  10.     DC.L    Spikes.setLineWaves
  11.     DC.L    Spikes.setCircleWaves
  12.     DC.L    0
  13.  
  14.     IFND    DEMO_SYSTEM
  15.     INCLUDE    SFLY_DSP.S            ; Include the CPU-DSP engine.
  16.     TEXT
  17.     ENDC
  18.  
  19. ******** OBJECT EQUATES ********
  20.  
  21. Spikes.DISTANCE:    =    1000
  22. Spikes.NZ:        =    250        ; For normal-shading..
  23.  
  24. Spikes.WIDTH:        =    135
  25. Spikes.HEIGHT:        =    135
  26.  
  27. Spikes.XPOINTS:        =    14            ; >1 !!
  28. Spikes.YPOINTS:        =    14            ; >1 !!
  29.  
  30. Spikes.VCOUNT:        =    Spikes.XPOINTS*Spikes.YPOINTS
  31. Spikes.TRICOUNT:    =    (Spikes.XPOINTS-1)*(Spikes.YPOINTS-1)*2
  32.  
  33. Spikes.POINTTABLE_SIZE:    =    2+Vertex.SIZE*Spikes.VCOUNT
  34. Spikes.TXTTABLE_SIZE:    =    1+Vertex2d.SIZE*Spikes.VCOUNT
  35. Spikes.PRIMLIST_SIZE:    =    1+Spikes.TRICOUNT*7
  36.  
  37. Spikes.GRIDSIZE:    =    Spikes.POINTTABLE_SIZE+Spikes.TXTTABLE_SIZE+Spikes.PRIMLIST_SIZE    ; in words!
  38.  
  39. Spikes.BLOCK_SIZE:    =    160*100*2
  40.  
  41. ******** INIT SUBROUTINE ********
  42.  
  43. * OUTPUT: d0.l: 0   = All clear.
  44. *               neg = Error! Not initialized!
  45. Spikes.init:
  46.     move.l    #Spikes.BLOCK_SIZE,d0
  47.     bsr.l    Mem.register
  48.  
  49.     lea    sine_tbl,a1
  50.     bsr.l    Matrix.init
  51.  
  52. .success:
  53.     moveq    #0,d0
  54.     rts
  55. .error:    moveq    #-1,d0
  56.     rts
  57.  
  58. ******** REALTIME INIT SUBROUTINE ********
  59.  
  60. Spikes.realtimeInit:
  61.     bsr.l    Mem.getBlock
  62.     move.l    d0,Spikes.screenAdr
  63.  
  64.     move.l    #rts,vbl_gfx
  65.  
  66.     bsr.l    HumanFly.init
  67.  
  68.     lea    Viewport.settingsTable,a0
  69.     move.w    #160,Viewport.XSCREEN(a0)
  70.     move.w    #100,Viewport.YSCREEN(a0)
  71.     move.w    #0,Viewport.XSTART(a0)
  72.     move.w    #0,Viewport.YSTART(a0)
  73.     move.w    #160,Viewport.XEND(a0)
  74.     move.w    #100,Viewport.YEND(a0)
  75.     move.w    #80,Viewport.XCENTER(a0)
  76.     move.w    #50,Viewport.YCENTER(a0)
  77.     move.w    #256+32,Viewport.ASPECT(a0)
  78.     move.w    #$100,Viewport.FOCAL(a0)
  79.     bsr.l    Viewport.update
  80.  
  81.     lea    Spikes.textureTable,a0
  82.     bsr.l    Polygon.init
  83.  
  84.     bsr.l    ObjectRegistry.clear
  85.  
  86.     moveq    #0,d0
  87.     lea    Spikes.grid,a0
  88.     movea.l    Spikes.genAddy,a1
  89.     jsr    (a1)
  90. ; d0.l=size of generated grid
  91.  
  92.     lea    Spikes.grid,a0
  93.     bsr.l    ObjectRegistry.set
  94.     tst.w    d0
  95.     bmi.s    .error
  96.  
  97.     move.w    $04BC.w,Spikes.startTime
  98.     moveq    #0,d0
  99.     move.w    monitormode,d1
  100.     cmpi.w    #vga60,d1
  101.     beq.s    .vga60
  102.     cmpi.w    #vga100,d1
  103.     beq.s    .vga100
  104.     cmpi.w    #rgb50,d1
  105.     beq.s    .rgb50
  106. * Unknown monitormode..
  107.     rts
  108. .vga60:    move.l    #vga60_16bit_160_200,Spikes.resRout
  109.     rts
  110. .vga100:move.l    #vga100_16bit_160_100,Spikes.resRout
  111.     rts
  112. .rgb50:    move.l    #rgb50_16bit_320_100,Spikes.resRout
  113.     rts
  114.  
  115. .error:    moveq    #-1,d0
  116.     rts
  117.  
  118. ******** MAINLOOP SUBROUTINE ********
  119.  
  120. Spikes.mainLoop:
  121.     move.l    frmcnt,d0
  122.     sub.l    lastframecount,d0
  123.     bne.s    .end_realtime_init
  124.     bsr    Spikes.realtimeInit
  125.     tst.w    d0
  126.     bmi    .end
  127. .end_realtime_init:
  128.  
  129.     bsr    Spikes.setScreenAddy
  130.  
  131.     bsr.l    PrimitiveMesh.new
  132.  
  133.     bsr.w    Spikes.addGrid
  134.     tst.l    d0
  135.     bmi    .end
  136.  
  137.     bsr.l    PrimitiveMesh.sortZ
  138.     bsr.l    PrimitiveMesh.complete
  139.  
  140. ; with dsp h_fly this is in parallel!
  141.     bsr.w    Spikes.flushScreen    
  142.  
  143.     movea.l    Spikes.rectAddressTable,a0
  144.     bsr.l    PrimitiveMesh.paint
  145.  
  146.     lea    scr,a0
  147.     move.l    (a0)+,d0
  148.     move.l    (a0)+,d1
  149.     move.l    (a0),-4(a0)
  150.     move.l    d0,(a0)
  151.     move.l    d1,-8(a0)
  152.     movea.l    Spikes.resRout,a0
  153.     suba.l    a1,a1
  154.     movea.l    d0,a2
  155.     move.l    frmcnt,d0
  156.     cmp.l    lastframecount,d0
  157.     beq.s    .no_refresh            ; don't show screen when its still crap!
  158.     bsr.l    Screen.requestUpdate
  159.     clr.l    Spikes.resRout
  160. .no_refresh:
  161. .end:    rts
  162.  
  163. ******** OBJECT SUBROUTINES ********
  164.  
  165. Spikes.setLineWaves:
  166.     move.l    #Spikes.generate,Spikes.genAddy
  167.     rts
  168.  
  169. Spikes.setCircleWaves:
  170.     move.l    #Spikes.generate2env,Spikes.genAddy
  171.     rts
  172.  
  173. Spikes.setScreenAddy:
  174.     move.w    monitormode,d0
  175.     cmpi.w    #vga100,d0
  176.     beq.s    .vga100
  177.     movea.l    Spikes.screenAdr,a0
  178.     bra.l    Primitive.setScreenbuffer
  179. .vga100:movea.l    scr,a0
  180.     bra.l    Primitive.setScreenbuffer
  181.  
  182. ; INPUT:
  183. ; d0.l=genflags (0:total, 1:only points)
  184. ; a0=output buffer
  185. ; OUTPUT:
  186. ; d0.l=size of object
  187. Spikes.generate:
  188.     moveq    #0,d0                ; needed now text<->env differences exist
  189.     movea.l    a0,a6
  190.     move.w    d0,-(sp)
  191.  
  192. ; Generate 3d vertices.
  193.     lea    sine_tbl,a2
  194.     move.w    #Spikes.VCOUNT,(a0)+
  195.     clr.w    (a0)+
  196.     move.w    $04BC.w,d2
  197.     sub.w    Spikes.startTime,d2
  198.     IFNE    0
  199.     lsr.w    #1,d2
  200.     andi.w    #$03FF,d2
  201.     cmpi.w    #$0200,d2
  202.     blt.s    .oki
  203.     not.w    d2
  204. .oki:    andi.w    #$01FF,d2
  205.     ELSE
  206.     lsl.w    #2,d2
  207.     ENDC
  208.     clr.w    d7
  209.  
  210. .vyloop:
  211. ; Generate row.
  212.     move.w    d2,d3
  213.     clr.w    d6
  214. .vxloop:
  215.     move.w    #Spikes.WIDTH,d0
  216.     mulu.w    d6,d0
  217.     subi.w    #(Spikes.XPOINTS-1)*Spikes.WIDTH/2,d0
  218.     move.w    #Spikes.HEIGHT,d1
  219.     mulu.w    d7,d1
  220.     subi.w    #(Spikes.YPOINTS-1)*Spikes.HEIGHT/2,d1
  221.     move.w    d0,(a0)+
  222.     move.w    d1,(a0)+
  223.     addi.w    #400,d3
  224.     Do_SinModulo    d3
  225.     Get_Sin    a2,d3,d0
  226.     asr.w    #7,d0
  227. ;    move.w    d0,d1
  228. ;    asr.w    #1,d1
  229. ;    add.w    d1,d0
  230.     move.w    d0,(a0)+
  231.     addq.w    #1,d6
  232.     cmpi.w    #Spikes.XPOINTS,d6
  233.     blt.s    .vxloop
  234.  
  235. ;    addi.w    #150,d2
  236.     addq.w    #1,d7
  237.     cmpi.w    #Spikes.YPOINTS,d7
  238.     blt.s    .vyloop
  239.  
  240.     tst.w    (sp)+
  241.     bne    .end
  242.  
  243. ; Generate texture vertices.
  244.     move.w    #Spikes.VCOUNT,(a0)+
  245.     clr.w    d7
  246.  
  247. .vloop:    clr.w    d6
  248.  
  249. .uloop:    move.w    #511/(Spikes.XPOINTS-1),d0
  250.     mulu.w    d6,d0
  251.     andi.w    #$00FF,d0
  252.     move.w    d0,(a0)+
  253.     move.w    #511/(Spikes.YPOINTS-1),d0
  254.     mulu.w    d7,d0
  255.     andi.w    #$00FF,d0
  256.     move.w    d0,(a0)+
  257.     addq.w    #1,d6
  258.     cmpi.w    #Spikes.XPOINTS,d6
  259.     blt.s    .uloop
  260.  
  261.     addq.w    #1,d7
  262.     cmpi.w    #Spikes.YPOINTS,d7
  263.     blt.s    .vloop
  264.  
  265. ; Generate primitives.
  266.     moveq    #Spikes.XPOINTS,d6
  267.     moveq    #Spikes.YPOINTS,d7
  268.     move.w    #Spikes.TRICOUNT,(a0)+
  269.     subq.w    #2,d6
  270.     subq.w    #2,d7
  271.     move.w    d6,d5
  272.  
  273. .yloop:    
  274.  
  275. .xloop:    move.w    #Polygon.TRI|Polygon.TEXTUREMAPPED|0,(a0)+
  276.  
  277.     move.w    d7,d0
  278.     mulu.w    #Spikes.XPOINTS,d0
  279.     add.w    d6,d0
  280.     move.w    d0,(a0)+                ; p0=y*w+x
  281.  
  282.     move.w    d7,d0
  283.     mulu.w    #Spikes.XPOINTS,d0
  284.     add.w    d6,d0
  285.     addq.w    #1,d0
  286.     move.w    d0,(a0)+                ; p0=y*w+x+1
  287.  
  288.     move.w    d7,d0
  289.     addq.w    #1,d0
  290.     mulu.w    #Spikes.XPOINTS,d0
  291.     add.w    d6,d0
  292.     addq.w    #1,d0
  293.     move.w    d0,(a0)+                ; p0=(y+1)*w+x+1
  294.  
  295.     REPT    3
  296.     move.w    -6(a0),(a0)+
  297.     ENDR
  298.  
  299.     move.w    #Polygon.TRI|Polygon.TEXTUREMAPPED|0,(a0)+
  300.  
  301.     move.w    d7,d0
  302.     mulu.w    #Spikes.XPOINTS,d0
  303.     add.w    d6,d0
  304.     move.w    d0,(a0)+                ; p0=y*w+x
  305.  
  306.     move.w    d7,d0
  307.     addq.w    #1,d0
  308.     mulu.w    #Spikes.XPOINTS,d0
  309.     add.w    d6,d0
  310.     addq.w    #1,d0
  311.     move.w    d0,(a0)+                ; p0=(y+1)*w+x+1
  312.  
  313.     move.w    d7,d0
  314.     addq.w    #1,d0
  315.     mulu.w    #Spikes.XPOINTS,d0
  316.     add.w    d6,d0
  317.     move.w    d0,(a0)+                ; p0=(y+1)*w+x
  318.  
  319.     REPT    3
  320.     move.w    -6(a0),(a0)+
  321.     ENDR
  322.  
  323.     dbra    d6,.xloop    
  324.  
  325.     move.w    d5,d6
  326.     dbra    d7,.yloop
  327.  
  328. .end:    move.l    a0,d0
  329.     sub.l    a6,d0
  330.     rts
  331.  
  332. ; INPUT:
  333. ; d0.l=genflags (0:total, 1:only points)
  334. ; a0=output buffer
  335. ; OUTPUT:
  336. ; d0.l=size of object
  337. Spikes.generate2env:
  338.     movea.l    a0,a6
  339.     move.w    d0,-(sp)
  340.  
  341. ; Generate 3d vertices.
  342.     lea    sine_tbl,a2
  343.     move.w    #Spikes.VCOUNT*2,(a0)+
  344.     move.w    #Spikes.VCOUNT,(a0)+
  345.     lea    Spikes.VCOUNT*Vertex.SIZE(a0),a1
  346.     move.w    $04BC.w,d4
  347.     sub.w    Spikes.startTime,d4
  348.     move.w    d4,d5
  349.     mulu.w    #5,d4
  350.     mulu.w    #6,d5
  351.     clr.w    d7
  352.  
  353. .vyloop:
  354. ; Generate row.
  355.     clr.w    d6
  356.  
  357. .vxloop:move.w    d6,d0
  358.     mulu.w    #Spikes.WIDTH,d0
  359.     subi.w    #Spikes.WIDTH*Spikes.XPOINTS/2,d0
  360.     move.w    d0,(a0)+            ; Store x.
  361.     move.w    d7,d0
  362.     mulu.w    #Spikes.HEIGHT,d0
  363.     subi.w    #Spikes.HEIGHT*Spikes.YPOINTS/2,d0
  364.     move.w    d0,(a0)+            ; Store y.
  365.  
  366.     move.w    d6,d0
  367.     lsl.w    #8,d0
  368.     add.w    d5,d0
  369.     Do_SinModulo    d0            ; d0.w=c<<8+t
  370.     Get_SinCos    a2,d0,d0,d2        ; d0.w=sin(c<<8+t1), d2.w=cos(c<<8+t1)
  371.     asr.w    #1,d0
  372.  
  373.     move.w    d7,d1
  374.     lsl.w    #8,d1
  375.     sub.w    d4,d1
  376.     Do_SinModulo    d1
  377.     Get_SinCos    a2,d1,d1,d3        ; d1.w=sin(r<<8+t2), d3.w=cos(r<<8+t2)
  378.     asr.w    #1,d1
  379.  
  380.     add.w    d1,d0                ; d0.w=[sin(c<<8+t1)+sin(r<<8+t2)]/2
  381.     asr.w    #6,d0                ; Store z.
  382.     move.w    d0,(a0)+
  383.  
  384. ;
  385. ;                           1                     [a*cos(a*c+t1)]
  386. ; n = ------------------------------------------- [b*cos(b*r+t2)]
  387. ; -   sqrt[(a*cos(a*c+t1))^2+(b*cos(b*r+t2))^2+4] [     -2      ]
  388. ;
  389.  
  390.     asr.w    #8,d2
  391.     asr.w    #8,d3
  392.  
  393.     move.w    d2,d1
  394.     muls.w    d1,d1
  395.     add.l    d1,d1                ; frac sillyness
  396.     move.w    d3,d0
  397.     muls.w    d0,d0
  398.     add.l    d0,d0                ; frac sillyness
  399.     add.l    d0,d1
  400.     addi.l    #Spikes.NZ*Spikes.NZ*2,d1    ; n.z^2 (frac sillyness)
  401. ; d1.l= nx^2+ny^2+nz^2
  402.     movem.w    d2-d3,-(sp)
  403.     bsr.l    Math.sqrt
  404.     movem.w    (sp)+,d2-d3
  405.     clr.w    d0
  406.     swap    d0
  407.     addq.w    #1,d0
  408.     lsl.l    #8,d2
  409.     lsl.l    #8,d3
  410.     divs.w    d0,d2
  411.     divs.w    d0,d3
  412.     move.l    #Spikes.NZ<<7,d1
  413.     divs.w    d0,d1
  414.  
  415.     move.w    d3,(a1)+            ; Store n.x.
  416.     move.w    d2,(a1)+            ; Store n.y.
  417.     move.w    d1,(a1)+            ; Store n.z.
  418.  
  419.     addq.w    #1,d6
  420.     cmpi.w    #Spikes.XPOINTS,d6
  421.     blt    .vxloop
  422.  
  423.     addq.w    #1,d7
  424.     cmpi.w    #Spikes.YPOINTS,d7
  425.     blt    .vyloop
  426.  
  427.     movea.l    a1,a0                ; a0: dst texeltable
  428.  
  429.     tst.w    (sp)+
  430.     bne    .end
  431.  
  432.     clr.w    (a0)+                ; 0 texels
  433.  
  434. ; Generate primitives.
  435.     moveq    #Spikes.XPOINTS,d6
  436.     moveq    #Spikes.YPOINTS,d7
  437.     move.w    #Spikes.TRICOUNT,(a0)+
  438.     subq.w    #2,d6
  439.     subq.w    #2,d7
  440.     move.w    d6,d5
  441.  
  442. .yloop:    
  443.  
  444. .xloop:    move.w    #Polygon.TRI|Polygon.ENVMAPPED|0,(a0)+
  445.  
  446.     move.w    d7,d0
  447.     mulu.w    #Spikes.XPOINTS,d0
  448.     add.w    d6,d0
  449.     move.w    d0,(a0)+                ; p0=y*w+x
  450.  
  451.     move.w    d7,d0
  452.     mulu.w    #Spikes.XPOINTS,d0
  453.     add.w    d6,d0
  454.     addq.w    #1,d0
  455.     move.w    d0,(a0)+                ; p0=y*w+x+1
  456.  
  457.     move.w    d7,d0
  458.     addq.w    #1,d0
  459.     mulu.w    #Spikes.XPOINTS,d0
  460.     add.w    d6,d0
  461.     addq.w    #1,d0
  462.     move.w    d0,(a0)+                ; p0=(y+1)*w+x+1
  463.  
  464.     REPT    3
  465.     move.w    -6(a0),d0
  466.     addi.w    #Spikes.VCOUNT,d0
  467.     move.w    d0,(a0)+
  468.     ENDR
  469.  
  470.     move.w    #Polygon.TRI|Polygon.ENVMAPPED|0,(a0)+
  471.  
  472.     move.w    d7,d0
  473.     mulu.w    #Spikes.XPOINTS,d0
  474.     add.w    d6,d0
  475.     move.w    d0,(a0)+                ; p0=y*w+x
  476.  
  477.     move.w    d7,d0
  478.     addq.w    #1,d0
  479.     mulu.w    #Spikes.XPOINTS,d0
  480.     add.w    d6,d0
  481.     addq.w    #1,d0
  482.     move.w    d0,(a0)+                ; p0=(y+1)*w+x+1
  483.  
  484.     move.w    d7,d0
  485.     addq.w    #1,d0
  486.     mulu.w    #Spikes.XPOINTS,d0
  487.     add.w    d6,d0
  488.     move.w    d0,(a0)+                ; p0=(y+1)*w+x
  489.  
  490.     REPT    3
  491.     move.w    -6(a0),d0
  492.     addi.w    #Spikes.VCOUNT,d0
  493.     move.w    d0,(a0)+
  494.     ENDR
  495.  
  496.     dbf    d6,.xloop    
  497.  
  498.     move.w    d5,d6
  499.     dbf    d7,.yloop
  500.  
  501. .end:    move.l    a0,d0
  502.     sub.l    a6,d0
  503.     rts
  504.  
  505. Spikes.addGrid:
  506.     moveq    #1,d0
  507.     lea    Spikes.grid,a0
  508.     movea.l    Spikes.genAddy,a1
  509.     jsr    (a1)
  510. ; d0.l=size of generated grid
  511.  
  512.     IFNE    1
  513.  
  514.     move.l    d0,-(sp)
  515.     bsr.l    ObjectRegistry.clear
  516.     move.l    (sp)+,d0
  517.  
  518.     lea    Spikes.grid,a0
  519.     bsr.l    ObjectRegistry.set
  520.  
  521.     ELSE
  522.  
  523.     lea    Spikes.grid,a0
  524.     moveq    #0,d0                ; handle
  525.     moveq    #%0001,d1            ; Replace only 3d vertices.
  526.     move.l    #Spikes.GRIDSIZE*2,d2        ; objsize
  527.     bsr.l    ObjectRegistry.replace
  528.  
  529.     ENDC
  530.  
  531. ; Push world rotation matrix.
  532.     move.w    $04BC.w,d0
  533.     sub.w    Spikes.startTime,d0
  534.     lea    sine_tbl,a1
  535.     move.w    d0,d2
  536.     mulu.w    #7,d0
  537.     lsr.l    #4,d0
  538.     Do_SinModulo    d0
  539.     Get_Sin    a1,d0,d0
  540.     muls.w    #$E0*2,d0            ; x-rot amp
  541.     swap    d0
  542.     addi.w    #1024,d0
  543.     clr.l    d1
  544.     mulu.w    #5,d2
  545.     lsr.w    #3,d2
  546.     Do_SinModulo    d2
  547.     Get_Cos    a1,d2,d2
  548.     asr.w    #5,d2
  549.     bsr.l    Matrix.generate
  550.     move.w    #0,d0
  551.     move.w    #0,d1
  552.     move.w    #Spikes.DISTANCE,d2
  553.     bsr.l    Matrix.translate
  554.     bsr.l    Matrix.push
  555.  
  556.     moveq    #TransformObject.BACKFACE_CULLING|TransformObject.PERSPECTIVATE,d0
  557.     moveq    #0,d1
  558.     bsr.l    TransformObject.transform
  559.  
  560.     bsr.l    Matrix.pop
  561.  
  562.     moveq    #0,d0
  563.     rts
  564.  
  565. .error:    moveq    #-1,d0
  566.     rts
  567.  
  568. Spikes.flushScreen:
  569.     move.w    monitormode,d2
  570.     cmpi.w    #vga100,d2
  571.     beq.s    .copy_done
  572.     move.w    #160,d0
  573.     moveq    #100,d1
  574.     movea.l    Spikes.screenAdr,a1
  575.     movea.l    scr,a0
  576.     cmpi.w    #vga60,d2
  577.     beq.l    DOUBLE_BUFFERV
  578.     cmpi.w    #rgb50,d2
  579.     beq.l    .double_horizontally
  580. ; Unknown monitormode..
  581. .copy_done:
  582.     rts
  583.  
  584. .double_horizontally:
  585.     move.w    #160*100/16-1,d7
  586. .loop:    REPT    16
  587.     move.w    (a1),(a0)+
  588.     move.w    (a1)+,(a0)+
  589.     ENDR
  590.     dbf    d7,.loop
  591.     rts
  592.  
  593. ******** OBJECT DATA ********
  594.  
  595.     DATA
  596.  
  597. Spikes.textureTable:
  598.     DC.L    Texture.spaceTexture
  599.     DC.L    0
  600.  
  601. Spikes.rectAddressTable:
  602.     DC.L    Spikes.rectTable
  603.     DC.L    Spikes.rectTable2
  604.     DC.L    Spikes.rectTable3
  605.  
  606. Spikes.genAddy:
  607.     DC.L    Spikes.generate2env
  608.  
  609. ******** OBJECT RESERVES ********
  610.  
  611.     BSS
  612.  
  613. Spikes.grid:
  614.     DS.W    Spikes.GRIDSIZE
  615.  
  616. Spikes.rectTable:
  617.     DS.W    1+4*32
  618. Spikes.rectTable2:
  619.     DS.W    1+4*32
  620. Spikes.rectTable3:
  621.     DS.W    1+4*32
  622.  
  623. Spikes.startTime:
  624.     DS.W    1
  625. Spikes.resRout:    
  626.     DS.L    1
  627. Spikes.screenAdr:
  628.     DS.L    1
  629.  
  630. ******** END OF DEMO-EFFECT OBJECT ********