mirror of
https://github.com/historicalsource/moonmist
synced 2024-07-03 07:05:11 +03:00
350 lines
6.6 KiB
Plaintext
350 lines
6.6 KiB
Plaintext
|
|
|
|
.FUNCT GO
|
|
START::
|
|
|
|
?FCN: CALL V-VERSION
|
|
CALL INTRO
|
|
CALL MAIN-LOOP
|
|
JUMP ?FCN
|
|
|
|
|
|
.FUNCT PRINTT,OBJ
|
|
EQUAL? OBJ,TURN \?CCL3
|
|
LESS? 1,P-NUMBER \?CCL3
|
|
PRINTC 32
|
|
PRINTN P-NUMBER
|
|
PRINTI " minutes"
|
|
RTRUE
|
|
?CCL3: EQUAL? OBJ,WINDOW \?CCL9
|
|
PRINTI " the window"
|
|
RTRUE
|
|
?CCL9: CALL THE?,OBJ
|
|
PRINTC 32
|
|
PRINTD OBJ
|
|
RTRUE
|
|
|
|
|
|
.FUNCT THE?,OBJ
|
|
FSET? OBJ,NARTICLEBIT /?CND1
|
|
IN? OBJ,ROOMS /?PRG8
|
|
FSET? OBJ,SEENBIT \?CCL5
|
|
?PRG8: PRINTI " the"
|
|
JUMP ?CND1
|
|
?CCL5: FSET? OBJ,VOWELBIT \?PRG14
|
|
PRINTI " an"
|
|
JUMP ?CND1
|
|
?PRG14: PRINTI " a"
|
|
?CND1: FSET OBJ,SEENBIT
|
|
RTRUE
|
|
|
|
|
|
.FUNCT START-SENTENCE,OBJ
|
|
CALL THIS-IS-IT,OBJ
|
|
EQUAL? OBJ,PLAYER \?CCL3
|
|
PRINTI "You"
|
|
RTRUE
|
|
?CCL3: EQUAL? OBJ,NIGHTLAMP \?CCL7
|
|
PRINTI "Your lamp"
|
|
RTRUE
|
|
?CCL7: EQUAL? OBJ,LUGGAGE \?CCL11
|
|
PRINTI "Your luggage"
|
|
RTRUE
|
|
?CCL11: EQUAL? OBJ,BED \?CCL15
|
|
PRINTI "Your bed"
|
|
RTRUE
|
|
?CCL15: EQUAL? OBJ,YOUR-COLOR \?CCL19
|
|
PRINTI "Your favorite color"
|
|
RTRUE
|
|
?CCL19: EQUAL? OBJ,YOUR-ROOM \?CCL23
|
|
PRINTI "Your room"
|
|
RTRUE
|
|
?CCL23: EQUAL? OBJ,YOUR-BATHROOM \?CCL27
|
|
PRINTI "Your bathroom"
|
|
RTRUE
|
|
?CCL27: EQUAL? OBJ,YOUR-CLOSET \?CCL31
|
|
PRINTI "Your secret entrance"
|
|
RTRUE
|
|
?CCL31: EQUAL? OBJ,DINNER \?CND1
|
|
PRINTI "Your dinner"
|
|
RTRUE
|
|
?CND1: FSET? OBJ,NARTICLEBIT /?CND37
|
|
FSET? OBJ,SEENBIT \?CCL41
|
|
PRINTI "The "
|
|
JUMP ?CND37
|
|
?CCL41: FSET? OBJ,VOWELBIT \?PRG49
|
|
PRINTI "An "
|
|
JUMP ?CND37
|
|
?PRG49: PRINTI "A "
|
|
?CND37: FSET OBJ,SEENBIT
|
|
PRINTD OBJ
|
|
RTRUE
|
|
|
|
|
|
.FUNCT PRINTA,O
|
|
FSET? O,NARTICLEBIT /?PRG11
|
|
FSET? O,VOWELBIT \?PRG9
|
|
PRINTI "an "
|
|
JUMP ?PRG11
|
|
?PRG9: PRINTI "a "
|
|
?PRG11: PRINTD O
|
|
RTRUE
|
|
|
|
|
|
.FUNCT THIS-IS-IT,OBJ
|
|
EQUAL? OBJ,FALSE-VALUE,NOT-HERE-OBJECT,PLAYER /TRUE
|
|
EQUAL? OBJ,INTDIR,GLOBAL-HERE,ROOMS /TRUE
|
|
EQUAL? PRSA,V?WALK \?CND1
|
|
EQUAL? OBJ,PRSO /TRUE
|
|
?CND1: FSET? OBJ,PERSONBIT /?CCL11
|
|
GET P-ADJW,NOW-PRSI
|
|
PUT P-IT-WORDS,0,STACK
|
|
GET P-NAMW,NOW-PRSI
|
|
PUT P-IT-WORDS,1,STACK
|
|
FSET IT,TOUCHBIT
|
|
SET 'P-IT-OBJECT,OBJ
|
|
RTRUE
|
|
?CCL11: FSET? OBJ,FEMALE \?CCL13
|
|
FSET HER,TOUCHBIT
|
|
SET 'P-HER-OBJECT,OBJ
|
|
RTRUE
|
|
?CCL13: FSET HIM,TOUCHBIT
|
|
SET 'P-HIM-OBJECT,OBJ
|
|
RTRUE
|
|
|
|
|
|
.FUNCT NO-PRONOUN?,OBJ,CAP=0
|
|
EQUAL? OBJ,PLAYER /FALSE
|
|
FSET? OBJ,PERSONBIT /?CCL5
|
|
EQUAL? OBJ,P-IT-OBJECT \?CND1
|
|
FSET? IT,TOUCHBIT \?CND1
|
|
RFALSE
|
|
?CCL5: FSET? OBJ,FEMALE \?CCL11
|
|
EQUAL? OBJ,P-HER-OBJECT \?CND1
|
|
FSET? HER,TOUCHBIT \?CND1
|
|
RFALSE
|
|
?CCL11: EQUAL? OBJ,P-HIM-OBJECT \?CND1
|
|
FSET? HIM,TOUCHBIT /FALSE
|
|
?CND1: ZERO? CAP \?CCL22
|
|
CALL PRINTT,OBJ
|
|
JUMP ?CND20
|
|
?CCL22: EQUAL? CAP,1,TRUE-VALUE \?CND20
|
|
CALL START-SENTENCE,OBJ
|
|
?CND20: CALL THIS-IS-IT,OBJ
|
|
RTRUE
|
|
|
|
|
|
.FUNCT HE-SHE-IT,OBJ,CAP=0,VERB=0
|
|
CALL NO-PRONOUN?,OBJ,CAP
|
|
ZERO? STACK \?CND1
|
|
FSET? OBJ,PERSONBIT /?CCL5
|
|
ZERO? CAP \?CCL8
|
|
PRINTI " it"
|
|
JUMP ?CND1
|
|
?CCL8: EQUAL? CAP,1,TRUE-VALUE \?CND1
|
|
PRINTI "It"
|
|
JUMP ?CND1
|
|
?CCL5: EQUAL? OBJ,PLAYER \?CCL15
|
|
ZERO? CAP \?CCL18
|
|
PRINTI " you"
|
|
JUMP ?CND1
|
|
?CCL18: EQUAL? CAP,1,TRUE-VALUE \?CND1
|
|
PRINTI "You"
|
|
JUMP ?CND1
|
|
?CCL15: FSET? OBJ,FEMALE \?CCL25
|
|
ZERO? CAP \?CCL28
|
|
PRINTI " she"
|
|
JUMP ?CND1
|
|
?CCL28: EQUAL? CAP,1,TRUE-VALUE \?CND1
|
|
PRINTI "She"
|
|
JUMP ?CND1
|
|
?CCL25: ZERO? CAP \?CCL36
|
|
PRINTI " he"
|
|
JUMP ?CND1
|
|
?CCL36: EQUAL? CAP,1,TRUE-VALUE \?CND1
|
|
PRINTI "He"
|
|
?CND1: ZERO? VERB /FALSE
|
|
PRINTC 32
|
|
EQUAL? OBJ,PLAYER \?PRG68
|
|
EQUAL? VERB,STR?1 \?CCL51
|
|
PRINTI "are"
|
|
RTRUE
|
|
?CCL51: EQUAL? VERB,STR?2 \?CCL55
|
|
PRINTI "have"
|
|
RTRUE
|
|
?CCL55: EQUAL? VERB,STR?3 \?CCL59
|
|
PRINTI "try"
|
|
RTRUE
|
|
?CCL59: EQUAL? VERB,STR?4 \?PRG66
|
|
PRINTI "empty"
|
|
RTRUE
|
|
?PRG66: PRINT VERB
|
|
RTRUE
|
|
?PRG68: PRINT VERB
|
|
EQUAL? VERB,STR?5,STR?6,STR?7 /?PRG74
|
|
EQUAL? VERB,STR?3,STR?4 \?CND70
|
|
?PRG74: PRINTC 101
|
|
?CND70: EQUAL? VERB,STR?1,STR?2 /FALSE
|
|
PRINTC 115
|
|
RTRUE
|
|
|
|
|
|
.FUNCT HIM-HER-IT,OBJ,CAP=0,POSSESS?=0
|
|
CALL NO-PRONOUN?,OBJ,CAP
|
|
ZERO? STACK /?CCL3
|
|
ZERO? POSSESS? /TRUE
|
|
PRINTI "'s"
|
|
RTRUE
|
|
?CCL3: FSET? OBJ,PERSONBIT /?CCL9
|
|
ZERO? CAP \?PRG15
|
|
PRINTI " it"
|
|
JUMP ?CND10
|
|
?PRG15: PRINTI "It"
|
|
?CND10: ZERO? POSSESS? /TRUE
|
|
PRINTC 115
|
|
RTRUE
|
|
?CCL9: EQUAL? OBJ,PLAYER \?CCL22
|
|
ZERO? CAP \?PRG28
|
|
PRINTI " you"
|
|
JUMP ?CND23
|
|
?PRG28: PRINTI "You"
|
|
?CND23: ZERO? POSSESS? /TRUE
|
|
PRINTC 114
|
|
RTRUE
|
|
?CCL22: FSET? OBJ,FEMALE \?CCL35
|
|
ZERO? CAP \?PRG41
|
|
PRINTI " her"
|
|
RTRUE
|
|
?PRG41: PRINTI "Her"
|
|
RTRUE
|
|
?CCL35: ZERO? POSSESS? /?CCL45
|
|
ZERO? CAP \?PRG51
|
|
PRINTI " his"
|
|
RTRUE
|
|
?PRG51: PRINTI "His"
|
|
RTRUE
|
|
?CCL45: ZERO? CAP \?PRG58
|
|
PRINTI " him"
|
|
RTRUE
|
|
?PRG58: PRINTI "Him"
|
|
RTRUE
|
|
|
|
|
|
.FUNCT QUEUE,RTN,TICK,CINT
|
|
CALL INT,RTN >CINT
|
|
PUT CINT,C-TICK,TICK
|
|
PUT CINT,C-ENABLED?,1
|
|
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
|
|
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 QUEUED?,RTN,C
|
|
CALL INT,RTN >C
|
|
GET C,C-ENABLED?
|
|
ZERO? STACK /FALSE
|
|
GET C,C-TICK
|
|
RSTACK
|
|
|
|
|
|
.FUNCT CLOCKER,C,E,TICK,FLG=0,VAL
|
|
ZERO? CLOCK-WAIT /?CND1
|
|
SET 'CLOCK-WAIT,FALSE-VALUE
|
|
RFALSE
|
|
?CND1: IGRTR? 'PRESENT-TIME,1139 \?CND3
|
|
CALL TIMES-UP
|
|
?CND3: IGRTR? 'MOVES,59 \?CND5
|
|
SET 'MOVES,0
|
|
IGRTR? 'SCORE,23 \?CND5
|
|
SET 'SCORE,0
|
|
?CND5: ADD C-TABLE,C-INTS >C
|
|
ADD C-TABLE,C-TABLELEN >E
|
|
?PRG9: EQUAL? C,E \?CCL13
|
|
RETURN FLG
|
|
?CCL13: GET C,C-ENABLED?
|
|
ZERO? STACK /?CND11
|
|
GET C,C-TICK >TICK
|
|
ZERO? TICK /?CND11
|
|
SUB TICK,1
|
|
PUT C,C-TICK,STACK
|
|
GRTR? TICK,1 /?CND11
|
|
GET C,C-RTN
|
|
CALL STACK >VAL
|
|
ZERO? VAL /?CND11
|
|
ZERO? FLG /?CCL22
|
|
EQUAL? VAL,M-FATAL \?CND11
|
|
?CCL22: SET 'FLG,VAL
|
|
?CND11: ADD C,C-INTLEN >C
|
|
JUMP ?PRG9
|
|
|
|
|
|
.FUNCT I-FOLLOW,GARG=0,FLG=0,CNT=0,GT,VAL=0
|
|
?PRG1: IGRTR? 'CNT,GHOST-NEW-C /?REP2
|
|
GET GOAL-TABLES,CNT >GT
|
|
GET GT,GOAL-S
|
|
ZERO? STACK /?PRG1
|
|
GET GT,GOAL-ENABLE
|
|
ZERO? STACK /?PRG1
|
|
GET CHARACTER-TABLE,CNT
|
|
CALL FOLLOW-GOAL,STACK >VAL
|
|
ZERO? VAL /?PRG1
|
|
EQUAL? FLG,M-FATAL /?PRG1
|
|
SET 'FLG,VAL
|
|
JUMP ?PRG1
|
|
?REP2: RETURN FLG
|
|
|
|
|
|
.FUNCT I-ATTENTION,GARG=0,FLG=0,CNT=0,ATT,GT,PER,RM
|
|
?PRG1: IGRTR? 'CNT,GHOST-NEW-C /?REP2
|
|
GET GOAL-TABLES,CNT >GT
|
|
GET GT,ATTENTION >ATT
|
|
GRTR? ATT,0 \?PRG1
|
|
DEC 'ATT
|
|
GET CHARACTER-TABLE,CNT >PER
|
|
EQUAL? PER,CONFESSED,CAPTOR,FOLLOWER /?PRG1
|
|
SET 'GOAL-PERSON,PER
|
|
ZERO? ATT \?CCL11
|
|
LESS? BED-TIME,PRESENT-TIME /?CTR13
|
|
GET GT,GOAL-FUNCTION
|
|
EQUAL? STACK,X-RETIRES \?CCL14
|
|
?CTR13: ADD 1,CNT
|
|
GET CHAR-ROOM-TABLE,STACK >RM
|
|
IN? PER,RM \?CCL19
|
|
CALL GOODNIGHT,RM,PER
|
|
JUMP ?CND9
|
|
?CCL19: PUT GT,GOAL-FUNCTION,X-RETIRES
|
|
CALL ESTABLISH-GOAL,PER,RM
|
|
JUMP ?CND9
|
|
?CCL14: GET GT,GOAL-QUEUED >RM
|
|
ZERO? RM /?CCL21
|
|
PUT GT,GOAL-QUEUED,0
|
|
CALL ESTABLISH-GOAL,PER,RM
|
|
JUMP ?CND9
|
|
?CCL21: PUTP PER,P?LDESC,17
|
|
PUT GT,GOAL-ENABLE,1
|
|
JUMP ?CND9
|
|
?CCL11: EQUAL? ATT,1 \?CND9
|
|
IN? PER,HERE \?CND9
|
|
GET GT,GOAL-FUNCTION
|
|
CALL D-APPLY,STR?8,STACK,G-IMPATIENT
|
|
ZERO? STACK /?CND9
|
|
SET 'FLG,TRUE-VALUE
|
|
?CND9: PUT GT,ATTENTION,ATT
|
|
JUMP ?PRG1
|
|
?REP2: RETURN FLG
|
|
|
|
.ENDI
|