!------------------------------------------------------------------------------ ! ! ! D E A D L I N E ! ! ! Inform Port ! ! ! This material contains elements based on the game Deadline. ! It is used with permission as instructive material. ! Original Deadline material is (c) 1982, 1999 Activision, Inc. ! Deadline and Activision are registered trademarks of Activision, Inc. ! All rights reserved. ! ! Inform Port written by Volker Lanz. Please do not distribute modified ! versions of these files. ! You can contact me via e-mail: volker.lanz@gmx.net ! ! NPC.INF ! ======= ! All the NPC's plus Mr. Robner, Steven and Sgt. Duffy ! ! !------------------------------------------------------------------------------ !------------------------------------------------------------------------------ Class NPC class NPC_Engine with DontKnow "~I don't know anything about that.~", add_to_scope [x; objectloop(x in self) if (x hasnt concealed) PlaceInScope(x); ], before [; Hey: print (The) self, " "; if (ScopeCeiling(self) == location) "is facing you."; if (self.npc_move_type ~= 2 && self.npc_old_loc ~= ScopeCeiling(self)) print "stops and "; "turns towards you."; Search: print_ret (The) self, " grudgingly allows you to search. You find nothing whatsoever of interest."; SearchFor: print (The) self, " grudgingly allows you to search.^"; if (IndirectlyContains(self, second) && second hasnt concealed) print_ret "Indeed, ", (the) self, " has ", (the) second, "."; print_ret (The) self, " doesn't have ", (thatorthose) second, "."; ], orders [; Follow: if (noun == player) "~I would rather not.~"; DoYourself(); rtrue; Hello, Goodbye, Hey: << (action) self >>; WhatsWrong, TellWhatsWrong: << ASK self Weather >>; Why, Find: << (action) noun >>; Give: if (second ~= player) { DoYourself(); rtrue; } if (noun in self && noun hasnt concealed) { move noun to player; give noun moved; print_ret (The) self, " hands you ", (the) noun, "."; } print_ret (The) self, " doesn't have ", (thatorthose) noun, "."; NotUnderStood: if (action_to_be == ##Give) print_ret (The) self, " doesn't have that."; DoYourself(); rtrue; ], life [; Answer: print_ret (string) self.DontKnow; ], has proper topic; !------------------------------------------------------------------------------ NPC Mrs_Robner "Mrs. Robner" Living_Room with name "Mrs" "Leslie" "Robner" "your" "mother", letter_state 0, ! Did the player read the letter? phonecall_state 0, ! Did the player eavesdrop the phonecall? start_time 0, ! Time the player entered the house go_phone 0, ! == 1 -> she's on her way to pick up the phone - == 2 -> she's on her way to call Steven surprise 0, ! Has she expressed her surprise about the existance of the hidden closet? DontKnow "~I don't know much about that.~", describe [; if (self.npc_move_type ~= 2 && self.npc_stopped == 0) rtrue; ! The following checks whether she's described with Baxter ! and therefore doesn't have to be described here anymore. if (WillReading.time + 5 > the_time && self in Living_Room) rtrue; print (The) self, " "; switch(location) { Living_Room: print "is sitting here, knitting."; Kitchen: print "is preparing a meal."; Dining_Room: print "is eating breakfast here."; Master_Bedroom: if(self.go_phone == 2) "print is staring at you."; else print "is sitting on her bed."; default: print "is here."; } new_line; DescribeChildren(self); rtrue; ], description "Mrs. Robner is a middle-aged woman of great beauty. She is dressed in black.", npc_arrived [r t; switch(r) { Kitchen: if (the_time > 11*60) ! It's after 11 t = 7; else if (the_time > 10*60+30) ! It's between 10:30 and 11 t = 20; else ! It's before 10:30 t = 30; NPC_Schedule(self, Dining_Room, t); rfalse; Dining_Room: if (the_time > 11*60) ! It's after 11 t = 22; else if (the_time > 10*60+30) ! It's between 10:30 and 11 t = 50; else ! It's before 10:30 t = 70; NPC_Schedule(self, Living_Room, t); rfalse; Dunbar_Bedroom: NPC_Path(self, Master_Bedroom); if (location == r) "Mrs. Robner, standing quietly by the body, starts sobbing and leaves the room."; rfalse; Master_Bedroom: if(self.go_phone == 2) { if (location == Master_Bedroom or Master_Bathroom or Bedroom_Balcony) { if (location ~= Master_Bedroom) { print "Mrs. Robner enters her bedroom"; if (location == Bedroom_Balcony && Bedroom_Balcony_Door hasnt open) { give Bedroom_Balcony_Door open; print ", spots you and opens the balcony door"; } else print " and spots you"; print ".^"; } StartDaemon(LeaveMasterBedroom); "~I'd like to make a private phone call, if you have no objection,~ she says. She motions toward the door."; } self.go_phone = 3; ! She is now talking to Steven. StartTimer(StevenCallEnds, 10); ! She talks for ten minutes give Master_Bedroom_Door ~open; if(location == Hallway_1) "Mrs. Robner shuts the door to the master bedroom."; else if (location == Top_Of_Stairs or Hallway_2) "You hear the master bedroom door shut."; rfalse; } NPC_Schedule(self, Living_Room, 50+random(30)); if (Envelope in self) ! If she has the Envelope, let's say she'll read it there and eat it! remove Envelope; rfalse; Living_Room: if(self.go_phone == 1) { StopDaemon(PhoneRing); self.go_phone = 2; NPC_Path(self, Master_Bedroom); if (location == Living_Room) "Mrs. Robner picks up the phone. ~Oh, hi. Look, I can't talk now. I'll call you later, okay? Bye, then.~ She hangs up the phone."; rfalse; } } ], npc_walkoff [i; DescribeWalkOff(self, i); if (self.go_phone == 2) print (The) self, " appears to be in a hurry.^"; ], npc_walkon [; DescribeWalkOn(self); if (self.go_phone == 2) print (The) self, " appears to be in a hurry.^"; ], before [; Hello: "Mrs. Robner says a curt ~Hello~."; Goodbye: "Mrs. Robner says a curt ~Bye~."; Search, SearchFor: if (Envelope in self && (action == ##Search || (action == ##SearchFor && second == Envelope))) "~You don't have to search me, Inspector. This is a personal letter from a friend of mine and I'm definitely not going to give it to you.~ She turns away."; ], orders [; Give: if (noun == Envelope && second == player && Envelope in self) { "~I'm certainly not going to give you any personal things that aren't related in any way to the reason why you're here.~"; } Open: if (noun == Envelope && Envelope in self) { if (Envelope has general) "~You seem to have taken care of that already.~"; "~I believe there are laws protecting the privacy of mail. I will not open the envelope for you or anyone else.~"; } ], life [; Ask: switch(second) { Suicide: print_ret (string) AllIKnow; Murder: "~That's odd that you should say murder. Surely you don't suspect foul play, Inspector. My husband was devoted to his business, and its decline led him to take his life. The whole affair is tragic enough without your melodramatic insinuations.~"; Mr_Robner: "~I loved my husband, no matter what you may think. I am very sorry to have lost him.~ The speech is almost a set piece, and not too convincing."; George: CheckWhisper(self, George); "~A child. He may be a man in age, but he still hasn't really grown up. He'll find himself someday, but in the meantime he can be a trial. I guess Marshall and I were too lenient. We probably still are, but he is our son, after all. We can't throw him out on the street.~"; Mr_Baxter: "~Baxter has been my husband's partner for a long time, but they're not close friends. Baxter has always had the head for making money, and Marshall had the creative spark for new products. The two of them were perfect for each other in the early days. Of course, things haven't been going well lately. I guess none of that matters much now.~"; Mrs_Rourke: "~She's an excellent housekeeper and sometimes even helps with the cooking. For all her good qualities, though, she's too much of a snoop and a gossip. She tries to keep track of everyone around here. It's unnerving sometimes. But, as servants go these days, she's quite extraordinary.~"; Ms_Dunbar: CheckWhisper(self, Ms_Dunbar); "~I've always thought she was a bit too smug in her relationships around here. A bit above herself, if you see my meaning. After all, she's really just a glorified secretary. She acts as though she's part of the family, and she does get along well with almost everyone here. I swear, though, Marshall spent more time with her than me, lately. Um...not that I'm trying to imply that anything went on between them. Quite the contrary.~"; Mr_McNabb: "~I don't pay much attention to him. He's worked out well; the grounds are in excellent condition. You must take a look at his roses while you're here. They're really spectacular.~"; Steven: if (self.letter_state == 1) { if(self.phonecall_state == 1) "~I might as well tell you. Steven and I were lovers and we were going to be married if I could divorce Marshall. I asked Marshall about it, but he became angry and refused. I didn't know what to do. Don't look at me that way. I had nothing to do with my husband's death. Driving him to it with talk of divorce? You didn't know Marshall, that's for sure! I should've told the police earlier, I suppose, but it's really none of your business.~"; else "~Steven is a close personal friend. We have known each other for many years, and I visit his home frequently. Marshall knew of our friendship and didn't begrudge it in the slightest. My husband and I had a very trusting relationship. You may find the idea of trust difficult to understand, I suppose.~"; } "~I don't know who you mean. I have no friend named Steven.~"; Allergone: "~I have some allergies, Inspector. Simply dreadful in the fall and spring. That's what the Allergone is for. I don't use them much this time of year, though.~"; Sneezo: "~Sneezo is a wonderful cold remedy. Whenever I get a cold, I just take a few, and I usually feel much better before long.~"; Present_Will: if (Present_Will has general) "~It's what I expected, really.~"; "~Marshall takes care of that sort of thing. The will, I suppose, leaves the estate to George and me, but I can't be sure.~"; New_Will: if (New_Will hasnt general) "~If there is a new will, I certainly don't know where it is.~"; "~What do you know? Marshall changed the will, after all. Where did you ever find this? What? George was trying to destroy it? I'm shocked. You don't think George had anything to do...~ She stops short."; Focus: "~Oh, you mean the ~scandal~? Focus Corporation was a subsidiary of Robner Corp. some years ago. There was a big to-do about misuse of funds or some such thing, but Marshall kept it pretty quiet. He told me that the people responsible were forced out of the company, but that charges weren't pressed to avoid bad publicity. I didn't realize anyone remembered that.~"; Safe: "~I don't know of a safe in the house, although it's perfectly believable that Marshall has one hidden somewhere. It would appeal to his childish side, I think.~"; Hidden_Closet: if(Hidden_Closet has visited) "~I'm quite shocked about it. I really had no idea!~"; "~I don't know what you're talking about, Inspector. I know of no such closet.~"; Phonecall: if(self.letter_state == 1 && self.phonecall_state == 1) "~I guess you know it was Steven. I admit we were lovers, and we planned to marry if I could get a divorce from Marshall. He refused to consider it, the divorce I mean, even though he had no time for me anymore. He was married to the company, and he refused to see my side of things. Steven was suggesting that now we could marry. I told him I thought the timing was poor, or at least I would have if you hadn't eavesdropped.~"; else if (self.phonecall_state == 1) "~I was talking to a good friend of mine. We were discussing some plans we made; of course they had to be changed, under the circumstances. They are none of your business. They don't concern my husband's suicide at all, I assure you.~"; "~It was just a friend of mine, offering his condolences.~"; } print_ret (string) self.DontKnow; Show: switch(noun) { Envelope, Letter: if (Envelope has general) { self.letter_state = 1; print "~You have certainly stooped to a new low, Inspector. Opening people's mail. I think there are laws against that sort of thing, but I guess you wouldn't know."; if (self.phonecall_state == 1) " I suppose you also know that Steven is my lover and that we were planning to marry. Don't look so melodramatic: I didn't kill my husband. You think my talk of divorce may have driven him to it? Why don't you leave me alone!~"; " In any case, what of it? It's from a friend of mine, an old friend from school. We get together now and then to discuss old times. I don't suppose there is a law against that?~"; } move Envelope to Mrs_Robner; give Envelope concealed; "~Thank you, Inspector. The envelope is for me.~ She takes the envelope from you and examines it briefly."; Lab_Report: "Mrs. Robner reads the report with shocked disbelief. ~I...I don't know what to say. Who would want to kill Marshall? He was so well liked and...~ She breaks down, sobbing."; New_Will: "Mrs. Robner reads the will. ~That's that, then,~ she says. ~I guess Marshall was pushed too far.~"; default: NotInterested(self); rtrue; } ], has female; !------------------------------------------------------------------------------ NPC Ms_Dunbar "Ms. Dunbar" Living_Room with name "Ms" "Dunbar", accused 0, DontKnow "~I'm sorry, but I can't help you with that.~", describe [; if (self.npc_move_type ~= 2 && self.npc_stopped == 0) rtrue; print (The) self, " "; if (self.accused == 1 && parent(Mr_Baxter) == parent(self) && Ticket_Stub in self) print "glances at Baxter and then at you."; else { switch(location) { Dunbar_Bedroom: print "is lying on her bed."; Living_Room: if (WillReading.time + 5 > the_time) print "is standing in the corner, looking pensive."; else print "is sitting on a sofa here."; Dunbar_Bathroom: print "is here, brushing her hair."; default: print "is here."; } } new_line; DescribeChildren(self); rtrue; ], each_turn [; if (self in Shed && Mr_Baxter notin Shed) { switch(random(6)) { 1: give tw_waiting on; "Dunbar paces around the shed nervously. If she was looking for something, she would have found it by now."; 2, 3: give tw_waiting on; "Ms. Dunbar seems to be looking around for something."; default: rfalse; } } if (parent(self) ofclass Outside && self.npc_move_type == 2 && DunbarNervous.stage > 2 && self notin Front_Path && self in location && self notin Shed) { if (self.npc_old_loc == parent(self)) { switch(random(6)) { 1: give tw_waiting on; "Ms. Dunbar eyes you nervously."; 2: give tw_waiting on; "Ms. Dunbar stares off toward the south."; 3: give tw_waiting on; "Ms. Dunbar seems to be deep in thought."; default: rfalse; } } switch(random(6)) { 1: give tw_waiting on; "Ms. Dunbar looks around as she walks and does a brief double-take when she looks in your direction. She slows down and stops."; 2: give tw_waiting on; "Ms. Dunbar, who has been looking from side to side as she goes, comes to a stop. She spins around, looking in all directions."; default: rfalse; } } rfalse; ], description "Ms. Dunbar, wearing a fashionable pants suit, is a rather attractive woman in her early thirties.", npc_arrived [r; if (DunbarNervous.stage == 3) ! If the DunbarNervous daemon is running, he'll take care of her movements rtrue; switch(r) { Dunbar_Bathroom: NPC_Schedule(self, Dunbar_Bedroom, 15+random(10)); Dunbar_Bedroom: if (the_time < 12*60) NPC_Schedule(self, Living_Room, 12*60-the_time-8+random(13)); else NPC_Schedule(self, Living_Room, 60+random(60)); Living_Room: ! She arrives in the Living Room because she's been accused by the player and is ! therefore nervous. She'll go outside to smoke a cigarette and meet with Baxter ! in the Shed as soon as the player has left the room if (self.accused == 1) { StartDaemon(DunbarNervous); NPC_StopSchedule(Mr_Baxter); StartDaemon(BaxterNervous); rfalse; } NPC_Schedule(self, Dunbar_Bedroom, 115+random(45)); Front_Path: if (DunbarNervous.stage == 1) DunbarNervous.stage = 2; Shed: if (location == Behind_The_Shed) "You hear soft footsteps approaching. Someone has entered the shed!"; } rfalse; ], npc_walkoff [i; DescribeWalkOff(self, i); ], npc_walkon [; DescribeWalkOn(self); ], before [; Hello, Goodbye: "Ms. Dunbar nods at you."; Accuse: if (Lab_Report has dunbar_shown) { if (self.accused == 0) { self.accused = 1; NPC_StopSchedule(self); ! If Dunbar is not in the Living Room, but Baxter is still there, she'll go there ! first to signal him to come to the shed. if (self notin Living_Room && Mr_Baxter in Living_Room) { NPC_StopSchedule(Mr_Baxter); ! Baxter won't leave anymore NPC_Path(self, Living_Room); } ! If they're both in the Living Room, she'll get nervous and wait for the player ! to leave the Living Room before she'll go outside to smoke a cigarette else if (self in Living_Room && Mr_Baxter in Living_Room) { StartDaemon(DunbarNervous); NPC_StopSchedule(Mr_Baxter); StartDaemon(BaxterNervous); } } "~No! I didn't do it! I've worked for Mr. Robner for years. What possible motive could I have?~ With that, Ms. Dunbar begins to cry and move about the room quite nervously."; } "~What?~ she cries. ~Murder?~ She regains her composure and asks, ~I thought he committed suicide, with his medicine.~"; ], life [; Ask: switch(second) { Suicide: print_ret (string) AllIKnow; Murder: "Ms. Dunbar turns toward you, looking quite confused. ~Murder? But...but how do you know it was murder? I'm sure...~ She stops short, looking frightened."; Mrs_Robner: "~She's a lovely person. She and Marshall were always an odd couple: he was so quiet and reserved, and she's so lively and sociable. She's changed a lot over the last few years. She used to enjoy her life here, but lately she's been restless and irritable, and now with Marshall's death, I'm worried about what may become of her.~"; Mrs_Rourke: "~Mrs. Rourke is a very good servant. Always helpful, and always nearby when needed.~"; Mr_Robner: "Ms. Dunbar looks down at the ground and sniffles softly. ~I've known him for years. He's been tremendously nervous and depressed lately about business. I don't think all was well in his personal life either. George has always been a problem for him. He even mentioned suicide once, although I never took it seriously. It shows you can never tell.~ She wipes her eyes with her hands."; Mr_Baxter: "~Mr. Baxter? I see him often when he comes here on business, but I don't really know him that well. We keep to business when he comes around, and I hardly ever talk with him otherwise. He is, of course, an excellent executive, and poor Mr. Robner had every confidence in him.~"; Mr_Coates: "~Mr. Coates has been taking care of Marshall's legal matters for years. He always would say how glad he was to have an attorney of his qualities.~"; LoBlo: if (Lab_Report has dunbar_shown) "Ms. Dunbar is taken aback. ~I...I don't really know what to say. I take the tablets for my blood pressure. I have for a few months now. I know what you're thinking. I can't understand. Someone must have taken my pills and poisoned Mr. Robner. That's it. It's probably George. He knew about my pills. He's always snooping around. He used to talk about how half the money would be his someday.~"; "Ms. Dunbar seems a bit surprised. ~You found those in my bathroom, didn't you? I've been taking them for months for my blood pressure. Are they important?~ she asks."; George: "~Nobody likes George much. He's always alone when he's here, and that's only when he can't get more money to waste. I think he's just been waiting for the day when his father's money would be his. I can't say I miss him when he's not here: A thoroughly obnoxious child.~"; Mr_McNabb: "~He seems nice, if you can talk to him. You usually can't, really.~ She laughs briefly. ~Don't ever disturb his roses, or you'll learn the meaning of temper.~ She giggles again."; New_Will: if (WillReading.time > 0) "~As far as I know, there was no new will written, although Marshall did threaten to disinherit George. I guess he could have written one without my knowledge. I'm not always with him, you know.~"; "~I don't know anything about it. I suppose Marshall could have written a new will, but I probably would have seen signs of it around the library.~"; Present_Will: "~I really don't know too much about Marshall's personal business.~"; Focus: "~Focus? There was once a subsidiary of Robner Corp. with that name. I can't recall much about it, though.~"; Safe: "~A safe? I don't think there's one in the house, although there's one at the office.~"; } print_ret (string) self.DontKnow; Show: switch(noun) { New_Will: "Ms. Dunbar reads the will carefully, nodding slowly. ~I guess I'm not surprised that Marshall disinherited George. He's been asking for it.~"; LoBlo: "She glances at the pills. ~They're my pills. You must have taken them from my bathroom. Well, what am I supposed to say?~ She looks away."; Lab_Report: give Lab_Report dunbar_shown; "She seems stunned but recovers quickly. ~He didn't commit suicide, then?~ she says. ~But LoBlo, that's a pill I take for my blood pressure.~ She pauses. ~I can tell what you're thinking, but I didn't, couldn't have done it. Why should I? Someone must have taken them, maybe George. He knew I used them.~"; Ticket_Stub: if (Ticket_Stub has baxter_shown && (Ticket_Stub has general || Mr_Baxter in parent(self))) { give Ticket_Stub general; "~Why, it's just as Mr. Baxter said.~"; } give Ticket_Stub dunbar_shown; if (Mr_Baxter in parent(self)) give Ticket_Stub general; "~Oh, I...well, I guess I should tell you. You see, Mr. Baxter and I, we go together to concerts, only occasionally, you understand. We went that night, the night Marshall died. Then he took me home and that's it. I should have said something before, but I just didn't think it was important, and, well, I didn't think that the others should know we were seeing each other socially. Our... nobody knows about it, you know. Please don't say anything!~"; } NotInterested(self); rtrue; ], has female; !------------------------------------------------------------------------------ NPC George "George" George_Bedroom with name "George" "Robner" "your" "son", DontKnow "~I haven't a clue.~", describe [; if (self.npc_move_type ~= 2 && self.npc_stopped == 0) rtrue; print (The) self, " "; switch(location) { George_Bedroom: if (GeorgeNervous.active == 1) print "is here"; else if (Tapes.active ~= 0 || Records.active ~= 0) { print "is lying on his bed, listening intently to a "; Describe_Music(); } else print "is sitting on his bed, deep in thought"; print "."; Living_Room: if(Calendar hasnt george_shown && WillReading.time + 5 > the_time) print "is staring contentedly out the bay window."; else print "is here, pacing around the room."; Kitchen: print "is here, preparing a snack."; Dining_Room: print "is sitting at the table, eating some red herrings."; North_Lawn: print "is here, staring out over the lake."; default: print "is here."; } new_line; DescribeChildren(self); rtrue; ], description "George is a young man in his mid-twenties. He is poorly dressed in that each item he is wearing clashes with the others. His attire is of the highest quality, however. He is wearing various pieces of jewelry.", before [; Hello, Goodbye: "George looks up and grunts disinterestedly."; Accuse: "George sneers at you. ~What an ass! Go on, try to prove it!~"; Search, SearchFor: if (GeorgeNervous.active > 0) "George points accusingly at you. ~Don't come near me! I'm getting sick and tired of your accusing tone. Get lost!~"; "~Buzz off! Don't come back until you get a search warrant!~ He chuckles in contempt."; ], life [; Show: switch(noun) { Calendar: if (Calendar.date == 8) { give Calendar george_shown; if(WillReading.time == 0) "George tilts his head in thought (or perhaps surprise) but recovers quickly. ~All I know is that Coates is my father's personal attorney.~"; else { GeorgeNervous.active = 1; StartDaemon(GeorgeNervous); print "~I...uh...I don't really know what to say. I guess that Dad...but there is no other... I can't help you... sorry.~ George seems to be quite agitated. "; if (self in George_Bedroom) { GeorgeNervous.waitleave = -1; ! This suppresses "I have some business..." being printed instantly. "George paces around. ~I just remembered,~ he says, ~I've got some personal business to attend to. Would you mind?~ He shows you to the door."; } NPC_Path(self, George_Bedroom); "~I'm...I really have some business to do in my room. I'll speak to you later,~ George says. He starts off toward his room."; } } Lab_Report: "George scans the report. ~Killed, eh? I wonder who might have wanted...~ He cocks his head in thought. ~I'm sorry, Inspector, I really should act a bit better with you. I thought you were just snooping about, digging up dirt about the family. I'm not sure... I can't believe Mom would have anything to do with it, although...Baxter, now there's a worm for you. He'd do anything, maybe even murder, to get ahead. I just don't know.~"; Letter: move Letter to location; give Letter george_shown; "George reads the letter quickly. ~Pompous ass! What does he know about it?~ He pauses. ~I thought Mom was having an affair. How nice for the lovebirds that Dad is dead! They can finish their honeymoon plans without worrying. It's perfect!~ With a bitter laugh, he throws the letter to the ground."; } NotInterested(self); rtrue; Ask: switch(second) { Suicide: print_ret (string) AllIKnow; Murder: "~My father killed himself, as everyone knows. Please leave me alone.~"; Steven: CheckWhisper(self, Mrs_Robner); if (Letter has george_shown) "~He's a little worm who's been coming by lately. He's one of those fancy ski-instructor types, if you know what I mean. From what I've seen, it wouldn't surprise me if he and Mom are having an affair.~"; else "~Steven? Oh, you must mean the guy who comes around for Mom now and then. I don't know much about him. Dresses a bit above himself, I'll say that much.~"; Merger: "~I've heard talk of a merger between Dad's company and another one, but I don't think it's happened yet. Dad would be furious if it did, though. I can tell you that!~"; Hidden_Closet: if(Hidden_Closet has visited) "~What of it? Dad's safe is there. I don't think anyone knows about it except Dad and me.~"; "~Hidden closet, you say? Hmm. I think I'd know if there was one, but there isn't!~"; Mr_Baxter: "~I don't know much about him, really. With Baxter, it's always business, and he's not here much except to discuss business with Dad. You might ask Ms. Dunbar about him, though. She handled lots of Dad's business matters herself, so they work together a lot. They probably know each other pretty well.~"; Ms_Dunbar: "~She's been here for about ten years, I guess. She knows a lot about Dad's business, and he lets her take care of a lot of stuff by herself. Other than that, I can't say. We don't get in each other's way. I think she's heard Dad lecture me too often.~"; Mrs_Robner: "~She's OK. Not as stuck up as Dad about money. We've always gotten along pretty well. I think she understands me better than Dad ever did.~"; Safe: if (GeorgeNewWill.stage == 8 or 9) "~Let's not go into it, ok? You caught me looking for the will. Well, what of it? I didn't kill Dad, if that's what you're thinking. Leave me alone!~"; else if (GeorgeNewWill.stage == 7) "~You mean my father's safe? Yeah, if he brings important papers home he puts them in there. He keeps most important stuff at the office at the bank. You really startled me in there. I thought I might be able to get it open. Dad always acted like it was a big secret, something out of a spy story. Anyway, it turns out I don't remember the combination. It was a long time ago.~"; else if (GeorgeNervous.active > 0 || GeorgeNewWill.stage > 0) "George turns toward you with rage in his eyes. ~I don't know anything about any damn safe! Now leave me alone or I'll have you kicked out of here!~ He turns away."; "George looks briefly toward the ceiling, as if recalling something. ~Oh, I'm sorry. A safe? No, I don't know about any safe...except at the office, that is. I think there's one there.~"; Mr_McNabb: CheckWhisper(self, Mr_McNabb); "~McNabb, that old bore? Always talking about the damn roses and weeds. Don't ask him about them, unless you have all day.~"; Mrs_Rourke: CheckWhisper(self, Mrs_Rourke); "~She's nice but awfully nosy. She acts like she knows everything that goes on around here, but she doesn't know the half of it.~"; Mr_Robner: "~Like I told your detective friend yesterday, we didn't get along too well. He was always riding me, giving me a hard time.~ George gets worked up talking about it. ~Look, man. I'm not going to lie and say I loved him, right? He got what...~ He stops in mid-sentence."; Present_Will: "~I know what you know.~"; New_Will: if(WillReading.time == 0) { if (Calendar has george_shown) ! Player has shown calendar to George "~I know what you're getting at...the desk calendar. Look, I've heard nothing about a new will. Maybe the old man just wanted to change something.~"; "~Dad always threatened to write a new will, but I guess he ran out of time.~ He chuckles disturbingly."; } ! Player has (had) the new will or George is about to give it to the player if (New_Will has moved || GeorgeNewWill.stage == 8 || GeorgeNewWill.stage == 9) "~You should know what it says.~"; if (GeorgeNewWill.stage == 6) ! He has destroyed the new will already "~I don't know what you're talking about. There's no new will. Dad never wrote one! He would just threaten me when I asked for spending money.~"; if (GeorgeNervous.active > 0 || GeorgeNewWill.stage > 0) "~Look. I know the same as you. There's no new will. I'm sure of it. Dad would have rubbed my nose in it: you can be sure of that!~"; if (WillReading hasnt visited) "~Oh, yeah. You skipped out on the will reading. Anyhow, Coates says there's no new will, and he should know, right?~"; if (WillReading has visited) "~You were there when I was. Coates says there's no new will.~"; "~I don't know anything about any new will.~"; Focus: "~Focus...Focus...That name rings a bell. Something about the company, quite a while ago...what was it? I can't remember now. I don't pay much attention to business stuff: I've got better things to do.~"; } print_ret (string) self.DontKnow; ], npc_arrived [r; switch(r) { Dunbar_Bedroom: NPC_Schedule(self, Living_Room, 3+random(10)); if (location == r) "George says something like ~My God~ under his breath."; rfalse; Kitchen: NPC_Schedule(self, Dining_Room, 15+random(5)); rfalse; Dining_Room: NPC_Schedule(self, George_Bedroom, 20+random(15)); rfalse; Living_Room: if (GeorgeNervous.active == 2) ! Meaning that he came from his room { GeorgeNervous.active = 1; ! He's on the way to his room again NPC_Schedule(self, George_Bedroom, 15+random(10)); rfalse; } ! After one, he'll go back to his room after about 30 minutes if (the_time > 13*60) NPC_Schedule(self, George_bedroom, 30+random(10)); ! If George arrived at the East Lawn, he'll just stand there for about 90 minutes and then return to ! the Living Room East_Lawn: NPC_Schedule(self, Living_Room, 80+random(20)); rfalse; North_Lawn: ! If George arrived at the North Lawn, he'll throw the new will in after 1 move and wait there for ! a long time. Then he'll return to his room. StopDaemon(GeorgeNewWill); ! He isn't trying to destroy the will anymore GeorgeNewWill.stage = 6; ! The new will is gone for ever StartTimer(NewWillToLake, 1); NPC_Schedule(self, George_Bedroom, 80+random(20)); rfalse; George_Bedroom: if (location == George_Bedroom && Tapes.active == 0 && Records.active == 0 && GeorgeNervous.active == 0) { StartTimer(MusicEnds, 15+random(5)); print "George walks over to his stereo and puts on a record. He turns to you. ~I naturally assume that you would like to hear a "; Records.active = random(7); Describe_Music(); print ".~ he says, barely concealing his clear distaste for you and your profession.^"; } ! If George arrives, nothing's playing and he isn't nervous, he'll ! play a record with a 2/3rd probability else if (Tapes.active == 0 && Records.active == 0 && GeorgeNervous.active == 0 && random(3) ~= 1) { StartTimer(MusicEnds, 15+random(5)); Records.active = random(7); } if (GeorgeNewWill.stage == 6 or 7 or 9) ! He has either destroyed the new will or the player has caught him { NPC_Schedule(self, Living_Room, 20+random(20)); rfalse; } if (GeorgeNervous.active == 1) { if (location == George_Bedroom) rfalse; give George_Bedroom_Door ~open; GeorgeNervous.delay = 3; if (location == Hallway_2 or End_Of_Hallway) "You hear George's door close."; else if (location == Hallway_3) "George slams the bedroom door in your face."; rfalse; } if (the_time < 12*60) { NPC_Schedule(self, Living_Room, 12*60-the_time-5-random(20)); rfalse; } } ], npc_walkoff [i; if (GeorgeNervous.active == 1) DontFollow(); DescribeWalkOff(self, i); ], npc_walkon [; DescribeWalkOn(self); ]; !------------------------------------------------------------------------------ NPC Mr_Baxter "Mr. Baxter" with name "Mr" "Baxter", seen_escape 0, ! Has the player seen Baxter escape from the scene of the Dunbar murder? DontKnow "~I can't help you there.~", add_to_scope [x; objectloop (x in self) if (x hasnt concealed) PlaceInScope(x); if (Blue_Pen in self) if ((action_to_be == ##Give && actor == self) || (action_to_be == ##AskFor && noun == self)) PlaceInScope(Blue_Pen); ], describe [; if (self.npc_move_type ~= 2 && self.npc_stopped == 0) rtrue; print (The) self, " "; switch(location) { Living_Room: if (WillReading.time + 5 > the_time) "is offering his sympathies to Mrs. Robner."; else if (Book in self) { ! This avoids the book being described twice give Book concealed; print "is sitting here reading a book."; } else print "is sitting quietly here."; default: print "is here."; } new_line; DescribeChildren(self); if (Book in self) give Book ~concealed; rtrue; ], description [; if (KillDunbar.stage >= 4) { if (the_time - Dunbar_Body.deathtime < 20) "Baxter seems out of breath. His hair is disheveled and his hands are somewhat soiled."; "Mr. Baxter has recovered his composure and looks calm. His hair is a bit disheveled and his hands are dirty."; } "Baxter is an immaculately dressed middle-aged man with rugged good looks."; ], each_turn [; if (parent(self) ofclass Outside && self.npc_move_type == 2 && BaxterNervous.stage > 1 && self in location && self notin Shed) { if (self.npc_old_loc == parent(self)) { give tw_waiting on; if (random(3) == 1) "Baxter draws a deep breath and looks about contentedly."; "Baxter stares out over the lake."; } switch(random(6)) { 1: give tw_waiting on; "Baxter walks slowly, but with determination. He looks around often, as if he were a prospective buyer of the property. He stops now, staring up at the sky."; 2: give tw_waiting on; print "Baxter stops, bends down, and ties his shoe."; if (random (4) == 1) " As he finishes, he stands up, and stares at some distant trees."; " He stands up and stares off to the south."; default: rfalse; } } rfalse; ], orders [; Give: if (noun == Blue_Pen && Blue_Pen in self) { if (Blue_Pen has concealed) { give Blue_Pen ~concealed; "Baxter reaches instinctively into his jacket and starts to pull out a pen. He hesitates suddenly, pen in hand."; } move Blue_Pen to player; "Mr. Baxter hands you the blue pen."; } rfalse; ], before [; Hello: "Mr. Baxter returns your salutation."; Goodbye: "Mr. Baxter nods."; Search, SearchFor: "Mr. Baxter pushes you away abruptly. ~I don't know what game you're playing, Inspector, and frankly I'm not interested. You have been invited here to investigate, not molest innocent persons.~"; ], life [; Ask: switch(second) { Suicide: print_ret (string) AllIKnow; Murder: "~Murder? My dear inspector, I believe you are reading too many bad detective stories. It's clear that he committed suicide.~"; Book: "~A fascinating story, Inspector. A man is found dead behind a locked door, a clear suicide. Yet the detective seems bent on proving that a murder has occured. Rather odd, wouldn't you say?~"; Concert: "~A marvelous concert! There were works by Beethoven, Sibelius, and Ravel. I never would've guessed you were interested in serious music, Inspector.~"; Ladder: "~What ladder? You know, Inspector, your questions are becoming quite tiresome.~"; Merger: "~I didn't realize you had an interest in finance. Before Marshall died, we agreed that the only reasonable way to protect our interests was to be bought out by a larger company which could then provide us with capital for expansion. I had been talking to people at Omnidyne and we agreed in principle on the terms for such an agreement last week. I'm hopeful that we can close the deal quickly.~"; New_Will: if (WillReading.time > 0) { print "~It's fortunate for George that Marshall died when he did. It must be quite a relief to know that he'll have plenty of money.~ He chuckles softly."; if (WillReading has visited) print " ~I guess that explains his reaction at the reading.~"; new_line; rtrue; } "~I don't know much about the family's affairs. Marshall threatened to make a new will, but it certainly appears that he never did.~"; Focus: if (Pad has baxter_shown && Stack_Of_Papers has baxter_shown) "~I understand the note no more than you do.~ He turns away."; else if (Stack_Of_Papers has baxter_shown) "~I told you already. There was no legal wrongdoing, only some reporters trying to stir up a fuss.~ He appears quite nervous."; "There is a flicker of surprise on Baxter's face. ~I'm not sure what you mean. Focus Corporation has been a subsidiary of Robner Corp. for some years. I fail to see its import.~"; George: CheckWhisper(self, George); "~I've known the boy for some time, and believe me, he's no good. He's wasted more money this year than you've probably earned. His father reprimanded him frequently, as you know. George even threatened his father from time to time.~"; Ms_Dunbar: "~Ms. Dunbar is an efficient and tireless worker. She has been of tremendous help to Marshall and has been working quite hard for him lately. She had a great deal of respect for him, that's clear. She has a keen mind and is an exceptional strategic planner for the corporation.~"; Mrs_Robner: "~Leslie is a fine woman from a distinguished family. She was much more outgoing than Marshall, but she seems to have become accustomed to the quiet life here. I am quite grieved for her.~"; Mr_McNabb, Mrs_Rourke: "~I don't know much about ", (name) second, ".~"; Present_Will: "~I really don't know anything about the old will.~"; Mr_Robner: "~Marshall was a truly great man... a brilliant manager; he started the corporation single-handedly about 25 years ago and is mostly responsible for its reputation. I owe him a great deal. He was also a great philanthropist and got the corporation involved in many charitable works. I am not given to shows of emotion, Inspector, but I will miss him greatly.~"; } print_ret (string) self.DontKnow; Show: switch(noun) { Pad: if (Pad has general) { give Pad baxter_shown; "He reads it carefully against the light, then speaks: ~I really don't know what to make of this. Marshall seems to be insisting that I do something. I'm afraid we will never know, since I never got the note.~"; } Lab_Report: "Baxter studies the report carefully. ~This is quite peculiar. It appears that Marshall was murdered. I wonder... I would have a word with George if I were you, Inspector.~"; Stack_Of_Papers: give Stack_Of_Papers baxter_shown; print "He reads slowly and leafs through the pages. ~I'm afraid I haven't been entirely candid with you. There was some trouble a few years ago with Focus Corp. because of some, let us say, irresponsible dealings on my part. Marshall agreed to cover up my involvement to save the company any bad publicity."; if(Pad has baxter_shown) print " I can't understand why he would be insisting that I do this or that, though, as it says on that note you showed me. He must have changed his mind, since I never received the note."; "~"; Letter: "~Very interesting, Inspector, but I assure you that this fellow is quite off base about the business. Marshall and I were in complete agreement when it came to those matters. I can't imagine where he got that idea.~"; Ticket_Stub: if (Ticket_Stub has dunbar_shown && (Ticket_Stub has general || Ms_Dunbar in parent(self))) { give Ticket_Stub general; "~My dear Inspector, it is just as Ms. Dunbar told you.~"; } give Ticket_Stub baxter_shown; if (Ms_Dunbar in parent(self)) give Ticket_Stub general; "~Ah, that must be Ms. Dunbar's ticket stub. I should have told you earlier. Ms. Dunbar was with me at the concert on the night that Marshall killed himself. She became ill at intermission and hired a car to take her back home. You see, Inspector, I know that Ms. Dunbar appreciates classical music, so I occasionally ask her along to my subscription series. I really should have told the other detective, but I didn't think it mattered.~"; } print "~I can't understand why you are showing this to me. Have you nothing better to do than "; print (string) random ("show me useless items", "pick up every item in the house and show it to me"); "?~"; ], npc_arrived [r i; if (BaxterNervous.stage == 2) ! If the BaxterNervous daemon is running, he'll take care of his movements rtrue; switch(r) { Dunbar_Bedroom: NPC_Schedule(self, Living_Room, 3+random(3)); if (location == r) "Baxter looks at the body of Ms. Dunbar, lying on the floor, and falls to his knees. He starts to sob. ~I knew she would do this,~ he says, sobbing, ~but I couldn't stop her. She killed Marshall. She just told me a few minutes ago. She said that he was going to fire her, just like that, after all of these years. She was so hysterical, I couldn't understand everything she said, something about having stolen some money. I don't know.~ With that, he breaks down again."; rfalse; East_Lawn: if (BaxterNervous.stage == 1) BaxterNervous.stage = 2; Living_Room: if (TestScope(Book, self)) move Book to self; i = 16*60-the_time-5+random(10); if (i < 10) i = 10; NPC_Schedule(self, South_Lawn, i); South_Lawn: NPC_Move(self, 0); self.npc_old_loc = 0; if (location == South_Lawn) "A limousine comes up the drive and picks up Mr. Baxter."; else if (location == Front_Path or West_Of_Front_Door or East_Of_Front_Door) "To the south, you observe a limousine picking up Mr. Baxter."; rfalse; Shed: if (location == Behind_The_Shed) "The sound of quick footsteps precedes someone into the shed. You can make out two voices in rapid conversation. The voices are muffled, however, and cannot be made out."; } ], npc_walkoff [i; DescribeWalkOff(self, i); ], npc_walkon [; DescribeWalkOn(self); ], npc_before_action [; ! He'll leave the book behind if he goes out of the living room if (self in Living_Room && Book in self) move Book to Living_Room_Table; ! If Baxter wants to enter the shed and he can see the player, he ! won't. He'll resume wandering around in the garden instead. if (self in East_Lawn && self.npc_target == Shed) { if (location ofclass Outside && location ~= West_Lawn or West_Side_Of_House or Behind_The_Shed or Garden_Path or Among_The_Roses) { Shed_Episode.stage = 0; BaxterNervous.stage = 2; StartDaemon(BaxterNervous); return 2; } } rfalse; ]; !------------------------------------------------------------------------------ NPC Mrs_Rourke "Mrs. Rourke" Kitchen with name "Mrs" "Rourke", DontKnow "~I can't help you there.~", describe [; if (self.npc_move_type ~= 2 && self.npc_stopped == 0) rtrue; print (The) self, " "; switch(location) { Kitchen: print "is here, cleaning the kitchen."; Dining_Room: print "is cleaning the table here."; Living_Room: print "is dusting the room."; Rourke_Room: print "is resting here."; default: print "is here, tidying up."; } new_line; DescribeChildren(self); rtrue; ], description "Mrs. Rourke is a short woman, more than a bit overweight. She is wearing a maid's outfit.", before [; Hello, Goodbye: print "Mrs. Rourke looks up "; if (location ~= Rourke_Room) print "from her work "; "and nods."; ], life [; Ask: switch(second) { Suicide: print_ret (string) AllIKnow; Murder: "~Was it a murder, then?~ She bounces with excitement. ~In the book I've been reading, the jealous wife did it, but I don't know about this. A whole batch of suspects, this group here. What do you know? A murder. Here!~ Her enjoyment is barely concealed."; Envelope: if (Envelope in self) "~It's a letter that just arrived for Mrs. Robner. I was going to bring it to her.~"; Mr_Baxter: CheckWhisper (self, Mr_Baxter); "~Baxter! Hmmmph. Stuffiest person I ever met! I don't mind telling you I've never liked him much. So serious, businesslike. Thinks he's hot stuff, I imagine. I really shouldn't be telling you this, though, I suppose. ~Rourke,~ they tell me, ~stop your gossiping.~ Not that I'm a gossip, mind you, but I do have my opinions.~"; George: CheckWhisper(self, George); "~George is something, I tell you. The black sheep of the family, is what I'd say. Never met nobody with less respect for money. You'd think it grew on trees; not that it don't around here. Well, there I go, shooting off my mouth again.~"; Ms_Dunbar: CheckWhisper(self, Ms_Dunbar); "~Ms. Dunbar is nice; the best of the lot, I think. She's always been real friendly to me, and helps out when I have a problem. Mr. Robner, he really liked her too. I don't think Mrs. Robner did, though. He's been so busy lately with the business and Ms. Dunbar that I don't think the Mrs. hardly saw him much. Kind of jealous, maybe, of the two of them, I mean.~"; Mrs_Robner: CheckWhisper(self, Mrs_Robner); "~Now she's a strange sort. Real lively when she moved here, but I don't think she ever liked the life here. Her people are from Boston, one of those old families, and she never got used to Mr. Robner's ways. She goes out a lot, and sometimes she doesn't even come back at night. Not that I'm spying on her. But I know about these things. She has callers here, a number of men. One in particular comes more than others. A widower, I think, a real live wire. Not what it's any of my business, but I think someone with a sharp tongue could do her a lot of damage if she doesn't watch herself.~"; Steven: CheckWhisper(self, Mrs_Robner); "~Ah, that's it! He's the one who's been coming around, taking Mrs. Robner out. I don't like the look of it. I mean, I think it looks kind of funny, what with she's a married woman. Mr. Robner takes no notice, of course, always busy. Oh, well. I shouldn't be telling you this. Now that Mr. Robner's dead, I don't suppose it matters, but what do you think people were saying! I tell you, gossip is fierce around here!~"; Mr_McNabb: "~Oh, don't let him frighten you. Let him alone and don't bother his roses. Gets positively livid about that. Got the green thumb, that's for sure.~"; Mr_Robner: "~A fine man, but his head was always in the clouds. Just the opposite of Mrs. Robner. Her feet were always on the ground. He's been so worried, it makes me sick. I don't understand these business things, but he said something about them taking his business away from him just two nights ago. I guess the pressure was too much. He was a fine man, full of good works, though charity does begin at home, as the saying goes. Not that I have anything to complain about. He always treated me right.~"; } print_ret (string) self.DontKnow; Show: if (noun == Lab_Report) "~Well, if that don't beat all! A murder here, right under my nose! You've got your work cut out for you, Inspector, all right. There's some pretty strange people around here, and I wouldn't put it past hardly any of 'em to do it. What do you know!~"; "Mrs. Rourke seems uninterested in it."; ], npc_arrived [r t; if (r == Hallway_1) ! She went there because she heard the pistol shot { NPC_Move(self, Top_Of_Stairs, ##Go, e_obj); NPC_Schedule(self, Rourke_Room, 10+random(15)); if (location == Dunbar_Bedroom) "Mrs. Rourke peeks in the door and looks sick. ~I'm leaving this house,~ she says, and pops out again."; rfalse; } ! After noon, Rourke will move randomly if (the_time > 12*60) { do { t = random (Kitchen, Kitchen, Dining_Room, Living_Room, Rourke_Room, Top_Of_Stairs); } until (t ~= r); NPC_Schedule(self, t, 40+random(30)); rfalse; } if(Envelope in self && Mrs_Robner notin r) { NPC_Path(self, parent(Mrs_Robner)); rfalse; } else if (Envelope in self && Mrs_Robner in r) { move Envelope to Mrs_Robner; give Envelope concealed; NPC_Path(self, Rourke_Room); if (location == r) "Mrs. Rourke hands an envelope to Mrs. Robner. Mrs. Robner examines the envelope briefly, then puts it in her pocket."; rfalse; } switch(r) { Dining_Room: NPC_Schedule(self, Foyer, Mailman.time_left+50+random(10)); rfalse; Foyer: if (Envelope in Marble_Table or Foyer) { move Envelope to self; NPC_Path(self, parent(Mrs_Robner)); if (location == r) "Mrs. Rourke takes the envelope and starts to walk away."; } else NPC_Path(self, Rourke_Room); rfalse; Rourke_Room: ! She'll go to the Living Room at 20 past twelve NPC_Schedule(self, Living_Room, 12*60-the_time+20); rfalse; } ], npc_walkoff [i; DescribeWalkOff(self, i); ], npc_walkon [; DescribeWalkOn(self); ], has female; !------------------------------------------------------------------------------ NPC Mr_Coates "Mr. Coates" with name "Mr" "Coates" "attorney" "lawyer", DontKnow "~I am sorry, but I can't help you there.~", describe [; if (self.npc_move_type ~= 2 && self.npc_stopped == 0) rtrue; print "Mr. Coates is here.^"; DescribeChildren(self); rtrue; ], description "Mr. Coates is a rather homely man of advancing years.", life [; Ask: if (second == New_Will or Present_Will or Focus or Merger) "~I am not at liberty to discuss Mr. Robner's legal matters. That is privileged information between attorney and client.~"; print_ret (string) self.DontKnow; Show: NotInterested(self); rtrue; ], before [; CallUp: if (location ~= Library or Living_Room or Master_Bedroom) rfalse; if (self in location) rfalse; if (Mrs_Robner.go_phone == 3) rfalse; if(DaemonRunning(PhoneRing)) rfalse; print (name) self; if (the_time > 11*60+55) "'s office phone rings. His secretary answers and informs you that he will be out for the rest of the day."; if (the_time > 11*60+30) "'s secretary answers and informs you that Mr. Coates is on his way to the Robner estate."; "'s secretary informs you that Mr. Coates is in a very important meeting and can't be disturbed. She reminds you that he will be at the Robner estate before noon."; ], npc_arrived [r; switch (r) { Living_Room: StartTimer(WillReading, 0); if (location == Living_Room) "Mr. Coates shakes your hand. ~I'm glad you're here, Inspector. We'll begin the reading soon.~"; rfalse; South_Lawn: NPC_Move(self, 0); if(location == South_Lawn or East_Of_Front_Door or West_Of_Front_Door or Front_Path) "A car pulls up the drive. Coates enters the vehicle, motions to the driver, and the car starts up and leaves the grounds."; rfalse; } rtrue; ], npc_walkoff [i; DescribeWalkOff(self, i); ], npc_walkon [; DescribeWalkOn(self); ]; !------------------------------------------------------------------------------ [ DescribeMcNabbWork; switch(random(7)) { 1: return "mowing the grass"; 2: return "picking weeds"; 3: return "examining his work"; 4: return "wiping his brow"; 5: return "pruning stems"; 6: return "planting seeds"; 7: return "cutting fresh flowers"; } ]; !------------------------------------------------------------------------------ NPC Mr_McNabb "Mr. McNabb" North_Lawn with angry 0, ! Is McNabb angry since the player walked into the roses? holes_found 0, ! Has McNabb found the holes? show_holes 0, ! 1 = McNabb told the player about the holes / 2 = McNabb is on his way to show the holes ! 3 = he has done so (or tried to) DontKnow "~I dinna know nothin' aboot that.~", describe [; if (self.npc_move_type ~= 2 && self.npc_stopped == 0) rtrue; print (The) self, " is here"; if (self notin Among_The_Roses) print ", ", (string) DescribeMcNabbWork(); print ". "; if(self.holes_found == 1) ! He is angry about the holes print "He seems quite worked up and is talking aloud to himself."; else if (self.angry == 1) print "He seems pretty angry about something."; new_line; DescribeChildren(self); rtrue; ], description "Mr. McNabb is an elderly Scottish man with a deeply lined face. He is wearing overalls.", name "gardener" "Mr" "McNabb", orders [; Show: if (noun ~= Holes || second ~= player) rfalse; if (self.holes_found == 0) "~I don't know what you're-a talkin' aboot.~"; else if (self.show_holes == 3 && Holes notin Among_The_Roses) "~I don't think I remember where it was. Now go away,~ he says. He looks a bit annoyed at you, probably for asking him before and then running off."; else if (self.show_holes == 3) "~I've already shown you plenty. Now, git!~"; if (self in Among_The_Roses) { if (ShowHoles.dest == 0) { ShowHoles.dest = Among_The_Roses.McNabb_dest; ShowHoles.time_save = Among_The_Roses.McNabb_time_save; } if (ShowHoles.from == 0) ShowHoles.from = Among_The_Roses.McNabb_from; NPC_StopSchedule(self); ShowHoles.time_out(); rtrue; } self.show_holes = 2; ShowHoles.time_save = self.npc_time_left; ShowHoles.from = parent(self); ShowHoles.dest = self.npc_dest; NPC_Path(self, Among_The_Roses); "~Follow me!~ he says, and starts walking toward the roses."; ], before [; Hello, Goodbye: if (self.angry == 1) "McNabb grunts briefly in your direction."; if (self.holes_found == 1) "He answers absently and starts to mumble quietly about the roses."; print "He replies with a brief nod, and then starts mumbling to himself about the "; print (string) random ("weather", "rose garden", "fruit trees", "intricacies of weeding", "snootiness of city slickers"); "."; MyListen: if (self.holes_found == 1) "You can't make out everything, but he seems to be complaining about weeks of work on the roses ruined by someone stomping around in the garden. There are references to elephants and holes. When he's worked up, as now, he doesn't always make much sense."; print "He seems to be mumbling about the "; print (string) random ("weather", "rose garden", "fruit trees", "intricacies of weeding", "snootiness of city slickers"); "."; ], life [; Ask: if (self.angry ~= 0) "~I dinna give a hoot about you or your questions! Now, begone! Steppin' all o'er me roses. A crime, it is! I'll call the police is what!~ He seems pretty angry."; switch(second) { Mrs_Robner, George, Mrs_Rourke, Ms_Dunbar, Mr_Baxter: "~I don't care much aboot any of them from in the house. I barely even know which is which.~ He shakes his head and continues with his work."; Ladder: "~What aboot it? I use it for cleanin' the gutters 'n prunin' the trees.~"; Mr_Robner: "~Too bad aboot Mr. Robner. He was a good man, liked to talk aboot the garden. He told me 'McNabb', he says, 'this here's the finest garden I've seen.' We'd talk for hours about planting and gardening. None of the others knows between a rose and a sunflower.~ He shakes his head sadly and continues his work."; Mr_McNabb, Lawn: "McNabb tells a long tale of woe and hardship, of days and nights sweating with the lawn mower, roller, and weed puller."; Holes: if (self.holes_found ~= 0 && self.show_holes == 0) { self.show_holes = 1; ! Indicating that McNabb told about the holes. "He tells you his story. He was tending to the roses this morning when he noticed two deep holes in the garden, with a few roses crushed nearby. He doesn't know when he'll be able to repair the damage."; } if (self.holes_found ~= 0) "~I've already told you. There's holes in my garden!~"; Roses: if (self.holes_found ~= 0) << ASK self Holes >>; "McNabb goes on for some time about the exquisite nature of the garden in general and mentions, for your benefit, some of the finer points of his gardening technique."; Weather: if (self.holes_found ~= 0) << ASK self Holes >>; "~Beautiful! What a fine day. Except for the rain Wednesday night, I ha'ent had such a fine week in a long spell. Not that I'm complainin'. You see, with my roses...~ He goes on and on about his roses."; } print_ret (string) self.DontKnow; Show: NotInterested(self); rtrue; ], npc_arrived [r t; ! If he comes back from showing the holes, we just return since daemon is still running and ! will move him some time later if(ShowHoles.from ~= 0 && r ~= Among_The_Roses) { NPC_Schedule(self, ShowHoles.dest, ShowHoles.time_save); ShowHoles.from = 0; ShowHoles.dest = 0; ShowHoles.time_save = 0; Among_The_Roses.McNabb_dest = 0; Among_The_Roses.McNabb_from = 0; Among_The_Roses.McNabb_time_save = 0; rfalse; } ! If he arrives at Among the Roses and wants to show the holes to the player, ! we start a timer to do so if (self.show_holes == 2 && r == Among_The_Roses) { StartTimer(ShowHoles, 0); rfalse; } ! If he comes back from Among the Roses, we need to restore his ! former destination if (self.npc_source == Among_The_Roses && Among_The_Roses.McNabb_dest) { NPC_Schedule(self, Among_The_Roses.McNabb_dest, Among_The_Roses.McNabb_time_save); Among_The_Roses.McNabb_dest = 0; Among_The_Roses.McNabb_from = 0; Among_The_Roses.McNabb_time_save = 0; rfalse; } NPC_StopSchedule(self); ! After 2 pm, McNabb only moves randomly if(the_time > 14*60) { do { t = random(North_Lawn, East_Lawn, West_Lawn, South_Lawn, Orchard_Path, Garden_Path); } until (t ~= r); NPC_Schedule(self, t, 10+random(90)); rfalse; } switch(r) { East_Lawn: NPC_Schedule(self, Garden_Path, 60+random(5)); Garden_Path: NPC_Schedule(self, Orchard_Path, 100+random(5)); Orchard_Path: ! Have to make sure there's no way getting up to the balconies or down from them now Among_The_Roses.u_to = 0; In_The_Orchard.u_to = 0; Library_Balcony.d_to = 0; Bedroom_Balcony.d_to = 0; move Ladder to parent(self); give Ladder moved; NPC_Schedule(self, West_Lawn, 13*60-the_time+45); if (location == parent(Ladder)) "McNabb picks up the ladder and walks away toward the orchard."; else if (Ladder in player) "McNabb comes over to you and takes the ladder. He walks off toward the orchard."; else if (self in location) "McNabb places the ladder he was carrying on the ground."; rfalse; } rfalse; ], npc_walkoff [i; DescribeWalkOff(self, i); ], npc_walkon [; DescribeWalkOn(self); ]; !------------------------------------------------------------------------------ NPC Duffy "Sergeant Duffy" with name "sergeant" "sgt" "duffy", anal, anal_for, before [; Follow: "Duffy moves too quickly for you to be following him."; Kill, Arrest: if(DuffyTimer.time_left >= 0) { print (string) DuffyBusy; " (Apart from that, he probably won't like what you're having in mind.)"; } rfalse; Find, Why: "Like a lurking grue in the dark places of the earth, Sergeant Duffy is always near the scene of a crime. If you want something analyzed, he will arrive in an instant to take the evidence to the lab. When the results are available, he rushes them back to you. If you wish to arrest someone, Duffy will be there with the handcuffs. A more dedicated civil servant cannot be found."; NPC_WaitFor: if (DuffyTimer.time_left >= 0) { do { TimePasses(); InformLibrary.End_Turn_Sequence(); DisplayStatus(); DrawStatusLine(); } until (DuffyTimer.time_left == -1); rtrue; } "You would wait quite a while, since Sergeant Duffy is always nearby, but never approaches you unless requested."; Ask: "You can't talk to Sgt. Duffy."; default: "Sgt. Duffy isn't here."; ], orders [; Analyse, Fingerprint, Arrest, Find: actor = player; << (action) noun second >>; default: "You can't give any orders to Sgt. Duffy."; ], life [; default: "Sgt. Duffy isn't here."; ], found_in [; rtrue; ], has animate proper topic concealed; !------------------------------------------------------------------------------ NPC Mr_Robner "Mr. Robner" with name "Mr" "Marshall" "Robner" "your" "father" "husband", before [; Hey: "You are, for the moment, not with him."; Follow: "Is this what they call a death wish?"; NPC_WaitFor: "That may take some time. Ghosts usually don't turn up before midnight."; Find: "He's in the morgue, no doubt."; ], has topic concealed; !------------------------------------------------------------------------------ NPC Steven "Steven" with name "Steven", before [; NPC_WaitFor: "What makes you so sure he'll come to the estate at all?"; Find: if (actor ~= player) "~I don't know.~"; "You're the detective."; ], has proper topic concealed;