Nuclear Attack is a Missile Command–style arcade game in which the player defends six cities and a missile launch site from incoming nuclear missiles. The player moves a crosshair “X” cursor in eight directions using keyboard rows and fires surface-to-air missiles toward the cursor position; each intercepted enemy missile scores 1,000 points, with bonus points for surviving cities and unused missiles awarded between waves. User-defined graphics (UDGs) are loaded at startup via a DATA block POKEd into the UDG area, providing city sprites, missile shapes, and explosion frames. The game tracks a three-entry high-score table stored in string and numeric arrays, with the player prompted for a name if their score qualifies. The screen color scheme cycles between PAPER 4, 5, and 6 across successive waves, and a bonus city is awarded upon reaching 50,000 and 100,000 points.
Program Structure
The program is organized into several broad functional regions:
- Lines 2–4: Variable initialization, color setup, and array allocation for the current wave.
- Line 10 / Lines 4000–4130: UDG loader — reads 152 bytes from DATA statements and POKEs them into the UDG area starting at
USR "\\a", then jumps to the title/intro sequence. - Lines 11, 6050–6199: Title screen, instructions, and briefing pages.
- Lines 6080–6105: Elaborate title screen drawn entirely with PLOT/DRAW commands and block graphics, including two symmetrical rocket silhouettes.
- Lines 20–995: Main game loop — spawns missiles, moves them, handles player input, and triggers sub-routines for firing and city destruction.
- Lines 1000–2060: Player cursor movement and missile firing dispatcher.
- Lines 2100–2500: Wave-end logic, game-over sequence, high-score entry, and between-wave bonus scoring screen.
- Lines 3000–3170: Enemy bomber/plane sub-routine that scrolls across the screen dropping additional missiles.
- Lines 5000–5200: Explosion animation sub-routine using PLOT/DRAW bursts with INVERSE toggling.
- Lines 6000–6049: Player missile trajectory calculation and drawing using OVER 1 to erase previous position.
- Lines 6213–6900: Missile rack display and POKE-based attribute manipulation for the launch-site representation.
- Lines 7000–7150: Player missile rendering loop with multi-frame animation using UDG characters.
- Lines 7200–7999: City destruction sequence — an extensive series of PLOT/DRAW commands builds an expanding explosion bloom pixel by pixel around the city coordinate
uu. - Lines 8000–8200: Hit detection confirmation, score update, and enemy missile removal from the active array.
UDG Usage
Nineteen UDGs (\\a through \\s, characters 144–162) are defined by the DATA block at lines 4040–4130. The 152 bytes cover sprites used for city buildings (three-character wide UDGs \\a\\b\\c), player missile trail frames (\\l, \\m), explosion fragments (\\f\\g\\h, \\i\\j\\k), and the bomber sprite (\\q\\r\\s, \\n\\o, \\p). The loader at lines 4000–4030 uses USR "\\a" as the base address and steps through all 152 bytes in a FOR loop with POKE USR "\\a"+a,b.
Enemy Missile Mechanics
Up to ten simultaneous enemy missiles are tracked in parallel arrays: d() for X pixel position, e() for Y pixel position, f() for horizontal drift, and i(,) for the launch origin. Counter b tracks how many are active; mm tracks surviving cities. Each missile is drawn with PLOT/DRAW using f(a) as the horizontal component of a 4-pixel downward step. When a missile reaches Y < 5 (line 115), city-destruction logic is triggered at line 7200. The variable ii governs spawn probability — it starts at 0 and rises to 0.8 (line 2100) or 1 (line 65/3100) as the wave progresses.
Player Input and Missile Firing
Keyboard scanning uses direct IN port reads rather than INKEY$: ports 64510 (Q/E row), 57342 (Y–P row), and 49150 (H–NL row) move the cursor; port 65278 (Z–V row) fires. The cursor “X” is drawn with OVER 1 to XOR it on and off without disturbing the background. The firing subroutine at line 6000 calculates the trajectory offset from the fixed launch point (oo,qq) to the cursor (x,y) and draws the missile path with OVER 1, then erases it on the next pass.
Hit Detection
Enemy missile hits on cities are detected at line 132 using POINT to check whether a pixel is set at the missile’s projected next position, combined with ATTR to verify the cell’s attribute matches pp (the current PAPER color attribute value, e.g., 42 for PAPER 5). Player missile hits on enemy missiles are detected by checking ATTR at the bomber’s column against pp (line 3020). Direct interception of an enemy missile by the explosion is handled at line 8000 via a flag set from line 132.
Score and High-Score Table
The three-entry high-score table uses c(1)–c(3) for numeric scores and c$(1,14)–c$(3,14) for 14-character names, all held in RAM between games. At game-over (line 2290 onward), the table is displayed using TAB 14-LEN STR$ c(n) to right-justify scores. If the player’s score qualifies, the program inserts it into the correct rank by shuffling lower entries down (lines 2320–2332), then prompts for a name via INPUT. The COPY command at line 2438 allows printing the scoreboard.
Between-Wave Bonus Screen
Lines 2500–2760 handle inter-wave scoring. Surviving cities award 2,000 points each; surviving player missiles (up to 30 total, tracked by t) award 500 each. Remaining missiles are drawn as pixel-art rockets using a sequence of PLOT/DRAW commands split across two rows of 15. The wave color cycles: PAPER 5 → PAPER 4 → PAPER 6 → back to 5, controlled by xx and pp (lines 2704–2720). Difficulty increases each wave via jj (max simultaneous missiles) and ab (barrage length threshold).
Bomber Sub-Routine
A bonus enemy type — a bomber — appears randomly (line 150 triggers at RND > 0.9). It scrolls left to right across row 11 using UDGs \\q\\r\\s, erasing its trail with \\n\\o. At each column it probabilistically checks whether it is aligned above a city (ae vs g(af)), and if so spawns a downward missile (lines 3100–3165). Hitting the bomber with an explosion scores 3,000 points (line 5003).
Memory and Display Techniques
- OVER 1 (XOR mode) is used extensively for flicker-free movement of the cursor, enemy missiles, and player missiles without saving/restoring background.
- Direct
POKEs to the attribute file area (lines 6222–6225, addresses 23276–23282) manipulate the launch-site rack display at the character-cell level. - The city explosion at lines 7240–7540 is drawn entirely with PLOT/DRAW, building an expanding circular blast shape over ~60 individual drawing commands — one of the most elaborate pixel-art sequences in the program.
VALis not used for line-number optimization here;GO TOtargets are literal integers throughout.
Bugs and Anomalies
- Line 7345 contains
PLOT uu=5,17— the=operator assigns 5 touumid-expression rather than using-, corrupting the city coordinate used for subsequent explosion PLOTs. This is almost certainly a typo foruu-5. - Variable
wwis used at line 2650 (LET g(mm)=ww) to restore a destroyed city’s X position, butwwis only set at line 7989 if a non-launch-site city was destroyed. If a bonus city is awarded after the launch site was hit first,wwmay hold a stale value. - Line 6199 sets
LET SS=-1(uppercase) which is a different variable fromss(lowercase) used everywhere else; the check at line 6290 (IF ss=-1) therefore uses lowercasessand will never be true via this path, making theGO TO 20at 6290 unreachable from this route. - Lines 6120 contains
RUNinside a FOR loop used as part of the title-screen music wait; if INKEY$ is non-empty,RUNrestarts the entire program, which is the intended “press any key to start” mechanism but is an unconventional approach.
Source Code
2 LET xx=5:LET ss=0:LET pp=42:INK 0:PAPER 5:BORDER 5:BRIGHT 0:OVER 0:INVERSE 0:FLASH 0:CLS :BEEP .5,30
3 DIM g(7):LET mm=7:LET vv=0:LET g(1)=28:LET g(2)=60:LET g(3)=92:LET g(4)=128:LET g(5)=164:LET g(6)=196:LET g(7)=228
4 LET ab=28:LET ss=0:DIM c$(4,14):DIM c(3):LET c(1)=0:LET c(2)=0:LET c(3)=0:GO TO 6050
10 GO TO 4000
11 OVER 0:INK 7:PAPER 0:BORDER 0:INVERSE 0:FLASH 0:BRIGHT 1:CLS :GO TO 6080
28 IF ss<0 THEN LET ss=0
29 BEEP .5,30
30 DIM z(30):DIM m(30):DIM q(30):DIM i(11,2):DIM a(11):DIM d(11):DIM e(11):DIM f(11)
34 LET ad=0:LET yy=0:LET t=0:LET rr=0:LET kk=9:LET ll=12:LET nn=0:LET oo=125:LET qq=14
35 LET aj=0:LET jj=6:LET ii=0:LET aa=1:LET cc=1:LET dd=0:LET ee=1:LET ff=1:LET gg=1:LET hh=1:LET bb=0:LET s=0:LET b=0:LET p=0
37 PRINT AT 0,10;" "; OVER 1; INK 9; AT 0,10;"SCORE ";ss
40 RANDOMIZE
50 PLOT 127,0
60 LET x=16:LET y=10
61 LET c=20:LET n=20
62 PRINT OVER 1; AT y,x;"X"
65 IF yy >=ab THEN LET ii=1
66 IF b>jj THEN GO TO 2100
67 LET b=b+1
68 IF b>10 THEN LET b=b-1
69 IF b>10 THEN RETURN
70 LET yy=yy+1
71 LET f(b)= INT (RND*10)-4
73 LET d(b)=g((INT (RND*mm))+1)-175*(f(b)/5)
75 LET e(b)=175
82 LET i(b,1)=d(b):LET i(b,2)=e(b)
90 IF d(b)<0 OR d(b)>255 THEN GO TO 71
95 IF b>1 THEN RETURN
100 OVER 0
101 IF b=0 OR mm=0 THEN GO TO 2200
102 IF RND>ii THEN GO SUB 65
110 FOR a=1 TO b
115 IF e(a)<5 THEN GO TO 7200
120 PLOT d(a),e(a):DRAW f(a),-4
130 LET e(a)=e(a)-5:LET d(a)=d(a)+f(a)
131 IF ad=1 THEN GO TO 3060
132 LET k=1:IF POINT (d(a),e(a)-1)=1 AND ATTR ((175-e(a))/8,d(a)/8)=pp THEN GO TO 8000
135 IF IN 65278+ IN 64510+ IN 57342+ IN 49150<124 THEN GO SUB 1000
140 NEXT a
150 IF RND>.9 THEN GO TO 3000
990 IF IN 65278+ IN 64510+ IN 57342+ IN 49150<124 THEN GO SUB 1000
992 IF bb=1 THEN RETURN
995 GO TO 100
1000 LET c=x:LET n=y
1010 LET x=x+(IN 64510=27 AND x<30)-(IN 64510=30 AND x>0)
1020 LET y=y-(IN 57342<31 AND y>0)+(IN 49150<31 AND y<19)
2000 IF x<0 THEN LET x=0
2020 IF y<0 THEN LET y=0
2030 IF y>20 THEN LET y=20
2040 IF x>31 THEN LET x=31
2045 IF c=x AND n=y THEN GO TO 2050
2046 OVER 1:PRINT AT y,x;"X"
2049 OVER 1:INVERSE 0:PRINT AT n,c;"X":INVERSE 0:OVER 0
2050 IF IN 65278<31 THEN GO SUB 6000
2060 RETURN
2100 LET ii=.8
2190 GO TO 67
2200 IF mm <=0 THEN GO TO 2210
2202 IF yy <=ab THEN GO TO 65
2209 GO TO 2500
2210 FLASH 1:PAPER 2:PRINT \{20}\{1}\{20}\{0}"\{20}\{1} GAME OVER @#*! ":PAUSE 400:FLASH 0
2270 FOR a=40 TO 0 STEP -1:BEEP a*.002,a:NEXT a:FOR a=30 TO 69:BEEP .0015,a:NEXT a:PAUSE 100
2280 PAPER 1:BORDER 1:INK 7:BRIGHT 1:OVER 0:INVERSE 0:CLS
2282 LET w=0
2290 PRINT AT 0,11;"SCOREBOARD"
2292 PRINT AT 3,0;" SCORE NAME"''" 1 "; TAB 14- LEN STR$ c(1);c(1)," ";c$(1)
2293 PRINT AT 7,0;" 2 "; TAB 14- LEN STR$ c(2);c(2)," ";c\{20}\{1}\{20}\{0}$(2)''" 3 "; TAB 14- LEN STR$ c(3);c(3)," ";c$(3)
2294 PLOT 7,154:DRAW 240,0:DRAW 0,-64:DRAW -240,0:DRAW 0,64:PLOT 7,142:DRAW 240,0
2295 PLOT 32,154:DRAW 0,-64:PLOT 127,154:DRAW 0,-64
2300 PRINT AT 12,6;"YOUR SCORE.. "; AT 12,18;"........"; AT 12,(26- LEN STR$ ss);ss
2305 IF w>0 THEN GO TO 2370
2310 FOR a=1 TO 3:IF ss>c(a) THEN GO TO 2316
2315 NEXT a:GO TO 2370
2316 PRINT AT 16,2;"You have the Number ";a;" score."
2317 INPUT "Please ENTER your name (14 letter max)....";c\{20}\{1}\{20}\{0}$(4)
2320 FOR w=2 TO a STEP -1
2325 LET c$(w+1)=c$(w)
2330 LET c(w+1)=c(w)
2332 NEXT w
2335 LET w=2
2340 LET c(a)=ss
2350 LET c$(a)=c$(4)
2355 PRINT AT 16,2;" "
2360 GO TO 2285
2370 PRINT AT 18,6;"C=Copy of Scoreboard"
2380 PRINT AT 16,4;"Please make a choice...."
2385 PRINT ''" E=End the Program "
2390 PRINT " S=Start another game "
2400 LET a$= INKEY$:IF a$="" THEN GO TO 2400
2409 IF a$="e" OR a$="E" THEN CLS
2410 IF a$="e" OR a$="E" THEN STOP
2420 IF a$="s" OR a$="S" THEN GO TO 2422
2421 GO TO 2430
2422 LET xx=5:LET pp=42:INK 0:PAPER 5:BORDER 5:BRIGHT 0:OVER 0:INVERSE 0:FLASH 0:CLS :BEEP .5,30
2423 DIM g(7):LET mm=7:LET vv=0:LET g(1)=28:LET g(2)=60:LET g(3)=92:LET g(4)=128:LET g(5)=164:LET g(6)=196:LET g(7)=228
2424 LET ab=28:GO TO 6050
2430 IF a$="c" OR a$="C" THEN GO TO 2438
2431 GO TO 2370
2438 COPY :BEEP .5,30:PRINT AT 18,6;" ":GO TO 2380
2500 BORDER 0:PAPER 0:BRIGHT 1:INK 4:INVERSE 0:FLASH 0:OVER 0:CLS
2501 LET y=0:LET n=0
2502 PRINT AT 17,2;"CITY POINTS.................."; AT 19,2;"MISSILE POINTS..............."
2510 PRINT AT 0,10;"BONUS POINTS"
2511 FOR a=1 TO mm:IF g(a)=128 THEN GO TO 2513
2512 NEXT a:GO TO 2520
2513 FOR w=a TO mm-1:LET g(w)=g(w+1):NEXT w:LET mm=mm-1
2520 PRINT AT 3,5;"CITIES REMAINING"
2525 PRINT AT 5,7;"NONE"
2530 FOR a=1 TO mm
2540 PRINT AT 5,4*a-1;"\a\b\c "
2542 LET y=y+2000:PRINT AT 17,30- LEN STR$ y;y:BEEP .025,30
2550 NEXT a
2560 PRINT AT 8,5;"MISSILES REMAINING"
2562 IF t >=30 THEN PRINT AT 10,7;"NONE"
2565 LET c=0:LET w=100
2570 FOR a=1 TO (30-t)
2580 PLOT a*15+10-c,w:DRAW -1,-1:DRAW -1,-2:DRAW 0,-5:DRAW -2,-2:DRAW 2,-4:DRAW 0,-5:DRAW -2,-2:DRAW 0,-3:DRAW 6,-2:DRAW 0,1
2586 LET n=n+500:PRINT AT 19,30- LEN STR$ n;n:BEEP .025,35
2588 IF a=15 THEN LET w=70
2589 IF a=15 THEN LET c=225
2590 NEXT a
2600 LET ss=ss+n+y:PRINT AT 21,2;"NEW SCORE...................."; AT 21,30- LEN STR$ ss;ss
2605 IF vv=2 THEN GO TO 2700
2610 IF ss >=100000 THEN GO TO 2640
2620 IF ss >=50000 THEN GO TO 2640
2630 GO TO 2700
2640 IF vv=1 AND ss<100000 THEN GO TO 2700
2642 LET vv=vv+1:IF mm >=6 THEN GO TO 2700
2645 LET mm=mm+1
2650 LET g(mm)=ww
2660 PRINT FLASH 1; INK 6; AT 1,9;"BONUS CITY \a\b\c"
2700 FOR a=1 TO 50:NEXT a:INPUT "Press ENTER to continue....";a$
2704 IF xx=6 THEN GO TO 2717
2705 IF xx=4 THEN GO TO 2715
2710 LET XX=4:LET PP=34:INK 0:PAPER 4:BORDER 4:OVER 0:INVERSE 0:BRIGHT 0:FLASH 0:CLS
2711 GO TO 2720
2715 LET XX=6:LET PP=50:INK 0:PAPER 6:BORDER 6:OVER 0:INVERSE 0:BRIGHT 0:FLASH 0:CLS
2716 GO TO 2720
2717 LET xx=5:LET pp=42:INK 0:PAPER 5:BORDER 5:OVER 0:INVERSE 0:BRIGHT 0:FLASH 0:CLS
2720 FOR a=1 TO mm:LET tt=(g(a)+3)/8-2
2730 LET jj=jj+2:LET ab=ab+1:PRINT AT 21,tt;"\a\b\c":NEXT a
2735 LET mm=mm+1:LET g(mm)=128
2740 PLOT 0,0:DRAW 255,0
2750 GO SUB 6213
2760 GO TO 20
3000 IF ad=1 THEN GO TO 160
3001 LET ad=1:INK 8
3005 LET ac=0
3006 GO TO 132
3010 LET ac=ac+1
3011 PRINT AT 11,ac;"\q\r\s"
3020 IF ATTR (11,ac+2)=pp THEN GO TO 5000
3025 IF RND>.3 THEN GO TO 3050
3030 IF ac>27 THEN GO TO 3050
3035 LET ae=16+ac*8:LET af=(ac+2)/4
3040 IF ae>g(af)-6 AND ae<g(af)+4 THEN GO TO 3100
3050 PRINT AT 11,ac;" \n\o"
3055 GO TO 132
3060 IF ac=29 THEN LET ad=0
3070 IF ad=1 THEN GO TO 3010
3075 PRINT AT 11,0;" "; AT y,x;"X"
3080 GO TO 132
3100 IF yy >=ab THEN LET ii=1
3105 LET b=b+1
3110 IF b>10 THEN LET b=b-1
3120 IF b>10 THEN GO TO 3050
3130 LET yy=yy+1
3140 LET f(b)=1
3150 LET d(b)=g(af)-15.4
3160 LET e(b)=75:LET i(b,1)=d(b):LET i(b,2)=80
3165 PLOT d(b)-1,80:DRAW 1,-5
3170 GO TO 3050
4000 FOR a=0 TO 151
4010 READ b
4020 POKE USR "\a"+a,b
4030 NEXT a
4035 GO TO 11
4040 DATA 6,6,22,30,95,95,127,255,28,28,92,92,125,125,253,255
4050 DATA 0,0,64,96,104,232,250,255,7,7,15,15,15,15,7,7
4060 DATA 224,224,240,240,240,240,224,224,0,0,0,0,0,0,1,3
4070 DATA 0,0,0,0,60,255,255,255,0,0,0,0,0,0,128,192
4080 DATA 3,1,0,0,0,0,0,0,255,255,255,60,0,0,0,0
4090 DATA 192,128,0,0,0,0,0,0,60,126,255,255,255,255,126,60
4100 DATA 0,0,24,60,60,24,0,0,192,244,127,63,127,195,7,14
4110 DATA 192,224,240,252,255,240,192,0,60,126,90,126,60,219,60,195
4120 DATA 12,14,7,3,7,12,0,0,12,14,255,255,255,63,124,224
4130 DATA 0,0,0,192,240,0,0,0
5000 LET ai=83:LET ah=ac*8+20
5001 PRINT AT 11,0;" "; AT y,x;"X"
5002 LET aj=1
5003 LET ss=ss+3000:PRINT AT 0,10;" "; OVER 1; INK 9; AT 0,10;"SCORE ";ss
5004 GO TO 5010
5005 LET ah=d(a):LET ai=e(a)
5010 IF ai-10>174 OR ah-10<0 OR ah+10>255 THEN GO TO 5013
5011 GO TO 5014
5013 BEEP .025,20:GO TO 5190
5014 LET ak=0
5015 LET ak=ak+1
5016 FOR w=1 TO 5 STEP 2
5020 PLOT ah-w,ai-w:DRAW 1,0
5025 PLOT ah-w*2,ai:DRAW 1,0
5030 PLOT ah+w,ai-w:DRAW 1,0
5035 PLOT ah+w*2,ai:DRAW 1,0
5040 PLOT ah+w,ai+w:DRAW 1,0
5045 PLOT ah,ai+w*2:DRAW 1,0
5050 PLOT ah-w,ai+w:DRAW 1,0
5055 PLOT ah,ai-w*2:DRAW 1,0
5180 NEXT w
5182 IF ak=1 THEN INVERSE 1
5183 IF ak=1 THEN BEEP .025,20
5184 IF ak=1 THEN GO TO 5015
5185 INVERSE 0
5190 IF aj=1 THEN LET ad=0
5192 IF aj <>1 THEN GO TO 8002
5195 LET aj=0
5200 GO TO 100
6000 IF t >=30 THEN GO TO 7069
6001 OVER 1
6002 LET o=x*8-112-kk:LET r=170-y*8-ll
6003 PLOT oo,qq:DRAW o,r
6004 PLOT oo,qq:DRAW o,r
6008 OVER 0
6010 INVERSE 1:PLOT oo-1,qq:DRAW 2,0:PLOT oo,qq:DRAW 0,5
6015 IF nn=0 THEN LET ll=ll-4
6018 IF nn=0 THEN LET kk=kk+21-ll*1.5
6020 IF nn=0 THEN LET nn=24-ll*1.5
6025 LET kk=kk-6
6030 LET nn=nn-6
6040 LET oo=kk+116:LET qq=ll+2
6045 IF t<19 AND ll<0 AND kk=21 THEN GO SUB 6214
6049 INVERSE 0:GO TO 7000
6050 INK 0:PAPER 5:BORDER 5:BRIGHT 0:OVER 0:INVERSE 0:CLS :PRINT AT 10,4;"Do you want instructions? <y> or <n>"
6051 PAUSE 0:IF INKEY$="y" OR INKEY$="Y" THEN GO TO 6054
6052 IF INKEY$="" THEN GO TO 6052
6053 GO TO 6198
6054 CLS :PRINT AT 0,9;"YOUR BRIEFING"
6055 PRINT '"You are in charge of a surface- to-air Guided Missile Base at the outbreak of Nuclear War..."
6056 PRINT '"Your job is to defend 6 Cities and your own missile Launching site from the nuclear missles.."
6057 PRINT '"You have THIRTY Surface to air missiles, up to 10 of these willbe at the Launching site at any time, if the site is hit, all missiles present, will be destroyed."
6058 PRINT '" Be Careful, you are the last line of defence, the longer you can hold off the attack the morepeople can be evacuated."
6059 PRINT #1; AT 1,2;"PRESS ANY KEY TO CONTINUE...":PAUSE 0
6060 CLS :PRINT AT 0,0;"TECHNICAL BRIEF"
6061 PRINT '"THE SURFACE TO AIR MISSILES ARE GUIDED BY MOVING THE ""X"" TO THE POINT THAT THE MISSILE IS TO EXPLODE... TO DESTROY A NUCLEAR MISSILE OR PLANE, YOU CAN MOVE THE ""X"" IN 8 DIRECTIONS.":FLASH 1:PRINT INK 0; PAPER 6;"REMEMBER: Q=LEFT,E= RIGHT, Y-P= UP, H-NL =DOWN, Z-V =FIRE ":FLASH 0
6073 PRINT #1; AT 1,2;"PRESS ANY KEY TO CONTINUE...":PAUSE 0
6074 PAPER 5:CLS :PRINT AT 0,12;"SCORING"
6075 PRINT '"For each missile shot down you get 1000 points. For each city and each Surface-to-Air Missile remaining intact at the end of a barage you receive bonus points, after 50,000 & 100,000 you receive a bonus city..."
6076 PRINT '"You can shoot missiles down while moving your sight ""X"" in any of 8 directions. Experience will show you that it is best to fire your missiles into the path of your target."
6077 PRINT ''"Good Luck. You'll need it."
6078 PRINT #1, AT 1,2;"PRESS ANY KEY TO CONTINUE...":PAUSE 0:GO TO 6198
6080 PRINT AT 3,14;"\..\::\.."; AT 4,12;"\..\::\::\::\::\::\.."; AT 5,11;"\ :\::\::\::\::\::\::\::\: "
6081 PRINT AT 6,11;"\::\::\::\::\::\::\::\::\::"; AT 7,10;"\ :\::\::\::\::\::\::\::\::\::\: "; AT 8,11;"\::\::\::\::\::\::\::\::\::"
6082 PRINT AT 9,11;"\ :\::\::\::\::\::\::\::\: "; AT 10,12;"\''\::\::\::\::\::\''"; AT 11,14;"\::\::\::"
6083 PRINT AT 12,13;"\ .\::\::\::\. "; AT 13,11;"\ .\'.\'.\::\::\::\.'\.'\. "; AT 14,12;"\' \' \::\::\::\ '\ '"
6084 PRINT AT 15,13;"\ .\::\::\::\. "; AT 16,12;"\ .\.:\::\::\::\:.\. "; AT 17,8;"\ .\..\.:\::\::\::\::\::\::\::\::\::\..\.."
6085 PRINT AT 18,7;"\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''"
6086 PLOT 0,0:DRAW 255,0:DRAW 0,175:DRAW -255,0:DRAW 0,-175:
6087 PLOT 4,4:DRAW 247,0:DRAW 0,167:DRAW -247,0:DRAW 0,-167
6088 PLOT 8,8:DRAW 239,0:DRAW 0,159:DRAW -239,0:DRAW 0,-159
6089 PRINT FLASH 1; INK 2; AT 19,9;"STOP THE TAPE"
6090 PRINT INK 4; INVERSE 1; AT 6,12;"NUCLEAR"; AT 7,12;"ATTACK."
6091 FOR a=44 TO 208 STEP 159
6092 PLOT a,150:DRAW -5,-9, PI/2:DRAW 0,-40:DRAW -10,-10:DRAW 5,-5:DRAW 5,-10:DRAW 0,-20:DRAW -10,-10:DRAW 0,-10:DRAW 10,-5
6093 PLOT a,150:DRAW 5,-9, PI/2:DRAW 0,-40:DRAW 10,-10:DRAW -5,-5:DRAW -5,-10:DRAW 0,-20:DRAW 10,-10:DRAW 0,-10:DRAW -10,-5:DRAW 0,2:DRAW -10,0:DRAW 0,-2
6094 PLOT a,101:DRAW 0,-25:PLOT a,56:DRAW 0,-25
6095 PRINT FLASH 1; INK 3; AT 18, INT (a/8);"\.'"; AT 19, INT (a/8);"\'."
6096 INK 5:PLOT a-2,137:DRAW 0,-3:DRAW 1,0:DRAW 1,1:DRAW 0,2:DRAW -1,1:DRAW -1,0:PLOT a-2,128:DRAW 0,3:DRAW 1,1:DRAW 1,-1:DRAW 0,-3:DRAW 0,2:DRAW -1,0
6097 PLOT a-2,122:DRAW 0,4:DRAW 2,-4:DRAW 0,4:PLOT a,120:DRAW -1,0:DRAW -1,-1:DRAW 0,-2:DRAW 1,-1:DRAW 1,0:DRAW 0,2
6098 PLOT a,114:DRAW -2,0:DRAW 0,-2:DRAW 2,0:DRAW -2,0:DRAW 0,-2:DRAW 2,0:PLOT a-2,104:DRAW 0,4:DRAW 1,0:DRAW 1,-1:DRAW -1,-1:DRAW 1,-1:DRAW 0,-1
6099 INK 7:PLOT a-4,144:DRAW 8,0:PLOT a-4,142:DRAW 8,0
6100 PRINT AT 13, INT (a/8);"\p"
6101 PLOT a-4,61:DRAW 1,0:DRAW 1,-1:DRAW 1,0:DRAW 1,1:DRAW 1,0:DRAW 1,-1:DRAW 1,0:DRAW 1,1:DRAW 1,0
6102 PLOT a-4,59:DRAW 1,0:DRAW 1,-1:DRAW 1,0:DRAW 1,1:DRAW 1,0:DRAW 1,-1:DRAW 1,0:DRAW 1,1:DRAW 1,0
6105 NEXT a
6108 PRINT #1; AT 1,3;"PRESS ANY KEY TO BEGIN...."
6110 FOR w=50 TO 35 STEP -1:IF INKEY$="" THEN GO TO 6130
6120 FOR w=1 TO 10:RUN
6130 BEEP .015,w:BEEP .025, RND*100-35:BEEP .025, RND*50-25:BEEP .025, RND*20-10:NEXT w
6140 FOR w=1 TO 10:NEXT w:PAUSE 0:RUN
6198 LET ak=1:CLS :PRINT AT 10,8;"""NUCLEAR ATTACK"""
6199 LET SS=-1:PRINT TAB 5;"Press any key to Start":FOR w=-1 TO 12:BEEP .025, RND*100-40:BEEP .025,w*5:NEXT w:PAUSE 0:CLS
6200 FOR z=2 TO 12 STEP 4
6210 PRINT AT 21,z;"\a\b\c"
6211 PRINT AT 21,z+17;"\a\b\c"
6212 NEXT z
6213 LET ak=1:GO TO 6320
6214 INVERSE 0:LET wwww=0
6215 FOR a=0 TO 3
6216 FOR z=a+wwww TO wwww
6217 OVER 1:PLOT 115+(z*6),2+(a*4):DRAW 2,0:PLOT 116+(z*6),2+(a*4):DRAW 0,5
6218 NEXT z
6219 LET wwww=wwww-.5
6220 NEXT a:OVER 0
6221 IF ak=1 THEN GO TO 6229
6222 IF t >=19 THEN GO TO 6225
6223 POKE 23280,63:POKE 23281,63:POKE 23282,63
6224 GO TO 6229
6225 POKE 23276,63:POKE 23277,63:POKE 23278,63
6229 LET ak=0
6230 PLOT 0,0:DRAW 255,0
6240 LET kk=9:LET ll=12:LET nn=0:LET oo=125:LET qq=14
6290 IF ss=-1 THEN GO TO 20
6300 RETURN
6310 GO TO 7000
6330 RESTORE 6430
6340 PLOT 0,0:DRAW 255,0
6350 FOR a=20687 TO 22223 STEP 256
6360 POKE a,60
6370 NEXT a
6380 POKE 22479,126
6390 FOR a=20719 TO 22299 STEP 256
6400 READ b
6410 POKE a,b
6420 NEXT a
6430 DATA 255,231,231,231,231,195,129
6440 FOR a=20716 TO 22296 STEP 256
6450 READ b,c,d
6460 POKE a,b:POKE a+1,c:POKE a+2,d:POKE a+4,b:POKE a+5,c:POKE a+6,d
6470 NEXT a
6480 DATA 132,33,8,115,156,231,132,33,8
6490 DATA 0,0,0,132,33,8,114,156,231,132,33,8
6500 POKE 23247,8*xx+7
6510 POKE 23279,8*xx+7
6515 FOR a=0 TO 6
6520 POKE 23276+a,56
6530 IF a=2 THEN LET a=3
6540 NEXT a
6900 GO TO 6214
7000 IF t >=30 THEN GO TO 7069
7001 LET s=s+1:LET t=t+1:LET m(s)=y:LET q(s)=x
7005 LET bb=1
7010 INK 2:OVER 1
7022 FOR w=aa TO s
7025 PRINT AT m(w),q(w);"\m"
7030 NEXT w
7031 LET aa=aa+(w-aa)
7032 BEEP .01,35
7035 FOR w=cc TO s
7038 PRINT AT m(w),q(w);"\m"
7040 PRINT AT m(w),q(w);"\l"
7045 NEXT w
7050 BEEP .01,35
7058 LET cc=cc+(w-cc)
7060 FOR w=ee TO s
7062 PRINT AT m(w),q(w);"\l"
7065 PRINT AT m(w),q(w)-1;" \::\:: "; AT m(w)-1,q(w)-1;"\f\g\h"; AT m(w)+1,q(w)-1;"\i\j\k"
7066 NEXT w
7067 BEEP .01,35
7068 LET ee=ee+(w-ee)
7069 INK 8:OVER 0:GO SUB 100
7070 INK 2:OVER 1
7071 FOR w=ff TO s
7072 PRINT AT m(w),q(w);"\l"
7075 PRINT AT m(w),q(w)-1;" \::\:: "; AT m(w)-1,q(w)-1;"\f\g\h"; AT m(w)+1,q(w)-1;"\i\j\k"
7080 NEXT w
7081 LET ff=ff+(w-ff)
7082 IF s=30 THEN GO TO 7084
7083 INK 8:OVER 0:GO SUB 100
7084 INK 2:OVER 1
7085 FOR w=gg TO s
7088 PRINT AT m(w),q(w);"\l"
7090 PRINT AT m(w),q(w);"\m"
7095 NEXT w
7096 LET gg=gg+(w-gg)
7097 IF s=30 THEN GO TO 7099
7098 INK 8:OVER 0:GO SUB 100
7099 INK 0:OVER 0
7100 FOR w=hh TO s
7105 PRINT AT m(w),q(w)-1;" "; AT m(w)-1,q(w)-1;" "
7106 IF m(w) >=20 THEN GO TO 7108
7107 PRINT AT m(w)+1,q(w)-1;" ":GO TO 7110
7109 PRINT OVER 1; AT m(w)+1,q(w)-1;" "
7110 NEXT w
7120 LET hh=hh+(w-hh)
7130 PRINT INK 0; OVER 0; AT y,x;"X"
7135 PRINT AT 0,10;" "; OVER 1; INK 9; AT 0,10;"SCORE ";SS
7140 LET BB=0
7150 INK 0:INVERSE 0:OVER 0:GO TO 100
7200 LET dd=1:OVER 0
7210 FOR w=1 TO mm
7220 IF d(a)<g(w)+8 AND d(a)>g(w)-8 THEN GO TO 7231
7230 NEXT w:GO TO 7996
7235 LET zz=w
7240 LET tt=(d(a)+3)/8-2
7250 PRINT AT 19,tt+1;" "; AT 20,tt;" "; AT 21,tt;" "
7260 LET uu=g(w)
7268 PLOT 0,0:DRAW 255,0
7270 PLOT uu-4,1:DRAW 7,0:PLOT uu-2,2:DRAW 3,0
7275 PLOT uu-5,2:DRAW 9,0:PLOT uu-7,1:DRAW 13,0:PLOT uu-7,1:DRAW 13,0:PLOT uu-2,3:DRAW 3,0
7280 PLOT uu-4,3:DRAW 7,0:PLOT uu-6,2:DRAW 11,0:PLOT uu-2,4:DRAW 3,0:PLOT uu-9,1:DRAW 17,0:PLOT uu-1,5:PLOT uu,5
7285 PLOT uu-5,4:DRAW 9,0:PLOT uu-6,3:DRAW 11,0:PLOT uu-4,5:DRAW 7,0:PLOT uu-8,2:DRAW 15,0:PLOT uu-3,6:DRAW 5,0:PLOT uu-11,1:DRAW 21,0:PLOT uu-1,7:PLOT uu,7
7286 OVER 1:INK 8:PAPER 7:BRIGHT 1:PRINT AT 21,tt-1;" "
7287 PRINT AT 20,tt-2;" "; AT 19,tt-1;" "; AT 18,tt;" "; AT 17,tt+1;" "
7288 BRIGHT 0:OVER 1:INK 8:PAPER xx:PRINT AT 21,tt-1;" "
7290 PRINT AT 20,tt-2;" "; AT 19,tt-1;" "; AT 18,tt;" "; AT 17,tt+1;" "
7292 OVER 0
7294 PLOT uu-7,5:DRAW 13,0:PLOT uu-7,6:DRAW 13,0:PLOT uu-8,4:DRAW 15,0:PLOT uu-6,7:DRAW 11,0:PLOT uu-8,3:DRAW 15,0
7295 PLOT uu-5,8:DRAW 9,0:PLOT uu-9,2:DRAW 17,0:PLOT uu-3,9:DRAW 5,0:PLOT uu-13,1:DRAW 25,0:PLOT uu-1,10:PLOT uu,10
7300 PLOT uu-8,7:DRAW 1,0:PLOT uu+6,7:DRAW 1,0:PLOT uu-9,6:DRAW 1,0:PLOT uu+7,6:DRAW 1,0:PLOT uu-8,8:DRAW 2,0:PLOT uu+5,8:DRAW 2,0
7305 PLOT uu-9,5:DRAW 1,0:PLOT uu+7,5:DRAW 1,0:PLOT uu-7,9:DRAW 13,0:PLOT uu-7,10:DRAW 13,0:PLOT uu-6,11:DRAW 11,0:PLOT uu-11,2:DRAW 1,0
7310 PLOT uu+8,2:DRAW 1,0:PLOT uu-4,12:DRAW 7,0:PLOT uu-15,1:DRAW 1,0:PLOT uu+13,1:DRAW 1,0:PLOT uu-2,13:DRAW 3,0
7315 PLOT uu-10,8:DRAW 1,0:PLOT uu+8,8:DRAW 1,0:PLOT uu-9,9:DRAW 1,0:PLOT uu+7,9:DRAW 1,0:PLOT uu-10,7:DRAW 1,0:PLOT uu+8,7:DRAW 1,0:PLOT uu-9,10:DRAW 1,0:PLOT uu+7,10:DRAW 1,0:
7320 PLOT uu-8,11:DRAW 1,0:PLOT uu+6,11:DRAW 1,0:PLOT uu-8,12:DRAW 15,0:PLOT uu-7,13:DRAW 13,0
7325 PLOT uu-10,3:DRAW 1,0:PLOT uu+7,3:DRAW 1,0:PLOT uu-5,14:DRAW 9,0:PLOT uu-14,2:DRAW 2,0:PLOT uu+10,2:DRAW 2,0
7330 PLOT uu-3,15:DRAW 5,0:PLOT uu-1,16:PLOT uu,16:PLOT uu-17,1:DRAW 1,0:PLOT uu+14,1:DRAW 1,0
7335 INVERSE 1:PLOT uu-10,8:DRAW 0,-1:DRAW 1,0:DRAW 0,-2:DRAW 1,0:DRAW 0,-1:DRAW 2,0:PLOT uu+9,8:DRAW 0,-1:DRAW -1,0:DRAW 0,-2:DRAW -1,0:DRAW 0,-1:DRAW -2,0
7340 INVERSE 0:PLOT uu-10,10:DRAW 0,1:DRAW 1,0:DRAW 0,2:DRAW 1,0:DRAW 0,1:DRAW 2,0:PLOT uu+9,10:DRAW 0,1:DRAW -1,0:DRAW 0,2:DRAW -1,0:DRAW 0,1:DRAW -2,0
7345 PLOT uu-8,15:DRAW 15,0:PLOT uu-7,16:DRAW 13,0:PLOT uu=5,17:DRAW 9,0:PLOT uu-3,18:DRAW 5,0:PLOT uu-1,19:PLOT uu,19
7350 INVERSE 1:PLOT uu-10,11:DRAW 0,-1:DRAW 1,0:DRAW 0,-2:DRAW 1,0:DRAW 0,-1:DRAW 2,0:PLOT uu+9,11:DRAW 0,-1:DRAW -1,0:DRAW 0,-2:DRAW -1,0:DRAW 0,-1:DRAW -2,0
7352 PLOT uu-8,6:DRAW 2,0:PLOT uu+4,6:DRAW 3,0
7355 INVERSE 0:PLOT uu-10,13:DRAW 0,1:DRAW 1,0:DRAW 0,2:DRAW 1,0:DRAW 0,1:DRAW 2,0:PLOT uu+9,13:DRAW 0,1:DRAW -1,0:DRAW 0,2:DRAW -1,0:DRAW 0,1:DRAW -2,0
7360 PLOT uu-8,18:DRAW 15,0:PLOT uu-7,19:DRAW 13,0
7365 PLOT uu-5,20:DRAW 9,0:PLOT uu-3,21:DRAW 5,0:PLOT uu-1,22:PLOT uu,22:PLOT uu-6,4:PLOT uu+5,4
7370 INVERSE 1:PLOT uu-10,14:DRAW 0,-1:DRAW 1,0:DRAW 0,-2:DRAW 1,0:DRAW 0,-1:DRAW 2,0:PLOT uu+9,14:DRAW 0,-1:DRAW -1,0:DRAW 0,-2:DRAW -1,0:DRAW 0,-1:DRAW -2,0
7375 INVERSE 0:PLOT uu-10,16:DRAW 0,1:DRAW 1,0:DRAW 0,2:DRAW 1,0:DRAW 0,1:DRAW 2,0:PLOT uu+9,16:DRAW 0,1:DRAW -1,0:DRAW 0,2:DRAW -1,0:DRAW 0,1:DRAW -2,0
7380 PLOT uu-8,21:DRAW 15,0:PLOT uu-7,22:DRAW 13,0
7385 PLOT uu-5,23:DRAW 9,0:PLOT uu-3,24:DRAW 5,0:PLOT uu-1,25:PLOT uu,25:PLOT uu-6,6:DRAW 0,-1:PLOT uu+5,6:DRAW -1,0
7390 INVERSE 1:PLOT uu-10,17:DRAW 0,-1:DRAW 1,0:DRAW 0,-2:DRAW 1,0:DRAW 0,-1:DRAW 2,0:PLOT uu+9,17:DRAW 0,-1:DRAW -1,0:DRAW 0,-2:DRAW -1,0:DRAW 0,-1:DRAW -2,0
7392 PLOT uu-8,12:DRAW 3,0:PLOT uu+4,12:DRAW 3,0
7395 INVERSE 0:PLOT uu-10,19:DRAW 0,1:DRAW 0,2:DRAW 1,0:DRAW 0,1:DRAW 2,0:PLOT uu+9,19:DRAW 0,1:DRAW -1,0:DRAW 0,2:DRAW -1,0:DRAW 0,1:DRAW -2,0
7400 PLOT uu-8,24:DRAW 15,0:PLOT uu-7,25:DRAW 13,0
7402 PLOT uu-8,10:DRAW 3,0:PLOT uu+4,10:DRAW 4,0
7405 PLOT uu-5,26:DRAW 9,0:PLOT uu-3,27:DRAW 5,0:PLOT uu-1,28:PLOT uu,28:INVERSE 1:PLOT uu-7,5:DRAW 1,0:DRAW 0,1:PLOT uu+6,5:DRAW -1,0:DRAW 0,1
7410 PLOT uu-5,7:DRAW 0,-2:PLOT uu+4,7:DRAW 0,-2
7415 PLOT uu-10,20:DRAW 0,-1:DRAW 1,0:DRAW 0,-2:DRAW 1,0:DRAW 0,-1:DRAW 2,0:PLOT uu+9,20:DRAW 0,-1:DRAW -1,0:DRAW 0,-2:DRAW -1,0:DRAW 0,-1:DRAW -2,0
7420 INVERSE 0:PLOT uu-10,22:DRAW 0,1:DRAW 1,0:DRAW 0,2:DRAW 1,0:DRAW 0,1:DRAW 2,0:PLOT uu+9,22:DRAW 0,1:DRAW -1,0:DRAW 0,2:DRAW -1,0:DRAW 0,1:DRAW -2,0
7425 PLOT uu-8,27:DRAW 15,0:PLOT uu-7,28:DRAW 13,0
7430 PLOT uu-5,29:DRAW 9,0:PLOT uu-3,30:DRAW 5,0:PLOT uu-1,28:PLOT uu,31:INVERSE 1:PLOT uu-8,15:DRAW 4,0:PLOT uu+3,15:DRAW 4,0:PLOT uu-7,14:DRAW 3,0:PLOT uu+3,14:DRAW 3,0
7435 PLOT uu+8,10:PLOT uu-4,7:DRAW 0,1:DRAW -3,0:DRAW -1,1:DRAW 1,1:DRAW 1,-1:DRAW 1,1:DRAW 1,-1:PLOT uu+3,7:DRAW 0,1:DRAW 3,0:DRAW 1,1:DRAW -1,1:DRAW -1,-1:DRAW -1,1:DRAW -1,-1:PLOT uu-6,11:DRAW 2,2:PLOT uu+5,11:DRAW -2,2
7440 PLOT uu-4,11:PLOT uu+3,11
7450 INVERSE 1:PLOT uu-3,13:DRAW 0,1:DRAW 1,0:DRAW 1,-1:DRAW -2,-2:PLOT uu,13:DRAW 1,1:DRAW 1,0:DRAW -5,-5
7460 PLOT uu-4,6:DRAW 6,6:PLOT uu-4,4:DRAW 6,6:PLOT uu-2,4:DRAW 4,4:PLOT uu,4:DRAW 2,2
7470 PLOT uu+2,4:DRAW 1,1:PLOT uu+4,4:DRAW 1,0:PLOT uu-6,4:PLOT uu-10,3:DRAW 19,0
7480 FOR w=0 TO 3
7490 IF w=1 THEN GO TO 7550
7500 PLOT uu-10,26-w:DRAW 9,9:DRAW 10,-10:PLOT uu-10,22-w:DRAW 9,9:DRAW 10,-10:DRAW -4,-4:PLOT uu-8,20-w:DRAW 7,7:DRAW 8,-8
7510 PLOT uu-7,17-w:DRAW 6,6:DRAW 5,-5:PLOT uu-4,16-w:DRAW 3,3:DRAW 3,-3:PLOT uu-8,22-w:DRAW 7,-7:DRAW 9,9
7520 PLOT uu-8,26-w:DRAW 7,-7:DRAW 7,7:PLOT uu-6,28-w:DRAW 5,-5:DRAW 5,5:PLOT uu-4,30-w:DRAW 3,-3:DRAW 3,3
7530 NEXT w
7540 INVERSE 0:GO TO 7980
7550 PLOT uu-14,2:DRAW 27,0
7560 PLOT uu-2,13:DRAW 4,0:PLOT uu-3,8:DRAW 4,0:DRAW 1,-1:DRAW -4,0:DRAW -1,-1:DRAW 6,0:DRAW -1,-1:DRAW -6,0:DRAW -1,-1:DRAW 8,0
7600 PLOT uu-17,1:DRAW 33,0
7610 PLOT uu-5,13:DRAW 1,-1:DRAW 7,0:DRAW 1,1:PLOT uu-7,11:DRAW 13,0:DRAW 1,-1:DRAW -15,0:DRAW 1,-1:DRAW 13,0
7620 GO TO 7500
7985 IF g(zz)=128 THEN LET t=30-(INT (2.9-t/10))*10
7986 IF g(zz)=128 AND t<30 THEN LET rr=1
7987 IF g(zz)=128 AND t<30 THEN GO TO 8002
7989 IF g(zz) <>128 THEN LET ww=g(w)
7990 FOR w=zz TO mm-1:LET g(w)=g(w+1):NEXT w:LET mm=mm-1
7996 PLOT 0,0:DRAW 255,0
7999 GO TO 8002
8000 LET ss=ss+1000
8001 GO TO 5005
8002 OVER 0:INVERSE 1:PLOT i(a,1),i(a,2):DRAW d(a)-i(a,1),e(a)-i(a,2)
8010 PLOT i(a,1)+(i(a,1)<255),i(a,2)-(i(a,1)=255):DRAW d(a)-i(a,1),e(a)-i(a,2)
8020 PLOT i(a,1)-(i(a,1)>0),i(a,2)-(i(a,1)=0):DRAW d(a)-i(a,1),e(a)-i(a,2):INVERSE 0
8030 PRINT AT 0,10;" "; OVER 1; INK 9; AT 0,10;"SCORE ";ss
8035 IF dd=1 THEN PRINT AT y,x;"X"
8038 LET dd=0
8040 FOR w=a TO b
8045 LET h=w+1
8050 LET e(w)=e(h)
8053 LET d(w)=d(h)
8056 LET f(w)=f(h)
8058 LET i(w,1)=i(h,1)
8059 LET i(w,2)=i(h,2)
8060 NEXT w
8070 LET b=b-1
8080 IF rr=1 THEN GO SUB 6214
8090 LET rr=0
8200 GO TO 100
9000 STOP
9996 RESTORE :CLEAR
9997 REM CLEAR :RANDOMIZE USR 100:SAVE "MISILE.B1" LINE 1
9998 REM CLEAR :RANDOMIZE USR 100:LOAD "L.B1"
Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.
