home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nibble Magazine
/
nib30b.dsk
/
STARLASER.bas
< prev
next >
Wrap
BASIC Source File
|
2023-02-26
|
5KB
|
101 lines
10 REM **********************
20 REM * *
30 REM * STARLASER *
40 REM * BY SCOTT ZIMMERMAN *
50 REM * COPYRIGHT (C) 1987 *
60 REM * BY MICROSPARC, INC *
70 REM * CONCORD, MA 01742 *
80 REM * *
90 REM **********************
100 REM * INTRODUCTION:
110 ONERR GOTO 990
120 PRINT CHR$(4)"VERIFY STARLASER.SNDS": PRINT CHR$(4)"VERIFY DUO": PRINT CHR$(4)"VERIFY STARLASER.SHPS": POKE 216,0
130 HI = 33792: HIMEM: HI: TEXT : HOME
140 VTAB 5: HTAB 15: INVERSE : PRINT " STARLASER ": VTAB 7: HTAB 10: NORMAL : PRINT "BY S. SCOTT ZIMMERMAN"
150 HTAB 12: PRINT "COPYRIGHT (C) 1987": HTAB 13: PRINT "MICROSPARC, INC.": VTAB 20: HTAB 14: PRINT "PLEASE ";: FLASH : PRINT "WAIT": NORMAL
160 L = 68:AS = HI -L -1: PRINT CHR$(4);"BLOAD STARLASER.SNDS,A";AS
170 AD = AS -445: PRINT CHR$(4);"BRUN DUO,A";AD
180 LB = 328:AX = AD -LB: PRINT CHR$(4);"BLOAD STARLASER.SHPS,A";AX
190 HI = 256 * INT(AX/256): HIMEM: HI: VTAB 20: CALL -958: PRINT "PRESS <RETURN> TO BEGIN -> ";: GET A$
200 AN = 10: DIM XA(AN),YA(AN):HS = 0
210 DEF FN HB(A) = INT(A/256): DEF FN LB(A) = A - FN HB(A) *256:SF = 1
220 REM *----------------
230 REM * SETUP:
240 REM *----------------
250 POKE 206, FN LB(AS): POKE 207, FN HB(AS): REM SOUND TABLE ADDRESS
260 POKE 232, FN LB(AX): POKE 233, FN HB(AX): REM SHAPE TABLE ADDRESS
270 POKE 230,32: CALL 62450: POKE -16297,0: POKE -16301,0: POKE -16300,0
280 POKE -16304,0: IF SF THEN & NORMAL
290 SC = 0:FU = 1000:FC = 1:SS = 1:KB = 2:AB = 3:LA = 4:MS = 0:KC = 0:AC = 0
300 HCOLOR= 3: SCALE= 1: ROT= 0
310 FOR I = 1 TO AN
320 X = 4 * INT( RND(1) *12 +28):Y = INT( RND(1) *148)
330 XDRAW AB AT X,Y: IF PEEK(234) <10 THEN XDRAW AB AT X,Y: GOTO 320
340 XA(I) = X:YA(I) = Y: NEXT I
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
360 YS = INT( RND(1) *150):XS = 80: XDRAW SS AT XS,YS: GOSUB 810: & 4: & 4
370 REM *----------------
380 REM * MAIN LOOP:
390 REM *----------------
400 IF PEEK( -16384) <128 THEN 510
410 GET A$
420 IF A$ = CHR$(8) THEN MS = MS -1
430 IF A$ = CHR$(21) THEN MS = MS +1
440 IF A$ = " " THEN GOSUB 690: GOTO 510
450 IF A$ = "S" OR A$ = CHR$(115) THEN & NORMAL :SF = NOT SF: IF NOT SF THEN & STOP
460 IF A$ = CHR$(27) THEN WAIT -16384,128: POKE -16368,0: GOTO 510
470 GOTO 510
480 IF MS < -12 THEN MS = -12
490 IF MS >12 THEN MS = 12
500 FC = INT( ABS(MS)/2) +1
510 OY = YS:YS = YS +MS
520 IF YS <0 THEN YS = 150
530 IF YS >150 THEN YS = 0
540 XDRAW SS AT XS,OY: XDRAW SS AT XS,YS
550 KC = KC +1: IF KC <40 THEN 570
560 KC = 0: GOSUB 820
570 OY = YK:YK = YK +MK
580 IF YK <0 THEN YK = 140
590 IF YK >140 THEN YK = 0
600 XDRAW KB AT XK,OY: XDRAW KB AT XK,YK
610 AC = AC +1: IF AC >AN THEN AC = 1
620 XDRAW AB AT XA(AC),YA(AC):YA(AC) = YA(AC) +6: IF YA(AC) >148 THEN YA(AC) = 0
630 XDRAW AB AT XA(AC),YA(AC)
640 FU = FU -FC: GOSUB 770
650 GOTO 400
660 REM *----------------
670 REM * SUBROUTINES:
680 REM *----------------
690 XL = XS +11:YL = YS +3: XDRAW LA AT XL,YL: GOSUB 840: & 1
700 N = 0: IF PEEK(234) = 118 THEN 760
710 FOR I = 1 TO AN: IF YA(I) >YL THEN 740
720 IF YA(I) +9 <YL THEN 740
730 N = N +1: GOSUB 830
740 NEXT I: IF N >0 THEN 760
750 XDRAW LA AT XL,YL: GOSUB 850: RETURN
760 XDRAW LA AT XL,YL: GOSUB 790: RETURN
770 IF FU <0 THEN FU = 0: GOSUB 780: POP : GOTO 900
780 VTAB 21: HTAB 7: INVERSE : PRINT FU;: NORMAL : PRINT " "
790 IF SC <0 THEN SC = 0
800 VTAB 21: HTAB 36: INVERSE : PRINT SC;: NORMAL : PRINT " ": RETURN
810 GOSUB 820:YK = INT( RND(1) *140):XK = 195: XDRAW KB AT XK,YK: RETURN
820 MK = INT( RND(1) *2):MK = ( -1) ^MK: RETURN
830 SC = SC -20: GOSUB 790: & 3: RETURN
840 FU = FU -10: GOSUB 770: RETURN
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
860 SC = SC +50: GOSUB 790: & 4: GOSUB 810: POKE -16368,0: RETURN
870 REM *----------------
880 REM * END OF GAME:
890 REM *----------------
900 HOME : TEXT : VTAB 5: HTAB 12: INVERSE : PRINT " END OF MISSION ": VTAB 10: HTAB 12: NORMAL : PRINT "YOUR SCORE: ";SC
910 VTAB 12: HTAB 12: PRINT "HIGH SCORE: ";HS
920 IF SC < = HS THEN 940
930 VTAB 12: HTAB 12: CALL -958: FLASH : PRINT "NEW HIGH SCORE!": NORMAL : & 4,1: & 4,1: & 4,1:HS = SC
940 VTAB 20: CALL -958: & 3,1: PRINT "DO YOU WANT TO PLAY AGAIN? (Y/N) ";: GET A$: PRINT A$
950 IF A$ = "Y" OR A$ = CHR$(121) THEN 250
960 IF A$ = "N" OR A$ = CHR$(110) THEN 980
970 GOTO 940
980 TEXT : HOME : END
990 HOME : VTAB 12: PRINT "WRONG DISK OR FILE(S) MISSING"
1000 VTAB 22: PRINT "<ESC> TO QUIT, <RETURN> TO START OVER";: GET Z$: IF Z$ < > CHR$(27) GOTO 110
1010 END