home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib35b.dsk / CITY.CENTURIAN.bas < prev    next >
BASIC Source File  |  2023-02-26  |  9KB  |  178 lines

  1. 10  REM *
  2. 20  REM * CITY.CENTURIAN
  3. 30  REM * BY JOHN ROMERO
  4. 40  REM * COPYRIGHT (C) 1988
  5. 50  REM * MICROSPARC,INC.
  6. 60  REM * CONCORD, MA 01742
  7. 70  REM *
  8. 80  HOME : PRINT  CHR$(21);:
  9. 90  ONERR  GOTO 1770
  10. 100  FOR I = 773 TO 777: READ KEY: POKE I,KEY: NEXT 
  11. 110  TEXT : HOME : GOSUB 1250
  12. 120 D$ =  CHR$(4)
  13. 130  IF   NOT RN%  THEN PF = 1: PRINT : PRINT D$"BLOADCC.OBJ": PRINT D$"BLOAD CCSHAPES": POKE 787, ASC("K") +128:RN% = 1:PF = 0
  14. 140  IF  LEN(NA$(1))  THEN 160
  15. 150 PF = 1: PRINT D$"OPEN SCORES": PRINT D$"READ SCORES": FOR I = 0 TO 9: INPUT S(I): INPUT NA$(I): INPUT L(I): NEXT : PRINT D$"CLOSE":PF = 0
  16. 160  POKE 783,1
  17. 170  POKE 230,32: CALL 62450
  18. 180 SP = 3:LV = 1:SM =  -1:MM = 0
  19. 190 LE = LV: IF LV >10  THEN LE = 10
  20. 200 LX = LV: IF LV >4  THEN LX = 4
  21. 210  GOSUB 690
  22. 220  GOSUB 990
  23. 230  GOSUB 740
  24. 240 GAME = 32912
  25. 250  POKE 768,19: POKE 769,70: POKE 770,0: CALL 32768
  26. 260  HOME 
  27. 270  GOSUB 800
  28. 280  INVERSE 
  29. 290  VTAB 7: HTAB 13: PRINT ":           :": HTAB 13: PRINT "    CITY     ": HTAB 13: PRINT "  CENTURIAN  ": HTAB 13: PRINT ":           :": NORMAL 
  30. 300  PRINT : HTAB 12: PRINT "BY JOHN ROMERO": HTAB 12: PRINT "COPYRIGHT(C)1988": HTAB 11: PRINT "BY MICROSPARC,INC."
  31. 310  PRINT : PRINT "( ) PLAY   ( ) SCORES ( ) CHANGE ( ) END"
  32. 320 H = 2
  33. 330  VTAB 16: HTAB H: GET A$: IF A$ = " "  THEN H = H +11: IF H >40  THEN H = 2
  34. 340  IF A$ < > CHR$(13)  THEN 330
  35. 350  IF H = 13  THEN  GOSUB 1760: GOTO 260
  36. 360  IF H = 24  THEN  GOSUB 810: GOTO 260
  37. 370  IF H = 35  THEN  HOME : VTAB 23: END 
  38. 380  HOME : VTAB 20
  39. 390  CALL  -3100: PRINT : PRINT "CONQUER AND YOU SHALL BE REWARDED!": FOR I = 1 TO 2000: NEXT : POKE  -16302,0
  40. 400  HOME 
  41. 410  GOSUB 760
  42. 420  POKE 230,32
  43. 430  POKE 771,1
  44. 440  FOR I = 0 TO 2: POKE 780 +I,0: NEXT 
  45. 450  POKE 772,SP *50 -49
  46. 460 SP = 3: POKE 779,1
  47. 470  VTAB 24: HTAB 1: CALL  -868: VTAB 23: HTAB 1: CALL  -868: POKE 34,0: CALL GAME
  48. 480 RCODE =  PEEK(778): IF RC = 2  THEN MM = MM +2:LV = LV +1: VTAB 23: HTAB 1: PRINT "5 YEARS LATER...";: IF LV - INT(LV/5) *5 = 0  THEN SP = SP +1: VTAB 24: HTAB 1: INVERSE : PRINT "FREE SHIP AWARDED TO YOU!";: NORMAL : VTAB 23
  49. 490  POKE 771,LV
  50. 500  POKE 34,22
  51. 510  IF RCODE = 1  THEN 650
  52. 520  IF RCODE = 3  THEN 1530
  53. 530  IF RCODE = 4  THEN 1510
  54. 540  GOSUB 760
  55. 550 LE =  PEEK(779):LE = LE +1: IF LE >9  THEN LE = 9
  56. 560  POKE 779,LE
  57. 570  IF LV - INT(LV/2) *2 = 0  AND LV >4  THEN SM = SM +1: HTAB 17: VTAB 22 *(SM <10) +1: PRINT "THE ALIENS ARE BUILDING!";: IF SM >9  THEN SM = 9: HTAB 17: VTAB 23: PRINT "CONSTRUCTION COMPLETED!";
  58. 580 LX = LV: IF LV >4  THEN LX = 4
  59. 590  CALL 784
  60. 600  GOSUB 740
  61. 610  GOSUB 690
  62. 620  GOSUB 990
  63. 630  POKE 768,19: POKE 769,70: POKE 770,0: CALL 32768
  64. 640  GOTO 470
  65. 650 SP = SP -1: IF SP =  -1  THEN  VTAB 23: HTAB 1: CALL  -868: INVERSE : PRINT "GAME OVER";: NORMAL : INPUT ", THE MOON IS DOOMED!";A$: GOTO 1600
  66. 660  GOSUB 760: POKE 768,19: POKE 769,70: POKE 770,0: CALL 32768
  67. 670  GOTO 470
  68. 680  REM  ** DRAW MNTS. **
  69. 690 HC =  INT( RND(1) *6 +1): IF HC = 0  OR HC = 4  THEN 690
  70. 700  HCOLOR= HC: HPLOT 0,145
  71. 710  FOR I = 5 TO 274  STEP 5:MY =  INT( RND(1) *10 +145): HPLOT  TO I,MY: NEXT 
  72. 720  HPLOT  TO 279,145: HPLOT 0,155 TO 279,155: RETURN 
  73. 730  REM  ** STARS **
  74. 740  HCOLOR= 3: FOR I = 0 TO 49:SX =  INT( RND(1) *255):SY =  INT( RND(1) *140): HPLOT SX,SY: POKE 25542 +I,SX: POKE 25592 +I,SY: NEXT : RETURN 
  75. 750  REM  ** PRINT STATS **
  76. 760  VTAB 21: HTAB 1: PRINT "SHIPS :";: HTAB 20: PRINT "SCORE:": PRINT "CITIES:";: HTAB 20: PRINT "LEVEL:"
  77. 770  VTAB 21: HTAB 8: PRINT  SPC( SP <10);SP" ": HTAB 26: PRINT  SPC( LV <10);LV
  78. 780  RETURN 
  79. 790  REM  ** INST. LINE **
  80. 800  INVERSE : VTAB 17: PRINT "SELECT WITH SPACEBAR, THEN PRESS RETURN ": NORMAL : RETURN 
  81. 810  HOME : GOSUB 800: VTAB 16: PRINT "SELECT SKILL LEVEL:1.2.3.4.5.6";:H = 24
  82. 820  HTAB H: GET A$: IF A$ = " "  THEN H = H +2: IF H >31  THEN H = 20
  83. 830  IF A$ < > CHR$(13)  THEN 820
  84. 840 SP = (H -20)/2 +1
  85. 850  VTAB 16: HTAB 1: CALL  -868: PRINT "SOUND: ( ) ON  ( ) OFF";:H = 9
  86. 860  HTAB H: GET A$: IF A$ = " "  THEN H = H +8: IF H >17  THEN H = 9
  87. 870  IF A$ < > CHR$(13)  THEN 860
  88. 880  IF H = 9  THEN  POKE 783,1
  89. 890  IF H = 17  THEN  POKE 783,0
  90. 900  VTAB 16: HTAB 1: CALL  -868: PRINT "CONTROL: ( ) KEYBOARD OR ( ) JOYSTICK?";:H = 11
  91. 910  HTAB H: GET A$: IF A$ = " "  THEN H = H +16: IF H >27  THEN H = 11
  92. 920  IF A$ < > CHR$(13)  THEN 910
  93. 930  IF H = 11  THEN A$ = "K"
  94. 940  IF H = 27  THEN A$ = "J"
  95. 950  POKE 787, ASC(A$) +128
  96. 960  IF H = 27  THEN  RETURN 
  97. 970  GOTO 1370
  98. 980  REM  ** CREATE MONSTERS
  99. 990  FOR I = 0 TO 19
  100. 1000  POKE 25192 +I,0: POKE 25462 +I,0
  101. 1010  POKE 25683 +I,0: POKE 25743 +I,0
  102. 1020  POKE 25744 +I,0
  103. 1030  IF I >MM  THEN 1150
  104. 1040 MX =  INT( RND(1) *255):MY = 15
  105. 1050 XV = 1: IF  INT( RND(1) *2 +1) = 2  THEN XV = 255
  106. 1060 YV =  INT( RND(1) *5 +1): IF  INT( RND(1) *2 +1) = 2  THEN YV = 256 -YV
  107. 1070 SH =  INT( RND(1) *LX) +2
  108. 1080  POKE 25090 +I,MX: POKE 25110 +I,MY
  109. 1090  POKE 25132 +I,XV: POKE 25152 +I,YV
  110. 1100  POKE 25172 +I,SH: POKE 25192 +I,1
  111. 1110 TI =  INT( RND(1) *50): POKE 25212 +I,TI: POKE 25232 +I,TI
  112. 1120 TM =  INT( RND(1) *20): POKE 25252 +I,TM: POKE 25272 +I,TM
  113. 1130  IF MX >39  THEN 1150
  114. 1140  POKE 768,MX: POKE 769,MY: POKE 770,SH: CALL 32768
  115. 1150  IF I <10  THEN  POKE 25352 +I,0: POKE 25652 +I,0
  116. 1160  IF I <(LE)  THEN CX =  INT( RND(1) *255): POKE 25292 +I,CX: POKE 25352 +I,1: IF CX <39  THEN  POKE 768,CX: POKE 769,134: POKE 770,6: CALL 32768
  117. 1170  NEXT 
  118. 1180  IF SM =  -1  THEN  FOR I = 0 TO 9: POKE 25362 +I,0: POKE 25332 +I,0: NEXT : RETURN 
  119. 1190  FOR I = 0 TO SM: POKE 25332 +I,0: POKE 25312 +I, RND(1) *255
  120. 1200  POKE 25322, RND(1) *255: POKE 25362 +I,1
  121. 1210  IF  PEEK(25312 +I) <40  THEN  POKE 768, PEEK(25312 +I): POKE 769,0: POKE 770,7: CALL 32768: POKE 769,136: POKE 770,8: CALL 32768
  122. 1220  NEXT : IF SM <9  THEN  FOR I = SM +1 TO 9: POKE 25362 +I,0: NEXT 
  123. 1230  RETURN 
  124. 1240  END 
  125. 1250  INVERSE : PRINT "PLEASE WAIT";: NORMAL : PRINT "...";
  126. 1260  IF RM%  THEN  RETURN 
  127. 1270 RM% = 1
  128. 1280 LAC = 24576:CA = 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 LAC +CA,BYTE +(4 *K):CA = CA +1: NEXT K,J,I,H
  129. 1290  POKE LAC +CA,255:CA = CA +1: IF CA <256  THEN 1290
  130. 1300 BYTE = 0: GOSUB 1330:BYTE = 40: GOSUB 1330:BYTE = 80: GOSUB 1330
  131. 1310  POKE LAC +CA,255:CA = CA +1: IF CA <512  THEN 1310
  132. 1320 L = 16640: GOTO 1350
  133. 1330  FOR I = 0 TO 3: FOR J = 0 TO 1: FOR K = 0 TO 7: POKE LAC +CA,BYTE:CA = CA +1: NEXT :BYTE = BYTE +128: NEXT :BYTE = BYTE -256: NEXT : RETURN 
  134. 1340  DATA  193,218,136,149,160
  135. 1350  FOR I = 1 TO 40:K = 1: FOR J = 1 TO 7: POKE L,K:L = L +1:K = K *2: NEXT : NEXT 
  136. 1360 L = 16896: FOR I = 0 TO 39: FOR J = 1 TO 7: POKE L,I:L = L +1: NEXT : NEXT : RETURN 
  137. 1370  HOME : GOSUB 800: VTAB 11: HTAB 1: PRINT "DEFINE CONTROLS, <RETURN> FOR THE SAME:": PRINT "UP   :": PRINT "DOWN :": PRINT "LEFT :": PRINT "RIGHT:": PRINT "FIRE :": VTAB 17: HTAB 1: PRINT  SPC( 40);:
  138. 1380  FOR I = 0 TO 4:CHAR =  PEEK(773 +I):A$ =  CHR$(CHAR): IF CHAR = 136  THEN A$ = "<-"
  139. 1390  IF CHAR = 138  THEN A$ = "DA"
  140. 1400  IF CHAR = 139  THEN A$ = "UA"
  141. 1410  IF CHAR = 149  THEN A$ = "->"
  142. 1420  VTAB 12 +I: HTAB 7: PRINT A$: NEXT 
  143. 1430  FOR I = 0 TO 4: VTAB 12 +I: HTAB 7: GET A$: IF A$ =  CHR$(13)  THEN 1490
  144. 1440  POKE 773 +I, ASC(A$) +128: IF A$ =  CHR$(8)  THEN A$ = "<-"
  145. 1450  IF A$ =  CHR$(10)  THEN A$ = "DA"
  146. 1460  IF A$ =  CHR$(11)  THEN A$ = "UA"
  147. 1470  IF A$ =  CHR$(21)  THEN A$ = "->"
  148. 1480  PRINT A$" "
  149. 1490  NEXT 
  150. 1500  RETURN 
  151. 1510  VTAB 21: HTAB 1: CALL  -958: PRINT "BETTER LUCK NEXT TIME": INPUT "PRESS RETURN...";A$
  152. 1520  GOTO 110
  153. 1530  VTAB 23: HTAB 1: PRINT "THERE ARE NO MORE CITIES LEFT ON THE    MOON. YOU CAN'T REFUEL:";: INVERSE : PRINT "GAME OVER!";: NORMAL : INPUT "";A$
  154. 1540  GOTO 1600
  155. 1550  HOME : PRINT "SCORE:";: HTAB 10: PRINT "WHODUNNIT:";: HTAB 26: PRINT "LEVEL:": PRINT "------";: HTAB 10: PRINT "----------";: HTAB 26: PRINT "-----"
  156. 1560  FOR I = 0 TO 9:S$ =  STR$(S(I)): IF  LEN(S$) = 6  THEN 1580
  157. 1570  FOR J = 0 TO 5 - LEN(S$): PRINT 0;: NEXT 
  158. 1580  PRINT S(I);: HTAB 10: PRINT NA$(I);: HTAB 28: PRINT  SPC( L(I) <10);L(I): NEXT 
  159. 1590  RETURN 
  160. 1600 NUM = 0: FOR I = 0 TO 5:NUM = NUM +(( PEEK(I +1642) -176) *10 ^(5 -I)): NEXT 
  161. 1610  TEXT : HOME 
  162. 1620 II = 0
  163. 1630  FOR I = 0 TO 9: IF NUM >S(I)  THEN II = I +1:I = 9
  164. 1640  NEXT : IF   NOT II  THEN  GOSUB 1550: PRINT : PRINT "YOU HAVE NOT FOUGHT HARD ENOUGH...";: INPUT "";A$: GOTO 110
  165. 1650 II = II -1
  166. 1660  FOR I = 8 TO II  STEP  -1:S(I +1) = S(I):NA$(I +1) = NA$(I):L(I +1) = L(I): NEXT 
  167. 1670 NA$(II) = "": GOSUB 1550
  168. 1680  VTAB II +3: HTAB 1 +(NUM <100000) +(NUM <10000) +(NUM <1000) +(NUM <100) +(NUM <10): PRINT NUM;
  169. 1690 S(II) = NUM:L(II) = LV: HTAB 10: PRINT  SPC( 28);: HTAB 28: PRINT  SPC( LV <10);LV;: HTAB 26: PRINT "<";: HTAB 9: PRINT ">";
  170. 1700  HTAB 10: INPUT "";NA$(II): VTAB II +3: HTAB 28: PRINT  SPC( L(II) <10);L(II);
  171. 1710  IF  LEN(NA$(II)) >16  THEN 1690
  172. 1720  VTAB 14: HTAB 1: PRINT "YOU HAVE FOUGHT WELL. ARE YOU SATISFIED WITH YOUR ENTRY?";: GET A$: IF A$ < >"Y"  AND A$ < >"N"  THEN 1720
  173. 1730  IF A$ = "N"  THEN  VTAB II +3: GOTO 1700
  174. 1740  PRINT : PRINT D$"DELETESCORES": PRINT D$"OPENSCORES": PRINT D$"WRITESCORES": FOR I = 0 TO 9: PRINT S(I): PRINT NA$(I): PRINT L(I): NEXT : PRINT D$"CLOSE"
  175. 1750  GOTO 110
  176. 1760  HOME : GOSUB 1550: PRINT : INPUT "THE TOP 10. HIT RETURN:";A$: HOME : RETURN 
  177. 1770  HOME : VTAB 23: IF PF = 1  THEN  PRINT "ERROR LOADING FILES...": PRINT "THE FILES SCORES, CC.OBJ AND CCSHAPES": PRINT "MUST BE ON THIS DISK": END 
  178. 1780  PRINT "ERROR "; PEEK(222): PRINT "IN LINE "; PEEK(218) +256 * PEEK(219): END