Classic Computer Magazine Archive COMPUTE! ISSUE 37 / JUNE 1983 / PAGE 72

Astrostorm

  Peter Lear

Try to guide your spaceship, carrying emergency medical supplies, through a dangerous asteroid storm. A great deal depends on your skills as a navigator. Many times the success or failure of your mission will depend on your ability to make split-second decisions under pressure. Versions for the VIC, Atari, TI-9914A, and Apple.


The mission: you are Captain Bosdiger of the interstellar tug The Viccard. While orbiting the fifth planet in the Benard system, you receive a distress call. The call comes from the Solarian system, in need of vital medical supplies. You are to pick them up from the sixth planet in the Benard system and then take them to the third planet in the Solarian system.
There is a time factor. The drugs have a short life. Your calculations indicate that it will be necessary to drop out of hyperspace between the fourth and fifth planets' orbits. There you will be in an asteroid field. You must cross this field in less than two minutes.

Looking At Astrostorm
How does the VIC version work? Let's take a look.

screenshot


 
The player's spaceship (upper right) successfully negotiates the moving asteroids in "Astrostorm," VIC-20 version. (Apple and TI versions similar.)

screenshot

A player's spaceship dodges space debris in the Atari version of "Astrostorm."


In lines 5-230 the screen border is chosen and several variables for the joystick are defined. The player is given the choice of using a joystick or the keyboard. If you choose to use the keyboard, control the movement of the ship with the "Z" (left) or "C" (right) keys. The VIC Programmers' Reference Guide helped provide the joystick information necessary to use the first data statement.
Then we are sent zooming up to line 5000 to make a bit of noise. Some more data is used here. Now we are off to line 910 to ask for the "asteroid depth" that is required. This simply determines where the ship is to be located on the screen. It can be placed between the fifth and eighteenth rows (always starting on the left side).
Line 1030 makes the program versatile enough to use with any VIC-20. For example, initially the VIC starts its screen memory at location 7680. When an extra 8K or more is added, the start of screen memory changes to location 4096. Since 3K cartridges do not change this location, any cartridges can remain inserted.
The game's main playing loop is in lines 20002240. It is enclosed in a FOR/NEXT loop and timed for two minutes. All it does is decide on a random color and column for the asteroid. The galactic or solarian credits are based on the position and color of the asteroid. The alarm sound is created by turning voice 36875 on and off with the variable CK. The first two IFs in the game loop check to see if the screen has been crossed. When the ship is moving forward, you gain points; going backward (left), you lose points. And if there is no movement, there is no loss or gain.

The movement of the asteroids is created by scrolling them off the screen. The ship is POKED on the screen. To prevent the ship from scrolling off every move, the program jumps to line 520. Here, with the variable OP (for old position), the would-be scrolled ships are erased.
A check is made for every move to see if the ship has been hit. When this occurs, the program goes to 8170 to explode the ship. This is where the rest of the data is utilized. It then returns and offers a change in asteroid depth (this option is available for only seven seconds). Then an asteroid field is displayed in motion until either the fire button on the joystick or the keyboard's "H" key is pressed. To add to the excitement, you can think of this as dropping out of hyperspace.
 
Atari, TI-99/4A, And Apple Version Notes

Patrick Parrish, Programming Assistant

Atari Notes

