Five…four …three…two…one… lift off!
You have just left Phobos, one of the two moons of the planet Mars, and now you must land on Deimos, the other moon.
But landing here isn't an easy task.
You must navigate your moonshuttle through a deadly asteroid field.
Using your four thrusters, U to go up, J to move right, H to move left and N to go down, you can maneuver through your descent and avoid the asteroids.
To keep track of your fuel and energy consumption, read-outs of this information are given periodically.
A type-in BASIC program by P.A. Roberts and converted to Tandy Color Computers with 16K RAM and Extended Color BASIC by Derek Simonson, published in TRS-80 Colour Computer Space Adventures.
Please note - this played through without crashing but there may still be typoes in this code.
10 PCLEAR5 20 DIM SH(20),BL(20),B(36) 30 SY=9 40 E=30 50 FORGP=0TO35:READB(GP):NEXT 60 DATA28,147,50,30,36,188,72,90,16,182,30,120,112,111,130,20,140,169,164,50,174,65,196,20,204,135,219,40,180,185,203,60,84,172,97,60 70 CLS:PRINT:PRINT 80 FORMC=1TO11 90 READCH 100 FORGP=22TO10STEP-1 110 DATA77,79,79,78,83,72,85,84,84,76,69 120 POKEGP+1054+MC,CH 130 IFMC=11THENPOKEGP+1055+MC,96 140 NEXT:NEXT 150 PRINT:PRINT:PRINT" BY P.A. ROBERTS" 160 PRINT" CONVERSION BY DEREK SIMONSON" 170 PRINT:PRINTTAB(6)"INSTRUCTIONS(Y/N)" 180 RE$=INKEY$:IFRE$=""THEN180ELSEIFRE$="Y"THENGOSUB1030 190 PMODE3,1:PCLS 200 DRAW"BM20,20C6R2F2D4G2BR2BD1U1BL2L2BL2BD1U1BR2H2U4E2" 210 PAINT(22,22),6,6 220 GET(17,20)-(26,29),SH,G 230 PUT(50,50)-(59,59),SH,PSET 240 PCLS:GET(16,20)-(25,29),BL,G 250 COLOR8,5:FORGP=0TO35STEP4:LINE(B(GP),B(GP+1))-(B(GP+2),B(GP+1)),PSET:NEXT 260 DRAW"BM0,2S4C6R4L4D2R2L2D2BR9BD1R60U6L60D6" 270 DRAW"BM0,100C7R6F8D12F12D16R20U28H8U12E16R3E12F3D4F8D4G16D16F4D8F8D8G16L6H8L24G8D16R16F6R32E16R12U10E16U4H13U20E6F8R16E8R4F6R4F6G8L4F12G12L8D22R24E16R4H6E12H8E20H30E4U8R24D8F12D4F8G26F12R16F4G16L6G8D4H6G16F8R24E10F4E10F4E8R8U36H6E6U36G4U8G4U6E8R8" 280 PAINT(1,101),7,7 290 IFAF=1THEN320 300 PRINTTAB(10)"LEVEL(1-9)"; 310 RE$=INKEY$:IFRE$=""THEN310ELSEL=VAL(RE$) 320 PMODE0,5:PCLS:SCREEN1,1:FORGP=5TO1STEP-1 330 IFGP=5THENA$="BR2L2D2R2D2L2" 340 IFGP=4THENA$="D2R2U2D4" 350 IFGP=3THENA$="R2D2L1R1D2L2" 360 IFGP=2THENA$="R2D2L2D2R2" 370 IFGP=1THENA$="BR2D4" 380 PCLS:DRAW"BM127,95S12;XA$;" 390 SOUND20*GP,5 400 NEXT 410 GP=RND(230)+10 420 LX=GP:LY=SY 430 PMODE3,1:SCREEN1,1 440 FORSX=240TO GP STEP-1 450 PUT(SX+1,SY)-(SX+11,SY+9),BL,PSET 460 PUT(SX,SY)-(SX+9,SY+9),SH,PSET 470 NEXT 480 FORGP=1TO2*L:CIRCLE(RND(255),RND(70)),4,7:NEXT 490 RE$=INKEY$ 500 IFRE$="U"THEN560 510 IFRE$="J"THEN620 520 IFRE$="H"THEN680 530 IFRE$="N"THEN740 540 SY=SY+1:GOSUB800 550 GOTO490 560 GOSUB860:IFV=2THEN540 570 SY=SY-3 580 IFSY<9THENSY=9 590 GOSUB800 600 IFV=2THEN930 610 IFINKEY$<>"U"THEN490ELSE560 620 GOSUB 860:IFV=2THEN540 630 SX=SX+3 640 IFSX>240THENSX=240 650 GOSUB800 660 IFV=2THEN930 670 IFINKEY$<>"J"THEN490ELSE620 680 GOSUB860:IFV=2THEN540 690 SX=SX-3 700 IFSX<1THENSX=1 710 GOSUB800 720 IFV=2THEN930 730 IFINKEY$<>"H"THEN490ELSE680 740 GOSUB860:IFV=2THEN540 750 SY=SY+2 760 IFSY>240THENSY=240 770 GOSUB800 780 IFV=2THEN930 790 IFINKEY$<>"N"THEN490ELSE740 800 IF PPOINT(SX+9,SY+9)=7ORPPOINT(SX,SY+9)=7ORPPOINT(SX,SY)=7ORPPOINT(SX+9,SY)=7THEN910 810 IFPPOINT(SX+9,SY+9)=8 OR PPOINT(SX,SY+9)=8THEN930 820 PUT(LX,LY)-(LX+9,LY+9),BL,PSET 830 PUT(SX,SY)-(SX+9,SY+9),SH,PSET 840 LX=SX : LY=SY 850 RETURN 860 E=E-1 : IFE<=0THENV=2:E=0 870 IFE>57THENE=57 880 LINE(11,4)-(67,4),PRESET 890 LINE(11,4)-(11+E,4),PSET 900 RETURN 910 FORX=1TO60STEP4:CIRCLE(SX+4,SY+4),X,RND(3)+5:SOUNDX,1:NEXT 920 CLS:PRINT" YOU CRASHED YOUR SHUTTLE":PRINT"FINAL SCORE->"SC:GOTO1010 930 PLAY"T10DEFFED" 940 FORGP=0TO35STEP4:IFSY+9=B(GP+1)THENPT=B(GP+3):SC=SC+PT:E=E+10:ELSENEXT 950 CLS:PRINT"AMOUNT OF FUEL REMANING->"E 960 PRINT"POINTS FOR THIS LANDING->"PT 970 PRINT"CURRENT SCORE->"SC 980 PRINT"HIT <ENTER> WHEN READY FOR NEXT MISSION" 990 SY=9 1000 IFINKEY$=CHR$(13)THENAF=1:GOTO240ELSE1000 1010 PRINT"WOULD YOU LIKE TO PLAY AGAIN Y/N" 1020 RE$=INKEY$ : IFRE$=""THEN1020ELSEIFRE$="Y"THENRUNELSEEND 1030 CLS:PRINTTAB(9)"INSTRUCTIONS" 1040 PRINT:PRINTTAB(7)"DEPARTURE-PHOBOS" 1050 PRINTTAB(6)"DESTINATION-DEIMOS" 1060 PRINT:PRINTTAB(11)"ASSIGNMENT":PRINT"NAVIGATE YOUR SHUTTLE THROUGH ASTEROID FIELD WATCH YOUR ENERGY CONSUMPTION WHILE ATTEMPTING TO LAND ON FLAT AREAS" 1070 PRINT" USE THESE KEYS FOR THRUSTING":PRINTTAB(15)"U":PRINTTAB(14)"H J":PRINTTAB(15)"N" 1080 RETURN
Line 270 has an addtional “8” at the end of the draw statement to finish drawing to the screen edge so that the PAINT statement on the next line (280) does not flood the screen.
Line 1060 spacing is changed to break up the words on the screen differently, and the typographical error of the spelling of asteroid was corrected.
Add the following lines at the top to disable BREAK key checking and switch the SAM into high-speed mode:
1 IF PEEK(&H3EB9)<>&H32 THEN CLEAR200,&H3EB0:FOR I=&H82B9 TO &H831E:POKE I-&H4400,PEEK(I):NEXT ELSE 6 2 FORI=0TO2:POKE &H3EBD+I,18:NEXT:I=&H3F1E 3 POKE I,&H26:POKE I+1,3:POKE I+2,&H7E:POKE I+3,&H83:POKE I+4,&H22:POKE I+5,&H7E 4 POKE I+6,&HA4:POKE I+7,&H4C 5 POKE &H019A,&H39:POKE &H019B,&H3E:POKE &H019C,&HB9:POKE &H019A,&H7E 6 POKE 65495,0
And add the following to restore normal speed on exit:
1015 POKE65494,0
You can type-in and run the BASIC directly from command line with XRoar:
$ xroar -machine cocous MOONSHUT.BAS
You can create a virtual floppy disk to load and run from in MAME:
$ decb dskini MOONSHUT.DSK $ decb copy MOONSHUT.BAS MOONSHUT.DSK,MOONSHUT.BAS -t $ mame cocoe -ramsize 16K -window -resolution 1920x1080 -skip_gameinfo -flop1 MOONSHUT.DSK RUN"MOONSHUT
Requires a cocoe.zip ROM pack in ${HOME}/mame/roms and the Toolshed utilities to build the DECB disk image.