ACTION GAMES



MUNCH-MAN
by Andrew Hynes


'Munch-Man' is a new version of the popular arcade game 'Pac-Man'. The game, although written in BASIC, is enjoyably fast. You take the part of a hungry 'mouth' scurrying around a maze, eating dots to score points.

   There are three ghosts who chase and try to kill you, moving through walls to do so. In order to overcome the ghosts, make for the power pill situated in each of the four corners of the maze. Eat one and the ghosts turn yellow and run away. Eat a ghost and bonus points are yours. Note too that ghosts do not like tunnels. Once you have cleared a sheet, the dots are replaced. The game continues until you lose three lives. Happy eating!

   10  REM Munch-Man
   20  REM by A.Hynes
   30  REM BEEBUG
   40  REM VERSON P 1.0
   50 :
   60  *FX 11,1
   70  *FX 12,1
   80  ON ERROR GOTO 2140
   90  MODE5:VDU23,1,0;0;0;0;
  100  PROCCHARSET
  110  ENVELOPE 1,1,4,-4,4,10,20,10,126,0,0,-126,12
6,126
  120  H%=0:DIM maze$(19,24),ghost(2,2)
  130  REPEAT
  140  PRINTTAB(5,2)"MUNCHMAN"TAB(6,9)"*.....UP"TAB
(6,11)"?...DOWN"TAB(6,13)"Z...LEFT"TAB(6,15)"X..RIG
HT"
  150  VDU17,6,31,6,21,238,17,1,32,32,243,32,243,32
,243:PROCspace
  160  lives%=3:score%=0:sheet%=0:ghost=0:dir$=" "
  170   PROCsetupmaze:TIME=0:fruit=0:EAT=0
  180  COLOUR7:PRINTTAB(1,0)"Score"TAB(14)"High"
  190   PROCprintscore(0):PRINTTAB(19-LEN(STR$(H%))
,1);H%:COLOUR3:PRINTTAB(1,29)STRING$(lives%-1,CHR$2
37+" ")" "
  200  REPEAT:*FX 15,0
  210  ghost=ghost+1:IF ghost=3 ghost=0
  220  PROCpacman:PROCcheck
  230  IF EAT=1:SOUND1,-14,150,1
  240  IFTIME>2000ANDfruit=0ANDtot%<150:PROCfruit
  250  IFRND(1)>.9:PROCdoor
  260   IFfruit=1ANDTIME>3000/sheet%:PROCnofruit
  270  IFTIME>1500/sheet% ANDEAT=1:EAT=0
  280  UNTIL tot%=187 OR KILL=1
  290  IF tot%=187:GOTO 170
  300  PROCkilled:IF lives%>0:GOTO 190
  310  PROCend:UNTIL FALSE
  320 :
  330  DEFFNcalcX(X)
  340  IF X>19:X=0
  350  IF X<0:X=19
  360  =X
  370 :
  380  DEFFNcalcY(Y)
  390  IF Y>24:Y=0
  400  IF Y<0:Y=24
  410  =Y
  420 :
  430  DEFPROCtime(T)
  440  TM=TIME:REPEAT UNTIL TIME>TM+T
  450  ENDPROC
  460 :
  470  DEFPROCprintscore(S%)
  480  score%=score%+S%
  490  COLOUR7:PRINTTAB(1,1);score%
  500  ENDPROC
  510 :
  520  DEFPROCpacman
  530 OX%=pacX%:OY%=pacY%:SC=score%:IF pac$<>CHR$24
6:OP$=pac$
  540  dir$=INKEY$(0)
  550  IF dir$=":" pac$=CHR$239:pacY%=pacY%-1
  560  IF dir$="/" pac$=CHR$240:pacY%=pacY%+1
  570  IF dir$="Z" pac$=CHR$238:pacX%=pacX%-1
  580  IF dir$="X" pac$=CHR$237:pacX%=pacX%+1
  590  pacY%=FNcalcY(pacY%):pacX%=FNcalcX(pacX%)
  600  IF dir$="" AND pac$=CHR$246 THEN  pac$=OP$ E
LSE IF dir$="" pac$=CHR$246
  610  A$=maze$(pacX%,pacY%)
  620   IF A$=".":PROCprintscore(2):SOUND1,1,60,1:t
ot%=tot%+1
  630   IF A$=CHR$244:PROCprintscore(100):PROCnofru
it:SOUND1,1,150,2
  640   IF A$="+":PROCprintscore(50):EAT=1:TIME=0:S
OUND1,1,100,2
  650  IF SC=score% AND A$<>" ":pacX%=OX%:pacY%=OY%
  660  VDU17,3,31,OX%,OY%+3,32
  670  PRINTTAB(pacX%,pacY%+3);pac$
  680  maze$(pacX%,pacY%)=" "
  690  ENDPROC
  700 :
  710  DEFPROCruboutghost(G%):COLOUR1
  720  M$=maze$(ghost(G%,1),ghost(G%,2))
  730  IF M$="." OR M$="+":COLOUR2
  740  IF M$=CHR$244:COLOUR1
  750  IF M$=CHR$245:COLOUR5
  760  PRINTTAB(ghost(G%,1),ghost(G%,2)+3)maze$(gho
st(G%,1),ghost(G%,2))
  770  ENDPROC
  780 :
  790  DEFPROCghost(G%):C=0
  800   PROCruboutghost(G%)
  810  IF EAT=1:COLOUR2 ELSE COLOUR1
  820  IFEAT=0:DX%=1:DY%=1 ELSE DX%=-1:DY%=-1
  830  IFG%=0:PROCvert:IFC=0:PROChoriz
  840  IFG%=1:PROChoriz:IFC=0:PROCvert
  850  IFG%=2:PROChoriz:PROCvert
  860  PRINTTAB(ghost(G%,1),ghost(G%,2)+3)CHR$243
  870  ENDPROC
  880 :
  890  DEFPROCvert
  900  A=FNcalcY(ghost(G%,2)+DY%)
  910  B=FNcalcY(ghost(G%,2)-DY%)
  920  IFpacY%>ghost(G%,2):ghost(G%,2)=A:C=1
  930  IFpacY%<ghost(G%,2):ghost(G%,2)=B:C=1
  940  ENDPROC
  950 :
  960  DEFPROChoriz
  970  A=FNcalcX(ghost(G%,1)+DX%)
  980  B=FNcalcX(ghost(G%,1)-DX%)
  990  IFpacX%>ghost(G%,1):ghost(G%,1)=A:C=1
 1000  IFpacX%<ghost(G%,1):ghost(G%,1)=B:C=1
 1010  ENDPROC
 1020 :
 1030  DEFPROCdoor
 1040  D%=RND(4):RESTORE1870
 1050  FORF%=1 TO D%:READX,Y:NEXT
 1060  IF X=pacX% AND Y=pacY%:GOTO 1040
 1070  IF maze$(X,Y)=" ":maze$(X,Y)=CHR$245 ELSE ma
