home *** CD-ROM | disk | FTP | other *** search
/ A.N.A.L.O.G. Magazine 1988 July / 88_jul.atr / analogmn.act next >
Text File  |  2023-02-26  |  16KB  |  1 lines

  1. ; ANALOG MAN by David Plotkin¢;¢;      COPYRIGHT 1988¢;    BY ANALOG COMPUTING¢;¢MODULE¢¢BYTE ChrBase=756,Bkgrnd=710,X,Y,¢     Fate=53770,Level=[5],CursIn=752,¢     Stick0=632,Ps,Loud=[0],Indx=[0],¢     Snd1=$D208,Snd2=$D20F,Freq=[169],¢     Wsync=$D40A,Colbk=$D018,¢     Nmien=$D40E,Consol=53279,¢     Colints=$D017,X0,Y0,Ft=[200],¢     Lv=[5],Ld=[0],Ld2=[0],Atrt=77,¢     PmHitClr=$D01E,Dmactl=$22F,¢     Gractl=$D01D,PmBase=$D407,¢     Priority=$26F,Vcount=54283,¢     Loud1=[0],Tone=[8],Flg=[1],¢     Mstatus=[0],Pep=[5],My=[0]¢¢CARD Scrn=88,RamSet,HiMem=$2E5,¢     Score=[0],Sdlst=560,¢     Vdslst=512,Max=[0],¢     Pm_BaseAdr,Adres,AdresB¢¢INT  Xdir,Ydir¢¢INT ARRAY Pxdr=[0 0 0 0],¢          Pydr=[0 0 0 0]¢¢CARD ARRAY Linept(24),Sc(10)¢¢BYTE ARRAY Charset,Dlist,Stacky(9),¢     PmHpos(8)=$D000,Stack(9),¢     Stackx(7)=[0 9 26 9 26 9 26],¢     Px(4)=[0 0 0 0],Py(4)=[0 0 0 0],¢     Begx(4)=[0 64 124 184],¢     Begy(4)=[0 18 90 42],¢     Pm_Width(5)=$D008,Plptr,¢     Pm_Mismask(4)=[$FC $F3 $CF $3F],¢     Pcolr(4)=704,Pmtopf(8)=$D000,¢     Pmtop(8)=$D008,Pfcol(8),Pcol(8),¢  Chmp1(0)=[0 0 0 0 28 42 54 28 73 127¢  28 20 22 48 0 0 0 0],¢  Chmp2(0)=[0 0 0 0 28 42 54 28 8¢  127 93 20 52 6 0 0 0 0],¢  Ibm(0)=[0 0 0 0 88 84 88 84 88 0 68¢  108 84 68 0 0 0 0],¢  Cmdore(0)=[0 0 0 0 224 176 151 134¢  128 128 134 151 176 224 0 0 0 0],¢  Apple(0)=[0 0 0 0 48 8 8 62 127 127¢  127 127 62 28 0 0 0 0],¢  Estat(4),¢  Msl1(0)=[170 85 170 85 170 85 170 85¢  170 85 170 85 170 85 170 85 170 85],¢  Msl2(0)=[85 170 85 170 85 170 85 170¢  85 170 85 170 85 170 85 170 85 170],¢  ShapeTable(0)=[¢  85 17 17 68 68 17 17 85;1-GIRDER¢  160 170 160 160 160 160 170 160;¢  10 170 10 10 10 10 170 10;3 RT LDR¢  170 51 85 51 170 51 85 51;4 LV1¢  0 0 0 0 170 85 170 85;5 LV1 CRUNCH¢  85 51 170 51 85 51 170 51;6 LV2¢  0 0 0 0 85 170 85 170;7 LV2 CRUNCH¢  255 34 85 34 255 34 85 34;8 LV3¢  0 0 0 0 255 85 255 85;9 LV3 CRUNCH¢  165 51 90 51 165 51 90 51;10 LV4¢  0 0 0 0 165 90 165 90;11 LV4 CRUNCH¢    190 235 215 195 195 215 235 190;12¢    235 130 150 170 170 150 130 235;13¢    ]¢¢PROC Pause() ;TEST¢WHILE Consol<>6 DO OD RETURN¢¢PROC Download()¢;Step back HiMem and move the¢;character set into RAM¢RamSet=(HiMem-$400)&$FC00;1K boundary¢ChrBase=RamSet RSH 8¢HiMem=RamSet¢MoveBlock(RamSet,57344,1024)¢Charset=RamSet¢RETURN¢¢PROC Modify()¢;Modify the RAM character set¢CARD xx¢FOR xx=0 TO 103¢DO¢  Charset(xx+8)=ShapeTable(xx)¢OD¢RETURN¢¢PROC Pmgraphics()¢Zero(PmHpos,8)¢Zero(Pm_Width,5)¢Dmactl=$2E Pcolr(0)=52¢Pm_BaseAdr=(HiMem-$400)&$FC00¢PmBase=Pm_BaseAdr RSH 8¢HiMem=Pm_BaseAdr+384¢Priority==&$C0%1 Gractl=3¢RETURN¢¢CARD FUNC PmAdr(BYTE n)¢IF n>=4 THEN n=0 ELSE n==+1 FI¢RETURN(Pm_BaseAdr+384+(n*$80))¢¢PROC PmClear(BYTE n)¢CARD ctr¢BYTE ARRAY playadr¢playadr=PmAdr(n)¢IF n<4 THEN Zero(playadr,$80)¢ ELSE n==-4¢FOR ctr=0 TO $80-1¢DO playadr(ctr)==&Pm_Mismask(n) OD¢FI¢RETURN¢¢PROC Dlint()¢;the display list interrupt routine¢[$48 $8A $48 $98 $48]¢Wsync=1 Colbk=50 Colints=12¢[$68 $A8 $68 $AA $68 $40]¢¢PROC ScoreLine()¢;set up the dli¢Vdslst=Dlint Dlist(27)=132 Nmien=$C0¢RETURN¢¢PROC Moveit(BYTE ARRAY shape BYTE¢            which,num,xx,yy)¢Adres=PmAdr(which)+yy¢MoveBlock(Adres,shape,num)¢PmHpos(which)=xx¢RETURN¢¢PROC Putman()¢;Clear PM space/ put Players onscreen¢BYTE lp¢FOR lp=0 TO 3¢DO¢  Estat(lp)=0 PmClear(lp)¢OD Mstatus=0 Ld=0 Ld2=0 SndRst()¢X0=76 Y0=66 Moveit(Chmp1,0,18,X0,Y0)¢FOR lp=1 TO 3¢DO¢ Px(lp)=Begx(lp) Py(lp)=Begy(lp)¢ IF lp=1 THEN¢  Moveit(Ibm,lp,18,Px(lp),Py(lp))¢  ELSEIF lp=2 THEN¢  Moveit(Cmdore,lp,18,Px(lp),Py(lp))¢  ELSE¢  Moveit(Apple,lp,18,Px(lp),Py(lp))¢ FI¢OD¢RETURN¢¢PROC Testcol()¢BYTE ll¢FOR ll=0 TO 7 DO¢Pfcol(ll)=0 Pcol(ll)=0 OD¢DO UNTIL Vcount&128 OD¢FOR ll=0 TO 7 DO¢Pfcol(ll)=Pmtopf(ll)¢Pcol(ll)=Pmtop(ll) OD¢PmHitClr=1¢RETURN¢¢BYTE FUNC PmHit(BYTE n,cnum)¢IF n<4 THEN n==+4 ELSE n==-4 FI¢IF cnum<4 THEN¢ RETURN((Pcol(n) RSH cnum)&1)¢ ELSE cnum==&3¢ RETURN((Pfcol(n) RSH cnum)&1)¢FI RETURN(0)¢¢PROC Msldrop()¢;put Pepper on screen¢BYTE trig=644,lp,tt=[0]¢IF Ld>1 THEN Ld==-2¢  Sound(2,Ld LSH 3,10,Ld) ELSEIF¢  Mstatus>0 THEN¢  Sound(2,Mstatus LSH 2,10,4)¢FI¢IF Mstatus>0 THEN tt=1-tt Mstatus==+1¢  IF tt=0 THEN¢    MoveBlock(AdresB,Msl2,18) ELSE¢    MoveBlock(AdresB,Msl1,18)¢  FI¢  IF Mstatus=50 THEN Zero(AdresB,18)¢    Mstatus=0 Sound(2,0,0,0)¢  FI¢FI¢IF trig=1 OR Pep=0 OR Mstatus>0¢ THEN RETURN¢FI¢Mstatus=1¢FOR lp=0 TO 3¢DO PmHpos(lp+4)=X0-3+(lp LSH 2) OD¢My=Y0¢AdresB=PmAdr(4)+My¢MoveBlock(AdresB,Msl1,18) Ld=12¢Pep==-1¢Position(36,23) Print("   ")¢Position(36,23) PrintB(Pep)¢RETURN¢¢PROC Gotbumped()¢BYTE lq,lq1¢IF Ld2>0 THEN Ld2==-1 FI¢Sound(3,Ld2 LSH 3,8,Ld2)¢FOR lq=0 TO 3 DO FOR lq1=1 TO 3 DO¢IF PmHit(lq+4,lq1)=1 AND Estat(lq1)=0¢ THEN Ld2=14 Estat(lq1)=1 Score==+5¢ PmHpos(lq+4)=0¢FI OD OD¢FOR lq=1 TO 3 DO¢IF Estat(lq)>0 THEN Estat(lq)==+1¢ Pcolr(lq)=((Rand(14)+1) LSH 4)+10¢FI¢IF Estat(lq)=Ft THEN Estat(lq)=0¢ PmClear(lq)¢ Pcolr(lq)=((Rand(14)+1) LSH 4)+10¢ Px(lq)=Begx(lq) Py(lq)=Begy(lq)¢ IF lq=1 THEN¢  Moveit(Ibm,lq,18,Px(lq),Py(lq))¢  ELSEIF lq=2 THEN¢  Moveit(Cmdore,lq,18,Px(lq),Py(lq))¢  ELSE¢  Moveit(Apple,lq,18,Px(lq),Py(lq))¢ FI¢FI OD RETURN¢¢PROC Title()¢BYTE colpf0=53270,colpf1=53271,¢     colpf3=53273,rtclock=20¢Graphics(18)¢Position(5,4) PrintD(6,"ANALOG MAN")¢Position(8,5) PrintD(6,"BY")¢Position(3,7)¢PrintD(6,"david plotkin")¢Position(3,9)¢PrintD(6,"ספדצצ ≤σ∮σπ⌠")¢WHILE Consol<>5¢DO colpf3=Fate Atrt=0 Wsync=0¢  colpf0=128-Vcount+rtclock RSH 2¢  colpf1=Vcount+rtclock RSH 2¢OD¢RETURN¢¢PROC Gr4Init()¢;Set up the address of each screen¢;line,initialize and set up Gr. 4¢CARD xx¢BYTE clr1=709¢Graphics(0) CursIn=1 Print(" ")¢FOR xx=0 TO 23¢DO Linept(xx)=Scrn+(40*xx) OD¢Dlist=Sdlst Dlist(3)=68¢FOR xx=6 TO 27¢DO Dlist(xx)=4 OD clr1=68¢RETURN¢¢PROC Update()¢;print data on the text line¢Position(0,23) Print("Score: ")¢Position(7,23) PrintC(Score)¢Position(13,23) Print("Lives: ")¢Position(20,23) PrintB(Lv)¢Position(22,23) Print("Hi: ")¢Position(26,23) PrintC(Max)¢Position(32,23) Print("SB: ")¢Position(36,23) Print("   ")¢Position(36,23) PrintB(Pep)¢RETURN¢¢PROC Plot4(BYTE x,y,ch)¢;Plot a char at location x,y¢BYTE ARRAY line¢line=Linept(y) line(x)=ch¢RETURN¢¢BYTE FUNC Locate4(BYTE x,y)¢;Returns the value of the char at x,y¢BYTE ARRAY line¢line=Linept(y)¢RETURN(line(x))¢¢PROC Hline(BYTE x1,y1,x2,ch)¢;draw a line of ch characters from¢;x1,y1 to x2,y1 (horizontal line)¢BYTE ARRAY line¢BYTE lp¢line=Linept(y1) lp=x1¢DO line(lp)=ch lp==+1 UNTIL lp=x2+1 OD¢RETURN¢¢INT FUNC HStick(BYTE port)¢BYTE ARRAY ports(4)=$278¢INT ARRAY value(4)=[0 1 $FFFF 0]¢port==&3¢RETURN (value((ports(port)&$C) RSH 2))¢¢INT FUNC VStick(BYTE port)¢BYTE ARRAY ports(4)=$278¢INT ARRAY value(4)=[0 1 $FFFF 0]¢port==&3¢RETURN (value(ports(port)&3))¢¢PROC EndGame()¢;game over¢BYTE trig=644,wsync=$D40A,rtclock=20,¢     lm=53271,vcount=54283¢SndRst() Bkgrnd=0 Dlist(10)=2¢IF Score>Max THEN Max=Score FI¢Put(125) Update()¢Position(7,5)¢Print("All DONE  Press החפד")¢DO vcount=0  lm=vcount+rtclock RSH 2¢  Atrt=0 UNTIL trig=0¢OD¢Bkgrnd=148 Dlist(10)=4 Put(125)¢Lv=5 Pep=5 Indx=0 Level=5 Ft=200¢Score=0 Update() PmHitClr=0¢RETURN¢¢PROC Meltdown()¢BYTE lp,lq,time=20¢BYTE ARRAY melt¢SndRst() melt=PmAdr(0)+Y0+4¢FOR lp=0 TO 30¢DO lq=Rand(10) melt(lq)=Fate¢ Sound(0,Fate,8,8)¢ time=0 DO UNTIL time=3 OD¢OD¢FOR lp=0 TO 9¢DO melt(lp)=0 Sound(0,lp*10,10,8)¢ time=0 DO UNTIL time=2 OD¢OD Sound(0,0,0,0)¢RETURN¢¢PROC Ouch()¢BYTE lc,ld¢IF Pcol(4)=0 THEN RETURN FI¢FOR lc=1 TO 3¢DO IF PmHit(0,lc)=1 AND Estat(lc)>0¢ THEN RETURN FI¢OD¢Meltdown()¢FOR lc=0 TO 7 DO PmClear(lc) OD¢Lv==-1 Position(20,23) PrintB(Lv)¢IF Lv=0 THEN EndGame() ELSE Putman()¢PmHitClr=0 FI RETURN¢¢PROC InitLev()¢;Set initial stack values, call Putman¢BYTE lp¢FOR lp=1 TO 8 DO Stack(lp)=0 OD¢Stacky(1)=4 Stacky(2)=4 Stacky(3)=10¢Stacky(4)=10 Stacky(5)=16 Stacky(6)=16¢Stacky(7)=0 Stacky(8)=0 Putman()¢RETURN¢¢PROC Girders()¢;draw the main four lines of girders¢;clear screen and init new level¢SndRst() Zero(Scrn,960) Loud=0¢Hline(2,22,37,1) Hline(2,16,37,1)¢Hline(2,10,37,1) Hline(2,4,37,1)¢Hline(9,4,13,4)  Hline(9,10,13,6)¢Hline(9,16,13,8) Hline(26,4,30,4)¢Hline(26,10,30,6) Hline(26,16,30,8)¢InitLev()¢RETURN¢¢PROC Screen1()¢;draw screen 1¢BYTE lp¢Girders();now the ladders¢FOR lp=4 TO 21¢DO Plot4(2,lp,2) Plot4(3,lp,3)¢  Plot4(19,lp,2) Plot4(20,lp,3)¢  Plot4(36,lp,2) Plot4(37,lp,3)¢OD Position(15,23)¢Print ("אστΘ∈∈σ≥≤áכ⌡πδ        ")¢RETURN¢¢PROC Screen2()¢;draw screen 2¢BYTE lp¢Girders() FOR lp=4 TO 21¢DO Plot4(19,lp,2) Plot4(20,lp,3) OD¢FOR lp=10 TO 15¢DO Plot4(2,lp,2) Plot4(3,lp,3) OD¢Position(15,23)¢Print ("תΦσ≥σáβ≥σá⌠Φσá∮βΣΣσ≥≤™")¢RETURN¢¢PROC Screen3()¢;draw screen 3¢BYTE lp¢Girders() FOR lp=4 TO 21¢DO Plot4(19,lp,2) Plot4(20,lp,3) OD¢FOR lp=4 TO 9¢DO Plot4(2,lp,2) Plot4(3,lp,3) OD¢FOR lp=16 TO 21¢DO Plot4(36,lp,2) Plot4(37,lp,3) OD¢Position(15,23)¢Print ("צΘΣσá⌠∩áצΘΣσ          ")¢RETURN¢¢PROC Screen4()¢;draw screen 4¢BYTE lp¢Girders() Hline(16,4,23,0)¢Hline(16,16,23,0) FOR lp=4 TO 21¢DO Plot4(14,lp,2) Plot4(15,lp,3)¢  Plot4(24,lp,2) Plot4(25,lp,3)¢OD Position(15,23)¢Print ("הΘ≥≤⌠áז∩∮σ≤           ")¢RETURN¢¢PROC Screen5()¢;draw screen 5¢BYTE lp¢Girders() Hline(16,10,23,0)¢Hline(16,16,23,0) FOR lp=4 TO 21¢DO Plot4(19,lp,2) Plot4(20,lp,3) OD¢FOR lp=4 TO 9¢DO Plot4(14,lp,2) Plot4(15,lp,3)¢  Plot4(24,lp,2) Plot4(25,lp,3)¢OD FOR lp=16 TO 21¢DO Plot4(14,lp,2) Plot4(15,lp,3)¢  Plot4(24,lp,2) Plot4(25,lp,3)¢OD Position(15,23)¢Print("ר≡áβ∈Σáג∩≈∈            ")¢RETURN¢¢PROC Screen6()¢;draw screen 6¢BYTE lp¢Girders() Hline(16,4,23,0)¢Hline(16,10,23,0) Hline(16,16,23,0)¢FOR lp=4 TO 21¢DO Plot4(14,lp,2) Plot4(15,lp,3)¢  Plot4(24,lp,2) Plot4(25,lp,3)¢OD Position(15,23)¢Print ("IJ∮∮áז∩∮σ≤             ")¢RETURN¢¢PROC Screen7()¢;draw screen 7¢BYTE lp¢Girders() Hline(16,10,23,0)¢Hline(16,16,23,0) FOR lp=4 TO 21¢DO Plot4(19,lp,2) Plot4(20,lp,3) OD¢Position(15,23)¢Print ("קΘϕσáβ⌠á⌠Φσáקנס       ")¢RETURN¢¢PROC Screen8()¢;draw screen 8¢BYTE lp¢Girders()¢Hline(16,10,23,0) Hline(16,16,23,0)¢FOR lp=4 TO 21¢DO Plot4(2,lp,2) Plot4(3,lp,3)¢  Plot4(36,lp,2) Plot4(37,lp,3)¢OD Position(15,23)¢Print ("ר≤σá⌠Φσáצ⌠βΘ≥≤        ")¢RETURN¢¢PROC Screen9()¢;draw screen 9¢BYTE lp¢Girders() Hline(16,4,23,0)¢Hline(16,10,23,0) Hline(16,16,23,0)¢FOR lp=4 TO 21¢DO Plot4(2,lp,2) Plot4(3,lp,3)¢  Plot4(36,lp,2) Plot4(37,lp,3)¢OD Position(15,23)¢Print ("ד∮σ÷β⌠∩≥áצΦβµ⌠        ")¢RETURN¢¢PROC Falling(BYTE tt)¢;keep track of level status¢BYTE lp¢IF tt=4 THEN¢  IF X0<120 THEN Stack(1)==+1 ELSE¢    Stack(2)==+1 RETURN¢  FI¢FI¢IF tt=6 THEN¢  IF X0<120 THEN Stack(3) ==+1 ELSE¢    Stack(4)==+1 RETURN¢  FI¢FI¢IF tt=8 THEN¢  IF X0<120 THEN Stack(5)==+1 ELSE¢    Stack(6)==+1 RETURN¢  FI¢FI¢RETURN¢¢PROC Squashed(BYTE wh)¢BYTE lk,xx,yy¢xx=(Stackx(wh) LSH 2)+48¢yy=(Stacky(wh) LSH 2)+16-14¢FOR lk=1 TO 3¢DO IF Px(lk)>=xx-8 AND Px(lk)<=xx+16¢  AND Py(lk)=yy THEN Estat(lk)=1¢  Score==+5 Ld=14¢ FI¢OD RETURN¢¢RETURN¢¢PROC DropLevel()¢;make levels fall, keep track of y pos¢BYTE lp,lev¢BYTE ARRAY wh(7)=[0 5 5 7 7 9 9]¢FOR lp=1 TO 6¢DO IF Stack(lp)>=5 THEN Stack(lp)==+1¢   FI¢  IF Stack(lp)>=7 THEN¢  Hline(Stackx(lp),Stacky(lp),¢        Stackx(lp)+4,0) Score==+1¢  Stacky(lp)==+1 lev=Stacky(lp)¢  IF lev=10 OR lev=16 THEN Stack(lp)=0¢    Hline(Stackx(lp),lev,Stackx(lp)+4,¢          wh(lp)-1)¢    IF Stacky(lp+2)=lev THEN¢      Stack(lp+2)=7 Stacky(lp+2)=lev+1¢      Hline(Stackx(lp+2),lev+1,¢        Stackx(lp+2)+4,wh(lp+2))¢    FI ELSE¢    Hline(Stackx(lp),lev,Stackx(lp)+4,¢          wh(lp))¢    IF lev=22 THEN Stack(lp)=0 FI¢  FI¢  IF lev=10 OR lev=16 OR lev=22 THEN¢    Squashed(lp)¢  FI¢FI OD¢RETURN¢¢PROC Check()¢;Look ahead-see whats there and move¢BYTE xt1,xt2,yt1,yt2,t1,t2,t3,t4¢BYTE ARRAY pstn¢xt1=(X0-48) RSH 2 yt1=(Y0-16+14) RSH 2¢t1=Locate4(xt1,yt1)¢t2=Locate4(xt1+1,yt1)¢IF t1=0 AND t2=0 THEN;falling¢  Y0==+4 Moveit(pstn,0,18,X0,Y0)¢  Tone=10 Loud=10¢  RETURN¢FI¢IF Stick0=15 THEN RETURN ELSE¢  Tone=8 Flg=1-Flg¢  IF Flg=0 THEN pstn=Chmp1 ELSE¢    pstn=Chmp2¢  FI¢FI¢IF Stick0=7 THEN;move right¢  t1=Locate4(xt1+2,yt1) Loud=6¢  IF X0<192 THEN X0==+4 FI¢  Moveit(pstn,0,18,X0,Y0)¢  IF (t1=4 OR t1=6 OR t1=8) THEN¢    Plot4(xt1+2,yt1,t1+1) Falling(t1)¢  FI¢FI¢IF Stick0=11 THEN;move left¢  t1=Locate4(xt1-1,yt1) Loud=6¢  IF X0>56 THEN X0==-4 FI¢  Moveit(pstn,0,18,X0,Y0)¢  IF (t1=4 OR t1=6 OR t1=8) THEN¢    Plot4(xt1-1,yt1,t1+1) Falling(t1)¢  FI¢FI¢IF Stick0=14 THEN;move up¢  t1=Locate4(xt1,yt1)¢  t2=Locate4(xt1+1,yt1)¢  t3=Locate4(xt1,yt1-1)¢  t4=Locate4(xt1+1,yt1-1)¢  IF ((t1=2 AND t2=3) OR¢    (t3=2 AND t4=3))¢    THEN Y0==-4 Loud=6¢    Moveit(pstn,0,18,X0,Y0)¢  FI¢FI¢IF Stick0=13 THEN;move down¢  t1=Locate4(xt1,yt1)¢  t2=Locate4(xt1+1,yt1)¢  IF (t1=2 AND t2=3) THEN Y0==+4¢    Moveit(pstn,0,18,X0,Y0) Loud=6¢  FI¢FI¢RETURN¢¢PROC Noise()¢;the sound effects¢IF Loud>0 THEN Loud==-1¢  Sound(1,Y0,Tone,Loud)¢FI¢RETURN¢¢PROC NoChase(BYTE dl,dr,du,dd,lp)¢BYTE sel¢IF (du=0 AND dd=0) THEN¢ IF (Pxdr(lp)<0 AND dl=1) THEN RETURN¢  ELSEIF (Pxdr(lp)>0 AND dr=1) THEN¢  RETURN¢ FI ¢FI¢IF (dl=0 AND dr=0) THEN¢ IF (Pydr(lp)<0 AND du=1) THEN RETURN¢  ELSEIF (Pydr(lp)>0 AND dd=1) THEN¢  RETURN¢ FI¢FI sel=Rand(4)¢IF (sel=0 AND dl=1) THEN¢ Pxdr(lp)=-4 Pydr(lp)=0 ELSEIF¢ (sel=1 AND dr=1) THEN¢ Pxdr(lp)=4 Pydr(lp)=0 ELSEIF¢ (sel=2 AND du=1) THEN¢ Pxdr(lp)=0 Pydr(lp)=-4 ELSEIF¢ (sel=3 AND dd=1) THEN¢ Pxdr(lp)=0 Pydr(lp)=4 ELSE¢ Pxdr(lp)=0 Pydr(lp)=0¢FI¢RETURN¢¢PROC Chase()¢;the creatures move¢BYTE lp,xt1,xt2,yt1,yt2,t1,t2,t3,t4,¢     dir,dl,dr,du,dd¢INT delx,dely,dx,dy¢FOR lp=1 TO 3; for each chaser¢DO delx=X0-Px(lp) dely=Y0-Py(lp)¢ dx=delx dy=dely¢ IF delx<0 THEN delx=-delx FI¢ IF dely<0 THEN dely=-dely FI¢ delx==RSH 2 dely==RSH 2¢ xt1=(Px(lp)-48) RSH 2¢ yt1=(Py(lp)-16+14) RSH 2¢ t1=Locate4(xt1,yt1)¢ t2=Locate4(xt1+1,yt1)¢ t3=Locate4(xt1,yt1-1)¢ t4=Locate4(xt1+1,yt1-1)¢ dir=0 dl=0 dr=0 du=0 dd=0¢ IF (t1=2 AND t2=3 AND Py(lp)<91)¢  THEN dd=1¢ FI¢ IF ((t1=2 AND t2=3) OR (t3=2 AND t4=3))¢  THEN du=1¢ FI¢ IF (yt1=4 OR yt1=10 OR yt1=16 OR¢  yt1=22) THEN dir=1¢ FI¢ IF (dir=1 AND Px(lp)>56) THEN dl=1 FI¢ IF (dir=1 AND Px(lp)<192)¢      THEN dr=1 FI¢ IF (dely<=Level AND delx<=Level) THEN¢  IF (dx<0 AND dl=1) THEN¢   Pxdr(lp)=-4 Pydr(lp)=0¢   ELSEIF (dx>0 AND dr=1) THEN¢   Pxdr(lp)=4 Pydr(lp)=0¢   ELSEIF (dy<0 AND du=1) THEN¢   Pxdr(lp)=0 Pydr(lp)=-4¢   ELSEIF (dy>0 AND dd=1) THEN¢   Pxdr(lp)=0 Pydr(lp)=4¢   ELSE Pxdr(lp)=0 Pydr(lp)=0¢  FI ELSE NoChase(dl,dr,du,dd,lp)¢ FI¢ IF Estat(lp)<>0 THEN Pxdr(lp)=0¢  Pydr(lp)=0;killed!¢ FI¢ IF t1=0 AND t2=0 THEN Pxdr(lp)=0¢  Pydr(lp)=4¢ FI; falling!¢ Px(lp)==+Pxdr(lp) Py(lp)==+Pydr(lp)¢ IF lp=1 THEN¢  Moveit(Ibm,lp,18,Px(lp),Py(lp))¢  ELSEIF lp=2 THEN¢  Moveit(Cmdore,lp,18,Px(lp),Py(lp))¢  ELSE¢  Moveit(Apple,lp,18,Px(lp),Py(lp))¢ FI¢OD¢RETURN¢¢PROC Play()¢;the play game loop¢BYTE lp,time=20¢DO Check() Chase() Msldrop() Atrt=0¢  Position(7,23) PrintC(Score)¢  FOR lp=0 TO 2¢  DO Noise() time=0 DO UNTIL time=1 OD¢  OD Noise() Testcol() Gotbumped()¢  Ouch() IF Indx=0 THEN EXIT FI¢  DropLevel();make levels fall¢  IF (Stacky(1)=22 AND Stacky(2)=22¢    AND Stacky(3)=22 AND Stacky(4)=22¢    AND Stacky(5)=22 AND Stacky(6)=22)¢    THEN EXIT;test for level finished¢  FI¢  IF Level=5 THEN Check()¢   time=0 DO UNTIL time=2 OD¢  FI¢OD¢RETURN¢¢PROC Vector()¢;Dummy PROC for the screens¢RETURN¢¢PROC Intro()¢BYTE tm=20¢tm=0¢DO Sound(0,tm,10,4) UNTIL tm=100 OD¢Position(15,23)¢Print("                       ")¢Update() Sound(0,0,0,0)¢RETURN¢¢PROC Main()¢BYTE time=20,lp,ch=764¢Title()¢Gr4Init() Snd1=0 Snd2=3¢Download() Pmgraphics()¢FOR lp=0 TO 7 DO PmClear(lp) OD¢FOR lp=1 TO 3¢DO Pcolr(lp)=((Rand(14)+1)LSH 4)+10 OD¢Pcolr(0)=56 Modify() ScoreLine()¢Sc(1)=Screen1 Sc(2)=Screen2¢Sc(3)=Screen3 Sc(4)=Screen4¢Sc(5)=Screen5 Sc(6)=Screen6¢Sc(7)=Screen7 Sc(8)=Screen8¢Sc(9)=Screen9¢DO Indx==+1 Vector=Sc(Indx)¢  FOR lp=0 TO 7 DO PmClear(lp) OD¢  Vector() Intro() Play()¢  IF Indx=9 THEN Indx=0 Level==+4¢    IF Pep<8 THEN Pep==+2 FI¢    IF Ft>100 THEN Ft==-20 FI Update()¢  FI¢OD¢RETURN¢¢