The object of the Atari version of Astrostorm is to move your spaceship to the right across the asteroid field six times. The game is played with the keyboard or the joystick (in controller jack #1). In either case, movement of the spaceship is strictly horizontal. Once you start the spaceship moving left or right on the screen, it will continue until you cause a direction change.
With the joystick, left and right movement of the stick causes the spaceship to fly across the screen in the corresponding direction. Shifting the joystick position up or down will halt
the spaceship. Under keyboard control, the "<" and ">" keys are used for left and right movement, and again, movement is continuous. If you choose the keyboard option, the spaceship's flight can be halted by pressing any key other than the "<" or ">" keys.
To achieve a high score on Astrostorm, avoid moving the spaceship to the left whenever possible, since penalty points are then deducted from your total. But bonus points are given for spaceship movement to the right. As an added incentive, you are awarded a thousand points each time you successfully maneuver the spaceship across the asteroid field.
TI-9/4A Notes

The object of Astrostorm on the TI-99/4A is to advance your spaceship across the asteroid field twelve times. Asteroids scroll from the bottom of the screen. Spaceship movement is horizontal. Control the movement of the ship by pressing the "<" and ">" keys.
This version of the game can be quite challenging since there are several skill levels. As the game begins, the vertical position of the spaceship can be set nearer the bottom of the screen by specifying a greater "asteroid depth." A greater asteroid depth, of course, requires a faster reaction time. The difficulty of the game can be further increased by requesting a higher asteroid density (difficulty level).
The game loop (lines 500-830) is set to execute 1000 times. This means that you must finish your journey across the asteroid field before this loop is completed. You may find that this time limit is either too easy or too difficult, depending on the skill levels you choose. If so, vary the limit in line 500 as you see fit.
To achieve a high score on Astrostorm, avoid moving your spaceship backwards since points are deducted from your total.
Apple Notes

With the Apple version of Astrostorm, you must move the spaceship across the astrofield six times to win. There is no time limit, and the game loop (lines 120-250) will execute until a crash is detected (line 230).
Asteroids scroll from the bottom of the screen. Only horizontal movement of the spaceship is allowed by the program. Movement, which is continuous, is accomplished with the SPACE bar while direction is controlled with the left and right arrow keys.
There are several skill levels. You can make the game more difficult by specifying a higher asteroid depth. This will place the spaceship closer to the bottom of the screen, and consequently, require a quicker reaction on your part to avoid a collision.
Scoring is based on the direction of spaceship movement and difficulty level. Of course, more points are given at greater asteroid depths. Points are awarded for movement of the spaceship to the right and deducted for movement to the left.

Program 1: VIC Version

5 POKE36879,8
10 PRINT"{CLEAR}{PUR}":POKE37139,0:DD=37154:PA=37137:PB=37152
45 IFLF=lTHEN1000
47 PRINT"{05 RIGHT}{04 DOWN}ASTROSTORM"
50 PRINT"{DOWN}{05 RIGHT}JOYSTICK(1)":PRINT"{05 RIGHT}KEYBOARD(2)"
55 GETR$
60 IFR$="1"THENR=l:GOTO70
65 IFR$="2"THENR=2:GOTO70
68 GOTO55
70 FORJ=0TO2:READJS(J):NEXTJ:GOSUB5000
80 GOTO900
100 POKEDD,127:S3W=-((PEEK(PB)AND128)=0):POKEDD,255
110 P=PEEK(PA):S2=((PAND16)=0)
130 DN=JS(X+l):RETURN
200 IFPEEK(197)=33THENDN=-l:RETURN
210 IFPEEK(197)=34THENDN=l:RETURN
220 IFPEEK(197)=64THENDN=0:RETURN
230 RETURN
500 IFDN<>0ANDPEEK(S-DN)<>42THENPOKES-DN,32
505 FORII=lTO2
510 POKEOP,32:POKEOP-DN,32
520 OP=OP-22
530 NEXTII:RETURN
900 IFLF=lTHEN1000
910 PRINT"THE A.D. [ASTEROID DEPTH] DESIRED (5-18)":INPUTL
920 IFL<5THENPRINT"TOO EASY":GOTO900
930 IFL>18THENPRINT"TOO RISKY":GOTO910
940 LF=l:PRINT"{CLEAR}":GOSUB2200
1000 PRINT"{CLEAR}{18 DOWN}"
1020 POKE36878,15
1030 S=4*(PEEK(36866)AND128)+64*(PEEK(36869)AND120):
C=37888+4*(PEEK(36866)AND128)
1040 CK=I:S=S+22*(L+l):OP=S:SB=S-l:SE=S+23
2000 FORG=lTO418
2010 NA=INT(RND(Tl)*22):CC=INT(RND(TI)*7)+l
2040 POKE646,CC:PRINTTAB(NA) "*";
2055 PT=PT+DN*(NA*CC*INT((L^.5)+.5))
2060 IFS=SBTHENPOKES,32:S=S+22:W=W-1
2065 IFS=SETHENPOKES,32:S=S-22:W=W+l
2070 IFPEEK(S)=42ORPEEK(S+22)=42THENPOKE646,1:GOSUB8000:GOSUB7000:GOTO2200
2085 ONRGOSUB100,200:OP=S-22:S=S+DN
2090 CK=CK*-l:POKE36875,127+CK:GOSUB500:POKES,61+DN:POKES+C,l:PRINT
2100 NEXTG
2110 PRINT"{YEL}":POKE36875,0:GOSUB6000
2200 PT=0:IFPEEK(197)=43THENRESTORE:LF=l:GOTO70
2210 POKE37139,0:IF(PEEK(PA)AND32)=0THENRESTORE:LF=l:POKE37139,128:GOTO70
2215 NA=INT(RND(TI)*22):CC=INT(RND(TI)*7)+l
2220 POKE646,CC:PRINTTAB(NA)"*"
2240 POKE37139,128:GOTO2200
5000 A=20:POKE36878,15
5010 READC,T,Z:T=T*A:Z=Z*A
5030 POKE36875,C:FORI=ITOZ:NEXTI:POKE36875,0:FORI=lTOZ:NEXTI
5050 IFZ>0THEN5010
5100 RETURN
6000 POKE36875,0
6005 IFW<6THENPRINT"YOU DID NOT COMPLETE YOUR MISSION.":GOTO62006010 PRINT:PRINT"YOU COMPLETED YOUR MISSION.";
6020 PRINT"THE SOLARIAN SYSTEM MINISTER HAS AWARDED YOU";PT
6030 PRINT"SOLARIAN CREDITS FOR YOUR SERVICES.",
6040 PRINT"DO YOU WISH TO MAKE ANOTHER DELIVERY?"
6060 GETR$:IFR$="Y"ORR$="N"THEN6070
6065 GOTO6060
6070 IFR$="N"THENCLR:END
6080 PRINT"SAME ASTEROID DEPTH?"
6100 GETR$:IFR$="Y"ORR$="N"THEN6110
6105 GOTO6100
6110 IFR$="N"THENRUN
6120 RETURN
6200 PRINT"THE SOLARIAN GOVERNMENT HAS F INED YOU";PT;" GALACTIC CREDITS"
6210 PRINT"THEY ARE ALSO HAVE ANOTHER MISSION FOR YOU!":FORI=lTO7000:NEXT:RETURN
7000 POKE36875,0:PRINT"{CLEAR}YOU DIDN'T MAKE IT.THE SOLARIAN GOVERNMENT HAS SENT";
7020 PRINT" YOUR FAMILY":PRINTPT;"GALACTIC CREDITS"
7025 PRINT"HIT 'C' TO CHANGE A.D."
7030 FORI=lTO700:IFPEEK(197)=34THENFORJ=lTO10:GETR$:NEXTJ:RUN
7040 NEXTI:RETURN
8000 PRINT"{YEL}":POKE36875,0
8060 E(1)=S-23:E(2)=S-22:E(3)=S-l:E(4)=S:E(5)=S+23:E(6)=S+22:E(7)=S+l:E(B)=S
8090 FORI=lTO8:READA(I):POKEE(I),A(I):POKEE(I)+C,2:NEXTI
8110 A(4)=A(1).:A(8)=A(5)
8130 A=2:IFL>17THENA=l
8150 FORI=lTOA:FORJ=lTO8:POKEE(J),32:POKEE(J)+C,0:NEXTJ:PRINT
8160 E(1)=E(l)-23-22*(I-1):E(2)=E(2)-22-22*(I-1):E(3)=E(3)-l-22*(I-1)
8165 E(4)=E(4)-23-22*(I-1):E(5)=E(1)+23+22*(I-1):E(6)=E(6)+22+22*(I-1)
8168 E(7)=E(7)+1+22*(I-1):E(8)=E(8)+23+22*( I-1)
8170 FORJ=lTO8:POKEE(J),A(J):POKEE(J)+C,2:NEXTJ
8180 FORJ=lTO100:POKE36877,220:NEXTJ:POKE36877,0:NEXTI
8200 FORI=lTO6:READA(I):NEXTI:POKE36877,220
8220 FORI=14TO0STEP-2
8235 POKE36878,I
8237 FORJ=lTO6:POKE36879,A(J):FORG=lTO25:NEXTG,J
8240 POKE36879,8:NEXTI:POKE36877,0:RETURN
9100 DATA-1,0,1,237,10,1,237,5,1,177,20,5,177,20,5,237,10,1,177,5,1,140,20,5
9105 DATA237,10,1,177,5,1,140,15,2,237,10,1,177,5,1,140,20,5,237,10,1,177,5,1,140,25,5
9110 DATA177,10,1,140,5,1,118,25,1,140,20,177,15,1,237,25,1,237,20,1,237,10,1,177,25,0
9200 DATA77,66,64,42,77,66,64,42,25,42,127,143,159,255

Program 2: Atari Version

5 POKE 53248,0:GOSUB 3000:DIM N$(10):N$= "'{T}$. {{,}}X{REV T}{REV ,"}"
7 GRAPHICS 0:POKE 752,l:? :DL=PEEK(560)+256*PEEK(561)+4:POKE DL-1,68:FOR I=2 TO 24:POKE DL+I,4:NEXT I
10 X=60:Y=50:W=0
20 A=PEEK(106)-8:POKE 54279,A:PMBASE=256*A
30 POKE 559,46:POKE 53277,3
40 FOR I=PMBASE+512 TO PMBASE+640:POKE I,0:NEXT I
50 POKE 53248,X
60 POKE 704,216:P0=PMBASE+512+Y
70 FOR I=PMBASE+512+Y TO PMBASE+517+Y:READ A:POKE I,A:NEXT 1
80 DATA 224,112,254,127,112,224
95 POKE 53278,0
97 IF R=2 THEN 500
104 B=STICK(0):IF B<>15 THEN A=B
110 X=X-4*(A=11)+4*(A=7):POKE 53248, X:PT=PT+10-25*(A=11)
130 IF PEEK(53252) THEN POKE 764,255 :GOTO 2000
140 IF X>200 THEN POKE 53248,60:W =W+1:PT=PT+1000:X=60
145 IF X<60 THEN POKE 53248,200:X=200:PT=PT-1000
150 IF W=6 THEN 1000
190 POSITION17*(RND(0)*2)+4,23:Z=INT(LEN(N$)*RND(0)+1):?N$(Z,Z):
POKE710,PEEK(53770)
260 GOTO 97
500 I=PEEK(764)
520 IF I=54 THEN X=X-4:POKE 53248,X: PT=PT-15:GOTO 130
530 IF I=55 THEN X=X+4:POKE 53248,X: PT=PT+10:GOTO 130
540 GOTO 190
1000 POKE 764,255:GOSUB 2100:GRAPHICS 0:ON W GOTO 2000,1200,1005,
1005,1005,1020,1010
1005 IF W<6 THEN GRAPHICS 0:? "You did not complete your mission. " GOTO 1020
1010 ? :? CHR$(125);"You completed your mission."
1020 ? "The Solarian System Minister has":? "awarded you ";PT;' Solarian"
1025 ? "credits for your services.": GOTO 2010
1200 ? CHR$(125);"The Solarian Government has fined":? "you ";PT;"galactic credits."
1210 ? :? "but, they also have another mission":? "for you!":GOTO 2 010
2000 FOR W=15 TO 0 STEP -0.3:SOUND 0 ,20*RND(0),0,W:POKE 704,PEEK(53770):POKE
P0+6*RND(0),PEEK(53770):NEXT W
2005 GRAPHICS 0:? "You didn't make it. The Solarian":? "government has sent
your family":? PT;" galactic credits."
2010 GOSUB 2100:POKE 764,255:? "Play again? (Y/N):";:GET #1,A:IF A< >ASC("N")THEN
RUN
2020 GRAPHICS 0:GOSUB 2100:END
2100 POKE 53277,0:POKE 53248,0:RETURN
3000 GRAPHICS 0:SETCOLOR 2,6,6
3010 ? "{2 TAN}{REV ASTROSTORM}"
3030 ? :? "{REV 1}.Joystick}":? :? "(REV 2}. Key board":? "(3 SPACES)Use < and > for move"
3040OPEN #1,4,0,"K:":? :? "Select:"
3050GET #1,A:R=A-48:IF R<l OR R>2 T HEN 3050
30BORETURN
3100END