ze$(X,Y)=" "
 1080  VDU17,5,31,X,Y+3,ASC(maze$(X,Y))
 1090  ENDPROC
 1100 :
 1110  DEFPROCfruit
 1120  VDU17,1,31,9,18,244
 1130  fruit=1:TIME=0
 1140  maze$(9,15)=CHR$244
 1150  ENDPROC
 1160 :
 1170  DEFPROCnofruit
 1180  VDU31,9,18,32:fruit=0
 1190  maze$(9,15)=" "
 1200  ENDPROC
 1210 :
 1220  DEFPROCcheck:KILL=0
 1230  FOR G%=0 TO 2
 1240  IF G%=ghost:PROCghost(G%)
 1250  IF ghost(G%,1)<>pacX% OR ghost(G%,2)<>pacY%:
GOTO 1270
 1260   IF EAT=1:PROCprintscore(250):SOUND1,1,250,1
:PROCsetupghosts(G%) ELSE KILL=1
 1270  NEXT
 1280  ENDPROC
 1290 :
 1300  DEFPROCkilled:COLOUR3
 1310  FOR C=237 TO 242
 1320  VDU31,pacX%,pacY%+3,C
 1330  SOUND1,1,C/2,1:PROCtime(20)
 1340  NEXT
 1350  VDU31,pacX%,pacY%+3,32
 1360  FOR G%=0 TO 2
 1370   PROCruboutghost(G%)
 1380   PROCsetupghosts(G%)
 1390  NEXT
 1400  PROCpac:lives%=lives%-1
 1410  ENDPROC
 1420 :
 1430  DEFPROCend
 1440  IF score%>H%:H%=score%
 1450  COLOUR7:PRINTTAB(19-LEN(STR$(H%)),1);H%
 1460  PROCspace
 1470  ENDPROC
 1480 :
 1490  DEFPROCspace:*FX 15,0
 1500  VDU17,15,31,1,30:PRINT"SPACE BAR TO START"
 1510  REPEAT UNTIL GET=32:VDU12,17,7
 1520  ENDPROC
 1530 :
 1540  DEFPROCsetupghosts(G%)
 1550  RESTORE 1860
 1560  FOR D%=0 TO G%:READ COL,X:NEXT
 1570  ghost(G%,1)=X
 1580  ghost(G%,2)=12
 1590  ghost(G%,0)=COL
 1600  ENDPROC
 1610 :
 1620  DEFPROCpac
 1630  pacX%=9:pacY%=20:pac$=CHR$237
 1640  ENDPROC
 1650 :
 1660  DEFPROCsetupmaze
 1670   FORG%=0TO2:PROCsetupghosts(G%):NEXT
 1680  PROCpac:tot%=0:sheet%=sheet%+1
 1690  COLOUR128:RESTORE 1880
 1700  FOR D%=3 TO 27
 1710  READ maze$
 1720  FOR E%=0 TO 19
 1730  A$=MID$(maze$,E%+1,1)
 1740  IF A$>="A" AND A$<="M":M$=CHR$(ASC(A$)+159):
COLOUR1 ELSE M$=A$:COLOUR2
 1750  PRINTTAB(E%,D%)M$
 1760  maze$(E%,D%-3)=M$
 1770  NEXT
 1780  NEXT
 1790  VDU19,2,9,0,0,0,19,4,14,0,0,0
 1800  FOR D%=1 TO 21
 1810  SOUND 2,-15,D%*2,1
 1820  SOUND 1,-15,D%*3,1
 1830  NEXT:VDU20
 1840  ENDPROC
 1850 :
 1860  DATA 1,1,5,9,6,18
 1870  DATA 9,1,9,22,2,15,17,15
 1880  DATA"        A A         "
 1890  DATA" CBBBBBBL LBBBBBBBD "
 1900  DATA" A+..............+A "
 1910  DATA" A.CI.JBD.CBI.JBD.A "
 1920  DATA" A.G....A.A.....G.A "
 1930  DATA" A...CI.G.G.JBD...A "
 1940  DATA" A.H.G........A.H.G "
 1950  DATA" A.G...CBD.CD.A.A.A "
 1960  DATA" A...H.EBF.EF.G.A.A "
 1970  DATA" A.JBK..........G.A "
 1980  DATA" A...G.CBBBD.JD...A "
 1990  DATA"BLBI...A   A..MBBBLB"
 2000  DATA"  ...JBK   MI.G...  "
 2010  DATA"BD.H...A   A....H.CB"
 2020  DATA" A.MBI.EBBBF.CI.A.A "
 2030  DATA" M K..... ...A..M K "
 2040  DATA" A.EI.JBI.H.CK.JF.A "
 2050  DATA" A........A.EF....A "
 2060  DATA" MBBI.H.H.A....JBBK "
 2070  DATA" A....A.G.EBBI....A "
 2080  DATA" A.CD.A.. .....CD.A "
 2090  DATA" A.EF.G.H.H.JBBLF.A "
 2100  DATA" A+.....M K......+A "
 2110  DATA" EBBBBBBK MBBBBBBBF "
 2120  DATA"        A A         "
 2130 :
 2140  ON ERROR OFF
 2150  MODE 7: *FX12
 2160  *FX15
 2170  REPORT:PRINT" at line ";ERL
 2180  END
 2190 :
 2200  DEFPROCCHARSET
 2210  VDU23,224,102,102,102,102,102,102,102,102
 2220  VDU23,225,0,255,255,0,0,255,255,0
 2230  VDU23,226,0,127,127,96,96,103,103,102
 2240  VDU23,227,0,254,254,6,6,230,230,102
 2250  VDU23,245,0,0,0,255,255,0,0,0
 2260  VDU23,246,60,126,255,255,255,255,126,60
 2270  VDU23,228,102,103,103,96,96,127,127,0
 2280  VDU23,229,102,230,230,6,6,254,254,0
 2290  VDU23,230,102,102,102,102,102,126,126,0
 2300  VDU23,231,0,126,126,102,102,102,102,102
 2310  VDU23,232,0,254,254,6,6,254,254,0
 2320  VDU23,233,0,127,127,96,96,127,127,0
 2330  VDU23,234,102,230,230,6,6,230,230,102
 2340  VDU23,235,102,231,231,0,0,255,255,0
 2350  VDU23,236,102,103,103,96,96,103,103,102
 2360  VDU23,237,60,126,255,224,224,255,126,60
 2370  VDU23,238,60,126,255,7,7,255,126,60
 2380  VDU23,239,36,102,231,231,231,255,126,60
 2390  VDU23,240,60,126,255,231,231,231,102,36
 2400  VDU23,241,0,0,42,0,34,0,42,0
 2410  VDU23,242,8,73,42,0,99,0,42,73
 2420  VDU23,243,126,90,219,255,213,171,255,219
 2430  VDU23,244,198,56,108,222,190,222,108,56
 2440  ENDPROC


ROBOT ATTACK
by Edward Hung


This program is similar to the classic zombies game. You control a man who is chased by robots, which hyperspace if they happen to collide with each other. Dodge the robots, lure them into variously placed mines, but keep well clear of the swift, purposeful Marvin. When his cage bars and the screen surround flash, Marvin will break out to pursue you. Fast and fun to play, 'Robot Attack' requires a fine balance of strategy and dexterity. The game has a number of extras -- a sound on/off option, a high score table, instructions and so on.

   The program is entirely in Basic . The single CALL command is for OSWORD call zero to input the player's name. INPUT is rather unsatisfactory for this purpose, allowing any character to be typed. It is also much shorter than a Basic routine designed to input such a line. The relevant lines are 1980 to 2010 which produce a string N$. The control block is set up to allow a maximum of 20 characters, each in the range ASCII 32 to 128.

   10 REM Robot Attack
   20 REM by E.Hung
   30 REM BEEBUG
   40 REM VERSION P 1.0
   50 :
   60 PROCSETUP
   70 ON ERROR GOTO 2240
   80 MODE6:PROCTITLEPAGE
   90 MODE5
  100 SP%=SP%-50
  110 PROCPLOTOBSTACLES
  120 REPEAT
  130 I%=I%+1
  140 PROCCOWBOY
  150 PROCROBOT
  160 IFGKL%=1 AND GA%=1 AND DD%=0 AND RND(1)>.3 PR
