Craverly Heights

Inform 7 and Dialog side by side

Craverly Heights by Ryan Veeder was released in 2014, on Playfic, along with its Inform 7 source code. The author has kindly allowed me to port his game to Dialog, and display the two implementations side by side in order to highlight similarities and differences between the two languages.
The Inform 7 code was put together in a very short time frame (two releases in about six weeks). It has been left intact, per the author's instructions, to preserve the improvisatory nature of the original project. A handful of known bugs will be pointed out as we work our way through the implementation.
The story itself, as well as the Inform 7 code, is copyright Ryan Veeder. This side-by-side presentation can be redistributed for free in its current form (Creative Commons BY-NC-ND).
There will be spoilers, of course. Before you read any further, make sure to play Craverly Heights online!
Linus Åkesson, 2020
Note! Your display (or window) is too narrow for the intended side-by-side layout. Please view this document on a larger screen, or change the zoom setting.
"Craverly Heights" by Ryan Veeder
(story title)
Craverly Heights
(story author)
Ryan Veeder
(additional banner text)
Ported to Dialog by Linus Åkesson, with kind permission of the author.
Volume - Boring
The release number is 2.
(story release 2)
The original Inform 7 game has IFID D3C6DFB8-3327-4181-886A-64ABA4512F8C.
(story ifid)
%% This is for the Dialog port:
2226EE17-566D-4A5A-8DD1-D55370F8B91E
Include Basic Screen Effects by Emily Short.
Use American dialect, serial comma, and no scoring.
When play begins:
now the right hand status line is "";
Some short forms to save typing:
(sid)
(#sunglasses is #wornby #player)
(menacingly or meaningfully)
(if) (sid) (then) menacingly (else) meaningfully (endif)
Volume - The World
Book - Generalities
Section - Establishing Rooms And Regions
Onstage is a region.
Backstage is a region.
(room *(onstage room $))
(room *(backstage room $))
Short forms to quickly determine if we're onstage or backstage:
(onstage)
(current room $Room)
(onstage room $Room)
(backstage)
(current room $Room)
(backstage room $Room)
Breakroom is a room in Backstage. The printed name of Breakroom is "Break Room". South Hallway is a room in Backstage. Hallway Intersection is a room in Backstage. North Hallway is a room in Backstage. East Hallway is a room in Backstage. West Hallway is a room in Backstage.
#breakroom
(backstage room *)
(name *)
Break Room
#s-hallway
(backstage room *)
(name *)
South Hallway
#intersection
(backstage room *)
(name *)
Hallway Intersection
#n-hallway
(backstage room *)
(name *)
North Hallway
#e-hallway
(backstage room *)
(name *)
East Hallway
#w-hallway
(backstage room *)
(name *)
West Hallway
Hospital is a room in Onstage. The printed name of Hospital is "Roland Memorial Hospital". Pizza is a room in Onstage. The printed name of Pizza is "Gina's Pizzeria". Craverly Manor is a room in Onstage.
#hospital
(onstage room *)
(name *)
Roland Memorial Hospital
#pizza
(onstage room *)
(name *)
Gina's Pizzeria
#manor
(onstage room *)
(name *)
Craverly Manor
Decide how to print the room names in a sentence, e.g. in response to the “exits” command: You can go east “to the Break Room”, not “to a Break Room”. You can go west “to Roland Memorial Hospital”. In this game, all the backstage rooms are singleton-named, and all the onstage rooms are proper-named. In other games, this would have been specified individually for each room, by putting “(singleton *)” or “(proper *)” near the room name.
(singleton *(backstage room $))
(proper *(onstage room $))
Inform 7 infers connections in the opposite direction.
Hospital is west of North Hallway. Pizza is north of East Hallway. Breakroom is east of South Hallway. Craverly Manor is south of West Hallway. Hallway Intersection is south of North Hallway. Hallway Intersection is east of West Hallway. Hallway Intersection is north of South Hallway. Hallway Intersection is west of East Hallway.
Dialog requires that we specify map connections both ways.
(from #n-hallway go #west to #hospital)
(from #hospital go #east to #n-hallway)
(from #e-hallway go #north to #pizza)
(from #pizza go #south to #e-hallway)
(from #s-hallway go #east to #breakroom)
(from #breakroom go #west to #s-hallway)
(from #w-hallway go #south to #manor)
(from #manor go #north to #w-hallway)
(from #n-hallway go #south to #intersection)
(from #intersection go #north to #n-hallway)
(from #w-hallway go #east to #intersection)
(from #intersection go #west to #w-hallway)
(from #s-hallway go #north to #intersection)
(from #intersection go #south to #s-hallway)
(from #e-hallway go #west to #intersection)
(from #intersection go #east to #e-hallway)
Section - The Boring Verbs
A common pattern in Inform 7 code is to place the full stop outside of “if” and “one of” statements. This is done to prevent spurious line breaks.
Instead of looking under something, say "[if the location is in backstage]There's nothing under [the noun][otherwise]You are unable to find anything beneath [the noun][end if]."
(perform [look #under $Obj])
(if) (backstage) (then)
There's nothing under (the $Obj).
(else)
You are unable to find anything beneath (the $Obj).
(endif)
Instead of waiting in Onstage, say "You glance around [if the sunglasses are worn]menacingly[otherwise]meaningfully[end if]."
(perform [wait])
(onstage)
You glance around (menacingly or meaningfully).
Dialog rules are tried in source-code order, so the following definitions must appear in order from the most specific to the most generic.
Instead of touching something, say "[if the location is in backstage][The noun] feels normal[otherwise]You pause to consider the texture of [the noun][end if]."
Instead of touching a person, say "[if the location is in backstage]You touch [noun], who tries to shoo you away[otherwise]You put your hand against [noun]'s face. [noun] looks meaningfully back at you[end if]."
Instead of touching the player, say "[if the location is in backstage]You feel fine[otherwise]You press a finger against your skin. You are as real as anything else[end if]."
(feel #player)
(if) (backstage) (then)
You feel fine.
(else)
You press a finger against your skin. You are as real as anything else.
(endif)
(feel (animate $Person))
(if) (backstage) (then)
You touch (the $Person), who tries to shoo you away.
(else)
You put your hand against (the $Person) (no space) 's face. (The $Person) looks meaningfully back at you.
(endif)
(feel $Obj)
(if) (backstage) (then)
(The $Obj) feels normal.
(else)
You pause to consider the texture of (the $Obj).
(endif)
Instead of waking up, say "[if the location is in backstage]This is too stupid to be a dream[otherwise]'Maybe this is all a dream,' you say, gazing into the distance, but no answer comes[end if]."
(perform [wake up])
(if) (backstage) (then)
This is too stupid to be a dream.
(else)
“Maybe this is all a dream,” you say, gazing into the distance, but no answer comes.
(endif)
Instead of thinking, say "[if the location is in backstage]You pause to consider what choices have led to this situation[otherwise if the sunglasses are worn]You pause to think. But of course you, Sidney Langridge, can think only of yourself[otherwise]'I need to think,' you say, pressing your fingers against your temples. 'The answer is staring me right in the face, I just know it.' You squint deeply, the weight of all Craverly Heights's problems upon your shoulders[end if]."
(perform [think])
(if) (backstage) (then)
You pause to consider what choices have led to this situation.
(elseif) (sid) (then)
You pause to think. But of course you, Sidney Langridge, can think only of yourself.
(else)
“I need to think,” you say, pressing your fingers against your temples. “The answer is staring me right in the face, I just know it.” You squint deeply, the weight of all Craverly Heights's problems upon your shoulders.
(endif)
Instead of swearing obscenely, say "[if the location is in backstage]If that's what it takes to get you to calm down[otherwise]You better control yourself: This is daytime TV[end if]."
Instead of swearing mildly, say "[if the location is in backstage]If that's what it takes to get you to calm down[otherwise]You better control yourself: This is daytime TV[end if]."
(perform [curse])
(if) (backstage) (then)
If that's what it takes to get you to calm down.
(else)
You better control yourself: This is daytime TV.
(endif)
Instead of singing, say "[if the location is in backstage]Not one of your talents[otherwise]They don't pay you enough[end if]."
(perform [sing])
(if) (backstage) (then)
Not one of your talents.
(else)
They don't pay you enough.
(endif)
Instead of sleeping, say "[if the location is in backstage]There's a lot left to do today[otherwise]Not on the job[end if]."
(perform [sleep])
(if) (backstage) (then)
There's a lot left to do today.
(else)
Not on the job.
(endif)
Section - Miscellaneous Stuff
Talking to is an action applying to one visible thing.
Greet and talk-to are provided by the Dialog standard library, with a default response of “There is no reply.” We'll just add some synonyms:
Understand "greet [something]" or "say hello/hi to [something]" or "talk to [something]" as talking to.
(rewrite [say hello/hi to | $Words] into [greet | $Words])
It is generally advisable to put some default code for the new action here, i.e. “carry out talking to”. As it is now, if the player talks to an inanimate object, nothing is printed.
Dialog has no direct equivalent of scenery, since that is how objects behave by default. We can define a helper predicate here, to clarify the purpose of some of the upcoming rules:
(scenery $Obj)
~(item $Obj)
~(animate $Obj)
~(current player $Obj)
Instead of pushing something scenery, try taking the noun.
(instead of [push (scenery $Obj)])
(try [take $Obj])
Generic rules typically go towards the end of the story source code, below the rules for specific objects. The generic rule has been placed here in order to preserve the order of the original Inform 7 code, but we have to explicitly exempt the bulletin object, which has its own prevent-rule later.
Instead of taking some scenery, say "[if the location is in Onstage]Moving that is someone else's job[otherwise]That belongs where it is[end if]."
(prevent [take (scenery $Obj)])
~($Obj = #bulletin)
(if) (onstage) (then)
Moving that is someone else's job.
(else)
That belongs where it is.
(endif)
Again, generic rules typically go at the end, below the code for specific objects. But there are no rules for listening to individual backstage rooms in this story.
Instead of listening while in Backstage, say "It's pretty quiet."
(perform [listen to (backstage room $)])
It's pretty quiet.
This is no longer necessary in Inform 7. The possessions and clothes of non-player characters (NPCs) are visible by default.
A person can be transparent. A person is usually transparent.
Instead of giving something to someone, try showing the noun to the second noun.
(instead of [give $A to $B])
(try [show $A to $B])
Section - Commonalities Of Onstage Locations
The camera is a backdrop. Understand "cameras" as the camera. The camera is in Onstage. The description of the camera is "You just accidentally glanced at a camera, but they can edit that out."
#camera
(name *)
camera
(dict *)
cameras
((onstage room $) attracts *)
(descr *)
You just accidentally glanced at a camera, but they can edit that out.
Before doing something other than examining with the camera:
if the noun is the camera:
say "You're not supposed to acknowledge it." instead.
(prevent $Action)
~($Action = [examine *])
(* is one of $Action)
You're not supposed to acknowledge it.
Book - The Rooms Themselves
Part - Gina's Pizzeria
#pizza
The description of Pizza is "The tender light of the morning—or the very early evening—casts itself softly against the downy linen of spotless white tablecloths and the Italian flag hanging from the wall. The exit is south."
(look *)
The tender light of the morning—or the very early evening—casts itself softly against the downy linen of spotless white tablecloths and the Italian flag hanging from the wall. The exit is south.
Instead of listening to Pizza, say "All you hear is the heavy silence of an oven that has not been turned on, the anticipatory hush of a pizza cutter that lies motionless inside of an unopened drawer. You hear nothing."
(perform [listen to *])
All you hear is the heavy silence of an oven that has not been turned on, the anticipatory hush of a pizza cutter that lies motionless inside of an unopened drawer. You hear nothing.
The white tablecloth is a scenery supporter in Pizza. Understand "tablecloths" and "tables" and "table" and "white tablecloths" as the white tablecloth. The description of the white tablecloth is "Like an expectant canvas is each tablecloth, ready to receive the masterpiece that is every one of Gina's pizzas.".
#tablecloth
(name *)
white tablecloth
(supporter *)
(* is #in #pizza)
(dict *)
tablecloths tables table
(descr *)
Like an expectant canvas is each tablecloth, ready to receive the masterpiece that is every one of Gina's pizzas.
The Italian flag is scenery in Pizza. Understand "tricolor" and "tricolore" as the Italian flag. The description of the Italian flag is "The tricolor stands straight and proud and wide and true for all to see, a symbol of the deep respect and affection that Gina feels toward her heritage."
#flag
(name *)
Italian flag
(an *)
(* is #in #pizza)
(dict *)
tricolor tricolore
(descr *)
The tricolor stands straight and proud and wide and true for all to see, a symbol of the deep respect and affection that Gina feels toward her heritage.
After looking in Pizza:
if Gina is not in the location:
say "[one of]'It looks like Gina's not here yet,' you announce to the empty room. 'I wonder where she is.'[paragraph break]The room is silent[or]You glance around [if the sunglasses are worn]menacingly[otherwise]meaningfully[end if]. Gina is nowhere to be seen[stopping]."
(after [look])
(current room #pizza)
~(#gina is #in #pizza)
(par)
(select)
“It looks like Gina's not here yet,” you announce to the empty room. “I wonder where she is.”
(par)
The room is silent.
(or)
You glance around (menacingly or meaningfully). Gina is nowhere to be seen.
(stopping)
Section - Gina
#gina
The appearance and description will change if Gina dies. Instead of modifying the text at runtime, we toggle a flag, and check the flag at the time of printing.
Gina is a woman. "Gina is here, resolutely straightening things out in anticipation of the day's business." Understand "woman" and "lane" and "lady" as Gina.
(name *)
Gina
(proper *)
(female *)
(dict *)
woman lane lady
(appearance *)
(if) (* is alive) (then)
Gina is here, resolutely straightening things out in anticipation of the day's business.
(else)
Gina lies on the floor, dead.
(endif)
The description of Gina is "Gina is clearly in the midst of a valiant attempt to radiate her usual cheer, but her mien is marred by the looming knowledge of her beloved daughter's ill condition. Her pink blouse is wrinkled, belying the distraction that bedevils even the most meticulous of worried mothers."
(descr *)
(if) (* is alive) (then)
Gina is clearly in the midst of a valiant attempt to radiate her usual cheer, but her mien is marred by the looming knowledge of her beloved daughter's ill condition. Her pink blouse is wrinkled, belying the distraction that bedevils even the most meticulous of worried mothers.
(else)
Gina had so much love to give this world—but now she's dead. Never again will man or woman taste the delicious pizzas that Gina had to offer. This entepreneur has tossed her last crust.
(endif)
Instead of talking to Gina:
if the sunglasses are worn:
say "[one of]'Hello, Gina,' you say, your teeth flashing impishly from between your wily lips.[paragraph break]Gina's face is a stoic cliff, carved from stone. 'Sid. You're supposed to be in a federal prison.'[paragraph break]Your cackling is like an incoming thunderstorm. 'People seem to think so! But I figure, wherever I am is where I'm supposed to be.' You smirk[or]'What are you still doing here?' asks Gina.[paragraph break]'Wouldn't you like to know?' is your menacing reply[stopping].";
otherwise if prog is 0:
say "[one of]'Pauline's insurance has run out,' you say. Gina's expression descends into concern.[paragraph break]'She needs a procedure, or she'll die,' you continue. 'Is there any way you can pay for it?'[paragraph break]'This pizzeria is barely paying for its own bills,' says Gina. 'All the money I could have spent to save Pauline's life, I spent on my dream of becoming a restauranteur.'[paragraph break]'We all have to live with our mistakes,' you say, 'but Pauline may not have long to live with yours.'[paragraph break]Gina tries to hide her face[or]'What about Pauline's father?' you ask. 'Could he pay for the procedure?'[paragraph break]'Doc, Pauline's father isn't in Antibes.' Your jaw slackens at the sound of Gina's revelation. 'The fact is, I don't know who Pauline's father is.'[paragraph break]Your expression is one of shock[stopping].";
otherwise if prog is 1:
say "'Please let me know if there's any news from the hospital,' Gina says, trying her best not to break down into an avalanche of motherly tears.";
otherwise if prog is 2:
say "'What are you still doing here?' Gina cries. 'Pauline needs to know about her real father! And so does...her father."
The end quote after “her father” is missing. This particular typo would perhaps be easier to spot in Dialog.
(perform [talk to *])
(if) (sid) (then)
(select)
“Hello, Gina,” you say, your teeth flashing impishly from between your wily lips.
(par)
Gina's face is a stoic cliff, carved from stone. “Sid. You're supposed to be in a federal prison.”
(par)
Your cackling is like an incoming thunderstorm. “People seem to think so! But I figure, wherever I am is where I'm supposed to be.” You smirk.
(or)
“What are you still doing here?” asks Gina.
(par)
“Wouldn't you like to know?” is your menacing reply.
(stopping)
(elseif) (prog 0) (then)
(select)
“Pauline's insurance has run out,” you say. Gina's expression descends into concern.
(par)
“She needs a procedure, or she'll die,” you continue. “Is there any way you can pay for it?”
(par)
“This pizzeria is barely paying for its own bills,” says Gina. “All the money I could have spent to save Pauline's life, I spent on my dream of becoming a restauranteur.”
(par)
“We all have to live with our mistakes,” you say, “but Pauline may not have long to live with yours.”
(par)
Gina tries to hide her face.
(or)
“What about Pauline's father?” you ask. “Could he pay for the procedure?”
(par)
“Doc, Pauline's father isn't in Antibes.” Your jaw slackens at the sound of Gina's revelation. “The fact is, I don't know who Pauline's father is.”
(par)
Your expression is one of shock.
(stopping)
(elseif) (prog 1) (then)
“Please let me know if there's any news from the hospital,” Gina says, trying her best not to break down into an avalanche of motherly tears.
(else)
“What are you still doing here?” Gina cries. “Pauline needs to know about her real father! And so does...her father.”
(endif)
Using “(else)” instead of “(elseif) (prog 2)” above is a matter of taste. This way, there's no risk for a blank response if prog is ever increased beyond two—which it isn't.
Instead of kissing Gina:
if the sunglasses are worn:
say "Gina rebuffs your amorous advance. 'Sidney, I wouldn't kiss you with my dead husband's mouth.'" instead;
otherwise:
say "[one of]'What are you doing?' Gina asks as you approach her.[paragraph break]'Let me show you,' you say, as you put your arms around her body and tenderly meet her lips against yours. Gina yields passionately to your embrace.[paragraph break]But then the moment is over. 'This can never happen again,' Gina whispers[or]You kiss Gina again. Again you feel the warmth of bodily contact that you have been craving for so long. Again Gina says that this can never happen again[stopping]."
(perform [kiss *])
(if) (sid) (then)
Gina rebuffs your amorous advance. “Sidney, I wouldn't kiss you with my dead husband's mouth.”
(else)
(select)
“What are you doing?” Gina asks as you approach her.
(par)
“Let me show you,” you say, as you put your arms around her body and tenderly meet her lips against yours. Gina yields passionately to your embrace.
(par)
But then the moment is over. “This can never happen again,” Gina whispers.
(or)
You kiss Gina again. Again you feel the warmth of bodily contact that you have been craving for so long. Again Gina says that this can never happen again.
(stopping)
(endif)
Because of an Inform 7 bug, “the satchel is not enclosed by a room” always evaluates to true. The bug was fixed in Inform 7 version 6L02, but Craverly Heights was released before that.
After pointing the handgun at Gina:
if the sunglasses are worn:
if the suspect is Gina:
if the satchel is not enclosed by a room:
say "'I want those jewels, Gina!' you say, threatening the matronly entepreneur with the shining steel of your lethal accessory. 'Or do you want your blood all over these nice white tablecloths?'[paragraph break]'Don't shoot, Sid! Here!' She reveals a satchel, which she throws across the dining room and into your hand. 'Please, don't shoot me.'[paragraph break]'Of course not. I wouldn't hurt you, as long as you played nice.' You shake the satchel full of jewels with a satisfied air. 'And you sure did play real nice,' you say, smugly.";
now the player carries the satchel;
otherwise:
say "'There are no more jewels, Sid,' Gina cries. 'They're all in that bag.'[paragraph break]'I was just making sure,' you say.";
otherwise:
say "Gina reels in shock at the sight of the gun that is pointed her way. She cringes audibly. You cackle ominously.";
otherwise:
say "Gina stares down the barrel of your pistol with a face twisted by incredible shock.[paragraph break]'Doc!' she gasps. 'Put the gun down! You're not thinking straight!'[paragraph break]'Or am I?' you retort."
(after [point #handgun at *])
(par)
(if) (sid) (then)
(if) (the suspect is *) (then)
(if) ~(#satchel has parent $) (then)
“I want those jewels, Gina!” you say, threatening the matronly entepreneur with the shining steel of your lethal accessory. “Or do you want your blood all over these nice white tablecloths?”
(par)
“Don't shoot, Sid! Here!” She reveals a satchel, which she throws across the dining room and into your hand. “Please, don't shoot me.”
(par)
“Of course not. I wouldn't hurt you, as long as you played nice.” You shake the satchel full of jewels with a satisfied air. “And you sure did play real nice,” you say, smugly.
(now) (#satchel is #heldby #player)
(else)
“There are no more jewels, Sid,” Gina cries. “They're all in that bag.”
(par)
“I was just making sure,” you say.
(endif)
(else)
Gina reels in shock at the sight of the gun that is pointed her way. She cringes audibly. You cackle ominously.
(endif)
(else)
Gina stares down the barrel of your pistol with a face twisted by incredible shock.
(par)
“Doc!” she gasps. “Put the gun down! You're not thinking straight!”
(par)
“Or am I?” you retort.
(endif)
The following rule appears twice in the original, which is harmless in Inform 7. The other copy is further down, in the section called Leopold Craverly.
After pointing the handgun at Leopold:
if the sunglasses are worn and the suspect is Leopold:
if the satchel is not enclosed by a room:
say "'I want those jewels, old man!' you say, menacing the silver-haired millionaire with the gleaming barrel of your murderous weapon. 'Are you going to play along, or are you going to die?'[paragraph break]'All right, all right! Here!' Leopold draws a satchel out of his pocket and tosses it to you. 'They're all there. Just leave me be!'[paragraph break]You feel the heft of the satchel in your hand and smile a smug smile.";
now the player carries the satchel;
otherwise:
say "'I've already given you the jewels, Sidney,' Leopold chides.[paragraph break]'That's right, you did,' you respond. 'And don't you forget it!'";
otherwise:
say "Leopold regards the handgun with a cool indifference. 'Put that thing down, [if the sunglasses are worn]Sidney[otherwise]Langridge[end if]. You're liable to hurt yourself.'"
In Dialog, repeating an after-rule (or before-rule) would result in duplicate messages.
We do not change the appearance and description. Instead, we set a flag, (#gina is dead), that is checked inside those rule definitions (above).
After shooting Gina the first time:
now Gina is dead;
now the initial appearance of Gina is "Gina lies on the floor, dead.";
now the description of Gina is "Gina had so much love to give this world—but now she's dead. Never again will man or woman taste the delicious pizzas that Gina had to offer. This entepreneur has tossed her last crust.";
say "Your gun screams as if in anger as it ejects its bullet straight into Gina's mortal coil. If she had any last words, it is too late for them now.[paragraph break]She falls to the floor with a horrible slump, as dead as her Italian role model, Julius Caesar.";
if Leopold Craverly is dead and Pauline is dead:
execute the bloodbath ending.
The following rule never gets to execute in the Inform 7 version, because of the later rule: “Before doing something other than examining with a dead person”. This is a known bug in Craverly Heights.
After shooting Gina:
say "You fire another bullet into Gina's dead body. 'I don't know why I did that,' you announce."
(perform [shoot *])
(select)
(now) (* is dead)
Your gun screams as if in anger as it ejects its bullet straight into Gina's mortal coil. If she had any last words, it is too late for them now.
(par)
She falls to the floor with a horrible slump, as dead as her Italian role model, Julius Caesar.
(if) (#leopold is dead) (#pauline is dead) (then)
(bloodbath ending)
(endif)
(or)
You fire another bullet into Gina's dead body. “I don't know why I did that,” you announce.
(stopping)
Instead of showing the handgun to Gina:
if the sunglasses are worn:
say "'Is that the gun you used to shoot the mayor?' Gina asks.[paragraph break]'Nah, this gun is innocent,' you say, quickly adding: 'And so am I!'";
otherwise:
say "Gina regards your gun with a skeptic's pair of eyes. 'Why would a doctor need a gun?' she asks.[paragraph break]'We doctors need a lot of things,' you answer meaningfully."
(perform [show #handgun to *])
(if) (sid) (then)
“Is that the gun you used to shoot the mayor?” Gina asks.
(par)
“Nah, this gun is innocent,” you say, quickly adding: “And so am I!”
(else)
Gina regards your gun with a skeptic's pair of eyes. “Why would a doctor need a gun?” she asks.
(par)
“We doctors need a lot of things,” you answer meaningfully.
(endif)
Instead of showing the magnifying glass to Gina, say "'Are you on the trail of a mystery?' Gina asks.[paragraph break]'In my own way, I suppose, I am,' you say, [if the sunglasses are worn]menacingly[otherwise]meaningfully[end if]."
(perform [show #magnifier to *])
“Are you on the trail of a mystery?” Gina asks.
(par)
“In my own way, I suppose, I am,” you say, (menacingly or meaningfully).
Because of an Inform 7 bug, “the satchel is enclosed by a room” always evaluates to false. The bug was fixed in Inform 7 version 6L02, but Craverly Heights was released before that.
Instead of showing the framed photo to Gina:
if the sunglasses are worn:
if the satchel is enclosed by a room:
say "'That dog's death was as meaningless as your life,' Gina eloquently states.";
otherwise if the suspect is not Leopold Craverly:
say "[ginaspeech]";
now the suspect is Gina;
otherwise:
say "'Where did you get that photo of my daughter's beloved golden retriever Wendell?' Gina asks indignantly and accusingly. You lick your lips menacingly.[paragraph break]'So it's a crime to have a photo of a dog now?' you ask. 'What is this world coming to?'[paragraph break]Gina glares at you.";
otherwise:
say "Gina regards the photo sadly. 'Oh, Wendell, you big lug. Why'd you have to leave us?' she asks.[paragraph break]'You don't have any clues to the mystery of his death?' you ask.[paragraph break]Gina regards you angrily. 'Are you accusing me of something?' she asks.[paragraph break]'Of course not,' you answer."
(perform [show #photo to *])
(if) (sid) (then)
(if) (#satchel has parent $) (then)
“That dog's death was as meaningless as your life,” Gina eloquently states.
(elseif) ~(the suspect is #leopold) (then)
(ginaspeech)
(now) (the suspect is *)
(else)
“Where did you get that photo of my daughter's beloved golden retriever Wendell?” Gina asks indignantly and accusingly. You lick your lips menacingly.
(par)
“So it's a crime to have a photo of a dog now?” you ask. “What is this world coming to?”
(par)
Gina glares at you.
(endif)
(else)
Gina regards the photo sadly. “Oh, Wendell, you big lug. Why'd you have to leave us?” she asks.
(par)
“You don't have any clues to the mystery of his death?” you ask.
(par)
Gina regards you angrily. “Are you accusing me of something?” she asks.
(par)
“Of course not,” you answer.
(endif)
See previous note about “the satchel is enclosed by a room”.
Instead of asking Gina about "[the jewels]":
if the satchel is enclosed by a room:
say "'You got your jewels. Now, go,' Gina pouts, her pride hurt by your actions as much as her heart is hurt by her daughter's illness.";
otherwise:
say "[ginaspeech]";
now the suspect is Gina;
In Dialog, ask and tell are redirected to talk-to by default.
(perform [talk to * about #jewels])
(if) (#satchel has parent $) (then)
“You got your jewels. Now, go,” Gina pouts, her pride hurt by your actions as much as her heart is hurt by her daughter's illness.
(else)
(ginaspeech)
(now) (the suspect is *)
(endif)
To say ginaspeech:
say "[one of]'You can cut the act, Gina. I know that you know that me and Janine killed Wendell the dog because he knew where we buried the jewels—the jewels that you dug up in the train yard while I was in prison,' you say, holding up the photo of Wendell as if it were Exhibit A in a courtroom of crime.[paragraph break]'Maybe that's all true, or maybe not,' Gina says, 'but I'm not handing over those jewels.'[paragraph break]You grimace[or]'The jewels are mine, Sid!' Gina says haughtily, her pink blouse rippling with satisfaction[stopping].";
(ginaspeech)
(select)
“You can cut the act, Gina. I know that you know that me and Janine killed Wendell the dog because he knew where we buried the jewels—the jewels that you dug up in the train yard while I was in prison,” you say, holding up the photo of Wendell as if it were Exhibit A in a courtroom of crime.
(par)
“Maybe that's all true, or maybe not,” Gina says, “but I'm not handing over those jewels.”
(par)
You grimace.
(or)
“The jewels are mine, Sid!” Gina says haughtily, her pink blouse rippling with satisfaction.
(stopping)
Part - Roland Memorial Hospital
#hospital
The player is in Hospital.
(#player is #in *)
In Dialog, we have to specify what object is the player.
(current player #player)
The description of the player is "[if the location is in Backstage]You have no idea what you're doing[otherwise if the sunglasses are worn]You are Sidney Langridge, feared and hated in the town of Craverly Heights and beyond. Only in appearance are you identical to Doctor Langridge, for in words and deeds you are the polar opposite of your do-gooder twin[otherwise]You are Doctor Langridge, mentor to some, friend to many, and healer to all of the citizens of Craverly Heights. Everyone in town knows your name. It is Doctor Langridge[end if]."
(descr #player)
(if) (backstage) (then)
You have no idea what you're doing.
(elseif) (sid) (then)
You are Sidney Langridge, feared and hated in the town of Craverly Heights and beyond. Only in appearance are you identical to Doctor Langridge, for in words and deeds you are the polar opposite of your do-gooder twin.
(else)
You are Doctor Langridge, mentor to some, friend to many, and healer to all of the citizens of Craverly Heights. Everyone in town knows your name. It is Doctor Langridge.
(endif)
The description of Hospital is "The whirring and chirping of medical instruments is all around—a worrying commotion[if the sunglasses are not worn], to some, but to your ears it is as regular as a heartbeat, as usual as business. While you walk these sterile halls, you are in your element: the element of health[end if]. The exit is east."
(look *)
The whirring and chirping of medical instruments is all around—a worrying commotion
(if) ~(sid) (then)
, to some, but to your ears it is as regular as a heartbeat, as usual as business. While you walk these sterile halls, you are in your element: the element of health
(endif)
. The exit is east.
Instead of listening to Hospital, say "The whirring and chirping of medical instruments is all around. A worrying commotion[if the sunglasses are not worn], to some. But to your ears it is as regular as a heartbeat. As usual as business[end if]."
(perform [listen to *])
The whirring and chirping of medical instruments is all around. A worrying commotion
(if) ~(sid) (then)
, to some. But to your ears it is as regular as a heartbeat. As usual as business
(endif).
The bed is scenery in Hospital. Understand "hospital bed" as the bed. The description of the bed is "For all its convenience-enhancing technological features, this bed is still a detestable prison in the doe-eyes of its tenant, the invalid Pauline."
#bed
(name *)
bed
(dict *)
hospital
(* is #in #hospital)
(descr *)
For all its convenience-enhancing technological features, this bed is still a detestable prison in the doe-eyes of its tenant, the invalid Pauline.
Section - Pauline
#pauline
The appearance and description will change if Pauline dies. Instead of modifying the text at runtime, we toggle a flag, and check the flag at the time of printing.
Pauline is a woman in Hospital. "Pauline, pale and frail, looks up at you [if the sunglasses are worn]confusedly[otherwise]pleadingly[end if] from her supine position aboard her hospital bed." Understand "girl" and "woman" and "janine" as Pauline.
(name *)
Pauline
(proper *)
(female *)
(* is #in #hospital)
(dict *)
girl woman janine
(appearance *)
(if) (* is alive) (then)
Pauline, pale and frail, looks up at you
(if) (sid) (then) confusedly (else) pleadingly (endif)
from her supine position aboard her hospital bed.
(else)
Pauline's dead body lies motionless in her hospital bed.
(endif)
The description of Pauline is "You gaze down [if the sunglasses are worn]menacingly[otherwise]meaningfully[end if] at Pauline, at her once-soft features cast into sharp relief by the mysterious illness that wracks her youthful form."
(descr *)
(if) (* is alive) (then)
You gaze down (menacingly or meaningfully) at Pauline, at her once-soft features cast into sharp relief by the mysterious illness that wracks her youthful form.
(else)
No longer do Pauline's tender lips draw breath; no longer do her eyes plead for release from the life of infirmity that had entrapped her.
(endif)
After examining Pauline the first time:
if Pauline is dead:
rule succeeds;
otherwise:
say "[paulinespeak]".
(after [examine *])
(select)
(if) (* is alive) (then)
(par)
(paulinespeak)
(endif)
(or)
(stopping)
Instead of talking to Pauline:
say "[paulinespeak]"
(perform [talk to *])
(paulinespeak)
To say paulinespeak:
if the sunglasses are worn:
say "[one of]'Sidney!' Pauline's eyes widen as they detect your identity. 'You shouldn't be here! What if the doctor, your twin, sees you?'[paragraph break]'You leave the nerd to me, sugarbabe. I've been dealing with that clamshell since the day we were both born[or]'You came back for me, Sidney,' Pauline says, her chest working double-time to force the words out of her lungs.[paragraph break]'I sure did, sugarbabe[stopping].'";
otherwise if prog is 0:
say "[one of]'Oh, Doctor Langridge,' Pauline rasps, 'Tell me some good news.'[paragraph break]'I wish I could,' you say, 'but the truth is that your condition is getting worse. And the even worse news is that your insurance won't pay for your procedure.'[paragraph break]Pauline's lip quivers[or]'Can't anything be done, Doctor Langridge?' Pauline asks pitifully.[paragraph break]'I'll talk to your mother,' you say, though your countenance does not indicate confidence[stopping].";
otherwise if prog is 1:
say "'Please let me know if you find out about those test results,' Pauline pleads.";
otherwise if prog is 2:
say "Pauline looks up at you, beautiful tears welling in her still more beautiful eyes. 'Please, Doctor Langridge! Talk to my father! He might be able to help!'"
(paulinespeak)
(if) (sid) (then)
(select)
“Sidney!” Pauline's eyes widen as they detect your identity. “You shouldn't be here! What if the doctor, your twin, sees you?”
(par)
“You leave the nerd to me, sugarbabe. I've been dealing with that clamshell since the day we were both born.”
(or)
“You came back for me, Sidney,” Pauline says, her chest working double-time to force the words out of her lungs.
(par)
“I sure did, sugarbabe.”
(stopping)
(elseif) (prog 0) (then)
(select)
“Oh, Doctor Langridge,” Pauline rasps, “Tell me some good news.”
(par)
“I wish I could,” you say, “but the truth is that your condition is getting worse. And the even worse news is that your insurance won't pay for your procedure.”
(par)
Pauline's lip quivers.
(or)
“Can't anything be done, Doctor Langridge?” Pauline asks pitifully.
(par)
“I'll talk to your mother,” you say, though your countenance does not indicate confidence.
(stopping)
(elseif) (prog 1) (then)
“Please let me know if you find out about those test results,” Pauline pleads.
(else)
Pauline looks up at you, beautiful tears welling in her still more beautiful eyes. “Please, Doctor Langridge! Talk to my father! He might be able to help!”
(endif)
Instead of kissing Pauline:
if the sunglasses are worn:
say "[one of]You plant a long, meaningful kiss on Pauline's quivering lips. 'It's been so long,' she sighs[or]You kiss Pauline again, for fun. Nobody tells Sidney Langridge not to kiss sick people[stopping].";
otherwise:
say "[one of]You lean down until your face almost meets Pauline's. 'The Hippocratic Oath warns a doctor not to give into his or her feelings for a patient,' you say, 'but an oath can only be kept for so long.' Pauline rises weakly to kiss you passionately. The moment is perfect, but it does not last forever.[paragraph break]'No one can know about this,' you say. Pauline nods weakly[or]You kiss Pauline again. She responds with enthusiasm despite her bedridden condition[stopping]."
(perform [kiss *])
(if) (sid) (then)
(select)
You plant a long, meaningful kiss on Pauline's quivering lips. “It's been so long,” she sighs.
(or)
You kiss Pauline again, for fun. Nobody tells Sidney Langridge not to kiss sick people.
(stopping)
(else)
(select)
You lean down until your face almost meets Pauline's. “The Hippocratic Oath warns a doctor not to give into his or her feelings for a patient,” you say, “but an oath can only be kept for so long.” Pauline rises weakly to kiss you passionately. The moment is perfect, but it does not last forever.
(par)
“No one can know about this,” you say. Pauline nods weakly.
(or)
You kiss Pauline again. She responds with enthusiasm despite her bedridden condition.
(stopping)
(endif)
After pointing the handgun at Pauline:
say "'What are you doing?' Pauline shrieks.[paragraph break]'You'll see soon enough,' you say, [if the sunglasses are worn]menacingly[otherwise]meaningfully[end if]."
(after [point #handgun at *])
(par)
“What are you doing?” Pauline shrieks.
(par)
“You'll see soon enough,” you say, (menacingly or meaningfully).
We do not change the appearance and description. Instead, we set a flag, (#pauline is dead), that is checked inside those rule definitions (above).
After shooting Pauline the first time:
now Pauline is dead;
now the initial appearance of Pauline is "Pauline's dead body lies motionless in her hospital bed.";
now the description of Pauline is "No longer do Pauline's tender lips draw breath; no longer do her eyes plead for release from the life of infirmity that had entrapped her.";
say "You fire into Pauline's chest. The crack of the gunshot is drowned out by her desperate scream—but, an instant later, her screaming ends. She's dead.";
if Leopold Craverly is dead and Gina is dead:
execute the bloodbath ending.
The following rule never gets to execute in the Inform 7 version, because of the later rule: “Before doing something other than examining with a dead person”. This is a known bug in Craverly Heights.
After shooting Pauline:
say "You fire another bullet into Pauline's dead body. 'Now she's dead for sure,' you announce."
(perform [shoot *])
(select)
(now) (* is dead)
You fire into Pauline's chest. The crack of the gunshot is drowned out by her desperate scream—but, an instant later, her screaming ends. She's dead.
(if) (#leopold is dead) (#gina is dead) (then)
(bloodbath ending)
(endif)
(or)
You fire another bullet into Pauline's dead body. “Now she's dead for sure,” you announce.
(stopping)
Instead of showing the handgun to Pauline:
if the sunglasses are worn:
say "'Nice gun,' Pauline says.[paragraph break]'Thanks,' you say, menacingly.";
otherwise:
say "'Why would a doctor need a gun?' Pauline asks, her eyes clouded with innocence.[paragraph break]'That's a good question, Pauline. But I can't tell you,' you say. And then you add: 'Yet.'"
(perform [show #handgun to *])
(if) (sid) (then)
“Nice gun,” Pauline says.
(par)
“Thanks,” you say, menacingly.
(else)
“Why would a doctor need a gun?” Pauline asks, her eyes clouded with innocence.
(par)
“That's a good question, Pauline. But I can't tell you,” you say. And then you add: “Yet.”
(endif)
Instead of showing the magnifying glass to Pauline, say "As Pauline looks through the magnifying glass, an expression of befuddlement overtakes her face. 'Everything is distorted and strange,' she says.[paragraph break]'That's [if the sunglasses are worn]because magnifying glasses are for sucks[otherwise]in the nature of a lens,' you respond. 'They can reveal to us the world's secret truths, or they can show us a bizarre parody of our lives, as if reflected in a funhouse mirror. We must always be mindful of this, when we gaze through a glass[end if],' you say."
(perform [show #magnifier to *])
As Pauline looks through the magnifying glass, an expression of befuddlement overtakes her face. “Everything is distorted and strange,” she says.
(par)
“That's
(if) (sid) (then)
because magnifying glasses are for sucks
(else)
in the nature of a lens,” you respond. “They can reveal to us the world's secret truths, or they can show us a bizarre parody of our lives, as if reflected in a funhouse mirror. We must always be mindful of this, when we gaze through a glass
(endif)
,” you say.
We can't refer to Pauline as Janine in the Dialog source code (but the player can).
The suspect is a thing that varies. The suspect is Janine.
(global variable (the suspect is #pauline))
Instead of showing the framed photo to Pauline:
if the sunglasses are worn:
say "[one of]Salty, unhappy tears well up in Pauline's eyes as she regards the image of her beloved dog. 'I miss him so much,' she says.[paragraph break]'But you remember why we killed him, don't you?' you ask.[paragraph break]'Of course. Wendell kept trying to dig up the place where we buried the jewels.'[paragraph break]'Yeah, well, right after I got out of prison I went back to that place, where we buried the jewels. But someone got there first. Someone dug them up.'[paragraph break]Pauline gasps. 'But who else knew about the jewels?'[paragraph break]'Only one person,' you menacingly say[or]'Have you talked to the one other person who knew about the jewels yet?' Pauline asks[stopping].";
otherwise:
say "[one of]At the sight of her beloved departed dog, Pauline's expression sinks still further into the mire of melancholy.[paragraph break]'Oh, Wendell,' she mourns, on the verge of weeping. 'If only you were here, I wouldn't feel nearly so awful. If I ever find out who took you from me...'[paragraph break]'But Wendell's death was ruled an accident,' you say.[paragraph break]Pauline fixes you with as steely a glare as she can muster in her depleted state. 'You don't believe that, do you?' she asks.[paragraph break]'No,' you say[or]You offer the photo to Pauline again, but she refuses to look at it[stopping]."
(perform [show #photo to *])
(if) (sid) (then)
(select)
Salty, unhappy tears well up in Pauline's eyes as she regards the image of her beloved dog. “I miss him so much,” she says.
(par)
“But you remember why we killed him, don't you?” you ask.
(par)
“Of course. Wendell kept trying to dig up the place where we buried the jewels.”
(par)
“Yeah, well, right after I got out of prison I went back to that place, where we buried the jewels. But someone got there first. Someone dug them up.”
(par)
Pauline gasps. “But who else knew about the jewels?”
(par)
“Only one person,” you menacingly say.
(or)
“Have you talked to the one other person who knew about the jewels yet?” Pauline asks.
(stopping)
(else)
(select)
At the sight of her beloved departed dog, Pauline's expression sinks still further into the mire of melancholy.
(par)
“Oh, Wendell,” she mourns, on the verge of weeping. “If only you were here, I wouldn't feel nearly so awful. If I ever find out who took you from me...”
(par)
“But Wendell's death was ruled an accident,” you say.
(par)
Pauline fixes you with as steely a glare as she can muster in her depleted state. “You don't believe that, do you?” she asks.
(par)
“No,” you say.
(or)
You offer the photo to Pauline again, but she refuses to look at it.
(stopping)
(endif)
Part - Craverly Manor
#manor
The description of Craverly Manor is "A gargantuan portrait of the hawk-eyed and hawk-nosed Leopold Craverly stares down at you from its perch on the mahogany-panelled wall. The exit is north."
(look *)
A gargantuan portrait of the hawk-eyed and hawk-nosed Leopold Craverly stares down at you from its perch on the mahogany-panelled wall. The exit is north.
Instead of listening to Craverly Manor, say "The manor is eerily quiet. The other Craverlies have left; only Leopold lives here now."
(perform [listen to *])
The manor is eerily quiet. The other Craverlies have left; only Leopold lives here now.
The gargantuan portrait is scenery in Craverly Manor. Understand "painting" and "picture" as the gargantuan portrait. The description of the gargantuan portrait is "The portrait may resemble Craverly even more than does Craverly himself. Art imitates life, yes: but life is messy, and inaccurate; art is perfect, and reflects the real world as it really is."
#portrait
(name *)
gargantuan portrait
(* is #in #manor)
(dict *)
painting picture
(descr *)
The portrait may resemble Craverly even more than does Craverly himself. Art imitates life, yes: but life is messy, and inaccurate; art is perfect, and reflects the real world as it really is.
The mahogany-panelled wall is scenery in Craverly Manor. Understand "walls" and "mahogany" and "wood" and "panel" and "panels" as the mahogany-panelled wall. The description of the mahogany-panelled wall is "These stoic walls have enclosed the Craverly clan for generations, ever since Aloysius Craverly built Craverly Manor and founded Craverly Heights in the early nineteenth century."
#mahoganywall
(name *)
mahogany-panelled wall
(* is #in #manor)
(dict *)
walls mahogany wood panel panels
(descr *)
These stoic walls have enclosed the Craverly clan for generations, ever since Aloysius Craverly built Craverly Manor and founded Craverly Heights in the early nineteenth century.
Section - Leopold Craverly
#leopold
The appearance and description will change if Leopold dies. Instead of modifying the text at runtime, we toggle a flag, and check the flag at the time of printing.
Leopold Craverly is a man in Craverly Manor. "Standing beneath the portrait is Leopold Craverly himself, identical to his own image in every way. He eyes you sternly from his perch atop his snake-headed cane." Understand "man" and "leo" as Leopold Craverly.
(name *)
Leopold Craverly
(proper *)
(male *)
(* is #in #manor)
(dict *)
man leo
(appearance *)
(if) (* is alive) (then)
Standing beneath the portrait is Leopold Craverly himself, identical to his own image in every way. He eyes you sternly from his perch atop his snake-headed cane.
(else)
Leopold lies dead on the floor, his stiffening hand still clutching at the place in his chest where you shot him through the heart.
(endif)
The description of Leopold Craverly is "Though his hair is silver-white, and his eyes have been furrowed by a lifetime of avarice and cynicism, Leopold still has many years left in his life, and many goals left to achieve in those years, no matter what or who stands in his way."
(descr *)
(if) (* is alive) (then)
Though his hair is silver-white, and his eyes have been furrowed by a lifetime of avarice and cynicism, Leopold still has many years left in his life, and many goals left to achieve in those years, no matter what or who stands in his way.
(else)
Leopold thought he would live long enough to see all of his dreams come true. Now you know that his belief was false.
(endif)
After examining Leopold the first time:
if Leopold is dead:
rule succeeds;
otherwise:
say "[leospeak]".
(after [examine *])
(select)
(if) (* is alive) (then)
(par)
(leospeak)
(endif)
(or)
(stopping)
Leopold Craverly carries the snake-headed cane. Understand "snake" and "head" and "snake head" as the snake-headed cane. The description of the snake-headed cane is "A mystery: Does Leopold carry this sinister cane because of a physical infirmity, or is its purpose merely to inspire apprehension and respect in those who behold it? Even you, [if the sunglasses are worn]a master criminal[otherwise]the finest doctor in Craverly Heights[end if], cannot be sure."
#cane
(name *)
snake-headed cane
(item *)
(* is #heldby #leopold)
(dict *)
snake head
(descr *)
A mystery: Does Leopold carry this sinister cane because of a physical infirmity, or is its purpose merely to inspire apprehension and respect in those who behold it? Even you,
(if) (sid) (then)
a master criminal
(else)
the finest doctor in Craverly Heights
(endif)
, cannot be sure.
After talking to Leopold:
say "[leospeak]";
(perform [talk to #leopold])
(leospeak)
To say leospeak:
if the sunglasses are worn:
say "[one of]'Hello, there, Leo!' you say.[paragraph break]'Out of prison again,' Leopold begins, and you say 'Naturally!' as he says 'I see.' You both stop talking, and Leopold coughs, waiting for you to talk to him again[or]'Hello, there, Leo!' you say.[paragraph break]'Out of prison again,' Leopold says, and then he is quiet for a moment.[paragraph break]'Naturally!' you say, too late, and Leopold shakes his head. 'Sorry. Let's try it one more time.'[paragraph break]You shuffle your feet[or]'Hello, there, Leo!' you say.[paragraph break]'Out of prison again,' Leopold says, and you say 'Naturally!'[paragraph break]Leopold nods[stopping].";
otherwise:
say "[one of]'What's new over at Roland Memorial, Langridge?' Leopold asks.[paragraph break]'It's Gina's daughter, Pauline. They can't afford the only procedure that will keep her alive. But, Mister Craverly, I know you are not an uncharitable man.'[paragraph break]Leopold lets loose a torrent of guffaws. 'I think that sentence needs one more negative, Langridge! Of what concern to me is the situation of a girl I wouldn't recognize on the street?'[paragraph break]Your response to this question is a glare like a polished silver dagger[or]'I beg you to reconsider Janine's plight, Mister Craverly,' you say.[paragraph break]'I think you mean [italic type]Pauline.[roman type] And I beg you to leave off the subject, Langridge!' answers Leopold in a mocking tone[stopping].";
(leospeak)
(if) (sid) (then)
(select)
“Hello, there, Leo!” you say.
(par)
“Out of prison again,” Leopold begins, and you say “Naturally!” as he says “I see.” You both stop talking, and Leopold coughs, waiting for you to talk to him again.
(or)
“Hello, there, Leo!” you say.
(par)
“Out of prison again,” Leopold says, and then he is quiet for a moment.
(par)
“Naturally!” you say, too late, and Leopold shakes his head. “Sorry. Let's try it one more time.”
(par)
You shuffle your feet.
(or)
“Hello, there, Leo!” you say.
(par)
“Out of prison again,” Leopold says, and you say “Naturally!”
(par)
Leopold nods.
(stopping)
(else)
(select)
“What's new over at Roland Memorial, Langridge?” Leopold asks.
(par)
“It's Gina's daughter, Pauline. They can't afford the only procedure that will keep her alive. But, Mister Craverly, I know you are not an uncharitable man.”
(par)
Leopold lets loose a torrent of guffaws. “I think that sentence needs one more negative, Langridge! Of what concern to me is the situation of a girl I wouldn't recognize on the street?”
(par)
Your response to this question is a glare like a polished silver dagger.
(or)
“I beg you to reconsider Janine's plight, Mister Craverly,” you say.
(par)
“I think you mean (italic) Pauline. (unstyle) And I beg you to leave off the subject, Langridge!” answers Leopold in a mocking tone.
(stopping)
(endif)
Instead of kissing Leopold:
if the sunglasses are worn:
say "Leopold pushes you away. 'Forget it, Sid. I'm not one of those young people who melts in half when a criminal comes on to him.";
otherwise:
say "[one of]You rush boldly up to Leopold and, before he can react, you softly grab his head and press your lips against his lips. The meeting of your bodies is an explosive event, but it is not accompanied by a meeting of hearts.[paragraph break]'Oh, Langridge,' Leopold mutters, still embraced by your arms, 'I left my chances for love behind a long time ago. Don't turn out like me—don't hold out hope for something that can never be.'[paragraph break]With an expression of tremendous emotion, you step away from him[or]Leopold allows you to kiss him once more, but you come no closer to melting the diamond cage that surrounds his paralytic soul[stopping]."
The end quote after “comes on to him” is missing. This particular typo would perhaps be easier to spot in Dialog.
(perform [kiss #leopold])
(if) (sid) (then)
Leopold pushes you away. “Forget it, Sid. I'm not one of those young people who melts in half when a criminal comes on to him.”
(else)
(select)
You rush boldly up to Leopold and, before he can react, you softly grab his head and press your lips against his lips. The meeting of your bodies is an explosive event, but it is not accompanied by a meeting of hearts.
(par)
“Oh, Langridge,” Leopold mutters, still embraced by your arms, “I left my chances for love behind a long time ago. Don't turn out like me—don't hold out hope for something that can never be.”
(par)
With an expression of tremendous emotion, you step away from him.
(or)
Leopold allows you to kiss him once more, but you come no closer to melting the diamond cage that surrounds his paralytic soul.
(stopping)
(endif)
The following rule appears twice in the original, which is harmless in Inform 7, but not in Dialog. The other copy is back in the section called Gina.
Because of an Inform 7 bug, “the satchel is not enclosed by a room” always evaluates to true. The bug was fixed in Inform 7 version 6L02, but Craverly Heights was released before that.
After pointing the handgun at Leopold:
if the sunglasses are worn and the suspect is Leopold:
if the satchel is not enclosed by a room:
say "'I want those jewels, old man!' you say, menacing the silver-haired millionaire with the gleaming barrel of your murderous weapon. 'Are you going to play along, or are you going to die?'[paragraph break]'All right, all right! Here!' Leopold draws a satchel out of his pocket and tosses it to you. 'They're all there. Just leave me be!'[paragraph break]You feel the heft of the satchel in your hand and smile a smug smile.";
now the player carries the satchel;
otherwise:
say "'I've already given you the jewels, Sidney,' Leopold chides.[paragraph break]'That's right, you did,' you respond. 'And don't you forget it!'";
otherwise:
say "Leopold regards the handgun with a cool indifference. 'Put that thing down, [if the sunglasses are worn]Sidney[otherwise]Langridge[end if]. You're liable to hurt yourself.'"
(after [point #handgun at #leopold])
(par)
(if) (sid) (the suspect is #leopold) (then)
(if) ~(#satchel has parent $) (then)
“I want those jewels, old man!” you say, menacing the silver-haired millionaire with the gleaming barrel of your murderous weapon. “Are you going to play along, or are you going to die?”
(par)
“All right, all right! Here!” Leopold draws a satchel out of his pocket and tosses it to you. “They're all there. Just leave me be!”
(par)
You feel the heft of the satchel in your hand and smile a smug smile.
(now) (#satchel is #heldby #player)
(else)
“I've already given you the jewels, Sidney,” Leopold chides.
(par)
“That's right, you did,' you respond. “And don't you forget it!”
(endif)
(else)
Leopold regards the handgun with a cool indifference. “Put that thing down,
(if) (sid) (then) Sidney (else) Langridge (endif).
You're liable to hurt yourself.”
(endif)
Sidshotleo is a truth state that varies. Sidshotleo is false.
Global flags don't have to be declared in Dialog, and they default to false.
We do not change the appearance and description. Instead, we set a flag, (#leopold is dead), that is checked inside those rule definitions (above).
After shooting Leopold the first time:
if the sunglasses are worn:
now sidshotleo is true;
now Leopold is dead;
now the initial appearance of Leopold is "Leopold lies dead on the floor, his stiffening hand still clutching at the place in his chest where you shot him through the heart.";
now the description of Leopold is "Leopold thought he would live long enough to see all of his dreams come true. Now you know that his belief was false.";
say "'Come now, [if the sunglasses are worn]Sidney[otherwise]Langridge[end if], calm yourself!' the old man cries, but it is too late for him. You fire the gun into his heart, the heart that could never bring itself to feel love. It will never feel anything again[sidenote].[paragraph break]Craverly falls to the floor, dead.";
if Pauline is dead and Gina is dead:
execute the bloodbath ending.
(perform [shoot #leopold])
(select)
(if) (sid) (then)
(now) (sid shot leo)
(endif)
(now) (#leopold is dead)
“Come now, (if) (sid) (then) Sidney (else) Langridge (endif), calm yourself!” the old man cries, but it is too late for him. You fire the gun into his heart, the heart that could never bring itself to feel love. It will never feel anything again (sidenote).
(par)
Craverly falls to the floor, dead.
(if) (#pauline is dead) (#gina is dead) (then)
(bloodbath ending)
(endif)
(or)
You fire another bullet into Leopold Craverly's dead body. “That one was for Wendell,” you say.
(stopping)
See previous note about “the satchel is not enclosed by a room”.
To say sidenote:
if the suspect is Leopold Craverly:
if the sunglasses are worn:
if the satchel is not enclosed by a room:
say ", and you will never find the jewels";
otherwise:
say "";
otherwise:
say "";
otherwise:
say "";
(sidenote)
(if)
(the suspect is #leopold)
(sid)
~(#satchel has parent $)
(then)
, and you will never find the jewels
(endif)
The following rule never gets to execute in the Inform 7 version, because of the later rule: “Before doing something other than examining with a dead person”. This is a known bug in Craverly Heights.
After shooting Leopold:
say "You fire another bullet into Leopold Craverly's dead body. 'That one was for Wendell,' you say."
The “After shooting Leopold” rule is integrated into the (select) ... (stopping) statement above.
Instead of showing the handgun to Leopold, say "'A cute toy,' Craverly says, clearly unimpressed by the instrument of death you present to him. 'Be careful with it; you might break a window!' He guffaws enthusiastically at his own flimsy joke."
(perform [show #handgun to #leopold])
“A cute toy,” Craverly says, clearly unimpressed by the instrument of death you present to him. “Be careful with it; you might break a window!” He guffaws enthusiastically at his own flimsy joke.
Instead of showing the magnifying glass to Leopold, say "Leopold scoffs at your proffered magnifying glass. 'I'm afraid I don't have time for your [if the sunglasses are worn]Nancy Drew nincompoopery, Sidney[otherwise]Hardy Boys shenanigans, Langridge[end if].'"
(perform [show #magnifier to #leopold])
Leopold scoffs at your proffered magnifying glass. “I'm afraid I don't have time for your
(if) (sid) (then)
Nancy Drew nincompoopery, Sidney
(else)
Hardy Boys shenanigans, Langridge
(endif).”
Because of an Inform 7 bug, “the satchel is enclosed by a room” always evaluates to false. The bug was fixed in Inform 7 version 6L02, but Craverly Heights was released before that.
Instead of showing the framed photo to Leopold Craverly:
if the sunglasses are worn:
if the satchel is enclosed by a room:
say "Leopold sneers. 'You wouldn't stay in prison, but at least that dog will stay in the ground.'";
otherwise if the suspect is not Gina:
say "[one of]'You remember Wendell, right?'[paragraph break]'Of course,' Craverly sneers, 'That's Gina's dog. I seem to recall it perished under mysterious circumstances?'[paragraph break]'Cut the bull, Leo. We both know that I made Janine hit Wendell with her car after you saw him digging down at the train yard where we buried the jewels. I mean, Pauline.'[paragraph break]Craverly chortles. 'And now you think I have the jewels? Well, even if I do, they're staying with me[or]Craverly laughs again. 'I won't give you the jewels, no matter how many times you show me that photograph[stopping].'";
now the suspect is Leopold Craverly;
otherwise:
say "'Why are you showing me this dog?' Craverly asks, his question as pointed as the tip of his snake-headed cane.[paragraph break]'This dog is dead,' you say, 'and I'm going to get the jewels it found.'[paragraph break]'Does this concern me in any way?' asks Craverly, his question as tentative as his grasp of the concept of empathy.[paragraph break]'Not for now, it doesn't,' you reply, menacingly.";
otherwise:
say "'What's that there?' Craverly asks.[paragraph break]'It's Wendell,' you say. 'Pauline's dog.'[paragraph break]'Ah, I see, I see. And how has he been doing?'[paragraph break]'He died three years ago,' you answer meaningfully, 'Under mysterious circumstances.'[paragraph break]Craverly stares meaningfully back at you."
(perform [show #photo to #leopold])
(if) (sid) (then)
(if) (#satchel has parent $) (then)
Leopold sneers. “You wouldn't stay in prison, but at least that dog will stay in the ground.”
(elseif) ~(the suspect is #gina) (then)
(select)
“You remember Wendell, right?”
(par)
“Of course,” Craverly sneers, “That's Gina's dog. I seem to recall it perished under mysterious circumstances?”
(par)
“Cut the bull, Leo. We both know that I made Janine hit Wendell with her car after you saw him digging down at the train yard where we buried the jewels. I mean, Pauline.”
(par)
Craverly chortles. “And now you think I have the jewels? Well, even if I do, they're staying with me.”
(or)
Craverly laughs again. “I won't give you the jewels, no matter how many times you show me that photograph.”
(stopping)
(now) (the suspect is #leopold)
(else)
“Why are you showing me this dog?” Craverly asks, his question as pointed as the tip of his
snake-headed cane.
(par)
“This dog is dead,” you say, “and I'm going to get the jewels it found.”
(par)
“Does this concern me in any way?” asks Craverly, his question as tentative as his grasp of the concept of empathy.
(par)
“Not for now, it doesn't,” you reply, menacingly.
(endif)
(else)
“What's that there?” Craverly asks.
(par)
“It's Wendell,” you say. “Pauline's dog.”
(par)
“Ah, I see, I see. And how has he been doing?”
(par)
“He died three years ago,” you answer meaningfully, “Under mysterious circumstances.”
(par)
Craverly stares meaningfully back at you.
(endif)
In Dialog, ask and tell are redirected to talk-to by default.
Check asking Leopold Craverly about "[the jewels]":
if the sunglasses are worn:
if the suspect is not Gina:
say "[one of]'All right, Leo. We both know that I made Janine hit Wendell with her car after he you saw him digging down at the train yard where we buried the jewels. I mean, Pauline.'[paragraph break]Craverly chortles. 'You think I have the jewels? Well, even if I do, they're staying with me[or]Craverly laughs again. 'I won't give you the jewels, no matter how many times you ask me about them[stopping].'";
now the suspect is Leopold Craverly instead;
(perform [talk to #leopold about #jewels])
(sid)
~(the suspect is #gina)
(select)
“All right, Leo. We both know that I made Janine hit Wendell with her car after he you saw him digging down at the train yard where we buried the jewels. I mean, Pauline.”
(par)
Craverly chortles. “You think I have the jewels? Well, even if I do, they're staying with me.”
(or)
Craverly laughs again. “I won't give you the jewels, no matter how many times you ask me about them.”
(stopping)
(now) (the suspect is #leopold)
Part - The Hallways
Chapter - North Hallway
#n-hallway
The description of North Hallway is "[one of]Pauline's[or]Pauline's[or]Janine's[or]Pauline's[then at random] hospital room is west from here. The hallway continues south."
(look *)
(select)
Pauline's
(or)
Pauline's
(or)
Janine's
(or)
Pauline's
(then at random)
hospital room is west from here. The hallway continues south.
The rack of shelves is a supporter in North Hallway. Understand "shelf" as the rack of shelves.
#shelves
(name *)
rack of shelves
(supporter *)
(* is #in #n-hallway)
(dict *)
shelf
Rule for writing a paragraph about the rack of shelves: say "There's a rack of shelves standing against this end of the hall."
(appearance *)
There's a rack of shelves standing against this end of the hall.
Instead of taking the rack of shelves, say "That belongs where it is."
(prevent [take *])
That belongs where it is.
Replace the default description, but only if at least one object is on the rack of shelves. This mimics Inform 7.
(descr *)
($ is #on *)
(list objects #on *)
When examining the shelves, inhibit the default behaviour of printing a paragraph about every object that the player has put there. We've already described them in the previous rule.
~(appearance $ #on *)
Section - The Magnifying Glass
#magnifier
We have to declare portable objects as items; Dialog defaults to scenery.
The magnifying glass is on the rack of shelves. The description of the magnifying glass is "[if the location is in backstage]A cheap, beat-up magnifying glass[otherwise if the sunglasses are worn]As a criminal mastermind, you have no need for magnifying glasses. What concerns you is the big picture[otherwise]Every doctor needs a magnifying glass, the better with which to see the minuscule problems that plague humanity in such enormous ways[end if]."
(name *)
magnifying glass
(item *)
(* is #on #shelves)
(descr *)
(if) (backstage) (then)
A cheap, beat-up magnifying glass.
(elseif) (sid) (then)
As a criminal mastermind, you have no need for magnifying glasses. What concerns you is the big picture.
(else)
Every doctor needs a magnifying glass, the better with which to see the minuscule problems that plague humanity in such enormous ways.
(endif)
In Dialog, searching is not the same as looking in/through an object. A magnifying glass is a good example of why the distinction makes sense. We can easily redirect from one action to another, globally or on a per-object basis, but we will refrain from doing so in this case. Compare with how we handle the satchel, towards the end of the code.
The library has a generic rule to prevent the player from looking inside non-containers. We disable that by saying: Don't prevent looking in this object.
~(prevent [look #in *])
Instead of searching the magnifying glass:
if the location is in backstage:
say "The glass fails to reveal any new information." instead;
otherwise:
let foo be a random scenery in the location;
if foo is the camera:
say "You lean in for a closer look at nothing in particular." instead;
otherwise:
say "You lean in for a closer look at [the foo]." instead.
(perform [look #in *])
(if) (backstage) (then)
The glass fails to reveal any new information.
(else)
(current room $Room)
(collect $Obj)
*($Obj has parent $Room)
%% Helper predicate defined earlier:
(scenery $Obj)
(into $List)
(randomly select $Foo from $List)
(if) ($Foo = #camera) (then)
You lean in for a closer look at nothing in particular.
(else)
You lean in for a closer look at (the $Foo).
(endif)
(endif)
Section - The Framed Photo
#photo
The framed photo is on the rack of shelves. Understand "dog photo" and "dog" and "picture" and "photograph" and "wendell" as the framed photo. The description of the framed photo is "[if the location is in backstage]In the frame is a photo of a dog[otherwise if the sunglasses are worn]In this picture frame is a photo of Wendell the dog, Pauline's dog, which she loved. But you know that Pauline has a secret, a secret concerning Wendell[otherwise]A photo of Pauline's beloved golden retriever, Wendell. A faithful companion to his owner, and beloved of all citizens of Craverly Heights, Wendell was cut down before his time—under mysterious circumstances[end if]."
(name *)
framed photo
(item *)
(* is #on #shelves)
(dict *)
dog photo picture photograph wendell
(descr *)
(if) (backstage) (then)
In the frame is a photo of a dog.
(elseif) (sid) (then)
In this picture frame is a photo of Wendell the dog, Pauline's dog, which she loved. But you know that Pauline has a secret, a secret concerning Wendell.
(else)
A photo of Pauline's beloved golden retriever, Wendell. A faithful companion to his owner, and beloved of all citizens of Craverly Heights, Wendell was cut down before his time—under mysterious circumstances.
(endif)
Understand "jewel" and "gem" and "gems" and "jewels" as "[the jewels]".
#jewels
(topic *)
(name *)
jewels
(plural *)
(dict *)
jewel gem gems
Section - The Pair of Sunglasses
#sunglasses
Dialog provides a “(pair $)” trait to indicate a plural-named object with “a pair of” as its indefinite article. But here we will use a normal singular-named object instead, which is more true to the original.
The pair of sunglasses is on the rack of shelves. The pair of sunglasses is wearable. Understand "glasses" and "shades" and "glass" and "shade" and "them" as the pair of sunglasses. The description of the pair of sunglasses is "[if the location is in backstage]Grossly out-of-fashion, and as flimsy[otherwise if the sunglasses are worn]Your sunglasses are what set you apart from your twin—that, and the fact that you flunked out of medical school[otherwise]With a pang of familial familiarity, these flat-topped shades remind you vividly of the sunglasses that your twin Sid used to wear[end if]."
(name *)
pair of sunglasses
(* is #on #shelves)
(wearable *)
(dict *)
glasses shades glass shade
(descr *)
(if) (backstage) (then)
Grossly out-of-fashion, and as flimsy.
(elseif) (sid) (then)
Your sunglasses are what set you apart from your twin—that, and the fact that you flunked out of medical school.
(else)
With a pang of familial familiarity, these flat-topped shades remind you vividly of the sunglasses that your twin Sid used to wear.
(endif)
Check wearing the sunglasses:
if the location is in onstage:
say "This is not a suitable venue for you to be altering your appearance so drastically and cavalierly." instead.
Check taking off the sunglasses:
if the location is in onstage:
say "This is not a suitable venue for you to be altering your appearance so drastically and cavalierly." instead.
(prevent [wear/remove *])
(onstage)
This is not a suitable venue for you to be altering your appearance so drastically and cavalierly.
Section - The Handgun
#handgun
The handgun is on the rack of shelves. Understand "gun" and "pistol" and "firearm" and "trigger" as the handgun. The description of the handgun is "[if the location is in backstage]Nickel-plated. Shiny[otherwise if the sunglasses are worn]The familiar weight of your gun in your hand is like a soft peck on the cheek from your mother—you assume. Mom always liked your twin better[otherwise]How ironic that a healer and caregiver such as yourself should carry in your hands such a monstrous implement of destruction. Or is it? Maybe it is not ironic at all. Maybe it makes perfect sense for you to carry this gun: you, who so often hold the powers of life and death in your hands[end if]."
(name *)
handgun
(item *)
(* is #on #shelves)
(dict *)
gun pistol firearm trigger
(descr *)
(if) (backstage) (then)
Nickel-plated. Shiny.
(elseif) (sid) (then)
The familiar weight of your gun in your hand is like a soft peck on the cheek from your mother—you assume. Mom always liked your twin better.
(else)
How ironic that a healer and caregiver such as yourself should carry in your hands such a monstrous implement of destruction. Or is it? Maybe it is not ironic at all. Maybe it makes perfect sense for you to carry this gun: you, who so often hold the powers of life and death in your hands.
(endif)
By default, “(perform [feel $])” will call out to “(feel $)”, which was defined near the beginning of the source code for several generic cases. It would be possible to put the following code inside a “(feel $)” rule too, but that rule would have to appear before the generic rules. Doing it this way preserves the order of the rules in the original Inform 7 code.
Instead of touching the handgun, say "[if the location is in backstage]It feels a lot like plastic[otherwise]The steel of the gun feels cold. Cold like a broken promise[end if]."
(perform [feel *])
(if) (backstage) (then)
It feels a lot like plastic.
(else)
The steel of the gun feels cold. Cold like a broken promise.
(endif)
In Dialog, the understand-rule for the longer sentence—point something at something—should appear first. This way, in case of partially understood input, the error response will be more helpful.
(understand [aim/point | $Words] as [point $Obj at $Target])
*(split $Words by [at] into $Left and $Right)
*(understand $Left as single object $Obj preferably held)
*(understand $Right as single object $Target)
(understand [aim/point at | $Words] as [point $Obj at $Target])
*(split $Words by [with] into $Left and $Right)
*(understand $Left as single object $Target)
*(understand $Right as single object $Obj preferably held)
Pointing is an action applying to one thing. Understand "Aim [something preferably held]" as pointing. Understand "point [something preferably held]" as pointing.
(understand [aim/point | $Words] as [point $Obj])
*(understand $Words as single object $Obj preferably held)
Carry out pointing:
say "You point [the noun] [if the location is in onstage]squarely [end if]at nothing in particular."
(perform [point $Obj])
You point (the $Obj) (if) (onstage) (then) squarely (endif) at nothing in particular.
pointing it at is an action applying to two things. Understand "Aim [something preferably held] at [something]" as pointing it at. Understand "point [something preferably held] at [something]" as pointing it at. Understand "aim at [something] with [something preferably held]" as pointing it at (with nouns reversed). Understand "point at [something] with [something preferably held]" as pointing it at (with nouns reversed).
It's hard to spot the missing periods before Gina and Leopold in the following Inform 7 code, perhaps due to the practice of moving full stops around to avoid spurious line breaks.
Check pointing it at:
if the noun is the handgun and the second noun is the player:
if the location is in backstage:
say "You point the gun at yourself. Kind of scary. Not really." instead;
otherwise:
say "You raise the gun to your temple[if Pauline is in the location]. Pauline gasps[otherwise if Gina is in the location]Gina gasps[otherwise if Leopold Craverly is in the location]Leopold squints at you[end if]." instead.
(perform [point #handgun at #player])
(if) (backstage) (then)
You point the gun at yourself. Kind of scary. Not really.
(else)
You raise the gun to your temple.
(current room $Room)
(if) (#pauline is in room $Room) (then)
Pauline gasps.
(elseif) (#gina is in room $Room) (then)
Gina gasps.
(elseif) (#leopold is in room $Room) (then)
Leopold squints at you.
(endif)
(endif)
Carry out pointing it at:
say "You point [the noun] [if the location is in onstage]squarely [end if]at [the second noun]."
(perform [point $Obj at $Target])
You point (the $Obj) (if) (onstage) (then) squarely (endif) at (the $Target).
The current target is a thing that varies.
(global variable (current target is $))
The faux-thing is a privately-named part of the player.
We will represent the faux-thing by unsetting the variable.
According to Section 12.20 of Writing with Inform, you can't rely on “current action” from within an “every turn” rule. But it seems to work here.
In Dialog, “(on every tick)” doesn't have access to the last action. But we can recreate the effect with a generic before-rule. Note that we cannot use an after-rule, because after-rules don't get to run for actions that fail.
(global variable (current action is $))
(before $Action)
~(command $Action) %% Ignore out-of-world actions.
(now) (current action is $Action)
Every turn:
if the current action is pointing the handgun at something:
now the current target is the second noun;
otherwise:
now the current target is the faux-thing. [The game will remember what you're pointing at for one turn, and then (unless you get on with it and shoot the thing) it won't care anymore.]
(on every tick)
(if) (current action is [point #handgun at $Target]) (then)
(now) (current target is $Target)
(else)
(now) ~(current target is $)
(endif)
%% The game will remember what you're pointing at
%% for one turn, and then (unless you get on with
%% it and shoot the thing) it won't care anymore.
Vagueshooting is an action applying to nothing. Understand "shoot" and "fire" as vagueshooting.
(understand [shoot/fire] as [shoot])
Instead of vagueshooting:
if the player carries the handgun:
try shooting the handgun instead;
otherwise:
say "You don't have anything with which to shoot." instead.
(perform [shoot])
(if) (#handgun is #heldby #player) (then)
(try [shoot #handgun])
(else)
You don't have anything with which to shoot.
(endif)
Shooting is an action applying to one thing. Understand "shoot [something]" and "fire [something]" as shooting.
(understand [shoot/fire | $Words] as [shoot $Obj])
*(understand $Words as single object $Obj)
If the current target is the gun (point gun at gun; shoot) this results in an infinite loop. The stack will overflow, which may crash the interpreter.
Check shooting:
if the player does not carry the handgun:
say "You don't have anything with which to shoot." instead;
if the noun is the handgun:
if the current target is the faux-thing:
say "[if the location is in backstage]You pull the trigger. Nothing. It doesn't even click[otherwise]With an expression of utter animalism on your face, you raise your gun and fire a shot into the air[end if]." instead;
otherwise:
try shooting the current target instead;
if the noun is not a person:
say "[if the location is in backstage]The gun has no effect on [the noun]. The trigger doesn't even click[otherwise if the sunglasses are worn]You stop yourself. 'This [noun] isn't worth my bullets,' you say, menacingly. 'Bullets are expensive.'[paragraph break]You squint menacingly at [the noun][otherwise]You stop yourself. 'This [noun] isn't worth my bullets,' you say, thoughtfully. 'It's done nothing wrong. Some things in this world are still innocent. But some aren't. But even if they are, is it my duty to mete out justice?' You look down meaningfully at the gun[end if]."
If the current target is the gun (point gun at gun; shoot) this results in an infinite loop. The Dialog runtime system prints an error message and attempts to undo back to a safe state.
(prevent [shoot $])
~(#handgun is #heldby #player)
You don't have anything with which to shoot.
(perform [shoot #handgun])
(if) (current target is $Obj) (then)
(try [shoot $Obj])
(elseif) (backstage) (then)
You pull the trigger. Nothing. It doesn't even click.
(else)
With an expression of utter animalism on your face, you raise your gun and fire a shot into the air.
(endif)
(perform [shoot $Obj])
~(animate $Obj)
~(current player $Obj)
(if) (backstage) (then)
The gun has no effect on (the $Obj). The trigger doesn't even click.
(elseif) (sid) (then)
You stop yourself. “This (name $Obj) isn't worth my bullets,” you say, menacingly. “Bullets are expensive.”
(par)
You squint menacingly at (the $Obj).
(else)
You stop yourself. “This (name $Obj) isn't worth my bullets,” you say, thoughtfully. “It's done nothing wrong. Some things in this world are still innocent. But some aren't. But even if they are, is it my duty to mete out justice?” You look down meaningfully at the gun.
(endif)
Instead of shooting the player:
if the location is in backstage:
say "On days like this, it's not the last thought that occurs to you." instead;
otherwise if the sunglasses are worn:
say "With the pistol aimed at your temple, you almost pull the deadly trigger that could free the world from the scourge of the existence of the dastardly Sidney Langridge, but you pull the gun away from your head, suddenly.[paragraph break]'Sorry to disappoint,' you announce, 'But Sid Langridge is gonna be around for a while longer. I've got things to do.'[paragraph break]You sneer menacingly.";
otherwise:
say "'I've had it,' you announce. 'I can't go on. All the secrets. All the lies. I'm finished. This is the end for your beloved Doctor Langridge. And little do you know: the secret of Wendell's death dies with me!'[paragraph break]BLAM[paragraph break]PRESS ANY KEY TO CONTINUE[paragraph break]";
wait for any key;
say "✤✤✤[paragraph break]'Why. Why did you do that.'[paragraph break]'It's like I said! I can't go on. I quit. Craverly Heights is a sinking ship, and this rat is jumping off.'[paragraph break]'First of all, that remark is offensive to rats. Second, you can't quit. Your contract has you in this studio for the next three years.'[paragraph break]'Well, what are you going to do? Doctor Langridge is dead.'[paragraph break]'Oh, that's not a problem...'";
end the game saying "We're bringing back your evil twin."
(perform [shoot #player])
(if) (backstage) (then)
On days like this, it's not the last thought that occurs to you.
(elseif) (sid) (then)
With the pistol aimed at your temple, you almost pull the deadly trigger that could free the world from the scourge of the existence of the dastardly Sidney Langridge, but you pull the gun away from your head, suddenly.
(par)
“Sorry to disappoint,” you announce, “But Sid Langridge is gonna be around for a while longer. I've got things to do.”
(par)
You sneer menacingly.
(else)
“I've had it,” you announce. “I can't go on. All the secrets. All the lies. I'm finished. This is the end for your beloved Doctor Langridge. And little do you know: the secret of Wendell's death dies with me!”
(par)
BLAM
(par)
PRESS ANY KEY TO CONTINUE
(par)
(get key $)
✤✤✤
(par)
“Why. Why did you do that.”
(par)
“It's like I said! I can't go on. I quit. Craverly Heights is a sinking ship, and this rat is jumping off.”
(par)
“First of all, that remark is offensive to rats. Second, you can't quit. Your contract has you in this studio for the next three years.”
(par)
“Well, what are you going to do? Doctor Langridge is dead.”
(par)
“Oh, that's not a problem...”
(game over { We're bringing back your evil twin. })
(endif)
Inform 7 automatically inserts a line break, because right before each invocation of this rule, a text block has just ended with a full stop.
To execute the bloodbath ending:
say "PRESS ANY KEY TO CONTINUE[paragraph break]";
wait for any key;
say "✤✤✤[paragraph break]'So what happens now?'[paragraph break]'First of all, none of that happened.'[paragraph break]'You mean like, we're gonna say it was a dream?'[paragraph break]'No, I mean we're going to scrap all of it and start from scratch. Nobody had a dream, nobody got shot, nothing. We're going to air a rerun. Then we're going to hire a new writer, and we're going to do a [italic type]real[roman type] episode, with a plot. And [italic type]you[roman type] are forbidden from improvising. Never again.'";
end the game saying "Tune in next week!"
(bloodbath ending)
(line)
PRESS ANY KEY TO CONTINUE
(par)
(get key $)
✤✤✤
(par)
“So what happens now?”
(par)
“First of all, none of that happened.”
(par)
“You mean like, we're gonna say it was a dream?”
(par)
“No, I mean we're going to scrap all of it and start from scratch. Nobody had a dream, nobody got shot, nothing. We're going to air a rerun. Then we're going to hire a new writer, and we're going to do a (italic) real (unstyle) episode, with a plot. And (italic) you (unstyle) are forbidden from improvising. Never again.”
(game over { Tune in next week! })
A person can be dead.
We can use “($ is dead)” as a per-object flag without any declaration. Flags are off by default. Here we declare that “($ is alive)” is an alias for not being dead:
@($Person is alive)
~($Person is dead)
Note that “doing something other than examining with a dead person” doesn't catch situations where the dead person is the indirect object. Therefore, in the Inform 7 version, you can show the gun to a dead body and get a reaction.
This should really be “something other than examining or shooting”, otherwise it prevents several amusing passages from ever showing up. This is a known bug in Craverly Heights. It has been fixed in the Dialog version.
Attempto is indexed text that varies. The attempto is "do this thing".
Before doing something other than examining with a dead person:
now the attempto is the player's command;
replace the text "pauline" in attempto with "Pauline";
replace the text "janine" in attempto with "Janine";
replace the text "leopold" in attempto with "Leopold";
replace the text "wendell" in attempto with "Wendell";
replace the text "gina" in attempto with "Gina";
replace the text "craverly" in attempto with "Craverly";
say "'I wish... I wish I could [attempto], but it's too late,' you announce, your voice weighed by the burden of monstrous regret brought on by the enormity of the fact that you have brought from the realm of the unspeakable into the realm of the true: '[if the noun is male]He's[otherwise]She's[end if] dead.'" instead.
Rewriting a command in this way isn't exactly watertight. For instance, a command like “take pauline and bed” produces an ungrammatical response. But it's a cool idea, so we'll run with it.
(before $Action)
~($Action = [examine | $])
~($Action = [shoot | $])
*($Obj is one of $Action)
($Obj is dead)
%% An undocumented global variable from the library:
(last command was $WordList)
“I wish... I wish I could
(exhaust) {
*($Word is one of $WordList)
(if)
($Word is one of [
pauline
janine
leopold
wendell
gina
craverly])
(then)
(uppercase)
(endif)
$Word
}, but it's too late,” you announce, your voice weighed by the burden of monstrous regret brought on by the enormity of the fact that you have brought from the realm of the unspeakable into the realm of the true: “(no space)
(if) (male $Obj) (then) He's (else) She's (endif) dead.”
%% Advance time, then stop this and any lined-up actions:
(tick) (stop)
Chapter - East Hallway
#e-hallway
The description of East Hallway is "Gina's Pizzeria is north from here. The hallway continues west."
(look *)
Gina's Pizzeria is north from here. The hallway continues west.
Chapter - South Hallway
#s-hallway
The description of South Hallway is "The break room is east from here. The hallway continues north."
(look *)
The break room is east from here. The hallway continues north.
Chapter - West Hallway
#w-hallway
The description of West Hallway is "Craverly Manor is south from here. The hallway continues east."
(look *)
Craverly Manor is south from here. The hallway continues east.
Chapter - Hallway Intersection
#intersection
The description of Hallway Intersection is "Nobody's around.[paragraph break]The hallway runs north, south, east, and west from here."
(look *)
Nobody's around.
(par)
The hallway runs north, south, east, and west from here.
The non-diegetic bulletin is here. "A non-diegetic bulletin is posted on the wall." The description of the non-diegetic bulletin is "The bulletin reads: [italic type]Hey! You, with the keyboard! Let me know what you think of this game on Twitter (@rcveeder) or via email (rcveeder@me.com).[paragraph break]Here's a tip: To finish the game, you're going to have to use the verb SHOW, as in '>show THING to PERSON'. You might also have to '>point THING at PERSON' at some point.[paragraph break]Thanks for playing[roman type]."
#bulletin
(name *)
non-diegetic bulletin
(* is #in #intersection)
(appearance *)
A non-diegetic bulletin is posted on the wall.
(descr *)
The bulletin reads:
(italic)
Hey! You, with the keyboard!
Let me know what you think of this game on Twitter
\(\@rcveeder\) or via email \(rcveeder\@me.com\).
(par)
Here's a tip: To finish the game, you're going to have to use the verb SHOW, as in “>show THING to PERSON”. You might also have to “>point THING at PERSON” at some point.
(par)
Thanks for playing.
(unstyle)
Instead of doing something other than examining with the non-diegetic bulletin, say "You're not supposed to pay too much attention to that."
(prevent $Action)
~($Action = [examine *])
(* is one of $Action)
You're not supposed to pay too much attention to that.
Part - Break Room
#breakroom
The description of Breakroom is "An antique vending machine takes up most of the tiny room. The exit is west."
(look *)
An antique vending machine takes up most of the tiny room. The exit is west.
The antique vending machine is scenery in Breakroom. Understand "note" and "notes" and "sticky note" and "sticky notes" and "sticky" as the vending machine. The description of the antique vending machine is "There's one sticky note on the machine that says 'OUT OF ORDER', and there's another sticky note that says 'THIS MACHINE OWES ME $7000'."
#vmachine
(name *)
antique vending machine
(an *)
(* is #in #breakroom)
(dict *)
note notes sticky
(descr *)
There's one sticky note on the machine that says “OUT OF ORDER”, and there's another sticky note that says “THIS MACHINE OWES ME \$7000”.
Instead of taking the vending machine, say "You can't lug this vending machine around. It's the real thing."
(prevent [take *])
You can't lug this vending machine around. It's the real thing.
The table is a scenery supporter in Breakroom. The description of the table is "It's a piece of junk."
#table
(name *)
table
(supporter *)
(* is #in #breakroom)
(descr *)
It's a piece of junk.
(par)
(list objects #on *)
When examining the table, inhibit the default behaviour of printing a paragraph about every object that the player has put there. We've already described them in the previous rule.
~(appearance $ #on *)
The table calls attention to itself indirectly, via its contents: On the table is a script. When an appearance rule succeeds, the library binds “it” to the object in question, in this case the table. But “(list objects $ $)” binds “it” to the script, if the script is the only thing on the table. We'd like to keep it that way, allowing the player to just “take it” (the script). Therefore we make the appearance rule fail, which prevents the library from immediately re-binding “it” to the table.
(appearance *)
(list objects #on *)
(fail)
Section - The Script
#script
The script is on the table. Understand "sheet" and "sheets" and "paper" and "papers" and "test results" and "result" and "results" and "couple sheets of paper" and "sheets of paper" and "set of test results" and "test" as the script.
(* is #on #table)
(item *)
(dict *)
script sheet sheets paper papers test results result couple set
It's possible to put the typewritten text between “(fixed pitch)” and “(unstyle)”, but style classes are more powerful: On the Å-machine web player, they can take care of centering the lines too. The Z-machine backend currently doesn't support centering, but it understands “monospace” and the margin attributes.
Instead of examining the script in Backstage:
say "Two pages. The first page reads:[paragraph break]";
center "[fixed letter spacing]CRAVERLY HEIGHTS";
center "EPISODE # 6001";
say "[paragraph break][fixed letter spacing]If it's so easy, why don't you write it yourself?[variable letter spacing][paragraph break]The second page is blank."
(perform [examine *])
(backstage)
Two pages. The first page reads:
(div @fixed) {
(div @center) {
CRAVERLY HEIGHTS (line)
EPISODE \# 6001
}
If it's so easy, why don't you write it yourself?
}
The second page is blank.
(style class @fixed)
margin-top: 1em;
margin-bottom: 1em;
font-family: Courier, monospace;
text-align: left;
(style class @center)
text-align: center;
margin-bottom: 1em;
Instead of showing the script to Lane, say "Lane has already seen the script. She rolls her eyes. 'I know, right?'"
(perform [show * to #lane])
Lane has already seen the script. She rolls her eyes. “I know, right?”
Prog is a number that varies. Prog is 0.
(global variable (prog 0))
If required, we can put conditions on “(an $)” and “(plural $)” too, to match the name.
The printed name of the script is "[if the location is in backstage]script[otherwise if prog is 0]couple sheets of paper[otherwise]set of test results[end if]".
(name *)
(if) (backstage) (then)
script
(elseif) (prog 0) (then)
couple sheets of paper
(else)
set of test results
(endif)
Instead of showing the script to Pauline:
if the sunglasses are worn:
say "'What's that?' Pauline asks.[paragraph break]You shake the papers triumphantly. 'This is my certificate of release! From prison! They give you a certificate that says you aren't supposed to be incarcerated anymore, in case a cop tries to toss you back in the slammer.'[paragraph break]'I didn't know that,' says Pauline.";
otherwise if Prog is 0:
say "You place the papers gingerly in Pauline's delicate hands.[paragraph break]'Are these...the test results?' Pauline asks.[paragraph break]'Yes, Janine,' you say. Of course they are.[paragraph break]'What do they say?'[paragraph break]You bite your lip thoughtfully. 'I still need to analyze them,' you say. 'I'll let you know once I'm finished.'";
increment Prog;
rule succeeds;
otherwise if prog is 1:
say "'Have you finished analyzing the test results?' Pauline asks. You frown.[paragraph break]'I'm afraid not. Soon, though.' You hope.[paragraph break]'Maybe my mother can help,' says Pauline.[paragraph break]'Very good idea, Janine. I'll see what she has to say.' You cough. 'I mean, Pauline.'";
rule succeeds;
otherwise if prog is 2:
say "[one of]'I've finished analyzing your results,' you say, passing the papers to Pauline. She inspects them closely.[paragraph break]'As you can see, the tests don't apply to you specifically. They also have something to do with the identity of your father.'[paragraph break]Pauline looks up from the paper, her eyes wide with amazement.[paragraph break]'Now, I need those back, for reasons I think you can guess.' You pull the test results out of her hands[or]Pauline frowns. 'I've seen the results, Doctor Langridge,' she says, 'But have you shown them to...my father?'[paragraph break]'I just wanted to make sure that's what you wanted,' you reply.[paragraph break]'It is,' says Pauline[stopping].";
rule succeeds.
(perform [show * to #pauline])
(if) (sid) (then)
“What's that?” Pauline asks.
(par)
You shake the papers triumphantly. “This is my certificate of release! From prison! They give you a certificate that says you aren't supposed to be incarcerated anymore, in case a cop tries to toss you back in the slammer.”
(par)
“I didn't know that,” says Pauline.
(elseif) (prog 0) (then)
You place the papers gingerly in Pauline's delicate hands.
(par)
“Are these...the test results?” Pauline asks.
(par)
“Yes, Janine,” you say. Of course they are.
(par)
“What do they say?”
(par)
You bite your lip thoughtfully. “I still need to analyze them,” you say. “I'll let you know once I'm finished.”
(now) (prog 1)
(elseif) (prog 1) (then)
“Have you finished analyzing the test results?” Pauline asks. You frown.
(par)
“I'm afraid not. Soon, though.” You hope.
(par)
“Maybe my mother can help,” says Pauline.
(par)
“Very good idea, Janine. I'll see what she has to say.” You cough. “I mean, Pauline.”
(else)
(select)
“I've finished analyzing your results,” you say, passing the papers to Pauline. She inspects them closely.
(par)
“As you can see, the tests don't apply to you specifically. They also have something to do with the identity of your father.”
(par)
Pauline looks up from the paper, her eyes wide with amazement.
(par)
“Now, I need those back, for reasons I think you can guess.” You pull the test results out of her hands.
(or)
Pauline frowns. “I've seen the results, Doctor Langridge,” she says, “But have you shown them to...my father?”
(par)
“I just wanted to make sure that's what you wanted,” you reply.
(par)
“It is,” says Pauline.
(stopping)
(endif)
Instead of showing the script to Gina:
if the sunglasses are worn:
say "'This is the deed to my new condo,' you tell Gina. She cranes her head to get a better look at the mysterious papers while maintaining a safe distance from your crime-ridden form.[paragraph break]'I hope it's far away from here,' she says.[paragraph break]'Nice try,' you say, 'But I'll never tell the likes of you where it is!'";
otherwise if Prog is 0:
say "Gina is utterly boggled by the papers you present to her. 'I have no idea what this is,' she says. 'Did you get this back at the hospital?'[paragraph break]'Yes, Gina,' you say. Of course you did.[paragraph break]'Then maybe they'll hold some interest to Pauline. If she has the strength to read them,' Gina adds bitterly.";
rule succeeds;
otherwise if prog is 1:
if Leopold Craverly is dead:
say "'I wanted to show you these test results,' you say, thrusting the papers in to Gina's motherly hands. She looks them over with an expression that changes from skeptical, to interested, to astonished.[paragraph break]'Doc! This means...'[paragraph break]You lean in closer.[paragraph break]'This means...' Gina stammers, 'Pauline's father is Leopold Craverly!'[paragraph break]Your eyes widen. 'But I just[if sidshotleo is true]—I mean, Sidney, my twin, just[end if] murdered him!'[paragraph break]PRESS ANY KEY TO CONTINUE[paragraph break]";
execute the dead craverly ending;
otherwise:
say "'I wanted to show you these test results,' you say, thrusting the papers in to Gina's motherly hands. She looks them over with an expression that changes from skeptical, to interested, to astonished.[paragraph break]'Doc! This means...'[paragraph break]You lean in closer.[paragraph break]'This means...' Gina stammers, 'Pauline's father is...'[paragraph break]Your eyes widen. Of course!";
increment Prog;
rule succeeds;
otherwise if prog is 2:
say "'I don't need these!' exclaims Gina. 'Pauline needs to find out who her real father is! And so does...her father.'";
rule succeeds.
(perform [show * to #gina])
(if) (sid) (then)
“This is the deed to my new condo,” you tell Gina. She cranes her head to get a better look at the mysterious papers while maintaining a safe distance from your crime-ridden form.
(par)
“I hope it's far away from here,” she says.
(par)
“Nice try,” you say, “But I'll never tell the likes of you where it is!”
(elseif) (prog 0) (then)
Gina is utterly boggled by the papers you present to her. “I have no idea what this is,” she says. “Did you get this back at the hospital?”
(par)
“Yes, Gina,” you say. Of course you did.
(par)
“Then maybe they'll hold some interest to Pauline. If she has the strength to read them,” Gina adds bitterly.
(elseif) (prog 1) (then)
(if) (#leopold is dead) (then)
“I wanted to show you these test results,” you say, thrusting the papers in to Gina's motherly hands. She looks them over with an expression that changes from skeptical, to interested, to astonished.
(par)
“Doc! This means...”
(par)
You lean in closer.
(par)
“This means...” Gina stammers, “Pauline's father is Leopold Craverly!”
(par)
Your eyes widen. “But I just (if) (sid shot leo) (then) (no space) —I mean, Sidney, my twin, just (endif) murdered him!”
(par)
PRESS ANY KEY TO CONTINUE
(par)
(dead craverly ending)
(else)
“I wanted to show you these test results,” you say, thrusting the papers in to Gina's motherly hands. She looks them over with an expression that changes from skeptical, to interested, to astonished.
(par)
“Doc! This means...”
(par)
You lean in closer.
(par)
“This means...” Gina stammers, “Pauline's father is...”
(par)
Your eyes widen. Of course!
(now) (prog 2)
(endif)
(else)
“I don't need these!” exclaims Gina. “Pauline needs to find out who her real father is! And so does...her father.”
(endif)
To execute the dead craverly ending:
wait for any key;
say "✤✤✤[paragraph break]'And why did you do that?'[paragraph break]'I don't know! We had no script!'[paragraph break]'So you murdered your costar? I thought the first rule of improv was [']Don't randomly kill your fellow characters['].'[paragraph break]'Actually, the first rule of improv is, you're supposed to say [']Yes, and['].'[paragraph break]'Oh, I see. Let me try it out: Yes, and, you're fired.'";
end the game saying "Tune in next week."
(dead craverly ending)
(get key $)
✤✤✤
(par)
“And why did you do that?”
(par)
“I don't know! We had no script!”
(par)
“So you murdered your costar? I thought the first rule of improv was 'Don't randomly kill your fellow characters'.”
(par)
“Actually, the first rule of improv is, you're supposed to say 'Yes, and'.”
(par)
“Oh, I see. Let me try it out: Yes, and, you're fired.”
(game over { Tune in next week. })
Instead of showing the script to Leopold Craverly:
if the sunglasses are worn:
say "'What's that you've got there?' Leopold asks.[paragraph break]You smirk with unconscionable smugness. 'It's a script. I'm gonna be a star,' you say.[paragraph break]'I imagine you must think so. But you're no star, Sidney. You're a black hole.'[paragraph break]You grimace at the disquieting veracity of Leopold's words.";
otherwise if Prog is 0:
say "'What's this?' Leopold says, eyeing the papers with inexplicable contempt. 'Some document you found at the hospital?'[paragraph break]'Yes,' you say.[paragraph break]'Then I can safely assume that it does not concern me!' Craverly punctuates his statement with a triumphant guffaw.";
rule succeeds;
otherwise if prog is 1:
say "'What's this?' Leopold asks, eyeing the papers with inexplicable contempt.[paragraph break]'These are test results,' you say. 'Pauline's test results.'[paragraph break]'Ah! I will attempt an impersonation of someone who cares, then: What do they say?'[paragraph break]You glare at the old man, at his hateful face. 'I haven't figured that out. Yet.'[paragraph break]'Of course! I expect nothing more from the greatest doctor in Craverly Heights.' Leopold guffaws.";
rule succeeds;
otherwise if prog is 2:
say "'What's this?' Leopold asks, eyeing the papers with inexplicable trepidation.[paragraph break]'These are test results. Pauline's test results,' you say, extremely meaningfully. 'They constitute conclusive proof that you are Pauline's father.'[paragraph break]The weight of this revelation nearly knocks Leopold onto the floor. He grasps his cane all the tighter, and mutters:[paragraph break]'Nineteen years ago... The train tunnel collapse!'[paragraph break]'The underground gases that seeped into the tunnel caused amnesia in all of the passengers,' you explain. 'Nobody on the train could remember what happened before the rescue team arrived. But now we know about one thing that definitely did happen. You and Gina conceived a child, a child that desperately needs a medical procedure she can't afford.'[paragraph break]'I'll pay every cent!' Leopold is on the verge of tears. 'I have a daughter! The Craverly line will go on!'[paragraph break]PRESS ANY KEY TO CONTINUE[paragraph break]";
finish the episode.
(perform [show * to #leopold])
(if) (sid) (then)
“What's that you've got there?” Leopold asks.
(par)
You smirk with unconscionable smugness. “It's a script. I'm gonna be a star,” you say.
(par)
“I imagine you must think so. But you're no star, Sidney. You're a black hole.”
(par)
You grimace at the disquieting veracity of Leopold's words.
(elseif) (prog 0) (then)
“What's this?” Leopold says, eyeing the papers with inexplicable contempt. “Some document you found at the hospital?”
(par)
“Yes,” you say.
(par)
“Then I can safely assume that it does not concern me!” Craverly punctuates his statement with a triumphant guffaw.
(elseif) (prog 1) (then)
“What's this?” Leopold asks, eyeing the papers with inexplicable contempt.
(par)
“These are test results,” you say. “Pauline's test results.”
(par)
“Ah! I will attempt an impersonation of someone who cares, then: What do they say?”
(par)
You glare at the old man, at his hateful face. “I haven't figured that out. Yet.”
(par)
“Of course! I expect nothing more from the greatest doctor in Craverly Heights.” Leopold guffaws.
(else)
“What's this?” Leopold asks, eyeing the papers with inexplicable trepidation.
(par)
“These are test results. Pauline's test results,” you say, extremely meaningfully. “They constitute conclusive proof that you are Pauline's father.”
(par)
The weight of this revelation nearly knocks Leopold onto the floor. He grasps his cane all the tighter, and mutters:
(par)
“Nineteen years ago... The train tunnel collapse!”
(par)
“The underground gases that seeped into the tunnel caused amnesia in all of the passengers,” you explain. “Nobody on the train could remember what happened before the rescue team arrived. But now we know about one thing that definitely did happen. You and Gina conceived a child, a child that desperately needs a medical procedure she can't afford.”
(par)
“I'll pay every cent!” Leopold is on the verge of tears. “I have a daughter! The Craverly line will go on!”
(par)
PRESS ANY KEY TO CONTINUE
(par)
(finish the episode)
(endif)
To finish the episode:
wait for any key;
say "✤✤✤[paragraph break]'And fade to black. See? Everything worked out fine.'[paragraph break][if Gina is dead and Pauline is dead]'But Pauline and Gina are dead.'[paragraph break]'Nah, we can edit that out. What the heck were you trying to accomplish there?'[paragraph break]An answer does not spring to mind.[paragraph break][otherwise if Gina is dead]'But Gina is dead.'[paragraph break]'Nah, we can edit that out. What the heck were you trying to accomplish there?'[paragraph break]An answer does not spring to mind.[paragraph break][otherwise if Pauline is dead]'But Pauline is dead.'[paragraph break]'Nah, we can edit that out. What the heck were you trying to accomplish there?'[paragraph break]An answer does not spring to mind.[paragraph break][end if]'So Pauline's gonna be okay?'[paragraph break]'Of course! We were never gonna kill her off. She has to stay in that bed until Lisa has her baby, but we'll figure that out.'[paragraph break]The director leans back and sighs. 'Now, you guys did a good job out there today. I don't want to diminish the enormity of your accomplishment. But before we get working on #6002, we gotta get one thing done.'";
end the game saying "We gotta hire a flippin['] writer.".
(finish the episode)
(get key $)
✤✤✤
(par)
“And fade to black. See? Everything worked out fine.”
(par)
(if) (#gina is dead) (#pauline is dead) (then)
“But Pauline and Gina are dead.”
(par)
“Nah, we can edit that out. What the heck were you trying to accomplish there?”
(par)
An answer does not spring to mind.
(par)
(elseif) (#gina is dead) (then)
“But Gina is dead.”
(par)
“Nah, we can edit that out. What the heck were you trying to accomplish there?”
(par)
An answer does not spring to mind.
(par)
(elseif) (#pauline is dead) (then)
“But Pauline is dead.”
(par)
“Nah, we can edit that out. What the heck were you trying to accomplish there?”
(par)
An answer does not spring to mind.
(par)
(endif)
“So Pauline's gonna be okay?”
(par)
“Of course! We were never gonna kill her off. She has to stay in that bed until Lisa has her baby, but we'll figure that out.”
(par)
The director leans back and sighs. “Now, you guys did a good job out there today. I don't want to diminish the enormity of your accomplishment. But before we get working on \#6002, we gotta get one thing done.”
(game over { We gotta hire a flippin' writer. })
Section - Lane
#lane
Lane is a woman in Breakroom. "Lane is sitting around with a blank look on her face."
(name *)
Lane
(proper *)
(female *)
(* is #in #breakroom)
(appearance *)
Lane is sitting around with a blank look on her face.
The description of Lane is "Lane is wearing a pink blouse."
(descr *)
Lane is wearing a pink blouse.
Lane wears the pink blouse. The description of the pink blouse is "[if the location is in backstage]The blouse looks just fine on Lane[otherwise]Gina's favorite blouse brings out the rosiness of her complexion, even as dulled as it has become by the tragedies that life has delivered to her[end if]."
#blouse
(name *)
pink blouse
(* is #wornby #lane)
(descr *)
(if) (backstage) (then)
The blouse looks just fine on Lane.
(else)
Gina's favorite blouse brings out the rosiness of her complexion, even as dulled as it has become by the tragedies that life has delivered to her.
(endif)
Instead of talking to Lane:
remove Lane from play;
now Gina wears the pink blouse;
now Gina is in Pizza;
say "'Hey, Lane,' you say. 'Shouldn't you be down at the Pizzeria?'[paragraph break]Lane's eyes widen. 'Oh, shoot, sorry! Sorry!'[paragraph break]She continues to apologize as she rushes out into the hall."
(perform [talk to #lane])
(now) (#lane is nowhere)
(now) (#blouse is #wornby #gina)
(now) (#gina is #in #pizza)
“Hey, Lane,” you say. “Shouldn't you be down at the Pizzeria?”
(par)
Lane's eyes widen. “Oh, shoot, sorry! Sorry!”
(par)
She continues to apologize as she rushes out into the hall.
Instead of kissing Lane, say "Lane pushes you away. 'Save it for later, all right?'"
(perform [kiss #lane])
Lane pushes you away. “Save it for later, all right?”
After pointing the handgun at Lane:
say "She rolls her eyes."
(after [point #handgun at #lane])
She rolls her eyes.
After shooting Lane:
say "With the gun pointed right at Lane, you pull the trigger. Nothing happens.[paragraph break]She sighs. 'Cut that out.'"
(perform [shoot #lane])
With the gun pointed right at Lane, you pull the trigger. Nothing happens.
(par)
She sighs. “Cut that out.”
Instead of showing the handgun to Lane, say "Lane shrugs. 'I've seen cooler.'"
(perform [show #handgun to #lane])
Lane shrugs. “I've seen cooler.”
Instead of showing the framed photo to Lane, say "Lane squints at the photo of the dog. 'I'm pretty sure this came with the frame.'"
(perform [show #photo to #lane])
Lane squints at the photo of the dog. “I'm pretty sure this came with the frame.”
Instead of showing the magnifying glass to Lane, say "Lane shakes her head. 'It's a piece of junk.'"
(perform [show #magnifier to #lane])
Lane shakes her head. “It's a piece of junk.”
Section - The Satchel
#satchel
The satchel is a thing. Understand "pouch" and "sack" and "bag" as the satchel. The description of the satchel is "[if the location is in backstage]This is not real suede[otherwise if the sunglasses are worn]It's a small suede pouch, as luxurious as the prize it contains[otherwise][end if]."
Examining the satchel as Doctor Langridge produces the response “.”, which is of course an oversight. In the Dialog version, we fall back on the default description by making the rule fail.
(name *)
satchel
(dict *)
pouch sack bag
(item *)
(descr *)
(if) (backstage) (then)
This is not real suede.
(elseif) (sid) (then)
It's a small suede pouch, as luxurious as the prize it contains.
(else)
(fail)
(endif)
In Dialog, search is distinct from look in, so we redirect from search too.
Instead of opening the satchel, try searching the noun.
(instead of [open/search *])
(try [look #in *])
Instead of searching the satchel, say "[if the location is in backstage]Yeah, it's empty[otherwise if the sunglasses are worn]Yes, they're all in here. The jewels that caused you so much trouble, trouble that caused you to commit so many crimes, crimes that caused you to spend so long in prison[otherwise]What should be in here? It could be anything. But it ought to be something good[end if]."
(instead of [look #in *])
(if) (backstage) (then)
Yeah, it's empty.
(elseif) (sid) (then)
Yes, they're all in here. The jewels that caused you so much trouble, trouble that caused you to commit so many crimes, crimes that caused you to spend so long in prison.
(else)
What should be in here? It could be anything. But it ought to be something good.
(endif)
Instead of showing the satchel to Leopold Craverly:
if the sunglasses are worn:
if the suspect is Leopold Craverly:
say "'Don't rub it in, Sidney,' Leopold grouses.";
otherwise:
say "'What's that you've got there?' asks Leopold, clearly curious about the contents of the mysterious pouch that you've produced.[paragraph break]'These are the jewels,' you explain, 'the jewels that I spent so long in prison for. I stole them on your orders! But you betrayed me. But now they're mine!'[paragraph break]'And what are you going to do with them?' asks Leopold, the shadows of confusion darting across his weathered brow.[paragraph break]'I'm going to buy Craverly Manor, and you're going to be my butler.'[paragraph break]PRESS ANY KEY TO CONTINUE[paragraph break]";
wait for any key;
say "✤✤✤[paragraph break]'That doesn't make a lot of sense.'[paragraph break]'Well, maybe Leopold could turn out to be in debt?'[paragraph break]'Sure, I guess. But I would have liked it better if we spread out the whole saga of Sidney returning, Sidney getting the jewels, and Sidney demanding to buy the manor over the course of twelve or twenty episodes.'[paragraph break]'Oh. Do you want us to shoot it again?'[paragraph break]'There's no time. We'll just edit this one until it works. You go home and get something to eat.'[paragraph break]'Yeah, we're all going down to the Gas Leak. You wanna join us?'[paragraph break]'No thanks...'";
end the game saying "...I'm gonna be busy looking for a writer.";
otherwise:
say "'Where did you get that?' Leopold cries, shocked and aghast.[paragraph break]You raise your eyebrows. 'You mean, where did I get this... bag of marbles?'[paragraph break]Leopold regains his composure. 'Ah, yes. Never mind.'";
(perform [show * to #leopold])
(if) (sid) (then)
(if) (the suspect is #leopold) (then)
“Don't rub it in, Sidney,” Leopold grouses.
(else)
“What's that you've got there?” asks Leopold, clearly curious about the contents of the mysterious pouch that you've produced.
(par)
“These are the jewels,” you explain, “the jewels that I spent so long in prison for. I stole them on your orders! But you betrayed me. But now they're mine!”
(par)
“And what are you going to do with them?” asks Leopold, the shadows of confusion darting across his weathered brow.
(par)
“I'm going to buy Craverly Manor, and you're going to be my butler.”
(par)
PRESS ANY KEY TO CONTINUE
(par)
(get key $)
✤✤✤
(par)
“That doesn't make a lot of sense.”
(par)
“Well, maybe Leopold could turn out to be in debt?”
(par)
“Sure, I guess. But I would have liked it better if we spread out the whole saga of Sidney returning, Sidney getting the jewels, and Sidney demanding to buy the manor over the course of twelve or twenty episodes.”
(par)
“Oh. Do you want us to shoot it again?”
(par)
“There's no time. We'll just edit this one until it works. You go home and get something to eat.”
(par)
“Yeah, we're all going down to the Gas Leak. You wanna join us?”
(par)
“No thanks...”
(game over { (space) ...I'm gonna be busy looking for a writer. })
(endif)
(else)
“Where did you get that?” Leopold cries, shocked and aghast.
(par)
You raise your eyebrows. “You mean, where did I get this... bag of marbles?”
(par)
Leopold regains his composure. “Ah, yes. Never mind.”
(endif)
Instead of showing the satchel to Pauline:
if the sunglasses are worn:
say "'The jewels!' Pauline gasps, her breathlessness as much a factor of her surprise as a consequence of her illness. 'Then you were able to convince...'[paragraph break]'[if the suspect is Gina]Your mother[otherwise]Mister Craverly[end if], yes. The jewels are mine—ours, now.'[paragraph break]'Sidney, we can sell the jewels for the money for the medical treatment that will save my life!' Pauline's eyes are huge and wet beneath the hospital lights as they plaintively gaze upward into your own.[paragraph break]'Sugarbabe, those were my thoughts exactly.'[paragraph break]PRESS ANY KEY TO CONTINUE[paragraph break]";
wait for any key;
say "✤✤✤[paragraph break]'Why is Sidney nice all of a sudden?'[paragraph break]'Well, I thought about just abandoning Janine, but I realized I had a chance to push things in a bold new direction.'[paragraph break]'It's Pauline. And that's not gonna work. People love Sidney the evil twin; they're not going to respond well to Sidney the altruist. Besides, Pauline has to stay sick until Lisa has her baby.'[paragraph break]'Oh. Do we need to shoot the whole thing again?'[paragraph break]'There's no time. We'll figure something out.'";
end the game saying "Right after we hire a writer.";
otherwise:
say "'What's in that bag, Doctor Langridge?' asks sweet, innocent Janine.[paragraph break]You consider the question with all the weight it merits.[paragraph break]'I have here some medicine. But it won't help you. It's a special medicine, for a different patient. I shouldn't tell you too much about it. Never mind.'";
(perform [show * to #pauline])
(if) (sid) (then)
“The jewels!” Pauline gasps, her breathlessness as much a factor of her surprise as a consequence of her illness. “Then you were able to convince...”
(par)
“(if) (the suspect is #gina) (then) Your mother (else) Mister Craverly (endif), yes. The jewels are mine—ours, now.”
(par)
“Sidney, we can sell the jewels for the money for the medical treatment that will save my life!” Pauline's eyes are huge and wet beneath the hospital lights as they plaintively gaze upward into your own.
(par)
“Sugarbabe, those were my thoughts exactly.”
(par)
PRESS ANY KEY TO CONTINUE
(par)
(get key $)
✤✤✤
(par)
“Why is Sidney nice all of a sudden?”
(par)
“Well, I thought about just abandoning Janine, but I realized I had a chance to push things in a bold new direction.”
(par)
“It's Pauline. And that's not gonna work. People love Sidney the evil twin; they're not going to respond well to Sidney the altruist. Besides, Pauline has to stay sick until Lisa has her baby.”
(par)
“Oh. Do we need to shoot the whole thing again?”
(par)
“There's no time. We'll figure something out.”
(game over { Right after we hire a writer. })
(else)
“What's in that bag, Doctor Langridge?” asks sweet, innocent Janine.
(par)
You consider the question with all the weight it merits.
(par)
“I have here some medicine. But it won't help you. It's a special medicine, for a different patient. I shouldn't tell you too much about it. Never mind.”
(endif)
Instead of showing the satchel to Gina:
if the sunglasses are worn:
if the suspect is Gina:
say "'Get that out of my face, Sid,' Gina grouses.";
otherwise:
say "Gina cocks her head at the appearance of the suede pouch. 'Hey, scumbag! What's in the bag? Is it scum?'[paragraph break]'It's a pile of jewels. They're worth a lot of money. And I'm giving them to you.' Gina's jaw drops, but you continue. 'Then you're going to sell them, and then you're going to use the money to open a new Gina's Pizzeria location. And you're going to make me part owner. And we're going to be rich.'[paragraph break]Gina can't think of anything to say.[paragraph break]PRESS ANY KEY TO CONTINUE[paragraph break]";
wait for any key;
say "✤✤✤[paragraph break]'We definitely can't afford a second restaurant set, though.'[paragraph break]'We can work around that. Or, do you want us to shoot it again?'[paragraph break]'No, there's no time. We're already editing this one. You can go home.'[paragraph break]'So, does that mean...'[paragraph break]'Oh, right. No, you're not fired.'";
end the game saying "We're definitely hiring a writer, though.";
otherwise:
say "'Gina, what do you think is in this bag?' you ask.[paragraph break]'I don't know, Doc. Is it doll hands?'[paragraph break]'Yes, and,' you say, 'if you see any other doll parts, make sure you let me know.'";
(perform [show * to #gina])
(if) (sid) (then)
(if) (the suspect is #gina) (then)
“Get that out of my face, Sid,” Gina grouses.
(else)
Gina cocks her head at the appearance of the suede pouch. “Hey, scumbag! What's in the bag? Is it scum?”
(par)
“It's a pile of jewels. They're worth a lot of money. And I'm giving them to you.” Gina's jaw drops, but you continue. “Then you're going to sell them, and then you're going to use the money to open a new Gina's Pizzeria location. And you're going to make me part owner. And we're going to be rich.”
(par)
Gina can't think of anything to say.
(par)
PRESS ANY KEY TO CONTINUE
(par)
(get key $)
✤✤✤
(par)
“We definitely can't afford a second restaurant set, though.”
(par)
“We can work around that. Or, do you want us to shoot it again?”
(par)
“No, there's no time. We're already editing this one. You can go home.”
(par)
“So, does that mean...”
(par)
“Oh, right. No, you're not fired.”
(game over { We're definitely hiring a writer, though. })
(endif)
(else)
“Gina, what do you think is in this bag?” you ask.
(par)
“I don't know, Doc. Is it doll hands?”
(par)
“Yes, and,” you say, “if you see any other doll parts, make sure you let me know.”
(endif)
Recreate some default responses from Inform 7, used by the original game.
(narrate taking $)
Taken.
(narrate dropping $)
Dropped.
(narrate leaving $ $)
%% Don't narrate movement between rooms.
(prevent [talk to $Obj])
~(animate $Obj)
~(current player $Obj)
You can only do that to something animate.
The following rule definition must appear towards the end of the Dialog source code, after the more specific rules.
(descr $Obj)
You see nothing special about (the $Obj).
Inform 7 redirects read to examine by default, so let's copy that.
(instead of [read $Obj])
(try [examine $Obj])
Reproduce the default inventory look of Inform 7.
(perform [inventory])
(if) ($ is $ #player) (then)
You are carrying: (line)
(exhaust) {
*($Obj is $Relation #player)
(line) (space 2) (a $Obj)
(if) ($Relation = #wornby) (then)
\(being worn\)
(endif)
}
(else)
You are carrying nothing.
(endif)
Finally, here is all the code in plain-text format. Inform 7 represents non-ASCII characters with “[unicode ...]”, and Dialog uses UTF-8.