Program 3: TI-99/4A Version

100RANDOMIZE
110CALL CLEAR
120FOR I=5 TO 8
130CALL COLOR(1,16,1)
140NEXT 1
150CALL CLEAR
160 PRINT " A S T R 0 S T 0 R M "
170 PRINT
180 PRINT
190 PRINT "POWER SHIP WITH < & > KEYS"
200 FOR I=l TO 9
210 PRINT
220 NEXT I
230 FOR 1=14 TO 3 STEP -1
240 FOR J=1 TO 20
250 NEXT J
260 CALL SCREEN(I)
270 NEXT I
280 FOR I=1 TO 400
290 NEXT I
300 S=3
310 PT=0
320 RSHIP=10
330 CSHIP=1
340 SHIP=62
350 COL=2
360 RLSHIP=RSHIP
370 CLSHIP=CSHIP
380 CALL CLEAR
390 PRINT"WHAT ASTEROID DEPTH (1-10)";
400 INPUT X
410 IF (X>10)+(X<I)THEN 380
420 PRINT
430 PRINT "WHAT DIFFICULTY LEVEL (1-10)"
440 INPUT DCULT
450 IF (DCULT>10)+(DCULT<I)THEN 380
460 CALL CLEAR
470 CALL SCREEN(S)
480 CALL COLOR(2,16,I)
490 REM VARY LIMIT OF LOOP IN THE NEXT LINE IF THE GAME IS TOO HARD OR TOO EASY
500 FOR LOOP=L TO 1000
510 FOR I=l TO INT(RND*X)+l
520 COL=INT(RND*30)+2
530 CALL HCHAR(23,COL,42)
540 NEXT I
550 PRINT
560 CALL SCHAR(RSHIP+DCULT,CSHIP,LOC)
570 CALL HCHAR(RLSHIP+DCULT-I,CLSHIP,32)
580 IF LOC=42 THEN 1190
590 CALL SCREEN(S)
600 CALL HCHAR(RSHIP+DCULT,CSHIP,SH IP)
610 CLSHIP= CSHIP
620 RLSHIP=RSHIP
630 CALL KEY(3,A,STATUS)
640 IF A<>ASC(".")THEN 730
650 CALL SOUND(-700,-5,3)
660 PT=PT+5*DCULT*X
670 CSHIP=CSHIP+L
680 IF CSHIP<>32 THEN 720
690 CSHIP=L
700 S=S+l
710 IF S=15 THEN 1030
720 SHIP=62
730 IF A<>ASC(",")THEN 820
740 CALL SOUND(-700,-6,4)
750 SHIP=60
760 PT=PT-8*DCULT*X
770 CSHIP=CSHIP-1
780 IF CSHIP<>L THEN 810
790 CSHIP=32
800 S=S-SGN(S-3)
810 SHIP=60
B20 REM
830 NEXT LOOP
840 CALL CLEAR
850 PRINT " YOU DID NOT COMPLETE YOUR"
860 PRINT
870 PRINT "MISSION. THE SOLARIAN"
880 PRINT
890 PRINT "GOVERNMENT HAS FINED YOU"
900 PRINT
910 PRINT PT;"GALACTIC CREDITS."
920 PRINT
930 PRINT
940 PRINT
950 PRINT " BUT, THEY ALSO HAVE "
960 PRINT
970 PRINT "ANOTHER MISSION FOR YOU!!!"
980 PRINT
990 PRINT
1000 INPUT "ARE YOU GAME (Y OR N)?" :G$
1010 IF G$="Y" THEN 300
1020 GOTO 1500
1030 REM YOU WIN!!
1040 CALL CLEAR
1050 PRINT "YOU COMPLETED YOUR "
1060 PRINT
1070 PRINT "MISSION. THE SOLARIAN MINI-"
1080 PRINT
1090 PRINT "STER HAS AWARDED YOU";PT
1100 PRINT
1110 PRINT "SOLARIAN CREDITS FOR YOUR "
1120 PRINT
1130 PRINT "SERVICES AND WISHES YOU "
1140 PRINT
1150 PRINT "TO MAKE ANOTHER DELIVERY! "
1160 PRINT
1170 PRINT
1180 GOTO 980
1190 CALL SCREEN(12)
1200 FOR I=l TO 50
1210 NEXT 1
1220 CALL SCREEN(9)
1230 FOR VOL=24 TO 1 STEP 4
1240 CALL SOUND(200,-7,VOL)
1250 NEXT VOL
1260 FOR VOL=1 TO 24 STEP 4
1270 CALL SOUND(200,-7,VOL)
1280 NEXT VOL
1290 CALL SCREEN(12)
1300 FOR I=1 TO 10
1310 NEXT I
1320 CALL SCREEN(8)
1330 CALL CLEAR
1340 CALL SCREEN(6)
1350 PRINT "{4 SPACES}TOO BAD! THE SOLARIAN"
1360 PRINT " GOVERNMENT HAS SENT YOUR"
1370 PRINT " FAMILY ";PT;" GALACTIC"
1380 PRINT " CREDITS."
1390 FOR 1=1 T 5
1400 PRINT
1410 NEXT I
1420 PRINT "{3 SPACES}HIT -P- TO PLAY AGAIN"
1430 PRINT " OR -S- TO STOP."
1440 FOR I=1 TO 5
1450 PRINT
1460 NEXT I
1470 CALL KEY(3,K,ST)
1480 IF ST=0 THEN 1470
1490 IF (K=ASC("C"))+(K=ASC("P"))THEN 300
1500 END

