home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format 42 / af042b.adf / BULL5.LHA / draw.s < prev    next >
Text File  |  1992-11-19  |  5KB  |  209 lines

  1.  
  2. ********************************************************************************
  3. *                   oo                              oo                           *
  4. *                 \(  )/      Bullfrog Demo      \(  )/                           *
  5. *                 ^ ^^ ^         Drawing            ^ ^^ ^                           *
  6. ********************************************************************************
  7.  
  8. ;All draw routines in here please.
  9.  
  10. _draw_all
  11.     jsr        _draw_blocks
  12.     jsr        _draw_collectables
  13.     jsr        _draw_bad_guys
  14.     jsr        _draw_score
  15.     jsr        _lives_left
  16.     move.w    man_x,d0                            ;x position
  17.     asr.w    #FOUR,d0                            ;scale position
  18.     move.w    man_y,d1                            ;y position
  19.     asr.w    #FOUR,d1                            ;scale position
  20.     move.w    man_frame,d2                        ;sprite to draw
  21.     asr.w    #FOUR,d2                            ;slow down animation speed
  22.     lea        _man,a1                                ;gfx data
  23.     jsr        _simple_draw
  24.     rts
  25.  
  26. ********************************************************************************
  27. _draw_blocks
  28. * Therefore a2 points at map data
  29. * d3,d4 is position inside map
  30. * d0,d1 is position on screen
  31.  
  32.     move.l    map_pointer,a2            ;point a2 at the map data
  33.     move.w    #12-1,d4                ;number of lines -1.
  34.     move.w    #0,d0                    ;start x
  35.     move.w    #0,d1                    ;start y
  36. .loop_y
  37.             move.w    #20-1,d3        ;number of columns -1.
  38. .loop_x
  39.             move.b    (a2)+,d2        ;pick up first byte of data
  40.             beq.s    .next            ;if zero dont draw anything
  41.                 sub.w    #1,d2        ;subtract 1 to get correct block
  42.                 jsr        _block_draw    ;and draw it
  43. .next
  44.             add.w    #1,d0            ;increase x position
  45.         dbra    d3,.loop_x            ;subtract 1 from columns and loop
  46.         move.w    #0,d0                ;move to left side
  47.         add.w    #1,d1                ;and increase y position
  48.     dbra    d4,.loop_y                ;sub 1 from rows and loop
  49.     rts    
  50. ********************************************************************************
  51. ;very simple interface for tutorial
  52. ;d0,d1 x,y pos d2 sprite no and a1 points at data
  53.  
  54. _simple_draw
  55.     movem.l    a0-a6/d0-d7,-(sp)
  56.     mulu    #240,d2
  57.     adda.l    d2,a1
  58.     moveq.w    #24,d2                            ;sprite height
  59.     move.l    _w_screen,a0
  60.     jsr        _s16_draw                        ;d0=x,d1=y,d2=height,a0=screen,a1=data
  61.     movem.l    (sp)+,a0-a6/d0-d7
  62.     rts
  63.  
  64. ********************************************************************************
  65. ;very simple blockdraw routine.
  66. ;d0 = x/16, d1 = y/16, d2 = block,
  67.  
  68. _block_draw
  69.     movem.l    a0-a6/d0-d7,-(sp)                ;save all registers
  70.     move.l    _w_screen,a0                    ;point at screen
  71.     lea        _blocks,a1                        ;point at block data
  72.     asl.w    #TWO,d0                            ;find x position on screen
  73.     asl.w    #SIXTEEN,d1                        ;find y position on screen
  74.     mulu    #SCREEN_WIDTH,d1                ;move down that no. of lines
  75.     adda.l    d1,a0                            ;point at y
  76.     adda.l    d0,a0                            ;point at x
  77.     mulu    #128,d2                            ;find start of block to draw
  78.     adda.l    d2,a1                            ;and move to it.
  79.     moveq.w    #16-1,d2                        ;sprite height
  80.  
  81. .loop
  82.         movem.w    (a1)+,d3/d4/d5/d6            ;pick up all data
  83.         move.w    d3,(a0)                        ;plane one
  84.         move.w    d4,PLANE_SIZE(a0)            ;plane two
  85.         move.w    d5,PLANE_SIZE*2(a0)            ;plane three
  86.         move.w    d6,PLANE_SIZE*3(a0)            ;plane four
  87.         lea        SCREEN_WIDTH(a0),a0            ;move to next line
  88.     dbra    d2,.loop                        ;loop around 16 times
  89.     movem.l    (sp)+,a0-a6/d0-d7                ;restore all registers
  90.     rts
  91.  
  92. ********************************************************************************
  93.  
  94. _draw_collectables
  95.     lea        _objects,a2
  96.     move.w    #MAX_OBJECTS-1,d7
  97.  
  98. .loop
  99.     tst.w    OBJ_ON(a2)
  100.     beq.s    .next
  101.         movem.w    OBJ_TO_DRAW(a2),d0/d1/d2
  102.         move.l    _w_screen,a0
  103.         lea        _collect,a1
  104.         mulu    #SCREEN_WIDTH,d1
  105.         adda.w    d1,a0
  106.         asr.w    #EIGHT,d0
  107.         adda.w    d0,a0
  108.         mulu    #128,d2
  109.         adda.w    d2,a1
  110.         move.w    #16-1,d0
  111. ;        move.l    _w_screen,a0
  112. ;        lea        _collect,a1
  113. .draw_loop
  114.             movem.w    (a1)+,d1/d2/d3/d4
  115.             move.w    d1,(a0)
  116.             move.w    d2,PLANE_SIZE(a0)
  117.             move.w    d3,PLANE_SIZE*2(a0)
  118.             move.w    d4,PLANE_SIZE*3(a0)
  119.             lea        SCREEN_WIDTH(a0),a0
  120.         dbra    d0,.draw_loop
  121. .next
  122.     lea        OBJ_SIZE(a2),a2
  123.     dbra    d7,.loop
  124.     rts
  125. ********************************************************************************
  126. _draw_score
  127.     lea        _score_text,a0
  128.     move.l    #0,d0
  129.     move.w    score,d0
  130. ;    ext.l    d0
  131.     move.w    #5,d1
  132.     adda.l    #7,a0
  133.     jsr        _to_alpha
  134.  
  135.     move.w    #1,d0
  136.     move.w    #192,d1
  137.     lea        _score_text,a2
  138.     jsr        _draw_font
  139.     rts
  140. ********************************************************************************
  141. *pass x block, pixal perfect y, a2 points to text to print
  142. _draw_font
  143.     mulu    #SCREEN_WIDTH,d1
  144. .begin
  145.     move.b    (a2)+,d2                ;look at letter
  146.     beq.s    .finished
  147.     cmp.b    #32,d2
  148.     beq.s    .next
  149.         ext.w    d2
  150.         sub.w    #33,d2
  151.         lea        _font,a1
  152.         asl.w    #EIGHT,d2
  153.         adda.w    d2,a1
  154.  
  155.         move.l    _w_screen,a0
  156.         adda.w    d1,a0
  157.         adda.w    d0,a0
  158.  
  159.         move.w    #8-1,d3
  160. .draw_loop
  161.             move.b    (a1)+,(a0)
  162.             lea        SCREEN_WIDTH(a0),a0
  163.         dbra    d3,.draw_loop
  164. .next
  165.     add.w    #1,d0
  166.     bra.s    .begin
  167. .finished
  168.     rts
  169. ********************************************************************************
  170. _draw_bad_guys
  171.     lea        _bad_guys,a0
  172.     moveq.w    #MAX_BADDIES,d3
  173. .loop
  174.     tst.w    BAD_ON(a0)
  175.     beq.s    .next
  176.         movem.w    BAD_TO_DRAW(a0),d0/d1/d2
  177.         movem.l    a0-a6/d0-d7,-(sp)
  178.         lea        _bad,a1
  179.         mulu    #160,d2
  180.         adda.l    d2,a1
  181.         moveq.w    #16,d2                            ;sprite height
  182.         move.l    _w_screen,a0
  183.         jsr        _s16_draw                        ;d0=x,d1=y,d2=height,a0=screen,a1=data
  184.         movem.l    (sp)+,a0-a6/d0-d7
  185. .next
  186.     lea        BAD_SIZE(a0),a0
  187.     dbra    d3,.loop
  188.     rts
  189.  
  190. ********************************************************************************
  191.  
  192. _lives_left
  193.     move.w    #272,d0                                ;x position
  194.     move.w    #176,d1                                ;y position
  195.     move.w    #MAN_STATIONARY,d2                    ;sprite to draw
  196.     asr.w    #FOUR,d2
  197.     lea        _man,a1                                ;gfx data
  198.     move.w    #1,d3
  199.     sub.w    game_over,d3
  200.     blt.s    .nothing_to_draw
  201. .loop
  202.     jsr        _simple_draw
  203.     add.w    #16,d0
  204.     dbra    d3,.loop
  205. .nothing_to_draw
  206.     rts
  207. ********************************************************************************
  208.  
  209.