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

  1. ; Tunnelblobs. A screen for delta.
  2.  
  3. ;======= OBJECT EQUATES ========
  4.  
  5. ;======= OBJECT TABLE ========
  6.  
  7. ; Must be first in object!!
  8. TunnelBlob.table:
  9.     DC.L    TunnelBlob.mainLoop
  10.     DC.L    TunnelBlob.init
  11.     DC.L    TunnelBlob.setRes
  12.     DC.L    TunnelBlob.resetTime
  13.     DC.L    TunnelBlob.setToghether
  14.     DC.L    TunnelBlob.setSeparated
  15.     DC.L    0
  16.  
  17. ;======= RESOLUTION SETTING ROUTINE ========
  18.  
  19. TunnelBlob.setRes:
  20.     IFEQ    testmode
  21.     move.l    frmcnt,d0
  22.     sub.l    lastframecount,d0
  23.     beq.s    .end
  24.  
  25.     move.l    #rts,vbl_gfx
  26.  
  27.     move.w    monitormode,d0
  28.     cmpi.w    #vga60,d0
  29.     beq.s    .vga60
  30.     cmpi.w    #vga100,d0
  31.     beq.s    .vga100
  32.     cmpi.w    #rgb50,d0
  33.     beq.s    .rgb50
  34. ; Unknown monitormode..
  35.     rts
  36. .vga60:    bra.l    vga60_16bit_160_200
  37. .vga100:bra.l    vga100_16bit_160_100
  38. .rgb50:    bra.l    rgb50_16bit_320_100
  39.     ENDC
  40. .end:    rts
  41.  
  42. ;======= INIT SUBROUTINE ========
  43.  
  44. ; OUTPUT: d0.l: 0   = All clear.
  45. ;               neg = Error! Not initialized!
  46. TunnelBlob.init:
  47. .success:
  48.     moveq    #0,d0
  49.     rts
  50. .error:    moveq    #-1,d0
  51.     rts
  52.  
  53. ;======= REALTIME INIT SUBROUTINE ========
  54.  
  55. TunnelBlob.realtimeInit:
  56.     move.l    #TunnelBlob.setRes,vbl_gfx
  57.  
  58.     bsr    TunnelBlob.resetTime
  59.     bsr    TunnelBlob.setToghether
  60.     clr.w    TunnelBlob.trajMode
  61.     rts
  62.  
  63. ;======= MAINLOOP SUBROUTINE ========
  64.  
  65. TunnelBlob.mainLoop:
  66.     move.w    $0468.w,.old468
  67.  
  68.     move.l    frmcnt,d0
  69.     sub.l    lastframecount,d0
  70.     bne.s    .end_realtime_init
  71.     bsr    TunnelBlob.realtimeInit
  72. .end_realtime_init:
  73.  
  74.     bsr    TunnelBlob.paint
  75.  
  76.     IFEQ    testmode
  77.     lea    scr,a0
  78.     move.l    (a0)+,d0
  79.     move.l    (a0)+,d1
  80.     move.l    (a0),-4(a0)
  81.     move.l    d0,(a0)
  82.     move.l    d1,-8(a0)
  83.     move.l    d0,d1
  84.     lsr.w    #8,d0
  85.     move.l    d0,$ffff8200.w
  86.     move.b    d1,$ffff820d.w
  87.  
  88.     move.w    .old468(pc),d0
  89. .wait:    cmp.w    $0468.w,d0
  90.     beq.s    .wait
  91.  
  92.     ENDC
  93.  
  94.     rts
  95.  
  96. .old468:DC.W    0
  97.  
  98. ;======= OBJECT SUBROUTINES ========
  99.  
  100. TunnelBlob.resetTime:
  101.     move.l    $04BA.w,TunnelBlob.time
  102.     rts
  103.  
  104. TunnelBlob.setToghether:
  105.     move.l    #TunnelBlob.moveToghether,TunnelBlob.trajectRout
  106.     rts
  107.  
  108. TunnelBlob.setSeparated:
  109.     move.l    #TunnelBlob.moveShit,TunnelBlob.trajectRout
  110.     bsr    TunnelBlob.getTime
  111.     move.l    d0,TunnelBlob.sepStart
  112.     not.w    TunnelBlob.trajMode
  113.     rts
  114.  
  115. TunnelBlob.calcScales:
  116.     move.w    d0,d1
  117.     subi.w    #$0100,d1
  118.     neg.w    d1
  119.     move.w    #160,d2
  120.     move.w    #100,d3
  121.     move.w    d2,d4
  122.     move.w    d3,d5
  123.     mulu.w    d0,d2
  124.     mulu.w    d0,d3
  125.     mulu.w    d1,d4
  126.     mulu.w    d1,d5
  127.     lsr.l    #8,d2
  128.     lsr.l    #8,d3
  129.     lsr.l    #8,d4
  130.     lsr.l    #8,d5
  131.     move.w    d2,TunnelBlob.scaleX
  132.     move.w    d3,TunnelBlob.scaleY
  133.     move.w    d4,TunnelBlob.invScaleX
  134.     move.w    d5,TunnelBlob.invScaleY
  135.     rts
  136.  
  137. TunnelBlob.moveToghether:
  138.     move.w    d0,d1
  139.     mulu.w    #3,d0
  140.     lsr.l    #1,d0
  141.     mulu.w    #5,d1
  142.     lsr.l    #2,d1
  143.     Do_SinModulo    d0
  144.     Do_SinModulo    d1
  145.     lea    sine_tbl,a6
  146.     Get_Sin    a6,d0,d0
  147.     Get_Sin    a6,d1,d1
  148.  
  149. ; Multiply with x - amplitude.
  150.     muls.w    #160,d0
  151.     swap    d0
  152.     ext.l    d0
  153.     
  154. ; Multiply with y - amplitude.
  155.     muls.w    #100,d1
  156.     swap    d1
  157.     ext.l    d1
  158.  
  159.     move.l    d0,d2
  160.     move.l    d0,d4
  161.     move.l    d1,d3
  162.     move.l    d1,d5
  163.     rts
  164.  
  165. TunnelBlob.moveShit:
  166.     movem.l    d0-d5,-(sp)
  167.  
  168.     bsr    TunnelBlob.getTime
  169.     sub.l    TunnelBlob.sepStart,d0
  170.     lsr.l    #2,d0
  171.  
  172.     move.w    TunnelBlob.trajMode,d1
  173.     beq.s    .big
  174.  
  175. .small:    cmpi.l    #$00000080,d0
  176.     bls.s    .s_oki
  177.     move.w    #$0080,d0
  178. .s_oki:    bsr    TunnelBlob.calcScales
  179.     bra.s    .end_get_scale
  180.  
  181. .big:    addi.l    #$00000080,d0
  182.     cmpi.l    #$00000100,d0
  183.     bls.s    .oki
  184.     move.w    #$0100,d0
  185. .oki:    bsr    TunnelBlob.calcScales
  186.  
  187. .end_get_scale:
  188.     movem.l    (sp)+,d0-d5
  189.  
  190.     move.w    d0,d1
  191.     move.w    d0,d2
  192.     mulu.w    #3,d0
  193.     lsr.l    #1,d0
  194.     mulu.w    #5,d1
  195.     lsr.l    #2,d1
  196.     Do_SinModulo    d0
  197.     Do_SinModulo    d1
  198.     lea    sine_tbl,a6
  199.     Get_Sin    a6,d0,d0
  200.     Get_Sin    a6,d1,d1
  201.  
  202. ; Multiply with x - amplitude.
  203.     muls.w    TunnelBlob.invScaleX,d0
  204. ; Multiply with y - amplitude.
  205.     muls.w    TunnelBlob.invScaleY,d1
  206.  
  207.     move.w    d2,d3
  208.     move.w    d2,d4
  209.     move.w    d2,d5
  210.     move.w    d2,d6
  211.     move.w    d2,d7
  212.     mulu.w    #29,d2
  213.     lsr.l    #4,d2
  214.     mulu.w    #5,d3
  215.     lsr.l    #1,d3
  216.     mulu.w    #7,d4
  217.     lsr.l    #2,d4
  218.     neg.l    d4
  219.     mulu.w    #11,d5
  220.     lsr.l    #2,d5
  221.     mulu.w    #13,d6
  222.     lsr.l    #2,d6
  223.     mulu.w    #17,d7
  224.     lsr.l    #3,d7
  225.     neg.l    d7
  226.     Do_SinModulo    d2
  227.     Do_SinModulo    d3
  228.     Do_SinModulo    d4
  229.     Do_SinModulo    d5
  230.     Do_SinModulo    d6
  231.     Do_SinModulo    d7
  232.     lea    sine_tbl,a6
  233.     Get_Sin    a6,d2,d2
  234.     Get_Sin    a6,d3,d3
  235.     Get_Sin    a6,d4,d4
  236.     Get_Sin    a6,d5,d5
  237.     Get_Sin    a6,d6,d6
  238.     Get_Sin    a6,d7,d7
  239.  
  240. ; Multiply with x - amplitude.
  241.     muls.w    TunnelBlob.scaleX,d2
  242.     muls.w    TunnelBlob.scaleX,d4
  243.     muls.w    TunnelBlob.scaleX,d6
  244.     add.l    d0,d2
  245.     add.l    d0,d4
  246.     add.l    d0,d6
  247.     swap    d2
  248.     swap    d4
  249.     swap    d6
  250.     ext.l    d2
  251.     ext.l    d4
  252.     ext.l    d6
  253.     
  254. ; Multiply with y - amplitude.
  255.     muls.w    TunnelBlob.scaleY,d3
  256.     muls.w    TunnelBlob.scaleY,d5
  257.     muls.w    TunnelBlob.scaleY,d7
  258.     add.l    d1,d3
  259.     add.l    d1,d5
  260.     add.l    d1,d7
  261.     swap    d3
  262.     swap    d5
  263.     swap    d7
  264.     ext.l    d3
  265.     ext.l    d5
  266.     ext.l    d7
  267.  
  268.     move.l    d2,d0
  269.     move.l    d3,d1
  270.     move.l    d4,d2
  271.     move.l    d5,d3
  272.     move.l    d6,d4
  273.     move.l    d7,d5
  274.  
  275.     rts
  276.  
  277. ; OUTPUT:
  278. ; d0.l=time
  279. TunnelBlob.getTime:
  280.     move.l    $04BA.w,d0
  281.     sub.l    TunnelBlob.time,d0
  282.     rts
  283.  
  284. TunnelBlob.paint:
  285. ; Move texture..
  286.     bsr    TunnelBlob.getTime
  287.     move.l    d0,d1
  288.     lea    Texture.16bTexture2,a2
  289.     lsl.l    #7,d0
  290.     andi.l    #$00007F00,d0
  291.     lea    (a2,d0.l*2),a2    
  292.     move.l    d1,d0
  293.     Do_SinModulo    d0
  294.     Get_Sin    sine_tbl,d0,d0
  295.     asr.w    #6,d0
  296.     andi.l    #$0000007F,d0
  297.     lea    (a2,d0.l*2),a2
  298.  
  299. ; Move tunnels.
  300.     bsr    TunnelBlob.getTime
  301.     movea.l    TunnelBlob.trajectRout,a0
  302.     jsr    (a0)
  303.  
  304.     lea    Tunnel.offsetMap+(320*50+80)*2,a3
  305.     lea    Tunnel.offsetMap+(320*50+80)*2,a4
  306.     lea    Tunnel.offsetMap+(320*50+80)*2,a5
  307.  
  308.     muls.w    #320,d1
  309.     muls.w    #320,d3
  310.     muls.w    #320,d5
  311.     add.l    d0,d1
  312.     add.l    d2,d3
  313.     add.l    d4,d5
  314.     lea    (a3,d1.l*2),a3
  315.     lea    (a4,d3.l*2),a4
  316.     lea    (a5,d5.l*2),a5
  317.     clr.l    d0
  318.     move.l    #$7F7F7F7F,d1
  319.     clr.l    d2
  320.     clr.l    d3
  321.     moveq    #100-1,d7
  322.     movea.w    #160*2,a6
  323.     movea.l    scr,a0
  324.  
  325.     move.w    monitormode,d0
  326.     cmpi.w    #vga60,d0
  327.     beq    TunnelBlob.paintVga60
  328.     cmpi.w    #vga100,d0
  329.     beq.s    TunnelBlob.paintVga100
  330.     cmpi.w    #rgb50,d0
  331.     beq    TunnelBlob.paintRgb50
  332. * Unknown monitormode..
  333.     rts
  334.  
  335. TunnelBlob.paintVga100:
  336. .yloop:    moveq    #160/10-1,d6
  337.  
  338. .paint_loop:
  339.     REPT    5
  340.     move.l    (a3)+,d0
  341.     add.l    (a4)+,d0
  342.     add.l    (a5)+,d0
  343.     and.l    d1,d0
  344.     move.w    d0,d2
  345.     swap    d0
  346.     move.w    (a2,d0.w*2),(a0)+
  347.     move.w    (a2,d2.l*2),(a0)+
  348.     ENDR
  349.     dbf    d6,.paint_loop
  350.  
  351.     adda.l    a6,a3
  352.     adda.l    a6,a4
  353.     adda.l    a6,a5
  354.     dbf    d7,.yloop
  355.     rts
  356.  
  357. TunnelBlob.paintVga60:
  358.     lea    160*2(a0),a1
  359.  
  360. .yloop:    moveq    #160/10-1,d6
  361.  
  362. .paint_loop:
  363.     REPT    5
  364.     move.l    (a3)+,d0
  365.     add.l    (a4)+,d0
  366.     add.l    (a5)+,d0
  367.     and.l    d1,d0
  368.     move.w    (a2,d0.w*2),2(a0)
  369.     swap    d0
  370.     move.w    (a2,d0.w*2),(a0)
  371.     move.l    (a0)+,(a1)+
  372.     ENDR
  373.     dbf    d6,.paint_loop
  374.  
  375.     adda.l    a6,a0
  376.     adda.l    a6,a1
  377.     adda.l    a6,a3
  378.     adda.l    a6,a4
  379.     adda.l    a6,a5
  380.     dbf    d7,.yloop
  381.     rts
  382.  
  383. TunnelBlob.paintRgb50:
  384.  
  385. .yloop:    moveq    #160/10-1,d6
  386.  
  387. .paint_loop:
  388.     REPT    5
  389.     move.l    (a3)+,d0
  390.     add.l    (a4)+,d0
  391.     add.l    (a5)+,d0
  392.     and.l    d1,d0
  393.     move.w    (a2,d0.w*2),4(a0)
  394.     swap    d0
  395.     move.w    (a2,d0.w*2),(a0)
  396.     move.w    (a0)+,(a0)+
  397.     move.w    (a0)+,(a0)+
  398.     ENDR
  399.     dbra    d6,.paint_loop
  400.  
  401.     adda.l    a6,a3
  402.     adda.l    a6,a4
  403.     adda.l    a6,a5
  404.     dbra    d7,.yloop
  405.     rts
  406.  
  407. ;======= OBJECT DATA ========
  408.  
  409.     DATA
  410.  
  411. TunnelBlob.trajectRout:
  412.     DC.L    TunnelBlob.moveToghether
  413.  
  414. ;======= OBJECT RESERVES ========
  415.  
  416.     BSS
  417.  
  418. TunnelBlob.time:
  419.     DS.L    1
  420. TunnelBlob.sepStart:
  421.     DS.L    1
  422.  
  423. TunnelBlob.scaleX:
  424.     DS.W    1
  425. TunnelBlob.scaleY:
  426.     DS.W    1
  427. TunnelBlob.invScaleX:
  428.     DS.W    1
  429. TunnelBlob.invScaleY:
  430.     DS.W    1
  431.  
  432. TunnelBlob.trajMode:
  433.     DS.W    1