home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib30b.dsk / STARLASER.bas < prev    next >
BASIC Source File  |  2023-02-26  |  5KB  |  101 lines

  1. 10  REM  **********************
  2. 20  REM  *                    *
  3. 30  REM  *      STARLASER     *
  4. 40  REM  * BY SCOTT ZIMMERMAN *
  5. 50  REM  * COPYRIGHT (C) 1987 *
  6. 60  REM  * BY MICROSPARC, INC *
  7. 70  REM  * CONCORD, MA  01742 *
  8. 80  REM  *                    *
  9. 90  REM  **********************
  10. 100  REM * INTRODUCTION:
  11. 110  ONERR  GOTO 990
  12. 120  PRINT  CHR$(4)"VERIFY STARLASER.SNDS": PRINT  CHR$(4)"VERIFY DUO": PRINT  CHR$(4)"VERIFY STARLASER.SHPS": POKE 216,0
  13. 130 HI = 33792: HIMEM: HI: TEXT : HOME 
  14. 140  VTAB 5: HTAB 15: INVERSE : PRINT " STARLASER ": VTAB 7: HTAB 10: NORMAL : PRINT "BY S. SCOTT ZIMMERMAN"
  15. 150  HTAB 12: PRINT "COPYRIGHT (C) 1987": HTAB 13: PRINT "MICROSPARC, INC.": VTAB 20: HTAB 14: PRINT "PLEASE ";: FLASH : PRINT "WAIT": NORMAL 
  16. 160 L = 68:AS = HI -L -1: PRINT  CHR$(4);"BLOAD STARLASER.SNDS,A";AS
  17. 170 AD = AS -445: PRINT  CHR$(4);"BRUN DUO,A";AD
  18. 180 LB = 328:AX = AD -LB: PRINT  CHR$(4);"BLOAD STARLASER.SHPS,A";AX
  19. 190 HI = 256 * INT(AX/256): HIMEM: HI: VTAB 20: CALL  -958: PRINT "PRESS <RETURN> TO BEGIN -> ";: GET A$
  20. 200 AN = 10: DIM XA(AN),YA(AN):HS = 0
  21. 210  DEF  FN HB(A) =  INT(A/256): DEF  FN LB(A) = A - FN HB(A) *256:SF = 1
  22. 220  REM *----------------
  23. 230  REM * SETUP:
  24. 240  REM *----------------
  25. 250  POKE 206, FN LB(AS): POKE 207, FN HB(AS): REM SOUND TABLE ADDRESS
  26. 260  POKE 232, FN LB(AX): POKE 233, FN HB(AX): REM SHAPE TABLE ADDRESS
  27. 270  POKE 230,32: CALL 62450: POKE  -16297,0: POKE  -16301,0: POKE  -16300,0
  28. 280  POKE  -16304,0: IF SF  THEN  &  NORMAL 
  29. 290 SC = 0:FU = 1000:FC = 1:SS = 1:KB = 2:AB = 3:LA = 4:MS = 0:KC = 0:AC = 0
  30. 300  HCOLOR= 3: SCALE= 1: ROT= 0
  31. 310  FOR I = 1 TO AN
  32. 320 X = 4 * INT( RND(1) *12 +28):Y =  INT( RND(1) *148)
  33. 330  XDRAW AB AT X,Y: IF  PEEK(234) <10  THEN  XDRAW AB AT X,Y: GOTO 320
  34. 340 XA(I) = X:YA(I) = Y: NEXT I
  35. 350  VTAB 21: HTAB 1: PRINT "FUEL:": GOSUB 770: VTAB 21: HTAB 29: PRINT "SCORE:": GOSUB 790: VTAB 23: HTAB 14: INVERSE : PRINT " STARLASER ": NORMAL 
  36. 360 YS =  INT( RND(1) *150):XS = 80: XDRAW SS AT XS,YS: GOSUB 810: & 4: & 4
  37. 370  REM *----------------
  38. 380  REM * MAIN LOOP:
  39. 390  REM *----------------
  40. 400  IF  PEEK( -16384) <128  THEN 510
  41. 410  GET A$
  42. 420  IF A$ =  CHR$(8)  THEN MS = MS -1
  43. 430  IF A$ =  CHR$(21)  THEN MS = MS +1
  44. 440  IF A$ = " "  THEN  GOSUB 690: GOTO 510
  45. 450  IF A$ = "S"  OR A$ =  CHR$(115)  THEN  &  NORMAL :SF =   NOT SF: IF   NOT SF  THEN  &  STOP 
  46. 460  IF A$ =  CHR$(27)  THEN  WAIT  -16384,128: POKE  -16368,0: GOTO 510
  47. 470  GOTO 510
  48. 480  IF MS < -12  THEN MS =  -12
  49. 490  IF MS >12  THEN MS = 12
  50. 500 FC =  INT( ABS(MS)/2) +1
  51. 510 OY = YS:YS = YS +MS
  52. 520  IF YS <0  THEN YS = 150
  53. 530  IF YS >150  THEN YS = 0
  54. 540  XDRAW SS AT XS,OY: XDRAW SS AT XS,YS
  55. 550 KC = KC +1: IF KC <40  THEN 570
  56. 560 KC = 0: GOSUB 820
  57. 570 OY = YK:YK = YK +MK
  58. 580  IF YK <0  THEN YK = 140
  59. 590  IF YK >140  THEN YK = 0
  60. 600  XDRAW KB AT XK,OY: XDRAW KB AT XK,YK
  61. 610 AC = AC +1: IF AC >AN  THEN AC = 1
  62. 620  XDRAW AB AT XA(AC),YA(AC):YA(AC) = YA(AC) +6: IF YA(AC) >148  THEN YA(AC) = 0
  63. 630  XDRAW AB AT XA(AC),YA(AC)
  64. 640 FU = FU -FC: GOSUB 770
  65. 650  GOTO 400
  66. 660  REM *----------------
  67. 670  REM * SUBROUTINES:
  68. 680  REM *----------------
  69. 690 XL = XS +11:YL = YS +3: XDRAW LA AT XL,YL: GOSUB 840: & 1
  70. 700 N = 0: IF  PEEK(234) = 118  THEN 760
  71. 710  FOR I = 1 TO AN: IF YA(I) >YL  THEN 740
  72. 720  IF YA(I) +9 <YL  THEN 740
  73. 730 N = N +1: GOSUB 830
  74. 740  NEXT I: IF N >0  THEN 760
  75. 750  XDRAW LA AT XL,YL: GOSUB 850: RETURN 
  76. 760  XDRAW LA AT XL,YL: GOSUB 790: RETURN 
  77. 770  IF FU <0  THEN FU = 0: GOSUB 780: POP : GOTO 900
  78. 780  VTAB 21: HTAB 7: INVERSE : PRINT FU;: NORMAL : PRINT " "
  79. 790  IF SC <0  THEN SC = 0
  80. 800  VTAB 21: HTAB 36: INVERSE : PRINT SC;: NORMAL : PRINT " ": RETURN 
  81. 810  GOSUB 820:YK =  INT( RND(1) *140):XK = 195: XDRAW KB AT XK,YK: RETURN 
  82. 820 MK =  INT( RND(1) *2):MK = ( -1) ^MK: RETURN 
  83. 830 SC = SC -20: GOSUB 790: & 3: RETURN 
  84. 840 FU = FU -10: GOSUB 770: RETURN 
  85. 850  XDRAW KB AT XK,YK: XDRAW 5 AT XK,YK: & 2,1: XDRAW 5 AT XK,YK: XDRAW 6 AT XK,YK: & 2,2: XDRAW 6 AT XK,YK: XDRAW 6 AT XK,YK +4: & 2,3: XDRAW 6 AT XK,YK +4
  86. 860 SC = SC +50: GOSUB 790: & 4: GOSUB 810: POKE  -16368,0: RETURN 
  87. 870  REM *----------------
  88. 880  REM * END OF GAME:
  89. 890  REM *----------------
  90. 900  HOME : TEXT : VTAB 5: HTAB 12: INVERSE : PRINT " END OF MISSION ": VTAB 10: HTAB 12: NORMAL : PRINT "YOUR SCORE: ";SC
  91. 910  VTAB 12: HTAB 12: PRINT "HIGH SCORE: ";HS
  92. 920  IF SC < = HS  THEN 940
  93. 930  VTAB 12: HTAB 12: CALL  -958: FLASH : PRINT "NEW HIGH SCORE!": NORMAL : & 4,1: & 4,1: & 4,1:HS = SC
  94. 940  VTAB 20: CALL  -958: & 3,1: PRINT "DO YOU WANT TO PLAY AGAIN? (Y/N) ";: GET A$: PRINT A$
  95. 950  IF A$ = "Y"  OR A$ =  CHR$(121)  THEN 250
  96. 960  IF A$ = "N"  OR A$ =  CHR$(110)  THEN 980
  97. 970  GOTO 940
  98. 980  TEXT : HOME : END 
  99. 990  HOME : VTAB 12: PRINT "WRONG DISK OR FILE(S) MISSING"
  100. 1000  VTAB 22: PRINT "<ESC> TO QUIT, <RETURN> TO START OVER";: GET Z$: IF Z$ < > CHR$(27) GOTO 110
  101. 1010  END