home *** CD-ROM | disk | FTP | other *** search
/ World of A1200 / World_Of_A1200.iso / games / zombieii / zomiesii.doc < prev   
Text File  |  1995-02-27  |  55KB  |  2,641 lines

  1. ;-----------------------------------------------------------------
  2. ;
  3. ;ZZZZZZZZ   OOOOOO   M      M  BBBBBBB   III  EEEEEEEE   SSSSSS
  4. ;      Z   O      O  MM    MM  B      B   I   E         S      S
  5. ;     Z    O      O  M M  M M  B      B   I   E         S
  6. ;    Z     O      O  M  MM  M  BBBBBBB    I   EEEEE      SSSSSS
  7. ;   Z      O      O  M      M  B      B   I   E                S
  8. ;  Z       O      O  M      M  B      B   I   E                S
  9. ; Z        O      O  M      M  B      B   I   E         S      S
  10. ;ZZZZZZZZ   OOOOOO   M      M  BBBBBBB   III  EEEEEEEE   SSSSSS
  11. ;
  12. ;                              22222222
  13. ; Written By                          2      AGA ONLY!!!
  14. ;   Paul Andrews                      2     (BUY A 1200!)
  15. ;                              22222222
  16. ;    In                        2
  17. ;   Blitz ][                   2
  18. ;    (shock horror!!)          22222222
  19. ;
  20. ;
  21. ;
  22. ;Release Version Of source code - Rude bits and cheat modes hidden
  23. ;-----------------------------------------------------------------
  24.  
  25.  
  26. WBStartup
  27. rad.f=Pi/180
  28. ;------------------------------------------------------------
  29. .inittypes
  30.  
  31. NEWTYPE.coor
  32.     x.w
  33.     y.w
  34. End NEWTYPE
  35.  
  36. NEWTYPE .dribble
  37.     go.w
  38.     x.q
  39.     y.q
  40.     life.w
  41. End NEWTYPE
  42.  
  43. NEWTYPE .blood
  44.     go.w
  45.     life.w
  46.     x.q
  47.     y.q
  48.     vx.q
  49.     vy.q
  50.     bot.w
  51.     do.w
  52. End NEWTYPE
  53.  
  54. NEWTYPE .zombie
  55.     here.w
  56.     x.q     ;top left
  57.     y.w
  58.     w.w
  59.     h.w
  60.     vx.q
  61.     hits.q
  62.     typ.w   ;type..
  63.     tim.w
  64.     fr.w    ;current frame
  65.     spd.w   ;frame count speed
  66.     cnt.w
  67. End NEWTYPE
  68.  
  69. ;------------------------------------------------------------
  70. .initmacs
  71.  
  72. Runerrsoff
  73.  
  74. Function.w getred{num.w,copaddr.l}
  75.  
  76.     UNLK a4
  77.     MOVEM.l a0-a2,-(a7)
  78.     MOVE.l  d1,a0       ;a0=coplist type
  79.     MOVE.l  8(a0),a1    ;start of colours (106,..,180,...)
  80.     MOVE.w  38(a0),d2   ;length of 1 bank (hi/lo)
  81.     MOVE.w  d2,d3       ;keep for later
  82.     MOVE.w  d0,d1       ;num
  83.     LSR.w   #5,d1       ;bank #
  84.     MULU    d1,d2       ;offset to correct bank
  85.     ADD.l   d2,a1       ;start of correct bank (106,..,180,..)
  86.     AND.w   #31,d0      ;colour in this bank
  87.     MOVE.l  a1,a2
  88.     ADDQ.l  #4,a1       ;hi bank colour 0 (skip 106)
  89.     LSR.w   #1,d3       ;half a bank
  90.     ADD.w   d3,a2       ;lo bank start
  91.     ADDQ.l  #4,a2       ;lo bank colour 0 (skip 106)
  92.     LSL.w   #2,d0       ;offset to colour..
  93.     ADD.w   d0,a1       ;colour hi
  94.     ADD.w   d0,a2       ;colour lo
  95.  
  96.     MOVEQ   #0,d0
  97.     MOVE.w  2(a1),d0    ;hi
  98.     MOVEQ   #0,d1
  99.     MOVE.w  2(a2),d1    ;lo
  100.  
  101.     AND.w   #$0f00,d0
  102.     AND.w   #$0f00,d1
  103.     LSR.w   #4,d0
  104.     LSR.w   #8,d1
  105.     OR.w    d1,d0
  106.  
  107.  
  108.     MOVEM.l (a7)+,a0-a2
  109.     RTS
  110. End Function
  111. ;-----------------
  112. Function.w getgreen{num.w,copaddr.l}
  113.  
  114.     UNLK a4
  115.     MOVEM.l a0-a2,-(a7)
  116.     MOVE.l  d1,a0       ;a0=coplist type
  117.     MOVE.l  8(a0),a1    ;start of colours (106,..,180,...)
  118.     MOVE.w  38(a0),d2   ;length of 1 bank (hi/lo)
  119.     MOVE.w  d2,d3       ;keep for later
  120.     MOVE.w  d0,d1       ;num
  121.     LSR.w   #5,d1       ;bank #
  122.     MULU    d1,d2       ;offset to correct bank
  123.     ADD.l   d2,a1       ;start of correct bank (106,..,180,..)
  124.     AND.w   #31,d0      ;colour in this bank
  125.     MOVE.l  a1,a2
  126.     ADDQ.l  #4,a1       ;hi bank colour 0 (skip 106)
  127.     LSR.w   #1,d3       ;half a bank
  128.     ADD.w   d3,a2       ;lo bank start
  129.     ADDQ.l  #4,a2       ;lo bank colour 0 (skip 106)
  130.     LSL.w   #2,d0       ;offset to colour..
  131.     ADD.w   d0,a1       ;colour hi
  132.     ADD.w   d0,a2       ;colour lo
  133.  
  134.     MOVEQ   #0,d0
  135.     MOVE.w  2(a1),d0    ;hi
  136.     MOVEQ   #0,d1
  137.     MOVE.w  2(a2),d1    ;lo
  138.  
  139.     AND.w   #$00f0,d0
  140.     AND.w   #$00f0,d1
  141.     LSR.w   #4,d1
  142.     OR.w    d1,d0
  143.  
  144.     MOVEM.l (a7)+,a0-a2
  145.     RTS
  146. End Function
  147. ;-----------------
  148. Function.w getblue{num.w,copaddr.l}
  149.  
  150.     UNLK a4
  151.     MOVEM.l a0-a2,-(a7)
  152.     MOVE.l  d1,a0       ;a0=coplist type
  153.     MOVE.l  8(a0),a1    ;start of colours (106,..,180,...)
  154.     MOVE.w  38(a0),d2   ;length of 1 bank (hi/lo)
  155.     MOVE.w  d2,d3       ;keep for later
  156.     MOVE.w  d0,d1       ;num
  157.     LSR.w   #5,d1       ;bank #
  158.     MULU    d1,d2       ;offset to correct bank
  159.     ADD.l   d2,a1       ;start of correct bank (106,..,180,..)
  160.     AND.w   #31,d0      ;colour in this bank
  161.     MOVE.l  a1,a2
  162.     ADDQ.l  #4,a1       ;hi bank colour 0 (skip 106)
  163.     LSR.w   #1,d3       ;half a bank
  164.     ADD.w   d3,a2       ;lo bank start
  165.     ADDQ.l  #4,a2       ;lo bank colour 0 (skip 106)
  166.     LSL.w   #2,d0       ;offset to colour..
  167.     ADD.w   d0,a1       ;colour hi
  168.     ADD.w   d0,a2       ;colour lo
  169.  
  170.     MOVEQ   #0,d0
  171.     MOVE.w  2(a1),d0    ;hi
  172.     MOVEQ   #0,d1
  173.     MOVE.w  2(a2),d1    ;lo
  174.  
  175.     AND.w   #$000f,d0
  176.     AND.w   #$000f,d1
  177.     LSL.w   #4,d0
  178.     OR.w    d1,d0
  179.  
  180.     MOVEM.l (a7)+,a0-a2
  181.     RTS
  182. End Function
  183. ;-----------------
  184. Statement setrgb{num.w,copaddr.l,r.w,g.w,b.w}
  185.  
  186.     UNLK a4
  187.     MOVEM.l d5-d7/a0-a2,-(a7)
  188.  
  189.     MOVE.w  d2,d5
  190.     MOVE.w  d3,d6
  191.     MOVE.w  d4,d7       ;save rgb..
  192.  
  193.     MOVE.l  d1,a0       ;a0=coplist type
  194.     MOVE.l  8(a0),a1    ;start of colours (106,..,180,...)
  195.     MOVE.w  38(a0),d2   ;length of 1 bank (hi/lo)
  196.     MOVE.w  d2,d3       ;keep for later
  197.     MOVE.w  d0,d1       ;num
  198.     LSR.w   #5,d1       ;bank #
  199.     MULU    d1,d2       ;offset to correct bank
  200.     ADD.l   d2,a1       ;start of correct bank (106,..,180,..)
  201.     AND.w   #31,d0      ;colour in this bank
  202.     MOVE.l  a1,a2
  203.     ADDQ.l  #4,a1       ;hi bank colour 0 (skip 106)
  204.     LSR.w   #1,d3       ;half a bank
  205.     ADD.w   d3,a2       ;lo bank start
  206.     ADDQ.l  #4,a2       ;lo bank colour 0 (skip 106)
  207.     LSL.w   #2,d0       ;offset to colour..
  208.     ADD.w   d0,a1       ;colour hi
  209.     ADD.w   d0,a2       ;colour lo
  210.  
  211.     MOVEQ   #0,d0
  212.     MOVEQ   #0,d1
  213.  
  214.     MOVE.w  d5,d2       ;red
  215.     AND.w   #$f0,d2     ;hi part
  216.     MOVE.w  d5,d3
  217.     AND.w   #$f,d3      ;lo part
  218.     LSL.w   #4,d2
  219.     LSL.w   #8,d3
  220.     OR.w    d2,d0
  221.     OR.w    d3,d1
  222.  
  223.     MOVE.w  d6,d2       ;green
  224.     AND.w   #$f0,d2     ;hi part
  225.     MOVE.w  d6,d3
  226.     AND.w   #$f,d3      ;lo part
  227.     LSL.w   #4,d3
  228.     OR.w    d2,d0
  229.     OR.w    d3,d1
  230.  
  231.     MOVE.w  d7,d2       ;blue
  232.     AND.w   #$f0,d2     ;hi part
  233.     MOVE.w  d7,d3
  234.     AND.w   #$f,d3      ;lo part
  235.     LSR.w   #4,d2
  236.     OR.w    d2,d0
  237.     OR.w    d3,d1
  238.  
  239.     MOVE.w  d0,2(a1)    ;hi
  240.     MOVE.w  d1,2(a2)    ;lo
  241.  
  242.  
  243.     MOVEM.l (a7)+,d5-d7/a0-a2
  244.     RTS
  245. End Statement
  246. ;-----------------
  247. Function.w  getkey{}
  248.  
  249.     MOVEQ   #0,d0
  250.     MOVE.b  $bfec01,d0
  251.     NOT.b   d0
  252.     ROR.b   #1,d0
  253.  
  254.     RTS
  255. End Function
  256. ;-----------------
  257.  
  258. Statement ReadJoy32{}
  259.  
  260.     LEA $bfe001,a0
  261.     LEA $dff016,a1
  262.  
  263.     MOVE.w  porty,d0
  264.  
  265.     TST.w   d0
  266.     BEQ     readjoy0
  267.  
  268. readjoy1:
  269.     MOVEM.l d2-d4,-(a7)
  270.     MOVEQ   #0,d0
  271.     MOVEQ   #7,d3
  272.     MOVE    #$4000,d4
  273.  
  274.     BSET    d3,$200(a0)
  275.     BCLR    d3,(a0)
  276.     MOVE    #$2000,$dff034
  277.     MOVEQ   #6,d1
  278. loop0:
  279.     TST.b   (a0)
  280.     TST.b   (a0)
  281.     TST.b   (a0)
  282.     TST.b   (a0)
  283.     TST.b   (a0)
  284.     TST.b   (a0)
  285.     TST.b   (a0)
  286.     TST.b   (a0)
  287.     MOVE    (a1),d2
  288.     BSET    d3,(a0)
  289.     BCLR    d3,(a0)
  290.     AND     d4,d2
  291.     BNE     skip0
  292.     BSET    d1,d0
  293. skip0:
  294.     DBF     d1,loop0
  295.     MOVE    #0,$dff034
  296.     BCLR    d3,$200(a0)
  297.     ADD     d0,d0
  298.     SWAP    d0
  299.  
  300.     MOVE    $dff00c,d1
  301.     MOVE    d1,d0
  302.     LSR     #1,d0
  303.     EOR     d0,d1
  304.     AND     #$101,d1
  305.     AND     #$101,d0
  306.     ROR.b   #1,d0
  307.     ROR.b   #1,d1
  308.     LSR     #7,d0
  309.     LSR     #5,d1
  310.     OR      d1,d0
  311.     MOVE.l  d0,joystatus1
  312.     MOVEM.l (a7)+,d2-d4
  313.     RTS
  314. readjoy0:
  315.     MOVEM.l d2-d4,-(a7)
  316.     MOVEQ   #6,d3
  317.     MOVE    #$400,d4
  318.  
  319.     BSET    d3,$200(a0)
  320.     BCLR    d3,(a0)
  321.     MOVE    #$200,$dff034
  322.     MOVEQ   #6,d1
  323. loop:
  324.     TST.b   (a0)
  325.     TST.b   (a0)
  326.     TST.b   (a0)
  327.     TST.b   (a0)
  328.     TST.b   (a0)
  329.     TST.b   (a0)
  330.     TST.b   (a0)
  331.     TST.b   (a0)
  332.     MOVE    (a1),d2
  333.     BSET    d3,(a0)
  334.     BCLR    d3,(a0)
  335.     AND     d4,d2
  336.     BNE     skip
  337.     BSET    d1,d0
  338. skip:
  339.     DBF     d1,loop
  340.     MOVE    #0,$dff034
  341.     BCLR    d3,$200(a0)
  342.     ADD     d0,d0
  343.     SWAP    d0
  344.  
  345.     MOVE    $dff00a,d1
  346.     MOVE    d1,d0
  347.     LSR     #1,d0
  348.     EOR     d0,d1
  349.     AND     #$101,d1
  350.     AND     #$101,d0
  351.     ROR.b   #1,d1
  352.     ROR.b   #1,d0
  353.     LSR     #5,d1
  354.     LSR     #7,d0
  355.     OR      d1,d0
  356.     MOVE.l  d0,joystatus
  357.     MOVEM.l (a7)+,d2-d4
  358.     RTS
  359.  
  360. porty:   Dc.w    1
  361.  
  362. End Statement
  363. ;----------------
  364. Statement GetJoy32{}
  365.     MOVE.l  joystatus1,d7   ;d0/d1/d2/d3
  366.  
  367. doitgj32:
  368.     MOVEQ   #1,d2
  369.     MOVEQ   #1,d3
  370.     MOVEQ   #1,d4
  371.  
  372.     BTST    #22,d7      ;red button
  373.     BEQ     nored
  374.     MOVEQ   #0,d2
  375. nored:
  376.     BTST    #23,d7      ;blue? - (grn=20/yel=21)
  377.     BEQ     noblue
  378.     MOVEQ   #0,d3
  379. noblue:
  380.     BTST    #20,d7      ;grn? - (grn=20/yel=21)
  381.     BEQ     nogrn
  382.     MOVEQ   #0,d4
  383. nogrn:
  384.  
  385.     MOVEQ   #0,d0
  386.     MOVEQ   #0,d1
  387.  
  388.     BTST    #0,d7   ;right?
  389.     BEQ     nori
  390.     MOVE.w  #1,d0
  391. nori:
  392.     BTST    #1,d7   ;left?
  393.     BEQ     nole
  394.     MOVE.w  #-1,d0
  395. nole:
  396.     BTST    #2,d7   ;down?
  397.     BEQ     nodn
  398.     MOVE.w  #1,d1
  399. nodn:
  400.     BTST    #3,d7   ;up?
  401.     BEQ     noup
  402.     MOVE.w  #-1,d1
  403. noup:
  404.  
  405.     MOVE.w  d0,xjoy
  406.     MOVE.w  d1,yjoy
  407.     MOVE.w  d2,rbut
  408.     MOVE.w  d3,bbut
  409.     MOVE.w  d4,gbut
  410.  
  411.  
  412.     RTS
  413.  
  414. joystatus:   Dc.l    0   ;up down fire etc
  415. joystatus1:  Dc.l    0
  416. joyport:     Dc.w    1   ;port #
  417.  
  418. xjoy:        Dc.w    0
  419. yjoy:        Dc.w    0
  420. rbut:        Dc.w    0
  421. bbut:        Dc.w    0
  422. gbut:        Dc.w    0
  423.  
  424. End Statement
  425. ;-----------------
  426. Function.w getjoyx{}
  427.     MOVE.w  xjoy,d0
  428.     RTS
  429. End Function
  430. ;-----------------
  431. Function.w getjoyy{}
  432.     MOVE.w  yjoy,d0
  433.     RTS
  434. End Function
  435. ;-----------------
  436. Function.w getjb{}
  437.     MOVEQ   #0,d0
  438.     TST.w   rbut
  439.     BNE     norb
  440.     MOVEQ   #1,d0
  441. norb:
  442.     TST.w   bbut
  443.     BNE.w   nobb
  444.     MOVEQ   #2,d0
  445. nobb:
  446.     TST.w   gbut
  447.     BNE.w   nogg
  448.     MOVEQ   #3,d0
  449. nogg:
  450.     RTS
  451.  
  452. End Function
  453. ;-----------------
  454.  
  455. ;Runerrson
  456.  
  457. ;------------------------------------------------------------
  458. .initvars
  459.  
  460. Dim polly.coor(3,5)
  461. Dim pollyd.coor(5)
  462. Dim melt.w(320)
  463. Dim melty.q(320)
  464.  
  465. Dim hiscore.l(10)
  466. Dim hiname$(10)
  467.  
  468. hiname$(1)="BOB"
  469. hiname$(2)="PAUL"
  470. hiname$(3)="ZOMB1"
  471. hiname$(4)="ZOMB2"
  472. hiname$(5)="ZOMB3"
  473. hiname$(6)="ZOMB4"
  474. hiname$(7)="ZOMB5"
  475. hiname$(8)="ZOMB6"
  476.  
  477. hiscore(1)=83205950
  478. hiscore(2)=13765825
  479. hiscore(3)=250000
  480. hiscore(4)=100000
  481. hiscore(5)=50000
  482. hiscore(6)=40000
  483. hiscore(7)=20000
  484. hiscore(8)=10000
  485.  
  486. Dim zomb.zombie(11)
  487. Dim spray.blood(60)
  488. Dim drib.dribble(50)
  489. Dim drib2.dribble(50)
  490.  
  491. Dim ebar.w(8)
  492. ebar(0)=17
  493. ebar(1)=17
  494. ebar(2)=16
  495. ebar(3)=23
  496. ebar(4)=22
  497. ebar(5)=21
  498. ebar(6)=9
  499. ebar(7)=10
  500. ebar(8)=11
  501.  
  502. INCLUDE "zNumberInc.bb"
  503.  
  504. hit.q=0
  505. ti.l=0
  506. count.l=0
  507. ;------------------------------------------------------------
  508. .initdisplay
  509.  
  510. BitMap 4,320+64,256+32,7
  511. BitMap 5,320+64,256+32,7
  512.  
  513. BitMap 6,320+64,256+32,7    ;spare!!
  514.  
  515. BitPlanesBitMap 4,0,%0111111    ;main 6 planes ...
  516. BitPlanesBitMap 5,1,%0111111
  517. BitPlanesBitMap 4,2,%1000000    ;overlay red...
  518. BitPlanesBitMap 5,3,%1000000
  519.  
  520. tp.l=$10000+$3000+$400+$7
  521.  
  522. InitCopList 0,44,256,tp,8,128,0
  523.  
  524. Buffer 0,60000
  525. Buffer 1,60000
  526.  
  527. InitCopList 1,44,256,0,0,0,0
  528. ;------------------------------------------------------------
  529. .loadstuff
  530.  
  531. gameon=0
  532.  
  533. LoadBlitzFont 0,"zombie.font"
  534.  
  535. LoadShape 0,"pointer.iff"
  536. GetaSprite 0,0
  537. LoadShape 898,"II.IFF"
  538.  
  539. LoadBitMap 0,"titlescreen.iff",0    ;title screen palette
  540. CopyBitMap 4,5
  541. CopyBitMap 4,6
  542. ;LoadPalette 1,"titlescreen.iff"
  543. LoadPalette 4,"titlescreen.iff"
  544.  
  545. LoadSound 0,"chaingun.sfx"
  546. LoadSound 1,"reload.sfx"
  547.  
  548. For l=1 To 11
  549.     LoadSound 4+l,"die"+Str$(l)+".sfx"  ;5-15
  550. Next
  551. For l=1 To 8
  552.     LoadSound 19+l,"splat"+Str$(l)+".sfx"  ;20-27
  553. Next
  554.  
  555. For l=1 To 4
  556.     LoadSound 29+l,"rico"+Str$(l)+".sfx"  ;30-33
  557. Next
  558.  
  559. LoadSound 2,"missile.sfx"
  560. LoadSound 3,"explosion.sfx"
  561.  
  562. LoadShapes 900,"font16.shp"
  563.  
  564. LoadShapes 700,"powerups.shp"
  565. LoadShapes 800,"blooddrop.shp"
  566. LoadShapes 810,"bloodsplat.shp"
  567. LoadShapes 820,"bodyparts.shp"
  568. LoadShapes 840,"bloodsplat2.shp"
  569. LoadShapes 850,"smoke.shp"      ;850-856
  570. LoadShapes 860,"explosion.shp"  ;860-879
  571.  
  572. LoadShapes 0,"zombies.shp"
  573.  
  574. LoadMedModule 0,"zombie2.mod"
  575.  
  576. LoadPalette 5,"backdrop1.iff"
  577.  
  578. BLITZ
  579. BlitzKeys On
  580. CreateDisplay 0
  581. DisplayBitMap 0,4
  582. DisplayPalette 0,0
  583. copaddr.l=Addr CopList(0)
  584.  
  585. players=1
  586. cheat=0
  587.  
  588. Mouse On
  589. ;MouseII On
  590. MouseArea 0,0,320,200
  591. ;MouseAreaII 0,0,320,200
  592.  
  593. SetInt 5
  594.     Gosub DoInt
  595. End SetInt
  596.  
  597. BitMapOutput 0
  598. Use BitMap 0
  599.  
  600. db=0
  601.  
  602. ;--------------------------------------------------------------------
  603. Statement blitprint{x,y,t$}
  604.  
  605.     If t$<>""
  606.         For l=1 To Len(t$)
  607.             a$=Mid$(t$,l,1)
  608.             a$=UCase$(a$)
  609.             If a$=>"A" AND a$<="Z"
  610.                 bn=Asc(a$)-Asc("A")
  611.             EndIf
  612.             If a$=>"0" AND a$<="9"
  613.                 bn=Asc(a$)-Asc("0")+26
  614.             EndIf
  615.  
  616.             Blit 900+bn,x,y
  617.             x+ShapeWidth(900+bn)+2
  618.  
  619.         Next
  620.     EndIf
  621. End Statement
  622. ;--------------------------------------------------------------------
  623. Statement cblitprint{y,t$}
  624.  
  625.     If t$<>""
  626.         ww=0
  627.         For l=1 To Len(t$)
  628.             a$=Mid$(t$,l,1)
  629.             a$=UCase$(a$)
  630.             If a$=>"A" AND a$<="Z"
  631.                 bn=Asc(a$)-Asc("A")
  632.             EndIf
  633.             If a$=>"0" AND a$<="9"
  634.                 bn=Asc(a$)-Asc("0")+26
  635.             EndIf
  636.             If a$=" " Then bn=0
  637.  
  638.             ww+ShapeWidth(900+bn)+2
  639.         Next
  640.  
  641.         x=(320-ww)/2
  642.  
  643.         For l=1 To Len(t$)
  644.             a$=Mid$(t$,l,1)
  645.             a$=UCase$(a$)
  646.             If a$=>"A" AND a$<="Z"
  647.                 bn=Asc(a$)-Asc("A")
  648.             EndIf
  649.             If a$=>"0" AND a$<="9"
  650.                 bn=Asc(a$)-Asc("0")+26
  651.             EndIf
  652.             If a$=" "
  653.                 bn=0
  654.             Else
  655.                 Blit 900+bn,x,y
  656.             EndIf
  657.             x+ShapeWidth(900+bn)+2
  658.         Next
  659.  
  660.     EndIf
  661.  
  662. End Statement
  663. ;--------------------------------------------------------------------
  664. ;Goto initgame
  665. ;--------------------------------------------------------------------
  666. .frontend
  667.  
  668. MouseArea 0,0,320,200
  669.  
  670. StartMedModule 0
  671. SetMedVolume 64
  672. music=1
  673.  
  674. For l=64 To 127
  675.     AGAPalRGB 4,l,100,100,100
  676. Next
  677. AGAPalRGB 4,65,101,102,103
  678.  
  679. dofe:
  680.  
  681. Use BitMap 4
  682. Cls
  683. Scroll 0,0,320,256,0,0,6
  684. Use BitMap 5
  685. Cls
  686. Scroll 0,0,320,256,0,0,6
  687.  
  688. DisplayPalette 0,4
  689. VWait 35
  690. Gosub dotitlescale
  691.  
  692. For l=1 To 260
  693.     VWait
  694.     If Joyb(0)<>0 OR Joyb(1)<>0
  695.         Pop For
  696.         fade=6
  697.         Goto initgame
  698.     EndIf
  699. Next
  700. Gosub meltscreen
  701. fade=6
  702. While fade<>0
  703.     VWait
  704. Wend
  705. If startgame=1 Then Goto initgame
  706.  
  707.  
  708. Gosub creditspage
  709. If startgame=1 Then Goto initgame
  710.  
  711. Gosub howtopage
  712. If startgame=1 Then Goto initgame
  713.  
  714. DisplayPalette 0,0
  715. Gosub drawhitable
  716. If startgame=1 Then Goto initgame
  717.  
  718. plasma=1
  719. plascol.q=Rnd(1)
  720. plccc=0
  721. For lll=0 To 450
  722.     VWait
  723.     If Joyb(0)<>0 OR Joyb(1)<>0 Then startgame=1:Pop For:Goto opik
  724. Next
  725.  
  726. opik:
  727. plasma=0
  728. fadered=8
  729. While fadered<>0
  730.     VWait
  731. Wend
  732. fade=8
  733. While fade<>0
  734.     VWait
  735. Wend
  736. If startgame=1 Then Goto initgame
  737.  
  738. Goto dofe
  739.  
  740. ;--------------------------------------------------------------------
  741. .initgame
  742.  
  743. control=0       ;mouse!!
  744. If Joyb(1)<>0 Then control=1    ;crappy joypad!!! SUX SUX SUX!!
  745.  
  746. gameon=0
  747.  
  748. nextpow.w=Int(Rnd(10))MOD 5
  749.  
  750. While fade<>0
  751.     VWait
  752. Wend
  753.  
  754. music=0:VWait 2
  755. StopMed
  756.  
  757. clips1=5        ;how many machine gun clips?
  758. numperclip1=200
  759. bullets1=200     ;how many bullets in this clip??
  760. loaded1=0       ;reloaded??
  761. missiles1=0
  762. grenades1=0
  763.  
  764. gunpower1.q=.5
  765.  
  766. clips2=5        ;how many machine gun clips?
  767. numperclip2=150
  768. bullets2=0     ;how many bullets in this clip??
  769. loaded2=0       ;reloaded??
  770.  
  771. level=0
  772.  
  773. energy1=16
  774. energy2=16
  775. score1.l=0
  776. score2.l=0
  777. nextfree.l=100000
  778.  
  779.  
  780. numperfect.q=0
  781.  
  782. If cheat=1
  783.     level=15
  784.     clips1=500
  785.     grenades1=500
  786.     missiles1=500
  787.     energy1=500
  788.     gunpower1=5
  789. EndIf
  790.  
  791. lenergy1=16
  792. lenergy2=16
  793.  
  794. Volume 15,64,64,64,64
  795.  
  796. Use BitMap 4
  797. Cls
  798. Use BitMap 5
  799. Cls
  800.  
  801. lastback.w=9999
  802.  
  803. ;--------------------------------------------------------------------
  804. .startlevel
  805.  
  806. gameon=0
  807. cheat2=0
  808. cheat3=0
  809. ;load stuff..
  810.  
  811. back.w=Int((level/3))
  812. back=back&3     ;0-3
  813. back+1
  814.  
  815. If back<>lastback
  816.     QAMIGA
  817.     VWait 10
  818.     LoadBitMap 0,"backdrop"+Str$(back)+".iff",0
  819.     CopyBitMap 4,5
  820.     WaitBlit_
  821.     VWait 25
  822.     BLITZ
  823.     BlitzKeys On
  824.     lastback=back
  825.     Use BitMap 0
  826.     GetaShape 950,0,4,9*16,24       ;to replace score..
  827.     Use BitMap 2
  828.     Cls
  829.     Use BitMap 3
  830.     Cls
  831. Else
  832.     Use BitMap 4
  833.     Scroll 0,0,320,256,0,0,5
  834.     WaitBlit_
  835. EndIf
  836.  
  837. DisplayPalette 0,0
  838. For cll.w=64 To 127
  839.     r.w=getred{cll-64,copaddr}
  840.     g.w=getgreen{cll-64,copaddr}
  841.     b.w=getblue{cll-64,copaddr}
  842.     r.w=Int((r+g+b)/3)
  843.     r.w=r.w+64:If r>255 Then r=255
  844.     setrgb{cll,copaddr,r,0,0}
  845. Next
  846.  
  847. For l=0 To 10
  848.     zomb(l)\here=0
  849. Next
  850. numzombies.w=0
  851. numkilled.w=0
  852. addzom.w=0
  853. For l=0 To 60
  854.     spray(l)\go=0
  855. Next
  856. For l=0 To 50
  857.     drib(l)\go=0
  858. Next
  859. dribdrib.q=0
  860.  
  861. gameon=1:ti.l=0
  862. lasthitx1=-1:lasthity1=-1
  863. lasthitx2=-1:lasthity2=-1
  864.  
  865. expx=-1:expy=-1:expfr.q=0
  866. missx=-1
  867. mess$="":messc.w=0
  868. drawenergy1=2
  869. shake=0
  870.  
  871. tokill=(level*4)+5
  872. gameon=1
  873. paused=0
  874.  
  875. powx.q=-1
  876. powy.q=-1
  877. powvx.q=-1
  878. powvy.q=-1
  879. powfr.w=-1
  880. powhit.w=-1
  881. numgren=0
  882. addpow=400+Int(Rnd(300))
  883.  
  884. senergy1=energy1
  885.  
  886. ;--------------------------------------------------------------------
  887. .Frame:
  888. VWait
  889. If ti=1 Then VWait
  890. setrgb{0,copaddr,0,0,0}
  891. ti=0
  892. DisplayBitMap 0,db+4
  893.  
  894. db=1-db
  895. Use BitMap db
  896. BitMapOutput db
  897.  
  898. If energy1<=0 Then Goto gameover
  899.  
  900. UnBuffer db
  901.  
  902. If lenergy1<>energy1
  903.     setrgb{0,copaddr,255,0,0}
  904.     lenergy1=energy1
  905.     drawenergy1=2
  906. EndIf
  907.  
  908. If drawenergy1>0
  909.     Boxf 300,0,310,4+32,0
  910.     Box  300,0,310,4+32,1
  911.     e=energy1:If e<0 Then e=0
  912.     If e>16 Then e=16
  913.     Boxf 302,4+30,308,4+30-(e*2),ebar(e/2)
  914.     drawenergy1-1
  915. EndIf
  916.  
  917. If shake>0
  918.     shake-1
  919. EndIf
  920.  
  921. Gosub updateremains
  922. Gosub updatedribble2
  923. Gosub updatedribble
  924. Gosub addzombies
  925. Gosub updatezombies
  926. Gosub drawzombies
  927.  
  928. WaitBlit_
  929. Gosub shootplayer1
  930. Gosub updatespray
  931. Gosub updatemissile1
  932. Gosub updateexplosion
  933. Gosub updatemessage
  934. Gosub updatepowerups
  935.  
  936. key.w=getkey{}
  937. If key=$45 Then End
  938.  
  939. If key=$19      ;p down
  940.     VWait
  941.     gameon=0
  942.     paused=1
  943.     While getkey{}=$19:VWait:Wend
  944.     Use BitMap 0
  945.     Colour 1
  946.     Locate 17,25:Print "PAUSED"
  947.     Use BitMap 1
  948.     Colour 1
  949.     Locate 17,25:Print "PAUSED"
  950.     While getkey{}<>$19
  951.         VWait
  952.         BitMapOutput 0
  953.         Colour 1
  954.         Locate 17,25:Print "PAUSED"
  955.         BitMapOutput 1
  956.         Colour 1
  957.         Locate 17,25:Print "PAUSED"
  958.     Wend
  959.     While getkey{}=$19:VWait:Wend
  960.     gameon=1
  961.     paused=0
  962.     Use BitMap 0
  963.     Boxf 0,200,319,208,0
  964.     Use BitMap 1
  965.     Boxf 0,200,319,208,0
  966.     Use BitMap db
  967.     gameon=1
  968. EndIf
  969.  
  970.  
  971. Block 950,0,4        ;clear old one
  972. tt$="00000000"+Str$(score1)
  973. tt$=Right$(tt$,7)
  974. blitprint{10,4,tt$}
  975.  
  976.  
  977. If numkilled>tokill      ;finished!!
  978.     num=0
  979.     For l=0 To 10
  980.         If zomb(l)\here=1 Then num+1
  981.     Next
  982.  
  983.     If powx<>-1
  984.         If powx<128 Then num+1
  985.     EndIf
  986.  
  987.     If num=0
  988.         donecount+1
  989.         gameon=0
  990.         If donecount>100
  991.             Goto completelevel
  992.         EndIf
  993.     EndIf
  994. Else
  995.     donecount=0
  996. EndIf
  997.  
  998. If score1=>nextfree
  999.     nextfree+100000
  1000.     mess$="EXTRA ENERGY"
  1001.     messc=50
  1002.     If energy1<16
  1003.         energy1+3
  1004.         If energy1>16 Then energy1=16
  1005.     EndIf
  1006. EndIf
  1007.  
  1008. Goto Frame
  1009. ;--------------------------------------------------------------------
  1010. .gameover
  1011.  
  1012. gameon=0
  1013. fadered=2
  1014. While fadered<>0:VWait:Wend
  1015.  
  1016. VWait 80
  1017. fade=8
  1018. While fade<>0:VWait:Wend
  1019.  
  1020. UnBuffer 0
  1021. UnBuffer 1
  1022.  
  1023. hit=-1
  1024. For l=1 To 8
  1025.     If score1=>hiscore(l) Then hit=l:Pop For:Goto lpok
  1026. Next
  1027. lpok:
  1028. If hit<>-1
  1029.     hnum=hit
  1030.     For l=7 To hnum Step -1
  1031.         hiname$(l+1)=hiname$(l)
  1032.         hiscore(l+1)=hiscore(l)
  1033.     Next
  1034.     Gosub entername1
  1035. EndIf
  1036.  
  1037. Goto frontend
  1038. ;--------------------------------------------------------------------
  1039. .completelevel
  1040. VWait
  1041. setrgb{0,copaddr,0,0,0}
  1042. DisplayBitMap 0,db+4
  1043. db=1-db
  1044. Use BitMap db
  1045. BitMapOutput db
  1046. UnBuffer db
  1047. Use BitMap db+2
  1048. Cls
  1049. VWait
  1050. setrgb{0,copaddr,0,0,0}
  1051. DisplayBitMap 0,db+4
  1052. db=1-db
  1053. Use BitMap db
  1054. BitMapOutput db
  1055. UnBuffer db
  1056. Use BitMap db+2
  1057. Cls
  1058.  
  1059. VWait
  1060. Use BitMap 0
  1061. DisplayBitMap 0,4
  1062.  
  1063. cblitprint{60,"LEVEL "+Str$(level+1)}
  1064. cblitprint{60+20,"COMPLETE"}
  1065.  
  1066. Sound 0,15
  1067. VWait 30
  1068.  
  1069. bon.l=0
  1070. If energy1=16
  1071.     cblitprint{60+50,"PERFECT"}
  1072.     cblitprint{60+70,"BONUS 20000"}
  1073.     score1+20000
  1074.     numperfect+1
  1075.     bon.l=20000
  1076.     Sound 0,15
  1077.     VWait 30
  1078. Else
  1079.     If senergy1=energy1
  1080.         bon.l=1000*Int(energy1)
  1081.         cblitprint{60+50,"PERFECT"}
  1082.         cblitprint{60+70,"BONUS "+Str$(bon)}
  1083.         score1+bon
  1084.         numperfect+1
  1085.     Sound 0,15
  1086.     VWait 30
  1087.     EndIf
  1088. EndIf
  1089.  
  1090.  
  1091. If bon.l=0 Then numperfect=0
  1092.  
  1093. np.q=numperfect
  1094. np=(np/5)
  1095.  
  1096. If numperfect>0 AND np=Int(np)
  1097.     bon.l=numperfect*5000
  1098.     cblitprint{160,Str$(numperfect)+" PERFECTS"}
  1099.     cblitprint{180,"BONUS "+Str$(bon)}
  1100.     score1+bon
  1101.     Sound 0,15
  1102.     VWait 30
  1103. EndIf
  1104.  
  1105. Block 950,0,4        ;clear old one
  1106. tt$="00000000"+Str$(score1)
  1107. tt$=Right$(tt$,7)
  1108. blitprint{10,4,tt$}
  1109. Sound 0,15
  1110.  
  1111. VWait 150
  1112. fade=8
  1113.  
  1114. While fade<>0:VWait:Wend
  1115.  
  1116. UnBuffer 0
  1117. UnBuffer 1
  1118.  
  1119. level+1
  1120. Goto startlevel
  1121. ;--------------------------------------------------------------------
  1122. .updateexplosion
  1123.  
  1124. If expx<0 Then Return
  1125.  
  1126. BBlit db,860+expfr,expx,expy
  1127. expfr+1
  1128. If expfr>19 Then expx=-1
  1129.  
  1130. Return
  1131. ;--------------------------------------------------------------------
  1132. .drawzombies
  1133.  
  1134. For l=0 To 10
  1135.     If zomb(l)\here=1
  1136.         BBlit db,zomb(l)\fr,zomb(l)\x,zomb(l)\y
  1137.     EndIf
  1138. Next
  1139.  
  1140. Return
  1141. ;--------------------------------------------------------------------
  1142. .updatezombies
  1143.  
  1144. For l=0 To 10
  1145.     If zomb(l)\here=1
  1146.  
  1147.         If zomb(l)\typ=30 OR zomb(l)\typ=50 OR zomb(l)\typ=70 OR zomb(l)\typ=20    ;walk right
  1148.             zomb(l)\x+zomb(l)\vx
  1149.             If zomb(l)\x>310 Then zomb(l)\here=0:numzombies-1:energy1-1
  1150.             zomb(l)\cnt-1
  1151.             If zomb(l)\cnt<0
  1152.                 zomb(l)\cnt=zomb(l)\spd
  1153.                 zomb(l)\fr+1
  1154.                 If zomb(l)\typ=30
  1155.                     If zomb(l)\fr>zomb(l)\typ+3 Then zomb(l)\fr=zomb(l)\typ
  1156.                 Else
  1157.                     If zomb(l)\fr>zomb(l)\typ+6 Then zomb(l)\fr=zomb(l)\typ
  1158.                 EndIf
  1159.             EndIf
  1160.         EndIf
  1161.  
  1162.         If zomb(l)\typ=40 OR zomb(l)\typ=60 OR zomb(l)\typ=80    ;walk left
  1163.             zomb(l)\x+zomb(l)\vx
  1164.             If zomb(l)\x<0 Then zomb(l)\here=0:numzombies-1:energy1-1
  1165.             zomb(l)\cnt-1
  1166.             If zomb(l)\cnt<0
  1167.                 zomb(l)\cnt=zomb(l)\spd
  1168.                 zomb(l)\fr+1
  1169.                 If zomb(l)\typ=40
  1170.                     If zomb(l)\fr>zomb(l)\typ+3 Then zomb(l)\fr=zomb(l)\typ
  1171.                 Else
  1172.                     If zomb(l)\fr>zomb(l)\typ+6 Then zomb(l)\fr=zomb(l)\typ
  1173.                 EndIf
  1174.             EndIf
  1175.         EndIf
  1176.  
  1177.         If zomb(l)\typ=10   ;me gun
  1178.  
  1179.             zomb(l)\tim+1
  1180.             If zomb(l)\tim<25 Then zomb(l)\fr=10
  1181.             If zomb(l)\tim>25 AND zomb(l)\tim<28 Then zomb(l)\fr=11
  1182.             If zomb(l)\tim>28 AND zomb(l)\tim<32 Then zomb(l)\fr=12
  1183.             If zomb(l)\tim>32 AND zomb(l)\tim<35 Then zomb(l)\fr=13
  1184.             If zomb(l)\tim>60 Then zomb(l)\here=0:numzombies-1:Goto qaz
  1185.  
  1186.             If zomb(l)\tim=52 AND zomb(l)\hits>2 ;fire gun....
  1187.                 energy1-1
  1188.             EndIf
  1189.  
  1190.             If zomb(l)\hits<=2 AND zomb(l)\hits>-1
  1191.                 zomb(l)\hits=2
  1192.                 If zomb(l)\fr<14 Then zomb(l)\fr=14:zomb(l)\cnt=4
  1193.                 zomb(l)\cnt-1
  1194.                 If zomb(l)\cnt<0
  1195.                     zomb(l)\cnt=zomb(l)\spd
  1196.                     zomb(l)\fr+1
  1197.                     If zomb(l)\fr=18 Then zomb(l)\hits=-1
  1198.                 EndIf
  1199.             EndIf
  1200.         EndIf
  1201.  
  1202.  
  1203.         If zomb(l)\typ=0   ;bob gun
  1204.  
  1205.             zomb(l)\tim+1
  1206.             t=zomb(l)\tim
  1207.             If t<4 Then zomb(l)\fr=0
  1208.             If t=>4 AND t<8 Then zomb(l)\fr=1
  1209.             If t=>8 AND t<20 Then zomb(l)\fr=2
  1210.             If t=>20 AND t<40 Then zomb(l)\fr=3
  1211.             If t=>40 AND t<60 Then zomb(l)\fr=4
  1212.             If t=>60 AND t<75 Then zomb(l)\fr=3
  1213.             If t=>75 Then zomb(l)\here=0
  1214.  
  1215.             If zomb(l)\tim=60 AND zomb(l)\hits>3 ;fire gun....
  1216.                 energy1-1
  1217.             EndIf
  1218.  
  1219.         EndIf
  1220.  
  1221.  
  1222.  
  1223.  
  1224.         If zomb(l)\hits<0
  1225.             zomb(l)\here=0:numzombies-1:numkilled+1
  1226.             sprx.q=zomb(l)\x+(zomb(l)\w/2)
  1227.             spry.q=zomb(l)\y+(zomb(l)\h/2)
  1228.             s=Int(Rnd(11))+5     ;die 5-15
  1229.             Sound s,8+4
  1230.  
  1231.             For lq=0 To 10
  1232.                 rx=Rnd(8)-4
  1233.                 ry=Rnd(8)-4
  1234.                 rb=Rnd(2)-1
  1235.                 sprayx=sprx+rx
  1236.                 sprayy=spry+ry
  1237.                 spraybot.w=zomb(l)\y+zomb(l)\h+rb
  1238.                 Gosub addspray
  1239.                 If (Rnd(1)<.3 AND hit<>-1)
  1240.                     cunt.l=(count ASR 1)+lq+rx
  1241.                     cunt=cunt MOD 6             ;0-5
  1242.                     spray(hit)\go=3+cunt
  1243.                     spray(hit)\life-30
  1244.                 EndIf
  1245.                 If shake>18 AND hit<>-1
  1246.                     cunt.l=(count ASR 1)+lq+rx
  1247.                     cunt=cunt MOD 6             ;0-5
  1248.                     spray(hit)\go=3+cunt
  1249.                     spray(hit)\life-50
  1250.                     spray(hit)\vy*1.5
  1251.                 EndIf
  1252.             Next
  1253.         EndIf
  1254.  
  1255. qaz:
  1256.     EndIf
  1257. Next
  1258.  
  1259. Return
  1260. ;--------------------------------------------------------------------
  1261. .addzombies
  1262.  
  1263. max=Int(level/2)+2
  1264. If max>7 Then max=7
  1265.  
  1266. If numkilled>tokill Then max=0   ;dont add any more!!
  1267.  
  1268.  
  1269. If numzombies<max
  1270.     gameon=1
  1271.     rrrr=Rnd(1)
  1272.     dz=(20-(level*2)):If dz<0 Then dz=0
  1273.     dzz=200-(level*8)
  1274.     If dzz<10 Then dzz=10
  1275.     If addzom>dzz Then rrrr=0
  1276.     If addzom<20+dz Then rrrr=9
  1277.     If rrrr<.04
  1278.  
  1279.         hit=-1
  1280.         For l=0 To 10
  1281.             If zomb(l)\here=0
  1282.                 hit=l
  1283.             EndIf
  1284.         Next
  1285.         If hit<>-1
  1286.             numzombies+1
  1287.             zomb(hit)\here=1
  1288.             addzom=0
  1289.             ttt=Int(Rnd(10))
  1290.             If ttt<2 AND level<10 Then ttt=999
  1291.             If ttt=8 AND level<4 Then ttt=999
  1292.             rr=Rnd(2)-1
  1293.             Select ttt
  1294.  
  1295.                 Case 0              ;aaron right
  1296.                     zomb(hit)\typ=30
  1297.                     zomb(hit)\fr=30
  1298.                     zomb(hit)\y=156-ShapeHeight(30)
  1299.                     zomb(hit)\x=0
  1300.                     zomb(hit)\vx=2+Int(level/20)+rr
  1301.                     zomb(hit)\h=ShapeHeight(30)
  1302.                     zomb(hit)\w=ShapeWidth(30)
  1303.                     zomb(hit)\hits=6+Int(level/6)
  1304.                     zomb(hit)\spd=4
  1305.                 Case 1              ;aaron left
  1306.                     zomb(hit)\typ=40
  1307.                     zomb(hit)\fr=40
  1308.                     zomb(hit)\y=156-ShapeHeight(40)
  1309.                     zomb(hit)\x=310
  1310.                     zomb(hit)\vx=-(2+Int(level/20))+rr
  1311.                     zomb(hit)\h=ShapeHeight(40)
  1312.                     zomb(hit)\w=ShapeWidth(40)
  1313.                     zomb(hit)\hits=6+Int(level/6)
  1314.                     zomb(hit)\spd=4
  1315.                 Case 2              ;bob right
  1316.                     zomb(hit)\typ=50
  1317.                     zomb(hit)\fr=50
  1318.                     zomb(hit)\y=156-ShapeHeight(50)
  1319.                     zomb(hit)\x=0
  1320.                     zomb(hit)\vx=(2+Int(level/20))+rr
  1321.                     zomb(hit)\h=ShapeHeight(50)
  1322.                     zomb(hit)\w=ShapeWidth(50)
  1323.                     zomb(hit)\hits=5+Int(level/6)
  1324.                     zomb(hit)\spd=3
  1325.                 Case 3              ;bob left
  1326.                     zomb(hit)\typ=60
  1327.                     zomb(hit)\fr=60
  1328.                     zomb(hit)\y=156-ShapeHeight(60)
  1329.                     zomb(hit)\x=310
  1330.                     zomb(hit)\vx=-(2+Int(level/20))+rr
  1331.                     zomb(hit)\h=ShapeHeight(60)
  1332.                     zomb(hit)\w=ShapeWidth(60)
  1333.                     zomb(hit)\hits=5+Int(level/6)
  1334.                     zomb(hit)\spd=3
  1335.                 Case 4              ;me gun
  1336.                     zomb(hit)\typ=10
  1337.                     zomb(hit)\fr=10
  1338.                     zomb(hit)\y=200-ShapeHeight(10)
  1339.                     zomb(hit)\x=80+(Rnd(12)*10)
  1340.                     zomb(hit)\tim=0
  1341.                     zomb(hit)\h=ShapeHeight(10)
  1342.                     zomb(hit)\w=ShapeWidth(10)
  1343.                     zomb(hit)\hits=5+Int(level/6)
  1344.                     zomb(hit)\spd=3
  1345.                     zomb(hit)\cnt=0
  1346.                 Case 5              ;bob right 2
  1347.                     zomb(hit)\typ=70
  1348.                     zomb(hit)\fr=70
  1349.                     zomb(hit)\y=156-ShapeHeight(70)
  1350.                     zomb(hit)\x=0
  1351.                     zomb(hit)\vx=(2+Int(level/22))+rr
  1352.                     zomb(hit)\h=ShapeHeight(70)
  1353.                     zomb(hit)\w=ShapeWidth(70)
  1354.                     zomb(hit)\hits=5+Int(level/8)
  1355.                     zomb(hit)\spd=3
  1356.                 Case 6              ;bob left 2
  1357.                     zomb(hit)\typ=80
  1358.                     zomb(hit)\fr=80
  1359.                     zomb(hit)\y=156-ShapeHeight(80)
  1360.                     zomb(hit)\x=310
  1361.                     zomb(hit)\vx=-(2+Int(level/2))+rr
  1362.                     zomb(hit)\h=ShapeHeight(80)
  1363.                     zomb(hit)\w=ShapeWidth(80)
  1364.                     zomb(hit)\hits=5+Int(level/8)
  1365.                     zomb(hit)\spd=3
  1366.                 Case 7              ;bob nolegs right
  1367.                     zomb(hit)\typ=20
  1368.                     zomb(hit)\fr=20
  1369.                     zomb(hit)\y=156-ShapeHeight(20)
  1370.                     zomb(hit)\x=0
  1371.                     zomb(hit)\vx=(2+Int(level/22))+rr
  1372.                     zomb(hit)\h=ShapeHeight(20)
  1373.                     zomb(hit)\w=ShapeWidth(20)
  1374.                     zomb(hit)\hits=6+Int(level/10)
  1375.                     zomb(hit)\spd=3
  1376.                 Case 8              ;bobby got a gun
  1377.                     zomb(hit)\typ=0
  1378.                     zomb(hit)\fr=0
  1379.                     zomb(hit)\y=200-ShapeHeight(0)
  1380.                     zomb(hit)\x=80+(Rnd(12)*10)
  1381.                     zomb(hit)\vx=0
  1382.                     zomb(hit)\h=ShapeHeight(0)
  1383.                     zomb(hit)\w=ShapeWidth(0)
  1384.                     zomb(hit)\hits=6+Int(level/8)
  1385.                     zomb(hit)\tim=0
  1386.  
  1387.  
  1388.                 Default
  1389.                     zomb(hit)\here=0
  1390.                     numzombies-1
  1391.                     addzom=190
  1392.  
  1393.             End Select
  1394.  
  1395.         EndIf
  1396.     EndIf
  1397. EndIf
  1398.  
  1399. Return
  1400. ;--------------------------------------------------------------------
  1401. .shootplayer1
  1402.  
  1403. ccp=Point(mx1,my1)
  1404. lasthitx1=-1:lasthity1=-1
  1405. If Joyb(0)=1 AND loaded1=0 AND shoot1=1
  1406.  
  1407.     INCLUDE "zShootInc.bb"
  1408.  
  1409.     If ccp<32 AND ccp>0        ;zombie??
  1410.         For l=0 To 10
  1411.             If zomb(l)\here=1
  1412.                 If mx1>zomb(l)\x AND mx1<zomb(l)\x+zomb(l)\w
  1413.                     If my1>zomb(l)\y AND my1<zomb(l)\y+zomb(l)\h
  1414.                         score1+25
  1415.                         zomb(l)\hits-gunpower1
  1416.                         sprayx.q=mx1:sprayy.q=my1
  1417.                         spraybot.w=zomb(l)\y+zomb(l)\h
  1418.  
  1419.                         If Rnd(1)<.9
  1420.                             s=Int(Rnd(8))+20    ;splat sound 20-27
  1421.                             Sound s,4
  1422.                         EndIf
  1423.  
  1424.                         If (count&3)<2 AND Rnd(1)<.24
  1425.                             Gosub addspray
  1426.                         Else
  1427.                             Gosub addsplat
  1428.                         EndIf
  1429.                         lasthitx1=mx1:lasthity1=my1
  1430.                         Pop For:Goto dfgg
  1431.                     EndIf
  1432.                 EndIf
  1433.             EndIf
  1434.         Next
  1435.  
  1436. ;not a zombie...
  1437.         If (count ASR 4)&3=<2
  1438.             sprayx.q=mx1:sprayy.q=my1
  1439.             spraybot.w=9999
  1440.             If Rnd(1)<.9
  1441.                 s=Int(Rnd(8))+20    ;splat sound 20-27
  1442.                 Sound s,4
  1443.             EndIf
  1444.             Gosub addsplat
  1445.         EndIf
  1446.  
  1447.     EndIf
  1448.  
  1449.  
  1450. dfgg:
  1451.     If Rnd(1)<.07
  1452.         s=Rnd(4)+30     ;rico 30-33
  1453.         Sound s,8
  1454.     EndIf
  1455.  
  1456. EndIf
  1457.  
  1458. Return
  1459. ;--------------------------------------------------------------------
  1460. .updateplayer1:
  1461.  
  1462. shoot1=0
  1463.  
  1464. If Joyb(0)=1 AND loaded1=0 AND bullets1>0
  1465.     If sp1>3
  1466.         Sound 0,1
  1467.         sp1=0
  1468.     Else
  1469.         sp1+1
  1470.     EndIf
  1471.  
  1472.     firec.w=0
  1473.     bullets1-1
  1474.     shoot1=1
  1475.     If bullets1<=0 AND clips1>0  ;re-load!!
  1476.         Sound 1,1
  1477.         loaded1=20
  1478.         bullets1=numperclip1
  1479.         clips1-1
  1480.         If mess$=""
  1481.             mess$=Str$(clips1)+" CLIP"
  1482.             If clips1<>1 Then mess$+"S"
  1483.             mess$+" REMAINING"
  1484.             messc=20
  1485.         EndIf
  1486.     EndIf
  1487. EndIf
  1488.  
  1489. If Joyb(0)=1 AND bullets1=0 AND clips1=0
  1490.     mess$="NO AMMO"
  1491.     messc=25
  1492.     firec+1
  1493.     If firec=>25
  1494.         firec=0
  1495.         Sound 0,1
  1496.         shoot1=1
  1497.     EndIf
  1498. EndIf
  1499.  
  1500.  
  1501. If Joyb(0)=2 AND missx.q=-1 AND missiles1>0  ;missile!!!!
  1502.     missx.q=0:missy.q=190
  1503.     If mx1>160 Then missx=319
  1504.     misshx=mx1:misshy=my1
  1505.     missvx.q=(misshx-missx)/40
  1506.     missvy.q=(misshy-missy)/40
  1507.     missax.q=(misshx-missx)/200
  1508.     missay.q=(misshy-missy)/200
  1509.     Sound 2,8
  1510.     missiles1-1
  1511.     If mess$=""
  1512.         mess$=Str$(missiles1)+" MISSILE"
  1513.         If missiles1<>1 Then mess$+"S"
  1514.         mess$+" REMAINING"
  1515.         messc=20
  1516.     EndIf
  1517. EndIf
  1518.  
  1519. If Joyb(0)=2 AND missiles1=0
  1520.     mess$="NO MISSILES"
  1521.     messc=25
  1522. EndIf
  1523.  
  1524. If Joyb(0)=3 AND grenades1>0 AND shake=0
  1525.     grenades1-1
  1526.     Sound 3,15
  1527.     shake=20
  1528.     numgren=0
  1529.  
  1530.     If mess$=""
  1531.         mess$=Str$(grenades1)+" GRENADE"
  1532.         If grenades1<>1 Then mess$+"S"
  1533.         mess$+" REMAINING"
  1534.         messc=20
  1535.     EndIf
  1536. EndIf
  1537.  
  1538. If Joyb(0)=3 AND grenades1=0
  1539.     mess$="NO GRENADES"
  1540.     messc=25
  1541. EndIf
  1542.  
  1543. If shake>10
  1544.     For las=0 To 10
  1545.         If zomb(las)\here=1 AND zomb(las)\hits>-1
  1546.             zomb(las)\hits=-1
  1547.             numgren+1
  1548.         EndIf
  1549.     Next
  1550. EndIf
  1551.  
  1552. If shake=1
  1553.     If numgren>1
  1554.  
  1555.         If numgren=8 Then numgren+Int(Rnd(3))
  1556.  
  1557.         If numgren>10 Then numgren=10
  1558.         bonus.l=numgren*1500
  1559.         If numgren=10 Then bonus=1000000
  1560.         mess$=number$(numgren)+" WHAMMY BONUS-"+Str$(bonus)
  1561.         messc=50
  1562.         score1+bonus
  1563.         numgren=0
  1564.     EndIf
  1565. EndIf
  1566.  
  1567.  
  1568. Return
  1569. ;--------------------------------------------------------------------
  1570. .updatemissile1
  1571.  
  1572. If missx=-1 Then Return
  1573.  
  1574. missx+missvx
  1575. missy+missvy
  1576. missvx+missax
  1577. missvy+missay
  1578.  
  1579. If missx>misshx-4 AND missx<misshx+4
  1580.     If missy>misshy-4 AND missy<misshy+4
  1581.  
  1582.         ccp=Point(missx,missy)
  1583.         takeout=0
  1584.         headshot=0
  1585.  
  1586.         If ccp<32 AND ccp>0        ;zombie??
  1587.             For l=0 To 10
  1588.                 If zomb(l)\here=1
  1589.                     If missx>zomb(l)\x AND missx<zomb(l)\x+zomb(l)\w
  1590.                         If missy>zomb(l)\y AND missy<zomb(l)\y+zomb(l)\h
  1591.                             score1+50
  1592.                             If zomb(l)\hits>-1 Then takeout+1
  1593.                             If Abs(missy-zomb(l)\y)<16 Then headshot+1
  1594.                             zomb(l)\hits=-1
  1595.                             sprayx.q=missx:sprayy.q=missy
  1596.                             spraybot.w=zomb(l)\y+zomb(l)\h
  1597.  
  1598.                             If Rnd(1)<.9
  1599.                                 s=Int(Rnd(8))+20    ;splat sound 20-27
  1600.                                 Sound s,4
  1601.                             EndIf
  1602.                             For gore=1 To 4
  1603.                                 Gosub addspray
  1604.                                 If hit<>-1
  1605.                                     cunt.l+(count ASR 1)+lq+rx
  1606.                                     cunt=cunt MOD 6             ;0-5
  1607.                                     spray(hit)\go=3+cunt
  1608.                                     spray(hit)\life-30
  1609.                                     spray(hit)\vy*1.8
  1610.                                     spray(hit)\vx*1.8
  1611.                                 EndIf
  1612.                             Next
  1613.                         EndIf
  1614.                     EndIf
  1615.                 EndIf
  1616.             Next
  1617.         EndIf
  1618.  
  1619.         expx=missx-16
  1620.         expy=missy-16
  1621.         expfr=0
  1622.         missx=-1
  1623.         Sound 3,2
  1624.         If takeout>1 AND takeout>headshot
  1625.             If mess$=""
  1626.                 mess$=number$(takeout)+" MISSILE DEATH BONUS -"+Str$(takeout*takeout*1000)+"!"
  1627.                 messc=45
  1628.             EndIf
  1629.             score1+(takeout*takeout*1000)
  1630.         EndIf
  1631.         If headshot>0
  1632.             If headshot=>4 Then headshot+5
  1633.             If headshot>10 Then headshot=10
  1634.             bonus.l=(headshot*headshot*headshot+1)*1000
  1635.             If mess$=""
  1636.                 mess$=number$(headshot)+" HEAD-SHOT BONUS-"+Str$(bonus)
  1637.                 messc=50
  1638.             EndIf
  1639.             score1+bonus
  1640.         EndIf
  1641.  
  1642.  
  1643.     EndIf
  1644. EndIf
  1645.  
  1646. xx=missx
  1647. yy=missy
  1648. xv=missvx*.75
  1649. yv=missvy*.75
  1650. For l=850 To 856
  1651.     If xx>0 AND yy<199 AND xx<300 AND yy>0
  1652.         BBlit db,l,xx,yy
  1653.     EndIf
  1654.     xx-xv
  1655.     yy-yv
  1656. Next
  1657.  
  1658.  
  1659. Return
  1660. ;--------------------------------------------------------------------
  1661. .updateremains
  1662. For l=0 To 40
  1663.     If spray(l)\go>2
  1664.         sdd=ShapeHeight(820+spray(l)\go-3)
  1665.         If spray(l)\y=>spray(l)\bot-sdd AND spray(l)\bot-sdd<194
  1666.  
  1667.             If spray(l)\vy>4
  1668.                 spray(l)\vy=-(spray(l)\vy/2)
  1669.                 spray(l)\vx=(spray(l)\vx/2)
  1670.                 spray(l)\y=spray(l)\bot-sdd-1
  1671.                 spray(l)\life-15
  1672.                 s=Rnd(3)+20:Sound s,8
  1673.                 sprayx=spray(l)\x:sprayy=spray(l)\y
  1674.                 Gosub addbitspray
  1675.                 Goto farty
  1676.             EndIf
  1677.  
  1678.             If spray(l)\x>0 AND spray(l)\x<300 AND spray(l)\bot-sdd>0 AND spray(l)\go>2 AND spray(l)\y>0
  1679.                 Blit 820+spray(l)\go-3,spray(l)\x,spray(l)\bot-sdd
  1680.             EndIf
  1681.             spray(l)\vy=0:spray(l)\vx=0
  1682.             spray(l)\do+1
  1683.             If spray(l)\do=2
  1684.                 s=Rnd(3)+20:Sound s,8
  1685.                 spray(l)\go=0
  1686.                 hit=-1
  1687.                 For zl=0 To 50
  1688.                     If drib(zl)\go=0 Then hit=zl:Pop For:Goto qwe
  1689.                 Next
  1690. qwe:            If hit<>-1
  1691.                     drib(hit)\go=1
  1692.                     drib(hit)\x=Int(spray(l)\x+Rnd(7))
  1693.                     drib(hit)\y=Int(spray(l)\y+sdd-3)
  1694.                     drib(hit)\life=(40+Rnd(30))&$fffc
  1695.                 EndIf
  1696.             EndIf
  1697.         EndIf
  1698.     EndIf
  1699. farty:
  1700. Next
  1701. Return
  1702. ;--------------------------------------------------------------------
  1703. .updatedribble
  1704.  
  1705. dd=Int(dribdrib.q)
  1706. For l=dd*10 To (dd*10)+9
  1707.     If drib(l)\go=1
  1708.         Plot drib(l)\x,drib(l)\y,17+(l&3)
  1709.         drib(l)\life-1
  1710.         If (drib(l)\life&3)=0 AND drib(l)\life>8
  1711.             drib(l)\y+.8
  1712.             If drib(l)\y>199 Then drib(l)\y=199
  1713.             drib(l)\x+(Rnd(3)-1)
  1714.         EndIf
  1715.         If drib(l)\life<0 Then drib(l)\go=0
  1716.     EndIf
  1717. Next
  1718.  
  1719. dribdrib.q=dribdrib+.5
  1720. If dribdrib=5 Then dribdrib=0   ;0,1,2,3,4
  1721.  
  1722. Return
  1723. ;--------------------------------------------------------------------
  1724. .updatedribble2
  1725.  
  1726. dd=Int(dribdrib.q)
  1727. For l=dd*10 To (dd*10)+9
  1728.     If drib2(l)\go=1
  1729.         Use BitMap db+2
  1730.         Plot drib2(l)\x,drib2(l)\y,1
  1731.         Plot drib2(l)\x,drib2(l)\y+1,1
  1732.         drib2(l)\life-1
  1733.         If (drib2(l)\life&3)=0 AND drib2(l)\life>8
  1734.             drib2(l)\y+1.8
  1735.             drib2(l)\x+(Rnd(2)-1)
  1736.         EndIf
  1737.         If drib2(l)\life<0 Then drib2(l)\go=0
  1738.     EndIf
  1739. Next
  1740.  
  1741. Use BitMap db
  1742. Return
  1743. ;--------------------------------------------------------------------
  1744. .updatespray
  1745.  
  1746. For l=0 To 40
  1747.     If spray(l)\go=1 OR spray(l)\go>2
  1748.         spray(l)\x+spray(l)\vx
  1749.         spray(l)\y+spray(l)\vy
  1750.         spray(l)\vy+.3
  1751.         spray(l)\life+1
  1752.         If spray(l)\life>24 Then spray(l)\go=0:Goto www
  1753.         If spray(l)\x<0 OR spray(l)\x>320 Then spray(l)\go=0:Goto www
  1754.         If spray(l)\y>255 Then spray(l)\go=0:Goto www
  1755.         ll=Int(spray(l)\life)/5
  1756.         If ll>4 Then ll=4
  1757.         If ll<0 Then ll=0
  1758.         If spray(l)\y>0
  1759.             gg=spray(l)\go
  1760.             If gg=1
  1761.                 BBlit db,800+ll,spray(l)\x,spray(l)\y
  1762.             EndIf
  1763.             If gg>2
  1764.                 BBlit db,820+gg-3,spray(l)\x,spray(l)\y
  1765.             EndIf
  1766.         EndIf
  1767. www:
  1768.     EndIf
  1769.  
  1770.     If spray(l)\go=2
  1771.         spray(l)\x+spray(l)\vx
  1772.         spray(l)\y+spray(l)\vy
  1773.         spray(l)\life+1
  1774.         If spray(l)\x<0 OR spray(l)\x>320 Then spray(l)\go=0:Goto www2
  1775.         If spray(l)\y>255 Then spray(l)\go=0:Goto www2
  1776.         If spray(l)\life>9 Then spray(l)\go=0:Goto www2
  1777.         ll=Int(spray(l)\life/2)
  1778.         If spray(l)\y>0
  1779.             BBlit db,810+ll,spray(l)\x,spray(l)\y
  1780.         EndIf
  1781. www2:
  1782.     EndIf
  1783. Next
  1784. Return
  1785. ;--------------------------------------------------------------------
  1786. .updatemessage
  1787.  
  1788. If mess$<>""
  1789.     If tmess$<>"" AND tmessc.w>10 Then Goto ddfg
  1790.     If tmess$<>""
  1791.         Use BitMap 1-db
  1792.         Boxf 0,200,319,208,0
  1793.         Use BitMap db
  1794.         Boxf 0,200,319,208,0
  1795.     EndIf
  1796.     tmess$=mess$
  1797.     tmessc.w=messc
  1798.     mess$=""
  1799. EndIf
  1800.  
  1801. If tmess$="" Then Return
  1802.  
  1803. ddfg:
  1804. tmessc-1
  1805. If tmessc<2
  1806.     Boxf 0,200,319,208,0
  1807. Else
  1808.  
  1809.     If (tmessc&3)=0
  1810.         xx=40-Len(tmess$)
  1811.         xx=xx/2
  1812.         Colour 1
  1813.         cc=(tmessc&7)
  1814.         If cc>3 Then Colour 5
  1815.         Locate xx,25
  1816.         Print tmess$
  1817.     EndIf
  1818. EndIf
  1819.  
  1820. If tmessc<0 Then tmess$="":Colour 1
  1821.  
  1822. Return
  1823. ;--------------------------------------------------------------------
  1824. .updatepowerups
  1825.  
  1826. nextpow=(nextpow+1) MOD 5
  1827.  
  1828. If powx=-1
  1829.     tttt.q=Rnd
  1830.     If addpow>800 Then tttt=0
  1831.     If tttt<.01
  1832.  
  1833.         addpow=Int(Rnd(80))
  1834.         powy=0
  1835.         powx=Rnd(39)*8
  1836.         powvx=0
  1837.         powvy=2
  1838.         powfr=nextpow ;Int(Rnd(12)/2)
  1839.         If powfr=1 AND level<5 Then powfr=0
  1840.         If powfr=2 Then powfr=0
  1841.         powhit=-1
  1842.         If clips1<3
  1843.             powfr=0
  1844.         EndIf
  1845.  
  1846.     EndIf
  1847. Else
  1848.  
  1849.     If powhit<>1 AND Joyb(0)=1 AND loaded=0
  1850.         If mx1>powx AND mx1<powx+16
  1851.             If my1>powy AND my1<powy+16
  1852.  
  1853.                 powhit=1
  1854.                 powvy=-6
  1855.                 powvx=(Rnd(6)-3)*2
  1856.                 Sound 30+Rnd(2),15
  1857.  
  1858.                 Select powfr
  1859.                     Case 0
  1860.                         clips1+1
  1861.                         bullets1+1
  1862.                     Case 1
  1863.                         missiles1+5
  1864.                     Case 2
  1865.  
  1866.                     Case 3
  1867.                         grenades1+5
  1868.                     Case 4
  1869.                         gunpower1+.1
  1870.                 End Select
  1871.             EndIf
  1872.         EndIf
  1873.     EndIf
  1874.  
  1875.     powx+powvx
  1876.     powy+powvy
  1877.  
  1878.     If powhit=1
  1879.         powvy+.3
  1880.     EndIf
  1881.  
  1882.     If powy>199 Then powx=-1
  1883.     If powx<0 OR powx>319 Then powx=-1
  1884.  
  1885.     If powx<>-1 AND powy>0
  1886.         BBlit db,700+powfr,powx,powy
  1887.     EndIf
  1888. EndIf
  1889.  
  1890. Return
  1891. ;--------------------------------------------------------------------
  1892. .addspray
  1893. hit=-1
  1894. For lh=0 To 40
  1895.     If spray(lh)\go=0 Then hit=lh:Pop For:Goto ppp
  1896. Next
  1897. ppp:
  1898. If hit<>-1
  1899.     spray(hit)\go=1
  1900.     spray(hit)\do=0
  1901.     spray(hit)\life=0
  1902.     spray(hit)\vx=Rnd(6)-3
  1903.     spray(hit)\vy=-(Rnd(4)+1)
  1904.     spray(hit)\bot=spraybot
  1905.     rx=Rnd(6)-3
  1906.     ry=Rnd(6)-3
  1907.     spray(hit)\x=sprayx+rx
  1908.     spray(hit)\y=sprayy+rx
  1909.     zzzz=hit
  1910.  
  1911.     If Rnd(1)<.2
  1912.         hit=-1
  1913.         For zl=0 To 30
  1914.             If drib2(zl)\go=0 Then hit=zl:Pop For:Goto qz
  1915.         Next
  1916. qz:     If hit<>-1
  1917.             drib2(hit)\go=1
  1918.             drib2(hit)\x=Int(spray(zzzz)\x+Rnd(7))
  1919.             drib2(hit)\y=Int(spray(zzzz)\y)
  1920.             drib2(hit)\life=(30+Rnd(10))&$fffc
  1921.  
  1922.             rr=Int(Rnd(3))
  1923.             Use BitMap 2
  1924.             Blit 840+rr,drib2(hit)\x-4,drib2(hit)\y-4
  1925.             Use BitMap 3
  1926.             Blit 840+rr,drib2(hit)\x-4,drib2(hit)\y-4
  1927.             Use BitMap db
  1928.  
  1929.         EndIf
  1930.     EndIf
  1931.  
  1932. EndIf
  1933. Return
  1934. ;--------------------------------------------------------------------
  1935. .addbitspray
  1936. For fucks_sake=1 To 2
  1937.     hit=-1
  1938.     For lh=20 To 40
  1939.         If spray(lh)\go=0 Then hit=lh:Pop For:Goto ppp2
  1940.     Next
  1941.     ppp2:
  1942.     If hit<>-1
  1943.         spray(hit)\go=1
  1944.         spray(hit)\do=0
  1945.         spray(hit)\life=9
  1946.         spray(hit)\vx=Rnd(6)-3
  1947.         spray(hit)\vy=-(Rnd(4)+1)
  1948.         spray(hit)\bot=spraybot
  1949.         rx=Rnd(6)-3
  1950.         ry=Rnd(6)-3
  1951.         spray(hit)\x=sprayx+rx
  1952.         spray(hit)\y=sprayy+rx
  1953.         zzzz=hit
  1954.     EndIf
  1955. Next
  1956. Return
  1957. ;--------------------------------------------------------------------
  1958. .addsplat
  1959. hit=-1
  1960. For lh=0 To 40
  1961.     If spray(lh)\go=0 Then hit=lh:Pop For:Goto ppp2z
  1962. Next
  1963. ppp2z:
  1964. If hit<>-1
  1965.     spray(hit)\go=2
  1966.     spray(hit)\do=0
  1967.     spray(hit)\life=0
  1968.     rx=Rnd(4)-2
  1969.     ry=Rnd(4)-2
  1970.     spray(hit)\x=sprayx+rx-8
  1971.     spray(hit)\y=sprayy+ry-8
  1972.     spray(hit)\vx=0
  1973.     spray(hit)\vy=0
  1974.     spray(hit)\bot=9999
  1975. EndIf
  1976. Return
  1977. ;--------------------------------------------------------------------
  1978. .DoInt
  1979.  
  1980. ti.l+1
  1981. count.l+1
  1982. addzom+1
  1983. addpow+1
  1984.  
  1985. ;ReadJoy32{}
  1986. ;GetJoy32{}
  1987.  
  1988. If control=0
  1989.     jb.w=Joyb(0)
  1990. Else
  1991.     jb=getjb{}
  1992. EndIf
  1993.  
  1994. If paused=0
  1995.     mx1=MouseX
  1996.     my1=MouseY
  1997.     DisplaySprite 0,0,mx1-7,my1-7,4
  1998. EndIf
  1999. If loaded1>0 Then loaded1-1
  2000.  
  2001. If gameon=1
  2002.     Gosub updateplayer1
  2003. EndIf
  2004.  
  2005. If fade<>0
  2006.     tot.l=0
  2007.     For l=0 To 127
  2008.         r.w=getred{l,copaddr}
  2009.         g.w=getgreen{l,copaddr}
  2010.         b.w=getblue{l,copaddr}
  2011.         r=r-fade:b=b-fade:g=g-fade
  2012.         If r<0 Then r=0
  2013.         If g<0 Then g=0
  2014.         If b<0 Then b=0
  2015.         setrgb{l,copaddr,r,g,b}
  2016.         tot+r+b+g
  2017.     Next
  2018.     If tot=0 Then fade=0
  2019. EndIf
  2020.  
  2021. If fadered<>0
  2022.     tot.l=128
  2023.     For l=0 To 127
  2024.         r.w=getred{l,copaddr}
  2025.         g.w=getgreen{l,copaddr}
  2026.         b.w=getblue{l,copaddr}
  2027.         r=r+fadered:b=b-fadered:g=g-fadered
  2028.         If r>255 Then r=255
  2029.         If g<0 Then g=0
  2030.         If b<0 Then b=0
  2031.         setrgb{l,copaddr,r,g,b}
  2032.         If r=255 AND g=0 AND b=0 Then tot-1
  2033.     Next
  2034.     If tot=0 Then fadered=0
  2035. EndIf
  2036.  
  2037. If music=1
  2038.     PlayMed
  2039. EndIf
  2040.  
  2041. If plasma=1
  2042.     plccc=plcc
  2043.     For lqw=32 To 63
  2044.         r.w=0:g.w=0:b.w=0
  2045.         If plascol<.6 Then r=plccc*2
  2046.         If plascol=>.6 AND plascol<.7 Then g=plccc*2
  2047.         If plascol=>.7 AND plascol<.8 Then b=plccc*2
  2048.         If plascol=>.8 AND plascol<.9 Then r=plccc*2:b=plccc*2
  2049.         If plascol=>.9 Then g=plccc*2:b=plccc*2
  2050.         setrgb{lqw,copaddr,r,g,b}
  2051.         plccc+1:If plccc=64 Then plccc=32
  2052.     Next
  2053.     plcc+1:If plcc=64 Then plcc=32
  2054. EndIf
  2055.  
  2056. Return
  2057. ;--------------------------------------------------------------------
  2058. ;--------------------------------------------------------------------
  2059. ;--------------------------------------------------------------------
  2060. .dotitlescale
  2061.  
  2062. polly(0,0)\x=-30,25     ;top bar
  2063. polly(0,1)\x=30,25
  2064. polly(0,2)\x=30,15
  2065. polly(0,3)\x=-30,15
  2066.  
  2067. polly(1,0)\x=-30,-25     ;bottom bar
  2068. polly(1,1)\x=30,-25
  2069. polly(1,2)\x=30,-15
  2070. polly(1,3)\x=-30,-15
  2071.  
  2072. polly(2,0)\x=-20,15     ;vert bar 1
  2073. polly(2,1)\x=-10,15
  2074. polly(2,2)\x=-10,-15
  2075. polly(2,3)\x=-20,-15
  2076.  
  2077. polly(3,0)\x=20,15     ;vert bar 2
  2078. polly(3,1)\x=10,15
  2079. polly(3,2)\x=10,-15
  2080. polly(3,3)\x=20,-15
  2081.  
  2082. cx=160
  2083. cy=100
  2084. numc=4
  2085. nump=4
  2086. db=0
  2087.  
  2088. For k=20 To 0 Step -.45
  2089.     VWait
  2090.     DisplayBitMap 0,db+4
  2091.     db=1-db
  2092.     Use BitMap db+2
  2093.     BitMapOutput db+2
  2094.     Cls
  2095.     kk=k:If kk<1 Then kk=1
  2096.  
  2097.     For pp=0 To nump-1
  2098.  
  2099.         For l=0 To numc-1
  2100.             pollyd(l)\x=polly(pp,l)\x*kk+cx
  2101.             pollyd(l)\y=polly(pp,l)\y*kk+cy
  2102.         Next
  2103.         Polyf numc,&pollyd(0),1,1
  2104.     Next
  2105. Next
  2106.  
  2107. For l=0 To 1
  2108.     VWait
  2109.     DisplayBitMap 0,db+4
  2110.     db=1-db
  2111.     Use BitMap db+2
  2112.     BitMapOutput db+2
  2113.     Cls
  2114.     Use BitMap db+4
  2115.     BitMapOutput db+4
  2116.     Blit 898,130,75
  2117. Next
  2118.  
  2119. Return
  2120. ;--------------------------------------------------------------------
  2121. .meltscreen:
  2122.  
  2123. ;set colours 64-127 to red...
  2124. ;DisplayPalette 0,0
  2125.  
  2126. For cll.w=64 To 127
  2127.     r.w=getred{cll-64,copaddr}
  2128.     g.w=getgreen{cll-64,copaddr}
  2129.     b.w=getblue{cll-64,copaddr}
  2130.  
  2131.     r.w=Int((r+g+b)/3)
  2132.     r.w=r.w+64:If r>255 Then r=255
  2133.     setrgb{cll,copaddr,r,0,0}
  2134. Next
  2135.  
  2136. For l=0 To 319
  2137.     melt(l)=l
  2138.     melty(l)=0
  2139. Next
  2140.  
  2141. gg=0
  2142. For l=0 To 640
  2143.     a=gg
  2144.     b=Rnd(320)
  2145.     While a=b
  2146.         b=Int(Rnd(320))
  2147.     Wend
  2148.     t=melt(a)
  2149.     melt(a)=melt(b)
  2150.     melt(b)=t
  2151.     gg+1:gg=gg MOD 320
  2152. Next
  2153.  
  2154. Use BitMap 2
  2155. DisplayBitMap 0,4
  2156.  
  2157. startgame=0
  2158.  
  2159. domelt:
  2160.     go=0
  2161.     For gg=0 To 319
  2162.         xx=melt(gg)
  2163.         If melty(xx)<255
  2164.             go=1
  2165.             lzz=Rnd(4)
  2166.             Line xx,melty(xx),xx,melty(xx)+lzz,1
  2167.             melty(xx)+lzz
  2168.         EndIf
  2169.         If Joyb(0)<>0 OR Joyb(1)<>0 Then Pop For:startgame=1:Return
  2170.     Next
  2171. If go=1 Then Goto domelt
  2172.  
  2173. VWait 50
  2174.  
  2175. Return
  2176. ;--------------------------------------------------------------------
  2177. .drawhitable
  2178. Use BitMap 4
  2179. Cls
  2180. Use BitMap 5
  2181. Cls
  2182. DisplayBitMap 0,4
  2183. BitMapOutput 0
  2184. Use BitMap 0
  2185.  
  2186. DisplayPalette 0,5
  2187. VWait
  2188. For l=64 To 127
  2189.     setrgb{l,copaddr,0,0,0}
  2190. Next
  2191.  
  2192. For l=32 To 63
  2193.     setrgb{l,copaddr,0,0,0}
  2194. Next
  2195.  
  2196. setrgb{8,copaddr,0,0,0}
  2197.  
  2198. VWait
  2199. stoppy=1
  2200.  
  2201. Locate 8,0
  2202. NPrint "ALL-TIME BIGGEST LOSERS"
  2203.  
  2204. startgame=0
  2205.  
  2206. drawhitable2:
  2207.  
  2208. ;----------------------
  2209. CreateDisplay 1
  2210. bh=256+31:bw=320+63
  2211. kp.q=rad
  2212.  
  2213. If Int(Rnd*10)>5
  2214.     sadd.q=Rnd*2                 ;plasmax 0.9,1.5,0.9
  2215.     ssize.q=Int(Rnd*40)*2+2     ;xsize  70,40,70
  2216.     sadd1.q=Int(Rnd*180)+1       ;2.5       ;plasmay 2.5,12.5,182.5
  2217.     ssize1.q=Int(Rnd*40)*2+6    ;ysize  30,20,70
  2218.     thick=Int(Rnd*2)+1           ;1,2,3,4..
  2219. Else
  2220.     sadd.q=(Rnd*5)+1.5            ;plasmax 0.9,1.5,0.9
  2221.     ssize.q=Int(Rnd*10)*4+12       ;xsize  70,40,70
  2222.     sadd1.q=(Rnd*8)+2.5                  ;plasmay 2.5,12.5,182.5
  2223.     ssize1.q=Int(Rnd*10)*3+7    ;ysize  30,20,70
  2224.     thick=Int(Rnd*1)+1           ;1,2,3,4..
  2225. EndIf
  2226.  
  2227. col=0
  2228. coladd=1
  2229. If Rnd<.5 Then coladd=-1
  2230. For lz=10 To bh-1 Step thick
  2231.     Boxf 0,lz,bw-1,lz+thick,col+32
  2232.     col=col+coladd
  2233.     If col>31 Then col=0
  2234.     If col<0 Then col=31
  2235. Next
  2236. sval.q=0
  2237. For x=0 To bw-1
  2238.     ss=Int((Sin(sval*kp)*ssize)+ssize)
  2239.     ss+10
  2240.     Scroll x,ss,1,bh-ss,x,10
  2241.     sval=sval+sadd
  2242. Next
  2243. sval=0
  2244. For y=10 To bh-1
  2245.     ss=Int((Sin(sval*kp)*ssize1)+ssize1)
  2246.     Scroll ss,y,bw-ss,1,0,y
  2247.     sval=sval+sadd1
  2248. Next
  2249.  
  2250. VWait
  2251. CreateDisplay 0
  2252. ;----------------------
  2253.  
  2254. yy=32:yy2=256
  2255. For l=1 To 8
  2256.     xx=8
  2257.  
  2258.     Use BitMap 2
  2259.     Boxf 4,yy,314,yy+18,1
  2260.     Use BitMap 0
  2261.     Blit 900+l+26,xx,yy     ;number..
  2262.     xx=42
  2263.     blitprint{xx,yy,hiname$(l)}
  2264.     xx=176
  2265.     t$="00000000"+Str$(hiscore(l))
  2266.     t$=Right$(t$,8)
  2267.     blitprint{xx,yy,t$}
  2268.  
  2269.  
  2270.     If Int(l/2)*2=l
  2271.         Use BitMap 2
  2272.         For g=0 To 320
  2273.             For y=yy To yy+18
  2274.                 xm=Rnd(2)
  2275.                 Scroll 4,y,320,1,4-xm,y
  2276.             Next
  2277.             If (Joyb(0)<>0 OR Joyb(1)<>0) AND stoppy=1
  2278.                 stoppy=2
  2279.             EndIf
  2280.         Next
  2281.     Else
  2282.         Use BitMap 2
  2283.         For g=0 To 320
  2284.             For y=yy To yy+18
  2285.                 xm=Rnd(2)*2
  2286.                 Scroll 0,y,320,1,xm,y
  2287.             Next
  2288.             If (Joyb(0)<>0 OR Joyb(1)<>0) AND stoppy=1
  2289.                 stoppy=2
  2290.             EndIf
  2291.         Next
  2292.     EndIf
  2293.  
  2294.     yy+20
  2295.     If stoppy=2 Then Pop For:startgame=1:Return
  2296. Next
  2297. dddd:
  2298.  
  2299. Return
  2300. ;--------------------------------------------------------------------
  2301. .entername1
  2302.  
  2303. MouseArea 0,0,320,256
  2304.  
  2305. Use BitMap 4
  2306. Cls
  2307. Use BitMap 5
  2308. Cls
  2309. DisplayBitMap 0,4
  2310. BitMapOutput 0
  2311. Use BitMap 0
  2312. DisplayPalette 0,5
  2313.  
  2314. For l=0 To 31
  2315.     setrgb{l+32,copaddr,0,0,0}
  2316. Next
  2317. For l=32 To 63
  2318.     setrgb{l,copaddr,0,0,0}
  2319. Next
  2320. For l=64 To 127
  2321.     setrgb{l,copaddr,0,0,0}
  2322. Next
  2323.  
  2324. hiname$(hnum)=""
  2325. hiscore(hnum)=score1
  2326.  
  2327. ;show table..
  2328. stoppy=0
  2329. Gosub drawhitable2
  2330.  
  2331. Boxf 0,0,319,8,0
  2332. Locate 7,0
  2333. NPrint "PLAYER ONE GOT A HI-SCORE!"
  2334.  
  2335. Locate 13,31
  2336. NPrint "PRESS RIGHT BUTTON TO END."
  2337.  
  2338. Use BitMap 4
  2339. xx=0:yy=200
  2340. For l=0 To 26+10-1
  2341.     Blit 900+l,xx,yy
  2342.     xx+20:If xx>300 Then xx=0:yy+20
  2343. Next
  2344.  
  2345. ;For l=64 To 127
  2346. ;    AGAPalRGB 0,l,0,0,0
  2347. ;Next
  2348. ;AGAPalRGB 0,0,0,0,0
  2349. ;AGAPalRGB 0,1,255,255,255
  2350. ;DisplayPalette 0,0
  2351.  
  2352. plasma=1
  2353. plascol.q=Rnd(1)
  2354. plccc=0
  2355.  
  2356. lx=42:ly=32+((hnum-1)*20)     ;next letter pos...
  2357. lnum=0
  2358. nn$=""
  2359.  
  2360. glet:
  2361. While Joyb(0)=0 AND Joyb(1)=0
  2362.     VWait
  2363. Wend
  2364.  
  2365. If Joyb(0)=2 Then Goto donenn
  2366.  
  2367. If my1<200 Then Goto glet
  2368.  
  2369. Sound 0,15   ;shot..
  2370.  
  2371. mx=mx1
  2372. my=my1
  2373. my-200
  2374. mx=Int(mx/20)
  2375. my=Int(my/20)
  2376.  
  2377. letter=my*16+mx
  2378. lw=ShapeWidth(letter+900)
  2379.  
  2380. VWait
  2381. Use BitMap 0
  2382. Blit 900+letter,lx,ly
  2383.  
  2384. If letter<26
  2385.     nn$=nn$+Chr$(Asc("A")+letter)
  2386. Else
  2387.     nn$=nn$+Chr$(Asc("0")+(letter-26))
  2388. EndIf
  2389.  
  2390. VWait 12
  2391.  
  2392. Sound 1,15   ;reload
  2393.  
  2394. VWait 20
  2395.  
  2396. lnum+1
  2397. lx+lw+2
  2398. If lnum<5 Then Goto glet
  2399.  
  2400. donenn:
  2401. hiname$(hnum)=nn$
  2402.  
  2403. INCLUDE "zhiinc.bb"
  2404.  
  2405. VWait 10
  2406. plasma=0
  2407. fade=2
  2408. While fade<>0
  2409.     VWait
  2410. Wend
  2411.  
  2412. Return
  2413. ;--------------------------------------------------------------------
  2414. .creditspage
  2415. Use BitMap 4
  2416. Cls
  2417. Use BitMap 5
  2418. Cls
  2419. DisplayBitMap 0,4
  2420. BitMapOutput 0
  2421. Use BitMap 0
  2422. DisplayPalette 0,5
  2423. For l=32 To 63
  2424.     setrgb{l,copaddr,0,0,0}
  2425. Next
  2426. For l=64 To 127
  2427.     setrgb{l,copaddr,0,0,0}
  2428. Next
  2429. setrgb{8,copaddr,0,0,0}
  2430.  
  2431. ;----------------------
  2432. CreateDisplay 1
  2433. bh=256+31:bw=320+63
  2434. kp.q=rad
  2435.  
  2436. If Int(Rnd*10)>5
  2437.     sadd.q=Rnd*5+7                 ;plasmax 0.9,1.5,0.9
  2438.     ssize.q=Int(Rnd*40)*2+2     ;xsize  70,40,70
  2439.     sadd1.q=Int(Rnd*18)+20       ;2.5       ;plasmay 2.5,12.5,182.5
  2440.     ssize1.q=Int(Rnd*40)*2+6    ;ysize  30,20,70
  2441.     thick=Int(Rnd*2)+1           ;1,2,3,4..
  2442. Else
  2443.     sadd.q=(Rnd*5)+9.5            ;plasmax 0.9,1.5,0.9
  2444.     ssize.q=Int(Rnd*10)*4+12       ;xsize  70,40,70
  2445.     sadd1.q=(Rnd*8)+4.5                  ;plasmay 2.5,12.5,182.5
  2446.     ssize1.q=Int(Rnd*10)*3+9    ;ysize  30,20,70
  2447.     thick=Int(Rnd*1)+1           ;1,2,3,4..
  2448. EndIf
  2449.  
  2450. col=0
  2451. coladd=1
  2452. If Rnd<.5 Then coladd=-1
  2453.  
  2454. For lz=0 To bw-1 Step thick
  2455.     Boxf lz,0,lz+thick,bh-1,col+32
  2456.     col=col+coladd
  2457.     If col>31 Then col=0
  2458.     If col<0 Then col=31
  2459. Next
  2460. sval.q=0
  2461. For y=00 To bh-1
  2462.     ss=Int((Cos(sval*kp)*ssize1)+ssize1)
  2463.     Scroll ss,y,bw-ss,1,0,y
  2464.     sval=sval+sadd1
  2465. Next
  2466. sval.q=0
  2467. For x=0 To bw-1
  2468.     ss=Int((Sin(sval*kp)*ssize)+ssize)
  2469.     Scroll x,ss,1,bh-ss,x,0
  2470.     sval=sval+sadd
  2471. Next
  2472.  
  2473. VWait
  2474. CreateDisplay 0
  2475. ;----------------------
  2476.  
  2477. Restore cdat
  2478.  
  2479. yy=8
  2480.  
  2481. rew:
  2482. Read a$
  2483. If a$="XXX" Then Goto wert
  2484. If a$<>""
  2485.     cblitprint{yy,a$}
  2486.     yy+18
  2487. Else
  2488.     yy+9
  2489. EndIf
  2490. Goto rew
  2491.  
  2492. wert:
  2493. plasma=1
  2494. plascol.q=Rnd(1)
  2495. plccc=0
  2496.  
  2497. For l=0 To 500
  2498.     VWait
  2499.     If Joyb(0)<>0 OR Joyb(1)<>0 Then startgame=1:Pop For:Goto qazx
  2500. Next
  2501.  
  2502. qazx:
  2503. plasma=0
  2504. fade=6
  2505. While fade<>0:VWait:Wend
  2506.  
  2507. Return
  2508. cdat:
  2509.  
  2510. Data$ "CLEVER BITS"
  2511. Data$ "PAUL ANDREWS"
  2512. Data$ ""
  2513. Data$ "PRETTY BITS"
  2514. Data$ "RODNEY SMITH"
  2515. Data$ ""
  2516. Data$ "NOISY BITS"
  2517. Data$ "BLAIR ZUPPICICH"
  2518. Data$ ""
  2519. Data$ "PRODUCED BY"
  2520. Data$ "VISION SOFTWARE"
  2521. Data$ "FOR ACID SOFTWARE"
  2522. Data$ "WRITTEN IN"
  2523. Data$ "BLITZ BASIC 2"
  2524. Data$ "XXX"
  2525. ;--------------------------------------------------------------------
  2526. .howtopage
  2527. Use BitMap 4
  2528. Cls
  2529. Use BitMap 5
  2530. Cls
  2531. DisplayBitMap 0,4
  2532. BitMapOutput 0
  2533. Use BitMap 0
  2534. DisplayPalette 0,5
  2535. For l=32 To 63
  2536.     setrgb{l,copaddr,0,0,0}
  2537. Next
  2538. For l=64 To 127
  2539.     setrgb{l,copaddr,0,0,0}
  2540. Next
  2541. setrgb{8,copaddr,0,0,0}
  2542.  
  2543. ;----------------------
  2544. CreateDisplay 1
  2545. bh=256+31:bw=320+63
  2546. kp.q=rad
  2547.  
  2548. If Int(Rnd*10)>5
  2549.     sadd.q=Rnd*5+7                 ;plasmax 0.9,1.5,0.9
  2550.     ssize.q=Int(Rnd*40)+2     ;xsize  70,40,70
  2551.     sadd1.q=Rnd*5+7             ;2.5       ;plasmay 2.5,12.5,182.5
  2552.     ssize1.q=Int(Rnd*40)+2    ;ysize  30,20,70
  2553. Else
  2554.     sadd.q=(Rnd*10)+10            ;plasmax 0.9,1.5,0.9
  2555.     ssize.q=Int(Rnd*10)*4+12       ;xsize  70,40,70
  2556.     sadd1.q=(Rnd*10)+10                  ;plasmay 2.5,12.5,182.5
  2557.     ssize1.q=Int(Rnd*10)*4+12    ;ysize  30,20,70
  2558. EndIf
  2559.  
  2560. col=0
  2561. coladd=1
  2562. If Rnd<.5 Then coladd=-1
  2563.  
  2564. For lz=0 To (bw*2)-1
  2565.     Line lz,0,0,lz,col+32
  2566.     col=col+coladd
  2567.     If col>31 Then col=0
  2568.     If col<0 Then col=31
  2569. Next
  2570. sval.q=0
  2571. For y=00 To bh-1
  2572.     ss=Int((Cos(sval*kp)*ssize1)+ssize1)
  2573.     Scroll ss,y,bw-ss,1,0,y
  2574.     sval=sval+sadd1
  2575. Next
  2576. sval.q=0
  2577. For x=0 To bw-1
  2578.     ss=Int((Sin(sval*kp)*ssize)+ssize)
  2579.     Scroll x,ss,1,bh-ss,x,0
  2580.     sval=sval+sadd
  2581. Next
  2582.  
  2583. VWait
  2584. CreateDisplay 0
  2585. ;----------------------
  2586.  
  2587. Restore cdat2
  2588.  
  2589. yy=8
  2590.  
  2591. rew2:
  2592. Read a$
  2593. If a$="XXX" Then Goto wert2
  2594. If a$<>""
  2595.     cblitprint{yy,a$}
  2596.     yy+18
  2597. Else
  2598.     yy+9
  2599. EndIf
  2600. Goto rew2
  2601.  
  2602. wert2:
  2603. Blit 700+0,64,143+9
  2604. Blit 700+3,64,161+9
  2605. Blit 700+1,64,179+9
  2606. Blit 700+4,64,197+9
  2607.  
  2608. plasma=1
  2609. plascol.q=(Rnd(1)*.5)+.61
  2610. plccc=0
  2611.  
  2612. For l=0 To 500
  2613.     VWait
  2614.     If Joyb(0)<>0 OR Joyb(1)<>0 Then startgame=1:Pop For:Goto qazx2
  2615. Next
  2616.  
  2617. qazx2:
  2618. plasma=0
  2619. fade=6
  2620. While fade<>0:VWait:Wend
  2621.  
  2622. Return
  2623. cdat2:
  2624.  
  2625. Data$ "HOW TO PLAY"             ;8
  2626. Data$ ""                        ;26
  2627. Data$ "SHOOT THE ZOMBIES"       ;35
  2628. Data$ ""                        ;53
  2629. Data$ "LMB   GUN"               ;62
  2630. Data$ "RMB   MISSILE"           ;80
  2631. Data$ "BOTH  GRENADE"           ;98
  2632. Data$ ""                        ;116
  2633. Data$ "COLLECT POWERUPS"        ;125
  2634. Data$ ""
  2635. Data$ "   AMMO"                 ;143
  2636. Data$ "   GRENADES"             ;161
  2637. Data$ "   MISSILES"             ;179
  2638. Data$ "   GUN POWER"            ;197
  2639. Data$ "XXX"
  2640. ;--------------------------------------------------------------------
  2641.