home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib33a.dsk / DECEMBER.1987 / MAJOR.MAYHEM.bas < prev    next >
BASIC Source File  |  2023-02-26  |  11KB  |  149 lines

  1. 10  REM  **********************
  2. 20  REM  * MAJOR.MAYHEM       *
  3. 30  REM  * BY JOHN ROMERO     *
  4. 40  REM  * COPYRIGHT (C) 1987 *
  5. 50  REM  * BY MICROSPARC, INC *
  6. 60  REM  * CONCORD, MA  01742 *
  7. 70  REM  **********************
  8. 80  IF  PEEK(104) < >68  THEN  POKE 104,68: POKE 17408,0: HOME : PRINT "RELOCATING THE PROGRAM": PRINT  CHR$(4)"RUNMAJOR.MAYHEM"
  9. 90  LOMEM: 25088
  10. 100  TEXT : HOME : PRINT "MAJOR MAYHEM": PRINT "BY JOHN ROMERO": PRINT "COPYRIGHT 1987 BY MICROSPARC, INC.": VTAB 12: PRINT "MAKE SURE THE CAPS LOCK KEY IS DOWN": DIM S(18),N$(18),L(18)
  11. 110  GOSUB 1230: GOTO 1300
  12. 120  POKE CT,1: POKE 230,32: CALL 62450: HGR :TT = 151:CN = 203
  13. 130  POKE  -16368,0
  14. 140 LV = 0
  15. 150  FOR I = 0 TO 4: READ Y%(I): NEXT : DATA  22,53,84,115,146: FOR I = 0 TO 4: READ Y1%(I): NEXT : DATA 20,51,82,113,144
  16. 160  FOR I = 0 TO 3: READ KEY: POKE 771 +I,KEY: NEXT : DATA 136,149,193,218,160: READ KEY: POKE 784,KEY
  17. 170  FOR I = 0 TO 9: READ H%(I),H1%(I): NEXT : DATA 1,1,1,0,1,2,1,3,5,5,5,6,6,3,5,2,2,3,5,0
  18. 180  GOTO 350
  19. 190  FOR I = 0 TO 155  STEP 31
  20. 200  HCOLOR= H%(HC): HPLOT 0,I +28 TO 279,I +28: HPLOT 0,I +30 TO 279,I +30: HCOLOR= H1%(HC): HPLOT 0,I +29 TO 279,I +29: NEXT 
  21. 210  FOR I = 62 TO 155  STEP 62: POKE XX,0: POKE YY,I: POKE SH,2: CALL 32768: NEXT 
  22. 220  GOTO 1060
  23. 230  VTAB 24: HTAB 1: IF (LV +1) - INT((LV +1)/5) *5 = 0  THEN  POKE 785, PEEK(785) +( PEEK(785) <9): INVERSE : PRINT "XTRA MAJOR";: NORMAL 
  24. 240  GOSUB 190: FOR I = 0 TO 9
  25. 250 BX =  RND(1) *119:BY = Y%( RND(1) *5):BS =  RND(1) *1 +3:BX =  INT(BX): IF BX = 39  OR BX = 79  THEN 250
  26. 260  POKE 36870 +I,BX: POKE 36880 +I,BY: POKE 36900 +I,BS: POKE 36890 +I,1: NEXT : PRINT "ON YOUR MARK...";
  27. 270  FOR I = 0 TO 9: FOR J = I +1 TO 9: IF  PEEK(36870 +I) =  PEEK(36870 +J)  AND  PEEK(36880 +I) =  PEEK(36880 +J)  THEN  POKE 36870 +J,118 - PEEK(36870 +J)
  28. 280  NEXT J,I: PRINT "GET SET...";
  29. 290  FOR I = 0 TO 19:SX =  RND(1) *118:SY = Y1%( RND(1) *5):SA = 0: IF I < = LV *2  THEN SA = 1
  30. 300 UD =  RND(1) *20 +1:LF =  RND(1) *60 +1
  31. 310  POKE 36934 +I,SX: POKE 36954 +I,SY: POKE 36974 +I,SA: POKE 37014 +I,255: POKE 36994 +I,1
  32. 320  POKE 37054 +I,LF: POKE 37034 +I,LF: POKE 37094 +I,UD: POKE 37074 +I,UD
  33. 330  NEXT : PRINT "GO!";: IF LV >3  THEN  POKE 33090,LV
  34. 340  RETURN 
  35. 350  HOME : VTAB 21: HTAB 13: INVERSE : PRINT ":              :": HTAB 13: PRINT "  MAJOR MAYHEM  ": HTAB 13: PRINT ":              :": NORMAL : FOR I = 1 TO 2000: NEXT : HOME : REM  14/14 SPACES
  36. 360  VTAB 21: HTAB 1: PRINT "DESIGNED/PROGRAMMED BY JOHN ROMERO": FOR I = 1 TO 1500: NEXT :HC = 0: GOSUB 190
  37. 370  INVERSE : PRINT "SELECT WITH SPACEBAR, RETURN TO CHOOSE:": NORMAL 
  38. 380  PRINT "( ) PLAY GAME  ( ) SEE SCORES ( ) FIX";
  39. 390  POKE 33090,3
  40. 400 H = 2: POKE 785,3: POKE 786,LV: POKE 787,0: FOR I = 788 TO 790: POKE I,0: NEXT 
  41. 410  VTAB 23: HTAB H: GET A$: IF A$ = " "  THEN H = H +15: IF H >38  THEN H = 2
  42. 420  IF A$ < > CHR$(13)  THEN 410
  43. 430  IF H = 2  THEN 460
  44. 440  IF H = 32  THEN  GOSUB 910: VTAB 23: HTAB 1: GOTO 380
  45. 450  GOTO 1140
  46. 460  HOME : VTAB 21: HTAB 1: PRINT "MAJORS :      ENERGY BALLS:": PRINT "LEVEL  :      SCORE:": REM  6/6 SPACES
  47. 470  VTAB 23:A$ = "MAJOR MAYHEM": HTAB 20 - LEN(A$)/2: PRINT A$;
  48. 480  TEXT : POKE 230,32: CALL 62450: HGR : GOSUB 230: CALL 32942
  49. 490  POKE XX,18: POKE YY,137: POKE SH,0
  50. 500  CALL 32768: FOR J = 1 TO 500: NEXT : CALL 32768: FOR J = 1 TO 500: NEXT : IF  PEEK( -16384) <128  AND  PEEK(49249) <128  THEN 500
  51. 510  POKE KO,CN: POKE WA,TT
  52. 520  IF  PEEK(49249) >127  THEN 520
  53. 530  VTAB 24: HTAB 1: CALL  -868
  54. 540  CALL 781: POKE  -16368,0
  55. 550 R =  PEEK(RC): IF R = 3  THEN 600
  56. 560  POKE XX,0: POKE YY,13: POKE SH,1: CALL 32768
  57. 570  IF R = 1  THEN  VTAB 21: HTAB 1: CALL  -868: INVERSE : PRINT "YOU CAN'T MAKE IT, NOT ENOUGH ENERGY!": NORMAL : VTAB 23: CALL  -868: HTAB 15: INVERSE : PRINT "GAME OVER!";: GOTO 640
  58. 580  IF R = 4  THEN  VTAB 24: HTAB 1: CALL  -868: INVERSE : PRINT "QUIT COMMAND--WANT TO PLAY AGAIN?";: NORMAL : GET A$: ON A$ = "Y" GOTO 640: HOME : TEXT : END 
  59. 590  IF R = 2  THEN  VTAB 24: HTAB 1: PRINT "YOU MADE IT! GET READY MAJOR...";: GOTO 820
  60. 600  IF   NOT  PEEK(785)  THEN  VTAB 21: HTAB 1: CALL  -868: INVERSE : PRINT "YOU HAVE GOTTEN YOUR LAST SPIDER BITE!": NORMAL : VTAB 23: CALL  -868: HTAB 15: INVERSE : PRINT "GAME OVER!";: GOTO 640
  61. 610  CALL 32768: CALL 791: FOR I = 1 TO 100: NEXT : CALL 32768: IF  PEEK( -16384) <128  AND  PEEK(49249) <128  THEN 610
  62. 620  IF  PEEK(49249) >127  THEN 620
  63. 630  GOTO 540
  64. 640 NUM = 0: FOR I = 0 TO 5:NUM = NUM +(( PEEK(I +1764) -176) *10 ^(5 -I)): NEXT 
  65. 650 FI = (3 *( INT(TT/50) +1)) -2
  66. 660  IF NUM >S(FI)  THEN S(FI +2) = S(FI +1):S(FI +1) = S(FI):S(FI) = NUM:L(FI +2) = L(FI +1):L(FI +1) = L(FI):L(FI) = LV +1:N$(FI +2) = N$(FI +1):N$(FI +1) = N$(FI):N$(FI) = "": GOTO 710
  67. 670  IF NUM >S(FI +1)  THEN S(FI +2) = S(FI +1):S(FI +1) = NUM:L(FI +2) = L(FI +1):L(FI +1) = LV +1:N$(FI +2) = N$(FI +1):N$(FI +1) = "": GOTO 710
  68. 680  IF NUM >S(FI +2)  THEN S(FI +2) = NUM:L(FI +2) = LV +1:N$(FI +2) = "": GOTO 710
  69. 690  VTAB 23: INVERSE : PRINT "DO YOU WANT TO PLAY AGAIN?";: NORMAL : GET Z$: IF Z$ < >"Y"  THEN  END 
  70. 700  HOME : GOTO 810
  71. 710  TEXT : HOME : PRINT "VERY GOOD!  TYPE YOUR NAME IN:": FOR I = 1 TO 40: PRINT "-";: NEXT 
  72. 720  VTAB 2: HTAB 1: INVERSE : PRINT "SPEED";: HTAB 10: PRINT "SCORE";: HTAB 18: PRINT "WHODUNNIT";: HTAB 34: PRINT "LEVEL": NORMAL 
  73. 730  FOR I = FI TO FI +2: PRINT  INT(TT/50) +1; SPC( 8);"000000";: HTAB 16 - LEN( STR$(S(I))): PRINT S(I);: REM  6 ZEROS
  74. 740  HTAB 18: PRINT N$(I);: HTAB 35: PRINT L(I): IF N$(I) = ""  THEN VT = I -FI +3
  75. 750  NEXT 
  76. 760  VTAB VT: HTAB 17: CALL  -868: PRINT ">" SPC( 16)"<"LV +1;: HTAB 18: GOSUB 1400:N$(FI +VT -3) = N$
  77. 770  VTAB VT: HTAB 35: PRINT LV +1
  78. 780  PRINT D$"OPENMMSCORES": PRINT D$"CLOSEMMSCORES": PRINT D$"DELETEMMSCORES": PRINT D$"OPENMMSCORES": PRINT D$"WRITEMMSCORES"
  79. 790  FOR I = 1 TO 18: PRINT S(I): PRINT N$(I): PRINT L(I): NEXT : PRINT D$"CLOSE"
  80. 800  VTAB 23: INVERSE : PRINT "DO YOU WANT TO PLAY AGAIN?";: NORMAL : GET Z$: IF Z$ < >"Y"  THEN  END 
  81. 810 LV = 0: POKE 230,32: CALL 62450: HGR : GOTO 350
  82. 820 HC = HC +1: IF HC = 10  THEN HC = 0
  83. 830 LV = LV +1
  84. 840  POKE YY,15: POKE SH,5: CALL 32768: POKE SH,1: CALL 32768: FOR I = 1 TO 20: POKE TN, RND(1) *10 +1: POKE LN,30: CALL S%: NEXT 
  85. 850  FOR I = 14 TO 0  STEP  -1: POKE YY,I +1: CALL 32768: POKE SH,5: IF I/2 < > INT(I/2)  THEN  POKE SH,6
  86. 860  POKE YY,I: CALL 32768: FOR J = 1 TO 25: NEXT : POKE TN, RND(1) *10 +1: POKE LN,10: CALL S%: NEXT 
  87. 870  CALL 32768: FOR J = 1 TO 50: NEXT : POKE YY,255: CALL 32768: FOR I = 1 TO 50: NEXT 
  88. 880  FOR I = 254 TO 230  STEP  -1: POKE YY,I +1: CALL 32768: POKE SH,5: IF I/2 < > INT(I/2)  THEN  POKE SH,6
  89. 890  POKE YY,I: CALL 32768: FOR J = 1 TO 50: NEXT J,I
  90. 900  GOTO 460
  91. 910  VTAB 23: HTAB 1: CALL  -868: PRINT "LEVEL OF SPEED: 1..2..3..4..5..6";:H = 26
  92. 920  VTAB 23: HTAB H: GET A$: IF A$ = " "  THEN H = H +3: IF H >32  THEN H = 17
  93. 930  IF A$ < > CHR$(13)  THEN 920
  94. 940 TT = (H -14)/3:TT = TT *50 -49: POKE WA,TT
  95. 950  VTAB 23: HTAB 1: CALL  -868: PRINT "CONTROL: ( ) KEYBOARD OR ( ) JOYSTICK?";:H = 11
  96. 960  VTAB 23: HTAB H: GET A$: IF A$ = " "  THEN H = H +16: IF H >27  THEN H = 11
  97. 970  IF A$ < > CHR$(13)  THEN 960
  98. 980  IF H = 11  THEN CN = 203: GOTO 1000
  99. 990 CN = 202
  100. 1000  VTAB 23: HTAB 1: CALL  -868: PRINT "SOUND: ( ) ON  ( ) OFF";:H = 9
  101. 1010  VTAB 23: HTAB H: GET A$: IF A$ = " "  THEN H = H +8: IF H >17  THEN H = 9
  102. 1020  IF A$ < > CHR$(13)  THEN 1010
  103. 1030  IF H = 9  THEN  POKE CT,1: GOTO 1050
  104. 1040  POKE CT,0
  105. 1050  RETURN 
  106. 1060  POKE YY,160: POKE SH,5: CALL 32768
  107. 1070  FOR I = 157 TO 15  STEP  -3: POKE YY,I +3: CALL 32768: POKE SH,5: IF I/2 < > INT(I/2)  THEN  POKE SH,6
  108. 1080  POKE YY,I: CALL 32768: POKE TN, RND(1) *20 +1: POKE LN,14: CALL S%: FOR J = 1 TO 25: NEXT J,I
  109. 1090  CALL 32768
  110. 1100  POKE YY,13: CALL 32768
  111. 1110  FOR I = 1 TO 20: POKE SH,5: IF I/2 < > INT(I/2)  THEN  POKE SH,6
  112. 1120  CALL 32768: POKE TN, RND(1) *30 +1: POKE LN,12: CALL S%: FOR J = 1 TO 40: NEXT J,I
  113. 1130  CALL 32768: POKE YY,15: CALL 32768: FOR I = 20 TO 1  STEP  -1: POKE TN,I: POKE LN,I: CALL S%: NEXT : RETURN 
  114. 1140  TEXT : HOME : PRINT "MAJOR MAYHEM'S BEST PLAYERS:": FOR I = 1 TO 40: PRINT "-";: NEXT 
  115. 1150  POKE 34,2: VTAB 2: HTAB 1: INVERSE : PRINT "SPEED";: HTAB 9: PRINT "SCORE";: HTAB 18: PRINT "WHODUNNIT";: HTAB 33: PRINT "LEVEL": NORMAL 
  116. 1160  FOR I = 1 TO 18: PRINT 1 + INT((I -1)/3); SPC( 7);:S = S(I): PRINT "000000";: HTAB 14 - LEN( STR$(S)) +1: PRINT S;: REM  6 ZEROS
  117. 1170  HTAB 18: PRINT N$(I);: HTAB 35: PRINT L(I): IF I/3 =  INT(I/3)  THEN  FOR J = 1 TO 40: PRINT "-";: NEXT 
  118. 1180  IF  PEEK(37) >16  THEN  PRINT : PRINT "PRESS RETURN FOR MORE...";: GET A$: HOME 
  119. 1190  NEXT : POKE 34,0
  120. 1200  PRINT : PRINT "THAT'S ALL--PRESS RETURN";: GET A$: HOME : CALL  -3100
  121. 1210  VTAB 21: HTAB 1: PRINT "PROGRAMMED BY JOHN ROMERO"
  122. 1220  GOTO 370
  123. 1230  PRINT "ONE MOMENT PLEASE..."
  124. 1240 LOC = 24576:CU = 0: FOR H = 0 TO 2:BYTE = 31: FOR I = 0 TO 3:BYTE = BYTE +1: FOR J = 0 TO 1: FOR K = 0 TO 7: POKE LOC +CU,BYTE +(4 *K):CU = CU +1: NEXT : NEXT : NEXT : NEXT 
  125. 1250  POKE LOC +CU,255:CU = CU +1: IF CU <256  THEN 1250
  126. 1260 BYTE = 0: GOSUB 1290:BYTE = 40: GOSUB 1290:BYTE = 80: GOSUB 1290
  127. 1270  POKE LOC +CU,255:CU = CU +1: IF CU <512  THEN 1270
  128. 1280  RETURN 
  129. 1290  FOR I = 0 TO 3: FOR J = 0 TO 1: FOR K = 0 TO 7: POKE LOC +CU,BYTE:CU = CU +1: NEXT :BYTE = BYTE +128: NEXT :BYTE = BYTE -256: NEXT : RETURN 
  130. 1300 D$ =  CHR$(4): ONERR  GOTO 1440
  131. 1310  PRINT D$"BLOADMMSHAPES": PRINT D$"BLOADMAYHEM.CODE"
  132. 1320  ONERR  GOTO 1340
  133. 1330  PRINT D$"VERIFYMMSCORES": POKE 216,0: GOTO 1350
  134. 1340  PRINT D$"OPENMMSCORES": PRINT D$"WRITEMMSCORES": FOR I = 1 TO 18:S(I) = 0:N$(I) = "JOHN ROMERO":L(I) = 1: PRINT S(I): PRINT N$(I): PRINT L(I): NEXT : PRINT D$"CLOSE": POKE 216,0: GOTO 1360
  135. 1350  PRINT D$"OPENMMSCORES": PRINT D$"READMMSCORES": FOR I = 1 TO 18: INPUT S(I): INPUT N$(I): INPUT L(I): NEXT : PRINT D$"CLOSE"
  136. 1360 XX = 768:YY = XX +1:SH = YY +1:KL = SH +1:KR = KL +1:KU = KR +1:KD = KU +1:KO = KD +1:CTRLS = KO +1:RCODE = CTRLS +1
  137. 1370 TN = RCODE +1:LN = TN +1:S% =  -32619
  138. 1380 WA = LN +1
  139. 1390  GOTO 120
  140. 1400 N$ = ""
  141. 1410  GET Z$: IF Z$ =  CHR$(13)  AND  LEN(N$) GOTO 1430
  142. 1420  ON Z$ <" " GOTO 1410:N$ = N$ +Z$: PRINT Z$;: IF  LEN(N$) <16 GOTO 1410
  143. 1430  RETURN 
  144. 1440 E =  PEEK(222):EL =  PEEK(218) +256 * PEEK(219): CALL  -3288: POKE 216,0
  145. 1450  HOME : VTAB 12
  146. 1460  IF E = 6  OR E = 7  THEN  PRINT "MMSHAPES FILE NOT ON THIS DISK": GOTO 1490
  147. 1470  IF E = 8  THEN  PRINT "I/O ERROR--CHECK DRIVE DOOR": GOTO 1490
  148. 1480  PRINT "ERROR "E" IN LINE "EL: END 
  149. 1490  VTAB 21: PRINT "RETURN TO TRY AGAIN, ESCAPE TO QUIT";: GET Z$: PRINT : ON Z$ < > CHR$(27) GOTO 1300: END