.FUNCT PICK-ONE,TBL,LENGTH,CNT,RND,MSG,RFROB GET TBL,0 >LENGTH GET TBL,1 >CNT DEC 'LENGTH ADD TBL,2 >TBL MUL CNT,2 ADD TBL,STACK >RFROB SUB LENGTH,CNT RANDOM STACK >RND GET RFROB,RND >MSG GET RFROB,1 PUT RFROB,RND,STACK PUT RFROB,1,MSG INC 'CNT EQUAL? CNT,LENGTH \?CND1 SET 'CNT,0 ?CND1: PUT TBL,0,CNT RETURN MSG .FUNCT APRINT,OBJ FSET? OBJ,NARTICLEBIT /?CTR2 EQUAL? OBJ,PANTS,RUM,SALTS \?CCL3 ?CTR2: PRINTC 32 JUMP ?CND1 ?CCL3: FSET? OBJ,VOWELBIT \?CCL7 PRINTI " an " JUMP ?CND1 ?CCL7: PRINTI " a " ?CND1: PRINTD OBJ RTRUE .FUNCT TPRINT,OBJ FSET? OBJ,NARTICLEBIT \?CCL3 PRINTC 32 JUMP ?CND1 ?CCL3: PRINTI " the " ?CND1: PRINTD OBJ RTRUE .FUNCT CTPRINT,OBJ PRINTI "The " PRINTD OBJ RTRUE .FUNCT TPRINT-PRSO CALL TPRINT,PRSO RSTACK .FUNCT TPRINT-PRSI CALL TPRINT,PRSI RSTACK .FUNCT ARPRINT,OBJ CALL APRINT,OBJ PRINT PCR RTRUE .FUNCT TRPRINT,OBJ CALL TPRINT,OBJ PRINT PCR RTRUE .FUNCT GO START:: ?FCN: PRINTI ">SHOOT THE PIRATE Trembling, you fire the heavy arquebus. You hear its loud report over the roaring wind, yet the dark figure still approaches. The gun falls from your nerveless hands. ""You won't kill me,"" he says, stepping over the weapon. ""Not when I am the only protection you have from Jean Lafond."" " PRINT NUTBROWN PRINTI "Lips curving," PRINT EYES-RAKE PRINTI ". You are intensely aware of the strength of his hard seaworn body, of the deep sea blue of his eyes. And then his mouth is on yours, lips parted, demanding, and you arch into his kiss... He presses you against him, head bent. ""But who, my dear,"" he whispers into your hair, ""will protect you from me?"" " CRLF PRINT HIT-RETURN PRINTI "begin.]" CRLF READ P-INBUF,P-LEXV USL CALL CLEAR-SCREEN,11 SET 'HERE,CABIN USL CALL V-VERSION CRLF PRINTI "LATE ONE SPRING NIGHT IN THE WEST INDIES... A crash overhead! Pirates are boarding the Lafond Deux! The first mate hurries you into Captain Davis's cabin. ""Good, you brought the girl,"" Davis smirks. ""She'll keep the pirates busy. She was only a tool of Lafond's, anyway. Let me just find that cof--"" A man on deck screams in agony and Davis starts. ""Let's go."" The captain thrusts you on the bed and walks out, locking the door. His laugh echoes. ""Best get comfortable, girl. You're likely to be there for the rest of your life.""" CRLF CRLF CALL V-LOOK CALL MAIN-LOOP JUMP ?FCN .FUNCT CLEAR-SCREEN,CNT=24 ?PRG1: CRLF DEC 'CNT ZERO? CNT \?PRG1 RTRUE .FUNCT MAIN-LOOP,TRASH ?PRG1: CALL MAIN-LOOP-1 >TRASH JUMP ?PRG1 .FUNCT MAIN-LOOP-1,ICNT,OCNT,NUM,CNT=0,OBJ=0,TBL,V,PTBL=1,OBJ1,TMP,ONUM,?TMP1 CALL PARSER >P-WON ZERO? P-WON /?CCL3 GETB P-PRSI,P-MATCHLEN >ICNT GETB 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 GETB P-PRSI,CNT EQUAL? STACK,IT \?PRG8 CALL TOO-DARK-FOR-IT? ZERO? STACK \TRUE PUTB P-PRSI,CNT,P-IT-OBJECT SET 'TMP,TRUE-VALUE ?REP9: ZERO? TMP \?CND17 SET 'CNT,0 ?PRG19: IGRTR? 'CNT,OCNT /?CND17 GETB P-PRSO,CNT EQUAL? STACK,IT \?PRG19 CALL TOO-DARK-FOR-IT? ZERO? STACK \TRUE PUTB P-PRSO,CNT,P-IT-OBJECT ?CND17: SET 'CNT,0 ?CND4: GETB P-SYNTAX,P-SBITS BAND STACK,P-SONUMS >ONUM ZERO? OCNT /?CTR29 ZERO? ICNT \?CCL30 EQUAL? ONUM,2 \?CCL30 ?CTR29: SET 'NUM,0 JUMP ?CND28 ?CCL30: GRTR? OCNT,1 \?CCL36 SET 'TBL,P-PRSO ZERO? ICNT \?CCL39 SET 'OBJ,FALSE-VALUE JUMP ?CND37 ?CCL39: GETB P-PRSI,1 >OBJ ?CND37: SET 'NUM,OCNT JUMP ?CND28 ?CCL36: GRTR? ICNT,1 \?CCL41 SET 'PTBL,FALSE-VALUE SET 'TBL,P-PRSI GETB P-PRSO,1 >OBJ SET 'NUM,ICNT JUMP ?CND28 ?CCL41: SET 'NUM,1 ?CND28: ZERO? OBJ \?CND42 EQUAL? ICNT,1 \?CND42 GETB P-PRSI,1 >OBJ ?CND42: EQUAL? PRSA,V?WALK \?CCL48 CALL PERFORM-PRSA,PRSO >V JUMP ?CND46 ?CCL48: ZERO? NUM \?CCL50 GETB P-SYNTAX,P-SBITS BAND STACK,P-SONUMS ZERO? STACK \?CCL53 CALL PERFORM-PRSA >V SET 'PRSO,FALSE-VALUE JUMP ?CND46 ?CCL53: PRINTI "There isn't anything to " GET P-ITBL,P-VERBN >TMP EQUAL? PRSA,V?TELL \?CCL56 PRINTI "talk to" JUMP ?CND54 ?CCL56: ZERO? P-OFLAG \?CTR57 ZERO? P-MERGED /?CCL58 ?CTR57: GET TMP,0 PRINTB STACK JUMP ?CND54 ?CCL58: GETB TMP,2 >?TMP1 GETB TMP,3 CALL WORD-PRINT,?TMP1,STACK ?CND54: PRINTC 33 CRLF SET 'V,FALSE-VALUE CALL STOP JUMP ?CND46 ?CCL50: SET 'P-NOT-HERE,0 SET 'P-MULT,FALSE-VALUE GRTR? NUM,1 \?CND61 SET 'P-MULT,TRUE-VALUE ?CND61: SET 'TMP,FALSE-VALUE ?PRG63: IGRTR? 'CNT,NUM \?CCL67 GRTR? P-NOT-HERE,0 \?CCL70 PRINTI "[The " EQUAL? P-NOT-HERE,NUM /?CND71 PRINTI "other " ?CND71: PRINTI "object" EQUAL? P-NOT-HERE,1 /?CND73 PRINTC 115 ?CND73: PRINTI " that you mentioned " EQUAL? P-NOT-HERE,1 /?CCL77 PRINTI "are" JUMP ?CND75 ?CCL77: PRINTI "is" ?CND75: PRINTI "n't here.]" CRLF JUMP ?CND46 ?CCL70: ZERO? TMP \?CND46 CALL REFERRING JUMP ?CND46 ?CCL67: ZERO? PTBL /?CCL81 GETB P-PRSO,CNT >OBJ1 JUMP ?CND79 ?CCL81: GETB P-PRSI,CNT >OBJ1 ?CND79: ZERO? PTBL /?CCL84 SET 'PRSO,OBJ1 JUMP ?CND82 ?CCL84: SET 'PRSO,OBJ ?CND82: ZERO? PTBL /?CCL87 SET 'PRSI,OBJ JUMP ?CND85 ?CCL87: SET 'PRSI,OBJ1 ?CND85: GRTR? NUM,1 /?CCL89 GET P-ITBL,P-NC1 GET STACK,0 EQUAL? STACK,W?ALL,W?EVERYT \?CND88 ?CCL89: CALL DONT-ALL,OBJ1 ZERO? STACK \?PRG63 EQUAL? OBJ1,IT \?CCL97 PRINTD P-IT-OBJECT JUMP ?CND95 ?CCL97: EQUAL? OBJ1,HIM \?CCL99 PRINTD P-HIM-OBJECT JUMP ?CND95 ?CCL99: EQUAL? OBJ1,HER \?CCL101 PRINTD P-HER-OBJECT JUMP ?CND95 ?CCL101: PRINTD OBJ1 ?CND95: PRINTI ": " ?CND88: SET 'TMP,TRUE-VALUE CALL PERFORM-PRSA,PRSO,PRSI >V EQUAL? V,M-FATAL \?PRG63 ?CND46: EQUAL? V,M-FATAL \?CND104 SET 'P-CONT,FALSE-VALUE ?CND104: CALL CLOCKER-VERB? ZERO? STACK /?CND1 EQUAL? PRSA,V?TELL /?CND1 ZERO? P-WON /?CND1 GETP HERE,P?ACTION CALL STACK,M-END >V JUMP ?CND1 ?CCL3: SET 'P-CONT,FALSE-VALUE ?CND1: ZERO? P-WON /FALSE CALL CLOCKER-VERB? ZERO? STACK /?CND114 CALL CLOCKER >V ?CND114: SET 'PRSA,FALSE-VALUE SET 'PRSO,FALSE-VALUE SET 'PRSI,FALSE-VALUE RETURN PRSI .FUNCT TOO-DARK-FOR-IT? ZERO? LIT \FALSE CALL HELD?,P-IT-OBJECT,WINNER ZERO? STACK \FALSE IN? WINNER,P-IT-OBJECT /FALSE PRINT TOO-DARK CRLF RTRUE .FUNCT DONT-ALL,OBJ1,L LOC OBJ1 >L EQUAL? OBJ1,NOT-HERE-OBJECT \?CCL3 INC 'P-NOT-HERE RTRUE ?CCL3: EQUAL? PRSA,V?TAKE \?CCL5 ZERO? PRSI /?CCL5 IN? PRSO,PRSI \TRUE ?CCL5: CALL ACCESSIBLE?,OBJ1 ZERO? STACK /TRUE EQUAL? P-GETFLAGS,P-ALL \FALSE ZERO? PRSI /?CCL15 EQUAL? PRSO,PRSI /TRUE ?CCL15: EQUAL? PRSA,V?TAKE \?CCL19 FSET? OBJ1,TAKEBIT /?CCL22 FSET? OBJ1,TRYTAKEBIT \TRUE ?CCL22: EQUAL? L,WINNER,HERE,PRSI /?CCL26 LOC WINNER EQUAL? L,STACK /?CCL26 FSET? L,SURFACEBIT \TRUE FSET? L,TAKEBIT /TRUE RFALSE ?CCL26: EQUAL? OBJ1,BOOKS-GLOBAL,POWER /TRUE ZERO? PRSI \FALSE CALL HELD?,PRSO ZERO? STACK /FALSE RTRUE ?CCL19: EQUAL? PRSA,V?PUT-ON,V?PUT,V?DROP /?PRD43 EQUAL? PRSA,V?SGIVE,V?GIVE \?CCL41 ?PRD43: IN? OBJ1,WINNER \TRUE ?CCL41: EQUAL? PRSA,V?PUT-ON,V?PUT \FALSE IN? PRSO,WINNER /FALSE CALL HELD?,PRSO,PRSI ZERO? STACK \TRUE RFALSE .FUNCT CLOCKER-VERB? EQUAL? PRSA,V?$RECORD,V?HELP,V?VERSION /FALSE EQUAL? PRSA,V?$RANDOM,V?$COMMAND,V?$UNRECORD /FALSE EQUAL? PRSA,V?RESTART,V?RESTORE,V?SAVE /FALSE EQUAL? PRSA,V?UNSCRIPT,V?SCRIPT,V?QUIT /FALSE EQUAL? PRSA,V?VERBOSE,V?SUPER-BRIEF,V?BRIEF /FALSE EQUAL? PRSA,V?SCORE /FALSE RTRUE .FUNCT FAKE-ORPHAN,IT-WAS-USED=0,TMP,?TMP1 CALL ORPHAN,P-SYNTAX,FALSE-VALUE GET P-OTBL,P-VERBN >TMP PRINTI "[Be specific: Wh" ZERO? IT-WAS-USED /?CCL3 PRINTI "at object" JUMP ?CND1 ?CCL3: PRINTC 111 ?CND1: PRINT DO-YOU-WANT ZERO? TMP \?CCL6 PRINTI "tell" JUMP ?CND4 ?CCL6: GETB P-VTBL,2 ZERO? STACK \?CCL8 GET TMP,0 PRINTB STACK JUMP ?CND4 ?CCL8: GETB TMP,2 >?TMP1 GETB TMP,3 CALL WORD-PRINT,?TMP1,STACK PUTB P-VTBL,2,0 ?CND4: SET 'P-OFLAG,TRUE-VALUE SET 'P-WON,FALSE-VALUE GETB P-SYNTAX,P-SPREP1 CALL PREP-PRINT,STACK PRINTR "?]" .FUNCT PERFORM-PRSA,O=0,I=0 CALL PERFORM,PRSA,O,I RTRUE .FUNCT PERFORM,A,O=0,I=0,V,OA,OO,OI SET 'OA,PRSA SET 'OO,PRSO SET 'OI,PRSI SET 'PRSA,A EQUAL? IT,O,I \?CND1 EQUAL? A,V?WALK /?CND1 CALL VISIBLE?,P-IT-OBJECT ZERO? STACK /?CCL7 EQUAL? IT,O \?CCL10 SET 'O,P-IT-OBJECT JUMP ?CND1 ?CCL10: SET 'I,P-IT-OBJECT ?CND1: EQUAL? HIM,O,I \?CND16 EQUAL? A,V?WALK /?CND16 CALL VISIBLE?,P-HIM-OBJECT ZERO? STACK /?CCL22 EQUAL? HIM,O \?CCL25 SET 'O,P-HIM-OBJECT JUMP ?CND16 ?CCL7: ZERO? I \?CCL13 CALL FAKE-ORPHAN,TRUE-VALUE RETURN 8 ?CCL13: CALL REFERRING RETURN 8 ?CCL25: SET 'I,P-HIM-OBJECT ?CND16: EQUAL? HER,O,I \?CND31 EQUAL? A,V?WALK /?CND31 CALL VISIBLE?,P-HER-OBJECT ZERO? STACK /?CCL37 EQUAL? HER,O \?CCL40 SET 'O,P-HER-OBJECT JUMP ?CND31 ?CCL22: ZERO? I \?CCL28 CALL FAKE-ORPHAN RETURN 8 ?CCL28: CALL REFERRING,TRUE-VALUE RETURN 8 ?CCL40: SET 'I,P-HER-OBJECT ?CND31: SET 'PRSO,O SET 'PRSI,I EQUAL? A,V?WALK /?CCL48 EQUAL? NOT-HERE-OBJECT,PRSO,PRSI \?CCL48 CALL D-APPLY,STR?232,NOT-HERE-OBJECT-F >V ZERO? V /?CCL48 SET 'P-WON,FALSE-VALUE JUMP ?CND46 ?CCL37: ZERO? I \?CCL43 CALL FAKE-ORPHAN RETURN 8 ?CCL43: CALL REFERRING,TRUE-VALUE RETURN 8 ?CCL48: SET 'O,PRSO SET 'I,PRSI CALL THIS-IS-IT,PRSI CALL THIS-IS-IT,PRSO GETP WINNER,P?ACTION CALL D-APPLY,STR?233,STACK >V ZERO? V \?CND46 LOC WINNER GETP STACK,P?ACTION CALL D-APPLY,STR?234,STACK,M-BEG >V ZERO? V \?CND46 GET PREACTIONS,A CALL D-APPLY,STR?235,STACK >V ZERO? V \?CND46 ZERO? I /?CCL60 GETP I,P?ACTION CALL D-APPLY,STR?236,STACK >V ZERO? V \?CND46 ?CCL60: ZERO? O /?CCL64 EQUAL? A,V?WALK /?CCL64 GETP O,P?ACTION CALL D-APPLY,STR?237,STACK >V ZERO? V \?CND46 ?CCL64: GET ACTIONS,A CALL D-APPLY,FALSE-VALUE,STACK >V ZERO? V /?CND46 ?CND46: SET 'PRSA,OA SET 'PRSO,OO SET 'PRSI,OI RETURN V .FUNCT D-APPLY,STR,FCN,FOO=0,RES ZERO? FCN /FALSE ZERO? FOO /?CCL6 CALL FCN,FOO >RES RETURN RES ?CCL6: CALL FCN >RES RETURN RES .FUNCT DEQUEUE,RTN CALL QUEUED?,RTN >RTN ZERO? RTN /FALSE PUT RTN,C-RTN,0 RTRUE .FUNCT QUEUED?,RTN,C,E ADD C-TABLE,C-TABLELEN >E ADD C-TABLE,C-INTS >C ?PRG1: EQUAL? C,E /FALSE GET C,C-RTN EQUAL? STACK,RTN \?CND3 GET C,C-TICK ZERO? STACK /FALSE RETURN C ?CND3: ADD C,C-INTLEN >C JUMP ?PRG1 .FUNCT RUNNING?,RTN,C CALL QUEUED?,RTN >C ZERO? C /FALSE GET C,C-TICK GRTR? STACK,1 \TRUE RFALSE .FUNCT QUEUE,RTN,TICK,C,E,INT=0 ADD C-TABLE,C-TABLELEN >E ADD C-TABLE,C-INTS >C ?PRG1: EQUAL? C,E \?CCL5 ZERO? INT /?CCL8 SET 'C,INT JUMP ?CND6 ?CCL8: LESS? C-INTS,C-INTLEN \?CND9 PRINTI "**Too many ints!**" CRLF ?CND9: SUB C-INTS,C-INTLEN >C-INTS LESS? C-INTS,C-MAXINTS \?CND11 SET 'C-MAXINTS,C-INTS ?CND11: ADD C-TABLE,C-INTS >INT ?CND6: PUT INT,C-RTN,RTN JUMP ?REP2 ?CCL5: GET C,C-RTN EQUAL? STACK,RTN \?CCL14 SET 'INT,C ?REP2: ZERO? CLOCK-HAND /?CND16 GRTR? INT,CLOCK-HAND \?CND16 ADD TICK,3 SUB 0,STACK >TICK ?CND16: PUT INT,C-TICK,TICK RETURN INT ?CCL14: GET C,C-RTN ZERO? STACK \?CND3 SET 'INT,C ?CND3: ADD C,C-INTLEN >C JUMP ?PRG1 .FUNCT CLOCKER,E,TICK,RTN,FLG=0,Q?=0,OWINNER ZERO? CLOCK-WAIT /?CND1 SET 'CLOCK-WAIT,FALSE-VALUE RFALSE ?CND1: ADD C-TABLE,C-INTS >CLOCK-HAND ADD C-TABLE,C-TABLELEN >E SET 'OWINNER,WINNER SET 'WINNER,PROTAGONIST ?PRG3: EQUAL? CLOCK-HAND,E \?CCL7 SET 'CLOCK-HAND,E INC 'MOVES SET 'WINNER,OWINNER RETURN FLG ?CCL7: GET CLOCK-HAND,C-RTN ZERO? STACK /?CND5 GET CLOCK-HAND,C-TICK >TICK LESS? TICK,-1 \?CCL11 SUB 0,TICK SUB STACK,3 PUT CLOCK-HAND,C-TICK,STACK SET 'Q?,CLOCK-HAND JUMP ?CND5 ?CCL11: ZERO? TICK /?CND5 GRTR? TICK,0 \?CND13 DEC 'TICK PUT CLOCK-HAND,C-TICK,TICK ?CND13: ZERO? TICK /?CND15 SET 'Q?,CLOCK-HAND ?CND15: GRTR? TICK,0 /?CND5 GET CLOCK-HAND,C-RTN >RTN ZERO? TICK \?CND19 PUT CLOCK-HAND,C-RTN,0 ?CND19: CALL RTN ZERO? STACK /?CND21 SET 'FLG,TRUE-VALUE ?CND21: ZERO? Q? \?CND5 GET CLOCK-HAND,C-RTN ZERO? STACK /?CND5 SET 'Q?,TRUE-VALUE ?CND5: ADD CLOCK-HAND,C-INTLEN >CLOCK-HAND ZERO? Q? \?PRG3 ADD C-INTS,C-INTLEN >C-INTS JUMP ?PRG3 .ENDI