OCMARVIN
  170 IFI%>4 I%=0
  180 IFS%>=OS% OS%=OS%+1500:LV%=LV%+1:PROCLV:IFSND
%=1 SOUND1,1,100,1
  190 UNTIL DP%=5 OR DD%=1
  200 IFDD%=0 SH%=SH%+1:DP%=0:GOTO100
  210 LV%=LV%-1:DD%=0:IFLV%>0 GOTO110
  220 PROCDELAY(3500)
  230 PROCSCORE:PROCRESET:PROCDISPLAYHISCORE
  240 GOTO90
  250 :
  260 DEFPROCTITLEPAGE
  270 VDU31,12,8:PRINT"ROBOT ATTACK"
  280 PRINT'TAB(11);"By  Edward Hung"''"Do you wish
 to be briefed on the mission"TAB(12);"PRESS Y OR N
"
  290 A$=GET$:IFA$="Y" PROCINSTRUCTION ELSE IFA$<>"
N" THEN290
  300 ENDPROC
  310 :
  320 DEFPROCINSTRUCTION
  330 VDU12,31,5,1:PRINT"ROBOT ATTACK INSTRUCTIONS"
  340 PRINT'"     You are the last survivor of the 
   Human  Race.  You are  being  pursued"
  350 FORT%=1TO13:READA,A$:PRINTTAB(A)A$:NEXT
  360 PRINT'TAB(8)"SPACE BAR TO HYPERSPACE"'''TAB(1
0);"ANY KEY TO START"
  370 DATA0,"by a hostile group of Bolo Bolo Robots
,",1,"whose only orders are to kill you by",13,"ram
ming you.",2,"Occasionally, Mean MARVIN, King of",4
," Boloans appears to help them.",2,"You must kill 
them by luring them"
  380 DATA2,"onto mines which you yourself must",13
,"not walk onto.",3,"CONTROLS:",16,"Z - LEFT",16,"X
 - RIGHT",16,": - UP",16,"/ - DOWN"
  390 *FX15,0
  400 A=GET
  410 ENDPROC
  420 :
  430 DEFPROCSETUP
  440 ENVELOPE1,1,0,0,0,0,0,0,126,0,0,-126,126,126
  450 VDU23,250,8,28,9,30,40,8,20,20
  460 VDU23,251,16,56,144,120,20,16,40,40
  470 VDU23,252,24,24,60,90,90,16,16,24
  480 VDU23,253,24,16,124,186,186,16,40,40
  490 VDU23,254;24,60,60,60,60,24;
  500 VDU23,255;146,84;198;84,146
  510 VDU23,224,160,84,184,16,8,5,2;
  520 VDU23,225;0;0,9,81,127;
  530 VDU23,226,5,42,29,16,32,192,64;
  540 VDU23,227;0;0,72,69,127;
  550 VDU23,228,1,1,1,1,1,1,1,1
  560 VDU23,229,0,6,30,62,30;0;
  570 DIMX%(5),Y%(5),S%(10),N$(10)
  580 SND%=1:*FX4,1
  590 PROCSCINIT
  600 PROCRESET
  610 ENDPROC
  620 :
  630 DEFPROCSCINIT
  640 FORI%=1TO10:S%(I%)=550-I%*50:N$(I%)="The Robo
ts of Zaexon":NEXT
  650 ENDPROC
  660 :
  670 DEFPROCLV
  680 VDU17,3,31,1,31:PRINTSPC(14);TAB(1,31)STRING$
(LV%-1,CHR$250);
  690 ENDPROC
  700 :
  710 DEFPROCRESET
  720 S%=0:SC%=0:OS%=1500:SP%=400:SH%=1:LV%=3:F%=0
  730 ENDPROC
  740 :
  750 DEFPROCRND1
  760 A%=RND(18):B%=RND(25)+4
  770 ENDPROC
  780 :
  790 DEFPROCRND2
  800 X%(I%)=RND(18):Y%(I%)=RND(25)+4
  810 ENDPROC
  820 :
  830 DEFPROCRND3
  840 X%=RND(18):Y%=RND(25)+4
  850 ENDPROC
  860 :
  870 DEFPROCPLOTOBSTACLES
  880 VDU23,1,0;0;0;0;:VDU28,1,29,18,3:VDU12:VDU26:
VDU19,15,2;0;
  890 GCOL0,3:MOVE60,60:DRAW1219,60:DRAW1219,930:DR
AW60,930:DRAW60,60:FORI%=576TO704STEP33:MOVEI%,926:
DRAWI%,866:NEXT:DRAW576,866
  900 FORT%=1TO15:VDU17,1,31,RND(18),RND(24)+5,254:
NEXT
  910 FORI%=1TO5
  920 REPEATPROCRND2:UNTILFNPOINT=0
  930 VDU17,6,31,X%(I%),Y%(I%),252:NEXT
  940 VDU5,18,0,2,25,4,576;1024-4*32;253,4,17,5,31,
5,0
  950 PRINT"HISCORE ";S%(1)TAB(6,1)"SCORE ";S%
  960 I%=0:DD%=0:GKL%=-1:DP%=0:D%=250:GA%=0:FL%=0:C
%=0
  970 PROCLV
  980 LE%=SH%MOD5
  990 IFSH%/5=SH%DIV5 LE%=5
 1000 IFLE%=1 VDU4:PRINTTAB(14,31);SPC(4);
 1010 VDU5,18,0,1,25,4,(18-LE%)*64;1024-31*32;
 1020 IFSH%>30 SH%=1
 1030 IFSH%<31 A=7:IFSH%<26 A=6:IFSH%<21 A=5:IFSH%<
16 A=2:IFSH%<11 A=4:IFSH%<6 A=1
 1040 GCOL0,A:PRINTSTRING$(LE%,CHR$(229))
 1050 GCOL0,3:MOVE(18-LE%)*64,1024-31*32:PRINTTAB(1
8-LE%,31)STRING$(LE%,CHR$(228))
 1060 REPEATPROCRND1:UNTILFNPNT(A%,B%)=0
 1070 a%=A%:b%=B%
 1080 VDU4,17,3,31,A%,B%,250
 1090 FORT%=1TO10000:NEXT
 1100 VDU17,3,31,A%,B%,250
 1110 ENDPROC
 1120 :
 1130 DEFPROCCOWBOY
 1140 IFINKEY-98  A%=A%-1:F%=1:D%=251
 1150 IFINKEY-67  A%=A%+1:F%=1:D%=250
 1160 IFINKEY-105 B%=B%+1:F%=1
 1170 IFINKEY-73  B%=B%-1:F%=1
 1180 IFINKEY-99  H%=1:F%=1:REPEATPROCRND1:UNTILFNP
