Switches v5; Release 2; Constant Story "SEARCHING FOR IAIN"; Constant Headline "^An Interactive Rewrite,\ ^Original Transcript by pieceoftheuniverse,\ ^Converted into Inform by Alex Watson,\ ^Portions copyright (c) to H2G2 Ltd.^"; Constant MANUAL_PRONOUNS; ! Pronouns only get changed when the player refers to something. Constant NO_PLACES; Constant MAX_SCORE 9000; Constant AMUSING_PROVIDED; Include "boldbox"; Constant FROUPIE; ! This is tested for in English.h so 'teh' is accepted as a definite article. ! It seemed the only way, much as I hate having to modify the library. Replace Lowkey_Menu; Replace DoMenu; [ Amusing; "Have you tried... ^ Answering the game's rhetorical questions? ^ Trying to hit something in the game? ^ Dropping the vase? ^ Consulting the HHGG on ~newsgroup~? ^ Eating the bread? ^ Trying to do anything to the no tea? ^ Examining Arthur (and his possessions)? ^ Asking Arthur about the flathead screwdriver? ^ Wearing a towel? ^ On top of another one? ^ Reading the towel? ^ Several times? ^ Talking the the Vogon Guard? ^ Asking the robot about ~life~? ^ Or about his ~mind~? ^ Pressing the button in a Heart of Gold hallway? ^ Typing PANIC? ^ Or DON'T PANIC? ^ Typing XYZZY? ^ Typing FILL ? ^ Lying to yourself? ^ Or telling yourself the truth? ^ Looking at footnote 42? ^ Or any other footnote? ^ Typing I AM ? ^ Referring to... ^ Any object by its iainised name (the vase as ~porceliain~, for example)? ^ The man with the satchel as ~Ford Prefect~? ^ The man wearing a hat as ~Prosser~? ^ The Vogon ", (iainise) 1, " as ~Prostetnic Vogon Jeltz~? ^ The robot as ~Marvin~?"; ! Hmm, DNA never did reveal Marvin's surname, did he? :) ]; [ PrintVerb w; switch(w){ 'i//': print "take inventory"; 't//': print "talk"; 'xyzzy', 'plugh', 'plover': print "live in the past"; 'toss': print "throw"; 'why': print "ask why"; 'nick', 'nab': print "steal"; default: rfalse; } rtrue; ]; ! It was Arcum who suggested a way of turning iainising on or off. By referring ! to an object by its iainised name, or by using an 'iain' meta-verb, the mode is ! turned on, and it can only be turned off with another meta-verb. Global iainmode=0; [ Iainise x; switch(x){ 1: if (iainmode==0) print "Captain"; else print "Captiain"; 2: if (iainmode==0) print "porcelain"; else print "porceliain"; 3: if (iainmode==0) print "again"; else print "agiain"; 4: if (iainmode==0) print "against"; else print "agiainst"; 5: if (iainmode==0) print "certain"; else print "certiain"; 6: if (iainmode==0) print "brain"; else print "briain"; 7: if (iainmode==0) print "complaining"; else print "compliaining"; 8: if (iainmode==0) print "entertainment"; else print "entertiainment"; 9: if (iainmode==0) print "AGAIN"; else print "AGIAIN"; } ]; Replace DrawStatusLine; Include "Parser"; Include "trinitystat"; Include "yesno"; Global badverb; Object LibraryMessages with before [; Miscellany: if (lm_n==39) "That's not important; leave it alone."; if (lm_n==38) { ++badverb; print "That's not a verb I recognise"; if (badverb==10) {badverb=0; print ". If you're having trouble, try typing PLAYING for some advice on how to play this game";} "."; } Examine: if (lm_n==2) "It looks like every other ", (name) lm_o, " you've ever seen."; Attack: "You are obviously letting things get to you. You should learn to relax a little."; Eat: if (lm_n==1) "Stuffing ", (the) lm_o, " in your mouth would do little to help at this point."; Jump: print "Wasn't that fun?^"; YesNo.Ask("That was just a rhetorical question.", "Well, tough.", 0); rtrue; Open, Close: if (lm_n==1) "You must tell me how to do that to ", (a) lm_o, "."; Score: print "We are about to give you your score. Put on your peril-sensitive sunglasses and hit RETURN or ENTER when ready.^>> "; read buffer parse; print "^"; if (score==8494) rfalse; if (deadflag) print "In that game you scored "; else print "You have so far scored "; print random(8493), " out of a possible ", MAX_SCORE, ", in ", turns, " turn"; if (turns~=1) print "s"; return; Take: if (lm_n==2 or 3 or 10 or 11){ switch(random(3)){ 1: "Nice try."; 2: "What a concept."; 3: "You can't be serious."; } } VagueGo: YesNo.Ask("Then type it.", "I didn't think so.", 0); "Did you have any particlar direction in mind?"; Yes: "You sound rather positive."; No: "You sound rather negative."; Dig, Tie, JumpOver: switch(random(3)){ 1: "Complete waste of time."; 2: "A totally unhelpful idea."; 3: "Useless. Utterly useless."; } WaveHands: "How nice."; Buy: "Sorry, ", (the) lm_o, " isn't for sale."; Wait: "Time passes..."; ]; [ PrintRank; if (deadflag~=2) "."; ". Share and enjoy!"; ]; Replace NotifyOnSub; Replace NotifyOffSub; Replace QuitSub; Include "Verblib"; [ NotifyOnSub; meta=1; "That's not a verb I recognise."; ]; [ NotifyOffSub; meta=1; "That's not a verb I recognise."; ]; [ QuitSub; if (deadflag~=0) @quit; ; print "Do you want to leave the game?^>> "; if (YesOrNo()==true) @quit; "Ok."; ]; Object potato "baked potato" selfobj, with name "baked" "potato", after [; Eat: "Possibly the least satisfying meal you've ever had in your life."; ], before [; RouteUse: if (second~=wires) rfalse; give wires general; print "Ingenious idea! The juice in the potato activates the panel. \ Now, if only you could understand how the panel "; style underline; print "worked"; style roman; ", you'd be able to get out."; ], has edible; ! The "oddities" object is my equivalent to the "aunt's thing" in the ! HHGG game. The object wasn't used in the transcript, so I thought ! I might as well code it into something useful. ! ! Oddly enough, an early bug made 'terps crash with a 'call to non- ! routine' error, which turned out to be because of the capacity ! property. I later removed this. Object oddities "oddities" selfobj, with name "oddities" "following" "annoying" "uninteresting" "boring", description "You've always been an enthusiastic collector of oddities, but you don't really like these ones any more. It's odd how they keep turning up wherever you go.", time_left 0, time_out [; StopTimer(self); if (random(2)==1) move self to player; else {StartTimer(self, 12); move self to location;} rtrue; ], after [; Drop, Empty: StartTimer(self, 12); rfalse; Take, Remove, EmptyT: StopTimer(self); rfalse; Close: "You never have been able to do that to any of them."; Open: "They're all open already."; ], has pluralname container open; Object vase ! As far as I could see, this object wasnt used in the with name "porcelain" "porceliain" "vase" "fragile", ! transcript, but I coded some interesting behaviour anyway. short_name [; print (iainise) 2, " vase"; rtrue; ], after [; Drop: remove self; "It smashes to pieces as soon as it touches the floor."; ], capacity 1, parse_name [ wd num flag; wd = NextWord(); while (WordInProperty(wd, self, name)) { if (wd=='porceliain' && flag==0) {flag=1; iainmode=1; print "(turning on iainising)^";} num++; wd = NextWord(); } return num; ], has container open; ! And of course, every HHGG-based game just *has* to have ! a towel in it somewhere. Preferably two. And this towel has ! DON'T PANIC in 42 different languages! Object towel "yellow towel" selfobj, with name "largish" "yellow" "towel", description [; print "It bears the words ~"; self.choosename(); "~."; ], choosename [; if (self hasnt general) {give self general; print "DON'T PANIC"; return;} switch(random(42)){ 1: print "DON'T PANIC"; 2: print "NE PANIQUEZ"; 3: print "NIENTE PANICO"; 4: print "N@~AO SE APAVORE"; ! @~A is an A-tilde. 5: print "NO ASUSTASE"; 6: print "TIPPANIKJAX"; 7: print "PSYHRAIMIA"; 8: print "N@'A B@'IODH SCAOLL ORT"; ! @'A is A-acute and @'I is I-acute. 9: print "NY GOW AGGLE"; 10: print "TA DET ROLIG"; 11: print "TA DET LUGNT"; 12: print "SLAP AF"; 13: print "GEEN PANIEK"; 14: print "NIET PANIKEREN"; 15: print "MOENIE PANIEK NIE"; 16: print "KEINE PANIK"; 17: print "SLAPPADU AF"; 18: print "@:ALA H@:AT@:AILE"; ! @:A is A-umlaut. 19: print "NE PANIKUI"; 20: print "TEA PAANIKASSE SATTUV"; 21: print "NINCS G@'AS"; ! @'A is A-acute. 22: print "BEZ PANIKE"; 23, 24: print "NE PANICARI"; ! The same in both Serbian and Bosnian. OK, so this makes 41 variations, but ! there's still 42 languages. 25: print "NEDELAT PANIKA"; 26: print "NIE PANIKUJ"; 27: print "AL TILAHETZ~ and just underneath, ~AL TILAHTZI"; ! Hebrew has different words for different genders. 28: print "NATARSE"; 29: print "LA TAHREEB"; 30: print "HARAAB NAKUN"; 31: print "YEK MA"; 32: print "GHABARAO MAT"; 33: print "GHABARI BEDA"; 34: print "AWATE NASANNA"; 35: print "UOKI MAKA'U KUHEWA"; 36: print "TENANG SAJA"; 37: print "NOLI PAVERE"; 38: print "NE PANIKU"; 39: print "NON AFFOLA VOS"; 40: print "ON'TDAY ANICPAY"; 41: print "DUBON'T PUBANUBIC"; 42: print "yIlImQo'"; ! There - 42 ways of saying DON'T PANIC, finishing with... Klingon. default: print "DON'T PANIC"; } return; ], after [; Wear: print "You wrap the towel around your waist"; if (towel2 has worn) ! I considered forcing the player to take off the outer print ", over the top of the one already there"; ! towel before the inner one, but decided it was *too* realistic. ". Definitely not a fashion statement."; ], before [; Use: "The towel may be the most massively useful thing you have, but you'll have to state how you want to use it."; ], has clothing; ! The Guide - no HHGG game should be without one! Object guide "electronic edition of the HHGG series" selfobj, with name "electronic" "electric" "edition" "of" "the" "HHGG" "hitch" "hiker" "hitch-hiker" "guide" "series", description "An electronic copy of the HHGG series, including the Ultracomplete HHGG Index, and a section on the AFDA newsfroup. It bears the words ~DON'T PANIC~ in large, friendly letters on the cover.", earth 0, vogons 0, before [ w; Consult: wn = consult_from; w = NextWord(); switch(w) { 'iain': "~Iain is a webmaster, frequenting the AFDA newsgroup. He has recently gone missing.~"; 'me': "Perhaps one day you'll earn a place in the newsfroup index..."; 'afda', 'afd-a', 'newsfroup', 'froup': "~Alt.fan.douglas-adams (or, less verbosely, AFDA) is a newsfroup for (supposedly) the discussion of Douglas Adams and his writing.~"; 'group', 'newsgroup': "~It's not a group, it's a froup.~"; 'arthur', 'dent': "~An Earthman, rather unaccustomed to space travel.~"; 'ford', 'prefect': "~Ford Prefect is Arthur's friend from Betelgeuse.~"; 'prosser': "~A man from the council who attempted to knock Arthur's house down.~"; 'marvin': "~A manically depressed robot.~"; 'zaphod', 'beeblebrox': "~The President of the Galaxy.~"; 'vogon', 'vogons': if (self.vogons==0) { self.vogons=1; "~Vogons are a race of bureaucratical aliens. It's impossible to get a lift from one.^^ [Please wait - this entry is being updated through the Sub-H2G2 Net. Consult the Guide ", (iainise) 3, " for the updated entry. In the meantime, don't panic!]~"; } "~A race of bureaucratical aliens. They have now made so much money being professionally unpleasant that they are able to hire Dentrassi cooks, who will always let hitchhikers aboard.~"; 'poetry': "~Vogon poetry is, of course, the third worst in the known universe. The second is that of the Azgoths of Kria, and the very worst poetry of all perished along with its creator, Paula Nancy Milstone Jennings, in the destruction of the planet Earth.~"; 'doors', 'scc', 'sirius', 'cybernetics': "~The Sirius Cybernetics Company manufactures permenantly happy doors, manically depressed robots and shipboard computers with personality problems.~"; 'universe', 'space': "~It's unbelievably big!~"; 'earth': if (self.earth==0) { self.earth=1; "~Harmless.^^[Please wait - this entry is being updated through the Sub-H2G2 Net. Consult the Guide ", (iainise) 3, " for the updated entry. In the meantime, don't panic!]~"; } "~Mostly harmless.~"; ! As always. default: "You can't find anything about that."; } rtrue; ]; Object bread "mouldy piece of bread" selfobj, with name "mouldy" "piece" "of" "bread", description "It looks like eating this would be a very bad thing to do.", before [; Eat, Use: deadflag=1; "You slowly consume the mouldy piece of bread, and find that your hypothesis was correct: eating was a very bad thing to do."; ], has edible; ! Not really, but the dog tests for this attribute. Object unipiece "small piece of the universe" selfobj, with name "small" "tiny" "piece" "of" "the" "universe" "potu" "spotu" "unipiece", description [; print "Your very own piece of the universe. "; if (self has open) "It is currently open."; "It is closed."; ], number 0, before [; Drop, Empty: "Throw away your piece of the universe? Are you mad?"; Enter, Use: if (self hasnt open) "It's not open at the moment."; if (self.number==1) { print "The piece absorbs you, and you return to reality.^"; self.number=2; StopTimer(restartgame); PlayerTo(Kitchen2); rtrue; } if (self.number==2) { print "The piece absorbs you, and you find yourself back in the Heart of Gold."; if (tea in player) { move tea to Kitchen2; print " However, the tea doesn't come through... This must be that rare and wonderful thing - RealiTea!"; } print "^"; self.number=1; StartTimer(restartgame,20); PlayerTo(Bridge); rtrue; } deadflag=1; "Somehow, you manage to enter the piece of the universe, but it simply leads into the black void of space and, with no spaceship to pick you up, you die."; Open, Close: "The piece opens and closes in time to universal rhythms, and you have no power over those."; Receive: if (self hasnt open) "It's closed!"; if (noun==tea) { deadflag=2; ++iain.persuaded; print "You hear it land on the other side. You also hear iain cry with joy \ just before the piece closes for good. "; Endgame(); rtrue; } if (self.number==1) { move noun to Kitchen2; "You hear ", (the) noun, " fall through into reality."; } if (self.number==2) { move noun to Bridge; "You hear ", (the) noun, " fall though into the Heart of Gold."; } remove noun; "You carefully put ", (the) noun, " into the piece of the universe, and it disappears forever, into the inky blackness of space."; ThrownAt: <>; ], has ~open ~general; ! There's no point in this line, but it emphasises the fact that it can get these attributes. ! The "no tea" object... It can be shown or given to people, or ! dropped if there's tea nearby (it triggers a action) ! and it can't be referred to as 'tea' (which is why we have a parse_name). Object notea "no tea" selfobj with name "no" "tea", before [; Show, Give: ; ! So that "show/give no tea to iain" works. Drop: if (tea in location) <>; "You're talking complete nonsense; pull yourself together."; default: "You're talking complete nonsense; pull yourself together."; ], parse_name [ wd num flag; wd = NextWord(); while (WordInProperty(wd, self, name)) { if (wd == 'no') flag = 1; ! Not just "tea". num++; wd = NextWord(); } if (flag == 1) return num; return 0; ], has proper; ! Okay, I'll admit that I couldn't be bothered to code a bed, since it ! didn't seem needed, and would only serve to end the game. That's why ! "bed" appears in the room's "name" property - it displays the message ! "That's not important", giving the impression it was *thought* of. :) Object Bedroom "Bedroom" with name "mess" "magazines" "wallpaper" "curtains" "curtiains" "carpet" "bed", description "It's not a very big room, and has a computer in it. There seems to be exits to the north and west, as well as a window to the north, looking out on a fairly ordinary yet bulldozer-infested scene.", before [; Sleep: "You're not feeling tired."; WalkOut: print "You sidle outside...^"; PlayerTo(Outside); rtrue; ], n_to Outside, w_to Kitchen, has light; Object -> Computer "computer" with name "computer" "puter" "^puter" "pooter" "^pooter", description [; if (self has on) "It's nothing special. It's running Windows '95 and a few other programs you don't really care about."; "It's turned off."; ], before [; SwitchOff: if (self hasnt on) "It's already off!"; give self ~on; "Brutally, you switch the computer off."; SwitchOn: if (self has on) "It's already on!"; give self on; print "You switch the computer on. It takes a few moments to power up, then makes that annoying ~Microsoft Sound~, and sits there, placidly."; if (self hasnt general) { give self general; ! Yes, this next part *is* an in-joke. Douglas Adams worked (and still ! works) on a Mac, and it's his 5-book trilogy we're talking about here. ! Be grateful that I only had it displayed once. print " You really must get a Mac at some point, so you can type up that five-book trilogy you've got planned..."; } new_line; rtrue; ], has scenery on; Object -> window "window" with name "glass" "double" "glazed" "double-glazed" "window", before [; Examine, Search: switch(commotion.number){ 0: "There appears to be a big yellow bulldozer parked outside. There's a man lying in front of it talking to a strange - and somewhat taller - man, holding a satchel."; 1 to 5: "There's a big yellow bulldozer, and a man in a furry hat lying in front of it."; 6 to 9: print "Several yellow bulldozers are frolicking around in the rubble of someone's home. A man in a dressing gown is shouting at them"; if (Ford hasnt general) print " and a man carrying a satchel is standing beside them, placidly"; else print " and another man is lying on the ground, unconscious"; "."; default: "Everyone is running around, panicking."; } ], parse_name [ wd num flag; wd = NextWord(); while (WordInProperty(wd, self, name)) { num++; wd = NextWord(); } while (WordInProperty(wd, commotion, name)) { if (flag==0) {print "(the view out of the window)^"; flag=1;} num++; wd = NextWord(); } return num; ], has scenery; Object Kitchen "Kitchen", with name "kitchen" "mess" "implements" "cutlery" "fridge" "freezer" "cooker" "oven" "worktop" "half-finished" "meals", description [; print "Your kitchen is a mess - kitchen implements lie all over the worktop, and half-finished meals loom at you from every corner. You can retreat eastwards."; if (self hasnt general) { give self general; " One day, you think to yourself, you'll clear all this out. But today, you have more pressing problems on your mind - like finding iain."; } new_line; rtrue; ], before [; WalkOut: print "You sidle outside...^"; PlayerTo(Outside, 2); rtrue; ], e_to Bedroom, has light; Object Outside "Outside your house" with name "grass" "rubble" "roses" "rose" "rosebeds", description [; StartDaemon(commotion); "You are outside, where there are several big yellow bulldozers. You can go back into your house, south, or into your neighbour's house, to the west. There is also a path leading to the north."; ], s_to Bedroom, w_to "The door's locked.", n_to Lane, has light; Object -> Art_door "door" with name "door" "arthur^s", description "The door to Arthur's house. It seems to be locked.", before [; Open: "It's locked."; Attack: "Nope. Didn't work. Just accept it, you're not going to get in Arthur's house."; ], has scenery openable; ! Not really openable, but for the convience of Object -> mud "mud" with name "mud" "dirty" "nasty" "yucky" "ikky", ! :o) description "It has the indentation of a man in it.", before [; Enter: "No way."; ], has scenery; ! The whole destruction of Arthur's house and the Earth, and also the manipulation of Ford ! and Arthur, is done by the Commotion object's daemon. Object -> Commotion "commotion" with name "commotion" "men" "yellow" "bulldozers" "bulldozer", initial [; switch(self.number){ 0: "You see a man in a dressing gown, whom you recognise to be Arthur Dent, your neighbour, lying down in front of a bulldozer. A strange (and somewhat taller) man is talking with a man in a suit and a furry hat."; 1 to 5: "A man in a pinstriped suit is lying down in front of a bulldozer."; 6: "Several yellow bulldozers, ordered about by ", (the) Prosser, ", are frolicking in the mud."; 7 to 9: print "Several yellow bulldozers are frolicking around in the rubble of someone's home. Arthur is shouting at them"; if (ford has general) print " and ", (the) Ford, " is lying on the ground, unconscious"; else print " and ", (the) Ford, " is standing there placidly, hefting a satchel on his shoulder"; "."; default: "Everyone is running around, panicking."; } ], description [; switch(self.number){ 1 to 5: "A man in a furry hat is lying down in front of a large yellow bulldozer. He looks annoyed about something."; 6 to 10: "Bulldozers are frolicking around in the remains of Arthur's house."; default: "Everyone is running around in blind panic."; } ], number 0, daemon [; switch(++self.number){ 1: "^The men appear to reach some sort of agreement. The man in a suit lies down in front of the bulldozer, and Arthur Dent gets up. Arthur and his companion head off north."; 2 to 5: return; 6: if (location~=Outside) "^In the distance, you hear a loud crashing noise, which you assume is Arthur's house being demolished."; "^Suddenly, the man in a hat gets up and dusts himself off. On a signal from him, the bulldozers suddenly spring forward to demolish Arthur's house. Since its owner isn't there to stop them, the council succeeds."; 7: move Arthur to Outside; move Ford to Outside; if (location==Bedroom or Kitchen) return; if (location==Lane) "^Arthur and comes running out of the Pub and tears down the lane, shouting. His friend with the satchel follows close behind."; if (location==Outside) "^Arthur comes tearing down the lane, shouting at the bulldozers. His friend races after him, and then stands there, hefting his satchel on his shoulder."; 11: "^There is a loud noise coming from above."; 12: print "^The noise really is getting unbearably loud.^"; if (ford hasnt general) { give satchel open; if (ford in location) print "^You see ", (the) ford, " open his satchel.^"; } rtrue; 13: print "^A voice is making platitudes regarding the noise, through a loudspeaker.^"; if (ford hasnt general) { move device to Outside; if (ford in location) print "^You see ", (the) ford, " get out a strange device, but he drops it in the wind.^"; } rtrue; 14: print "^The voice continues.^"; if (device in Outside) { move device to Arthur; if (Arthur in location) {print "^Arthur picks up the strange device and presses it. He and "; if (ford has general) print "the unconscious ", (name) ford; else print (name) ford; print " vanish into the ether.^";} remove ford; remove Arthur; remove satchel; remove device; } rtrue; 15: "^The voices drones on."; 16: deadflag=1; "^Suddenly, the voice cuts out...^^ There is a terrible ghastly silence.^ There is a terrible ghastly noise.^ There is a terrible ghastly silence."; default: return; } ], react_after [; Take: if (noun==device && self.number==13 or 14) "Arthur is quick, but you're quicker. Taken."; ], has static; Object -> Prosser with name "man" "wearing" "in" "a" "large" "furry" "hat" "Mr" "Prosser", short_name [; if (self has general) print "Mr Prosser"; else print "man in a furry hat"; rtrue; ], description [; print "A man wearing a furry hat, "; switch(commotion.number){ 1 to 5: print "lying down in front of a bulldozer"; 6 to 10: print "ordering the bulldozers around"; default: print "running about in a blind panic"; } "."; ], life [; Attack: "You muck up all his fancy facial work. This is the last moment of satisfaction you will experience for some time."; ], parse_name [ wd num flag; wd = NextWord(); while (WordInProperty(wd, self, name)) { if (wd == 'man' || wd == 'mr' || wd == 'prosser') flag = 1; ! This bit comes from Infocom's _Trinity_, where ! it is possible to refer to the river as Styx ! and get a little voice in your ear. if (wd=='prosser') { if (self hasnt general) { give self general proper; print "A voice in your ear remarks, ~Show-off.~^^"; } } num++; wd = NextWord(); } if (flag == 1) return num; return 0; ], has animate male concealed transparent; Object -> -> hat "furry hat" with name "furry" "red" "hat", description [; "A furry hat, on ", (the) Prosser, "'s head."; ], has concealed; ! Arthur Dent is the player's neighbour (as the player ! is told at the beginning) so it's safe to assume that ! the player would know his name. Object Arthur "Arthur Dent" with name "man" "in" "wearing" "dressing" "gown" "arthur" "dent", description [; print "A man wearing a dressing gown and carrying (bizarrely) a flathead screwdriver."; switch(commotion.number){ 7 to 10: " He is shouting at the bulldozers to stop destorying his home."; 11 to 16: " He is panicking, which is hardly surprising."; default: rtrue; } ], life [; Take, Attack: ; Ask: switch(second){ 'bulldozer', 'bulldozers', 'yellow', 'home', 'prosser': "~They want to knock my house down!~"; 'house': "~It's not a house, it's a home... Or so I've been told.~"; 'flathead', 'screwdriver': "Arthur looks a bit sheepish about that.^ ~Well, I just sort of picked it up... You never know when it might come in useful.~"; 'towel': "~I've heard they can be very useful.~"; default: "Arthur pays no attention to you."; } rtrue; default: "Arthur pays no attention to you."; ], parse_name [ wd num flag; wd = NextWord(); while (WordInProperty(wd, self, name)) { if (wd == 'man' || wd == 'arthur' || wd == 'dent') flag = 1; num++; wd = NextWord(); } if (flag == 1) return num; return 0; ], orders [; "Arthur pays no attention to you."; ], has animate transparent male concealed proper; ! The screwdriver is within Arthur's bedroom in the HHGG ! game. This is a joke about the way adventure-gamers almost ! always pick up everything they can. And you can ask ! Arthur about it. Object -> screwdriver "flathead screwdriver" with name "flathead" "screwdriver" "screw" "driver", before [; Take: "It's not yours."; Steal: "You haven't stooped low enough to actually stealing your friends' possesions, however odd they may be."; ], has concealed; Object -> gown "gown" with name "dirty" "scruffy" "dusty" "dressing" "gown", description "A rather dusty dressing gown.", before [; Open, Search: "Arthur notices you and pushes your hand away quickly."; Take: "It's not yours."; Steal: "You haven't stooped low enough to actually stealing you friends' possesions."; ], has concealed openable ~open; Object Ford with name "man" "with" "carrying" "a" "satchel" "arthur^s" "friend" "ford" "prefect", short_name [; if (self.number==0) print "man with a satchel"; else print "Ford Prefect"; rtrue; ], description [; if (self has general) "Here's lying on the ground, unconscious."; "He standing in the middle of all this commotion quite placidly, hefting a satchel on one shoulder."; ], life [; Attack: if (self hasnt general) { give self general; "He goes down quite readily, utterly surprised."; } "He's already unconscious!"; Take: ; default: if (self has general) "He's unconscious!"; "Busy looking up at the sky, he ignores you."; ], orders [; default: if (self has general) "He's unconscious!"; "Busy looking up at the sky, he ignores you."; ], before [; Lie: if (self has general) "He's unconscious!"; "You tell him that you come from Betelgeuse. He doesn't seem at all surprised."; ], parse_name [ wd num flag; wd = NextWord(); while (WordInProperty(wd, self, name)) { if (wd == 'man' || wd == 'ford' || wd == 'prefect' || wd == 'arthur^s' || wd == 'friend') flag = 1; ! Another _Trinity_ bit - you see this message when ! you refer to the river as Styx. if (wd=='ford' or 'prefect') { if (self.number==0) { ++self.number; give self proper; print "~So educated,~ remarks a voice in your ear.^^"; } } num++; wd = NextWord(); } if (flag == 1) return num; return 0; ], number 0, has animate transparent male concealed; Object -> Satchel "satchel" with name "dirty" "stiained" "satchel" "stained", description [; print "A prefectly ordinary satchel, currently "; if (self has open) "open."; "closed."; ], before [; Take: if (self has general) rfalse; if (ford hasnt general) "The man with the satchel prevents you."; "It's not yours."; Steal: if (self has general) {print "There's no need for that; you've already stolen it.^"; <>;} if (ford hasnt general) "The man with the satchel prevents you."; move self to player; give self ~concealed general; "The satchel is now yours."; ], capacity 7, has openable ~open container concealed; ! The transcript mentioned "a few useless bits of paper", so ! I've taken note of the way _HHGG_ mentions that Ford keeps ! scripts in his satchel. Object -> -> scripts "scripts" with name "joseph" "and" "the" "technicolour" "dreamcoat" "godspell" "scripts" "script", description [; print "A few useless scripts"; if (self hasnt general) { give self general; print " for ~Joseph and the Amazing Technicolour Dreamcoat~ and ~Godspell~."; } "."; ], has pluralname; Object -> -> technobobs "baubles of technology" with name "technobobs" "baubles" "of" "technology", description "You can make neither head nor tail of them.", before [; Push, SwitchOn, SwitchOff: "There's no point in doing that - you don't have any idea what they are."; ], has pluralname; ! Two towels in one game! Could you ask for more? ! Well, yes, I suppose you *could* always ask for three... Object -> -> towel2 "blue towel" with name "largish" "blue" "towel" "plain" "pliain", description "A plain blue bath towel from Marks and Spencers.", after [; Wear: print "You wrap the towel around your waist"; if (towel has worn) print ", over the top of the one already there"; ". Definitely not a fashion statement."; ], before [; Use: "A towel may be the most massively useful thing you can think of, but you'll have to state how, exactly, you want to use it."; ], parse_name [ wd num flag; wd = NextWord(); while (WordInProperty(wd, self, name)) { if (wd=='pliain' && flag==0) {flag=1; iainmode=1; print "(turning on iainising)^";} num++; wd = NextWord(); } return num; ], has clothing; Object -> -> peanuts "peanuts" with name "salted" "peanuts", before [; Eat: if (location~=Hold) "It's probably better to save the peanuts for when you need some protein."; ], after ! This next bit of code tells the Vogon Hold's daemon to revert onto its ! Announcement setting, and start over from the beginning. [; Eat: hold.type=1; hold.number=0; StartDaemon(Hold); "Ah. That's better."; ], has edible pluralname; Object -> -> Device "device marked ~press here~" with name "sub-etha" "sub" "etha" "signalling" "device" "thumb" "marked" "press" "here" "button", description "It's just a small, black device, marked ~press here~", before [; Push, SwitchOn: if (commotion.number<11 || location==Hold) "Nothing happens."; print "You don't see any obvious button, but press the device in general and are pleased to experience the curious sensation of matter transference for the first time. Then, common sense smacks you upside down, and you begin to feel violently ill, before blacking out...^"; PlayerTo(fakedark); StopDaemon(commotion); rtrue; ], parse_name [ wd num flag; wd = NextWord(); while (WordInProperty(wd, self, name)) { if (wd=='button' && Dispenser in location) ++flag; num++; wd = NextWord(); } if (flag>=num) return 0; ! 'Button' was the only word typed & dispenser is in sight. return num; ]; Object fakedark "Darkness" with description "It's pitch dark and you can't see a thing.", before [; Look: if (self hasnt general) {give self general; rfalse;} "You've gone blind. Don't worry, it's probably just temporary."; Touch: "You can't move, much less feel anything."; Smell: "Your sense of smell has decided to take a holiday. Considering where you think you are, this could be agood thing."; Taste: "That's just sick."; Listen: print "You hear the hum of some very strange-sounding engines.^^ As you concentrate, you begin to make out vague shapes. You're not so much \ blind as in a very dark room, with the floor vibrating slightly beneath \ you. It smells very bad in here, and you feel weak.^"; PlayerTo(Hold,1); ! Move player to Hold but don't tell him about it. hold.type=0; ! Set Hold's daemon to protein setting. hold.number=0; ! Set Hold's daemon to beginning. StartDaemon(Hold); ! Start Hold's daemon. rtrue; Wait, Wake: rfalse; Panic: "Probably a good idea, but you should keep your mind focused on the task in hand."; Examine: if (noun==notthedark) "The darkness oozes around you."; "It's too dark to see!"; default: "After you've been through matter transference, doing anything that strenuous is a bad idea."; ], has light; ! Well, not really, but thedark doesn't seem to be working. Object -> notthedark "dark" with name "dark" "darkness", has scenery; Object Lane "Country Lane" with name "grass" "ground", description "You are standing on the country lane. To the east there is an old Pub, and back to the south is your neighbourhood.", each_turn [; if (self hasnt general && commotion.number<=4) { give self general; "^Arthur and his friend enter the Pub to the east."; } return; ], s_to Outside, e_to "You are tempted to, but the men by the door prevent you from entering.", has light; Object -> Pub "Horse and Groom" with name "horse" "and" "groom" "pub" "public" "house" "men" "door" "burly", description "It's called the Horse and Groom, and appears to be admirably disreputable. Two burly men are standing outside it the door, preventing you from entering.", before [; Enter: <>; ], has scenery; Object -> dog "dog" with name "scruffy" "dog" "mongrel", initial "A small scruffy dog is here.", description [; print "A small, scruffy "; if (self has general) print "and well-fed "; "dog. Nothing unusual, really."; ], life [; Give: if (self.number>=3) "The dog seems to have lost its appetite."; if (noun hasnt edible) "The dog's only really interested in offerings of food."; if (noun==bread) { remove noun; remove self; move DeadDog to location; "The dog eats the bread and promptly dies. A microscopic space fleet flies past, but you are oblivious to it."; } remove noun; give self general; "The dog accepts ", (the) noun, " and eats ", (itorthem) noun, " eagerly."; ], number 0, each_turn [; switch(++self.number){ 1 to 2: if (self has general) return; "^A dog barks at you for food."; 3: if (self has general) "^A microscopic space fleet flies past, but the dog, now contented, ignores it."; "^The dog gulps uncomfortably."; default: return; } ], has animate transparent; Object -> fleas "fleas" with name "dirty" "bloodsucking" "inebile" "fleas", description "You peer closely and see that the dog has a lot of fleas.", before [; Take: "No."; ], has pluralname concealed; Object DeadDog "dead dog" with name "dead" "scruffy" "dog" "mongrel", initial "A dead dog lies here.", has static; Object Hold "Vogon Hold" with description [; "A rather squallid and badly lit room, with a lot of mattresses lining the walls. There is a Babel Fish dispenser ", (iainise) 4, " one of the walls, and a door to the west."; ], before [; Panic: if ((self.type==2 && self.number>5) || (self.type==1 && self.number>11)) "I don't think that would help."; ], number 0, type 0, daemon [; if (self.type==0) { switch(++self.number){ 2: "^You begin to feel distinctly groggy."; 3: "^You begin to feel indistinctly groggy."; 4: "^You begin to feel very indistinct."; 5: deadflag=1; "^Your loss of protein from the matter transference beam kills you."; default: return; } } if (self.type==1) { switch(++self.number){ 1 to 5: return; 6 to 11: "^There is a loud gargling noise coming from the speakers in the room."; 12: "^There is a loud clomping sound coming in your direction!"; 13: remove device; StopDaemon(self); print "^Two Vogons come through the door and grab you. They allow you to keep all \ of your possessions except the strange device, and take you to see the ", (iainise) 1, ". \ He says some nonsense in Vogon, then starts to read you some poetry.^"; PlayerTo(Poetry_Room); rtrue; default: return; } } if (self.type==2) { switch(++self.number){ 1 to 5: return; 6 to 11: "^The ", (iainise) 1, " is making an announcement on the speaker system. He says that he wants you off the ship, and has sent out a search party to look for you."; 12: "^There is a loud clomping sound coming in your direction!"; 13: remove device; StopDaemon(self); print "^Two Vogons come through the door and grab you. They allow you to keep all \ of your possessions except the strange device, and take you to see the ", (iainise) 1, ". \ He says he's in a good mood today, so instead of killing you outright \ he's going to read you some poetry first.^"; PlayerTo(Poetry_Room); rtrue; default: return; } } return; ], w_to [; if (self.type>0 && self.number>5) "There's really no place to run. You don't know the ship as well as the Vogons."; print "Probably not a good idea. You're only here courtesy of the Dentrassi, remember?^"; YesNo.Ask("That was just a rhetorical question.", "Well, tough.", 0); rtrue; ], has light; Object -> mattresses "matresses" with name "mattresses" "matress", description "A lot of mattresses line the walls.", has scenery; Object -> Dispenser "babel fish dispenser" with name "babel" "fish" "babelfish" "dispenser" "machine", description "It's a curious device. It seems to be a sort of vending machine, but \ there's no place to deposit any form of currency. There is a single \ button, and a slot near the bottom.", number 0, before [; StandFront: if (vent.number==1) {self.number=1; vent.number=0; "You stand away from the vent, and stand in front of the dispenser. Now what?";} self.number=1; "Okay. Now what?"; ], parse_name [ wd num flag; wd = NextWord(); while (WordInProperty(wd, self, name)) { if (wd == 'dispenser' or 'machine') flag = 1; num++; wd = NextWord(); } if (flag == 1) return num; return 0; ], has scenery transparent; Object -> -> dispenser_button "dispenser button" with name "button" "on" "dispenser", description "A large red button, marked ~babel fish~.", before [; Push: if (fish notin dispenser) "It seems to be out of fish."; if (hold.type~=1) "Nothing happens."; if (dispenser.number==0 && vent.number==0) "A vaguely fish-shaped object shoots out of the slot, slides \ along the floor, and slips into a previously-unnoticed vent."; if (dispenser.number==0 && vent.number==1) {vent.number=0; "A vaguely fish-shaped object shoots out of a slot, and slips between \ your feet into the vent. You step away from the vent; it obviously wasn't \ the best place to stand in front of.";} dispenser.number=0; move fish to location; move robot to location; "The fish shoots out and hits you square in the knees. It flops around on \ the floor for a bit, and a robot comes out of a side panel. It looks like he \ wants your fish."; ], has scenery; Object -> -> slot "slot" with name "small" "slot", description "Just a small slot.", before [; StandFront: <>; ], has scenery; Object -> -> fish "babel fish" with name "small" "yellow" "leech-like" "leech" "like" "babel" "fish" "babelfish", description "A small, yellow, leech-like fish.", invent [; if (self has worn) print "babel fish (in your ear)"; else print "babel fish"; rtrue; ], before [; Take: if (self in dispenser) "It's still in the dispenser!"; if (robot in location) {remove robot; print "With no fish to capture, the robot returns to its hiding place.^";} rfalse; Disrobe: if (self has worn) "That's probably a bad idea."; rfalse; ], after [; Wear: hold.type=2; "Eeeeew! It feels horrid!"; ], has concealed clothing; Object -> vent "vent" with name "small" "vent", description "A small vent", number 0, before [; StandFront: if (self.number==1) "You're already standing in front of the vent", self.number=1; "Okay. Now what?"; ], has scenery; Object robot "cleaning robot" with name "small" "cleaning" "robot", each_turn [; if (fish in location) { if (self hasnt general) { give self general; return; } give self ~general; move fish to dispenser; remove self; "^The cleaning robot sweeps down on the fish, and scoops it into a compartment, before whizzing off to its hiding place."; } remove self; ], has scenery; Object Poetry_Room "Poetry Room" with description [; if (chair has general) print "You are strapped into the Poetry Appreciation Chair,"; else print "You are standing by the Poetry Appreciation Chair,"; print " in front of the ", (iainise) 1, ""; if (guard in self) print " and a Vogon Guard"; ". This doesn't look good..."; ], has light; Object -> Chair "Poetry Appreciation Chair" with name "poetry" "appreciation" "black" "leather" "chair", description [; if (self has general) "You're strapped into it."; "A black, leather chair."; ], react_before [; if (self hasnt general) rfalse; Exit, GetOff: if (noun==self or 0) "You're strapped in!"; ! I had to split this up because Inform won't accept more ! than 32 things in one switch. Grrr... Take, Disrobe, Wear, Remove, Enter, Insert, Empty, EmptyT, Transfer, ThrowAt, Give, Show, Go, VagueGo, Search, Consult, Open, Close, Unlock, GoIn, RouteUse, Use: "You're strapped in!"; WaveHands, Wave, Set, SetTo, Pull, Push, PushDir, Turn, SwitchOn, SwitchOff, Lock, Attack, Eat, Climb, Squeeze, Blow, Kiss, Rub, Drink, Cut, Dig, Jump, JumpOver, StandFront: "You're strapped in!"; Smell, Touch, Taste: if (noun~=0) "You're strapped in!"; rfalse; Struggle: "The bonds are too tight."; default: rfalse; ], before [; Enter: print "You're not anxious to hear more, are you?^"; YesNo.Ask("Well, you can't.", "Good.", 0); rtrue; ], has scenery general; Object -> Captain with name "vogon" "captain" "Prostetnic" "Jeltz" "captiain", short_name [; if (self has general) print "Prostetnic Vogon Jeltz"; else print "Vogon ", (iainise) 1; rtrue; ], description "A fairly typical Vogon - he has thick, blubbery green skin and a highly domed nose.", react_before [; Listen: if (noun==0 or self) { if (hold.type==1) "He's talking some nonsense in Vogon."; switch(self.number){ 2: print "If you insist.^^ ~...thy micturations are to me | As plurdled gabbleblotchits on a lurgid bee.~^^ This is the type of thing he's subjecting you to. Do you really want to hear more of this tripe?^"; YesNo.Ask(YesListen, "Phew!", 0); rtrue; 3: print "What, more?^^ ~Groop I implore thee, my foonting turlingdromes.~^^ It's like he's "; style underline; print "trying"; style roman; " to make it as bad as possible. And the pain is indescribable."; 4: "You're a sadist, you know that?^^ ~And hooptiously drangle me with crinkly bindlewurdles, | Or I will rend \ thee in the gobberwarts with my blurglecruncheon, see if I don't!~^^ Ah, good. He seems to have finished."; } } rfalse; ], each_turn [; if (hold.type==2) { switch(++self.number){ 2: "^Oh, dear. The ", (iainise) 1, " has begun reciting one of his works. The words \ go through you like lances, and you're fairly ", (iainise) 5, " someone has snuck up \ and started drilling needles through your briain."; 4: "^The ", (iainise) 1, " continues to read the poetry."; 6: "^Curious. The ", (iainise) 1, " asks you what you thought of the poetry."; 10: if (self.asklie~=2) { deadflag=1; "^The ", (iainise) 1, " summons a guard, who takes you to another Hold, and uses a peculiar machine to disintegrate you. It seems that he wasn't best pleased at the fact that you didn't tell him about his poetry."; } move guard to location; "^The ", (iainise) 1, " summons a guard to throw you out the nearest airlock. He's \ a big one too, at least three times the size of the \ two that picked you up earlier."; default: return; } } switch(++self.number){ 2: "^Although you can't understand a word of it, it seems that the ", (iainise) 1, " has \ started reading one of his works. The words go through you like lances, and \ you're fairly ", (iainise) 5, " someone has snuck up and started drilling needles through \ your ", (iainise) 6, "."; 4: "^The ", (iainise) 1, " continues to read what sounds like poetry."; 6: "^The ", (iainise) 1, " appears to finish reading, and asks what sounds like a question, although you can't understand it."; 10: deadflag=1; "^The ", (iainise) 1, " summons a guard, who takes you to another Hold, and uses a peculiar machine to disintegrate you."; default: return; } ], before [; Lie: if ((hold.type==1) || (self.number<6 || self.number >=10)) "You can't think of anything to lie about."; if (self.asklie==0) { self.asklie=1; print "What, outright?^"; YesNo.Ask(YesLie, "That's good, then.", 0); rtrue; } if (self.asklie==1) { ++self.asklie; "Oh, very well.^^ You tell him you thought the imagery was quite invocative of various \ problems rent in the whole of space-time, and that he would touch the \ inner Vogonity of any who would care to listen to his words.^^ He didn't take it well. It seems like you used too many big words."; } "You've already done enough lying for today."; Talk: if (self.number>=2 && self.number<=5) "The pain is too much for you to do anything but grunt."; if (self.number>=6 && self.number<=9) {print "Lie? "; <>;} "You manage to mutter some curses in the ", (iainise) 1, "'s general direction."; ], parse_name [ wd num flag; wd = NextWord(); while (WordInProperty(wd, self, name)) { ! Yet another _Trinity_ bit - this gets shown if the ! player (correctly) refers to the island as "elugelab". if (wd=='prostetnic' or 'jeltz') { if (self hasnt general) { give self general; give self proper; print "~Impressive,~ remarks a voice in your ear.^^"; } } if (wd=='captiain' && flag==0) {flag=1; iainmode=1; print "(turning on iainising)^";} num++; wd = NextWord(); } return num; ], number 0, asklie 0, has animate male concealed; Object -> poetry "poetry" with name "poetry" "scripts", description "You can't see it!", before [; Enjoy: "You are incapable of doing so."; ], has scenery; Object Guard "Vogon Guard" with name "vogon" "guard", description [; "A Vogon Guard, anatomically very similar to the ", (iainise) 1, ". At least he doesn't write poetry."; ], number 0, spoken 0, each_turn [; switch(++self.number){ 2: give chair ~general; "^The Guard takes the straps off the chair."; 3: print "^The Guard hauls you off down a corridor...^"; PlayerTo(Hallway1); 4: print "^The Guard hauls you off down a corridor...^"; PlayerTo(Hallway2); 5: print "^The Guard hauls you off down a corridor...^"; PlayerTo(Hallway3); 6: print "^The Guard hauls you off down a corridor...^"; PlayerTo(Hallway4); 7: print "^The Guard hauls you off down a corridor...^"; PlayerTo(Hallway5); move self to location; rtrue; 8: print "^The Guard pushes you into Airlock Three and closes the door.^"; PlayerTo(Airlock); rtrue; } move self to location; ! For numbers 1 to 6, self.breathe(); ! these are done after rtrue; ! the switch() case. ], breathe [; if (self has general) return; switch(self.number){ 3: "^Hmm. Breathing seems to be a problem."; 4: "^The guard is holding onto your neck so tightly that you're finding it hard to breathe."; 5: "^You struggle to get more air into your lungs, unsuccessfully."; 6: deadflag=1; "^You die from lack of oxygen."; } ], before [; Attack: <>; Talk: if (self hasnt general) "You only expend more of your valuable air supply."; switch(++self.spoken){ 1: "He doesn't seem to want to enter into conversation. He keeps saying \ that resistance is useless, and continues to drag you along the corridor."; 2: "He doesn't want to open up to you. You suppose it would help if you were from \ Belteguese -- they're rumoured to have the best sort of \ conversationalists there."; default: "He doesn't want to talk to you."; } ], life [; Give, Show: "The guard isn't interested in bribes."; Ask, Tell: <>; ], react_before [; Struggle: if (self.number<3) rfalse; if (self has general) "You struggle some more, but to no avail."; give self general; "That's a little better. Now he's only half-throttling you."; Go, VagueGo: "The guard prevents you."; Breathe: if (self has general) "You can breathe ", (iainise) 3, " now, but not very well."; "You try, but can't manage get much air, what with the stranglehold the guard has on you."; ], has animate male; Class Hallway with short_name [; print "Hallway "; if (self provides type) PrintOrRun(self,type); else print "T5687 W"; rtrue; ], description "A rather dull hallway.", has light; Hallway Hallway1 with type [; print "J4545 B"; ]; Hallway Hallway2 with type [; print "J8636 T"; ]; Hallway Hallway3 with type [; print "K1348 D"; ]; Hallway Hallway4 with type [; print "C7345 N"; ]; Hallway Hallway5 with type [; print "W5643 I"; ]; Object Airlock "Airlock Three" with description "It's pretty much a big metal room. There's a darkened panel next to the \ door you were just thrown out of, and a timer on the door across from it.", before [; Go: "There's nowhere to run."; Panic: "Not just yet."; ], number 0, each_turn [; switch(++self.number){ 2: print "^Oh. The door has just opened. And not the one back into the ship.^"; PlayerTo(Space); rtrue; } ], has light; Object -> Timer "timer" with name "neon" "sign" "timer", description "Not very much time left...", has scenery; Object -> Panel "panel" with name "small" "darkened" "metal" "panel", description [; print "A small panel."; if (self has open) " It is currently open, and wires dangle out of it."; " It is currently closed."; ], after [; Open: "After a little bit of struggling, you manage to get it open. Wires dangle everywhere."; ], capacity 1, has scenery openable ~open container; Object -> -> Wires "wires" with name "coloured" "colored" "dangling" "wires", description "Coloured wires of all sorts.", before [; RouteUse: if (second==potato) <>; "That doesn't seem to work."; ], has scenery; Object Space "Space" with description "The vast emptiness of space.", number 0, each_turn [; switch(++self.number){ 2: "^You have two minutes of air left. Your lungs feel as if they're on fire, \ and the smaller capillaries near your skin have just broken. You seem to be \ far enough away from the sun not to get burned, but you're unquestionably warm.^^ You're not going to panic just yet, though."; 3: "^You have one minute of air left. You're tempted to let it out and see if you \ pinwheel in space for all eternity, but the blood vessels in your eyes \ have just popped, so that's pretty much out. It's strange how silent \ space is. You're kinda getting used to the occasional twinge of pain as \ blood emerges from my body and immediately freezes into place, but you \ wish it would end soon."; 4: print "^You have two seconds of air left. You're still floating in --^^\ You have been plucked from space at a terribly high improbability rate. \ To your right there is a duck in loafers sitting by the beach, and an \ infinite amount of monkeys on typewriters in the distance. Over to your \ left someone has just come out of a movie theatre proclaiming the \ showing of the blockbuster ", (Emphasis) underline, "Hitchhiker's Guide to the Galaxy", (Emphasis) normal, ", and somewhere nearby a hundred thousand million eggs just deposited on a \ planet where almost everyone has died of a plague just two minutes \ before.^^\ You appear to be in perfect health, and notice your small piece of the \ universe opening in response to some kind of probability factor.^^ There is a door to your east. It is wobbling, but it is still a door.^"; PlayerTo(Cubicle,1); give unipiece open; rtrue; } ], before [; Panic: "Not just yet."; Listen, Wait, Look, Examine: rfalse; default: "It's very difficult to do anything in open space."; ], has light; ! You might argue that it doesn't, but we get all sorts of problems if we don't set this. Object Cubicle "Cubicle" with description "A small pink cubicle.", e_to [; <>; ], has light; Object -> Wobble_Door "door" with name "wobbling" "door", initial "There is a door to your east. It is wobbling, but it is still a door.", description "A pink door. It seems to be rather vague as to whether it wants \ to be a door or a vast stretch of ocean, because it is wobbling somewhat.", before [; Enter: print "You go through the door, and you're now on some sort of ship.^"; StartDaemon(Marvin,1); PlayerTo(EntryBay); rtrue; Open: "It's already open."; ], has door openable open; Object EntryBay "Entry Bay Two" with description "An entry bay, seemingly for some sort of spaceship. There's a brochure on the floor, \ and a long corridor stretches to the north. Oddly, there is no longer a door to the east.", w_to "The door seems to have disappeared.", n_to "The door seems to realise that you haven't been greeted yet, and refuses to open for you.", has light; ! The transcript is uncertiain as to whether the player *can* take ! the brochure. I've decided that he can't, but that's just me... Object -> Brochure "brochure" with name "brochure" "magazine", description "It's just a bunch of advertisements to impress your friends once you've \ purchased a multi-million-dollar spacecraft for a participating \ government. All flash, no stash.", before [; Take: <>; ], has scenery; Object Marvin with name "manically" "depressed" "robot" "marvin", number 0, short_name [; if (self has general) print "Marvin"; else print "robot"; rtrue; ], initial [; if (self has general) print "Marvin"; else print "A robot"; if (self.number==-999) " is lying in a corner."; " is sulking here."; ], description [; if (self.number==-999) "He's turned himself off."; "He's terribly morose, and not much of a conversationalist. Strangely, \ he seems to have been expecting someone else."; ], react_before [; Go, VagueGo: if (self.number==-999) rfalse; "The robot prevents you.^~I have to take you up to the bridge. You'll probably get lost if you wander around.~"; ], before [; SwitchOff: if (self.number==-999) "He's already off."; print_ret (The) self, " prevents you, sullenly."; SwitchOn: if (self.number~=-999) "He's already on."; print_ret (The) self, " raises his head, looks around, and then turns himself off ", (iainise) 3, "."; Enjoy: "You try to enjoy ", (the) self, "'s complaints, but find yourself sweating with the effort, and desist."; ], mindasked 0, iainasked 0, life [; if (self.number==-999 && (action~=##Take or ##Attack)) "He's turned himself off."; Ask: switch(second){ 'ship', 'spaceship': "He says it's a stolen ship, named the G.S.S. Heart of Gold."; 'thief', 'iain': if (self.iainasked==0) { ++self.iainasked; "The robot says the ship was stolen by none other than iain!^^ All you manage to come up with at this point is ~Well, well, well ... \ iain.~ Not terribly intelligent, but there it is."; } "~I've told you about him.~"; 'life': "~Life! Don't talk to me about life!~"; 'intelligence', 'his', 'mind': if (self.mindasked==0) { ++self.mindasked; print "~Let me show you. Think of a number, any number.~^>> "; read buffer parse DrawStatusLine; "~Wrong! See what I mean?~"; } "~I've already told you about that.~"; } ], daemon [; switch(++self.number){ 1: "^You hear what seems to be a set of Slinkys (tm) coming your way."; 2: move self to location; "^A robot comes through the nearest door and tells you that he's been \ ordered to take you up to the bridge."; 3: print "^The robot leads you out. He's terribly morose, and not much of a conversationalist. \ Strangely, he seems to have been expecting someone else. He leads you through \ several somewhat annoying doors. More apparently loom on the horizon.^"; PlayerTo(HOGHallway1); 4: print "^The robot leads you off down another corridor...^"; PlayerTo(HOGHallway2); 5: print "^The robot leads you off down another corridor...^"; PlayerTo(HOGHallway3); 6: print "^The robot leads you off down another corridor...^"; PlayerTo(HOGHallway4); 7: print "^The robot leads you off down another corridor...^"; PlayerTo(HOGHallway5); 8: print "^The robot leads you to the Bridge, then turns himself off and sits in a corner.^"; PlayerTo(Bridge); move self to location; self.number=-999; StopDaemon(self); return; default: return; } move self to location; ! For numbers 3 to 7, rtrue; ! these happen... ], parse_name [ wd num; wd = NextWord(); while (WordInProperty(wd, self, name)) { ! Yet *another* _Trinity_ bit - you see this if the ! player calls the thin man "oppenheimer". if (wd=='marvin') { if (self hasnt general) { give self general; give self proper; print "A voice in your ear remarks, ~Indeed.~^^"; } } num++; wd = NextWord(); } return num; ], has animate male; Class HOGHallway with name "light" "lights" "doors" "door", short_name [; print "Hallway"; if (self provides type) {print " "; PrintOrRun(self,type);} rtrue; ], description [; print "A hallway, bright with shining lights."; if (button hasnt general) print " A large button sits invitingly on the wall."; new_line; rtrue; ], has light; HOGHallway HOGHallway1 with type [; print "5164"; ]; HOGHallway HOGHallway2 with type [; print "6533"; ]; HOGHallway HOGHallway3 with type [; print "5902"; ]; HOGHallway HOGHallway4 with type [; print "4571"; ]; HOGHallway HOGHallway5 with type [; print "4242"; ]; Object button "button" with name "large" "inviting" "red" "blue" "button", description "A large blue button, labelled with the word ~RED~.", before [; Push: give self general; remove self; "A sign lights up, reading, ~please do not press this button ", (iainise) 3, ".~"; ], found_in [; if (location ofclass HOGHallway && self hasnt general) rtrue; else rfalse; ], has scenery; Object Bridge "Bridge" with name "viewscreen" "screen" "door" "doors" "chair" "chairs" "console" "consoles", description "It's kinda showy, and generally in bad taste all around. Still, someone \ must have liked it. There are exits behind you, to the west and to \ the east. There's a multi-faceted viewscreen to the north, and chairs and \ consoles kind of scattered about.", e_to "The door won't open for you.", w_to "The door won't open for you.", s_to "The door won't open for you.", n_to "The viewscreen is that way.", has light; Object -> Iain "Iain" with name "missing" "iain" "webmaster" "poster", initial "Iain is here.", description [; switch(random(3)){ 1: "You know who he is already!"; 2: "Iain is iain."; 3: "IAIN is a recursive acronym for IAIN And IAIN's Nachos."; } ], number 0, persuaded 0, begged 0, hhgged 0, frouped 0, apologies 0, each_turn [; switch(self.number){ 1: ++self.number; "^Iain asks you where Arthur and Ford are."; 3: ++self.number; "^Iain asks if you've managed to find any tea."; 5: unipiece.number=1; ++self.number; StartTimer(restartgame,20); "^Iain mentions that he's going to have to start the text adventure ", (iainise) 3, " so he can meet Ford and Arthur. \ You notice a subtle alteration in the arrangement of atoms in your piece of the universe."; } ], orders [; No: if (self.number~=4) "~You sound a bit negative...~"; <>; Yes: if (self.number~=4) "~You sound a bit positive...~"; print "Lie? "; <>; ], before [; Talk: if (self.number>0) "You're already conversing with him."; ++self.number; "He seems surprised to see you. He didn't think anyone else could get \ into this particular subdivision of reality."; Lie: "You think he'd be able to tell."; Truth: if (self.number==2) <>; if (self.number==4) <>; "You can't think of anything to be honest about to him."; Beg: if (self.begged~=0) "You've already done that."; ++self.persuaded; ++self.begged; "He says he'll consider it."; Froup: if (self.frouped~=0) "You've done that already."; ++self.persuaded; ++self.frouped; "He says he's very sorry, and that he'll be back soon."; Intruded: if (self.apologies~=0) "You've already done that."; ++self.persuaded; ++self.apologies; "He appreciates the gesture, but no apology is necessary."; ], life [; Show: switch(noun){ notea: if (self.number<4) "There's no point in that."; if (self.number>4) "You've done that."; ++self.number; "He seems a bit upset at that. It appears the Nutrimatic machines have \ lived up to their reputations."; Guide, towel, towel2: <>; } Give: switch(noun){ notea: <>; Guide, towel, towel2: if (self.hhgged~=0) "He politely refuses your offer."; ++self.persuaded; ++self.hhgged; move noun to self; "He seems quite pleased with it. He says that he might come back even \ sooner now that you've been so nice to him."; } Tell: switch(second){ 'no', 'tea', 'notea': <>; 'ford', 'arthur', 'truth': if (self.number~=2) "There's no point in doing that now."; ++self.number; "He appears a little upset, but then realizes that this means he can go \ through the whole ~steal the ship~ routine ", (iainise) 3, ", and that cheers him up."; 'froup': <>; 'group': "~It's not a group; it's a froup.~"; } ], has animate male proper transparent; ! Okay, so it was pretty nasty of me to *actually* restart the game ! after the 20-turn time limit, but I thought it was quite fun. :) Object restartgame "timer object" with time_left 20, time_out [i; StopTimer(self); print "^You feel a peculiar wrenching, as reality twists itself through five dimensions, and...^^"; @read_char 1 i; ! 0->$10 = 0->$10 | $$10; !font off; !print "restarting"; @read_char 1 i; @restart; ], has concealed; Object Kitchen2 "Kitchen", with name "mess" "implements" "cutlery" "fridge" "freezer" "cooker" "oven" "worktop" "half-finished" "meals" "scenery", description "Your kitchen is a mess - kitchen implements lie all over the worktop, and half-finished meals loom at you from every corner. You can retreat eastwards.", e_to [; if (IndirectlyContains(player,tea)==true) print "You haven't done anything with that tea yet! Surely you don't want to leave now?^"; else print "There's some tea here! Surely you don't want to leave it?^"; YesNo.Ask("Well, I don't want you to, and I'm the computer.", "Good.", 0); rtrue; ], has light; Object -> tea "blue maroon ginger spice cinnamon tea" with name "blue" "maroon" "ginger" "spice" "cinnamon" "tea", initial "There is blue maroon ginger spice cinnamon tea here!", description "Wow! Some tea!", after [; Take: remove notea; "tea: Taken!^ no tea: Dropped."; Drop: move notea to player; "tea: Dropped.^ no tea: Taken."; ], before [; Drink, Enjoy: deadflag=2; print "You drink the tea! "; Endgame(); rtrue; ]; [ Initialise; !if (0->$10 & $$10) print "Just restarted."; !font off; print 0->$10; !restartgame.time_out(); TitlePage(); location = Bedroom; ! Sets starting room. lookmode = 2; ! Maximum verbosity! notify_mode=false; ! No score notification. player.life = PlayersLife; ! Kills the player if he attacks himself. move vase to player; ! Because. "^", (Emphasis) underline, "Welcome! If you are stuck, the HINTS, WALKTHRU and original TRANSCRIPT are at your disposal. There is also advice on PLAYING the game, and the CREDITS, if you're interested. The afdanians among you may wish to turn IAIN MODE ON or OFF.", (Emphasis) normal, "^^^You finish eating your fairy cake and think that it would probably be a good idea to go and look for iain now. Glancing around, you find yourself in a darkened bedroom, without any tea.^"; ]; [ TitlePage i; @erase_window -1; print "^^^^^^^^^^^^^^^^^^"; i = 0->33; if (i==0) i=80; i=(i-50)/2; style bold; font off; spaces(i); @set_colour 3 1; print " SEARCHING FOR IAIN^"; @set_colour 1 1; style roman; print "^^"; spaces(i); print " [Please press SPACE to begin.]^"; font on; box ">Speaking of our Great And Mighty Webmaster, " ">where has he been lately? " ">I've not seen hide nor hair of him since ... " ">since ... well, it's been " ">a while, anyway. " "> " "Hey ya i noticed that a few days ago... Iain? ... " "humph, guess he's not here, perhaps he went to " "go check on the (oh god, I know I'll get this wrong) " "blue maroon ginger spice tea? (I bet I left out the cinnamon)" " " " -- {Roy Stark}, replying to POTU. "; do { @read_char 1 0 0 i; } until (i==32 or 10 or 13 or 110 or 78 or 132 or 113 or 81 or 131 or 82 or 114 or 108 or 76); if (i==113 or 81 or 131) {@erase_window -1; print "^^^"; ; TitlePage();} ! Has the player typed 'Q' or '<-'? if (i==82 or 114 or 108 or 76) {@erase_window -1; ; TitlePage();} ! Has the player typed 'R' or 'L'? @erase_window -1; rtrue; ! No? Well, return to the Initialisation. ]; [ YesListen; <>; ]; [ YesLie; <>; ]; [ PlayersLife; Attack: deadflag=1; "Done."; Ask, Tell, Answer, Talk: "Talking to yourself is the first sign of impending mental collapse."; default: rfalse; ]; [ Endgame; score=8494; switch(iain.persuaded){ 0: "After a very long time, iain \ returns to AFDA, ", (iainise) 7, " about how you were all \ horrible to him when you visited his ship. But at least he returned."; 1, 2: "After a long time, iain returns to \ AFDA, and thanks you for persuading him to come back."; 3, 4: "After a while, iain returns to AFDA, and \ says he's very glad to be back, thanks your persuasion."; 5: "Iain returns as soon as he finishes the text adventure, and \ thanks you for sending him the tea."; default: "After a while, iain returns to AFDA."; } rtrue; ]; Include "Grammar"; ! When writing the Use and RouteUse actions, I tried to develop ! quite generic routines, so I could import them into any later ! games with minimum fuss. [ UseSub; if (noun has edible) {print "(eating ", (the) noun, ")^"; <>;} if (noun has clothing) {print "(wearing ", (the) noun, ")^"; <>;} if (noun has switchable && noun has on) {print "(switching off ", (the) noun, ")^"; <>;} if (noun has switchable && noun hasnt on) {print "(switching on ", (the) noun, ")^"; <>;} if (noun has talkable || noun has animate) {print "(talking to ", (the) noun, ")^"; <>;} if (noun has door) {print "(opening ", (the) noun, ")^"; <>;} if (noun has openable && noun has open) {print "(closing ", (the) noun, ")^"; <>;} if (noun has openable && noun hasnt open) {print "(opening ", (the) noun, ")^"; <>;} if (noun has container) {print "(emptying ", (the) noun, ")^"; <>;} "You'll have to be more specific about how you want to use ", (the) noun, "."; ]; [ RouteUseSub; if (noun has container && second has container) {print "(emptying ", (the) noun, " into ", (the) second, ")^"; <>;} if (noun in player && second has container) {print "(putting ", (the) noun, " into ", (the) second, ")^"; <>;} if (noun in player && (second has animate || second has talkable)) {print "(giving ", (the) noun, " to ", (the) second, ")^"; <>;} "You'll have to be more specific about how you want to use ", (the) noun, " with ", (the) second, "."; ]; [ DontPanicSub; switch(random(2)){ 1: "Why not? Your position appears quite hopeless."; 2: "Very clever. It looks like there's a lot you should be panicking about."; } ]; [ DontWaitSub; meta=1; "Time doesn't pass..."; ]; [ DontActSub; meta=1; "Not done."; ]; [ EnjoySub; if (noun has animate) "This is family ", (iainise) 8, ", not a video nasty."; "Not difficult at all, considering how enjoyable ", (the) noun, " is."; ]; [ PanicSub; "Not surprised."; ]; [ StealSub; if (noun in player) "That's already yours!"; keep_silent=true; ; keep_silent=false; if (noun in player) print_ret (The) noun, " is now yours."; rtrue; ]; [ GreetYouSub; "Pleased to meet you. I'm your computer."; ]; [ WhySub; "Why not?"; ]; [ IsSub; "Is not!"; ]; [ IsNotSub; "Is too!"; ]; ! The HHGG game simply says "I don't know the word ~xyzzy~" but ! Inform games don't do that. I've created a verb to say that ! about magic words. [ XyzzySub; "I don't know the magic word ~", (address) verb_word, "~."; ]; [ StruggleSub; "You have nothing to struggle ", (iainise) 4, "."; ]; [ BegSub; "He hasn't left."; ]; [ WhoLieSub; "You'll have to state who you want to lie to."; ]; [ LieSub; if (noun==player) "There's no point in lying to yourself: Deep down inside, you know the truth."; "You tell ", (the) noun, " that you come from Betelgeuse. He looks at you oddly."; ]; ! The "fill" verb produces this response in the HHGG game, ! and the "fill" verb was totally useless in this game, anyway. [ PhilSub; "Phil who?"; ]; [ StandFrontSub; if (noun in player) "You can't stand in front of that - it's in your inventory!"; if (noun has animate) print_ret (The) noun, " pushes you out of the way."; "You stand in front of ", (the) noun, "."; ]; [ TalkSub; if (noun==player) "Talking to yourself is the first sign of impending mental collapse."; print_ret (The) noun, " doesn't seem interested in conversation."; ]; [ TruthWhoSub; "You'll have to say who you want to be honest to."; ]; [ TruthSub; if (noun==player) "Talking to yourself is the first sign of impending mental collapse."; "You tell ", (the) noun, " that you come from Earth. He doesn't seem surprised."; ]; [ FroupSub; if (noun==player) "Talking to yourself is the first sign of impending mental collapse."; "It doesn't!"; ]; [ IntrudedSub; if (noun==player) "Talking to yourself is the first sign of impending mental collapse."; "He lightly waves the apology aside."; ]; [ ViewScriptSub x; meta=1; print "Viewing this will spoil almost all of the game for you, and it's very long, so you may wish to turn TRANSCRIPT ON first. Are you sure you want to view it?^>> "; x=YesOrNo(); if (x==false) "Good."; Transcript(); rtrue; ]; [ WhatNoteSub; meta=1; "Please type ~FOOTNOTE #~ to retrieve that footnote."; ]; [ FootnoteSub; if (noun==42 or 23) "[** Player error: Smartass detected. **]"; "That footnote [", noun, "] has been footnapped. Sorry for the inconvenience caused."; ]; [ FindSub; if (noun==player) "You're right here."; if (noun in player || InDirectlyContains(player,noun)==true) "You're holding it."; print_ret (CTheyreorthats) noun, " right here."; ]; [ FindIainSub; if (iain in location) "He's right here!"; "If only it were as easy as that..."; ]; [ FindSummatSub; "You'll have to do that yourself."; ]; [ KickSub; if (noun==player) "Obvious, wasn't it?"; <>; ]; [ BreatheSub; "You don't need to tell me ", (Emphasis) underline, "everything", (Emphasis) normal, " you want to do!"; ]; [ HideSub; "You'll have to fight your fears, not cower behind the parser."; ]; [ FollowInSightSub; print_ret (The) noun, " doesn't seem to be going anywhere."; ]; [ FollowOutSightSub; "You've no idea where that is."; ]; [ WalkOutSub; "There's no need."; ]; [ KnockSub; "There is no reply."; ]; [ PlayingSub; bla1.description(); print "^"; bla2.description(); "^^Note that commands involving file manipulation may not work from within the ZPlet."; ]; [ CreditsSub; "The transcript was written by pieceoftheuniverse and turned into a game by Alex Watson. Thanks go to:^^ ", (Emphasis) bold, "Graham Nelson", (Emphasis) normal, " for Inform and the Designer's Manual.^ ", (Emphasis) bold, "Infocom", (Emphasis) normal, " and especially ", (Emphasis) bold, "Brian Moriarty", (Emphasis) normal, " for their brilliant IF writing and inspiration.^ ", (Emphasis) bold, "Douglas Adams", (Emphasis) normal, " for the HHGG in all its many forms.^ The inhabitants of ", (Emphasis) bold, "alt.fan.douglas-adams", (Emphasis) normal, ", but particularly ", (Emphasis) bold, "Arcum, Screwtape, Paul Andinach", (Emphasis) normal, " and (of course) ", (Emphasis) bold, "iain,", (Emphasis) normal, " for playing the game and ironing out many of the bugs.^ The many ", (Emphasis) bold, "authors of IF", (Emphasis) normal, ", particularly ", (Emphasis) bold, "Robinson J. Wheeler, Andrew Plotkin and Nick Montfort", (Emphasis) normal, ", for their inspiration and the loan of their ideas.^ ", (Emphasis) bold, "L. Ross Raszewski", (Emphasis) normal, " for the InvisiHints and YesNo libraries.^ ", (Emphasis) bold, "John Holder and Magnus Olsson", (Emphasis) normal, " for JZip and JZExe respectively.^ ", (Emphasis) bold, "rec.arts.int-fiction", (Emphasis) normal, " for their help in various technicalities.^ ", (Emphasis) bold, "My friends in and out of AFDA", (Emphasis) normal, " for their support and criticism."; ]; [ IainOnSub; if (iainmode==1) "[Iainising is already on.]"; iainmode=1; "[Iainising is now ON. Please type IAIN MODE OFF to revert to normal mode.]"; ]; [ IainOffSub; if (iainmode==0) "[Iainising is already off.]"; iainmode=0; "[Iainising is now OFF. Please type IAIN MODE ON or refer to an object by its iainised name to turn it on again.]"; ]; [ CommentSub; ]; verb "use" * noun -> Use * noun "with" noun -> RouteUse; verb "don^t" "dont" * "panic" -> DontPanic * "wait" -> DontWait ! These two verb-routines set meta to 1, * topic -> DontAct; ! causing no time to pass. verb "enjoy" * noun -> Enjoy; verb "panic" * -> Panic; verb "steal" "nick" "nab" * multi -> Steal; verb "why" "why?" * -> Why * "?" -> Why; verb "is" * -> Is * "too"/"too!" -> Is * "too"/"too!" "!" -> Is * "not"/"not!" -> IsNot * "not"/"not!" "!" -> IsNot; verb "xyzzy" "plugh" "plover" * -> Xyzzy; verb "struggle" * -> Struggle; verb "talk" "t//" * creature -> Talk * "to" creature -> Talk * creature "about" topic -> Ask * "to" creature "about" topic -> Ask; verb "beg" * creature "to" "come" "back" -> Beg * creature "to" "return" -> Beg; verb "apologise" "apologize" * "to" creature "for" "intrusion" -> Intruded * "to" creature "for" "the" "intrusion" -> Intruded * "to" creature -> Intruded * "for" "intrusion" "to" creature -> Intruded; verb "footnote" "note" * -> WhatNote * number -> Footnote; verb "toss" * multiheld -> Drop * multiexcept 'in'/'into'/'down' noun -> Insert * multiexcept 'on'/'onto' noun -> PutOn * held 'at'/'against'/'on'/'onto'/'against' noun -> ThrowAt * held 'at'/'against'/'on'/'onto'/'agiainst' noun -> ThrowAt; verb "find" * noun -> Find * "iain" -> FindIain * topic -> FindSummat; verb "kick" * noun -> Kick; verb "pinch" * "me"/"myself" -> Wake * creature -> Attack; verb "breathe" * -> Breathe; verb "hide" * -> Hide; verb "follow" * noun -> FollowInSight * topic -> FollowOutSight; verb "knock" * creature -> Attack * "on" creature -> Attack * noun -> Knock * "on" noun -> Knock; verb meta "playing" * -> Playing * "the" "game" -> Playing; verb meta "credits" * -> Credits; verb meta "iain" "iainising" "iainizing" * -> IainOn * "on" -> IainOn * "off" -> IainOff * "mode" "on" -> IainOn * "mode" "off" -> IainOff; verb meta "`" ":" * topic -> Comment; extend "walk" last * "outside"/"out" -> WalkOut; extend only "transcript" "script" replace * -> ViewScript * "on" -> ScriptOn * "off" -> ScriptOff; extend "tell" first * "truth" -> TruthWho * "the" "truth" -> TruthWho * "truth" "to" creature -> Truth * "the" "truth" "to" creature -> Truth * creature "truth" -> Truth * creature "the" "truth" -> Truth * creature "the" "froup" "misses" "him" -> Froup * creature "that" "the" "froup" "misses" "him" -> Froup; extend "speak" replace * creature -> Talk * "to" creature -> Talk * "to" creature "about" topic -> Ask * topic 'to' creature -> Answer; extend "lie" first * -> WhoLie * creature -> Lie * "to" creature -> Lie; extend "look" last * "out" noun -> Search * "out" "of" noun -> Search; extend "fill" replace * topic -> Phil; extend "give" first * "up" -> Quit; extend "throw" last * "in" "towel" -> Quit * "in" "the" "towel" -> Quit * "the" "towel" "in" -> Quit * "towel" "in" -> Quit; extend "i//" last * "am" topic -> GreetYou; extend "taste" first * -> Taste; extend only "feel" "grope" first * -> Touch; extend "stand" last * "in" "front" "of" noun -> StandFront; extend only "put" first * noun "in"/"inside"/"into" "ear" -> Wear * noun "in"/"inside"/"into" "my" "ear" -> Wear; verb "place" * held "in"/"inside"/"into" "ear" -> Wear * held "in"/"inside"/"into" "my" "ear" -> Wear * multiexcept 'in'/'inside'/'into' noun -> Insert * multiexcept 'on'/'onto' noun -> PutOn * 'on' held -> Wear * 'down' multiheld -> Drop; #ifndef DEBUG; [ CommandsReadSub; @input_stream 1; "[Replaying commands.]"; ]; [ CommandsOnSub; @output_stream 4; "[Command recording on.]"; ]; [ CommandsOffSub; @output_stream -4; "[Command recording off.]"; ]; verb meta "replay" * -> CommandsRead; verb meta "recording" * -> CommandsOn * "on" -> CommandsOn * "off" -> CommandsOff; #endif; Global hint_menu=my_hint_menu; Constant NO_GRAMMAR; Constant HINT_STYLE 1; Constant ALTMENU_PROP_STUBS; Constant LASTH__TX "^^^[End of transmission.]"; Constant MENU_MARKER '>'; Include "utility"; Include "domenu"; Include "AltMenu"; Replace HelpSub; Include "Hints"; Menu my_hint_menu "Hints" with seen 0; Menu -> "On Earth"; HintTopic -> -> "What do I do here?"; Hint -> -> -> "Keep the aim of the game in mind."; Hint -> -> -> "...Which is to find iain."; Hint -> -> -> "It's unlikely that he's on Earth."; Hint -> -> -> "So you'll need to get off it."; HintTopic -> -> "Should I feed the dog?"; Hint -> -> -> "Of course!"; Hint -> -> -> "You can feed him the potato."; Hint -> -> -> "Or the bread."; Hint -> -> -> "He'll accept both."; HintTopic -> -> "How can I get into the pub?"; Hint -> -> -> "You can't."; HintTopic -> -> "The barman won't let me leave the Pub!"; Hint -> -> -> "You have to buy something first."; Hint -> -> -> "But you're broke."; Hint -> -> -> "You can exchange your vase for something to eat."; Hint -> -> -> "What are doing, reading these hints? It's impossible to get into the Pub!"; HintTopic -> -> "How do I leave Earth?"; Hint -> -> -> "You'll need experience from the original HHGG game to work this out."; Hint -> -> -> "Have you tried examining Arthur's companion?"; Hint -> -> -> "He looks a lot like Ford Prefect from the HHGG, doesn't he?"; Hint -> -> -> "Where does Ford keep his Sub-Etha signalling device?"; Hint -> -> -> "You'll need to get his satchel."; HintTopic -> -> "Arthur's friend keeps preventing me from taking his satchel!"; Hint -> -> -> "Violence is seldom the answer, you know."; Hint -> -> -> "But in this case, it is."; Hint -> -> -> "HIT THE MAN CARRYING THE SATCHEL."; HintTopic -> -> satch_q with short_name [; print "The game ", (Emphasis) bold, "still", (Emphasis) normal, " won't let me take the satchel!"; rtrue; ]; Hint -> -> -> "It's not yours."; Hint -> -> -> "Maybe there's a way you can make it yours."; Hint -> -> -> "Burglars take things that aren't theirs."; Hint -> -> -> "But they don't just TAKE them."; Hint -> -> -> "You'll need to expand your verb choice."; Hint -> -> -> "Try STEALing the satchel."; HintTopic -> -> "How do I use the strange device?"; Hint -> -> -> "Just PRESS it."; Hint -> -> -> "Unfortunately, it won't work when there's no ship nearby."; Hint -> -> -> "You'll have to wait until you hear a noise from above."; Menu -> "In the Dark"; HintTopic -> -> "Where am I?"; Hint -> -> -> "You escaped from Earth using the Sub-Etha device."; Hint -> -> -> "There was only one spaceship nearby when you activated it..."; Hint -> -> -> "You must be in a Vogon ship!"; HintTopic -> -> "How do I get out?"; Hint -> -> -> "Don't worry. This game isn't as hard as the original HHGG one."; Hint -> -> -> "Try out your senses."; Hint -> -> -> "All of them!"; Hint -> -> -> "Try LISTENing."; Menu -> "Aboard the Vogon Ship"; Menu -> -> "In the Hold"; HintTopic -> -> -> "I keep on dying from lack of food!"; Hint -> -> -> -> "Make sure you read the message you get carefully."; Hint -> -> -> -> protein with description [; print "You're dying from lack of "; style bold; print "protein"; style roman; print "."; ]; Hint -> -> -> -> "And you're carrying some very high-protein food with you."; Hint -> -> -> -> "Try EATing the peanuts."; HintTopic -> -> -> "How do I understand the announcement?"; Hint -> -> -> -> "You'll need a babel fish in your ear."; Hint -> -> -> -> "See the next question."; HintTopic -> -> -> "How do I get the babel fish??"; Hint -> -> -> -> "Don't worry. It isn't that difficult."; Hint -> -> -> -> "And it won't take 36 hints to expliain."; Hint -> -> -> -> "It's quite easy to prevent the fish from entering the hole."; Hint -> -> -> -> "Obstruct the path of the fish."; Hint -> -> -> -> "STAND IN FRONT OF THE SLOT."; Hint -> -> -> -> "The robot will try to take the fish, of course."; Hint -> -> -> -> "But it's easy to get there before him."; Hint -> -> -> -> "Then put the fish in your ear, and you're done!"; Hint -> -> -> -> "Wasn't that easy?"; HintTopic -> -> -> "The Captiain is sending out guards to take me away!"; Hint -> -> -> -> "Don't panic."; Hint -> -> -> -> "They're just taking you to hear some poetry."; Hint -> -> -> -> "And then they're going to throw you off the ship."; Hint -> -> -> -> yespanic with description [; print "Okay, maybe you "; style bold; print "should"; style roman; " panic!"; ]; Menu -> -> "In the Poetry Room"; HintTopic -> -> -> "I can't understand what the Captiain says!"; Hint -> -> -> -> "You'll need a babel fish."; Hint -> -> -> -> "Refer to the Hold clues."; HintTopic -> -> -> "The Captiain keeps on disintegrating me!"; Hint -> -> -> -> "Did you tell him what you thought of his poetry?"; Hint -> -> -> -> "You can't tell him if you don't understand it."; Hint -> -> -> -> "Make sure you have a babel fish in your ear."; Hint -> -> -> -> "If you can understand it, make sure you LIE TO THE CAPTAIN."; Hint -> -> -> -> "You'll need to convince the game of your need to lie, first."; HintTopic -> -> -> "How can I stop the Captiain from summoning a Guard?"; Hint -> -> -> -> "You can't."; Hint -> -> -> -> "But if he takes you to an Airlock, you can survive."; HintTopic -> -> -> "How can I get the brass lantern from the Captiain?"; Hint -> -> -> -> "Don't go on until you've found the sprig of lavender."; Hint -> -> -> -> "To get the sprig, you'll need to search Arthur's gown."; Hint -> -> -> -> "Are you sure you've found the sprig of lavender?"; Hint -> -> -> -> "Quite sure?"; Hint -> -> -> -> "There is no brass lantern or sprig of lavender! Remember that you shouldn't read a hint just because it looks interesting, because it can give the game away for you."; Menu -> -> "In the Airlock"; HintTopic -> -> -> "How can I start breathing agiain?"; Hint -> -> -> -> "What do you think you'd do in real life?"; Hint -> -> -> -> "Come on, would you just sit there an let yourself die?"; Hint -> -> -> -> "Be more assertive!"; Hint -> -> -> -> "STRUGGLE."; HintTopic -> -> -> "How can I open the door back into the Ship?"; Hint -> -> -> -> "That panel might hold a clue..."; Hint -> -> -> -> "OPEN it first."; Hint -> -> -> -> "There's an object that will activate the wires."; Hint -> -> -> -> "USE THE WIRES WITH THE BAKED POTATO."; Hint -> -> -> -> "But you can't open the door, because at that point, the one out into space opens."; HintTopic -> -> -> "Can I survive in open space?"; Hint -> -> -> -> "Yes."; Hint -> -> -> -> "Just wait around."; Hint -> -> -> -> "The Heart of Gold will pick you up."; Hint -> -> -> -> "Then you can go EAST and a robot will find you."; Menu -> "In the Heart of Gold"; HintTopic -> -> "Why am I here?"; Hint -> -> -> "The Heart of Gold picked you up from Space."; Hint -> -> -> "That's it really."; Hint -> -> -> "Just a coincidence."; HintTopic -> -> "Who is the robot?"; Hint -> -> -> "Just a Sirius Cybernetics robot."; Hint -> -> -> "He's been ordered to take you up to the Bridge."; Hint -> -> -> "You can ask him questions."; Hint -> -> -> "For example, try ASK THE ROBOT ABOUT LIFE."; HintTopic -> -> "Who is iain?"; Hint -> -> -> "Iain is iain."; HintTopic -> -> "How can I talk with iain?"; Hint -> -> -> "Try TALK WITH IAIN to start out."; Hint -> -> -> "Then answer his questions by ASKing or TELLing him about things."; Hint -> -> -> "For example, you could answer one question with TELL IAIN ABOUT FORD AND ARTHUR."; HintTopic -> -> "How can I persuade iain to come back?"; Hint -> -> -> "You could tell him about how the froup misses him..."; Hint -> -> -> "Or you could just BEG HIM TO COME BACK."; Hint -> -> -> "You could just be nice to him..."; Hint -> -> -> "...By apologising for the inconvenience..."; Hint -> -> -> "...Or giving him a gift, like the HHGG."; HintTopic -> -> "The game just restarted itself! Why?"; Hint -> -> -> "Iain restarted the game."; Hint -> -> -> "He wanted to meet Ford and Arthur."; Hint -> -> -> "You'll need a way of escaping from the game-reality."; Hint -> -> -> "See the next set of hints."; HintTopic -> -> "How do I escape?"; Hint -> -> -> "Something in your inventory could be of help."; Hint -> -> -> "It's the piece of the universe."; Hint -> -> -> "Did you notice something happen to it when iain said he was restarting the game?"; Hint -> -> -> "Try ENTERing it."; Hint -> -> -> "But only after the atoms rearrange themselves."; Menu -> "Reality"; HintTopic -> -> "What do I do now?"; Hint -> -> -> "You just need a way of ending the game."; Hint -> -> -> "That tea looks nice..."; Hint -> -> -> "The game won't end until you've done something to it."; HintTopic -> -> "What can I do to the tea?"; Hint -> -> -> "You could drink it."; Hint -> -> -> "But a simple act of generosity would reap far greater rewards."; Hint -> -> -> "The piece of the universe is still connected to the Heart of Gold."; Hint -> -> -> "However, the tea won't follow you through."; Hint -> -> -> "You can THROW THE TEA INTO THE PIECE OF THE UNIVERSE to give it to iain."; HintTopic -> -> "The game won't let me out!"; Hint -> -> -> "Why do you want to escape?"; Hint -> -> -> "There's some tea here, after all."; Hint -> -> -> "If you really want to escape from the Kitchen, you can get back onto the Heart of Gold."; Hint -> -> -> "Enter your piece of the universe."; Menu -> "General Questions"; ! This topic made me realise how wonderful the Emphasis routine is, ! because if I hadn't, I would have had to end the print command, ! change the style, then start a new print sequence up... HintTopic -> -> "How do I work interactive fiction?"; Hint -> -> -> bla1 with description [; print "This is an Interactive Fiction (IF) game, so you can control the game with natural-English commands. If you want to go east, simply type ", (Emphasis) bold, "GO EAST", (Emphasis) normal, ". This can be abbreviated to ", (Emphasis) bold, "EAST", (Emphasis) normal, " or just ", (Emphasis) bold, "E", (Emphasis) normal, ". To take a closer look at something use ", (Emphasis) bold, "LOOK AT OBJECT", (Emphasis) normal, " (", (Emphasis) bold, "EXAMINE OBJECT", (Emphasis) normal, " or ", (Emphasis) bold, "X OBJECT", (Emphasis) normal, "). To manipulate objects, try things like ", (Emphasis) bold, "TAKE OBJECT, DROP OBJECT, TURN ON OBJECT, CONSULT HHGG ON FROUP or GIVE OBJECT TO ARTHUR", (Emphasis) normal, ". You can also ", (Emphasis) bold, "TAKE INVENTORY", (Emphasis) normal, " (", (Emphasis) bold, "INVENTORY", (Emphasis) normal, " or ", (Emphasis) bold, "I", (Emphasis) normal, "). Inventory style can be changed from ", (Emphasis) bold, "I TALL", (Emphasis) normal, " (the default) to ", (Emphasis) bold, "I WIDE", (Emphasis) normal, ". Of course, good things come to those who wait, so you can type ", (Emphasis) bold, "WAIT", (Emphasis) normal, " or ", (Emphasis) bold, "Z", (Emphasis) normal, " to cause time to pass in the game - it will not do so unless you type this. Remember that there are a lot more verbs you can use, and you'll discover them as you proceed."; rtrue; ]; Hint -> -> -> bla2 with description [; print "^There are also some other meta-commands outlined below:^^\ ", (Emphasis) bold, "SAVE", (Emphasis) normal, ": Save the current game.^\ ", (Emphasis) bold, "RESTORE", (Emphasis) normal, ": Restore from a saved game.^\ ", (Emphasis) bold, "QUIT", (Emphasis) normal, ": End the game.^\ ", (Emphasis) bold, "RESTART", (Emphasis) normal, ": Restart the game.^\ ", (Emphasis) bold, "UNDO", (Emphasis) normal, ": Take back the last turn.^\ ", (Emphasis) bold, "CREDITS", (Emphasis) normal, ": View the credits for this game.^\ ", (Emphasis) bold, "IAIN MODE ON/OFF", (Emphasis) normal, ": Turn iainising on or off.^\ ", (Emphasis) bold, "HINTS", (Emphasis) normal, ": Get some in-game help.^\ ", (Emphasis) bold, "TRANSCRIPT", (Emphasis) normal, ": View the original transcript.^\ ", (Emphasis) bold, "WALKTHRU", (Emphasis) normal, ": View the whole solution (discouraged).^\ ", (Emphasis) bold, "SCRIPT ON/OFF", (Emphasis) normal, ": Turn transcripting on or off.^\ ", (Emphasis) bold, ": ", (Emphasis) normal, ": Make a comment (in the transcript, if on).^\ ", (Emphasis) bold, "RECORDING ON/OFF", (Emphasis) normal, ": Make a list of commands entered in, but not the responses, for use with ", (Emphasis) bold, "REPLAY", (Emphasis) normal, ".^\ ", (Emphasis) bold, "REPLAY", (Emphasis) normal, ": Input commands from a textfile made with ", (Emphasis) bold, "RECORDING", (Emphasis) normal, " to the input prompt."; rtrue; ]; Hint -> -> -> "^Be aware that commands involving file manipulation may not work from within the ZPlet (used for Internet play)."; HintTopic -> -> "What actions do I get points for?"; Hint -> -> -> "Have you tried checking the score?"; Hint -> -> -> "Several times?"; Hint -> -> -> "The game gives you a random score each time you ask it."; Hint -> -> -> "But at the end, the score is always the same."; HintTopic -> -> "What is the towel useful for?"; Hint -> -> -> "Have you tried to USE THE TOWEL?"; Hint -> -> -> "It's massively useful."; Hint -> -> -> "You can give it to iain instead of the HHGG."; Hint -> -> -> "The afdanians came up with 19 uses for a towel - see http://www.floor42.com/afda/uses_for_a_towel/ for more details."; Hint -> -> -> "But it doesn't really serve any practical function in the game."; HintTopic -> -> "Why does the writing on my towel change?"; Hint -> -> -> "It changes languages."; Hint -> -> -> "Have you counted how many different variations there are?"; Hint -> -> -> "There's forty-two!"; Hint -> -> -> "See http://www.zootle.co.uk/afda/dont-panic.shtml for more information."; HintTopic -> -> "Of what use is the edition of the HHGG?"; Hint -> -> -> "It's wonderfully useful."; Hint -> -> -> "You can look up all kinds of things you come across up in it."; Hint -> -> -> "And you can give it to iain as a present."; HintTopic -> -> "Can I use the scripts or baubels of technology?"; Hint -> -> -> "No."; HintTopic -> -> potu_q with short_name [; print "Just what ", (Emphasis) bold, "is", (Emphasis) normal, " a piece of the universe, anyway?"; style roman; rtrue; ]; Hint -> -> -> potu_hint with description [; print "POTU himself writes: ", (Emphasis) bold, "With the ongoing progress of technology, humanity is gradually splitting away from itself at an exponential rate. Soon enough, each person will be an island onto themselves -- each a piece of the world, isolated and alone. Only the very technology which tears us apart will serve to generate the illusion that civilization holds together. After a bit of thinking I realized that I wasn't thinking big enough. If separation through technology can happen to humans on Earth, then it could happen to any other sentient race throughout all of creation. To represent that, I changed my handle.", (Emphasis) normal, ""; rtrue; ]; Hint -> -> -> "When it's open, you can put things in it."; Hint -> -> -> "Or you can enter it."; Hint -> -> -> "Although it usually only opens and closes in response to universal patterns, it can also respond to vast improbability fields."; Hint -> -> -> "When you're picked up, it will open."; Hint -> -> -> "And when iain mentions he's going to restart the game, it connects to Reality."; Hint -> -> -> "At that point, you can enter it safely."; HintTopic -> -> "Is the ~no tea~ of any significance?"; Hint -> -> -> "It hints at the fact you can get some tea at some point in the game."; Hint -> -> -> "You can also show it to iain in response to one of his questions."; Hint -> -> -> "Other than that, it serves no purpose."; HintTopic -> -> "Are there any magic words?"; Hint -> -> -> "Have you tried typing XYZZY?"; Hint -> -> -> "How about PLUGH?"; Hint -> -> -> "Or PLOVER?"; Hint -> -> -> "No."; [ KeyYesOrNo i; if (standard_interpreter==0) { i=YesOrNo(); return i; } do {@read_char 1 0 0 i;} until (i==121 or 89 or 110 or 78); if (i==121 or 89) {print "Y^"; rtrue;} if (i==110 or 78) {print "N^"; rfalse;} ]; [ HintSub; if (hint_menu hasnt general) {give hint_menu general; "[Warning: It is recognized that the temptation for help \ may at times be so exceedingly strong that you might fetch hints \ prematurely. Therefore, you may at any time during the story type \ HINTS OFF, and this will disallow the seeking out of help for the \ present session of the story. If you still want a hint now, indicate \ HINT.]";} if (hint_menu has locked) "Hints have been disabled."; if (hint_menu.seen>=10) {print "You're consulting the hints ", (iainise) 9, "? Iain would be looking down at you with scorn if he could see this! Are you sure?^>> "; if (KeyYesOrNo()==false) "I should think not!"; else hint_menu.seen=0;} ++hint_menu.seen; hint_menu.select(); ]; verb meta "hint" "hints" "clue" "clues" "help" * -> Hint * "off" -> HelpOff; ! <-- Replaced from the Hints library. [ WalkthruSub; print "Are you sure (you may wish to turn TRANSCRIPT ON)?^>>"; if (KeyYesOrNo()==false) "Good."; "\ n^ z^ z^ z^ z^ z^ z^ hit satchel man^ steal satchel^ open it^ n^ give bread to dog^ press button^ listen^ eat peanuts^ stand in front of dispenser^ press dispenser button^ get fish^ put it in ear^ z^ z^ z^ z^ z^ z^ z^ z^ z^ z^ z^ z^ z^ z^ lie to captain^ yes^ z^ z^ z^ z^ struggle^ z^ z^ z^ z^ open panel^ use wires with potato^ panic^ z^ z^ z^ e^ z^ z^ press button^ ask robot about ship^ ask robot about thief^ z^ z^ talk to iain^ lie to iain^ tell iain the truth^ show iain no tea^ give guide to iain^ beg iain to come back^ tell iain about froup^ apologise to iain^ use piece of universe^ take tea^ toss tea into piece of the universe"; ]; verb "walkthru" "walkthrough" * -> Walkthru; [ Transcript; style bold; print "^[Start of transcript. Please adjust yourself to cope with this new reality.]"; style roman; print "^^\ Okay, I've finished with the fairy cake, so now I suppose I should go^ out and hunt for him. I seem to be in a house, in a room with a^ computer in it. I have no tea.^^ > Look at computer^^ It's nothing all that special. It's running Windows '95, and some^ various other programs that I don't care about all that much.^^ > Look room^^ It's not a very big room. There seems to be exits to the north and^ west, as well as a window to the north.^^ > Look out window^^ There's a big yellow bulldozer parked outside. There is a man lying in^ front of it, talking to a strange -- and somewhat taller -- man holding^ a satchel.^^ > North^^ I'm now outside. I see the man with the satchel and the man on the^ ground conversing with a man in a furry hat. They seem to come to some^ sort of agreement, and start heading off to the north.^^ > North^^ I follow them until they enter a pub through a door in the east. It's^ called the Horse & Groom, and appears to be admirably disreputable.^ There is a dog barking at me.^^ > I^^ I am carrying:^ - a baked potato^ - some oddities^ - a porceliain vase^ - a towel^ - an electronic edition of the HHGG series^ - a moldy piece of bread^ - a small piece of the universe^ - no tea^^ > Give dog moldy piece of bread^^ The dog eats the bread and promptly dies. A small microscopic fleet^ flies past, but I am oblivious to it.^^ There seems to be some kind of commotion inside the pub. The man who^ was lying in front of the bulldozers rushes out, followed closely by the^ man with the satchel.^^ > Hit man with satchel^^ He goes down quite readily, utterly surprised.^^ > Get satchel^^ It's not mine.^^ > Steal satchel^^ The satchel is now mine. There is a loud noise coming from above.^^ > Open satchel^^ Underneath some otherwise useless paper, the satchel contiains some bits^ and baubles of technology I don't quite understand. There is another^ towel in here, some peanuts, and a device marked ~Press Here.~^^ > Press here^^ There is nothing on the ground near where I am.^^ It's really getting quite unbearably loud.^^ > Get device^^ I already have it. It's in the satchel, remember?^^ Some voice, via a loudspeaker, is making some platitudes regarding the^ loud noise.^^ > Press button on device^ I don't see any obvious button, but I press the device in general and am^ pleased to experience the curious sensation of a transporter for the^ very first time. Then, common sense smacks me upside the head, and I^ begin to feel violently ill. I black out before transport is complete.^^ Darkness.^^ > Look^^ I've gone blind. Don't worry, it's probably only temporary.^^ > Feel^^ I can't move, much less feel anything.^^ > Smell^^ My sense of smell has decided to take a holiday. Considering where I^ probably am, this could be a good thing.^^ > Taste^^ That's just sick.^^ > Listen^^ I hear the hum of some very strange-sounding engines.^^ As I concentrate, I begin to make out vague shapes. I'm not so much^ blind as in a very dark room, with the floor vibrating slightly beneath^ me. It smells very bad in here. I feel weak.^^ > Eat peanuts^^ Ah. That's better.^^ > Turn on light^^ After much fumbling and wishing I had thought to bring matches, I find^ the light switch. I'm in a room with a lot of mattresses, with a Babel^ Fish Dispenser in the corner. There is a door set in the west wall.^^ > West^^ Probably not a good idea. I'm only here courtesy of the Dentrassi,^ remember.^^ > Look at Babel Fish Dispenser^^ It's a curious device. It seems to be a sort of vending machine, but^ there's no place to deposit any form of currency. There is a single^ button, and a slot near the bottom.^^ > Press button on Dispenser^^ A vaguely fish-shaped object shoots out of the slot, slides along the^ floor, and slips into a previously-unnoticed vent.^^"; print"\ > Stand in front of slot^^ Okay. Now what?^^ >Press button^^ The fish shoots out and hits me square in the knees. It flops around on^ the floor for a bit, and a robot comes out of a side panel. I think he^ wants my fish.^^ > Get fish^^ With no fish to capture, the robot returns to his hiding place.^^ There is a loud gargling noise coming from the speakers in the room. I^ wish that would stop.^^ > Place fish in ear^^ Eeeeeww! It feels horrid!^^ Oh. The gargling noise makes sense now. The Captiain wants me off the^ ship, and has sent search parties out looking for me. Isn't it nice to^ be wanted?^^ > West^^ There's really no place to run. I don't know the ship as well as the^ Vogons do.^^ There is a loud clomping sound heading in this general direction.^^ > Panic^^ I don't think that would help.^^ Two Vogons come through the door and grab me. For some reason they^ allow me to keep all of my possessions, and take me to see the Captiain.^ He says he's in a good mood today, so instead of killing me outright^ he's going to read me some poetry.^^ > Panic^^ That may very well be a good idea at this stage. However, not just yet.^^ Oh, dear. The Captiain has begun reciting one of his works. The words^ go through me like lances, and I'm fairly certiain someone has snuck up^ and started drilling needles through my briain.^^ > Listen^^ If you insist.^^ ~...thy micturations are to me | As plurdled gabbleblotchits on a^ lurgid bee.~^^ This is they type of thing he's subjecting me to. Do you really want to^ hear more of this tripe?^^ > Listen^^ What, more?^^ ~Groop I implore thee, my foonting turlingdromes.~^^ It's like he's -trying- to make it as bad as possible. And the pain is^ indescribable.^^ > Listen^^ You're a sadist, you know that?^^ ~And hooptiously drangle me with crinkly bindlewurdles, | Or I will rend^ thee in the gobberwarts with my blurglecruncheon, see if I don't!~^^ Ah, good. He seems to have finished.^^ Curious. Now he's asking what I thought of it.^^ > Lie^^ What, outright?^^ > Lie^^ Oh, very well.^^ I just told him I thought the imagery was quite invocative of various^ problems rent in the whole of space-time, and that he would touch the^ inner Vogonity of any who would care to listen to his words.^^ He didn't take it well. I think I used too many big words.^^ He's summoned a guard to throw me out the nearest airlock. He's a big^ one too, at least three times the size of the two that picked me up^ earlier.^^ > Talk to Vogon^^ Who, the Captiain or the guard?^^ > The Captiain^^ I manage to mutter some curses in the Captiain's general direction before^ the guard carries me off by the neck.^^ Hmm. Breathing seems to be a problem.^^ > Struggle^^ That's a little better. Now he's only half-throttling me.^^ > Talk to Vogon^^ He doesn't seem to want to enter into conversation. He keeps saying^ that resistance is useless, and continues to drag me along the corridor.^^ > Talk to Vogon^^ He doesn't want to open up to me. I guess it would help if I was from^ Belteguese -- they're rumoured to have the best sort of^ conversationalists there.^^ Now he's thrown me in the airlock and closed the door.^^ > Panic^^ Not just yet.^^ > Look airlock^^ It's pretty much a big metal room. There's a darkened panel next to the^ door I was just thrown out of, and a timer on the door across from it.^^ > Read timer^^ About ten seconds left on the clock.^^ > Open panel^^ After a little bit of struggling, I manage to get it open. Wires dangle^ everywhere.^^ > Use wires with baked potato^^ Ingenious idea! The juice in the potato activates the panel. Now, if^ only I could understand how the panel -worked-, I'd be able to get out^ of here.^^ Oh. The door has just opened. And I'm not talking about the one I^ wanted to open, either.^^ I am now in space.^^ > Panic^^ I have three minutes of air left. I'm not going to panic just yet.^^ > Wait^^"; print "\ I have two minutes of air left. My lungs feel as if they're on fire,^ and the smaller capillaries near my skin have just broken. I seem to be^ far enough away from the sun not to get burned, but I'm unquestionably^ warm.^^ I'm not going to panic just yet, though.^^ > Wait^^ I have one minute of air left. I'm tempted to let it out and see if I^ pinwheel in space for all eternity, but the blood vessels in my eyes^ have just popped, so that's pretty much out. It's strange how silent^ space is. I'm kinda getting used to the occasional twinge of pain as^ blood emerges from my body and immediately freezes into place, but I^ wish it would end soon.^^ > Wait^^ I have two seconds of air left. I'm still floating in --^^ I have been plucked from space at a terribly high improbability rate.^ To my right there is a duck in loafers sitting by the beach, and an^ infinite amount of monkeys on typewriters in the distance. Over to my^ left someone has just come out of a movie theatre proclaiming the^ showing of the blockbuster Hitch Hiker's Guide to the Galaxy, and^ somewhere nearby a hundred thousand million eggs just deposited on a^ planet where almost everyone has died of a plague just two minutes^ before.^^ I appear to be in perfect health.^^ There is a door to my right. It is wobbling, but it is still a door.^^ > Right^^ I go through the door, and I'm now on some sort of ship. There's a^ brochure on the floor, and a long corridor stretching into the distance.^ I hear what seems to be a set of Slinkys (tm) coming my way.^^ > Pick up brochure^^ It's just a bunch of advertisements to impress your friends once you've^ purchased a multi-million-dollar spacecraft for a participating^ government. All flash, no stash.^^ A robot comes through the nearest door and asks me to follow him.^^ > Follow robot^^ He's terribly morose, and not much of a conversationalist. Strangely,^ he seemed to have been expecting someone else. He leads me through^ several somewhat annoying doors. More apparently loom on the horizon^^ > Ask robot about ship^^ He says it's a stolen ship, named the G.S.S. Heart of Gold.^^ > Ask robot about thief^^ The robot says the ship was stolen by none other than iain!^^ All I manage to come up with at this point is ~Well, well, well ...^ iain.~ Not terribly intelligent, but there it is.^^ I have been shown to the bridge.^^ > Look^^ It's kinda showy, and generally in bad taste all around. Still, someone^ must have liked it. There are exits behind me, to port, and to^ starboard. There's a multi-faceted viewscreen forward, and chairs and^ consoles kind of scattered about.^^ Iain is here^^ > Talk to iain^^ He seems surprised to see me. He didn't think anyone else could get^ into this particular subdivision of reality.^^ > Beg iain to come back^^ He says he'll consider it.^^ He asks me where Arthur and Ford are.^^ > Lie^^ I think he'd be able to tell.^^ > Tell the truth^^ He appears a little upset, but then realizes that this means he can go^ through the whole ~steal the ship~ routine agiain, and that cheers him^ up.^^ He asks if I've managed to find any tea.^^ > Show iain no tea^^"; print "\ He seems a bit upset at that. It appears the Nutrimatic machines have^ lived up to their reputations.^^ > Give iain electronic edition of the HHGG series^^ He seems quite pleased with it. He says that he might come back even^ sooner now that I've been so nice to him.^ > Tell iain the froup misses him^^ He says he's very sorry, and that he'll be back soon.^^ > Apologize to iain for the intrusion^^ He appreciates the gesture, but no apology is necessary. I'd best be^ moving, though, as he's about to restart the whole adventure so he can^ meet Ford and Arthur.^^ > Use small piece of the universe^^ The piece absorbs me, and I return to reality.^^ > Look^^ There is blue maroon ginger spice cinnamon tea here.^^ > Get tea^^ You now have tea!^^ > Toss tea into piece of the universe^^ You hear it land on the other side. You also hear iain cry with joy^ just before the piece closes for good.^^ You have 8494 points out of a possible 9000. Share and Enjoy!^^"; style bold; print "[End of transcript. You have been returned to the game-world.]"; style roman; new_line; rtrue; ]; End; ...and so the source code ended.