plunderedhearts/misc.zap
2019-04-14 00:37:50 -04:00

563 lines
12 KiB
Plaintext

.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