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

  1. ; Tunnel stuffs with alpha craps.
  2. ; Made for the delta demo..
  3.  
  4. ******** OBJECT EQUATES ********
  5.  
  6. Blender.GEN_TEXTURE:    =    1
  7.  
  8.             RSRESET
  9. Blender.mix_tbl:    RS.W    128*4*256
  10. Blender.picture16_buf:    RS.W    320*200
  11. Blender.BLOCK_SIZE:    RS.B    0
  12.  
  13. ******** OBJECT TABLE ********
  14.  
  15. * Must be first in object!!
  16. Blender.table:
  17.     DC.L    Blender.mainLoop
  18.     DC.L    Blender.init
  19.     DC.L    rts
  20.     DC.L    INSTALL_LIGHTPATT1
  21.     DC.L    INSTALL_LIGHTPATT2
  22.     DC.L    INSTALL_LIGHTPATT3
  23.     DC.L    0
  24.  
  25. ******** INIT SUBROUTINE ********
  26.  
  27. * OUTPUT: d0.l: 0   = All clear.
  28. *               neg = Error! Not initialized!
  29. Blender.init:
  30.     move.l    #Blender.BLOCK_SIZE,d0
  31.     bsr.l    Mem.register
  32.  
  33. .success:
  34.     moveq    #0,d0
  35.     rts
  36. .error:    moveq    #-1,d0
  37.     rts
  38.  
  39. Blender.initRealtime:
  40.     bsr.l    Mem.getBlock
  41.     move.l    d0,Blender.baseAdr
  42.  
  43.     bsr    BlendTunnel.calcAlphaPic
  44.  
  45.     IFNE    Blender.GEN_TEXTURE
  46.  
  47.     lea    FlareGen.chromeInstTable,a1
  48.     lea    flowpal_tbl,a0
  49.     bsr.l    Pal.makeGradientTc
  50.  
  51.     ELSE
  52.  
  53.     lea    texture8pal_tbl,a1
  54.     lea    flowpal_tbl,a0
  55.     bsr    CONVERT_APEX2FALCPAL
  56.  
  57.     ENDC
  58.  
  59.     lea    fadepal_tbl,a0
  60.     lea    fadeflow_tbl,a1
  61.     bsr.l    Pal.makeGradientTc
  62.  
  63.     movea.l    Blender.baseAdr,a0
  64.     adda.l    #Blender.mix_tbl,a0
  65.     lea    flowpal_tbl,a2
  66.     lea    fadepal_tbl,a1
  67.     movea.w    #256,a5
  68.     move.w    #-256,d7
  69.     bsr    CALC_MIXTABLE
  70.  
  71.     move.l    $04BA.w,Blender.startTime
  72.  
  73.     move.l    #rts,vbl_gfx
  74.  
  75.     move.w    monitormode,d0
  76.     cmpi.w    #vga60,d0
  77.     beq.s    .vga60
  78.     cmpi.w    #vga100,d0
  79.     beq.s    .vga100
  80.     cmpi.w    #rgb50,d0
  81.     beq.s    .rgb50
  82. * Unknown monitormode..
  83.     rts
  84. .vga60:    move.l    #PAINT_BLENDTUNNEL160200,paintblendtunnelroutadr
  85.     move.l    #vga60_16bit_160_200,Blender.resRout
  86.     rts
  87. .vga100:move.l    #PAINT_BLENDTUNNEL160100,paintblendtunnelroutadr
  88.     move.l    #vga100_16bit_160_100,Blender.resRout
  89.     rts
  90. .rgb50:    move.l    #PAINT_BLENDTUNNEL320100,paintblendtunnelroutadr
  91.     move.l    #rgb50_16bit_320_100,Blender.resRout
  92.     rts
  93.  
  94. ******** MAINLOOP SUBROUTINE ********
  95.  
  96. Blender.mainLoop:
  97.     move.l    frmcnt,d0
  98.     sub.l    lastframecount,d0
  99.     bne.s    .end_realtime_init
  100.     bsr    Blender.initRealtime
  101. .end_realtime_init:
  102.  
  103.     move.l    $04BA.w,d0
  104.     sub.l    Blender.startTime,d0
  105.     move.l    d0,Blender.time
  106.  
  107.     movea.l    tunnelroutadr,a0
  108.     jsr    (a0)
  109.  
  110.     lea    scr,a0
  111.     move.l    (a0)+,d0
  112.     move.l    (a0)+,d1
  113.     move.l    (a0),-4(a0)
  114.     move.l    d0,(a0)
  115.     move.l    d1,-8(a0)
  116.  
  117.     movea.l    Blender.resRout,a0
  118.     suba.l    a1,a1
  119.     movea.l    d0,a2
  120. .again:    bsr.l    Screen.requestUpdate
  121.     tst.l    d0
  122.     bmi.s    .again
  123.     clr.l    Blender.resRout
  124.     rts
  125.  
  126. ******** OBJECT SUBROUTINES ********
  127.  
  128. INSTALL_LIGHTPATT1:
  129.     move.l    #MOVE_LIGHTMAP1,lightroutadr
  130.     rts
  131.  
  132. INSTALL_LIGHTPATT2:
  133.     move.l    #MOVE_LIGHTMAP2,lightroutadr
  134.     rts
  135.  
  136. INSTALL_LIGHTPATT3:
  137.     move.l    #MOVE_LIGHTMAP3,lightroutadr
  138.     rts
  139.  
  140. ; Calculates a bump, used for the alpha layer..
  141. BlendTunnel.calcAlphaPic:
  142.     movea.l    Blender.baseAdr,a0
  143.     adda.l    #Blender.picture16_buf,a0
  144.     lea    320*2(a0),a1
  145.     lea    (320*199*2.l,a0),a2
  146.     lea    320*2(a2),a3
  147.     move.w    #199,d7
  148.  
  149. .yloop:    move.w    #319,d6
  150.  
  151. .xloop:    move.w    d6,d0
  152.     mulu.w    d0,d0
  153.     move.w    d7,d1
  154.     mulu.w    d1,d1
  155.     add.l    d0,d1
  156.     bsr.l    Math.sqrt
  157.     swap    d0
  158.     lsr.w    #1,d0
  159.     not.b    d0
  160.     lsl.w    #7,d0
  161.     move.w    d0,(a0)+
  162.     move.w    d0,-(a1)
  163.     move.w    d0,(a2)+
  164.     move.w    d0,-(a3)
  165.     subq.w    #2,d6
  166.     bpl.s    .xloop
  167.  
  168.     adda.w    #160*2,a0
  169.     adda.w    #480*2,a1
  170.     suba.w    #480*2,a2
  171.     suba.w    #160*2,a3
  172.     subq.w    #2,d7
  173.     bpl.s    .yloop
  174.  
  175.     rts
  176.  
  177. * Converts a 256 * 3byte APEX palette to a falcon $ffff9800 one.
  178. * INPUT: a0: output truecolor palette
  179. *        a1: apex palette table
  180. CONVERT_APEX2FALCPAL:
  181.     moveq    #0,d7
  182.     moveq    #0,d0
  183.  
  184. .loop:    move.w    (a1)+,(a0)+
  185.     move.b    (a1)+,d0
  186.     move.w    d0,(a0)+
  187.     addq.b    #1,d7
  188.     bne.s    .loop
  189.     rts
  190.  
  191. * Calculates a 64K highcolor-word lookup table from two 256 truecolor
  192. * palettes.
  193. * INPUT: d7.w: start intensity of palette1
  194. *        a0: highcolor lookuptable
  195. *        a1: truecolor palette1
  196. *        a2: truecolor palette2
  197. *        a5: number of entries in palette1
  198. CALC_MIXTABLE:
  199.     lea    Blender.tempBuffer,a3
  200.     clr.l    d6
  201.  
  202. .preloop:
  203.     clr.l    d3
  204.     clr.l    d4
  205.     move.b    (a2)+,d3
  206.     move.b    (a2)+,d4
  207.     move.w    (a2)+,d5
  208.     mulu.w    d6,d3
  209.     mulu.w    d6,d4
  210.     mulu.w    d6,d5
  211.     move.l    d3,(a3)+
  212.     move.l    d4,(a3)+
  213.     move.l    d5,(a3)+
  214.     addq.b    #1,d6
  215.     bne.s    .preloop
  216.  
  217.     movea.l    #$0000ffff,a6
  218.  
  219. .palloop:
  220.     lea    Blender.tempBuffer,a3
  221.     clr.l    d0
  222.     clr.l    d1
  223.     move.b    (a1)+,d0
  224.     move.b    (a1)+,d1
  225.     move.w    (a1)+,d2
  226.     muls.w    d7,d0
  227.     muls.w    d7,d1
  228.     muls.w    d7,d2
  229.     add.l    d0,d0
  230.     add.l    d1,d1
  231.     add.l    d2,d2
  232.     moveq    #0,d6
  233.  
  234. .colorloop:
  235.     movem.l    (a3)+,d3-d5
  236.     add.l    d0,d3
  237.     bpl.s    .red1_ok
  238.     clr.l    d3
  239.     bra.s    .red_ok
  240. .red1_ok:
  241.     cmp.l    a6,d3
  242.     blt.s    .red_ok
  243.     move.l    a6,d3
  244. .red_ok:
  245.     add.l    d1,d4
  246.     bpl.s    .green1_ok
  247.     clr.l    d4
  248.     bra.s    .green_ok
  249. .green1_ok:
  250.     cmp.l    a6,d4
  251.     blt.s    .green_ok
  252.     move.l    a6,d4
  253. .green_ok:
  254.     add.l    d2,d5
  255.     bpl.s    .blue1_ok
  256.     clr.l    d5
  257.     bra.s    .blue_ok
  258. .blue1_ok:
  259.     cmp.l    a6,d5
  260.     blt.s    .blue_ok
  261.     move.l    a6,d5
  262. .blue_ok:
  263.     andi.w    #%1111100000000000,d3
  264.     lsr.w    #5,d4
  265.     andi.w    #%0000011111100000,d4
  266.     lsr.w    #8,d5
  267.     lsr.w    #3,d5
  268.     or.w    d4,d3
  269.     or.w    d5,d3
  270.     move.w    d3,(a0)+
  271.     addq.b    #1,d6
  272.     bne.s    .colorloop
  273.  
  274.     addq.w    #1,d7
  275.     cmp.w    a5,d7
  276.     blt.s    .palloop
  277.  
  278.     rts
  279.  
  280. * INPUT:
  281. * d0.w: angle
  282. * a3: lightmap
  283. * OUTPUT:
  284. * d1.l: intensity
  285. * a3: lightmap + offset
  286. MOVE_LIGHTMAP1:
  287.     move.w    d0,d2
  288.     move.w    d0,d3
  289.     mulu.w    #5,d3
  290.     lsr.w    #2,d3
  291.     Do_SinModulo    d2
  292.     Do_SinModulo    d3
  293.     Get_Sin    a0,d2,d2
  294.     Get_Sin    a0,d3,d3
  295.     muls.w    #320/2,d2
  296.     muls.w    #200/2,d3
  297.     swap    d2
  298.     swap    d3
  299.     addi.w    #80,d2
  300.     add.w    d2,d2
  301.     addi.w    #50,d3
  302.     muls.w    #640,d3
  303.     add.w    d2,d3
  304.     adda.l    d3,a3
  305.     moveq    #0,d1
  306.     move.w    d0,d1
  307.     rts
  308.  
  309. * INPUT:
  310. * d0.w: angle
  311. * a3: lightmap
  312. * OUTPUT:
  313. * d1.l: intensity
  314. * a3: lightmap + offset
  315. MOVE_LIGHTMAP2:
  316.     move.w    d0,d2
  317.     move.w    d0,d3
  318.     mulu.w    #3,d3
  319.     mulu.w    #5,d2
  320.     lsr.w    #1,d2
  321.     Do_SinModulo    d2
  322.     Do_SinModulo    d3
  323.     Get_Sin    a0,d2,d2
  324.     Get_Sin    a0,d3,d3
  325.     muls.w    #320/2,d2
  326.     muls.w    #200/2,d3
  327.     swap    d2
  328.     swap    d3
  329.     addi.w    #80,d2
  330.     add.w    d2,d2
  331.     addi.w    #50,d3
  332.     muls.w    #640,d3
  333.     add.w    d2,d3
  334.     adda.l    d3,a3
  335.     moveq    #0,d1
  336.     move.w    d0,d1
  337.     rts
  338.  
  339. * INPUT:
  340. * d0.w: angle
  341. * a3: lightmap
  342. * OUTPUT:
  343. * d1.l: intensity
  344. * a3: lightmap + offset
  345. MOVE_LIGHTMAP3:
  346.     move.w    d0,d2
  347.     move.w    d0,d3
  348.     mulu.w    #3,d3
  349.     mulu.w    #5,d2
  350.     lsr.w    #1,d2
  351.     Do_SinModulo    d2
  352.     Do_SinModulo    d3
  353.     Get_Sin    a0,d2,d2
  354.     Get_Sin    a0,d3,d3
  355.     muls.w    #320/2,d2
  356.     muls.w    #200/2,d3
  357.     swap    d2
  358.     swap    d3
  359.     addi.w    #80,d2
  360.     add.w    d2,d2
  361.     addi.w    #50,d3
  362.     muls.w    #640,d3
  363.     add.w    d2,d3
  364.     adda.l    d3,a3
  365.     move.w    d0,d1
  366.     Do_SinModulo    d1
  367.     Get_Sin    sine_tbl,d1,d1
  368.     asr.w    #8,d1
  369.     addi.w    #2000,d1
  370.     andi.l    #$ffff,d1
  371.     rts
  372.  
  373. PAINT_BLENDSINETUNNEL:
  374.     lea    sine_tbl,a0
  375.     lea    Tunnel.offsetMap,a1
  376.     movea.l    Blender.baseAdr,a3
  377.     adda.l    #Blender.picture16_buf,a3
  378.     move.w    Blender.time+2,d0
  379.     move.w    d0,d2
  380.     Do_SinModulo    d2
  381.     Get_Sin    a0,d2,d2
  382.     move.w    d0,d3
  383.     mulu.w    #5,d3
  384.     lsr.w    #2,d3
  385.     Do_SinModulo    d3
  386.     Get_Sin    a0,d3,d3
  387.     muls.w    #320/2,d2
  388.     swap    d2
  389.     addi.w    #80,d2
  390.     add.w    d2,d2
  391.     muls.w    #200/2,d3
  392.     swap    d3
  393.     addi.w    #50,d3
  394.     muls.w    #640,d3
  395.     add.w    d2,d3
  396.     adda.l    d3,a1
  397.     movea.l    lightroutadr,a6
  398.     jsr    (a6)
  399.  
  400.     IFNE    Blender.GEN_TEXTURE
  401.     lea    Texture.8bTexture1,a2
  402.     ELSE
  403.     lea    texture8pixel_dat,a2
  404.     ENDC
  405.  
  406.     movea.l    Blender.baseAdr,a4
  407.     adda.l    #Blender.mix_tbl,a4
  408.     lsl.l    #5,d1
  409.     andi.w    #$ff00,d1
  410. .loop:    subi.l    #3*128*256,d1
  411.     bpl.s    .loop
  412.     addi.l    #3*128*256,d1
  413. .ok:    lea    (a4,d1.l*2),a4
  414.     move.w    d0,d2
  415.     lsr.w    #2,d2
  416.     Do_SinModulo    d2
  417.     Get_Sin    a0,d2,d2
  418.     asr.w    #5,d2
  419.     andi.w    #128-1,d2
  420.     lsr.w    #1,d0
  421.     andi.w    #128-1,d0
  422.     move.w    d0,d1
  423.     lsl.w    #8,d1
  424.     add.w    d1,d2
  425.     adda.w    d2,a2
  426.     movea.l    scr,a0
  427.     move.l    paintblendtunnelroutadr,a6
  428.     jmp    (a6)
  429.  
  430. * Paints a tunnel on a 320*100 highcolor screen.
  431. * INPUT: a0: screen
  432. *        a1: offset table
  433. *        a2: texture (8bpp)
  434. *        a3: blend picture (8bpp)
  435. *        a4: mix table
  436. PAINT_BLENDTUNNEL320100:
  437.     movea.w    #160*2,a6
  438.     moveq    #100-1,d7
  439.     moveq    #0,d0
  440.     moveq    #0,d1
  441.  
  442. * Does 16 pixels.
  443. .yloop:    moveq    #160/10-1,d6
  444.  
  445. .chunkloop:
  446.     REPT    10
  447.     move.w    (a1)+,d0
  448.     move.w    (a3)+,d1
  449.     move.b    (a2,d0.l),d1
  450.     move.w    (a4,d1.l*2),(a0)+
  451.     move.w    (a4,d1.l*2),(a0)+
  452.     ENDR
  453.     dbra    d6,.chunkloop
  454.  
  455.     adda.l    a6,a3
  456.     adda.l    a6,a1
  457.     dbra    d7,.yloop
  458.     rts
  459.  
  460. * Paints a tunnel on a 160*100 highcolor screen.
  461. * INPUT: a0: screen
  462. *        a1: offset table
  463. *        a2: texture (8bpp)
  464. *        a3: blend picture (8bpp, <<8)
  465. *        a4: mix table
  466. PAINT_BLENDTUNNEL160100:
  467.     movea.w    #160*2,a6
  468.     moveq    #100-1,d7
  469.     moveq    #0,d0
  470.     moveq    #0,d1
  471.  
  472. * Does 16 pixels.
  473. .yloop:    moveq    #160/16-1,d6
  474.  
  475. .chunkloop:
  476.     REPT    16
  477.     move.w    (a1)+,d0
  478.     move.w    (a3)+,d1
  479.     move.b    (a2,d0.l),d1
  480.     move.w    (a4,d1.l*2),(a0)+
  481.     ENDR
  482.     dbra    d6,.chunkloop
  483.  
  484.     adda.l    a6,a3
  485.     adda.l    a6,a1
  486.     dbra    d7,.yloop
  487.     rts
  488.  
  489. * Paints a tunnel on a 160*200 highcolor screen.
  490. * INPUT: a0: screen
  491. *        a1: offset table
  492. *        a2: texture (8bpp)
  493. *        a3: blend picture (8bpp)
  494. *        a4: mix table
  495. PAINT_BLENDTUNNEL160200:
  496.     lea    160*2(a0),a5
  497.     movea.w    #160*2,a6
  498.     moveq    #100-1,d7
  499.     moveq    #0,d0
  500.     moveq    #0,d1
  501.  
  502. * Does 16 pixels.
  503. .yloop:    moveq    #160/16-1,d6
  504.  
  505. .chunkloop:
  506.     REPT    16
  507.     move.w    (a1)+,d0
  508.     move.w    (a3)+,d1
  509.     move.b    (a2,d0.l),d1
  510.     move.w    (a4,d1.l*2),(a0)+
  511.     move.w    (a4,d1.l*2),(a5)+
  512.     ENDR
  513.     dbra    d6,.chunkloop
  514.  
  515.     adda.l    a6,a3
  516.     adda.l    a6,a1
  517.     adda.l    a6,a0
  518.     adda.l    a6,a5
  519.     dbra    d7,.yloop
  520.     rts
  521.  
  522. ******** OBJECT DATA ********
  523.  
  524.     DATA
  525.  
  526.     IFEQ    Blender.GEN_TEXTURE
  527. texture8_dat:
  528.     INCBIN    METAL256.APX
  529. texture8pal_tbl:    =    texture8_dat+$14
  530. texture8pixel_dat:    =    texture8_dat+$314
  531.     ENDC
  532.  
  533. tunnelroutadr:
  534.     DC.L    PAINT_BLENDSINETUNNEL
  535. paintblendtunnelroutadr:
  536.     DC.L    PAINT_BLENDTUNNEL160100
  537. lightroutadr:
  538.     DC.L    MOVE_LIGHTMAP1
  539.  
  540. fadeflow_tbl:
  541.     DC.W    4    (.end-.start)/4
  542.     DC.W    7
  543. .start:    DC.L    $ffff00ff
  544.     DC.L    $ffff00ff
  545.     DC.L    $00000000
  546.     DC.L    $ffff00ff
  547.     DC.L    $ffff00ff
  548. .end:
  549.  
  550. ******** OBJECT RESERVES ********
  551.  
  552.     BSS
  553.  
  554.     EVEN
  555.  
  556. Blender.resRout:
  557.     DS.L    1
  558. Blender.startTime:
  559.     DS.L    1
  560. Blender.time:
  561.     DS.L    1
  562. flowpal_tbl:
  563.     DS.L    256
  564. fadepal_tbl:
  565.     DS.L    128*4
  566. Blender.baseAdr:
  567.     DS.L    1
  568. Blender.tempBuffer:
  569.     DS.L    256*3
  570.