home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib29a.dsk / DECEMBER.1986 / FORMULA.NIBBLE.bas < prev    next >
BASIC Source File  |  2023-02-26  |  8KB  |  157 lines

  1. 10  REM  **********************
  2. 20  REM  *   FORMULA.NIBBLE   *
  3. 30  REM  *  BY COLIN FRENCH   *
  4. 40  REM  * COPYRIGHT (C) 1986 *
  5. 50  REM  * BY MICROSPARC, INC *
  6. 60  REM  * CONCORD, MA  01742 *
  7. 70  REM  **********************
  8. 80  ONERR  GOTO 1570
  9. 90  TEXT : HOME : PRINT  CHR$(21): IF  PEEK(104) = 12  THEN 110
  10. 100  POKE 104,12: POKE 3072,0: PRINT  CHR$(4)"RUN FORMULA.NIBBLE"
  11. 110  REM ---INITIALIZATION---
  12. 120  LOMEM: 35840:D$ =  CHR$(4)
  13. 130  PRINT D$"BLOAD TRK.SCREEN1": PRINT D$"BLOAD TRK.SCREEN2,A$4000"
  14. 140 P =  -16297: POKE P,0: POKE P -4,0: REM (SET HI-RES MIXED)
  15. 150  POKE P -3,0: POKE P -7,0: REM (DISPLAY SCREEN 1)
  16. 160 V = 22: GOSUB 1470: PRINT D$"BLOAD RACE.RECORDS,A$800": PRINT D$"BLOAD TRK.TABLES"
  17. 170  PRINT D$"BLOAD TRK.CURVE.DATA": PRINT D$"BLOAD TRK.ROUTINES"
  18. 180 TRK$(0) = "..MONACO":TRK$(1) = ".DETROIT":TRK$(2) = "MONTREAL"
  19. 190 SK$(0) = "..ROOKIE":SK$(1) = "CHAMPION"
  20. 200 EVT$(0) = "PRACTICE":EVT$(1) = "....RACE"
  21. 210 CTRL$(0) = "KEYBOARD":CTRL$(1) = "..PADDLE":CTRL$(2) = "JOYSTICK"
  22. 220  FOR N = 0 TO 2: FOR N2 = 0 TO 3: READ BLK(N,N2): NEXT N2,N
  23. 230  DATA  2,128,129,130,3,132,134,135,3,136,138,139
  24. 240 MES$(0) = "   (USE ARROWS & <RETURN> TO SELECT)":MES$(1) = "   (USE PADDLE AND BUTTON TO SELECT)":MES$(2) = "   (USE JOYSTICK & BUTTON TO SELECT)"
  25. 250 FRST = 1:DLY = 100:VA = 1:PP = 0:LC = 1
  26. 260  POKE 24579,1: REM (SOUND FLAG)
  27. 270 Z = 24597: POKE Z, ASC("A") +128: POKE Z +1, ASC("Z") +128: REM (ACCEL & DECEL KEYS)
  28. 280  POKE Z +2, ASC("J") +128: POKE Z +3, ASC("K") +128: POKE Z +4, ASC("L") +128: REM (STEERING KEYS)
  29. 290  REM ---INTRODUCTION---
  30. 300  HOME : VTAB 23: POKE  -16301,0: PRINT "    (PRESS KEY OR BUTTON FOR MENU)"
  31. 310  GOSUB 1420: IF ST  THEN 350
  32. 320  HOME :V = 22: GOSUB 1470: GOSUB 1420: IF ST  THEN 350
  33. 330  IF FRST  THEN 290
  34. 340  POKE  -16302,0: GOSUB 1420: IF   NOT (ST)  THEN 290
  35. 350  REM ---MAIN MENU---
  36. 360  TEXT : HOME :V = 4: GOSUB 1470: VTAB 9: HTAB 11: PRINT "START YOUR ENGINES!!": PRINT 
  37. 370  HTAB 11: PRINT "CIRCUIT....."TRK$(TC): HTAB 11: PRINT "SKILL......."SK$(SC): REM  5/7 PER.
  38. 380  HTAB 11: PRINT "EVENT......."EVT$(EC): HTAB 11: PRINT "# LAPS............."LC: REM  7/13 PER.
  39. 390  HTAB 11: PRINT "CONTROL....."CTRL$(CC): PRINT 
  40. 400  HTAB 11: PRINT "SEE THE RACE RECORDS": PRINT 
  41. 410  HTAB 11: PRINT "QUIT....QUIT....QUIT": VTAB 23: PRINT MES$(CC)
  42. 420 VA = 1: VTAB VA +8:VB = 0: POKE  -16368,0
  43. 430  HTAB 6: PRINT "    ": VTAB VA +8: HTAB 6: PRINT "--->";
  44. 440  IF CC = 0  THEN 450
  45. 450 K =  PEEK( -16384): IF K <128  THEN 490
  46. 460  POKE  -16368,0
  47. 470  IF K = 136  OR K = 139  THEN VB = VB -25: IF VB <0  THEN VB = 0
  48. 480  IF K = 149  OR K = 138  THEN VB = VB +25: IF VB >255  THEN VB = 255
  49. 490  IF K = 141  OR  PEEK( -16287) >127  THEN 510
  50. 500 VA =  INT(VB/25) +1: GOTO 430
  51. 510  IF  PEEK( -16287) >127  THEN 510
  52. 520  ON VA GOTO 800,430,540,570,590,630,710,430,750,430
  53. 530  HOME : END 
  54. 540  REM (TRACK SELECTION)
  55. 550 TC = TC +1: IF TC >2  THEN TC = 0
  56. 560  VTAB 11: HTAB 23: PRINT TRK$(TC): GOTO 430
  57. 570  REM (SKILL SELECTION)
  58. 580 SC =   NOT (SC): VTAB 12: HTAB 23: PRINT SK$(SC): GOTO 430
  59. 590  REM (EVENT SELECTION)
  60. 600 EC =   NOT (EC): VTAB 13: HTAB 23: PRINT EVT$(EC)
  61. 610  IF EC  THEN LC = 5: VTAB 14: HTAB 30: PRINT LC
  62. 620  GOTO 430
  63. 630  REM (# LAPS SELECTION)
  64. 640  VTAB 14: HTAB 11
  65. 650  IF   NOT (EC)  THEN 670
  66. 660  PRINT "RACE IS ALWAYS 5 LAPS";: FOR D = 1 TO 1200: NEXT : GOTO 690
  67. 670  PRINT "ENTER # LAPS (1-9) ";
  68. 680  GET Z$:Z =  VAL(Z$): IF Z >0  AND Z <10  THEN LC = Z
  69. 690  VTAB 14: HTAB 11: PRINT "# LAPS............."LC" ": REM  13 PER.
  70. 700  GOTO 430
  71. 710  REM (CONTROL SELECTION)
  72. 720 CC = CC +1: IF CC >2  THEN CC = 0
  73. 730  VTAB 15: HTAB 23: PRINT CTRL$(CC)
  74. 740  VTAB 23: PRINT MES$(0): VTAB VA +8: GOTO 430
  75. 750  REM (DISPLAY RACE RECORDS)
  76. 760  POKE  -16303,0: POKE  -16299,0
  77. 770  IF  PEEK( -16287) <128  AND  PEEK( -16384) <128  THEN 770
  78. 780  POKE  -16368,0: IF  PEEK( -16287) >127  THEN 780
  79. 790  POKE  -16300,0: GOTO 430
  80. 800  REM ---START EVENT---
  81. 810  PRINT : POKE 24580,LC: REM (# OF LAPS)
  82. 820  REM (SET SKILL FACTORS: TOP SPEED & CORNERING ABILITY)
  83. 830  IF SC = 0  THEN  POKE 24592,218: POKE 24595,5
  84. 840  IF SC = 1  THEN  POKE 24592,250: POKE 24595,5
  85. 850  REM (SET TYPE OF CONTROL TO USE)
  86. 860  POKE 24587,  NOT (CC)
  87. 870  REM (SET TRACK BLOCK FACTORS)
  88. 880  POKE 24624,BLK(TC,0): POKE 24625,BLK(TC,1)
  89. 890  POKE 24626,BLK(TC,2): POKE 24627,BLK(TC,3)
  90. 900  CALL 24704: REM (START GAME!)
  91. 910  IF  PEEK(24577) >0  THEN  TEXT : HOME : END 
  92. 920 FRST = 0: REM (FLAG SHOWS GAME PLAYED)
  93. 930  IF  PEEK( -16287) >127  THEN 930
  94. 940  IF  PEEK(24578) = 1  OR EC = 0  THEN 290
  95. 950  REM (GET PLAYER'S TIME)
  96. 960 P1 =  INT( PEEK(24584)/16):P2 =  PEEK(24584) -P1 *16
  97. 970 P3 =  INT( PEEK(24583)/16):P4 =  PEEK(24583) -P3 *16
  98. 980 P5 =  PEEK(24582)
  99. 990 PT$ =  STR$(P1) + STR$(P2) +":" + STR$(P3) + STR$(P4) +"." + STR$(P5)
  100. 1000  REM (CHECK IF RECORD)
  101. 1010  FOR L = 0 TO 2: GOSUB 1350: GOSUB 1400
  102. 1020  IF T$ = "00:00.0"  THEN 1040
  103. 1030  IF PT$ > = T$  THEN  NEXT L: GOTO 290
  104. 1040 LL = L:LADD = ADD
  105. 1050  HOME : VTAB 22: INVERSE : POKE  -16301,0
  106. 1060  PRINT " A NEW RECORD! ";: NORMAL 
  107. 1070  IF  PEEK(24579) = 1  THEN  FOR N = 1 TO 3: CALL 25638: NEXT : REM (SOUND)
  108. 1080  PRINT "  TYPE YOUR INITIALS ---"; CHR$(8); CHR$(8); CHR$(8);:N$ = ""
  109. 1090  GET Z$: IF Z$ =  CHR$(13)  THEN  PRINT : GOTO 1150
  110. 1100  IF Z$ =  CHR$(8)  AND N$ < >""  THEN 1130
  111. 1110  IF Z$ <" "  OR  LEN(N$) >2  THEN 1090
  112. 1120  PRINT Z$;:N$ = N$ +Z$: GOTO 1090
  113. 1130  PRINT Z$"-"Z$;: IF  LEN(N$) = 1  THEN N$ = "": GOTO 1090
  114. 1140 N$ =  LEFT$(N$, LEN(N$) -1): GOTO 1090
  115. 1150 PC$ =  LEFT$(N$ +"---",3): IF LL = 2  THEN 1220
  116. 1160  FOR L = 2 TO LL +1  STEP  -1
  117. 1170 L = L -1: GOSUB 1350: GOSUB 1380: GOSUB 1400
  118. 1180 L = L +1: GOSUB 1350
  119. 1190  FOR N = 0 TO 2: POKE ADD +N, ASC( MID$ (C$,N +1,1)) +128: NEXT 
  120. 1200  FOR N = 4 TO 10: POKE ADD +N, ASC( MID$ (T$,N -3,1)) +128: NEXT 
  121. 1210  NEXT L
  122. 1220  FOR N = 0 TO 2: POKE LADD +N, ASC( MID$ (PC$,N +1,1)) +128: NEXT 
  123. 1230  FOR N = 4 TO 10: POKE LADD +N, ASC( MID$ (PT$,N -3,1)) +128: NEXT 
  124. 1240  POKE  -16303,0: POKE  -16299,0: VTAB 20: PRINT 
  125. 1250  ONERR  GOTO 1270
  126. 1260  PRINT D$"VERIFY RACE.RECORDS": POKE 216,0: GOTO 1300
  127. 1270  TEXT : HOME : VTAB 10: PRINT "PLEASE PUT DISK WITH 'RACE.RECORDS'"
  128. 1280  PRINT "BACK IN DISK DRIVE & PRESS <RETURN> ";: GET Z$: PRINT 
  129. 1290  POKE  -16299,0: GOTO 1260
  130. 1300  PRINT D$"BSAVE RACE.RECORDS,A$800,L$400"
  131. 1310  IF  PEEK( -16287) <128  AND  PEEK( -16384) <128  THEN 1310
  132. 1320  POKE  -16368,0: IF  PEEK( -16287) >127  THEN 1320
  133. 1330  GOTO 350
  134. 1340  REM ---GET RACE RECORD INFO---
  135. 1350  REM (TEXT LINE ADDRESS)
  136. 1360 LN = TC *4 +L +10:L1 =  INT(LN/8):L2 = LN -L1 *8
  137. 1370 ADD = 2048 +L1 *40 +L2 *128 +SC *14 +14: RETURN 
  138. 1380  REM (GET INITIALS)
  139. 1390 C$ = "": FOR N = 0 TO 2:C$ = C$ + CHR$( PEEK(ADD +N) -128): NEXT : RETURN 
  140. 1400  REM (GET TIME)
  141. 1410 T$ = "": FOR N = 4 TO 10:T$ = T$ + CHR$( PEEK(ADD +N) -128): NEXT : RETURN 
  142. 1420  REM ---WAIT FOR KEYPRESS/BUTTON---
  143. 1430 ST = 0: FOR D = 1 TO DLY
  144. 1440  IF  PEEK( -16384) >127  THEN D = DLY:ST = 1: POKE  -16368,0
  145. 1450  IF  PEEK( -16287) >127  THEN D = DLY:ST = 1
  146. 1460  NEXT D: RETURN 
  147. 1470  REM ---DRAW FORMULA NIBBLE LOGO---
  148. 1480  VTAB V: HTAB 1: GOSUB 1530: PRINT " FORMULA NIBBLE ";: REM (16 DASHES)
  149. 1490  GOSUB 1550: VTAB V +1: HTAB 1: GOSUB 1550
  150. 1500  PRINT "  COPYRIGHT 1986 ";: GOSUB 1530
  151. 1510  VTAB V +2: HTAB 1: GOSUB 1530
  152. 1520  PRINT " BY MICROSPARC  ";: GOSUB 1550: VTAB 4: PRINT : RETURN : REM  16 -'S
  153. 1530  FOR N = 1 TO 6: PRINT " ";: INVERSE 
  154. 1540  PRINT " ";: NORMAL : NEXT : RETURN 
  155. 1550  FOR N = 1 TO 5: INVERSE : PRINT " ";: NORMAL 
  156. 1560  PRINT " ";: NEXT : INVERSE : PRINT " ";: NORMAL : RETURN 
  157. 1570  HOME : TEXT : VTAB 12: PRINT "ERROR " PEEK(222)" IN LINE " PEEK(218) +256 * PEEK(219): END