Compare commits

...

5 Commits

Author SHA1 Message Date
historicalsource a18e10097d Extensions on Z-Machine Fixed. 2019-04-15 23:07:06 -04:00
historicalsource f1f88a975f Extensions on Z-Machine Fixed. 2019-04-15 22:13:41 -04:00
historicalsource f78ed47cb8 Moved compilations to subdirectory. 2019-04-15 21:40:29 -04:00
Historical Source d31a60ecf4
Update README.md 2019-04-15 17:28:13 -04:00
historicalsource 1f1c2b1567 Final Revision 2019-04-13 22:22:25 -04:00
23 changed files with 663 additions and 66 deletions

BIN
COMPILED/dm3.z3 Normal file

Binary file not shown.

BIN
COMPILED/m3.z3 Normal file

Binary file not shown.

View File

@ -1 +1,34 @@
# suspect
# Suspect Source Code Collection
Suspect is a 1984 interactive fiction game written by Dave Lebling and published by Infocom.
Further information on Suspect:
* [Wikipedia](https://en.wikipedia.org/wiki/Suspect_(video_game))
* [The Digital Antiquarian](https://www.filfre.net/2013/11/suspect/)
* [The Interactive Fiction Database]()
* [The Infocom Gallery](http://gallery.guetech.org/suspect/suspect.html)
* [IFWiki](http://www.ifwiki.org/index.php/Suspect)
__What is this Repository?__
This repository is a directory of source code for the Infocom game "Suspect", including a variety of files both used and discarded in the production of the game. It is written in ZIL (Zork Implementation Language), a refactoring of MDL (Muddle), itself a dialect of LISP created by MIT students and staff.
The source code was contributed anonymously and represents a snapshot of the Infocom development system at time of shutdown - there is no remaining way to compare it against any official version as of this writing, and so it should be considered canonical, but not necessarily the exact source code arrangement for production.
__Basic Information on the Contents of This Repository__
It is mostly important to note that there is currently no known way to compile the source code in this repository into a final "Z-machine Interpreter Program" (ZIP) file. There are .ZIP files in some of the Infocom Source Code repositories but they were there as of final spin-down of the Infocom Drive and the means to create them is currently lost.
Throughout its history, Infocom used a TOPS20 mainframe with a compiler (ZILCH) to create and edit language files - this repository is a mirror of the source code directory archive of Infocom but could represent years of difference from what was originally released.
In general, Infocom games were created by taking previous Infocom source code, copying the directory, and making changes until the game worked the way the current Implementor needed. Structure, therefore, tended to follow from game to game and may or may not accurately reflect the actual function of the code.
There are also multiple versions of the "Z-Machine" and code did change notably between the first years of Infocom and a decade later. Addition of graphics, sound and memory expansion are all slowly implemented over time.
__What is the Purpose of this Repository__
This collection is meant for education, discussion, and historical work, allowing researchers and students to study how code was made for these interactive fiction games and how the system dealt with input and processing. It is not considered to be under an open license.
Researchers are encouraged to share their discoveries about the information in this source code and the history of Infocom and its many innovative employees.

BIN
dm3.zip Normal file

Binary file not shown.

View File

@ -32,8 +32,7 @@ crowd.|
<SETG BAND-PLAYING? "Breathless">
<ENABLE <QUEUE I-WAVE-2 1>>
<ENABLE <QUEUE I-SPILL 2>>
<ENABLE <QUEUE I-GAME-OVER 720>>
<NEW-SCRIPT ,BUTLER ,BUTLER-LOOP>>
<ENABLE <QUEUE I-GAME-OVER 720>>>
<ROUTINE I-WAVE ()
<CRLF>

View File

@ -564,7 +564,9 @@ for the various characters, using the MOVEMENT-GOALS table."
<COND (<L? <SET VAR <GET .TB ,MG-VARIATION>> 0>
<SET VAR <- .VAR>>
<SET FLAG T>)>
<SET DIS <COND (<G? .VAR 0> <RANDOM <* .VAR 2>>)
<SET DIS <COND (<AND <G? .VAR 0>
<G? ,PRESENT-TIME 540>>
<RANDOM <* .VAR 2>>)
(ELSE 0)>>
<ENABLE <QUEUE .INT <+ .TIM <- .DIS .VAR>>>>
<PUT ,MOVEMENT-GOALS .ID <REST .TB ,MG-LENGTH>>

BIN
m3.atari Normal file

Binary file not shown.

17
m3.fzap Normal file
View File

@ -0,0 +1,17 @@
.TIME
.INSERT "M3FREQ"
.INSERT "M3DAT" ; DATA IS IN THIS FILE
.INSERT "MACROS"
.INSERT "SYNTAX"
.INSERT "GOAL"
.INSERT "CLOCK"
.INSERT "MAIN"
.INSERT "PARSER"
.INSERT "VERBS"
.INSERT "PLACES"
.INSERT "PEOPLE"
.INSERT "THINGS"
.INSERT "EVENTS"
.INSERT "M3STR"
.END

1
m3.serial Normal file
View File

@ -0,0 +1 @@
137

212
m3.txt Normal file
View File

@ -0,0 +1,212 @@
M3: (Working Title: Deathmask)
It's a wet and rainy Halloween night, and Veronica Ashcroft is giving
her traditional Halloween party. Would you have accepted the
invitation if you had known that in a few hours Veronica would be dead
and you would be the prime suspect? Would you have rented that silly
looking cowboy costume if you had known Veronica would be strangled with
a lasso? Fortunately there are other suspects, but you have to think
fast to forestall and quick and unfortunate ending this mystery!
The Setting:
Ashcroft Farm, a Southern mansion tucked away in the Maryland hunt
country. Home of Michael Wellman and his wife, Veronica
Ashcroft-Wellman. Veronica has secretly agreed to sell the Farm for
real estate development, and plans this final Halloween bash to say
goodbye to the old place. It's to be a grand costume ball with simply
everyone invited.
The manor house is a huge old southern style mansion, a la Tara, but
more tasteful. There are stables and garages and a barn out back, and
it's clear that this is horse country: paddocks, jumping equipment, and
so on abound, and one room inside is crammed full of show pictures and
ribbons. Veronica is a serious horsewoman, and when she was younger,
she was a competition-level jumper and dressage rider.
The main center of action is the ballroom of the manor. Most of the
guests are here, but unfortunately most of the suspects were
conveniently absent when the murder was committed. A band plays, a
bartender dispenses drinks, and oddly costumed guests cavort on the
dance floor.
Other rooms include a library, a trophy room, bathrooms, a foyer, etc.
The upstairs is off limits. There are also some outside rooms (paddock,
stable, etc.).
Characters and Their Costumes:
You (the player); "cowboy"/"cowgirl"
Michael Wellman; "sheik"
Veronica Ashcroft-Wellman, Michael's wife; "Titania"
Alicia Barron, Michael's lover; "harem girl"
Richard Ashcroft, Veronica's brother; "werewolf"
Linda Meade, Richard's girlfriend; "ballerina"
Colonel Robert Marston, Administrator of the Ashcroft Trust; "explorer"
Senator Alan Asher; "harlequin"
William Cochrane, a local real estate developer; "astronaut"
Samuel Ostmann, another real estate developer; "vampire"
George Smythe, the butler; "gorilla"
Jack Johnson, bartender; "domino mask"
The Detective
Sgt. Duffy
Many other party guests (in various costumes)
[Note that many of the costumes obscure the face.]
Action:
At the start of the game, you are in the ballroom, minding your own
business, when Michael calls you over. Veronica is discussing one of
her many horses when suddenly she spills her drink all over her costume
(naturally the costume is white). Seriously annoyed, she storms out of
the room (maybe she was a little drunk).
A few minutes later, she is a little dead, as well. You can find her
sprawled in the office among her horse trophies, strangled by your own
lasso. The office is ransacked: perhaps she interrupted someone in the
midst of a burglary, a search, or what?
It is possible for you to be the first to discover the body. (If not,
someone else will.) If you find it, several different lines of play can
ensue. First, you can sound the alarm. This means the police are
called, and since you are a prime suspect, you're in deep trouble.
Second, you can try to hide the body and find the murderer yourself.
Third, you can remove the lariat and leave. Still other possibilities
might present themselves.
Modus Operandi (Spoiler Warning!):
Veronica is last "seen" after the murder was actually committed, because
the murderer's accomplice (Alicia, who resembles Veronica in build and
voice) appears briefly in the Ballroom wearing a duplicate of Veronica's
costume. This confuses the time of death and gives the murderer
(Veronica's husband, Michael) an alibi, while also casting suspicion on
you.
The murder weapon is fortuitous; you left it in the coat closet with
your coat and Michael happened upon it.
Veronica was lured away by Michael, and soon after they seem to
reappear, but in fact, Alicia has donned her costume, and is
impersonating her.
Because the murder is committed with your lasso, the detective will
suspect you, and you must avoid being arrested. You might even want to
flee, but if you do, you will be caught or possibly even killed. Better
is to find out who really did it so that when the police arrive, you can
hand over the real murderers.
Once the detective (yes, it's the player from Deadline or The Witness)
and Sgt. Duffy arrive, you have a very limited time in which to get
things fixed up to prevent your arrest. It might be better to hide the
body or the lasso, but by the same token, being discovered while doing
this is probably a sure ticket to the Big House.
The Motive:
Michael, Veronica's husband, is the murderer. He has been carrying on
affair Alicia, who becomes his accomplice, and wants a divorce so he can
to marry her. Veronica is willing to divorce, but without a property
settlement. It turns out, according to Col. Marston, the administrator
of the Ashcroft family trust, that Michael will inherit most of her real
property if she dies. If she sells the farm before she dies, as she
plans to, there is nothing for Michael to inherit.
Suspects:
Michael: Once you find out he has a lover, and wants a divorce, he's an
obvious suspect. But if he kills Veronica, there seems to be no way he
can get his hands on her money, and he's not the type to give up his
affluence. Col. Marston can clear that up.
Alicia: Her connection with Michael is unsuspected, but once you find
out about it, she's an obvious suspect.
Richard: Veronica has control of the Trust money, as oldest sibling,
and rules Richard with an iron hand. Also acts nasty to Richard's
girlfriend.
Linda: Too common for Veronica, who constantly snubs her and insults
her. She hates Veronica.
Marston: Veronica thinks he's embezzling from the Trust money (he is),
and once she gets proof he'll be fired. He sets the whole thing in
motion by revealing to Michael that he inherits the farm if his wife
dies.
Smythe: Doesn't the butler always do it? He knows Michael has a lover.
(The servants always know these things). He is loyal to Veronica in a
family-retainer sort of way, but has discovered her plans to sell the
estate: he's worked there all his life and resents the idea of leaving.
Sam Ostmann: President of the firm Veronica is selling the Farm to. He
has no motive, and is probably the one with the most to lose from her
death.
William Cochrane: President of a rival to Ostmann's firm. His company
is close to collapse. Veronica's decision not to sell to him will ruin
him. He reveals the sale to Michael, reinforcing the motive. On the
other hand, at first he looks like he has the strongest motive.
Senator Asher: He is in the room next to the room where her body is
found.
Bartender: Remembers who was drinking what. Perhaps Alicia doesn't
drink what Veronica does?
Clues:
* Key to office, which is normally locked, and locked between the time
of the murder and Alicia's entrance, but unlocked afterward. Alicia
has to ditch the costume, then get back to the party by going around
the outside of the house, and get the key back to Michael.
* Michael disposes of the costume Alicia ditches. By appropriate
sneaking you can watch him do it, or catch him in the act.
* Alicia's overcoat is soaked, from her first, secret arrival, though the
rain has let up at the time everyone think's the murder happened.
* Receipt for Alicia's copy of Veronica's costume.
* Where was Alicia before the impersonation?
* Costume Veronica has on is different in some way from Alicia's.
* How did Michael find out what costume Veronica would be wearing?
* Loophole in family trust.
* Michael's talk with Col. Marston about loophole.
* Purchase and Sale Agreement on farm is found in the office on the
desk. It's almost too obvious...
* Col. Marston's embezzlement is known to Veronica, and that's what's
really missing from the office; the evidence.
Ideas for Package Elements:
Mask: Your mask, an ordinary black or white mask.
Receipt: The receipt from your costume.
Invitation: The invitation to Veronica's party.
[Needed is an anti-piracy element, if we think one is important.]

18
m3.xzap Normal file
View File

@ -0,0 +1,18 @@
.TIME
.INSERT "M3FREQ"
.INSERT "M3DAT" ; DATA IS IN THIS FILE
.INSERT "MACROS"
.INSERT "SYNTAX"
.INSERT "DEBUG"
.INSERT "GOAL"
.INSERT "CLOCK"
.INSERT "MAIN"
.INSERT "PARSER"
.INSERT "VERBS"
.INSERT "PLACES"
.INSERT "PEOPLE"
.INSERT "THINGS"
.INSERT "EVENTS"
.INSERT "M3STR"
.END

BIN
m3.zip

Binary file not shown.

200
m3freq.xzap Normal file
View File

@ -0,0 +1,200 @@
.FSTR FSTR?1,"the " ;1756 879
.FSTR FSTR?2,", " ;943 944
.FSTR FSTR?3,"and " ;746 374
.FSTR FSTR?4,". " ;708 709
.FSTR FSTR?5,"you " ;566 284
.FSTR FSTR?6,"The " ;528 177
.FSTR FSTR?7,"to " ;473 474
.FSTR FSTR?8,"You " ;399 134
.FSTR FSTR?9,"is " ;376 377
.FSTR FSTR?10,"of " ;372 373
.FSTR FSTR?11,"It's " ;350 71
.FSTR FSTR?12,"with " ;300 101
.FSTR FSTR?13,"that " ;300 101
.FSTR FSTR?14,"This " ;300 76
.FSTR FSTR?15,"have " ;282 95
.FSTR FSTR?16,"your " ;258 87
.FSTR FSTR?17,"doesn't " ;252 37
.FSTR FSTR?18,"I " ;228 229
.FSTR FSTR?19,"are " ;226 114
.FSTR FSTR?20,"don't " ;225 46
.FSTR FSTR?21,"for " ;210 106
.FSTR FSTR?22,"this " ;207 70
.FSTR FSTR?23,"but " ;200 101
.FSTR FSTR?24,"He " ;200 101
.FSTR FSTR?25,"in " ;198 199
.FSTR FSTR?26,"from " ;192 65
.FSTR FSTR?27,"can't " ;185 38
.FSTR FSTR?28,"about " ;184 47
.FSTR FSTR?29,"He's " ;180 37
.FSTR FSTR?30,"was " ;176 89
.FSTR FSTR?31,"would " ;176 45
.FSTR FSTR?32,"I'm " ;176 45
.FSTR FSTR?33,"There " ;175 36
.FSTR FSTR?34,"been " ;171 58
.FSTR FSTR?35,"That's " ;161 24
.FSTR FSTR?36,"looks " ;160 41
.FSTR FSTR?37,"has " ;152 77
.FSTR FSTR?38,"What " ;152 39
.FSTR FSTR?39,"his " ;150 76
.FSTR FSTR?40,"think " ;148 38
.FSTR FSTR?41,"already " ;144 25
.FSTR FSTR?42,"something " ;144 19
.FSTR FSTR?43,"She " ;141 48
.FSTR FSTR?44,"seems " ;140 36
.FSTR FSTR?45,"It " ;134 68
.FSTR FSTR?46,"costume" ;130 27
.FSTR FSTR?47,"what " ;129 44
.FSTR FSTR?48,"Ashcroft " ;128 17
.FSTR FSTR?49,"like " ;126 43
.FSTR FSTR?50,"you're " ;126 22
.FSTR FSTR?51,"just " ;123 42
.FSTR FSTR?52,"isn't " ;120 25
.FSTR FSTR?53,"I've " ;115 24
.FSTR FSTR?54,"There's " ;112 15
.FSTR FSTR?55,"here" ;110 56
.FSTR FSTR?56,"wearing " ;108 19
.FSTR FSTR?57,"on " ;107 108
.FSTR FSTR?58,"You're " ;105 16
.FSTR FSTR?59,"south " ;104 27
.FSTR FSTR?60,"murder" ;104 27
.FSTR FSTR?61,"That " ;104 27
.FSTR FSTR?62,"not " ;102 52
.FSTR FSTR?63,"she's " ;100 21
.FSTR FSTR?64,"out " ;98 50
.FSTR FSTR?65,"fireplace" ;98 15
.FSTR FSTR?66,"Richard " ;98 15
.FSTR FSTR?67,"more " ;96 33
.FSTR FSTR?68,"which " ;96 25
.FSTR FSTR?69,"front " ;96 25
.FSTR FSTR?70,"someone " ;96 17
.FSTR FSTR?71,"she " ;94 48
.FSTR FSTR?72,"one " ;94 48
.FSTR FSTR?73,"door " ;93 32
.FSTR FSTR?74,"her " ;92 47
.FSTR FSTR?75,"large " ;92 24
.FSTR FSTR?76,"could " ;92 24
.FSTR FSTR?77,"it " ;90 91
.FSTR FSTR?78,"around " ;90 19
.FSTR FSTR?79,"didn't " ;90 16
.FSTR FSTR?80,"ballroom" ;90 16
.FSTR FSTR?81,"as " ;88 89
.FSTR FSTR?82,"that" ;88 45
.FSTR FSTR?83,"it's " ;88 23
.FSTR FSTR?84,"he's " ;88 23
.FSTR FSTR?85,"very " ;87 30
.FSTR FSTR?86,"be " ;85 86
.FSTR FSTR?87,"nothing " ;84 15
.FSTR FSTR?88,"costume " ;84 15
.FSTR FSTR?89,"he " ;82 83
.FSTR FSTR?90,"into " ;81 28
.FSTR FSTR?91,"at " ;80 81
.FSTR FSTR?92,"north " ;80 21
.FSTR FSTR?93,"telephone " ;80 11
.FSTR FSTR?94,"certainly " ;80 11
.FSTR FSTR?95,"can " ;78 40
.FSTR FSTR?96,"some " ;78 27
;word frequency table of 96 most common words
WORDS:: .TABLE
FSTR?1
FSTR?2
FSTR?3
FSTR?4
FSTR?5
FSTR?6
FSTR?7
FSTR?8
FSTR?9
FSTR?10
FSTR?11
FSTR?12
FSTR?13
FSTR?14
FSTR?15
FSTR?16
FSTR?17
FSTR?18
FSTR?19
FSTR?20
FSTR?21
FSTR?22
FSTR?23
FSTR?24
FSTR?25
FSTR?26
FSTR?27
FSTR?28
FSTR?29
FSTR?30
FSTR?31
FSTR?32
FSTR?33
FSTR?34
FSTR?35
FSTR?36
FSTR?37
FSTR?38
FSTR?39
FSTR?40
FSTR?41
FSTR?42
FSTR?43
FSTR?44
FSTR?45
FSTR?46
FSTR?47
FSTR?48
FSTR?49
FSTR?50
FSTR?51
FSTR?52
FSTR?53
FSTR?54
FSTR?55
FSTR?56
FSTR?57
FSTR?58
FSTR?59
FSTR?60
FSTR?61
FSTR?62
FSTR?63
FSTR?64
FSTR?65
FSTR?66
FSTR?67
FSTR?68
FSTR?69
FSTR?70
FSTR?71
FSTR?72
FSTR?73
FSTR?74
FSTR?75
FSTR?76
FSTR?77
FSTR?78
FSTR?79
FSTR?80
FSTR?81
FSTR?82
FSTR?83
FSTR?84
FSTR?85
FSTR?86
FSTR?87
FSTR?88
FSTR?89
FSTR?90
FSTR?91
FSTR?92
FSTR?93
FSTR?94
FSTR?95
FSTR?96
.ENDT
.ENDI

View File

@ -138,7 +138,10 @@ Copyright (c) 1984 Infocom, Inc. All rights reserved."
<SET L <- .L 1>>
<SET FROB <REST .FROB 2>>
<SET RFROB <REST .FROB <* .CNT 2>>>
<SET RND <RANDOM <- .L .CNT>>>
<SET RND
<COND (<G? ,PRESENT-TIME 540>
<RANDOM <- .L .CNT>>)
(ELSE 1)>>
<SET MSG <GET .RFROB .RND>>
<PUT .RFROB .RND <GET .RFROB 1>>
<PUT .RFROB 1 .MSG>
@ -148,7 +151,8 @@ Copyright (c) 1984 Infocom, Inc. All rights reserved."
.MSG>
<ROUTINE PROB (BASE)
<NOT <L? .BASE <RANDOM 100>>>>
<AND <G? ,PRESENT-TIME 540>
<NOT <L? .BASE <RANDOM 100>>>>>
<DEFMAC ENABLE ('INT) <FORM PUT .INT ,C-ENABLED? 1>>

View File

@ -448,6 +448,7 @@ Check your manual for more details." CR>
<GLOBAL P-NUMBER 0>
<GLOBAL P-EXCHANGE 0>
<ROUTINE ORPHAN-MERGE ("AUX" (CNT -1) TEMP VERB BEG END (ADJ <>) WRD)
<SETG P-OFLAG <>>
<COND (<WT? <SET WRD <GET <GET ,P-ITBL ,P-VERBN> 0>>
@ -464,9 +465,7 @@ Check your manual for more details." CR>
<NOT .ADJ>
<NOT <==? .VERB <GET ,P-OTBL ,P-VERB>>>>
<RFALSE>)
(<==? ,P-NCN 2> <RFALSE>)
(<AND ,P-CONT
<==? .VERB ,ACT?TELL>>
(<==? ,P-NCN 2>
<RFALSE>)
(<==? <GET ,P-OTBL ,P-NC1> 1>
<COND (<OR <==? <SET TEMP <GET ,P-ITBL ,P-PREP1>>
@ -474,27 +473,29 @@ Check your manual for more details." CR>
<0? .TEMP>>
<COND (.ADJ
<PUT ,P-OTBL ,P-NC1 <REST ,P-LEXV 2>>
;<PUT ,P-OTBL ,P-NC1L <REST ,P-LEXV 6>>)
<COND (<0? <GET ,P-ITBL ,P-NC1L>>
<PUT ,P-ITBL ,P-NC1L <REST ,P-LEXV 6>>)>
<COND (<0? ,P-NCN>
<SETG P-NCN 1>)>)
(T
<PUT ,P-OTBL ,P-NC1 <GET ,P-ITBL ,P-NC1>>
;<PUT ,P-OTBL ,P-NC1L <GET ,P-ITBL ,P-NC1L>>)>
<COND (<EQUAL? <GET ,P-ITBL ,P-NC1L> 0>
<PUT ,P-ITBL ,P-NC1L <REST ,P-LEXV 6>>)>
<PUT ,P-OTBL ,P-NC1L <GET ,P-ITBL ,P-NC1L>>)
(T <RFALSE>)>)
(T
<RFALSE>)>)
(<==? <GET ,P-OTBL ,P-NC2> 1>
<COND (<OR <==? <SET TEMP <GET ,P-ITBL ,P-PREP1>>
<GET ,P-OTBL ,P-PREP2>>
<0? .TEMP>>
<COND (.ADJ
<PUT ,P-ITBL ,P-NC1 <REST ,P-LEXV 2>>
;<PUT ,P-ITBL ,P-NC1L <REST ,P-LEXV 6>>)>
<COND (<0? <GET ,P-ITBL ,P-NC1L>>
<PUT ,P-ITBL ,P-NC1L <REST ,P-LEXV 6>>)>)>
<PUT ,P-OTBL ,P-NC2 <GET ,P-ITBL ,P-NC1>>
<COND (<EQUAL? <GET ,P-ITBL ,P-NC1L> 0>
<PUT ,P-ITBL ,P-NC1L <REST ,P-LEXV 6>>)>
<PUT ,P-OTBL ,P-NC2L <GET ,P-ITBL ,P-NC1L>>
<SETG P-NCN 2>)
(T <RFALSE>)>)
(T
<RFALSE>)>)
(,P-ACLAUSE
<COND (<AND <NOT <==? ,P-NCN 1>> <NOT .ADJ>>
<SETG P-ACLAUSE <>>
@ -506,8 +507,11 @@ Check your manual for more details." CR>
<REPEAT ()
<SET WRD <GET .BEG 0>>
<COND (<==? .BEG .END>
<COND (.ADJ <ACLAUSE-WIN .ADJ> <RETURN>)
(T <SETG P-ACLAUSE <>> <RFALSE>)>)
<COND (.ADJ
<ACLAUSE-WIN .ADJ>
<RETURN>)
(T
<SETG P-ACLAUSE <>> <RFALSE>)>)
(<AND <NOT .ADJ>
<OR <BTST <GETB .WRD ,P-PSOFF>
,PS?ADJECTIVE> ;"same as WT?"
@ -533,13 +537,13 @@ Check your manual for more details." CR>
<PUTB ,P-VTBL 3 <GETB ,P-OVTBL 3>>
<PUT ,P-OTBL ,P-VERBN ,P-VTBL>
<PUTB ,P-VTBL 2 0>
<COND (<NOT <==? <GET ,P-OTBL ,P-NC2> 0>> <SETG P-NCN 2>)
(T <SETG P-NCN 1>)>
;<AND <NOT <==? <GET ,P-OTBL ,P-NC2> 0>> <SETG P-NCN 2>>
<REPEAT ()
<COND (<G? <SET CNT <+ .CNT 1>> ,P-ITBLLEN>
<SETG P-MERGED T>
<RTRUE>)
(T <PUT ,P-ITBL .CNT <GET ,P-OTBL .CNT>>)>>
(T
<PUT ,P-ITBL .CNT <GET ,P-OTBL .CNT>>)>>
T>
<ROUTINE ACLAUSE-WIN (ADJ)
@ -938,11 +942,11 @@ Check your manual for more details." CR>
<TELL "(">
<COND (<NOT <0? .PREP>>
<PRINTB <PREP-FIND .PREP>>
<COND (<AND <EQUAL? .PREP ,W?DOWN>
<FSET? .OBJ ,FURNITURE>>
<TELL " on">)>
<THE? .OBJ>
<TELL " ">
;<COND (<NOT <FSET? .OBJ ,PERSON>>
<TELL " the ">)
(T <TELL " ">)>)>
<TELL " ">)>
<TELL D .OBJ ")" CR>
.OBJ)>)
(T <SETG P-GWIMBIT 0> <RFALSE>)>>
@ -1387,7 +1391,7 @@ Check your manual for more details." CR>
<PRINTB <GET .TMP 0>>)
(T
<WORD-PRINT <GETB .TMP 2> <GETB .TMP 3>>)>
<TELL "\"." CR>
<TELL ".\"" CR>
<RFALSE>)
(T)>>