NT(A%,B%)<>6 AND FNPNT(A%,B%)<>2:IFSND%=1 SOUND17,2
,50,10
 1190 IFF%=0 ENDPROC
 1200 A%=A%+(A%>18)-(A%<1):B%=B%+(B%>29)-(B%<3)
 1210 IFFNPNT(A%,B%)=1 PROCPIT(a%,b%,A%,B%):DD%=1:E
NDPROC
 1220 IFFNPNT(A%,B%)=6 OR FNPNT(A%,B%)=2 PROCDEAD:D
D%=1:ENDPROC
 1230 IFFNPNT(A%,B%)<>0 A%=a%:B%=b%:ENDPROC
 1240 PRINTTAB(a%,b%)" ":IFH%=1H%=0:PROCDELAY(700)
 1250 VDU17,3,31,A%,B%,D%
 1260 a%=A%:b%=B%:F%=0
 1270 FORT%=0TO(SP%/50):NEXT
 1280 ENDPROC
 1290 :
 1300 DEFPROCROBOT
 1310 IFDD%=1 ENDPROC
 1320 IFX%(I%)=0 AND Y%(I%)=0 ENDPROC
 1330 OX%=X%(I%):OY%=Y%(I%)
 1340 X%(I%)=X%(I%)+(X%(I%)>A%)-(X%(I%)<A%)
 1350 Y%(I%)=Y%(I%)+(Y%(I%)>B%)-(Y%(I%)<B%)
 1360 IFFNPOINT=6 OR FNPOINT=2 REPEAT PROCRND2:UNTI
L FNPOINT=0:IFSND%=1 SOUND1,2,50,10
 1370 IFFNPOINT=1 PROCPIT(OX%,OY%,X%(I%),Y%(I%)):X%
(I%)=0:Y%(I%)=0:DP%=DP%+1:PROCMS(10):ENDPROC
 1380 IFFNPOINT=3 PROCDEAD:DD%=1:ENDPROC
 1390 IFFNPOINT<>0 Y%(I%)=Y%(I%)+2
 1400 FORT%=0TO(SP%/50):NEXT
 1410 IFSND%=1 SOUND3,-15,10,1
 1420 PRINTTAB(OX%,OY%);SPC(1):VDU17,6,31,X%(I%),Y%
(I%),252
 1430 IFRND(1)>0.95 AND FL%=0:GKL%=-GKL%:C%=GKL%:IF
GKL%=1 X%=9:Y%=5:FL%=1:J%=0:GA%=0:VDU19,15,14;0;:IF
SND%=1 SOUND1,-15,50,1
 1440 IFC%=-1 VDU5,18,3,2,25,4,9*64;1024-4*32;253,4
:PRINTTAB(X%,Y%)SPC(1):C%=0:IFSND%=1 SOUND1,-15,200
,1
 1450 IFFL%=1 J%=J%+1:IFJ%=10 VDU5,18,3,2,25,4,9*64
;1024-4*32;253,4,19,15,2;0;:FL%=0:GA%=1:IFSND%=1 SO
UND1,-15,200,1
 1460 ENDPROC
 1470 :
 1480 DEFPROCMARVIN
 1490 XX%=X%:YY%=Y%
 1500 X%=X%+(X%>A%)-(X%<A%):Y%=Y%+(Y%>B%)-(Y%<B%)
 1510 IFFNPNT(X%,Y%)=15 Y%=Y%+2
 1520 IFFNPNT(X%,Y%)=1 PROCPIT(XX%,YY%,X%,Y%):X%=0:
Y%=0:GKL%=-1:VDU5,18,3,2,25,4,576;1024-4*32;253,4:P
ROCMS(100):ENDPROC
 1530 IFFNPNT(X%,Y%)=3 PROCDEAD:DD%=1:ENDPROC
 1540 IFFNPNT(X%,Y%)=6 REPEATPROCRND3:UNTIL FNPNT(X
%,Y%)=0:IFSND%=1 SOUND3,2,50,10
 1550 IFSND%=1 SOUND2,3,50,1
 1560 PRINTTAB(XX%,YY%);SPC(1):VDU17,2,31,X%,Y%,253
 1570 ENDPROC
 1580 :
 1590 DEFPROCPIT(a,b,A,B)
 1600 PRINTTAB(a,b)" "
 1610 IFSND%=1 SOUND0,1,5,1
 1620 VDU17,3,31,A,B,255:FORL=1TO500:NEXT:PRINTTAB(
A,B);SPC(1)
 1630 ENDPROC
 1640 :
 1650 DEFPROCDEAD
 1660 IFD%=250 D%=224 ELSE D%=226
 1670 VDU17,3,31,a%,b%,D%:FORL=1TO500:NEXT:VDU31,a%
,b%,D%+1
 1680 IFSND%=1 SOUND0,1,5,1
 1690 PROCDELAY(700)
 1700 IFSND%=1 FORQ%=1TO5:FORL%=255TO200STEP-1:SOUN
D17,-15,L%,1:NEXT,
 1710 IFSND%=0 PROCDELAY(2000)
 1720 ENDPROC
 1730 :
 1740 DEFPROCDELAY(T%)
 1750 FORT=1TOT%:NEXT
 1760 ENDPROC
 1770 :
 1780 DEFPROCMS(S)
 1790 S%=S%+S:VDU17,2,31,12,1:PRINT;S%
 1800 ENDPROC
 1810 :
 1820 DEFPROCSCORE
 1830 FORI%=1TO10
 1840 IFS%>=S%(I%) AND SC%=0 SC%=I%
 1850 NEXT
 1860 IFSC%=0 ENDPROC
 1870 PROCENTERNAME
 1880 FOR P%=10 TO SC%+1 STEP-1:S%(P%)=S%(P%-1):N$(
P%)=N$(P%-1):NEXT
 1890 N$(SC%)=N$
 1900 S%(SC%)=S%
 1910 ENDPROC
 1920 :
 1930 DEFPROCENTERNAME
 1940 VDU12,17,2:PRINTTAB(0,6)"Your score is in the
 "''TAB(6)"Top Ten"''''
 1950 VDU17,6:PRINT" Please enter your"''TAB(7)"nam
e:"''
 1960 *FX15,0
 1970 VDU23;10,224;0;0;0;31,0,20;17,3
 1980 X%=&80:Y%=&A:A%=0
 1990 !&A80=&A00:?&A82=20:?&A83=32:?&A84=128
 2000 CALL&FFF1
 2010 N$=$&A00
 2020 ENDPROC
 2030 :
 2040 DEFPROCDISPLAYHISCORE
 2050 VDU22,4,23,1;1;0;0;0,19,3,0;0;:PRINTTAB(15)"H
ighscores"'':VDU19,1,3;0;17,1
 2060 FORI%=1TO10:IFI%=10AA$=""ELSEAA$=" "
 2070 BB$=".....":IFS%(I%)<999BB$="......":IFS%(I%)
<99BB$="......."
 2080 PRINTTAB(3)AA$;I%;BB$;S%(I%);"...";N$(I%)'
 2090 NEXT
 2100 VDU19,0,0;0;17,1:PRINTTAB(8)"C to close sound
 channel"'TAB(8)"O to open  sound channel"''TAB(11)