Program 4: Apple Version

10 REM ASTEROID FIELD - APPLE II VERSION
20 FOR I = 770 TO 795: READ M: POKE I,M: NEXT I
25 DATA 172,01,03,174,01,03,169,04,32,168,252,173,48,192,232,
208,253,13,6,208,239,206,0,03,208,231,96
30 GOTO 1000
100 TEXT :HOME : VTAB 1: PRINT "SCORE : ": POKE 34,2
110 FOR I = 1 TO 15:SP = INT ( RND (1)*39) + 2: VTAB 24: HTAB (SP): PRINT "*": NEXT I
115 FOR I = 10 TO 50 STEP 40: POKE 768,10: POKE 769,I: CALL 770; NEXT I
120 POKE OP,160: VTAB 24:SP = INT ( RND (1) * 39) + 2
130 HTAB (SP); PRINT
140 IF PEEK (CP) = 170 THEN GOTO 800
145 POKE CP,CC:OP = CP
146 FOR I = 1 TO 25: NEXT
149 VTAB 1: HTAB 7: CALL - 868: VTAB 1: HTAB 7: PRINT PT
170 M = PEEK (16384): ON M < 128 GOTO 120
180 IF M - 28 = 8 THEN CC = 188:MV = - 1: GOTO 120
190 IF M - 128 = 21 THEN CC = 190:MV = + 1: GOTO 120
200 IF M - 128 < > 32 THEN GOTO 120
210 IF CP < > BP OR MV > 0 THEN GOTO 215
212 ON SF GOTO 120
213 CP = BP + 39:SF = SF - 1: GOTO 230
215 CP = CP + MV
220 IF CP < > BP + 39 THEN GOTO 230
222 ON SF = 6 GOTO 600
225 CP = BP:SF = SF + 1
230 IF PEEK (CP) = 170 THEN GOTO 800
240 IF NOT MV THEN PT = PT + INT ((MV * INT(DL * 2) * ((CP - BP) *SF))) / 2):
GOTO 250
245 PT = PT + (MV * ( INT (DL * .3) * (CP - BP) * SF)))
250 GOTO 120
600 REM WIN
610 TEXT: HOME : VTAB 2: HTAB 15: PRINT "SCORE: ";PT
620 VTAB 8: HTAB 13: FLASH : PRINT "CONGRATULATIONS": NORMAL : VTAB 12: HTAB 14: PRINT "YOU MADE IT!"
640 POKE 68,15: POKE 769,50: CALL 770: POKE 768,10: POKE 769,10: CALL 770: POKE 768, 15: POKE 769, 50: CALL 770
650 FOR I I TO 500: NEXT 1
660 POKE 16368,0: GOTO 910
800 REM CRASH
810 V = DL + 2:H = CP - BP
820 IF H < I THEN VTAB V - 1: HTAB H: PRINT " /": VTAB V: HTAB H: PRINT " -":
VTAB V + 1: HTAB H: PRINT" "; CHR$ (92): GOTO 850
830 IF H > = 39 THEN VTAB V - 1: HTAB H: PRINT CHR$ (92);" ": VTAB V: HTAB H: PRINT VTAB V + 1: HTAB H: PRINT "/ ":G0TO 850
840 VTAB V 1; HTAB H: PRINT CHR$ (92);" /": VTAB V: HTAB H: PRINT "--";: VTAB V + 1: HTAB H: PRINT " /"; CHR$ (92);
850 FOR I = 1 TO 200:X=PEEK(-16336):NEXTI
890 POKE 16368,0
900 TEXT HOME : VTAB 2: HTAB 15: PRINT"SCORE: ";PT
905 VTAB 10: HTAB 11: PRINT "YOU LOST YOUR SHIP!"
910 VTAB 21: HTAB 6: PRINT "SAME GAME ? Y)ES, N)O, E)ND ";: GET A$
915 IF A$ = "E" THEN END
920 IF A$ = "Y" OR A$ = CHR$ (13) THEN GOTO 1130
1000 TEXT : HOME
1010 VTAB 5: HTAB 15: PRINT "ASTROSTORM"
1050 VTAB 10: HTAB 1: INPUT "ENTER DIFFICULTY LEVEL (5-16) ";DL$
1055 IF LEN (DL$) < 1 OR LEN (DL$) > 2 THEN GOTO 1050
1060 E = 0: FOR I = 1 TO LEN (DL$):CH$ = MID$ (DL$,I,I): IF ASC (CH$) <48 OR
ASC (CH$) > 57 THEN E = 1
1070 NEXT I: ON E GOTO 1050
1080 DL = VAL (DL$)
1090 IF DL < 5 THEN VTAB l8: PRINT "TOO EASY": FOR I = 1 TO 1000: NEXT I:
VTAB 18: CALL - 868: GOTO 1050
1100 IF DL > 18 THEN VTAB 18: PRINT "TOO HARD": FOR I = I TO 1000: NEXT I:
VTAB 18: CALL - 868: GOTO 1050
1110 VTAB 15: HTAB 10. INPUT "INSTRUCTIONS (Y/N) ";A$: IF A$ = "Y" THEN
GOTO 1200
1130 J = 0: FOR I = 1024 TO 1920 STEP 128
1140 J = J + 1
1150 IF J = DL + 2 THEN CP = I:I = 1921: GOTO 1180
1160 IF J + 8 = DL + 2 THEN CP = I + 40:I = 1921: GOTO 1180
1170 IF J + 16 = DL + 2 THEN CP = I + 80:I = 1921
1180 NEXT I
1190 BP = CP:SF = 1:CC = 190:MV = + 1: PT = 0: GOTO 100
1200 TEXT : HOME
1210 VTAB 3: HTAB 14: PRINT "INSTRUCTIONS:":
1220 VIAB 6: PRINT "THE LEFT AND RIGHT ARROW KEYS CONTROL ": PRINT
"THE DIRECTION OF MOVEMENT OF THE ROCKET.";: PRINT "PRESS THE
SPACE BAR TO MOVE THE ROCKET."
1230 PRINT : PRINT : HTAB 4: PRINT "PRESS SPACE BAR TO BEGIN THE GAME"
1240 VTAB 20: HTAB 8: PRINT "PRESS ANY KEY WHEN READY": WAIT - 16384,128
1250 GOTO 1130