%EXTERNALROUTINE ZOMBIE(%STRING (255)S)
%INTEGER Z1, Z2
      %EXTERNALROUTINESPEC PEHOME
      %EXTERNALROUTINESPEC PECLEAR
      %EXTERNALROUTINESPEC PECLINE(%INTEGER A)
      %EXTERNALROUTINESPEC PEUP
      %EXTERNALROUTINESPEC PEDOWN
      %EXTERNALROUTINESPEC PERIGHT
      %EXTERNALROUTINESPEC PELEFT
      %EXTERNALROUTINESPEC PEPOS(%INTEGER X,Y)
      %EXTERNALROUTINESPEC PEPROMPT(%INTEGER X,YM %STRINGNAME S)
      %EXTERNALREALFNSPEC RANDOM(%INTEGERNAME I, %INTEGER J)
      %EXTERNALROUTINESPEC SETMODE(%STRING (255)S)
      %EXTERNALSTRING (8) %FNSPEC TIME
      %ROUTINESPEC WIN
      %ROUTINESPEC START
      %ROUTINESPEC PLAY
      %ROUTINESPEC GRABBED
      %ROUTINESPEC ZFALL
      %ROUTINESPEC RND(%INTEGER X)
      %ROUTINESPEC FALL
      %ROUTINESPEC RESTART
      %INTEGERARRAY Z(1:20,1:2),H(1:20,1:2)
      %INTEGER A,B,I,J,K,M,R,VAR,MEX,MEY,ZTOT,ZX,ZY
      %OWNSTRING (10)RR="AGAIN: ",MM="MOVE: "
      S=''
      I=CHARNO(TIME,7)
      J=CHARNO(TIME,8)
      K=CHARNO(TIME,5)
      R=I*J+K
      SETMODE("GRAPH")
      START


      %ROUTINE START
         PECLEAR
         PEPOS(1,1)
         PRINTSTRING("OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO")
         PRINTSTRING("OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO")
         %CYCLE A=2,1,19
            PEPOS(A,79)
            PRINTSTRING("O")
         %REPEAT 
         %CYCLE A=2,1,19
            PEPOS(A,1)
            PRINTSTRING("O")
         %REPEAT 
         PEPOS(20,1)
         PRINTSTRING("OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO")
         PRINTSTRING("OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO")
         %CYCLE A=1,1,20
            RND(19)
            Z(A,1)=VAR
            RND(78)
            Z(A,2)=VAR
            PEPOS(Z(A,1),Z(A,2))
            PRINTSTRING("Z")
         %REPEAT 
         %CYCLE A=1,1,20
            RND(19)
            H(A,1)=VAR
            RND(78)
            H(A,2)=VAR
            PEPOS(H(A,1),H(A,2))
            PRINTSTRING("O")
         %REPEAT 
         RND(19)
         MEX=VAR
         RND(78)
         MEY=VAR
         PEPOS(MEX,MEY)
         PRINTSTRING("X")
         ZTOT=0
         PLAY
      %END 


      %ROUTINE PLAY
%INTEGER JJ
TWO:     
         PECLINE(21)
         PEPROMPT(21,5,MM)
FIVE:    
         READSYMBOL(M)
         %IF M=NL %THEN ->FIVE
         PEPOS(MEX,MEY)
         PRINTSTRING(" ")
         %IF M='U' %THEN MEX=MEX-1
         %IF M='D' %THEN MEX=MEX+1
         %IF M='L' %THEN MEY=MEY-1
         %IF M='R' %THEN MEY=MEY+1
         PEPOS(MEX,MEY)
         PRINTSTRING("X")
         %IF MEX<2 %OR MEX>19 %OR MEY<2 %OR MEY>78 %THEN FALL
         %CYCLE A=1,1,20
            %IF MEX=H(A,1) %AND MEY=H(A,2) %THEN FALL
         %REPEAT 
         %CYCLE A=1,1,20
            %IF Z(A,1)=21 %THEN ->THREE
            PEPOS(Z(A,1),Z(A,2))
            PRINTSTRING(".")
            RND(100)
         PEPOS(22,5); SPACES(4)
Z1=Z(A,1); Z2=Z(A,2)
            %IF Z2=MEY %AND Z1>MEX %THEN Z1=Z1-1 %AND ->FOUR
            %IF Z2=MEY %AND Z1<MEX %THEN Z1=Z1+1 %AND ->FOUR
            %IF VAR<52 %AND Z2>MEY %THEN Z2=Z2-1 %AND ->FOUR
            %IF VAR<52 %AND Z2<MEY %THEN Z2=Z2+1 %AND ->FOUR
            %IF Z1=MEX %AND Z2>MEY %THEN Z2=Z2-1 %AND ->FOUR
            %IF Z1=MEX %AND Z2<MEY %THEN Z2=Z2+1 %AND ->FOUR
            %IF VAR>51 %AND Z1>MEX %THEN Z1=Z1-1 %AND ->FOUR
            %IF VAR>51 %AND Z1<MEX %THEN Z1=Z1+1 %AND ->FOUR
FOUR:       
%CYCLE JJ=1,1,20
%IF Z1=Z(JJ,1) %AND Z2=Z(JJ,2) %THEN->PUT Z ON SCREEN % 
%REPEAT
! NONE ON TOP OF ANOTHER
Z(A,1)=Z1; Z(A,2)=Z2
PUT Z ON SCREEN:
            PEPOS(Z(A,1),Z(A,2))
            PRINTSTRING("Z")
THREE:      
         %REPEAT 
         %CYCLE A=1,1,20
            %IF Z(A,1)=MEX %AND Z(A,2)=MEY %THEN GRABBED
            %CYCLE B=1,1,20
               %IF Z(A,1)=H(B,1) %AND Z(A,2)=H(B,2) %THEN ZFALL
            %REPEAT 
         %REPEAT 
         ->TWO
      %END 


      %ROUTINE GRABBED
         PEPOS(22,5)
         PRINTSTRING("THE ZOMBIES HAVE GOT YOU")
         RESTART
      %END 


      %ROUTINE ZFALL
         PEPOS(Z(A,1),Z(A,2))
         PRINTSTRING("O")
         Z(A,1)=21
         ZTOT=ZTOT+1
         PEPOS(22,5)
         PRINTSTRING("ZAP GOES A ZOMBIE")
         %IF ZTOT=20 %THEN WIN
      %END 


      %ROUTINE RND(%INTEGER X)
         %INTEGER A
         %REAL AA
ONE:     
         %CYCLE A=1,1,9
            AA=RANDOM(R,1)
            VAR=INTPT(AA*X+1)
         %REPEAT 
         %IF VAR<2 %OR VAR>X %THEN ->ONE
      %END 


      %ROUTINE FALL
         PEPOS(MEX,MEY)
         PRINTSTRING("O")
         PEPOS(22,5)
         PRINTSTRING("AAAAAAAAHHHHHHHH!")
         RESTART
      %END 


      %ROUTINE WIN
         PEPOS(22,5)
         PRINTSTRING("YOU HAVE OUTWITTED THE WITLESS ZOMBIES")
         RESTART
      %END 


      %ROUTINE RESTART
         PEPROMPT(21,5,RR)
ONE:     
         READSYMBOL(M)
         %IF M=NL %THEN ->ONE
         %IF M='Y' %THEN START
         %IF M='N' %THEN PEPOS(21,5) %AND SETMODE("UPPER") %ANDSTOP 
      %END 
%END 
%ENDOFFILE