"Sound Channel"'TAB(11)"Any key to start"'TAB(7)"Or
 @ to clear score table"
 2110 COLOUR3:IFSND%=1 PRINTTAB(25,26)"on. "ELSEPRI
NTTAB(25,26)"off."
 2120 *FX15,0
 2130 A=GET
 2140 IFA=64 PROCSCINIT:GOTO2050
 2150 IFA=67 OR A=99 PRINTTAB(25,26)"off.":SND%=0:G
OTO2130
 2160 IFA=79 OR A=111 PRINTTAB(25,26)"on. ":SND%=1:
GOTO2130
 2170 ENDPROC
 2180 :
 2190 DEFFNPOINT
 2200 =FNPNT(X%(I%),Y%(I%))
 2210 DEFFNPNT(U%,V%)
 2220 =POINT(U%*64+32,1010-V%*32)
 2230 :
 2240 ON ERROR OFF
 2250 MODE6
 2260 *FX4
 2270 IF ERR=17 END
 2280 REPORT:PRINT" at line ";ERL
 2290 END




MARS LANDER
by Alan Webster


'Mars Lander' is a version of the popular moon lander game in which the player attempts to navigate his space craft through a mass of meteors and land it softly on the landing pad. You control the horizontal and vertical speed of the craft. The game runs in mode 5 and makes good use of both colour and sound.

   You can choose the level of difficulty for the game -- the more difficult the game, the more sensitive the controls and the rougher the terrain (ranging from quite smooth to very rough). You have 15 seconds to land the craft before your fuel runs out.

   The controls are given in the program, and for those of you who find the game too easy (in excess of 2000 points) you might like to change the gravity factor by altering line 190 to:

    190 N%=N%-(G%/1.95-(1/Y%/10)):IF N%>80 N%=80

   10  REM Mars Lander
   20  REM by A.Webster
   30  REM BEEBUG
   40  REM Version P 1.0
   50 :
   60  ON ERROR GOTO 740
   70  PROCchars:PROCarrays:MODE4
   80  PRINTTAB(14,2)"Mars Lander";TAB(12,3)"by Ala
n Webster"
   90  PRINTTAB(5,10)"Difficulty. 1-8 (1=Easy) ?":G
%=GET:IFG%<49 OR G%>56 GOTO 90
  100  G%=G%-47:dead=FALSE:SC%=0
  110  L%=G%*6:PRINTTAB(13,19)"Z - left";TAB(13,20)
"X - Right";TAB(8,21)"RETURN - Thrust";TAB(9,23)"Pr
ess any key":i=GET
  120  MODE5:A2%=100:VDU5:REPEAT:CLS:PROCstars:PROC
meteors:X%=RND(900):Y%=1000:M%=0:N%=1:landed=FALSE:
PROCscene
  130  TIME=0:REPEAT:OX%=X%:OY%=Y%
  140  IFINKEY-98 IF X%>32 M%=M%-G%
  150  IFINKEY-67 IF X%<1210 M%=M%+G%
  160  X%=X%+(M%/2):IFX%<32 X%=32
  170  IFX%>1210 X%=1210
  180  M%=M%+(SGN(M%)/10):IFINKEY-74 N%=N%+G%
  190  N%=N%-(G%/10):IFN%>80 N%=80
  200  Y%=Y%-8+N%:IFOX%=X% IF OY%=Y% GOTO 220
  210  MOVEOX%,OY%:GCOL0,0:VDU224:MOVEX%,Y%:GCOL0,3
:VDU224
  220  R%=POINT(X%+55,Y%-31):R1%=POINT(X%,Y%-31):SO
UND0,-10,4,1:IFR%=1 dead=TRUE
  230  IFR1%=1 dead=TRUE
  240  IFR%=2 IFR1%=2 landed=TRUE
  250  IF TIME>1500 dead=TRUE
  260  UNTIL landed OR dead:IFN%<1 dead=TRUE
  270 :
  280  G%=G%+1:IF dead GOTO300
  290  SC%=SC%+(1500-TIME):FORSO%=1TO10 :SOUND1,-10
,200,1:SOUND1,-10,100,1:NEXT
  300  L%=L%+4:UNTIL dead:SC%=SC%-100:PROCexpl:TIME
=0:REPEAT UNTIL TIME>150:*FX15
  310  MODE6:PRINTTAB(5,10)"Your Score was :";SC%:T
IME=0:REPEAT UNTIL TIME>500:RUN
  320 :
  330  DEFPROCscene
  340  P%=RND(120)*8:FORA1%=0TO1280STEP8:IFA1%=P% S
%=A2%
  350  IFA1%>P% IFA1%<(P%+120) PROCpad:GOTO380
  360  GCOL0,1:MOVEA1%,0:DRAWA1%,A2%:A2%=A2%+(RND(L
%)-(L%/2)):IFA2%<20A2%=20
  370  IFA2%>400A2%=400
  380  NEXT
  390  ENDPROC
  400 :
  410  DEFPROCpad
  420  GCOL0,2:PLOT69,A1%,S%:PLOT69,A1%,S%+4:GCOL0,
1:MOVEA1%,0:DRAWA1%,S%-4:GCOL0,0:MOVEA1%,S%+8:DRAWA
1%,S%+72
  430  ENDPROC
  440 :
  450  DEFPROCchars
  460  VDU23,224,0,24,60,255,102,60,66,129:VDU23,22
5,20,126,124,126,254,124,28,48
  470  ENDPROC
  480 :
  490  DEFPROCarrays
  500  ENVELOPE 1,3,0,0,0,0,255,0,126,0,0,-126,126,
126
  510  DIMZ%(8),Z2%(8),Q%(8),Q1%(8)
  520  FOR Z1%=1TO8:Q%(Z1%)=RND(12):IFQ%(Z1%)>6 Q%(
Z1%)=Q%(Z1%)-13
  530  Q1%(Z1%)=RND(12):IFQ1%(Z1%)>6 Q1%(Z1%)=Q1%(Z
1%)-13
  540  NEXT
  550  ENDPROC
  560 :
  570  DEFPROCexpl
  580  GCOL0,0:MOVEX%,Y%:VDU224:FOR Z6%=1TO8:Z%(Z6%
)=X%:Z2%(Z6%)=Y%:NEXT
  590  FORP%=1TO14:FORJ%=1TO8:GCOL0,0:PLOT69,Z%(J%)
,Z2%(J%):Z%(J%)=Z%(J%)+(Q%(J%)*4)
  600  GCOL0,1:Z2%(J%)=Z2%(J%)+(Q1%(J%)*2):GCOL0,7:
PLOT69,Z%(J%),Z2%(J%):NEXT:SOUND 0,1,6,4:NEXTP%
  610  ENDPROC
  620 :
  630  DEFPROCmeteors
  640  GCOL0,1:FORW%=1TO(L%/2.5)+RND(5):MOVE RND(10
00),RND(600)+200:VDU225:NEXT
  650  ENDPROC
  660 :
  670  DEFPROCstars
  680  COLOUR2
  690  FORS%=1TORND(50)+50
  700  PLOT69,RND(1200)+40,RND(1000)+24
  710  NEXT
  720  ENDPROC
  730 :
  740  ON ERROR OFF
  750  MODE6:IF ERR=17 END
  760  REPORT:PRINT " at line ";ERL
  770  END


HEDGEHOG
by A. Dickinson


