.FUNCT DIR-PRINT,DIR,CNT=0,TBL,DRY=0 ZERO? DIR \?ELS3 PRINTI "out of view" RTRUE ?ELS3: GETP HERE,P?LINE GRTR? STACK,BACK-ALLEY-LINE-C \?ELS7 SET 'TBL,NAUTICAL-DIR-STRINGS JUMP ?CND1 ?ELS7: SET 'TBL,DIR-STRINGS SET 'DRY,TRUE-VALUE ?CND1: ?PRG10: GET TBL,CNT EQUAL? STACK,DIR \?CND12 ZERO? DRY /?CND15 EQUAL? DIR,P?UP,P?DOWN /?CND15 PRINTI "the " ?CND15: ADD CNT,1 GET TBL,STACK PRINT STACK RTRUE ?CND12: INC 'CNT JUMP ?PRG10 .FUNCT FOLLOW-GOAL,PERSON,HERE,LINE,LN,RM,GT,GOAL,FLG,GOAL-FLAG=0,IGOAL=0,LOC,CNT=1,DIR LOC PERSON >HERE GETP PERSON,P?CHARACTER GET GOAL-TABLES,STACK >GT GET GT,GOAL-F EQUAL? HERE,STACK \?ELS3 PUT GT,GOAL-S,FALSE-VALUE RETURN FALSE-VALUE ?ELS3: GET GT,GOAL-ENABLE ZERO? STACK /FALSE ?CND1: GETP HERE,P?STATION >LOC EQUAL? LOC,HERE /?CND6 CALL MOVE-PERSON,PERSON,LOC RSTACK ?CND6: GET GT,GOAL-I >IGOAL GET TRANSFER-TABLE,IGOAL >GOAL ZERO? GOAL \?CND9 SET 'IGOAL,FALSE-VALUE GET GT,GOAL-S >GOAL ?CND9: ZERO? GOAL /FALSE EQUAL? HERE,GOAL \?CND12 ZERO? IGOAL /?ELS19 ADD IGOAL,1 GET TRANSFER-TABLE,STACK CALL MOVE-PERSON,PERSON,STACK >FLG GET GT,GOAL-F CALL ESTABLISH-GOAL,PERSON,STACK RETURN FLG ?ELS19: GET GT,GOAL-F EQUAL? HERE,STACK /?ELS22 PUT GT,GOAL-S,FALSE-VALUE GET GT,GOAL-F CALL MOVE-PERSON,PERSON,STACK >FLG RETURN FLG ?ELS22: PUT GT,GOAL-S,FALSE-VALUE RETURN FALSE-VALUE ?CND12: GETP GOAL,P?LINE CALL GET-LINE,STACK >LINE ?PRG25: GET LINE,CNT >RM EQUAL? RM,HERE \?ELS29 ZERO? GOAL-FLAG /?ELS32 SUB CNT,3 GET LINE,STACK >LOC JUMP ?CND30 ?ELS32: ADD CNT,3 GET LINE,STACK >LOC ?CND30: CALL MOVE-PERSON,PERSON,LOC RETURN STACK ?ELS29: EQUAL? RM,GOAL \?CND27 SET 'GOAL-FLAG,TRUE-VALUE ?CND27: ADD CNT,3 >CNT JUMP ?PRG25 .FUNCT COR-DIR,HERE,THERE,COR,RM,PAST=0,CNT=2,?TMP1 GETP THERE,P?CORRIDOR >?TMP1 GETP HERE,P?CORRIDOR BAND ?TMP1,STACK CALL GET-COR,STACK >COR ?PRG1: GET COR,CNT >RM EQUAL? RM,HERE \?ELS5 SET 'PAST,1 JUMP ?REP2 ?ELS5: EQUAL? RM,THERE \?CND3 JUMP ?REP2 ?CND3: INC 'CNT JUMP ?PRG1 ?REP2: GET COR,PAST RSTACK .FUNCT GET-LINE,LN ZERO? LN \?ELS5 RETURN ROAD-WHARF-LINE ?ELS5: EQUAL? LN,1 \?ELS7 RETURN EAST-ROAD-LINE ?ELS7: EQUAL? LN,2 \?ELS9 RETURN BEDROOM-LINE ?ELS9: EQUAL? LN,3 \?ELS11 RETURN BACK-ALLEY-LINE ?ELS11: EQUAL? LN,4 \?ELS13 RETURN TRAWLER-LINE ?ELS13: EQUAL? LN,5 \FALSE RETURN SALVAGER-LINE .FUNCT GET-COR,NUM EQUAL? NUM,1 \?ELS5 RETURN COR-1 ?ELS5: EQUAL? NUM,2 \?ELS7 RETURN COR-2 ?ELS7: EQUAL? NUM,4 \?ELS9 RETURN COR-4 ?ELS9: EQUAL? NUM,8 \?ELS11 RETURN COR-8 ?ELS11: EQUAL? NUM,16 \?ELS13 RETURN COR-16 ?ELS13: EQUAL? NUM,32 \?ELS15 RETURN COR-32 ?ELS15: EQUAL? NUM,64 \?ELS17 RETURN COR-64 ?ELS17: EQUAL? NUM,128 \?ELS19 RETURN COR-128 ?ELS19: EQUAL? NUM,256 \?ELS21 RETURN COR-256 ?ELS21: RETURN COR-512 .FUNCT CORRIDOR-LOOK,ITM=0,C,Z,COR,VAL,FOUND=0 GETP HERE,P?CORRIDOR >C ZERO? C /FALSE ?PRG6: SUB C,512 >Z LESS? Z,0 /?ELS10 SET 'COR,COR-512 JUMP ?CND8 ?ELS10: SUB C,256 >Z LESS? Z,0 /?ELS12 SET 'COR,COR-256 JUMP ?CND8 ?ELS12: SUB C,128 >Z LESS? Z,0 /?ELS14 SET 'COR,COR-128 JUMP ?CND8 ?ELS14: SUB C,64 >Z LESS? Z,0 /?ELS16 SET 'COR,COR-64 JUMP ?CND8 ?ELS16: SUB C,32 >Z LESS? Z,0 /?ELS18 SET 'COR,COR-32 JUMP ?CND8 ?ELS18: SUB C,16 >Z LESS? Z,0 /?ELS20 SET 'COR,COR-16 JUMP ?CND8 ?ELS20: SUB C,8 >Z LESS? Z,0 /?ELS22 SET 'COR,COR-8 JUMP ?CND8 ?ELS22: SUB C,4 >Z LESS? Z,0 /?ELS24 SET 'COR,COR-4 JUMP ?CND8 ?ELS24: SUB C,2 >Z LESS? Z,0 /?ELS26 SET 'COR,COR-2 JUMP ?CND8 ?ELS26: SUB C,1 >Z LESS? Z,0 /?REP7 SET 'COR,COR-1 ?CND8: CALL CORRIDOR-CHECK,COR,ITM >VAL ZERO? FOUND \?CND31 SET 'FOUND,VAL ?CND31: SET 'C,Z JUMP ?PRG6 ?REP7: RETURN FOUND .FUNCT CORRIDOR-CHECK,COR,ITM,CNT=2,PAST=0,FOUND=0,RM,OBJ ?PRG1: GET COR,CNT >RM ZERO? RM /FALSE EQUAL? RM,HERE \?ELS7 SET 'PAST,1 JUMP ?CND3 ?ELS7: FIRST? RM >OBJ \?CND3 ?PRG10: ZERO? ITM /?ELS14 EQUAL? OBJ,ITM \?CND12 GET COR,PAST >FOUND JUMP ?REP11 ?ELS14: GETP OBJ,P?CHARACTER ZERO? STACK /?CND12 CALL IN-MOTION?,OBJ ZERO? STACK \?CND12 EQUAL? OBJ,MCGINTY \?THN23 CALL QUEUED?,I-MCGINTY-FOLLOWS ZERO? STACK /?THN23 EQUAL? PRSA,V?FOLLOW,V?WALK /?CND12 ?THN23: CALL START-SENTENCE,OBJ PRINTI " is " PRINTI "off to " GET COR,PAST CALL DIR-PRINT,STACK PRINTI "." CRLF ?CND12: NEXT? OBJ >OBJ /?KLU38 ?KLU38: ZERO? OBJ \?PRG10 ?REP11: ZERO? FOUND /?CND3 RETURN FOUND ?CND3: INC 'CNT JUMP ?PRG1 .FUNCT IN-MOTION?,PERSON,GT,?TMP1 GETP PERSON,P?CHARACTER GET GOAL-TABLES,STACK >GT GET GT,GOAL-ENABLE ZERO? STACK \?THN8 GET GT,ATTENTION EQUAL? STACK,1 \FALSE ?THN8: GET GT,GOAL-S ZERO? STACK /FALSE LOC PERSON >?TMP1 GET GT,GOAL-F EQUAL? ?TMP1,STACK /FALSE RTRUE .FUNCT START-MOVEMENT CALL QUEUE,I-MCGINTY,1 PUT STACK,0,1 CALL QUEUE,I-JOHNNY,1 PUT STACK,0,1 CALL QUEUE,I-PETE,1 PUT STACK,0,1 CALL QUEUE,I-WEASEL,1 PUT STACK,0,1 CALL QUEUE,I-DELIVERY-BOY,1 PUT STACK,0,1 CALL QUEUE,I-FOLLOW,-1 PUT STACK,0,1 CALL QUEUE,I-ATTENTION,-1 PUT STACK,0,1 CALL QUEUE,I-DISGUSTING-WEASEL-KLUDGE,35 PUT STACK,0,1 RTRUE .FUNCT IMOVEMENT,PERSON,INT,TB,VAR,DIS,TIM,ID,RM,GT,?TMP1 GETP PERSON,P?CHARACTER >ID GET MOVEMENT-GOALS,ID >TB GET GOAL-TABLES,ID >GT GET TB,MG-ROOM >RM EQUAL? 0,RM /?CND1 GET GT,GOAL-QUEUED ZERO? STACK /?ELS6 PUT GT,GOAL-QUEUED,RM JUMP ?CND1 ?ELS6: CALL ESTABLISH-GOAL,PERSON,RM ?CND1: GET TB,MG-TIME >TIM EQUAL? 0,TIM /FALSE GET TB,MG-VARIATION >VAR MUL VAR,2 RANDOM STACK >DIS SUB DIS,VAR ADD TIM,STACK CALL QUEUE,INT,STACK ADD TB,MG-LENGTH PUT MOVEMENT-GOALS,ID,STACK GET TB,MG-NEXT EQUAL? 0,STACK /FALSE GET TB,MG-NEXT >?TMP1 SUB VAR,DIS ADD ?TMP1,STACK PUT TB,MG-NEXT,STACK RFALSE .FUNCT I-FOLLOW,FLG=0,CNT=0,GT,VAL ?PRG1: IGRTR? 'CNT,CHARACTER-MAX \?ELS5 RETURN FLG ?ELS5: GET GOAL-TABLES,CNT >GT GET GT,GOAL-S ZERO? STACK /?PRG1 GET GT,GOAL-ENABLE ZERO? STACK \?THN10 GET GT,ATTENTION ZERO? STACK \?PRG1 ?THN10: PUT GT,GOAL-ENABLE,TRUE-VALUE GET CHARACTER-TABLE,CNT CALL FOLLOW-GOAL,STACK >VAL ZERO? VAL /?PRG1 EQUAL? FLG,M-FATAL /?PRG1 SET 'FLG,VAL JUMP ?PRG1 .FUNCT I-ATTENTION,FLG=0,CNT=0,ATT,GT ?PRG1: IGRTR? 'CNT,CHARACTER-MAX \?ELS5 RETURN FLG ?ELS5: GET GOAL-TABLES,CNT >GT GET GT,ATTENTION SUB STACK,1 >ATT ZERO? ATT \?CND3 PUT GT,GOAL-ENABLE,TRUE-VALUE ?CND3: PUT GT,ATTENTION,ATT JUMP ?PRG1 .FUNCT GRAB-ATTENTION,PERSON,CHR,GT,ATT GETP PERSON,P?CHARACTER >CHR GET GOAL-TABLES,CHR >GT GET GT,GOAL-S ZERO? STACK /?CND1 GET GT,ATTENTION-SPAN >ATT PUT GT,ATTENTION,ATT ZERO? ATT \?ELS6 PUT GT,GOAL-ENABLE,TRUE-VALUE RFALSE ?ELS6: GET GT,GOAL-ENABLE ZERO? STACK /?CND1 PUT GT,GOAL-ENABLE,FALSE-VALUE ?CND1: SET 'QCONTEXT,PERSON SET 'QCONTEXT-ROOM,HERE RTRUE .FUNCT ESTABLISH-GOAL,PERSON,GOAL,PRIORITY=0,HERE,HL,GL,GT,?TMP1 LOC PERSON >HERE GETP PERSON,P?CHARACTER GET GOAL-TABLES,STACK >GT ZERO? PRIORITY /?CND1 PUT GT,GOAL-ENABLE,TRUE-VALUE PUT GT,GOAL-QUEUED,HERE ?CND1: GETP HERE,P?LINE MUL STACK,12 >?TMP1 GETP GOAL,P?LINE MUL STACK,2 ADD ?TMP1,STACK PUT GT,GOAL-I,STACK GETP GOAL,P?STATION PUT GT,GOAL-S,STACK PUT GT,GOAL-F,GOAL LOC PERSON RSTACK .FUNCT GOAL-REACHED,PERSON,GT GETP PERSON,P?CHARACTER GET GOAL-TABLES,STACK >GT PUT GT,GOAL-S,FALSE-VALUE GET GT,GOAL-FUNCTION CALL STACK,G-REACHED RSTACK .FUNCT MOVE-PERSON,PERSON,WHERE,DIR,GT,OL,COR,PCOR,CHR,PUSHCART,FLG=0,VAL=0,DF,CD GETP PERSON,P?CHARACTER >CHR GET GOAL-TABLES,CHR >GT LOC PERSON >OL CALL DIR-FROM,OL,WHERE >DIR SET 'PUSHCART,STR?187 EQUAL? OL,HERE \?ELS3 FSET? PERSON,INVISIBLE /?ELS3 SET 'FLG,TRUE-VALUE CALL START-SENTENCE,PERSON EQUAL? DIR,P?OUT \?ELS8 PRINTI " leaves the room" EQUAL? PERSON,DELIVERY-BOY \?CND11 PRINT PUSHCART ?CND11: PRINTI "." CRLF JUMP ?CND1 ?ELS8: EQUAL? DIR,P?IN \?ELS19 PRINTI " goes into another room" PRINTI "." CRLF JUMP ?CND1 ?ELS19: PRINTI " heads " GETP HERE,P?LINE LESS? STACK,TRAWLER-LINE-C \?CND28 EQUAL? DIR,P?UP,P?DOWN /?CND28 PRINTI "off to " ?CND28: CALL DIR-PRINT,DIR EQUAL? PERSON,DELIVERY-BOY \?CND35 PRINT PUSHCART ?CND35: PRINTI "." CRLF JUMP ?CND1 ?ELS3: EQUAL? WHERE,HERE \?ELS43 FSET? PERSON,INVISIBLE /?ELS43 SET 'FLG,M-FATAL GET GT,GOAL-F EQUAL? HERE,STACK /?CND1 CALL START-SENTENCE,PERSON PRINTI " walks " EQUAL? PRSA,V?WALK \?ELS53 EQUAL? WHERE,HERE \?ELS53 EQUAL? OL,LAST-PLAYER-LOC \?ELS53 PRINTI "along with" JUMP ?CND51 ?ELS53: PRINTI "past" ?CND51: PRINTI " you" EQUAL? PERSON,DELIVERY-BOY \?CND64 PRINT PUSHCART ?CND64: PRINTI "." CRLF JUMP ?CND1 ?ELS43: GETP HERE,P?CORRIDOR >COR ZERO? COR /?CND1 FSET? PERSON,INVISIBLE /?CND1 GETP OL,P?CORRIDOR >PCOR ZERO? PCOR /?ELS77 BAND COR,PCOR ZERO? STACK /?ELS77 SET 'FLG,TRUE-VALUE GETP WHERE,P?CORRIDOR ZERO? STACK \?ELS82 CALL START-SENTENCE,PERSON PRINTI ", off to " CALL COR-DIR,HERE,OL CALL DIR-PRINT,STACK PRINTI "," PRINTI " leaves your view" PRINTI " to " CALL DIR-FROM,OL,WHERE CALL DIR-PRINT,STACK EQUAL? PERSON,DELIVERY-BOY \?CND91 PRINT PUSHCART ?CND91: PRINTI "." CRLF JUMP ?CND75 ?ELS82: GETP WHERE,P?CORRIDOR BAND COR,STACK ZERO? STACK \?ELS99 CALL START-SENTENCE,PERSON PRINTI ", off to " CALL COR-DIR,HERE,OL CALL DIR-PRINT,STACK PRINTI ", disappears from sight to " CALL DIR-FROM,OL,WHERE >PCOR CALL DIR-PRINT,PCOR EQUAL? PERSON,DELIVERY-BOY \?CND104 PRINT PUSHCART ?CND104: PRINTI "." CRLF JUMP ?CND75 ?ELS99: CALL START-SENTENCE,PERSON PRINTI " is to " CALL COR-DIR,HERE,WHERE >CD CALL DIR-PRINT,CD PRINTI ", heading " CALL DIR-FROM,OL,WHERE >DF EQUAL? CD,DF \?ELS119 PRINTI "away from you" JUMP ?CND117 ?ELS119: PRINTI "toward " CALL DIR-PRINT,DF ?CND117: EQUAL? PERSON,DELIVERY-BOY \?CND126 PRINT PUSHCART ?CND126: PRINTI "." CRLF JUMP ?CND75 ?ELS77: GETP WHERE,P?CORRIDOR >PCOR ZERO? PCOR /?CND1 BAND COR,PCOR ZERO? STACK /?CND1 SET 'FLG,TRUE-VALUE PRINTI "To " CALL COR-DIR,HERE,WHERE CALL DIR-PRINT,STACK PRINTI " " CALL THE?,PERSON CALL DPRINT,PERSON PRINTI " comes into view from " CALL DIR-FROM,WHERE,OL CALL DIR-PRINT,STACK EQUAL? PERSON,DELIVERY-BOY \?CND143 PRINT PUSHCART ?CND143: PRINTI "." CRLF ?CND75: ?CND1: MOVE PERSON,WHERE GET GT,GOAL-F EQUAL? STACK,WHERE \?ELS152 CALL GOAL-REACHED,PERSON >VAL ZERO? VAL \?CND150 EQUAL? HERE,WHERE \?CND150 FSET? PERSON,INVISIBLE /?CND150 SET 'FLG,M-FATAL CALL START-SENTENCE,PERSON PRINTI " stops here." CRLF JUMP ?CND150 ?ELS152: GET GT,GOAL-FUNCTION CALL STACK,G-ENROUTE ?CND150: EQUAL? VAL,M-FATAL \?ELS166 RETURN VAL ?ELS166: RETURN FLG .FUNCT DIR-FROM,HERE,THERE,V=0,P=0,L,Z,O ?PRG1: NEXTP HERE,P >P ZERO? P \?ELS5 RETURN V ?ELS5: EQUAL? P,P?IN,P?OUT \?ELS7 JUMP ?PRG1 ?ELS7: LESS? P,LOW-DIRECTION /?PRG1 GETPT HERE,P >Z PTSIZE Z >L EQUAL? L,DEXIT,UEXIT,CEXIT \?ELS12 GETB Z,REXIT EQUAL? STACK,THERE \?ELS12 EQUAL? P,P?UP,P?DOWN \?ELS17 SET 'V,P JUMP ?PRG1 ?ELS17: RETURN P ?ELS12: ZERO? V \?PRG1 EQUAL? L,FEXIT \?PRG1 SET 'V,P JUMP ?PRG1 .ENDI