.FUNCT NULL-F,A1,A2 RFALSE .FUNCT DOOR-ROOM,RM,DR,P=0,TBL ?PRG1: NEXTP RM,P >P ZERO? P /FALSE LESS? P,LOW-DIRECTION /FALSE GETPT RM,P >TBL PTSIZE TBL EQUAL? DEXIT,STACK \?PRG1 GET TBL,DEXITOBJ EQUAL? DR,STACK \?PRG1 GET TBL,REXIT RETURN STACK .FUNCT DOOR-DIR,RM,DR,P=0,TBL ?PRG1: NEXTP RM,P >P ZERO? P /FALSE LESS? P,LOW-DIRECTION /FALSE GETPT RM,P >TBL PTSIZE TBL EQUAL? DEXIT,STACK \?PRG1 GET TBL,DEXITOBJ EQUAL? DR,STACK \?PRG1 EQUAL? P,P?NORTH,P?EAST /?THN12 EQUAL? P,P?SOUTH,P?WEST \?PRG1 ?THN12: RETURN P .FUNCT FACE-DOOR,DR,PER EQUAL? PRSA,V?UNLOCK,V?OPEN,V?LOOK-THROUGH /?THN8 EQUAL? PRSA,V?LOCK,V?KNOCK,V?CLOSE \FALSE ?THN8: CALL DOOR-DIR,HERE,DR >PER ZERO? PER /FALSE CALL2 OPP-DIR,PER >PLAYER-NOT-FACING EQUAL? PLAYER-NOT-FACING-OLD,PLAYER-NOT-FACING /FALSE PRINTI "[You're facing to " CALL2 DIR-PRINT,PER PRINTR ".]" .FUNCT FIND-FLAG,RM,FLAG,EXCLUDED=0,O,CAR,STA? FIRST? RM >O /?KLU14 ?KLU14: GETP WINNER,P?CAR >CAR CALL ZMEMQ,RM,STATION-ROOMS >STA? ?PRG1: ZERO? O /FALSE FSET? O,FLAG \?ELS7 EQUAL? O,EXCLUDED /?ELS7 ZERO? STA? \?THN10 GETP O,P?CAR EQUAL? STACK,CAR \?ELS7 ?THN10: RETURN O ?ELS7: NEXT? O >O /?KLU15 ?KLU15: JUMP ?PRG1 .FUNCT FIND-FLAG-CAR,RM,CAR,FLAG,O FIRST? RM >O /?KLU12 ?KLU12: ?PRG1: ZERO? O /FALSE FSET? O,FLAG \?ELS7 GETP O,P?CAR EQUAL? STACK,CAR \?ELS7 RETURN O ?ELS7: NEXT? O >O /?KLU13 ?KLU13: JUMP ?PRG1 .FUNCT FIND-FLAG-LG,RM,FLAG,TBL,O,CNT=0,SIZE GETPT RM,P?GLOBAL >TBL ZERO? TBL /FALSE PTSIZE TBL DIV STACK,2 SUB STACK,1 >SIZE ?PRG6: GET TBL,CNT >O FSET? O,FLAG \?ELS10 RETURN O ?ELS10: IGRTR? 'CNT,SIZE \?PRG6 RFALSE .FUNCT FIND-FLAG-HERE,FLAG,NOT1=0,NOT2=0,NOT3=0,O,CAR,STA? FIRST? HERE >O /?KLU14 ?KLU14: GETP WINNER,P?CAR >CAR CALL ZMEMQ,HERE,STATION-ROOMS >STA? ?PRG1: ZERO? O /FALSE FSET? O,FLAG \?ELS7 EQUAL? O,NOT1,NOT2,NOT3 /?ELS7 ZERO? STA? \?THN10 GETP O,P?CAR EQUAL? STACK,CAR \?ELS7 ?THN10: RETURN O ?ELS7: NEXT? O >O /?KLU15 ?KLU15: JUMP ?PRG1 .FUNCT FIND-FLAG-HERE-NOT,FLAG,NFLAG,NOT2=0,O,CAR,STA? FIRST? HERE >O /?KLU14 ?KLU14: GETP WINNER,P?CAR >CAR CALL ZMEMQ,HERE,STATION-ROOMS >STA? ?PRG1: ZERO? O /FALSE FSET? O,FLAG \?ELS7 FSET? O,NFLAG /?ELS7 EQUAL? O,NOT2 /?ELS7 ZERO? STA? \?THN10 GETP O,P?CAR EQUAL? STACK,CAR \?ELS7 ?THN10: RETURN O ?ELS7: NEXT? O >O /?KLU15 ?KLU15: JUMP ?PRG1 .FUNCT NEXT-ROOM,RM,DIR,PT,PTS GETPT RM,DIR >PT ZERO? PT /FALSE PTSIZE PT >PTS EQUAL? PTS,UEXIT \?ELS10 GET PT,REXIT RSTACK ?ELS10: EQUAL? PTS,NEXIT /FALSE EQUAL? PTS,FEXIT \?ELS14 GET PT,FEXITFCN CALL STACK RSTACK ?ELS14: EQUAL? PTS,CEXIT \?ELS16 GETB PT,CEXITFLAG VALUE STACK ZERO? STACK /FALSE GET PT,REXIT RSTACK ?ELS16: EQUAL? PTS,DEXIT \FALSE GET PT,REXIT RSTACK .FUNCT OUTSIDE?,RM EQUAL? RM,ROOF,OTHER-ROOF,BESIDE-TRACKS /TRUE EQUAL? RM,SIDEWALK,OTHER-BESIDE-TRACKS /TRUE RFALSE .FUNCT WINDOW-IN?,RM CALL FIND-FLAG-LG,RM,WINDOWBIT RSTACK .FUNCT FRESH-AIR?,RM,P,L,TBL,O SET 'P,0 ?PRG1: NEXTP HERE,P >P ZERO? P /FALSE LESS? P,LOW-DIRECTION /?PRG1 GETPT HERE,P >TBL PTSIZE TBL >L EQUAL? L,DEXIT \?PRG1 GET TBL,DEXITOBJ >O FSET? O,OPENBIT \?PRG1 PRINTI "There's a pleasant breeze coming through the " PRINTD O PRINTR "." .ENDI