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

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