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

  1. ; Alphablended bumpmapper, damn slow. Best use vga100 on this one.
  2. ; A screen for delta. 160*100 physical, 320*200 logical.
  3.  
  4. ;======= OBJECT EQUATES ========
  5.  
  6.             RSRESET
  7. Bumpmap.offsetMap:    RS.W    320*200
  8. Bumpmap.shiftedLightMap:RS.W    256*256
  9. Bumpmap.mixTable:    RS.W    512*256
  10. Bumpmap.fadePalTable:    RS.L    256*4*2
  11. Bumpmap.picture:    RS.B    320*200                ; 8bpp picture
  12. Bumpmap.colorBucket:    RS.B    65536                ; 16bpp->8bpp lookuptable
  13. Bumpmap.lumPic:        RS.B    320*200
  14. Bumpmap.BLOCK_SIZE:    RS.B    0
  15.  
  16. ;======= OBJECT TABLE ========
  17.  
  18. * Must be first in object!!
  19. Bumpmap.table:
  20.     DC.L    BumpmapMAINLOOP
  21.     DC.L    INIT_Bumpmap
  22.     DC.L    rts
  23.     DC.L    Bumpmap.setTraject1
  24.     DC.L    Bumpmap.setTraject2
  25.     DC.L    Bumpmap.setFadeIn
  26.     DC.L    Bumpmap.setFadeOut
  27.     DC.L    Bumpmap.stopFade
  28. * Add more addresses here..
  29.     DC.L    0
  30.  
  31. ;======= INIT SUBROUTINE ========
  32.  
  33. ; OUTPUT:
  34. ; d0.l: 0   = All clear.
  35. ;       <0  = Error! Not initialized!
  36. INIT_Bumpmap:
  37.     move.l    #Bumpmap.BLOCK_SIZE,d0
  38.     bsr.l    Mem.register
  39.  
  40.     move.w    #320,Bumpmap.picWidth
  41.     move.w    #200,Bumpmap.picHeight
  42. .success:
  43.     moveq    #0,d0
  44.     rts
  45. .error:    moveq    #-1,d0
  46.     rts
  47.  
  48. ;======= SCREENINIT SUBROUTINE ========
  49.  
  50. INIT_BumpmapSCREEN:
  51. ; Insert screenarea initialising, etc. in here!
  52.     rts
  53.  
  54. Bumpmap.initRealtime:
  55.     bsr.l    Mem.getBlock
  56.     move.l    d0,Bumpmap.baseAdr
  57.  
  58.     movea.l    Bumpmap.baseAdr,a1
  59.  
  60.     movea.l    a1,a0
  61.     adda.l    #Bumpmap.offsetMap,a0
  62.     move.l    a0,Bumpmap.offsetMapAdr
  63.     movea.l    a1,a0
  64.     adda.l    #Bumpmap.shiftedLightMap,a0
  65.     move.l    a0,Bumpmap.lightMapAdr
  66.     movea.l    a1,a0
  67.     adda.l    #Bumpmap.mixTable,a0
  68.     move.l    a0,Bumpmap.mixTableAdr
  69.     movea.l    a1,a0
  70.     adda.l    #Bumpmap.fadePalTable,a0
  71.     move.l    a0,Bumpmap.palAdr
  72.     movea.l    a1,a0
  73.     adda.l    #Bumpmap.picture,a0
  74.     move.l    a0,Bumpmap.pictureAdr
  75.     movea.l    a1,a0
  76.     adda.l    #Bumpmap.colorBucket,a0
  77.     move.l    a0,Bumpmap.bucketAdr
  78.     movea.l    a1,a0
  79.     adda.l    #Bumpmap.lumPic,a0
  80.     move.l    a0,Bumpmap.lumPicAdr
  81.  
  82. ; Get highcolor palette from source picture..
  83.     IFNE    1
  84.  
  85.     lea    Texture.sandPal,a1
  86.     lea    Bumpmap.picPal,a0
  87.     lea    Bumpmap.picHcPal,a2
  88.     moveq    #128-1,d7
  89. .copy_sandpal_loop:
  90.     move.w    (a1)+,d0
  91.     move.w    d0,(a2)+
  92.     move.w    d0,d1
  93.     move.w    d0,d2
  94.     andi.w    #$F800,d0
  95.     andi.w    #$07E0,d1
  96.     andi.w    #$001F,d2
  97.     lsr.w    #3,d1
  98.     or.w    d1,d0
  99.     swap    d2
  100.     lsl.w    #3,d2
  101.     move.w    d0,(a0)+
  102.     move.w    d2,(a0)+
  103.     dbf    d7,.copy_sandpal_loop
  104.  
  105.     lea    Texture.redPal,a1
  106.     moveq    #128-1,d7
  107. .copy_starfishpal_loop:
  108.     move.w    (a1),d0
  109.     move.w    d0,(a2)+
  110.     move.w    d0,d1
  111.     move.w    d0,d2
  112.     andi.w    #$F800,d0
  113.     andi.w    #$07E0,d1
  114.     andi.w    #$001F,d2
  115.     lsr.w    #3,d1
  116.     or.w    d1,d0
  117.     swap    d2
  118.     lsl.w    #3,d2
  119.     move.w    d0,(a0)+
  120.     move.w    d2,(a0)+
  121.     addq    #4,a1
  122.     dbf    d7,.copy_starfishpal_loop
  123.  
  124.     ELSE
  125.  
  126.     lea    Bumpmap.sandFlowTable,a1
  127.     lea    Bumpmap.picPal,a0
  128.     bsr.l    Pal.makeGradientHc
  129.     lea    Bumpmap.blueFlowTable,a1
  130.     lea    Bumpmap.picPal+128*2,a0
  131.     bsr.l    Pal.makeGradientHc
  132.  
  133.     ENDC
  134.  
  135.     bsr.w    Bumpmap.initPicture
  136.     bsr.w    Bumpmap.initOffsetMap
  137.     bsr.w    Bumpmap.calcAlphaPic
  138.  
  139.     movea.l    Bumpmap.palAdr,a0
  140.     lea    Bumpmap.fadeFlowTable,a1
  141.     bsr.l    Pal.makeGradientTc
  142.  
  143.     movea.l    Bumpmap.mixTableAdr,a0
  144.     movea.l    Bumpmap.palAdr,a1
  145.     lea    Bumpmap.picPal,a2
  146.     movea.w    #512,a5
  147.     move.w    #0,d7
  148.     bsr.w    Bumpmap.calcMixTable
  149.  
  150.     move.w    $04BC.w,Bumpmap.trajStart
  151.  
  152.     clr.w    Bumpmap.alphaIntensity
  153.     clr.w    Bumpmap.oldAlphaIntensity
  154.     bsr    Bumpmap.stopFade
  155.  
  156.     move.w    monitormode,d0
  157.     cmpi.w    #vga60,d0
  158.     beq.s    .vga60
  159.     cmpi.w    #vga100,d0
  160.     beq.s    .vga100
  161.     cmpi.w    #rgb50,d0
  162.     beq.s    .rgb50
  163. * Unknown monitormode..
  164.     rts
  165. .vga60:    move.l    #vga60_16bit_160_200,Bumpmap.resRout
  166.     rts
  167. .vga100:move.l    #vga100_16bit_160_100,Bumpmap.resRout
  168.     rts
  169. .rgb50:    move.l    #rgb50_16bit_320_100,Bumpmap.resRout
  170.     rts
  171.  
  172. ;======= MAINLOOP SUBROUTINE ========
  173.  
  174. BumpmapMAINLOOP:
  175.     move.l    frmcnt,d0
  176.     sub.l    lastframecount,d0
  177.     bne.s    .realtime_init_done
  178.     move.l    d0,-(sp)
  179.     bsr.w    Bumpmap.initRealtime
  180.     move.l    (sp)+,d0
  181. .realtime_init_done:
  182.     cmpi.l    #3,d0
  183.     bhs.s    .end_screeninit
  184.     bsr.w    INIT_BumpmapSCREEN
  185. .end_screeninit:
  186.  
  187.     move.l    Bumpmap.trajectRoutine,a0
  188.     jsr    (a0)
  189.  
  190.     bsr.w    Bumpmap.performFade
  191.  
  192.     moveq    #0,d2
  193.     move.w    Bumpmap.alphaIntensity,d2
  194.  
  195.     bsr.w    Bumpmap.paint
  196.  
  197.     lea    scr,a0
  198.     move.l    (a0)+,d0
  199.     move.l    (a0)+,d1
  200.     move.l    (a0),-4(a0)
  201.     move.l    d0,(a0)
  202.     move.l    d1,-8(a0)
  203.  
  204.     movea.l    Bumpmap.resRout,a0
  205.     suba.l    a1,a1
  206.     movea.l    d0,a2
  207. .again:    bsr.l    Screen.requestUpdate
  208.     tst.l    d0
  209.     bmi.s    .again
  210.     clr.l    Bumpmap.resRout
  211.  
  212.     rts
  213.  
  214. ;======= OBJECT SUBROUTINES ========
  215.  
  216. Bumpmap.setTraject1:
  217.     move.l    #Bumpmap.calcTraject1,Bumpmap.trajectRoutine
  218.     rts
  219.  
  220. Bumpmap.setTraject2:
  221.     move.l    #Bumpmap.calcTraject2,Bumpmap.trajectRoutine
  222.     rts
  223.  
  224. Bumpmap.setFadeIn:
  225.     move.w    $4bc.w,Bumpmap.startTime
  226.     move.w    #+1,Bumpmap.fadeDirection
  227.     move.w    Bumpmap.alphaIntensity,Bumpmap.oldAlphaIntensity
  228.     rts
  229.  
  230. Bumpmap.setFadeOut:
  231.     move.w    $4bc.w,Bumpmap.startTime
  232.     move.w    #-1,Bumpmap.fadeDirection
  233.     move.w    Bumpmap.alphaIntensity,Bumpmap.oldAlphaIntensity
  234.     rts
  235.  
  236. Bumpmap.stopFade:
  237.     clr.w    Bumpmap.fadeDirection
  238.     rts
  239.  
  240. ; Calculates a bump, used for the alpha layer..
  241. Bumpmap.calcAlphaPic:
  242.     movea.l    Bumpmap.lightMapAdr,a0
  243.     lea    256*2(a0),a1
  244.     lea    (256*255*2.l,a0),a2
  245.     lea    256*2(a2),a3
  246.     move.w    #255,d7
  247.  
  248. .yloop:    move.w    #255,d6
  249.  
  250. .xloop:    move.w    d6,d0
  251.     mulu.w    d0,d0
  252.     move.w    d7,d1
  253.     mulu.w    d1,d1
  254.     add.l    d0,d1
  255.     bsr.l    Math.sqrt
  256.     swap    d0
  257.     lsr.w    #1,d0
  258.     not.b    d0
  259.     lsl.w    #7,d0
  260.     move.w    d0,(a0)+
  261.     move.w    d0,-(a1)
  262.     move.w    d0,(a2)+
  263.     move.w    d0,-(a3)
  264.     subq.w    #2,d6
  265.     bpl.s    .xloop
  266.  
  267.     adda.w    #128*2,a0
  268.     adda.w    #384*2,a1
  269.     suba.w    #384*2,a2
  270.     suba.w    #128*2,a3
  271.     subq.w    #2,d7
  272.     bpl.s    .yloop
  273.  
  274.     rts
  275.  
  276. ; Converts a 320*200 highcolor screen to a 8bpp pal-based screen.
  277. ; PRE: 320*200 hc source must only use 256 different colors as specified
  278. ; in the given picture-palette!
  279. Bumpmap.initPicture:
  280. ; First, calculate luminance pal and 16bpp->8bpp conversion table.
  281.     movea.l    Bumpmap.bucketAdr,a2
  282.     lea    Bumpmap.picHcPal,a1
  283.     lea    Bumpmap.lumPal,a0
  284.     clr.w    d7
  285.  
  286. .loop:    clr.l    d0
  287.     move.w    (a1)+,d0
  288.     move.b    d7,(a2,d0.l)            ; Store colorindex.
  289.     move.w    d0,d1
  290.     move.w    d0,d2
  291.     lsr.w    #5,d0
  292.     lsr.w    #6,d0
  293.     andi.w    #$07E0,d1
  294.     lsr.w    #6,d1
  295.     andi.w    #$001F,d2
  296.     mulu.w    #19595,d0            ; r*0.299
  297.     mulu.w    #38469,d1            ; g*0.578
  298.     mulu.w    #07448,d2            ; b*0.114
  299.     add.l    d2,d0
  300.     add.l    d1,d0
  301. ; d0.l=luminance [0..$1FFFFF]
  302.     lsl.l    #3,d0
  303. ; d0.l=luminance [0..$FFFFF8]
  304.     swap    d0
  305.     move.b    d0,(a0)+            ; Store luminance.
  306.     addq.b    #1,d7
  307.     bne.s    .loop
  308.  
  309. ; Generate the luminance image and 8bpp color image..
  310.     movea.l    Bumpmap.bucketAdr,a2
  311.  
  312. ;    movea.l    scr+8,a1
  313.     movea.l    Starfish.backAdr,a1
  314.  
  315.     lea    Bumpmap.lumPal,a3
  316.     movea.l    Bumpmap.lumPicAdr,a4
  317.     movea.l    Bumpmap.pictureAdr,a0
  318.     move.w    #320*200-1,d7
  319.     clr.l    d0
  320.     clr.l    d1
  321.  
  322. .lum_loop:
  323.     move.w    (a1)+,d0
  324.     move.b    (a2,d0.l),d1
  325.     move.b    d1,(a0)+            ; Store color-index.
  326.     move.b    (a3,d1.l),(a4)+            ; Store luminance.
  327.     dbf    d7,.lum_loop
  328.     rts
  329.  
  330. ; Calculates a 64K highcolor-word lookup table from two truecolor palettes.
  331. ; INPUT:
  332. ; d7.w: start intensity of palette1
  333. ; a0: highcolor lookuptable
  334. ; a1: truecolor palette1
  335. ; a2: truecolor palette2
  336. ; a5: number of entries in palette1
  337. Bumpmap.calcMixTable:
  338.     lea    Bumpmap.tempBuffer,a3
  339.     clr.l    d6
  340.  
  341. .preloop:
  342.     clr.l    d3
  343.     clr.l    d4
  344.     move.b    (a2)+,d3
  345.     move.b    (a2)+,d4
  346.     move.w    (a2)+,d5
  347.     mulu.w    d6,d3
  348.     mulu.w    d6,d4
  349.     mulu.w    d6,d5
  350.     move.l    d3,(a3)+
  351.     move.l    d4,(a3)+
  352.     move.l    d5,(a3)+
  353.     addq.b    #1,d6
  354.     bne.s    .preloop
  355.  
  356.     movea.l    #$0000ffff,a6
  357.  
  358. .palloop:
  359.     lea    Bumpmap.tempBuffer,a3
  360.     clr.l    d0
  361.     clr.l    d1
  362.     move.b    (a1)+,d0
  363.     move.b    (a1)+,d1
  364.     move.w    (a1)+,d2
  365.     muls.w    d7,d0
  366.     muls.w    d7,d1
  367.     muls.w    d7,d2
  368.     add.l    d0,d0
  369.     add.l    d1,d1
  370.     add.l    d2,d2
  371.     moveq    #0,d6
  372.  
  373. .colorloop:
  374.     movem.l    (a3)+,d3-d5
  375.     add.l    d0,d3
  376.     bpl.s    .red1_ok
  377.     clr.l    d3
  378.     bra.s    .red_ok
  379. .red1_ok:
  380.     cmp.l    a6,d3
  381.     blt.s    .red_ok
  382.     move.l    a6,d3
  383. .red_ok:
  384.     add.l    d1,d4
  385.     bpl.s    .green1_ok
  386.     clr.l    d4
  387.     bra.s    .green_ok
  388. .green1_ok:
  389.     cmp.l    a6,d4
  390.     blt.s    .green_ok
  391.     move.l    a6,d4
  392. .green_ok:
  393.     add.l    d2,d5
  394.     bpl.s    .blue1_ok
  395.     clr.l    d5
  396.     bra.s    .blue_ok
  397. .blue1_ok:
  398.     cmp.l    a6,d5
  399.     blt.s    .blue_ok
  400.     move.l    a6,d5
  401. .blue_ok:
  402.     andi.w    #%1111100000000000,d3
  403.     lsr.w    #5,d4
  404.     andi.w    #%0000011111100000,d4
  405.     lsr.w    #8,d5
  406.     lsr.w    #3,d5
  407.     or.w    d4,d3
  408.     or.w    d5,d3
  409.     move.w    d3,(a0)+
  410.     ;move.w    d3,(a0)+
  411.     addq.b    #1,d6
  412.     bne.s    .colorloop
  413.  
  414.     addq.w    #1,d7
  415.     cmp.w    a5,d7
  416.     blt.s    .palloop
  417.  
  418.     rts
  419.  
  420. ; OUTPUT:
  421. ; d0.l: bumpmap offset
  422. ; d1.l: lightmap offset
  423. Bumpmap.calcTraject1:
  424.     lea    sine_tbl,a0
  425.     move.w    $04BC.w,d0
  426.     sub.w    Bumpmap.trajStart,d0
  427.     move.w    d0,d2
  428.     move.w    d0,d3
  429.     move.w    d0,d4
  430.     move.w    d0,d5
  431.     mulu.w    #7,d2
  432.     lsr.l    #3,d2
  433.     mulu.w    #17,d4
  434.     lsr.l    #3,d4
  435.     mulu.w    #19,d5
  436.     lsr.l    #3,d5
  437.     Do_SinModulo    d0
  438.     Do_SinModulo    d2
  439.     Do_SinModulo    d4
  440.     Do_SinModulo    d5
  441.     Get_Cos    a0,d2,d1            ; d1.w=cos(t1) (sfrac)
  442.     Get_Sin    a0,d0,d2            ; d2.w=sin(t2) (sfrac)
  443.     Get_Cos    a0,d4,d4            ; d5.w=cos(t3) (sfrac)
  444.     Get_Sin    a0,d5,d5            ; d5.w=sin(t4) (sfrac)
  445.     cmpi.w    #$0200,d3
  446.     bcs.s    .clipped
  447.     move.w    #$0200,d3
  448. .clipped:
  449.     muls.w    d3,d1
  450.     muls.w    d3,d2
  451.     asr.l    #8,d1
  452.     asr.l    #8,d2
  453.     asr.l    d1
  454.     asr.l    d2
  455.  
  456. ; Calculate bumpmap offset.
  457.     move.w    Bumpmap.picWidth,d0
  458.     mulu.w    #50,d0                ; d0.l=w*50 (int)
  459.     addi.l    #80,d0                ; d0.l=w*50+80 (int)
  460.     muls.w    #49*2,d1
  461.     swap    d1
  462.     muls.w    #80*2,d2
  463.     swap    d2
  464.     muls.w    Bumpmap.picWidth,d1        ; d1.l=y_offset
  465.     ext.l    d2                ; d2.l=x_offset
  466.     add.l    d1,d0                ; Add y_offset.
  467.     add.l    d2,d0                ; Add x_offset.
  468.  
  469. ; Calculate lightmap offset.
  470.     move.l    #256*78+48,d1
  471.     muls.w    #(256-100)/2,d5
  472.     swap    d5
  473.     ext.l    d5                ; -39<=d3.l<+39
  474.     lsl.l    #8,d5                ; d3.l=y_offset
  475.     muls.w    #256-160,d4
  476.     swap    d4
  477.     ext.l    d4                ; -48<=d1.l<+48, d1.l=x_offset
  478.     add.l    d5,d1                ; Add y_offset.
  479.     add.l    d4,d1                ; Add x_offset.
  480.     rts
  481.  
  482. ; OUTPUT:
  483. ; d0.l: bumpmap offset
  484. ; d1.l: lightmap offset
  485. Bumpmap.calcTraject2:
  486.     lea    sine_tbl,a0
  487.     move.w    $4bc.w,d0
  488.     move.w    d0,d2
  489.     mulu.w    #7,d2
  490.     lsr.w    #3,d2
  491.     Do_SinModulo    d0
  492.     Do_SinModulo    d2
  493.     Get_Cos    a0,d2,d1
  494.     Get_Sin    a0,d0,d2
  495.  
  496. ; Calculate bumpmap offset.
  497.     move.w    Bumpmap.picWidth,d0
  498.     mulu.w    #50,d0                ; d0.l=w*50 (int)
  499.     addi.l    #80,d0                ; d0.l=w*50+80 (int)
  500.     move.w    d1,d3                ; d3.w=cos(t1) (sfrac)
  501.     move.w    d2,d4                ; d4.w=sin(t2) (sfrac)
  502.     muls.w    #50*2,d3
  503.     swap    d3
  504.     muls.w    #80*2,d4
  505.     swap    d4
  506.     muls.w    Bumpmap.picWidth,d3        ; d3.l=y_offset
  507.     ext.l    d4                ; d4.l=x_offset
  508.     add.l    d3,d0                ; Add y_offset.
  509.     add.l    d4,d0                ; Add x_offset.
  510.  
  511. ; Calculate lightmap offset (nice and weird).
  512.     move.l    #256*60+32,d4
  513.     move.w    d2,d3
  514.     ext.l    d3
  515.     asr.l    #2,d3
  516.     ext.l    d1
  517.     asr.l    #8,d1
  518.     asr.l    #1,d1
  519.     add.l    d1,d3
  520.     add.l    d4,d3
  521.     move.l    d3,d1
  522.     rts
  523.  
  524. ; PRE: luminance picture is initialized.
  525. Bumpmap.initOffsetMap:
  526.     movea.l    Bumpmap.lumPicAdr,a1
  527.     move.b    #128,d3
  528.     move.w    Bumpmap.picWidth,d5        ; d5.w = x size
  529.     move.w    d5,d4
  530.     move.w    Bumpmap.picHeight,d7        ; d7.w = y size
  531.     subq.w    #1,d5
  532.     subq.w    #1,d7
  533.     movea.l    Bumpmap.offsetMapAdr,a0
  534.  
  535. .yloop:    move.w    d5,d6
  536.  
  537. .xloop:    move.b    -1(a1),d0
  538.     sub.b    1(a1),d0
  539.     asr.b    d0
  540.     add.b    d3,d0
  541.     move.b    d0,(a0)+
  542.     neg.w    d4
  543.     move.b    (a1,d4.w),d0
  544.     neg.w    d4
  545.     sub.b    (a1,d4.w),d0
  546.     asr.b    d0
  547.     add.b    d3,d0
  548.     move.b    d0,(a0)+
  549.     addq    #1,a1
  550.     dbra    d6,.xloop
  551.  
  552.     dbra    d7,.yloop
  553.     rts
  554.  
  555. Bumpmap.performFade:
  556.     move.w    Bumpmap.fadeDirection,d3
  557.     beq.s    .end
  558.     move.w    $4bc.w,d4
  559.     sub.w    Bumpmap.startTime,d4
  560.     lsr.w    #2,d4
  561.     muls.w    d3,d4
  562.     add.w    Bumpmap.oldAlphaIntensity,d4
  563.     cmpi.w    #256,d4
  564.     blo.s    .end_clipping
  565.     clr.w    Bumpmap.fadeDirection
  566.     tst.w    d4
  567.     bpl.s    .clip_top
  568.     moveq    #0,d4
  569.     bra.s    .end_clipping
  570. .clip_top:
  571.     move.w    #255,d4
  572. .end_clipping:
  573.     move.w    d4,Bumpmap.alphaIntensity
  574.  
  575. .end:    rts
  576.  
  577. ; INPUT:
  578. ; d0.l: map offset
  579. ; d1.l: lightmap offset
  580. ; d2.l: alpha intensity
  581. Bumpmap.paint:
  582.     movea.l    scr,a0
  583.     movea.l    Bumpmap.pictureAdr,a3
  584.     lea    (a3,d0.l),a3
  585.     movea.l    Bumpmap.lightMapAdr,a4
  586.     lea    (a4,d1.l*2),a4
  587.     suba.l    #(128*256+128)*2,a4
  588.     movea.l    Bumpmap.offsetMapAdr,a2
  589.     lea    (a2,d0.l*2),a2
  590.     lsl.l    #8,d2
  591.     movea.l    Bumpmap.mixTableAdr,a1
  592.     lea    (a1,d2.l*2),a1
  593.     moveq    #0,d0
  594.     moveq    #0,d1
  595.     moveq    #0,d4
  596.     move.w    Bumpmap.picWidth,d4
  597.     subi.w    #160,d4
  598.     move.l    d4,d5
  599.     add.l    d4,d4
  600.     moveq    #100-1,d7
  601.  
  602.     move.w    monitormode,d0
  603.     cmpi.w    #vga60,d0
  604.     beq    Bumpmap.paintVga60
  605.     cmpi.w    #vga100,d0
  606.     beq    Bumpmap.paintVga100
  607.     cmpi.w    #rgb50,d0
  608.     beq    Bumpmap.paintRgb50
  609. * Unknown monitormode..
  610.     rts
  611.  
  612. Bumpmap.paintVga100:
  613. .yloop:    moveq    #160/8-1,d6
  614.  
  615. .xloop:
  616.     REPT    8
  617.     move.w    (a2)+,d0
  618.     move.w    (a4,d0.l*2),d1
  619.     move.b    (a3)+,d1
  620.     move.w    (a1,d1.l*2),(a0)+
  621.     addq    #2,a4
  622.     ENDR
  623.     dbra    d6,.xloop
  624.  
  625.     adda.l    d4,a2
  626.     adda.l    d5,a3
  627.     lea    (256-160)*2(a4),a4
  628.     dbra    d7,.yloop
  629.     rts
  630.  
  631. Bumpmap.paintVga60:
  632.     lea    160*2(a0),a6
  633.  
  634. .yloop:    moveq    #160/8-1,d6
  635.  
  636. .xloop:
  637.     REPT    8
  638.     move.w    (a2)+,d0
  639.     move.w    (a4,d0.l*2),d1
  640.     move.b    (a3)+,d1
  641.     move.w    (a1,d1.l*2),(a0)+
  642.     move.w    (a1,d1.l*2),(a6)+
  643.     addq    #2,a4
  644.     ENDR
  645.     dbra    d6,.xloop
  646.  
  647.     adda.l    d4,a2
  648.     adda.l    d5,a3
  649.     lea    (256-160)*2(a4),a4
  650.     lea    160*2(a0),a0
  651.     lea    160*2(a6),a6
  652.     dbra    d7,.yloop
  653.     rts
  654.  
  655. Bumpmap.paintRgb50:
  656. .yloop:    moveq    #160/8-1,d6
  657.  
  658. .xloop:
  659.     REPT    8
  660.     move.w    (a2)+,d0
  661.     move.w    (a4,d0.l*2),d1
  662.     move.b    (a3)+,d1
  663.     move.w    (a1,d1.l*2),(a0)+
  664.     move.w    (a1,d1.l*2),(a0)+
  665.     addq    #2,a4
  666.     ENDR
  667.     dbra    d6,.xloop
  668.  
  669.     adda.l    d4,a2
  670.     adda.l    d5,a3
  671.     lea    (256-160)*2(a4),a4
  672.     dbra    d7,.yloop
  673.     rts
  674.  
  675. ;======= OBJECT DATA ========
  676.  
  677.     DATA
  678.  
  679. Bumpmap.trajectRoutine:
  680.     DC.L    Bumpmap.calcTraject1
  681.  
  682. Bumpmap.fadeFlowTable:
  683.     DC.W    (.end-.start)/4-1
  684.     DC.W    7
  685. .start:    DC.L    $00000000
  686.     DC.L    $00000000
  687.     DC.L    $00000000
  688.     DC.L    $ffff00ff
  689.     DC.L    $ffff00ff
  690. .end:
  691.  
  692. Bumpmap.sandFlowTable:
  693.     DC.W    (.end-.start)/4-1
  694.     DC.W    6
  695. .start:    DC.L    $00000000
  696.     DC.L    $7f7f0000
  697.     DC.L    $7fdf0000
  698.     DC.L    $dfff0000
  699.     DC.L    $ffff0000
  700. .end:
  701.  
  702. Bumpmap.blueFlowTable:
  703.     DC.W    (.end-.start)/4-1
  704.     DC.W    6
  705. .start:    DC.L    $0000001f
  706.     DC.L    $0000003f
  707.     DC.L    $3f3f007d
  708.     DC.L    $7f7f00ff
  709.     DC.L    $ffff00ff
  710. .end:
  711.  
  712. ;======= OBJECT RESERVES ========
  713.  
  714.     BSS
  715.  
  716. Bumpmap.resRout:
  717.     DS.L    1
  718. Bumpmap.baseAdr:
  719.     DS.L    1
  720. Bumpmap.alphaIntensity:
  721.     DS.W    1
  722. Bumpmap.oldAlphaIntensity:
  723.     DS.W    1
  724. Bumpmap.fadeDirection:
  725.     DS.W    1
  726. Bumpmap.startTime:
  727.     DS.W    1
  728. Bumpmap.trajStart:
  729.     DS.W    1
  730. Bumpmap.picWidth:
  731.     DS.W    1
  732. Bumpmap.picHeight:
  733.     DS.W    1
  734.  
  735. Bumpmap.lumPal:
  736.     DS.B    256
  737. Bumpmap.picPal:
  738.     DS.L    256
  739. Bumpmap.picHcPal:
  740.     DS.W    256
  741. Bumpmap.tempBuffer:
  742.     DS.L    256*3
  743.  
  744. Bumpmap.offsetMapAdr:
  745.     DS.L    1
  746. Bumpmap.lightMapAdr:
  747.     DS.L    1
  748. Bumpmap.mixTableAdr:
  749.     DS.L    1
  750. Bumpmap.palAdr:
  751.     DS.L    1
  752. Bumpmap.pictureAdr:
  753.     DS.L    1
  754. Bumpmap.bucketAdr:
  755.     DS.L    1
  756. Bumpmap.lumPicAdr:
  757.     DS.L    1
  758.