!------------------------------------------------------------------------------ ! Roger Davis ! CIS 487 ! Fall 2006 !------------------------------------------------------------------------------ Constant Story "Death at Sea--A Murder Mystery"; Constant Headline "^by Roger Davis^"; !Constant DEBUG; Constant MAX_SCORE = 50; Constant TASKS_PROVIDED; Constant NUMBER_TASKS = 2; Array task_scores -> 25 8; !------------------------------------------------------------------------------ ! Global Variables !------------------------------------------------------------------------------ Global time = 17; Global day = 1; Global counter = 0; Global sgwarn = 0; Global cigquant = 18; Global murder_happened = 0; Global just_murdered = 0; Global need_relook = 0; !------------------------------------------------------------------------------ Include "parser"; Include "verblib"; [ Initialise; location = Luxury_Suite; print "^You've unpacked your tawdry clothes into furniture that's worth more than your yearly rent.^You're aboard the HMS Tortuga for her return voyage home--but alas, this will be no vacation.^Your uncle, who lived in Liverpool, lies in wait to be buried, and has left the arrangements (and hopefully a sizable inheritance) to you.^^He was rich and crazy, and stuff, and you were his favorite. (Maybe it's because you're both black sheep in the family--who knows?)^ You are sure that this trip will be horrible. HORRIBLE! You hate boats! (...er, ships?)^^^"; ! Activate the time monitor, which tracks all things time-triggered... ! ...and the people monitor, which takes care of people moving. TMon.activate(); PMon.activate(); ! Give the player some stuff to start the game... move Smokes to player; move Lighter to player; move Watch to player; move Player_Key to player; ! Put the people in their opening locations... move Howell to Game_Area; move Maureen to Port_Hall_Aft; move Payne to Rescue_Port; move Lorraine to SuiteF; move Brock to Starboard_Hall_Aft; move Jacob to SuiteG; move Emily to SuiteC; move Sarah to SuiteC; move Captain to Bow; move Purser to Poop_Deck; move Cook to Galley; move Charm to PingPong; move Newspaper to SuiteA; move Arsenic to Suitcase; move Chit to Garbage; ]; !------------------------------------------------------------------------------ ! Take care of any modified verbs and parser stuff... include "grammar"; ! Declare usage for new/modified verbs... Verb 'smoke' * noun -> Smoke; Verb 'time' * -> Time; Verb 'accuse' * noun -> Accuse; Extend 'check' * 'time' -> Time; !------------------------------------------------------------------------------ ! Take care of Set functions for globals involving time... ! These are not really needed because the globals can be changed within the ! TMon daemon, but during development it was thought they'd be needed. [ Change_Time x; time = x; ]; [ Change_Day x; day = x; ]; [ Change_Counter x; counter = x; ]; !------------------------------------------------------------------------------ ! Set up a very bad habit... [ SmokeSub x; if (parent(Lighter) ~= player){ print "You consider rubbing two sticks together aboard ship, but decide you'll pass."; return; }; if (cigquant == 0){ if (murder_happened) "Sh*t! You're outta' smokes! You'd better solve this murder quick!"; else "You pause to reflect on how your slacker attitude has gotten you nowhere. You're all smoked out, dummy!"; }; switch (sgwarn) { 0 : sgwarn++; "While the Surgeon General hasn't yet declared it so, you feel that inhaling cigarette smoke may be hazardous to your health.^You decide to think about it a bit more."; 1 : sgwarn++; "Are you sure? He is a general, after all..."; 2 : x = random(4); cigquant--; switch(x) { 1 : "You light a cigarette with the Zippo and inhale deeply. Ahhhhh..."; 2 : "Oh, the guilty pleasures of carcinogens!"; 3 : "Lighting up, you can't help but feel cool."; 4 : "You light up, hating yourself for what you're doing to your body."; }; }; ]; !------------------------------------------------------------------------------ ! The Accuse sub-routine [ AccuseSub; if(noun==Lorraine){ if(parent(Newspaper)==player) if(parent(Arsenic)==player) if(parent(Bra)==player){ Achieved(0); print "^Lorraine looks about like a frightened animal caught in the headlights. With nowhere to go, she shrieks at you, ~I'll get you, you bastard!!!^"; PlayerTo(Bridge,false); } } if(noun==Payne){ if(parent(Casing)==player){ achieved(1); print "^Major Astley strikes like a cobra and snares your throat with a hand like a vise. ~I'm innocent you stupid bastard!!!~^"; PlayerTo(Bridge,false); } } ]; !------------------------------------------------------------------------------ ! Create a secret room... Object Bridge "The Ship's Bridge" with name 'bridge', initial[;"The captain shakes your hand, ~You've done it, my boy! You solved the case!";], description [; print "The bridge of the ship provides a panoramic view of the beautiful Atlantic. You look forward, and see the first rays of the rising sun."; deadflag=2;], has light; !------------------------------------------------------------------------------ ! Let the player check the time... [ TimeSub ; if (parent(Watch) == player){ switch(time) { 0 : "It's midnight...spooky."; 1 to 11 : "It's ", time, " in the morning."; 12 : "It's noon. High noon."; 13 to 17 : "It's ", time - 12, " in the afternoon. A siesta would be peachy."; 18 to 23 : "It's ", time - 12, " in the evening."; }; } else { print "You consider constructing a sand dial in the "; print (name) location; print ", but decide against it."; }; ]; !------------------------------------------------------------------------------ ! Set up a daemon to control timed events... Object TMon with time_of_day, day_number, count, ! Need to set up initial variable values... activate [; self.time_of_day = time; self.day_number = day; self.count = counter; StartDaemon(self); ], ! Build the daemon for time-related stuff... daemon [; self.time_of_day = time; self.day_number = day; self.count = counter; ! Need to give the player the dinner party invitation... if (self.time_of_day == 17 && self.day_number == 1){ Change_Time(18); Change_Counter(10); print "^^You've donned your finest (and only) suit for dinner at the Captain's table, which is to begin shortly.^^"; } ! Need to nudge the player again...(Counter starts @ 10) if (self.time_of_day == 18 && self.day_number == 1){ Change_Counter(counter - 1); if (location==Dining_Cabin && counter>=4) need_relook = true; ! Next line forces a 'look' operation... if (self.count == 3 && need_relook == true) PlayerTo(Dining_Cabin,false); if (self.count == 0){ Change_Time(19); Change_Counter(7); if (location ~= Dining_Cabin) print "^^^You hear a loud bell clanging toward the middle of the ship...You then hear a low rumble--wait, that's just your stomach!^Maybe a meal with some rich snobs wouldn't be too bad.^^^"; else { print "^A short, fat man with a large grey mustache and a giant white hat pushes a large cart into the dining room from the west.^He quietly serves plates at the head of the table, but begins muttering to himself in French as he moves toward your end. He ^all but drops your plate in front of you. He waddles hurriedly from the room.^"; move Dinner to Dining_Cabin; } } } ! Need to commit the murder...(Counter starts @ 7) if (self.time_of_day == 19 && self.day_number == 1){ Change_Counter(counter - 1); if (location ~= Dining_Cabin) if (self.count % 5 == 0 && self.count ~= 0) print "^I'm not one to question a person's manners, but it was the captain of the ship who invited you to supper...^"; else; else{ Change_Counter(0); print "Maybe a conversation is in order...^"; } ! Force the player to the dining cabin... if (self.count == 1 && location ~= Dining_Cabin){ print "Your mother didn't raise you to be rude...^"; PlayerTo(Dining_Cabin,false); print "^A short, fat man with a large grey mustache and a giant white hat pushes a large cart into the dining room from the west.^He quietly serves plates at the head of the table, but begins muttering to himself in French as he moves toward your end. He ^all but drops your plate in front of you. He waddles hurriedly from the room.^"; move Dinner to Dining_Cabin; } if (self.count == 0){ Change_Time(20); Change_Counter(9); } } ! Guests need to filter out...(Counter starts @ 9) if (self.time_of_day == 20 && self.day_number == 1){ Change_Counter(counter - 1); if (self.count == 9){ print "Jacob rises from the table and, clearing his throat, says ~It was very nice dining with all of you. I'm afraid I'm feeling a little nauseous,^so I think I'll make it an early night. Excuse me, please.~ Jacob leaves through the south-west arch.^"; move Jacob to SuiteG; } if (self.count == 8){ print "Sarah says, ~I should really go check on Jake,~ and leaves through the same exit.^"; move Sarah to SuiteG; } if (self.count == 7){ print "Other guests begin to make their various explanations, leaving by the several exits. Major Astley, Maureen, and Mr. Howell have retired.^"; move Payne to Starboard_Hall_Mid_Aft; move Maureen to SuiteB; move Howell to Starboard_Hall_Mid_Aft; } if (self.count == 6){ print "Captain Stanton graciously addresses his remaining guests, bidding them a pleasant evening.^"; move Captain to SuiteG; } if (self.count == 4){ print "Lorraine Thornton smiles and nods at you, Emily, and Brock and withdraws from the cabin.^You notice Brock leering at Emily. So does she--~Forget it, buster!~ she tells him. He whispers something to her, as she tries to^avoid his breath.^"; move Lorraine to Starboard_Hall_Mid_Aft; move Cook to Dining_Cabin; } if (self.count == 3){ print "Brock tries one last pass...and whiffs! Emily slaps him on the face, and exits to the north-west.^"; move Emily to SuiteG; } if (self.count == 2){ print "Brock leans his elbows on the table. ~That's one stuck-up hussy, friend,~ he says, standing. ~I wouldn't waste my time if I^were you.~ Brock leaves.^"; move Brock to Starboard_Hall_Mid_Aft; } if (self.count == 1){ murder_happened = true; just_murdered = true; print "For the first time, Henri, the ship's cook, addresses you. ~You reesh Americahn ees all alahk. You seenk you own ze^ worl-da!~ As you try to translate, Henri begins to mutter in French--something about souffles, you think. He waddles^ back into the kitchen.^"; move Cook to Galley; } if (self.count == 0){ print "BANG!!! Suddenly, to the south-west, you hear a shot! You trip on your shoelace in your excitement, landing hard on^the deck. After a minute you manage to collect yourself."; Change_Time(21); Change_Counter(20); give CDoorG open; } } ]; !------------------------------------------------------------------------------ ! Set up a daemon to control people's movement... ! The Time monitor, TMon is responsible for changing times and counter--this ! one just shuffles people around. Object PMon with x, ! Need to start daemon... activate [; StartDaemon(self); ], ! Build the daemon for people-related stuff... daemon [y; if (time == 18 && day == 1){ if (counter == 7){ move Jacob to Dining_Cabin; move Howell to Dining_Cabin; move Maureen to Dining_Cabin; } if (counter == 4){ move Payne to Dining_Cabin; move Lorraine to Dining_Cabin; move Brock to Dining_Cabin; move Emily to Dining_Cabin; move Sarah to Dining_Cabin; move Captain to Dining_Cabin; } } if (location == parent(Maureen)){ y = random(3); if (y == 1){ print (string) random( "~Soylent Green is people,~ mutters the old lady. ~It's pee-pul!~^", "Maureen appears confused, ~Wally must have told you that I can't eat yams.~^", "The old woman swats at imaginary horse flies in the air.^", "~Teddy Roosevelt was a stunning man,~ says Maureen, ~but his mustache tickled.~^", "Maureen Livingston-Riley looks at you slyly. ~Sonny, can you tell me what time the fleet arrives?~^", "Maureen mutters, ~Ten pounds-six will buy a lot of rye.~^"); } } ]; !------------------------------------------------------------------------------ ! Equip the player with some necessary items... Object Smokes "pack of Lucky Strikes" with name 'cigarette' 'smoke' 'butt' 'fag' 'pack' 'lucky' 'cig' 'lucky strike' 'laramie', description "This is your average pack of cigarettes, although slightly crumpled from being in your pocket."; Object Lighter "Zippo lighter" with name 'lighter' 'zippo' 'flame' 'torch', description "Your trusty Zippo is silver-cased, and the Ace of Spades is etched in the side.", has switchable; Object Watch "Grandpa's pocket watch" with name 'watch' 'grandpa', article "your", description "This watch was a gift from your Grandpa. It's casing is gold (well, gold colored). It still keeps perfect time."; Object Player_Key "cabin key" with name 'key' 'guest', article "your", description "It appears to be a cabin key.^The word 'Guest' is printed upon it in small letters."; !------------------------------------------------------------------------------ ! Evidential and Puzzle Objects and Props Object Dinner "gourmet dinner" with name 'food' 'dinner' 'plate', description "The dinner consists of some sort of roasted game bird, wax beans, and a white-yellow mashed substance.^On the bottom of the plate is a gooey white sauce. Mmmm...", after[; Eat:"Not bad. . .Wait--is that a feather!?!"; ], has edible; Object Charm "small gold charm on a chain" with name 'charm', description "This small golden charm is in the shape of a heart. You can discern an 'E', a 'R', and a 'W' on its face.", has scored; Object Newspaper "London Daily Telegraph" with name 'newspaper', description "On the front page is a story about one Lorraine Thornton. Specifically, it's about her loss of^one million pounds worth of paintings in a lawsuit to J. Williams.", has scored; Object Arsenic "box of rat poison" with name 'arsenic' 'poison', description "This box is identical to the one missing from the ship's galley.", has scored; Object Bra "woman's brassiere" with name 'bra' 'brassiere', description "The bra would only fit a full-figured woman.", has scored; Object Chit "scrawled, crumpled note" with name 'chit' 'note' 'iou', description "The note is handwritten in smudged ink. It says:^ ~Mr. H-- ^ 10k by Aug 12 ^ -J-~"; !------------------------------------------------------------------------------ ! Set up the First Location--The player's suite Object Luxury_Suite "Luxury Suite" with name 'suite' 'luxury' 'cabin' 'quarters', description [; print "You are in your private suite. "; if (Luxury_Suite hasnt visited) print "Thick carpet covers the floor, and brass fittings adorn the furniture. This place is nicer than your apartment.^Hell, the bed is bigger than your apartment!"; ], s_to CDoorD, has light; Object->CDoorD "cabin door with a sign saying 'Suite D'" with name 'cabin' 'door', article "your", description "Yup, it's a door...", door_to [; if(self in Luxury_Suite) return Port_Hall_Aft; return Luxury_Suite; ], door_dir[; if(self in Luxury_Suite) return s_to; return n_to; ], when_open[; if(self in Luxury_Suite) "You can exit your cabin to the south."; "You can enter your cabin to the north."; ], with_key Player_Key, found_in Luxury_Suite Port_Hall_Aft has static door openable ~open lockable ~locked; Object->BedA "bed" with name 'bed' 'rack', description "It's a large, comfy bed, dominating the east side the room.", has static supporter enterable; Object->DresserA "chest of drawers" with name 'drawer' 'chest' 'dresser' 'drawers', description "The chest is large and heavy. Appears to be oak. (Oak is nice.)", has static container openable; Object->->YourClothes "ugly clothes" with name 'clothes' 'pants' 'sweater', article "your", description "Various and sundry slacker-gear. Dungarees, wool sweaters, underwear...", before [; Take: "Your ugly clothes aren't going to impress anyone here."; ], has clothing pluralname; !------------------------------------------------------------------------------ ! Define all locations... ! Location 01--Bow Object Bow "Bow of the Ship" with name 'bow', description [; if (Bow hasnt visited) print "The bow of the ship commands an excellent view of the ocean in your direction of travel.^You can hear the prow cutting through the choppy waves below. A gust of wind blows, smelling sweetly of salt.^"; print "A protective railing forms a U-shape around the area."; ], nw_to Port_Hall_Fore, sw_to Starboard_Hall_Fore, has light; !------------------------------------------------------------------------------ ! Location 02--Port Hall-Fore Object Port_Hall_Fore "Port Hallway--Fore" with name 'hall' 'walkway' 'walk-way' 'hallway', description [; print "The hallway has an arched entryway to the south with a sign saying 'Dining'. The bow is east, and the hall^continues west. "; if(murder_happened==false) print "You can hear merry voices to the south.^";], e_to Bow, s_to Dining_Cabin, w_to Port_Hall_Mid_Fore, has light; !------------------------------------------------------------------------------ ! Location 03--Starboard Hall-Fore Object Starboard_Hall_Fore "Starboard Hallway--Fore" with name 'hall' 'walkway' 'walk-way' 'hallway', description [; print "The hallway has an arched entryway to the north with a sign saying 'Dining'. The bow is east, and the hall^continues west. "; if(murder_happened==false) print "You can hear merry voices to the north.^";], e_to Bow, n_to Dining_Cabin, w_to Starboard_Hall_Mid_Fore, has light; !------------------------------------------------------------------------------ ! Location 04--Dining Cabin Object Dining_Cabin "Dining Cabin" with name 'dining' 'mess', description "A large mahogany table covered with an expensive linen tablecloth is the center-piece of this large space. The walls^ bear ornate moldings and gas lamps. A swinging door lies west, and arched exits lead north-east, south-east,^ north-west, and south-west.", ! Trap the player here if the murder hasn't occurred... before[; go: if(murder_happened==false){ print "It would be rude for you to leave so soon.^"; return(true); } else return(false); ], ne_to Port_Hall_Fore, se_to Starboard_Hall_Fore, nw_to Port_Hall_Mid_Fore, sw_to Starboard_Hall_Mid_Fore, w_to Galley, has light scored; !------------------------------------------------------------------------------ ! Location 05--Suite A Object SuiteA "Luxury Suite A" with name 'suite' 'luxury' 'cabin' 'quarters', description "This is the suite of Thurston Howell II.", s_to CDoorA, has light; Object->CDoorA "cabin door with a sign saying 'Suite A'" with name 'cabin' 'door', description "Yup, it's a door...", door_to [; if(self in SuiteA) return Port_Hall_Mid_Fore; return SuiteA; ], door_dir[; if(self in SuiteA) return s_to; return n_to; ], when_open[; if(self in SuiteA) "You can exit this cabin to the south."; "You can enter a cabin to the north."; ], with_key SuiteA, found_in SuiteA Port_Hall_Mid_Fore has static door openable lockable locked; !------------------------------------------------------------------------------ ! Location 06--Port Hall-Mid-Fore Object Port_Hall_Mid_Fore "Port Hallway--Fore" with name 'hall' 'walkway' 'walk-way' 'hallway', description [; print "The hallway has an arched entryway to the south with a sign saying 'Dining'. This hall continues east,^ toward the front of the ship, and west, toward the rear. "; if(murder_happened==false) print "You can hear merry voices to the south.^";], n_to CDoorA, e_to Port_Hall_Fore, s_to Dining_Cabin, w_to Port_Hall_Amid, has light; !------------------------------------------------------------------------------ ! Location 07--Starboard Hall-Mid-Fore Object Starboard_Hall_Mid_Fore "Starboard Hallway--Fore" with name 'hall' 'walkway' 'walk-way' 'hallway', description [; print "The hallway has an arched entryway to the north with a sign saying 'Dining'. This hall continues east,^ toward the front of the ship, and west, toward the rear. "; if(murder_happened==false) print "You can hear merry voices to the north.^";], s_to CDoorE, e_to Starboard_Hall_Fore, n_to Dining_Cabin, w_to Starboard_Hall_Amid, has light; !------------------------------------------------------------------------------ ! Location 08--Suite E Object SuiteE "Luxury Suite E" with name 'suite' 'luxury' 'cabin' 'quarters', description "You are in the temporary quarters of Major Payne Astley (Ret). Everything is quite tidy.", n_to CDoorE, has light; Object->CDoorE "cabin door with a sign saying 'Suite E'" with name 'cabin' 'door', description "Yup, it's a door...", door_to [; if(self in SuiteE) return Starboard_Hall_Mid_Fore; return SuiteE; ], door_dir[; if(self in SuiteE) return n_to; return s_to; ], when_open[; if(self in SuiteE) "You can exit this cabin to the north."; "You can enter a cabin to the south."; ], with_key SuiteE, found_in SuiteE Starboard_Hall_Mid_Fore has static door openable lockable ~locked; Object->Trunk "steamer trunk" with name 'steamer' 'trunk', description "The trunk is well made and sturdy. It has a locking mechanism on the lid.", has static container openable lockable ~open ~locked; Object->->Casing "shell casing" with name 'casing' 'shell', description "This is a shell casing to a small caliber pistol.", has scored; Object->->Clothes "clothing" with name 'clothes' 'clothing', description "Apparently, these are the major's clothes.", has clothing pluralname; !------------------------------------------------------------------------------ ! Location 09--Galley Object Galley "Galley" with name 'galley' 'kitchen', description [; if (Galley hasnt visited) print "The ship's galley immediately reminds you of home. Specifically, it's dirty.^The floor is tiled in a black and white checkerboard style. A long wooden table dominates the center of the room.^Various smells linger here, and their combination is mildly nauseating. "; print "There are three small boxes lying in separate corners of the room."; ], e_to Dining_Cabin, s_to Starboard_Hall_Amid, has light; Object->Boxes "boxes" with name 'box' 'boxes', description "They are ordinary boxes of rat poison containing Arsenic.", has edible pluralname; !------------------------------------------------------------------------------ ! Location 10--Suite B Object SuiteB "Luxury Suite B" with name 'suite' 'luxury' 'cabin' 'quarters', description "This is the old lady's suite.", s_to CDoorB, has light; Object->CDoorB "cabin door with a sign saying 'Suite B'" with name 'cabin' 'door', description "Yup, it's a door...", door_to [; if(self in SuiteB) return Port_Hall_Amid; return SuiteB; ], door_dir[; if(self in SuiteB) return s_to; return n_to; ], when_open[; if(self in SuiteB) "You can exit this cabin to the south."; "You can enter a cabin to the north."; ], with_key SuiteB, found_in SuiteB Port_Hall_Amid has static door openable lockable locked; !------------------------------------------------------------------------------ ! Location 11--Port Hall-Amidships Object Port_Hall_Amid "Port Hallway--Amidships" with name 'hall' 'walkway' 'walk-way' 'hallway', description "This is the middle of the ship, port side. An archway leads south with a sign saying 'Ballroom'. The corridor continues^ east and west.", n_to CDoorB, e_to Port_Hall_Mid_Fore, s_to BallRoom, w_to Port_Hall_Mid_Aft, has light; !------------------------------------------------------------------------------ ! Location 12--Starboard Hall-Amidships Object Starboard_Hall_Amid "Starboard Hallway--Amidships" with name 'hall' 'walkway' 'walk-way' 'hallway', description "This is the middle of the ship, starboard side. An archway leads north with a sign saying 'Ballroom'. The corridor continues^ east and west.", s_to CDoorF, e_to Starboard_Hall_Mid_Fore, n_to BallRoom, w_to Starboard_Hall_Mid_Aft, has light; !------------------------------------------------------------------------------ ! Location 13--Suite F Object SuiteF "Luxury Suite F" with name 'suite' 'luxury' 'cabin' 'quarters', description "This is the suite of Loraine Thornton", n_to CDoorF, has light; Object->Suitcase "suitcase" with name 'case' 'suitcase', description "It's a normal suitcase with 'L.T.' stitched on the side.", has container openable ~open; Object->CDoorF "cabin door with a sign saying 'Suite F'" with name 'cabin' 'door', description "Yup, it's a door...", door_to [; if(self in SuiteF) return Starboard_Hall_Amid; return SuiteF; ], door_dir[; if(self in SuiteF) return n_to; return s_to; ], when_open[; if(self in SuiteF) "You can exit this cabin to the north."; "You can enter a cabin to the south."; ], with_key SuiteF, found_in SuiteF Starboard_Hall_Amid has static door openable lockable locked; !------------------------------------------------------------------------------ ! Location 14--Ballroom Object Ballroom "Ballroom" with name 'ballroom' 'dancehall', description "This grand ballroom is impressive, considering it's on a ship. Crystal chandeliers, marble floors, the works.^ The exits are nw,ne,sw, & se.", nw_to Port_Hall_Mid_Aft, ne_to Port_Hall_Amid, sw_to Starboard_Hall_Mid_Aft, se_to Starboard_Hall_Amid, has light; Object->Garbage "garbage can in the corner" with name 'garbage' 'can', description "It's an ordinary aluminum garbage can with a lid.", has container openable ~open; !------------------------------------------------------------------------------ ! Location 15--Suite C Object SuiteC "Luxury Suite C" with name 'suite' 'luxury' 'cabin' 'quarters', description "This suite is being sharded by Emily and Sarah. (They're so cute.)", s_to CDoorC, has light; Object->CDoorC "cabin door with a sign saying 'Suite C'" with name 'cabin' 'door', description "Yup, it's a door...", door_to [; if(self in SuiteC) return Port_Hall_Mid_Aft; return SuiteC; ], door_dir[; if(self in SuiteC) return s_to; return n_to; ], when_open[; if(self in SuiteC) "You can exit this cabin to the south."; "You can enter a cabin to the north."; ], with_key SuiteC, found_in SuiteC Port_Hall_Mid_Aft has static door openable lockable ~locked; !------------------------------------------------------------------------------ ! Location 16--Port Hall-Mid-Aft Object Port_Hall_Mid_Aft "Port Hallway--Aft" with name 'hall' 'walkway' 'walk-way' 'hallway', description "This is the middle of the ship, port side. An archway leads south with a sign saying 'Ballroom'. The corridor continues^ east and west.", n_to CDoorC, s_to Ballroom, e_to Port_Hall_Amid, w_to Port_Hall_Aft, has light; !------------------------------------------------------------------------------ ! Location 17--Starboard Hall-Mid-Aft Object Starboard_Hall_Mid_Aft "Starboard Hallway--Aft" with name 'hall' 'walkway' 'walk-way' 'hallway', description "This is the middle of the ship, starboard side. An archway leads north with a sign saying 'Ballroom'. The corridor continues^ east and west.", s_to CDoorG, n_to Ballroom, e_to Starboard_Hall_Amid, w_to Starboard_Hall_Aft, has light; !------------------------------------------------------------------------------ ! Location 18--Suite G Object SuiteG "Luxury Suite G" with name 'suite' 'luxury' 'cabin' 'quarters', description "This is the suite of Jacob Williams.", n_to CDoorG, has light; Object->CDoorG "cabin door with a sign saying 'Suite G'" with name 'cabin' 'door', description "Yup, it's a door...", door_to [; if(self in SuiteG) return Starboard_Hall_Mid_Aft; return SuiteG; ], door_dir[; if(self in SuiteG) return n_to; return s_to; ], when_open[; if(self in SuiteG) "You can exit this cabin to the north."; "You can enter a cabin to the south."; ], with_key SuiteG, found_in SuiteG Starboard_Hall_Mid_Aft has static door openable lockable ~locked; !------------------------------------------------------------------------------ ! Location 19--Player's Suite (Line 206) !------------------------------------------------------------------------------ ! Location 20--Port Hall-Aft Object Port_Hall_Aft "Port Hallway--Aft" with name 'hall' 'walkway' 'walk-way' 'hallway', description "This hallway is on the port side and toward the back of the boat.^To the west, you can see the back railing and the ocean beyond. The hallway continues east, and a sign saying ~Game Area~ points south.^Your suite is north.", n_to CDoorD, w_to Rescue_Port, e_to Port_Hall_Mid_Aft, s_to Game_Area, has light; !------------------------------------------------------------------------------ ! Location 21--Game Area Object Game_Area "Game Area" with name 'game', description "This area is provided for the entertainment of the ship's passengers. A shuffleboard court is painted^on the deck. A folded ping-pong table lies against the wall.", n_to Port_Hall_Aft, s_to Starboard_Hall_Aft, w_to Poop_Deck, nw_to Rescue_Port, sw_to Rescue_Starboard, has light; Object->PingPong "ping pong table" with name 'table' 'ping' 'pong', description "It's used to play ping-pong.", after [; open: print "You hear a soft jingle. "; move Charm to Game_Area; ], has static container openable ~open; !------------------------------------------------------------------------------ ! Location 22--Starboard Hall-Aft Object Starboard_Hall_Aft "Starboard Hallway--Aft" with name 'hall' 'walkway' 'walk-way' 'hallway', description "This hallway is on the starboard side and toward the back of the boat.^To the west, you can see the back railing and the ocean beyond. The hallway continues east, and a sign saying ~Game Area~ points north.", s_to CDoorH, w_to Rescue_Starboard, e_to Starboard_Hall_Mid_Aft, n_to Game_Area, has light; !------------------------------------------------------------------------------ ! Location 23--Suite H Object SuiteH "Luxury Suite H" with name 'suite' 'luxury' 'cabin' 'quarters', description "This is the suite of Brock Smythe", n_to CDoorH, has light; Object->CDoorH "cabin door with a sign saying 'Suite H'" with name 'cabin' 'door', description "Yup, it's a door...", door_to [; if(self in SuiteH) return Starboard_Hall_Aft; return SuiteH; ], door_dir[; if(self in SuiteH) return n_to; return s_to; ], when_open[; if(self in SuiteH) "You can exit this cabin to the north."; "You can enter a cabin to the south."; ], with_key SuiteH, found_in SuiteH Starboard_Hall_Aft has static door openable lockable locked; !------------------------------------------------------------------------------ ! Location 24--Rescue Port Object Rescue_Port "Rescue Deck--Port" with name 'rescue' 'deck', description "The railing comes to a sharp corner here, at the aft-most portion of the ship. A sturdy life boat is secured by brackets,^upside-down and against the deck. The deck below your feet vibrates slightly.^The poop deck (snicker) lies south, and a hallway begins to the east. A shuffleboard is painted on the deck to the south-east.", e_to Port_Hall_Aft, se_to Game_Area, s_to Poop_Deck, has light; Object->Boat_Port "life boat" with name 'life' 'boat', description "The boat is about twenty feet long. It's upside-down and held fast by a set of brackets."; !------------------------------------------------------------------------------ ! Location 25--Poop Deck Object Poop_Deck "Poop Deck" with name 'poop', description "This is as far back (and as close to home) as you can go. You can see the wake of the ship glisten in the moonlight^ for a mile. You can see a shuffleboard court to the east, and life boats to the north and south.", n_to Rescue_Port, s_to Rescue_Starboard, e_to Game_Area, has light; !------------------------------------------------------------------------------ ! Location 26--Rescue Starboard Object Rescue_Starboard "Rescue Deck--Starboard" with name 'rescue' 'deck', description "The railing comes to a sharp corner here, at the aft-most portion of the ship. A sturdy life boat is secured by brackets,^upside-down and against the deck. The deck below your feet vibrates slightly.^The poop deck (snicker) lies north, and a hallway begins to the east. A shuffleboard is painted on the deck to the north-east.", e_to Starboard_Hall_Aft, ne_to Game_Area, n_to Poop_Deck, has light; Object->Boat_Starboard "life boat" with name 'life' 'boat', description "The boat is about twenty feet long. It's upside-down and held fast by a set of brackets."; !------------------------------------------------------------------------------ !****************************************************************************** !****************************************************************************** ! People are defined below... ! Mr. Thurston Howell II Object Howell "Thurston Howell II" with name 'thurston' 'howell', description "He's wearing a fine, navy blue suit, and a light blue cravat.^He occaisionally swings a long black cane to and fro, while squinting through his monacle.", initial [; if (Howell hasnt visited){ give Howell visited; switch (location){ Dining_Cabin: print "~Allow me to introduce the entrepreneur and philanthropist of South Essex, Mr. Thurston Howell II,~ the Captain says, grandly.^Howell squints through his monacle and issues two brief and low moans in response. "; default: print "Thurston Howell II appears to be in his late sixties. The name sure sounds familiar..."; } } print "Thurston Howell squints through his monacle.^"; ], life [; Answer: "The priest coughs, and almost falls apart."; Ask: switch (second) { 'jacob', 'williams': if (murder_happened == false) "~A fine young man. His family belong to the~ yacht club, you know? Hmmm.~"; "~Terrible circumstance, just terrible. Hmmm.~"; 'note': if (parent(Chit)==player) if(murder_happened == false) print "~Sure, Jacob owes me a few dollars. So?~"; else print "Howell is furious, ~I wipe my arse with $15,000! I wouldn't kill the man, guttersnipe!~"; else print "~What are you talking about?~"; default: "~I caahn't be concerned with such things. Hmmm.~"; } ""; Tell: "~Why must the help continually baather me with information of no interest. Hmmm.~"; Attack: "THWACK! Despite his advanced age, Mr. Howell adeptly strikes you with his cane in a lightening quick manner. Ouch.^~Take that, scoundrel!~ he says."; Kiss: "~Now, see here, young man! Despite the refined accent and manicure, I simply don't swing that way.~"; ThrowAt: move noun to location; <>; Show, Give: ! if (noun == dictionary && dictionary.correct == false) { ! dictionary.correct = true; ! "The priest reads a little of the book, laughing ! in a hollow, whispering way. Unable to restrain ! his mirth, he scratches in a correction somewhere ! before returning the book."; ! } ""; ], has animate proper; !------------------------------------------------------------------------------ ! Mrs. Maureen Livingston-Riley Object Maureen "Maureen Livingston-Riley" with name 'maureen' 'livingston-riley' 'livingston' 'riley', description "This decrepit blue-haired widow sports a goiter the size of a softball, and a hunch-back rivaling Quasimodo.^ She's definitely under four feet tall. She wears a black, frilly dress that extends to her ankles,^and a large brimmed black hat shadows her face. Her pale, bony hands clutch a large handbag tightly.", initial [; if (Maureen hasnt visited){ give Maureen visited; print "Perhaps the oldest looking woman you've ever seen shuffles slowly down the corridor. As you begin a silent prayer that^she might not notice you, her wrinkled face tilts up to yours. She peers at you through blue eyes, one piercing and one^cloudy. ~Good afternoon, young man,~ she says, ~My name is Mrs. Maureen Livingston-Riley. You may call me...~^Her head nods momentarily, but she recovers.^~You may call me Maureen Livingston-Riley.~ Maureen Livingston-Riley reminds you of only one thing--grim death!^"; } print "Maureen Livingston-Riley stoops here, half-asleep and muttering to herself.^"; ], life [; Answer: Ask : switch (second) { 'life', 'herself': print "~I don't recall. Where am I?~"; 'jacob', 'williams': if (murder_happened == false) print "~Is that the fellow I saw with the woman with the big...~ Maureen proceeds to gesture lewdly. "; print "~Men these days can't keep it^in their pants,~ she says."; } ""; Tell: "Her cataract stares at you, like a dysfunctional magic eight ball."; Attack: "The old woman knocks you flat with a right to the bread basket."; Kiss:"Smooch! The old bird's eyelashes flutter coquetishly"; ThrowAt: move noun to location; Show, Give: "She seems impressed, but you're not sure with all the muttering."; ], has animate female proper; !------------------------------------------------------------------------------ ! Object Lorraine "Mrs. Lorraine Thornton" with name 'lorraine' 'thornton', description "This lady wears a white blouse, a dark green jacket, and a matching skirt extending well below her knees.", initial [; if (Lorraine hasnt visited){ give Lorraine visited; switch (location){ Dining_Cabin: print "Captain Stanton intones, ~Ladies and gentlemen, a fine matron of the arts, London's own, Mrs. Lorraine Thornton.~ The buxom,^middle-aged lady seated next to you greets the guests in a melodious tone. "; default: print "Mrs. Lorraine Thornton, a smartly dressed middle-aged woman just beginning to show her age, possesses an air of affluence.^ Her buxom curves are carefully covered, as are the wrinkles about her eyes. "; } } if (murder_happened==false) print "Lorraine Thornton appears confident, almost regal.^"; else print "Lorraine is here, looking stunned and weepy.^"; ], life [; Answer: Ask : switch (second) { 'jacob','jake','williams' : "~He's silly, still a boy, really.~"; default: "~Who is that?~ she asks, uninterested."; } ""; Tell: "She arches an eyebrow in your general direction."; Attack: "~I wouldn't do that, if I were you.~"; Kiss: "Lorraine plants one on you! ~I'm in Suite F, big boy,~ she whispers, huskily."; ThrowAt: move noun to location; Show, Give:""; ], has animate female proper; !------------------------------------------------------------------------------ ! Object Payne "Payne Astley" with name 'major' 'payne' 'astley', description "This ridiculous old fart sports a British naval uniform covered with medals. He smells like moth balls.", initial [; if (Payne hasnt visited){ give Payne visited; switch (location){ Dining_Cabin: print "The captain gestures to an older gentleman wearing a British naval uniform laden with medals. ~Major Payne Astley, ladies and^gentlemen, what more can I say?~ "; default: print "An old man stands before the life boat, apparently inspecting it for sea-worthiness.^He wears a British naval uniform heavy with bling. "; } } print "Major Payne Astley rubs his nose (with minimal penetration)."; ], life [; Answer: Ask : switch (second) { 'lorraine': "Who wants to know!"; default: "I'm not sure who that is."; } ""; Tell: "The major doesn't seem to hear you."; Attack:PlayerTo(Hospital,false); Kiss: print "The major throttles you."; PlayerTo(Hospital,false); ThrowAt: "The major throws it back."; Show, Give: "~Bah!~"; ], has animate proper; !------------------------------------------------------------------------------ ! Object Brock "Brock Smythe" with name 'brock' 'smythe', description "An over-achieving young man in his mid-twenties, he dresses expensively and meticulously.", initial [; if (Brock hasnt visited){ give Brock visited; switch (location){ Dining_Cabin: print "~A recent Harvard graduate, ladies and gentlemen,~ the captain says, fighting to keep derision from^his voice, ~Mr. Brock Smythe of Boston.~ "; default: print "A sharp young man, appearing to be in his mid-twenties, has just fininshed locking a cabin door.^His clothing and grooming are polished--perhaps a bit too polished. ~Brock Smythe, charmed,~ he says, shaking your hand, limply. "; } } if (murder_happened==false) print "Brock is busy sneering at something. When he notices you, he smiles charmingly.^"; else "Brock stands here stunned, his trademark sneer missing."; ], life [; Answer: Ask : switch (second) { } ""; Tell:""; Attack:""; Kiss: ""; ThrowAt: move noun to location; Show, Give:""; ], has animate proper; !------------------------------------------------------------------------------ ! Object Jacob "Jacob Williams" with name 'jacob' 'williams' 'jake', description [; if(murder_happened==false) print "This young man is in the prime of his life. Handsome and strong."; else print "The body of Jacob Williams lies still. A bullet to the head appears to be the cause^of death. Not much blood, though."; ], initial [; if (Jacob hasnt visited){ give Jacob visited; switch (location){ Dining_Cabin: print "Captain Stanton beams, ~I'm so very pleased, ladies and gents, to produce for you tonight my right jolly friend from across the pond,^Mr. Jacob Williams. Only a few short years ago, we gave it to the Gerry's in the Great War! Bravo, Willy! Ha!~^To his credit, Williams looks about nodding, with a small, embarrassed smile.^"; } } if (murder_happened==false) print "Jacob appears pensive, always looking around, but never seeming to see anyone.^"; else print "The body of Jacob Williams is pale and cold. It has taken on that eerie quality of an inanimate object.^"; ], life [; Answer: Ask : if(murder_happened==false){ switch (second) { 'sarah','watson': print "~Ah...my one true love. We're to marry in the fall, you know.~"; 'emily','roberts': print "~Sure, Emily's a great girl. She's my girl's best friend, so it's important that we get along.~"; 'lorraine','thornton': print "~Don't really know her. Seems like a nice woman, though~"; default : print "~Dunno.~"; } ""; }; Tell:""; Attack:""; Kiss:""; ThrowAt: move noun to location; Show, Give:""; ], has animate proper; !------------------------------------------------------------------------------ ! Object Emily "Emily Roberts" with name 'emily' 'roberts', description "Some might call her a 'Plain Jane', but, in your opinion, she's the bee's knees.", initial [; if (Emily hasnt visited){ give Emily visited; switch (location){ SuiteC: print "A pretty young woman of college age sits on a small day bed folding clothes. She is slender and of average^height. She looks at you with stunning emerald eyes that betray a deep inteligence. ~Hello,~ she says, ~my name's Emily.~^She offers her hand, and you shake it, introducing yourself. "; Dining_Cabin: print "The captain gestures with an open hand toward a stunning young woman with emerald green eyes matching her dress. ~Ms. ^ Emily Roberts of Nantucket.~ Emily smiles, and nods, greeting the group. With the slightest look of distaste toward the gentleman^sitting on her right. "; default: print "A pretty young woman of college age stands before you, slender and of average height. She looks at you^with stunning emerald eyes that betray a deep inteligence. ~Hello,~ she says, ~my name's Emily.~ She offers her hand, and^you shake it, introducing yourself. "; } } if (murder_happened==false) print "Emily Roberts appears distant and sullen.^"; else{ if(just_murdered==true) print "Emily weeps, and tries to quietly console her friend.^"; else print "Emily's eyes are puffy and red.^"; } ], life [; Answer: Ask : switch (second) { 'jacob','jake','williams': print "~He and Sarah are going to get married.~"; 'sarah','watson': print "Emily smiles, ~She's my best friend.~"; 'lorraine','thornton': print "~I've seen her and Jake talk, before. I don't like her.~"; 'brock','smythe': print "~He's such a greasy slimeball!~"; 'payne','astley': print "~I heard he was a gun nut!~"; default: print "~I don't know.~"; } ""; Tell: print "~So?~"; Attack: print "Emily's deafening shriek dissuades you."; Kiss: print "Emily eyes you warily."; ThrowAt: move noun to location; Show, Give: switch (noun) { Charm: if(murder_happened==true){ print "Emily snatches the charm from your hand. She whispers, ~Oh, please, don't tell Sarah--it would break her heart.~ A tear^ rolls down her cheek, ~Jake and I dated for two months while she was in New York. I didn't kill him! I swear!~"; remove Charm; } default: "Emily doesn't seem interested."; } ""; ], has animate female proper; !------------------------------------------------------------------------------ ! Object Captain "Captain Stanton" with name 'captain' 'edward' 'stanton', description "The captain is middle-aged and distinguished. His uniform is crisp, like it has been freshly pressed.^He wears a full beard and a captain's hat.", initial [; if (Captain hasnt visited){ give Captain visited; switch (location){ Dining_Cabin: print "The captain stands and looks at each seated guest, in turn. ~I'd like to make a few intorductions,~ he says, with a slight American^southern drawl. ~My name is Edward Stanton, and I've been on the high seas for pert near my whole life. "; } } if (murder_happened==false) print "The captain scratches his beard.^"; else{ if(just_murdered==true){ print "The captain eyes you hopefully. ~I'm going to need your help,~ he says.^ ~If you know who did this and have the evidence come to me and ACCUSE them. You have access to my entire ship.~"; give CDoorA ~locked; give CDoorB ~locked; give CDoorF ~locked; give CDoorH ~locked; give Trunk ~locked; just_murdered = false; } else print "The captain rubs his beard pensively, and looks impotently around.^"; } ], life [; Ask : switch (second) { 'ship': print "She's a fine ship."; default: "Excuse me, I have to go plot a course. Duty calls..."; } ""; Tell: "I give the orders around here!"; Attack: "You don't want to do that."; Kiss: PlayerTo(Hospital,false); ThrowAt: move noun to location; Show, Give: "No, thanks."; ], has animate proper; !------------------------------------------------------------------------------ ! Object Purser "Purser Woodchuck" with name 'purser' 'woodchuck' 'gopher', description "This pale, frail man wears funny white shorts and epaulettes. You want to punch him in the face.", initial [; if (Purser hasnt visited){ give Purser visited; switch (location){ Poop_Deck: print "The ship's purser stands here on the poop deck, wielding a broom and bucket, scrubbing (what else?) bird poop from the deck."; default: print "The ship's purser is here, looking pale and sickly."; } } print "The ship's purser is here, looking pale and sickly."; ], life [; Ask : switch (second) { 'jacob','williams','jake': print "~He was in the Game Area with a lady last night. They argued, then kissed, then argued.^Then he walked off.~"; 'lady': print "~I didn't get a good look at her. She was top-heavy, though, for sure,~ Woodchuck says, as his^eyes glaze over. ~Lookee here,~ he says excitedly. Woodchuck hands you a woman's brassiere.^~That Jacob guy tried to give it to her. I wasn't gonna keep it--honest! Hey, could we keep this between us?~"; move Bra to player; default: print "~I'm just here to scrub bird poop off the deck.~"; } ""; Tell: "I didn't know that."; Attack: print "Woodchuck moves with surprising speed, and puts you in a Kung-Fu death grip. You cry 'uncle' and^he lets you go."; Kiss: print "Uh, please don't."; ThrowAt: move noun to location; Show, Give:""; ], has animate proper; !------------------------------------------------------------------------------ ! Object Sarah "Sarah Watson" with name 'sarah' 'watson', description "", initial [; if (Sarah hasnt visited){ give Sarah visited; switch (location){ Dining_Cabin: print "The captain gestures with an open hand toward a beautiful woman with brown eyes and long black hair. ~Ms. Sarah Watson^of New York City.~ Sarah smiles, enticingly.^~So nice to know you all.~ "; default: print "A pretty young woman of college age stands next to the bed, fluffing her hair. She is tall and^athletically built. Her deep brown eyes consider you briefly. ~My name's Sarah, ~ she says, ~I'm to become an actress^in London.~ "; } } if (murder_happened==false) print "Sarah Watson looks beautiful and vivacious.^"; else{ if(just_murdered==true) print "Sarah sits on the bed, crying over Jacob.^"; else print "Sarah sniffles, a tear trickles down her cheek.^"; } ], life [; Answer: Ask : switch (second) { 'jacob','jake','williams': print "~We're going to get married. He's sooo rich! Tee-hee...~"; 'emily','roberts': print "~She's been my best friend since I was a baby.~"; } ""; Tell:""; Attack: ""; Kiss: print "~You wish!~"; ThrowAt: move noun to location; Show: switch (second) { 'charm': print "~What's this?? You don't think--NO WAY!~"; default: print "The rich, beautiful debutante is not impressed."; } Give: print "You don't have anything she could possibly want."; ], has animate female proper; !------------------------------------------------------------------------------ ! Object Cook "Henri Pepin" with name 'cook' 'henri' 'pepin' 'chef', description "He's a short, squat man with a giant mustache and chef's hat. Whether his red cheeks are from drinking wine, or cursing^ 'Americahn', you're not sure.", initial [; if (Cook hasnt visited){ give Cook visited; switch (location){ Galley: print "Ahlo, zhere, Americahn. You can loook, but dun't toush, oui?"; } } if (murder_happened==false) print "Henri Pepin is the master of his domain"; else print "Henri is here, dicing mounds of vegetables"; ], life [; Answer: Ask : switch (second) { 'jacob','williams': print "~Ah, oui. Monsieur Jacob was a goood man. But he like ze woman too mush. Oui.~"; 'sarah','watson': print "~But of course. Ms. Watson et Monsieur Jacob, zay were to marry, non?~"; 'emily','roberts': print "~I don know, you know. Monsieur Jacob, he lahk, Henri zink~"; 'trap','box','boxes': print "~You no tush ze box, zay are poison for ze rats. Of course, zay were quatre, non?^Oui--un, deux, trois, four! Where in ze ell eez quatre? Hmmph!~"; } ""; Tell: print "Ahhh! Oui..."; Attack: print "Henri shows you his twelve inch chef's knife."; Kiss: print "~Don you try zat wis me, you orny Americain!~"; ThrowAt: move noun to location; Show, Give: print "Henri doesn't care about that."; ], has animate proper; ! Another secret location Object Hospital "Hospital" with name 'hopital', description"^^^You have landed in the hospital. Apparently, you spent much of the trip lying, unconscious in your suite.^You were then transferred to this place, where you will lie, in traction, for six weeks.^Oh, no, not again...The troupe of student nurses has arrived to practice their catheterization techniques!^^^You should type 'UNDO' now. NOW!", has light;