View File

@ -355,7 +355,7 @@ arrived." CR>)
<COND (<VERB? HELLO>
<COND (<FSET? ,MICHAEL ,TOLD>
<TELL
"\"How could this have happened? You must feel lucky, something like
"\"How could this have happened? " ,YOU-MUST "feel lucky, something like
this happening when you're here, but it's horrible, horrible!\"" CR>)
(T
<TELL
@ -1163,10 +1163,12 @@ CTHE ,DETECTIVE ,STOPS-YOU CR>)
(<VERB? DROP>
<MOVE ,PRSO ,HERE>
<TELL "The body drops like a sack of potatoes." CR>)
(<AND <VERB? SLAP KILL MUNG ATTACK TIE-WITH TIE-TO>
(<VERB? POUR-ON THROW MUNG>
<TELL "That might destroy evidence." CR>)
(<AND <VERB? SLAP KILL ATTACK TIE-WITH TIE-TO>
<EQUAL? ,PRSO ,CORPSE>>
<TELL
"You haven't been paying very close attention, have you?" CR>)
"She's quite dead already, you know." CR>)
(<AND <VERB? THROW-AT> <EQUAL? ,PRSI ,CORPSE>>
<MOVE ,PRSO ,HERE>
<TELL "That wasn't very sporting." CR>)
@ -1568,7 +1570,7 @@ think you're doing?\" she asks, frostily." CR>)
<COND (<EQUAL? ,WINNER ,ALICIA>
<COND (<VERB? HELLO>
<TELL
"\"Hello. You must be the reporter " 'VERONICA " said was coming tonight.\"" CR>)
"\"Hello. " ,YOU-MUST "be the reporter " 'VERONICA " said was coming tonight.\"" CR>)
(<AND <VERB? GIVE>
<EQUAL? ,PRSO ,ALICIA-COAT>
<EQUAL? ,PRSI ,BUTLER>>
@ -2066,7 +2068,7 @@ right?\"" CR>)
instead, she's interesting: she's the Dragon Lady, not the Fairy Queen.\"" CR>)
(<IN? ,PRSI ,HERE>
<TELL
"\"Are you trying to cause trouble? You must think I'm drunk and will say
"\"Are you trying to cause trouble? " ,YOU-MUST "think I'm drunk and will say
anything about anyone.\"" CR>)
(<EQUAL? ,PRSI ,GLOBAL-MICHAEL>
<TELL
@ -2513,7 +2515,7 @@ over without Richard.\"">)
(IN GLOBAL-OBJECTS)
(DESC "Senator Asher")
(SYNONYM ASHER HARLEQUIN ALAN AL)
(ADJECTIVE SENATOR ALAN AL)
(ADJECTIVE SENATOR SEN ALAN AL)
(ACTION GLOBAL-PERSON-F)
(FLAGS TRANSBIT PERSON)
(CHARACTER 7)>
@ -2567,7 +2569,7 @@ though he had been punched." CR>)
revelation." CR>)>)
(<AND <VERB? ACCUSE> <EQUAL? ,PRSI ,GLOBAL-MURDER>>
<TELL
"\"You must be insane. Sure, I was in the next room when it happened.
"\"" ,YOU-MUST "be insane. Sure, I was in the next room when it happened.
How do you suppose that makes me feel? I was in love with her once...
I suppose I still am. I could no more kill her than, than...\" He chokes
back a sob." CR>)
@ -4248,8 +4250,8 @@ to conduct.\"" CR>)
<SET FLG
<PLAYER-ARRESTED? ,DETECTIVE .GARG>>>
<RTRUE>)>
<COND (<IN? ,DETECTIVE ,HERE>
<LAB-RESULTS-TO-PLAYER .GARG>
<COND (<AND <IN? ,DETECTIVE ,HERE>
<LAB-RESULTS-TO-PLAYER .GARG>>
<SET GARG ,G-ALREADY>)>
<COND (<IN? ,DETECTIVE ,PORCH>
<SETG NEW-ARRIVAL ,DETECTIVE>

View File

@ -361,7 +361,7 @@ sits on a walnut secretary in one corner.")
(<AND <VERB? PUT>
,PRSI
<NOT <FSET? ,PRSI ,OPENBIT>>>
<TELL "You must open the " 'WINDOW-SEAT " first." CR>)
<TELL ,YOU-MUST "open the " 'WINDOW-SEAT " first." CR>)
(<AND <VERB? PUT> <EQUAL? ,PRSO ,CORPSE>>
<TELL
"Your name wouldn't be Brewster, by any chance?" CR>
@ -370,7 +370,7 @@ sits on a walnut secretary in one corner.")
<TELL
"A " 'WINDOW-SEAT " is a bench underneath a window that often has storage
space inside it. This one overlooks the front of the house and down the hill.
In \"Arsenic and Old Lace\", there were several bodies hidden in "
In \"Arsenic and Old Lace,\" there were several bodies hidden in "
A ,WINDOW-SEAT "." CR>)>>
<OBJECT MORNING-ROOM-DOOR
@ -755,7 +755,11 @@ answer coherently or civilly." CR>)
<TELL
"The guest is rumpled and crumpled from the recent melee. He appears to
be wearing the remains of a devil costume. Fortunately, he has no
pitchfork." CR>)>>
pitchfork." CR>)
(<AND <NOT <IN? ,GUEST ,HERE>>
<EQUAL? ,PLAYER ,WINNER>>
<PERFORM ,V?FIND ,GUEST>
<RTRUE>)>>
<ROOM HALLWAY-13
(IN ROOMS)

8
questions.txt Normal file
View File

@ -0,0 +1,8 @@
"
When did you last see Veronica?
What was Veronica drinking?
Who was with Veronica?
What did Veronica say?
Where was Veronica?
Where was Veronica at 5:30?
"

12
rchk.zil Normal file
View File

@ -0,0 +1,12 @@
%<COND (<NOT <GASSIGNED? PREDGEN>>
<ROUTINE RCHK ()
<REPEAT ((R <FIRST? ,ROOMS>) (CNT 0))
<COND (<NOT <FSET? .R ,TOUCHBIT>> <FSET .R ,TOUCHBIT>)
(ELSE <ERROR!- LOOP .R>)>
<PRINTN <SET CNT <+ .CNT 1>>>
<PRINT " ">
<PRINTD .R>
<CRLF>
<COND (<NOT <GETP .R ,P?STATION>> <ERROR!- .R STATION>)>
<COND (<NOT <GETP .R ,P?LINE>> <ERROR!- .R LINE>)>
<COND (<NOT <SET R <NEXT? .R>>> <RETURN>)>>>)>

68
suspect.zil Normal file
View File

@ -0,0 +1,68 @@
"COMPILE/LOAD FILE for M3
Copyright (C) 1984 Infocom, Inc. All rights reserved."
<REPEAT (CHR)
<PRINC "Debugging? (Y or N): " ,OUTCHAN>
<SET CHR <TYI>>
<COND (<MEMQ .CHR "Yy ">
<PRINC " Debugging!
" ,OUTCHAN>
<RETURN <SETG DEBUGGING? T>>)
(<MEMQ .CHR "Nn">
<PRINC " No debugging!
" ,OUTCHAN>
<RETURN <SETG DEBUGGING? <>>>)
(ELSE
<PRINC " ??
" ,OUTCHAN>)>>
<DEFINE DEBUG-CODE ('X "OPTIONAL" ('Y T))
<COND (,DEBUGGING? .X)(ELSE .Y)>>
<COND (<GASSIGNED? PREDGEN>
<PRINC "Compiling">
<ID 0>)
(T <PRINC "Loading">)>
<PRINC " Suspect: An INTERLOGIC Mystery
">
<BLOAT 90000 0 0 3500 0 0 0 0 0 512>
<SET REDEFINE T>
;<GLOBAL BIGFIX 10000>
<OR <GASSIGNED? ZILCH>
<SETG WBREAKS <STRING !\" !,WBREAKS>>>
<DEFINE IFILE (STR "OPTIONAL" (FLOAD? <>) "AUX" (TIM <TIME>))
<INSERT-FILE .STR .FLOAD?>>
<DIRECTIONS NORTH SOUTH EAST WEST NE NW SE SW UP DOWN IN OUT>
<CONSTANT SERIAL 0>
<PROPDEF SIZE 5>
<PROPDEF CAPACITY 0>
<COND (<GASSIGNED? PREDGEN>
<SETG ZSTR-ON <SETG ZSTR-OFF ,TIME>>)>
<IFILE "MACROS" T>
<IFILE "SYNTAX" T>
%<DEBUG-CODE <IFILE "DEBUG" T>>
<IFILE "PARSER" T>
<ENDLOAD> ;"ZILCH ignores this, of course"
<IFILE "CLOCK" T>
<IFILE "MAIN" T>
<IFILE "GOAL" T>
<IFILE "VERBS" T>
<IFILE "PLACES" T>
<IFILE "PEOPLE" T>
<IFILE "THINGS" T>
<IFILE "EVENTS" T>
<GC-MON T>
<GC 0 T 5>

View File

@ -570,7 +570,7 @@ Copyright (C) 1984 Infocom, Inc. All rights reserved."
<SYNONYM TURN FLIP SHUT>
<SYNTAX TURN OBJECT ;(FIND TURNBIT) (HELD CARRIED ON-GROUND IN-ROOM)
= V-TURN ;PRE-TURN>
<SYNTAX TURN DOWN OBJECT = V-TURN-DOWN>
;<SYNTAX TURN DOWN OBJECT = V-TURN-DOWN>
<SYNTAX TURN IN OBJECT ;(FIND TURNBIT) (HELD CARRIED ON-GROUND IN-ROOM)
= V-TURN ;PRE-TURN>
<SYNTAX TURN OFF OBJECT (HELD CARRIED ON-GROUND IN-ROOM)
@ -579,7 +579,7 @@ Copyright (C) 1984 Infocom, Inc. All rights reserved."
= V-LAMP-ON>
<SYNTAX TURN TO OBJECT (HELD CARRIED ON-GROUND IN-ROOM)
= V-TURN ;PRE-TURN>
<SYNTAX TURN UP OBJECT = V-TURN-UP>
;<SYNTAX TURN UP OBJECT = V-TURN-UP>
<SYNTAX UNLOCK OBJECT (ON-GROUND IN-ROOM) = V-UNLOCK PRE-UNLOCK>
<SYNTAX UNLOCK OBJECT (ON-GROUND IN-ROOM)
@ -604,7 +604,7 @@ Copyright (C) 1984 Infocom, Inc. All rights reserved."
<SYNTAX VERBOSE = V-VERBOSE>
<SYNONYM RELEASE REVISION VERSION EDITION>
<SYNONYM RELEASE VERSION>
<SYNTAX RELEASE = V-VERSION>
<SYNTAX RELEASE OBJECT (FIND PERSON) = V-UNTIE>

View File

@ -117,6 +117,9 @@ Copyright (C) 1984 Infocom, Inc. All rights reserved."
<COND (<==? .OBJ ,NOT-HERE-OBJECT> <RTRUE>)
(.PRSO? <SETG PRSO .OBJ>)
(T <SETG PRSI .OBJ>)>)
(<NOT ,P-NAM>
<TELL-NO-NOUNS>
<RTRUE>)
(ELSE
<WHICH-PRINT 0 .M-F .TBL>
<SETG P-ACLAUSE

View File

@ -156,14 +156,13 @@ Copyright (C) 1984 Infocom, Inc. All rights reserved."
<ROUTINE V-VERSION ("AUX" (CNT 17))
<TELL
"SUSPECT: An Interactive Mystery|
"SUSPECT|
Infocom interactive fiction - a mystery story|
Copyright (c) 1984 Infocom, Inc. All rights reserved.|
">
<COND (<NOT <==? <BAND <GETB 0 1> 8> 0>>
<TELL
"Licensed to Tandy Corporation.|
">)>
<TELL "SUSPECT is a trademark of Infocom, Inc.|
;<COND (<NOT <==? <BAND <GETB 0 1> 8> 0>>
<TELL "Licensed to Tandy Corporation." CR>)>
<TELL "SUSPECT is a registered trademark of Infocom, Inc.|
Release number ">
<PRINTN <BAND <GET 0 1> *3777*>>
<TELL " / Serial number ">
@ -731,7 +730,7 @@ tried to talk to " A ,PRSO "!" CR>)
next to Impossible." CR>>
<ROUTINE V-CALL-LOSE ()
<TELL "You must use a verb." CR>>
<TELL ,YOU-MUST "use a verb." CR>>
<ROUTINE V-$CALL ("AUX" PER (MOT <>) (HERE? <>))
<COND (<SET PER <CHARACTERIZE? ,PRSO>>
@ -1015,10 +1014,13 @@ The telephone hangs up." CR>)
(<SET DIR <DIR-FROM ,HERE ,PRSO>>
<DO-WALK .DIR>
<RTRUE>)
(<OUTSIDE? ,HERE>
<TELL
"It's dark and confusing out here, you'll have to use directions." CR>)
(ELSE
<COND (,PLAYER-HIDING <PLAYER-GETS-UP>)>
<PLAYER-GETS-UP>
<ESTABLISH-GOAL ,PLAYER ,PRSO>
<PERFORM ,V?CONTINUE>
<V-CONTINUE>
<RTRUE>)>)
(<FSET? ,PRSO ,DOORBIT>
<COND (<FSET? ,PRSO ,LOCKED>
@ -1044,9 +1046,11 @@ The telephone hangs up." CR>)
<TELL "You hit your head against " THE ,PRSO
" as you try it." CR>)
(<IN? ,PRSO ,WINNER>
<TELL "You must think you're a contortionist!" CR>)
<TELL ,YOU-MUST "think you're a contortionist!" CR>)
(ELSE <TELL <PICK-ONE ,YUKS> CR>)>>
<GLOBAL YOU-MUST "You must ">
<ROUTINE V-CONTINUE ("AUX" GT OL WHERE OS OI GF DIR)
<SET GT <GET ,GOAL-TABLES ,PLAYER-C>>
<COND (<GET .GT ,GOAL-S>
@ -1197,9 +1201,9 @@ The telephone hangs up." CR>)
(T <TELL
"I thought reporters always knew their way around!" CR>)>)
(<AND <EQUAL? <META-LOC ,PRSO> ,HERE>
<NOT <EQUAL? ,PRSO ,PULSE>>>
<TELL "It's right">
<TELL-HERE>)>>
<NOT <EQUAL? ,PRSO ,PULSE>>
<NOT <SEE-INSIDE? <LOC ,PRSO>>>>
<NOT-HERE ,PRSO>)>>
<GLOBAL WHAT-DO-YOU-MEAN "What do you mean? She's dead!">
@ -1595,7 +1599,10 @@ CD ,PRSO " is taking part in " A ,DISCUSSION "." CR>)
(<==? ,PRSO ,HALLWAY>
<COND (<NOT <CORRIDOR-LOOK>>
<TELL "There's no one there." CR>)>)
(T <TELL "It has been a long week, hasn't it?" CR>)>>
(T <TELL-LONG-WEEK>)>>
<ROUTINE TELL-LONG-WEEK ()
<TELL "It has been a long week, hasn't it?" CR>>
<ROUTINE TELL-CLOSED ()
<TELL
@ -1707,8 +1714,7 @@ CTHE ,PRSO " is empty." CR>)>)
<COND (<FSET? ,PRSO ,PERSON>
<TELL <PICK-ONE ,YUKS> CR>)
(<NOT <==? ,PRSO ,ROOMS>>
<TELL "It has been a long week, hasn't it?" CR>
<RTRUE>)
<TELL-LONG-WEEK>)
(<==? <GETP ,HERE ,P?LINE> ,OUTSIDE-LINE-C>
<PERFORM ,V?EXAMINE ,WEATHER>
<RTRUE>)
@ -1723,7 +1729,7 @@ plastered." CR>)>>
<PERFORM ,V?MAKE ,PLAYER ,PRSO>)
(T
<TELL
"\"Eat, drink, and make merry, for tomorrow we shall die!\"" CR>)>>
"\"Eat, drink, and be merry,\" eh?" CR>)>>
<ROUTINE PRE-MOVE ()
<COND (<HELD? ,PRSO>
@ -1812,13 +1818,15 @@ come to your unhealthy mind, forbids it." CR>)
<ROUTINE PRE-READ ("AUX" VAL)
<COND (<OUTSIDE? ,HERE>
<TELL "It's impossible to read in the dark." CR>)
(<IN? ,PRSO ,GLOBAL-OBJECTS>
<NOT-HERE ,PRSO>)
(<AND ,PRSI
<NOT <FSET? ,PRSI ,TRANSBIT>>
<NOT <==? ,PRSI ,INTNUM>>> ;"? INTNUM?"
<TELL
"You must have a swell method of looking through " THE ,PRSI "." CR>)>>
,YOU-MUST "have a swell method of looking through " THE ,PRSI "." CR>)
(<EQUAL? <LOC ,PRSO> ,WINNER ,ROOMS> <>)
(<OR <IN? ,PRSO ,GLOBAL-OBJECTS>
<NOT <SEE-INSIDE? <LOC ,PRSO>>>>
<NOT-HERE ,PRSO>)>>
<ROUTINE V-READ ()
<COND (<NOT <FSET? ,PRSO ,READBIT>>
@ -1926,7 +1934,9 @@ come to your unhealthy mind, forbids it." CR>)
<TELL "That isn't something to sit on!" CR>)>>
<ROUTINE V-SLAP ()
<COND (<FSET? ,PRSO ,PERSON>
<COND (<NOT <IN? ,PRSO ,HERE>>
<TELL "What " ,PRSO "?" CR>)
(<FSET? ,PRSO ,PERSON>
<TELL
CD ,PRSO " slaps you right back. It hurts, too." CR>)
(T
@ -2147,10 +2157,10 @@ running! You try it once more, just to make sure. Bravo!" CR>)
<TELL-YOU-CANT "turn off " <>>
<TELL-PRSO>)>>
<ROUTINE V-TURN-UP ()
;<ROUTINE V-TURN-UP ()
<TELL "That's silly." CR>>
<ROUTINE V-TURN-DOWN ()
;<ROUTINE V-TURN-DOWN ()
<TELL "That's silly." CR>>
<ROUTINE PRE-UNLOCK ()
@ -2586,7 +2596,7 @@ a rabies tag, so you're safe.">)>
"Your revelation of " D ,PRSO " does not seem to interest " D ,PRSI "." CR>)
(ELSE
<TELL
"You must be pretty anxious to talk about it, if you're telling "
,YOU-MUST "be pretty anxious to talk about it, if you're telling "
THE ,PRSI "." CR>)>>
<ROUTINE V-$REVEAL ()