checkpoint/places.zap

166 lines
3.1 KiB
Plaintext

.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