.FUNCT RANDOM-ELEMENT,FROB GET FROB,0 RANDOM STACK GET FROB,STACK RSTACK .FUNCT PICK-ONE,FROB,L,CNT,RND,MSG,RFROB GET FROB,0 >L GET FROB,1 >CNT DEC 'L ADD FROB,2 >FROB MUL CNT,2 ADD FROB,STACK >RFROB SUB L,CNT RANDOM STACK >RND GET RFROB,RND >MSG GET RFROB,1 PUT RFROB,RND,STACK PUT RFROB,1,MSG INC 'CNT EQUAL? CNT,L \?CND1 SET 'CNT,0 ?CND1: PUT FROB,0,CNT RETURN MSG .FUNCT GO START:: ?FCN: PUTB P-LEXV,0,59 CALL QUEUE,I-WIZARD,4 PUT STACK,0,1 CALL QUEUE,I-LANTERN,200 PUTP BALLOON,P?VTYPE,NONLANDBIT PUTP BUCKET,P?VTYPE,NONLANDBIT SET 'LIT,TRUE-VALUE SET 'WINNER,ADVENTURER SET 'HERE,INSIDE-THE-BARROW SET 'P-IT-OBJECT,FALSE-VALUE FSET? HERE,TOUCHBIT /?CND1 CALL V-VERSION CRLF ?CND1: CALL V-LOOK CALL MAIN-LOOP JUMP ?FCN .FUNCT MAIN-LOOP,TRASH ?PRG1: CALL MAIN-LOOP-1 >TRASH JUMP ?PRG1 .FUNCT MAIN-LOOP-1,ICNT,OCNT,NUM,CNT,OBJ,TBL,V,PTBL,OBJ1,TMP,O,I SET 'CNT,0 SET 'OBJ,FALSE-VALUE SET 'PTBL,TRUE-VALUE CALL PARSER >P-WON ZERO? P-WON /?CCL3 GET P-PRSI,P-MATCHLEN >ICNT GET P-PRSO,P-MATCHLEN >OCNT ZERO? P-IT-OBJECT /?CND4 CALL ACCESSIBLE?,P-IT-OBJECT ZERO? STACK /?CND4 SET 'TMP,FALSE-VALUE ?PRG8: IGRTR? 'CNT,ICNT /?REP9 GET P-PRSI,CNT EQUAL? STACK,IT \?PRG8 PUT P-PRSI,CNT,P-IT-OBJECT SET 'TMP,TRUE-VALUE ?REP9: ZERO? TMP \?CND15 SET 'CNT,0 ?PRG17: IGRTR? 'CNT,OCNT /?CND15 GET P-PRSO,CNT EQUAL? STACK,IT \?PRG17 PUT P-PRSO,CNT,P-IT-OBJECT ?CND15: SET 'CNT,0 ?CND4: ZERO? OCNT \?CCL26 SET 'NUM,OCNT JUMP ?CND24 ?CCL26: GRTR? OCNT,1 \?CCL28 SET 'TBL,P-PRSO ZERO? ICNT \?CCL31 SET 'OBJ,FALSE-VALUE JUMP ?CND29 ?CCL31: GET P-PRSI,1 >OBJ ?CND29: SET 'NUM,OCNT JUMP ?CND24 ?CCL28: GRTR? ICNT,1 \?CCL33 SET 'PTBL,FALSE-VALUE SET 'TBL,P-PRSI GET P-PRSO,1 >OBJ SET 'NUM,ICNT JUMP ?CND24 ?CCL33: SET 'NUM,1 ?CND24: ZERO? OBJ \?CND34 EQUAL? ICNT,1 \?CND34 GET P-PRSI,1 >OBJ ?CND34: EQUAL? PRSA,V?WALK \?CCL40 ZERO? P-WALK-DIR /?CCL40 CALL PERFORM,PRSA,PRSO >V JUMP ?CND38 ?CCL40: ZERO? NUM \?CCL44 GETB P-SYNTAX,P-SPREP1 DIV STACK,64 ZERO? STACK \?CCL47 CALL PERFORM,PRSA >V SET 'PRSO,FALSE-VALUE JUMP ?CND38 ?CCL47: ZERO? LIT \?PRG52 PRINT TOO-DARK CRLF JUMP ?CND38 ?PRG52: PRINT REFERRING SET 'V,FALSE-VALUE JUMP ?CND38 ?CCL44: SET 'P-NOT-HERE,0 SET 'P-MULT,FALSE-VALUE GRTR? NUM,1 \?CND54 SET 'P-MULT,TRUE-VALUE ?CND54: SET 'TMP,FALSE-VALUE ?PRG56: IGRTR? 'CNT,NUM \?CCL60 GRTR? P-NOT-HERE,0 \?CCL63 PRINTI "The " EQUAL? P-NOT-HERE,NUM /?PRG70 PRINTI "other " ?PRG70: PRINTI "object" EQUAL? P-NOT-HERE,1 /?PRG76 PRINTC 115 ?PRG76: PRINTI " that you mentioned " EQUAL? P-NOT-HERE,1 /?PRG83 PRINTI "are" JUMP ?PRG85 ?PRG83: PRINTI "is" ?PRG85: PRINTI "n't here." CRLF JUMP ?CND38 ?CCL63: ZERO? TMP \?CND38 PRINTI "There's nothing here you can take." CRLF JUMP ?CND38 ?CCL60: ZERO? PTBL /?CCL92 GET P-PRSO,CNT >OBJ1 JUMP ?CND90 ?CCL92: GET P-PRSI,CNT >OBJ1 ?CND90: ZERO? PTBL /?CCL95 SET 'O,OBJ1 JUMP ?CND93 ?CCL95: SET 'O,OBJ ?CND93: ZERO? PTBL /?CCL98 SET 'I,OBJ JUMP ?CND96 ?CCL98: SET 'I,OBJ1 ?CND96: GRTR? NUM,1 /?CCL100 GET P-ITBL,P-NC1 GET STACK,0 EQUAL? STACK,W?ALL \?CND99 ?CCL100: LOC WINNER >V EQUAL? O,NOT-HERE-OBJECT \?CCL105 INC 'P-NOT-HERE JUMP ?PRG56 ?CCL105: EQUAL? PRSA,V?TAKE \?CCL107 ZERO? I /?CCL107 GET P-ITBL,P-NC1 GET STACK,0 EQUAL? STACK,W?ALL \?CCL107 IN? O,I \?PRG56 ?CCL107: EQUAL? P-GETFLAGS,P-ALL \?CCL113 EQUAL? PRSA,V?TAKE \?CCL113 LOC O EQUAL? STACK,WINNER,HERE,V /?PRD118 LOC O EQUAL? STACK,I /?PRD118 LOC O FSET? STACK,SURFACEBIT \?PRG56 ?PRD118: FSET? O,TAKEBIT /?CCL113 FSET? O,TRYTAKEBIT \?PRG56 ?CCL113: EQUAL? OBJ1,IT \?CCL126 PRINTD P-IT-OBJECT JUMP ?PRG127 ?CCL126: PRINTD OBJ1 ?PRG127: PRINTI ": " ?CND99: SET 'PRSO,O SET 'PRSI,I SET 'TMP,TRUE-VALUE CALL PERFORM,PRSA,PRSO,PRSI >V EQUAL? V,M-FATAL \?PRG56 ?CND38: EQUAL? V,M-FATAL /?CND131 LOC WINNER GETP STACK,P?ACTION CALL STACK,M-END >V ?CND131: EQUAL? V,M-FATAL \?CND1 SET 'P-CONT,FALSE-VALUE JUMP ?CND1 ?CCL3: SET 'P-CONT,FALSE-VALUE ?CND1: ZERO? P-WON /FALSE EQUAL? PRSA,V?SUPER-BRIEF,V?BRIEF,V?TELL /TRUE EQUAL? PRSA,V?VERSION,V?SAVE,V?VERBOSE /TRUE EQUAL? PRSA,V?SCORE,V?RESTART,V?QUIT /TRUE EQUAL? PRSA,V?RESTORE,V?UNSCRIPT,V?SCRIPT /TRUE CALL CLOCKER >V RETURN V .FUNCT PERFORM,A,O=0,I=0,V,OA,OO,OI SET 'OA,PRSA SET 'OO,PRSO SET 'OI,PRSI EQUAL? IT,I,O \?CND1 CALL ACCESSIBLE?,P-IT-OBJECT ZERO? STACK \?CND1 PRINT REFERRING RETURN 2 ?CND1: EQUAL? O,IT \?CND9 SET 'O,P-IT-OBJECT ?CND9: EQUAL? I,IT \?CND11 SET 'I,P-IT-OBJECT ?CND11: SET 'PRSA,A SET 'PRSO,O ZERO? PRSO /?CND13 EQUAL? PRSI,IT /?CND13 EQUAL? PRSA,V?WALK /?CND13 SET 'P-IT-OBJECT,PRSO ?CND13: SET 'PRSI,I EQUAL? NOT-HERE-OBJECT,PRSO,PRSI \?CCL20 CALL NOT-HERE-OBJECT-F >V ZERO? V \?CND18 ?CCL20: SET 'O,PRSO SET 'I,PRSI GETP WINNER,P?ACTION CALL STACK >V ZERO? V \?CND18 LOC WINNER GETP STACK,P?ACTION CALL STACK,M-BEG >V ZERO? V \?CND18 GET PREACTIONS,A CALL STACK >V ZERO? V \?CND18 ZERO? I /?CCL31 GETP I,P?ACTION CALL STACK >V ZERO? V \?CND18 ?CCL31: ZERO? O /?CCL35 EQUAL? A,V?WALK /?CCL35 LOC O ZERO? STACK /?CCL35 LOC O GETP STACK,P?CONTFCN CALL STACK >V ZERO? V \?CND18 ?CCL35: ZERO? O /?CCL41 EQUAL? A,V?WALK /?CCL41 GETP O,P?ACTION CALL STACK >V ZERO? V \?CND18 ?CCL41: GET ACTIONS,A CALL STACK >V ZERO? V /?CND18 ?CND18: SET 'PRSA,OA SET 'PRSO,OO SET 'PRSI,OI RETURN V .FUNCT QUEUE,RTN,TICK,CINT CALL INT,RTN >CINT PUT CINT,C-TICK,TICK RETURN CINT .FUNCT INT,RTN,DEMON=0,E,C,INT ADD C-TABLE,C-TABLELEN >E ADD C-TABLE,C-INTS >C ?PRG1: EQUAL? C,E \?CCL5 SUB C-INTS,C-INTLEN >C-INTS ZERO? DEMON /?PEN6 SUB C-DEMONS,C-INTLEN >C-DEMONS ?PEN6: ADD C-TABLE,C-INTS >INT PUT INT,C-RTN,RTN RETURN INT ?CCL5: GET C,C-RTN EQUAL? STACK,RTN \?CND3 RETURN C ?CND3: ADD C,C-INTLEN >C JUMP ?PRG1 .FUNCT CLOCKER,C,E,TICK,FLG=0 ZERO? CLOCK-WAIT /?CND1 SET 'CLOCK-WAIT,FALSE-VALUE RFALSE ?CND1: ZERO? P-WON /?CCL5 PUSH C-INTS JUMP ?CND3 ?CCL5: PUSH C-DEMONS ?CND3: ADD C-TABLE,STACK >C ADD C-TABLE,C-TABLELEN >E ?PRG6: EQUAL? C,E \?CCL10 INC 'MOVES RETURN FLG ?CCL10: GET C,C-ENABLED? ZERO? STACK /?CND8 GET C,C-TICK >TICK ZERO? TICK /?CND8 SUB TICK,1 PUT C,C-TICK,STACK GRTR? TICK,1 /?CND8 GET C,C-RTN CALL STACK ZERO? STACK /?CND8 SET 'FLG,TRUE-VALUE ?CND8: ADD C,C-INTLEN >C JUMP ?PRG6 .ENDI