'Hedgehog' is a first class implementation of 'Frogger', the arcade game. It is fast moving and responsive; the graphics are good, and it makes addictive playing. You, the hedgehog, can move left, right or 'scurry'. Your aim in life is to scurry across a four lane carriageway and a busy railway track to gather acorns for supper. It is the rush hour, the traffic is busy, which means you need concentration and good 'scurry' control. If you do get run over by a juggernaught or an Intercity 125, an ambulance will soon arrive at the scene.

   You have three lives; your score relates to your progress, and as it increases, the traffic gets steadily worse. Playing tips:

1.   Do not roll into a ball in the oncoming traffic.

2.   Make good use of the rest point between the road and the railway track.

   If you find the game too fast then you may like to modify it to run in mode 2 where it runs much more slowly. The mode is set in line 80. Using mode 2 allows you more colours on the screen, and to take advantage of this, change line 1790 to:

    1790 COLOUR (R%MOD15)+2

   10  REM Hedgehog
   20  REM by A.Dickinson
   30  REM BEEBUG
   40  REM Version P 1.0
   50 :
   60 ON ERROR MODE6:REPORT:PRINT " at line ";ERL:E
ND
   70 :
   80 MODE5
   90 VDU23,1,0;0;0;0
  100 *FX9,25
  110 *FX10,25
  120 DIM R$(9):REM ROADS
  130 DIM A%(19):REM ACORNS
  140 :
  150 PROCINTRO
  160 PROCDEFINE
  170 PROCINIT
  180 REPEAT
  190  PROCGAME
  200  IF S%>T% PROCTOPSCORE
  210  PROCGAMEOVER
  220  TIME=0:REPEAT UNTIL TIME>200
  230  *FX15,1
  240  A$=GET$
  250 UNTIL FALSE
  260 :
  270 DEF PROCINTRO
  280  COLOUR 133
  290  CLS
  300  COLOUR 15
  310  PRINT'''"  H e d g e h o g"
  320  PRINTTAB(2,14)"Controls..."
  330  PRINT'"  Z = LEFT"
  340  PRINT'"  X = RIGHT"
  350  PRINT'"  / = SCURRY"
  360  PRINTTAB(2,30)"Snatch acorns...";
  370  TIME=0:REPEAT UNTIL TIME>300
  380  COLOUR 9
  390  PRINTTAB(2,30)"Press any key...";
  400  A$=GET$
  410 ENDPROC
  420 :
  430 DEF PROCDEFINE
  440  VDU23,255,136,204,238,238,238,238,238,238
  450  VDU23,254,0,0,-1,-1,0,0,0,0
  460  VDU23,252,0,-1,-1,0,0,-1,-1,0
  470  VDU23,251,0,0,0,0,-1,-1,0,0
  480  VDU23,253,24,60,90,255,126,255,60,0
  490  VDU23,250,108,72,200,252,254,251,127,60
  500  VDU23,249,24,60,60,60,0,126,60,24
  510  H$=CHR$17+CHR$1+CHR$253
  520  VDU23,224,15,105,105,249,255,255,255,102
  530  VDU23,225,240,150,150,159,255,255,255,102
  540  VDU23,226,0,0,0,126,126,126,255,102
  550  VDU23,227,0,126,126,126,126,126,255,102
  560  VDU23,228,31,49,97,255,255,255,255,48
  570  VDU23,229,255,36,36,255,255,255,255,0
  580  VDU23,230,248,140,134,255,255,255,255,24
  590  VDU23,231,0,31,17,17,255,191,255,48
  600  VDU23,232,0,240,136,136,255,253,255,12
  610  VDU23,233,255,255,255,255,255,255,255,28
  620  VDU23,234,255,239,199,239,255,255,221,28
  630 ENDPROC
  640 :
  650 DEF PROCINIT
  660  T%=500
  670  T$="Henry Hedgehog"
  680  S1$=CHR$32:S2$=S1$+S1$
  690  S3$=S2$+S1$:S4$=S2$+S2$
  700  S5$=S3$+S2$:S6$=S3$+S3$
  710  R$(0)=STRING$(20,S1$)
  720  R$(1)=S2$+CHR$227+CHR$226+CHR$227+CHR$227+CH
R$225+S4$+CHR$226+CHR$225+S5$+CHR$227+CHR$226+CHR$2
25+S4$
  730  R$(2)=CHR$224+CHR$226+CHR$227+CHR$226+CHR$22
6+S5$+CHR$224+CHR$226+S3$+CHR$224+CHR$227+CHR$227+C
HR$226+S2$+CHR$224+CHR$226+S3$
  740  R$(3)=CHR$228+CHR$229+CHR$229+CHR$230+S4$+CH
R$227+CHR$227+CHR$225+S6$+CHR$228+CHR$229+CHR$230+S
3$+CHR$226+CHR$225+S1$
  750  R$(4)=CHR$228+CHR$229+CHR$229+CHR$230+S4$+CH
R$224+CHR$227+CHR$227+S6$+CHR$228+CHR$229+CHR$230+S
3$+CHR$224+CHR$226+S1$
  760  R$(5)=STRING$(20,S1$)
  770  R$(6)=S2$+CHR$228+CHR$229+CHR$229+CHR$232+S5
$+CHR$231+CHR$232+S5$+CHR$233+CHR$233+CHR$232+S1$+C
HR$231+CHR$232+S2$
  780  R$(7)=CHR$231+CHR$232+S2$+CHR$231+CHR$232+S2
$+CHR$233+CHR$232+S5$+CHR$228+CHR$232+S1$+CHR$233+C
HR$232+S5$
  790  R$(8)=CHR$231+CHR$232+S1$+CHR$231+CHR$232+S3
$+CHR$231+CHR$233+S5$+CHR$231+CHR$230+S1$+CHR$231+C
HR$233+S5$
  800  R$(9)=S4$+CHR$231+CHR$232+S1$+CHR$231+CHR$22
9+CHR$229+CHR$230+S3$+CHR$231+CHR$233+S3$+CHR$231+C
HR$233+S3$+CHR$231+CHR$230+S1$
  810  FOR I%=1 TO 9
  820   R$(I%)=STRING$(5,R$(I%))
  830   R$(I%)=LEFT$(R$(I%),100)
  840  NEXT
  850 ENDPROC
  860 :
  870 DEF PROCGAME
  880  S%=-100:LEVEL%=-1:PROCHARDER
  890  N%=0
  900  REPEAT
  910   N%=N%+1:PROCGO
  920  UNTIL N%=3
  930  IFS%<1000 ENDPROC
  940  COLOUR 0:COLOUR 129:CLS
  950  PRINTTAB(2,10)"Bonus hedgehog";
  960  PRINTTAB(2,20)"May the fleas";
  970  PRINTTAB(2,22)" be with you";
  980  FOR I%=0 TO 255 STEP8
  990  SOUND&1,-12,I%,1
 1000  NEXT
 1010  *FX15,1
 1020  A$=INKEY$(200)
 1030  REPEAT:N%=N%+1:PROCGO:UNTIL N%=4
 1040 ENDPROC
 1050 :
 1060 DEF PROCGO
 1070  X%=10:Y%=30:Z%=10
 1080  PROCDRAWSCREEN
 1090  REPEAT
 1100  PROCROAD(1,0,12)
 1110  PROCROAD(6,0,22)
 1120  PROCROAD(7,0,24)
 1130  PROCROAD(4,1,18)
 1140  PROCROAD(8,1,26)
 1150  PROCROAD(9,1,28)
 1160  PROCROAD(7,0,24)
 1170  PROCROAD(2,1,14)
 1180  PROCROAD(8,1,26)
 1190  PROCROAD(3,0,16)
 1200  UNTIL Y%=0
 1210  IF ACORNS%=0 PROCHARDER
 1220 ENDPROC
 1230 :
 1240 DEF PROCDRAWSCREEN
 1250  COLOUR 0
 1260  COLOUR 128
 1270  CLS
 1280  COLOUR 129
 1290  PRINTTAB(1,4)SPC(17);
 1300  PRINTTAB(1,5)" H E D G E H O G ";
 1310  PRINTTAB(1,6)SPC(17);
 1320  COLOUR3
 1330  COLOUR 128
 1340  PRINTTAB(1,1);N%;
 1350  PRINTTAB(0,10)STRING$(20,CHR$255)
 1360  COLOUR 9
 1370  FOR I%=0 TO 19
 1380  IF A%(I%)=1 PRINTTAB(I%,10)CHR$249
 1390  NEXT
 1400  COLOUR 7
 1410  PRINTTAB(0,21)STRING$(20,CHR$254)
 1420  PRINTTAB(0,23)STRING$(10,"- ")
 1430  PRINTTAB(0,25)STRING$(20,CHR$252)
 1440  PRINTTAB(0,27)STRING$(10,"- ");
 1450  PRINTTAB(0,29)STRING$(20,CHR$251)
 1460  PRINTTAB(10,1)"Score ";S%;
 1470 COLOUR13
 1480  PRINTTAB(0,20)R$(5);
 1490  PRINTTAB(X%,Y%)H$;
 1500 ENDPROC
 1510 :
 1520 DEF PROCHOG
 1530  IF Y%=0 ENDPROC
 1540  IF INKEY-98 AND X%>0 PROCLEFT ELSE IF INKEY-
67 AND X%<19 PROCRIGHT ELSE IF INKEY-105 PROCFWD
 1550  IFZ%<10 IF MID$(R$(Z%),X%+1,1)<>S1$ PROCSPLA
T
 1560 ENDPROC
 1570 :
 1580 DEF PROCLEFT
 1590  X%=X%-1:PRINTTAB(X%,Y%)H$;SPC(1)
 1600 ENDPROC
 1610 :
 1620 DEF PROCRIGHT
 1630  PRINTTAB(X%,Y%)SPC(1);H$:X%=X%+1
 1640 ENDPROC
 1650 :
 1660 DEF PROCFWD
 1670  IF Z%=1 AND A%(X%)<>1 SOUND 1,-15,40,1:ENDPR
OC
 1680  Y%=Y%-2
 1690  Z%=Z%-1
 1700  PRINTTAB(X%,Y%)H$;TAB(X%,Y%+2)S1$;
 1710  SOUND 1,-12,220,1
 1720  S%=S%+10
 1730  PRINTTAB(10,1)"Score ";S%;
 1740  IF Z%=0 PROCCHUCKLE
 1750 ENDPROC
 1760 :
 1770 DEF PROCROAD(R%,D%,SY%)
 1780  IF D%>0 R$(R%)=MID$(R$(R%),2,99)+LEFT$(R$(R%
),1) ELSE R$(R%)=MID$(R$(R%),100,1)+LEFT$(R$(R%),99
)
 1790  COLOUR (R%MOD2)+2
 1800  COLOUR 128
 1810  PRINTTAB(0,SY%)LEFT$(R$(R%),20);
 1820  IF SY%=Y% PRINTTAB(X%,Y%)H$;
 1830  PROCHOG
 1840  IF Y%=SY% IF MID$(R$(R%),X%+1,1)<>S1$ PROCSP
LAT
 1850  IF RND(80)=80 SOUND3,-15,1,10:SOUND2,-15,9,8
:SOUND1,-15,17,2
 1860 ENDPROC
 1870 :
 1880 DEF PROCSPLAT
 1890  IF Y%=0 ENDPROC
 1900  COLOUR 14
 1910  PRINTTAB(X%,Y%)"*";
 1920  VDU19,0,1,0,0,0
 1930  COLOUR 12
 1940  COLOUR 139
 1950  PRINTTAB(1,4)SPC(17);
 1960  PRINTTAB(1,5)"    S P L A T    ";
 1970  PRINTTAB(1,6)SPC(17);
 1980  COLOUR 128
 1990  FOR I%=1 TO 15
 2000   SOUND 1,-5,255-10*I%,1
 2010  NEXT
 2020  COLOUR 1
 2030  PRINTTAB(X%,Y%)CHR$250;
 2040  VDU20
 2050  IF X%>10 AX%=0:AMB$=S1$+CHR$234+CHR$232 ELSE
 AX%=17:AMB$=CHR$231+CHR$234+S1$
 2060  FOR I%=0 TO 15
 2070  IF AX%<X% PRINTTAB(AX%,Y%)AMB$;:AX%=AX%+1
 2080  IF AX%>X% AX%=AX%-1:PRINTTAB(AX%,Y%)AMB$;
 2090  FOR J%=0 TO 120 STEP2
 2100  SOUND&11,-I%,J%,5
 2110  NEXT
 2120  NEXT
 2130  Y%=0
 2140 ENDPROC
 2150 :
 2160 DEF PROCCHUCKLE
 2170  FOR I%=1 TO 25
 2180 J%=1
 2190   SOUND J%,-15+I%/3,200-RND(3)*I%,1
 2200  NEXT
 2210  N%=N%-1:Y%=0:S%=S%+25:A%(X%)=0:ACORNS%=ACORN
S%-1
 2220 ENDPROC
 2230 :
 2240 DEF PROCHARDER
 2250  FOR I%=1 TO 3
 2260  FOR J%=30 TO 180 STEP8
 2270   SOUND &12,-11-I%,J%+12+I%*10,1
 2280  NEXT
 2290  NEXT
 2300  S%=S%+100
 2310  FOR I%=0 TO 19:A%(I%)=0:NEXT
 2320  FOR I%=1 TO 4
 2330   REPEAT
 2340   J%=RND(17)+1
 2350  UNTIL A%(J%)=0
 2360  A%(J%)=1
 2370  NEXT
 2380  ACORNS%=4
 2390  LEVEL%=LEVEL%-2*(LEVEL%<>9)
 2400  R$(5)=STRING$(LEVEL%,CHR$255)+STRING$(20-LEV
EL%*2,S1$)+STRING$(LEVEL%,CHR$255)
 2410 ENDPROC
 2420 :
 2430 DEF PROCTOPSCORE
 2440  COLOUR 3
 2450  COLOUR 129
 2460  CLS
 2470  PRINTTAB(1,3)"T O P - S C O R E";
 2480  PRINTTAB(1,8)"Enter your name";
 2490  PRINTTAB(1,10);
 2500  FOR I%=100 TO 200 STEP 12
 2510   SOUND 1,-15,I%,3
 2520   SOUND 2,-14,I%+8,3
 2530  NEXT
 2540  *FX15,1
 2550  INPUT ""T$
 2560  T%=S%
 2570 ENDPROC
 2580 :
 2590 DEF PROCGAMEOVER
 2600  COLOUR 4
 2610  COLOUR 133
 2620  CLS
 2630  PRINTTAB(5,3)"Super hog";
 2640  COLOUR 15
 2650  PRINTTAB((20-LEN(T$))DIV2,6)T$;
 2660  COLOUR 4
 2670  PRINTTAB(5,11)"Top score";
 2680  COLOUR 0
 2690  PRINTTAB(8,13);T%;
 2700  COLOUR 4
 2710  PRINTTAB(5,18)"Your score";
 2720  COLOUR 0
 2730  PRINTTAB(8,20);S%;
 2740  COLOUR 4
 2750  PRINTTAB(4,30)"Press any key";
 2760 ENDPROC


INVASION
by Alan Webster


This is a game for one player where the object is to destroy all of the descending aliens (as is the case with all 'invader games'). The game starts with one alien attempting to land on the surface of the planet. If you kill him you move into a new phase when two aliens appear, and so on until you have beaten six creatures at one time, whereupon the game restarts with just one alien but becomes faster . . . and faster . . . and faster . . .!

   You have three lives to play with and you lose one every time an alien lands. After losing all of your lives your score is displayed and the highest score is shown. Press any key to restart.

   You control the cross on the screen, and have to move this directly on top of the alien and then fire. If you move across the path of the alien, a 'shimmer' effect will cause him to disappear temporarily.

   The following keys are used within the game:

   Z   Left   :   Up
   X   Right   /   Down
      Space Bar to Fire

   You score 1 point for every alien hit on the first wave (sheets 1 to 6), two points on the second wave and so on. You are also limited to the number of bullets you can fire and this is displayed at the bottom centre of the screen and is given in line 160. It is set to 25, but of course you can change this to make the game easier or harder.

   10  REM INVASION
   20  REM by A.Webster
   30  REM BEEBUG
   40  REM Version P 1.0
   50 :
   60  ON ERROR GOTO 1090
   70  MODE5
   80  EK%=0:FR%=0
   90  VDU19,1,11,0,0,0
  100  PROCchr
  110  HI%=0:DIM Z(5,2)
  120  SC%=0:LV%=3:R%=10
  130  FORTW%=0 TO 5
  140  SOUND1,-10,235,1
  150  OT%=TW%
  160  B%=25
  170  GF%=0
  180  PX=9:PY=10:CLS
  190  PROCscene
  200  I%=1
  210  PROCstars(100)
  220  PROCrndm
  230  IFI%=1I%=2ELSEI%=1
  240  PROCalmove
  250  SOUND0,-(RND(5)+10),7,1 
  260  IFLV%<1 PROCendgame:GOTO120
  270  FORLP%=1TOR%+(R%ANDFR%=0)
  280  PROCplmove
  290  COLOUR2
  300  PRINTTAB(2,31);SC%;TAB(17,31);LV%;
  310  COLOUR3
  320  PROCfire
  330  NEXTLP%
  340  IFEK%=TW%+1 EK%=0:NEXTTW%
  350  IF TW%=6 R%=R%-1:GOTO130 ELSE230
  360  END
  370 :
  380  DEFPROCscene
  390  VDU23,1,0;0;0;0;
  400  VDU23,255,255,255,255,255,255,255,255,255
  410  FORA%=1TO18:PRINTTAB(A%,30);CHR$255:NEXT
  420  VDU23,254,8,8,28,28,62,62,127,127
  430  PRINTTAB(9,29);CHR$254
  440  ENDPROC
  450 :
  460  DEFPROCstars(A%)
  470  FORA1%=1TOA%:GCOL0,RND(3)
  480  PLOT69,RND(1280)-1,RND(900)+123
  490  NEXT:ENDPROC
  500 :
  510  DEFPROCchr
  520  VDU23,224,24,24,36,231,231,36,24,24
  530  VDU23,225,102,153,60,90,126,60,66,129
  540  VDU23,226,129,90,60,90,126,60,66,36
  550  ENDPROC
  560 :
  570  DEFPROCrndm
  580  FORA%=0TOTW%:Z(A%,0)=RND(18):Z(A%,1)=0:Z(A%,
2)=1:NEXT
  590  ENDPROC
  600 :
  610  DEFPROCplmove
  620  OX=PX:OY=PY
  630  IFINKEY-98ANDPX>1GF%=GF%-1
  640  IFINKEY-67ANDPX<18GF%=GF%+1
  650  IF ABS(GF%)=2 PX=PX+SGN(GF%):GF%=0
  660  IFINKEY-105ANDPY<27PY=PY+1
  670  IFINKEY-73ANDPY>0PY=PY-1
  680  PRINTTAB(OX,OY);" ":COLOUR3:PRINTTAB(PX,PY)C
HR$224
  690  ENDPROC
  700 :
  710  DEFPROCalmove
  720  FORA%=0TOTW%
  730  IFZ(A%,2)=0 GOTO 820
  740  PRINTTAB(Z(A%,0),Z(A%,1));SPC1
  750  Z(A%,1)=Z(A%,1)+1:Z(A%,0)=Z(A%,0)+(RND(3)-2)
  760  G%=Z(A%,0)
  770  IFG%<1Z(A%,0)=1
  780  IFG%>18Z(A%,0)=18
  790  IFZ(A%,1)=29 AND G%=3ORG%=9ORG%=16 Z(A%,0)=Z
(A%,0)+1
  800  COLOUR1:PRINTTAB(Z(A%,0),Z(A%,1))CHR$(224+I%
)
  810  IFZ(A%,1)=29 Z(A%,2)=0:LV%=LV%-1:EK%=EK%+1:F
ORSD%=1TO2:SOUND1,-15,5,4:SOUND1,-15,1,4:NEXT
  820  NEXT
  830  ENDPROC
  840 :
  850  DEFPROCendgame
  860  A%=INKEY(310)
  870  CLS
  880  PRINTTAB(3,15);"YOUR SCORE:";SC%
  890  IFSC%>HI%HI%=SC%
  900  PRINTTAB(3,17);"HI SCORE  :";HI%
  910  *FX15,0
  920  COLOUR3:EK%=0
  930  S=GET
  940  ENDPROC
  950 :
  960  DEFPROCfire
  970  FR%=0
  980  IFINKEY-99ANDB%>0FR%=608
  990  IFFR%=0 ENDPROC
 1000  FX=64*PX+32:FY=1024-(32*PY)-16
 1010  FR1%=96
 1020  MOVEFR%,FR1%:DRAWFX,FY:GCOL0,0
 1030  FORY%=0TOTW%:IFPX=Z(Y%,0)ANDPY=Z(Y%,1)ANDZ(Y
%,2)<>0 Z(Y%,2)=0:SC%=SC%+11-R%:EK%=EK%+1:SOUND1,-1
5,100,1:SOUND1,-14,2,1:SOUND1,-15,200,1 ELSE SOUND1
,-10,235,1
 1040  NEXT
 1050  MOVEFR%,FR1%:DRAWFX,FY:GCOL0,3
 1060  B%=B%-1:PRINTTAB(9,31);B%;CHR$32;
 1070  ENDPROC
 1080 :
 1090  ON ERROR OFF
 1100  MODE6
 1110  IF ERR=17 END
 1120  REPORT:PRINT" at line ";ERL
 1130  END