!\--------------------------------------------------------------------------- SPURMAIN.HUG by Kent Tessman (c) 1995-1997 Locations and sundry objects for Spur ---------------------------------------------------------------------------\! ! NOTE: Since the special attribute is used to indicate different things ! for different objects, under each object that uses it, a brief description ! of the usage is given in a remark. !---------------------------------------------------------------------------- ! INITIAL OBJECTS !---------------------------------------------------------------------------- object holster "holster" { in you article "your" noun "holster" adjective "my", "old", "leather" capacity 10 holding 0 contains_desc {"Tucked in your holster is";} long_desc "Not exactly the most expensive piece of firearm-holding leather money can buy. And not exactly the newest, either. You hope that people think it looks so beaten-\ up because of all the use you've gotten out of it, shooting bad guys in town squares at high noon, that sort of thing, and not because you bought it second-hand. Which, of course, you did." inv_desc { if self is not worn "You are carrying your holster (when you probably should be wearing it)."; else "You are wearing your holster on your hip where it belongs."; } before { xobject DoPutIn { if object ~= yourgun and object ~= roysgun "You can't put that in your holster." elseif child(self) ~= nothing {CThe(child(self)) " is already tucked in your holster."} else return false } } is container, open, clothing, worn } gun yourgun "your six-shooter" { in holster noun "gun", "pistol", "six-shooter", "shooter", "weapon" adjectives "my", "six" ammo 1 ammo_type bullet long_desc "Old faithful, with the emphasis on the \"old\" part. \ And faithful doesn't necessarily mean accurate." is known } plural_class keys "keys" { article "a couple of" noun "keys" single_noun "key" plural_of skeletonkey, shedkey } object skeletonkey "skeleton key" { in you article "a" noun "key" adjectives "skeleton", "my", "room" long_desc {"Your hotel room key, although it's not surprising that all that's a little hazy for you."} plural_is keys } !---------------------------------------------------------------------------- ! MAIN STREET !---------------------------------------------------------------------------- room mainstreet "Main Street" { long_desc { "The name might be a bit of overkill--after all, Tumbleweed Flats is a town with only one street. \ The sun beats down from above, lighting up the dusty haze stretching the length of the street north and south of here. On either side are rows of weathered wooden buildings. Immediately to the west is Lucille's General Store; to the east is Grady's Saloon, Billiards, and Hotel." } extra_scenery "sun", "haze", "dusty", "buildings", "rows" before { location DoGo { if royheffer is not shot {"You try to move, but Roy is faster, and he shoots you in the back before you can get away." endflag = 2} else: return false } } n_to { if crowdgathering is active and verbroutine = &DoGo { DescribePlace(mainstreet_north, true) "\nAs you're making your getaway north, one of the Sheriff's deputies, running south toward the sound of all the shooting, pulls his gun out and proceeds to pepper you with lead." endflag = 2 } else: return mainstreet_north } s_to { if crowdgathering is active and verbroutine = &DoGo { DescribePlace(mainstreet_south, true) "\n(Notice, of course, that--fresh from shooting one of the locals dead on Main Street--you've run straight to the Sheriff's. Which is why the handful of deputies trotting down the front stairs are so easily able to knock you out cold and throw your limp body into the slammer, to be dealt with and hung all in due time.)" endflag = 3 } else: return mainstreet_south } e_to saloon w_to generalstore in_to {"You'll have to choose either the saloon or the general store."} vehicle_path oldmare, redstallion is outside } scenery gradys_building "Grady's Saloon, Billiards, and Hotel" { in mainstreet nouns "hotel", "building", "sign" adjectives "grady's", "saloon", "billiards", "old" door_to saloon long_desc "The sign over the door originally just said \"Grady's Saloon\", but since then \"Billiards\" and \"Hotel\" have been added." is shootable } scenery lucilles_building "Lucille's General Store" { in mainstreet nouns "store", "building" adjectives "lucille's", "general", "old" long_desc "The first building ever erected in Tumbleweed Flats. And it looks like it, too." door_to generalstore is shootable } scenery spanishguitar "Spanish guitar music" { in mainstreet article "some" noun "music", "strumming" adjectives "spanish", "guitar", "out-of-tune" before { object DoListen {"It's faint, but you can make out the theme to 'The Good, the Bad, and the Ugly' fairly clearly."} object {ParseError(12, self)} ! "You can't do that with..." } } object royswallet "Roy's wallet" { nouns "wallet", "pocketbook", "purse" adjectives "roy's", "leather", "calfskin", "calf-skin", "his" contains_desc { "Inside the wallet "; if children(self) > 1 "are"; else: "is"; } long_desc { "Calfskin. Nice. Monogrammed with \"R.H.\" "; if self is open { if child(self) Whatsin(self) else: "It's empty." } else "It's closed." } before { xobject DoPutIn { if object ~= dollarbill and object ~= quarter {"Wallets are for money, not for "; print Art(object); "."} else: return false } } capacity 3 holding 0 is container, openable, not open } object quarter "quarter" { in royswallet article "a" nouns "coin", "quarter" adjective "silver", "genuine" long_desc {"One genuine silver quarter."} size 1 } object dollarbill "dollar bill" ! special once spent { in royswallet article "a" nouns "bill", "money", "cash", "dough", "green", "greenback", \ "tender" adjective "dollar", "legal", "good", "old" long_desc "Good old legal tender, emblazoned with the seal of the Union." size 2 misc 0 ! whatever it gets spent on is readable } gun roysgun "Roy's gun" { nouns "gun", "pistol", "weapon" adjective "roy's", "his" ammo_type bullet long_desc {"A six-shooter like yours, but a lot nicer, to be honest. \ While you paid about three bucks for yours, old Roy here--\ rest his soul, and all that--must've dropped at least ten. \ Maybe even fifteen."} is hidden } !---------------------------------------------------------------------------- room mainstreet_north "north end of Main Street" { long_desc { "Now leaving the bustling metropolis of Tumbleweed Flats, pop. 59. The local stable is off to the northwest, just north of an empty field. To the east is the north end of the hotel, although it doesn't look like you'd be able to get by the stack of crates and barrels. A dusty road continues north out of town." if deputies_waiting is active "\_ To the south, you can see a gang of deputies lounging around outside Grady's Saloon--presumably waiting for you." } s_to mainstreet e_to {"The stack of crates and barrels is in the way--there's no way to climb over from this side. Doesn't look like there's anything behind them, anyway."} nw_to {return stabledoor.door_to} in_to {return stabledoor.door_to} w_to emptylot n_to edgeoftown vehicle_path oldmare, redstallion before { location DoGo { if (object=e_obj or word[1]="e" or word[1]="east") \ and alleyway is visited { "Knowing full well there's a way over the barrels and crates, you clamber awkwardly over the stack..." } return false } } is outside } scenery stackofcrates "stack of crates and barrels" { in mainstreet_north article "a" nouns "crate", "barrel" adjectives "stack", "crates", "barrels" long_desc {"They're in the way."} before { object DoClimb { if alleyway is not visited "Sure, sure. Then you fall down and break your neck, and then where will you be?" else {word[1] = "e" words = 1 Perform(&DoGo)} } } is shootable } object taffy "sticky taffy" { in littlejimmy article "some" nouns "taffy", "candy" adjectives "sticky", "your" misc 3 ! number of bites remaining before { object DoEat { select self.misc case 3 "You nibble at the sticky taffy. It's not too bad. Gums up your mouth and fingers pretty good while you're at it." case 2 "You chomp down about half of the taffy." case 1 "You gobble the rest of the taffy. Yum. \ All gone." self.misc = self.misc - 1 if not self.misc: remove self } } } !---------------------------------------------------------------------------- room mainstreet_south "south end of Main Street" { long_desc "Standing here in the middle of Main Street, you are directly across from the Tumbleweed Flats Sheriff's Department, which is directly to the east. Not the safest place to hang out, perhaps, considering that the gallows are right on the other side of the street--and you might as well try and avoid that particular inevitability for as long as possible. Might be a better idea to head north, back up Main Street." n_to mainstreet e_to sheriffsdept s_to "Going south from here will get you nowhere. You really don't need any more of that then you've already got." vehicle_path oldmare, redstallion is outside } room sheriffsdept "Sheriff's building" ! far, far too much time and code ! for this, but it was amusing me ! special once entered { long_desc "Cramped quarters, actually. Barely room enough for the sheriff's desk and a jail cell in the corner." w_to { if argyle is not shot { "As you turn and start to walk back out the door, Argyle kisses you with his Smith and Wesson .38 right between the shoulder blades. Cowardly, perhaps, but he is the one still breathing." endflag = 2 } else: return mainstreet_south } after { location DoGo { if self is not special { "\nArgyle's eyes bulge out of his head as you stroll in. He drops his sandwich. \ \"Jumpin' Jehosophat! I mean...well, I mean, aren't you the guy who shot Roy Heffer?\"" self is special move sandwich to location } clown is known return false } xobject DoGive { if object = sandwich "\"Er...no thanks. I'm not hungry anymore. \ I think I'm full.\"" else: return false } } } scenery jailcell "jail cell" { in sheriffsdept nouns "cell", "hoosegow" adjectives "prison", "jail" long_desc "Sturdy, and tough to open, by the looks of it." before { object DoUnlock { "Would that you had a key that fit." } } is lockable, locked, openable, not open } object sandwich "Argyle's sandwich" { nouns "sandwich", "food" adjective "argyle's", "fried", "chicken", "fried-chicken" initial_desc "Argyle's sandwich is lying on the floor where he dropped it." long_desc "It's a plain old fried-chicken sandwich." before { object DoEat {"You nibble at it. Not bad. Not bad at all."} } } !---------------------------------------------------------------------------- ! GRADY'S SALOON, BILLIARDS, AND HOTEL !---------------------------------------------------------------------------- room saloon "Grady's Saloon, Billiards, and Hotel" ! special once the ladder admonition is given { w_to mainstreet u_to upstairshall nw_to billiardsroom out_to mainstreet long_desc { "Sunlight glares in through the swinging saloonesque doors, only to be swallowed up by the murkiness inside. Tables and chairs, barstools along the long counter, and a room-\ length mirror behind the bar. There's a horseshoe tacked to the wall, too. Stairs go up to the hotel rooms on the second floor. The billiards room, such as it is, is in the northwest corner." if deputies_waiting is active "\_ You catch glimpses of boots underneath the swinging doors, walking back and forth outside the saloon--the Sheriff's deputies, presumably waiting for you." } extra_scenery "sunlight", "sun", "tables", "chairs", "barstools", \ "bar" after { location DoGo { if self is not special and ladder in player and grady is not dead: "\nGrady looks at you in utter amazement as you traipse in carrying his ladder. \"What the hell are you doing with my ladder? Get out of here with that!" self is special } } } scenery mirror "mirror" { article "a" noun "mirror" found_in saloon, yourroom before { object DoLook {Perform(&DoLook, you)} } after { object DoShoot { "You blow "; if self is not shot print "a"; else: print "another"; " nice big chunk of glass out of the mirror." if grady is not shot and grady in location "\nGrady looks at you like you're stark raving mad. \"Are you stark raving mad?\" he asks." } } is shootable } scenery horseshoe "horseshoe" { in saloon article "a" nouns "shoe", "charm", "horseshoe" adjectives "horse", "good-luck", "good", "luck", "lucky" long_desc "Your basic lucky-charm horseshoe." } scenery upstairs "upstairs" { in saloon article "a" nouns "upstairs", "stairs" adjective "up", "hotel" door_to upstairshall before { object DoClimb { Perform(&DoGo, self) } } } scenery adrink "drink" ! Not really an object--note the fact that Grady's { ! inventory isn't listed, and the long_desc below in grady article "a" noun "whiskey", "drink", "booze", "hootch" long_desc "Meaning you wish you had one in front of you, right?" before { object DoGet, DoBuy { if grady is dead "Except that you plugged the barkeep." else Perform(&DoAsk, grady, self) } } } object shedkey "shed key" { article "the" noun "key" adjective "shed" initial_desc "Sitting on the bar is the key to Grady's shed." long_desc "It's the key to Grady's shed. In fact, it's got \"Grady's Shed\" scrawled on it." is readable plural_is keys } object yourbill "hotel bill" { article "your" nouns "bill", "check" adjectives "my", "hotel", "guest" parse_rank 1 ! so "bill" means this, not dollar is known } object gradysluck "grady's luck" ! for reference only { noun "luck", "fortune", "misfortune", "problem", "problems" adjective "grady's", "his", "bad", "good" is known } object lastnight "last night" ! for reference only { noun "night" adjective "last", "night's", "fight", "trouble" is known } scenery gradysclothes "Grady's clothes" { in grady nouns "clothes", "clothing", "duds", "vest", "pants" adjectives "fancy", "embroidered", "imported", "spanish", "his" before { object {"As much as you like them, style probably shouldn't be your number one concern right now."} } is known } event grady ! Grady does bartenderish things { local x if grady is not special ! one time only { "\nGrady studies you as you come in. \"Plannin' on paying your bill anytime soon?\"" grady is special } else { x = random(25) select x case 0 {"\nGrady pulls out a cloth and polishes up the bar a little." event_flag = true} case 1 {"\nGrady leafs through the hotel ledger." event_flag = true} } } !---------------------------------------------------------------------------- room billiardsroom "billiards room" { se_to saloon out_to saloon long_desc "One measly pool table comprises the billiards room. That and a heavily locked door behind which Grady stashes his liquor. Southeast takes you back out into the saloon." } scenery pooltable "pool table" { in billiardsroom article "a" noun "table" adjectives "measly", "pool", "billiards" long_desc "Not a very fine specimen of the billiards world. One of the four legs is shorter than the other three, giving the balls a tendency to roll into the bottom right pocket." capacity 50 holding 0 before { object DoLookIn { "(Assuming you mean the pocket)" Perform(&verbroutine, tablepocket) } } is platform, shootable } scenery tablepocket "pool table pocket" { nearby article "a" noun "pocket" adjectives "pool", "table", "bottom", "right" capacity 10 holding 0 is container, open, shootable } scenery poolstuff "billiards equipment" { nearby article "some" nouns "equipment", "balls", "ball", "cues", "cue" adjectives "billiards", "pool", "cue", "eight" before { object {"You should probably be doing something else rather than messing around with the billiards equipment."} } } scenery billiardsroomdoor "locked door" { found_in billiardsroom, liquorstash article "a" noun "door" adjectives "heavily", "locked", "liquor", "room", "stash" before { object DoOpen, DoUnlock {"The door is locked up as tight as anything you've ever seen. There's no way in hell you're ever going to get it open."} } after { object DoShoot { if grady is not dead "You put a bullet in the door. From the next room you hear Grady holler: \"What the Jesus are you doing in there?\"" } } is openable, not open, locked, lockable, shootable } !---------------------------------------------------------------------------- room upstairshall "upstairs hallway" { d_to saloon cant_go {"Best not to be poking around other people's rooms: \ that's liable to get you shot. Your room, in case you don't remember, is to the west."} w_to { if yourdoor is not special and yourdoor is not locked Perform(&DoOpen, yourdoor) return yourdoor.door_to } u_to {"The stairs end here."} long_desc "Rooms on all sides of the landing--their doors closed and probably locked. The stairs go back downstairs to the saloon." } scenery downstairs "downstairs" { found_in upstairshall, billiardsroom nouns "downstairs", "stairs" adjective "down" door_to saloon } door yourdoor "room door" ! special once it has hit the whiskey bottle { between upstairshall, yourroom article "your" noun "door", "room" adjectives "room", "hotel", "wooden" key_object skeletonkey after { object DoOpen { if self is not special {"As you open the door, it bangs against an empty whiskey bottle that had rolled against it. The bottle skitters away into the corner of the room." self is special} else: return false } } is lockable, locked, shootable } !---------------------------------------------------------------------------- ! YOUR HOTEL ROOM !---------------------------------------------------------------------------- room yourroom "your hotel room" ! special once the bedsheet has ripped upon exiting via the window { noun "room" adjectives "my", "hotel" e_to {return yourdoor.door_to} d_to { if yourcurtains is not open "Not that you can see anywhere to go down." elseif yourwindow is not open "The window is closed." elseif bedsheet.misc = drainpipe { if self is not special { "As you climb down the bedsheet, it starts to rip. One small piece of cloth tears away and flutters down below you." self is special move pieceofcloth to alleyway self is scored mainstreet_north.e_to = alleyway } return alleyway } else "You're on the second floor, and the ground looks kinda hard. Not exactly the perfect jumping scenario." } out_to { if yourcurtains is open and yourwindow is open return self.d_to else return yourdoor.door_to } long_desc { "Not too fancy, but then you get what you pay for. A bed with a mattress that was, as you vaguely remember it, rather wooden. A wash basin and mirror along one wall. \ Curtains "; if yourcurtains is open "open, revealing the single small window and Main Street below." else "closed, covering the single small window." } before { location DoJump { if yourcurtains is open and yourwindow is open {"You jump all the way down to the ground, which is, as you might've guessed, pretty damned solid. You break both your legs and have nothing much else to do but wait until the Sheriff comes 'round to pick you up for wasting Roy Heffer. And then it's hangin' time..." endflag = 3} elseif yourcurtains is open and yourwindow is not open "Your window is not open. Luckily." else return false } } } scenery yourbasin "wash basin" { in yourroom article "a" noun "basin", "sink" adjectives "wash" is shootable } scenery yourbed "bed" { in yourroom article "your" nouns "bed", "mattress" adjective "my" long_desc { "Looking at the bed doesn't bring back any fond memories of comfortable sleep."; if bedsheet is not moved " The bedsheet is still in a crumpled heap at the foot of the bed." print newline yourbed is not quiet } holding 0 capacity 50 is platform, shootable, quiet } attachable bedsheet "bedsheet" { in yourbed found_in 0 ! will be needed later article "a" nouns "bedsheet", "sheet", "bedsheets", "sheets" adjective "bed", "my" size 20 misc 0 ! the object it is tied to attachable_to drainpipe short_desc { if self.misc = drainpipe "Through the open curtains, you can see your bedsheet fluttering from where it is tied to the drainpipe outside." else return false } long_desc { if self.misc {"The bedsheet is tied to "; print The(self.misc); "."} else: "Just a bedsheet." } before { object DoClimb { if self.misc = drainpipe Perform(&DoGo, yourwindow) else: return false } object DoGet { self is not hidden if self.misc {"Except that the bedsheet is tied to "; print The(self.misc); "."} else: return false } object DoAttachObject { if xobject=drainpipe and yourcurtains is not open "Not with the curtains closed." elseif xobject=drainpipe and yourwindow is not open "Not with the window closed." else return false } object DoDetachObject { if self not in location "Not from this end, you can't." else return false } } after { ! The following two instances return false so that the ! normal completed-action messages are printed: object DoAttachObject { self.misc = xobject move bedsheet to location bedsheet is moved if location = yourroom self.found_in = alleyway return false } object DoDetachObject { self.misc = 0 self.found_in = 0 return false } } is shootable, hidden } scenery yourcurtains "curtains" { in yourroom article "some" nouns "curtains", "drapes", "shade", "curtain" long_desc { print CThe(self); " are "; if self is open "open." else: "closed." } after { object DoOpen {"Opened. "; object = yourwindow run object.long_desc run object.after object = self} object DoClose {object = yourwindow run object.after object = self return false} } is openable, not open, plural, shootable } scenery yourwindow "small window" { in yourroom article "a" noun "window" adjectives "small", "little" door_to return yourroom.d_to long_desc { if yourcurtains is not open "The curtains are closed." else { "Through the "; if self is open "open"; else: "closed"; " window you can just peek around the corner of the hotel enough to see Main Street below."; if royheffer_corpse in mainstreet " Roy Heffer's body is lying in the middle of it, surrounded by a rubbernecking crowd."; if deputies_waiting is active " You see a gang of deputies waiting in front of the saloon--waiting for you, that is."; if self is open { " As you stick your head out the open window, you see a drainpipe running along the outside of the wall."; if bedsheet.misc = drainpipe " Tied to the drainpipe is your bedsheet, fluttering in the wind." } print newline } } before { object DoOpen, DoClose, DoGo { if yourcurtains is not open "The curtains are closed." else: return false } } after { object DoOpen {move drainpipe to location if bedsheet.misc = drainpipe move bedsheet to location return false} object DoClose {remove drainpipe if bedsheet.misc = drainpipe remove bedsheet return false} object DoShoot {"You blow "; if self is not shot print "a"; else: print "another"; " nice big chunk of glass out of the mirror."} } is openable, not open, shootable, transparent } scenery drainpipe "drainpipe" { article "a" nouns "drainpipe", "pipe", "trough", "eavestrough" adjective "drain", "rain", "sturdy" long_desc { "The sturdy pipe is attached to the side of the building."; if bedsheet.misc = drainpipe " Tied to it is your bedsheet." print newline } before { object DoClimb { "That wouldn't help you--the pipe doesn't go all the way to the ground." } } is shootable } object note "handwritten note" ! special once the little aside is printed once { in yourroom article "a" noun "paper", "note" adjectives "handwritten", "piece" size 5 initial_desc "Looks like someone slipped a piece of paper under the door while you were out." long_desc { if sarah is known "(It's from Sarah:)\n" "\"Meet me at the stable at 10:00.\n\n\ \_ - S.\"" if self is not special {"\n(Not like you have any memory of who S. is.)" self is special} } is readable } object bottle "whiskey bottle" ! special when filled with hootch { in yourroom article "a" noun "bottle" capacity 15 holding 0 adjectives "whiskey", "bourbon", "sour", "mash", \ "sour-mash", "glass", "dr", "doctor", "vita-vim's" initial_desc "In the corner of the room is a whiskey bottle, empty and discarded." long_desc { "The label proclaims: \"Dr. Vita-Vim's Sour Mash.\""; if xxx in self {print " "; xxx is known run xxx.short_desc} if pieceofcloth in self {print " "; run pieceofcloth.short_desc} print newline xxx is known } inv_desc { "You are holding a whiskey bottle."; if xxx in self {print " "; run xxx.short_desc} if pieceofcloth in self {print " "; run pieceofcloth.short_desc} } list_contents 1 ! since inv_desc takes care of it before { object DoSmell { if pieceofcloth in self "The piece of cloth is in the way." elseif not child(self) "One whiff of the old Dr. Vita-Vim's (even the empty bottle) is enough to set your head a-spinning." else Perform(&DoSmell, child(self)) } object DoDrink { if pieceofcloth in self "The piece of cloth is in the way." elseif not child(self) "The bottle is empty--you should be happy about that." else Perform(&DoDrink, child(self)) } xobject DoPutIn { if object = pieceofcloth {move pieceofcloth to self "You stuff the piece of cloth into the opening of the bottle."} elseif object = xxx { if pieceofcloth in self "Not with that piece of cloth plugging the opening of the bottle." elseif child(self) {"The bottle is already filled with "; print Art(child(self)); "."} elseif object is special "Don't quite see how you plan to manage that." else {move object to self object is special object is not hidden "You fill the bottle with "; print Art(object); "."} } else "That's probably not going to work." } object DoEmpty { if not child(self) or child(self) = pieceofcloth "There's nothing in the bottle." elseif pieceofcloth in bottle "Not with that piece of cloth plugging the bottle, you won't." elseif xobject Perform(&DoPutIn, child(self), xobject) else {"You pour out "; print The(child(self)); "." remove child(self)} } object DoDrop { if location = hayfield and pieceofcloth in bottle \ and xxx in bottle and pieceofcloth is special Perform(&DoDrop, pieceofcloth) else return false } object DoThrowAt ! tossing the Molotov cocktail { local burning burning = false if pieceofcloth in bottle and xxx in bottle and pieceofcloth is special: burning = true if xobject = hayfieldobject { if burning { Activate(haystackburning_fuse, 15) remove bottle "You wind up and toss the bottle with its burning fuse and payload of Grandma Grady's Wicked XXX at one of the haystacks, which catches fire with a WHOOSH and soon builds into a roaring blaze."; } else { move bottle to hayfield "You pitch the bottle into the hayfield, where it lands with a dull thud." } if player in hayfield and burning {" It's important to note, however, that your were standing smack in the middle of this sun-dried hayfield when you decided to indulge in that particular bit of pyromania, and soon you find yourself in the heart of the inferno, toasting nicely." "\n\B*** YOU ARE COOKED ***\b" endflag = 3} elseif burning {move largeduane to hayfield " Even from here, you can see Large Duane's eyes go wide as saucers when he catches sight of the haystack flaring up like a match head. He runs like a madman into the hayfield, stomping on patches of flaming grass and kicking dirt onto the fire.\n" "Sarah glares at you. \"You are crazy, aren't you?\"" hayfieldobject.misc = 1} } elseif xobject = billiardsroomdoor or xobject = gradyswall or xobject.type = door: { if burning { remove bottle "You wind up and hurl the bottle with its burning piece of cloth for a fuse and payload of Grandma Grady's Wicked XXX at "; print The(xobject); "."; " The bottle shatters in a burst of flame, but the fire doesn't stay around long enough to do any damage." } else {remove bottle if pieceofcloth in bottle move pieceofcloth to location move brokenbottle to location "You wind up and hurl the bottle at "; The(xobject) ", against which it shatters with a crash."} } elseif xobject = xxxkeg { if burning { verbroutine = &DoShoot object = xxxkeg run xxxkeg.after } else { "You pitch the bottle against the keg, where it shatters with a crash." remove bottle if pieceofcloth in bottle move pieceofcloth to location move brokenbottle to location } } else: return false if location = billiardsroom and grady is not dead "\nFrom the next room you can hear Grady holler: \"What the Jesus are you doing in there?\"" } } is container, open, transparent } object brokenbottle "broken whiskey bottle" { article "a" adjectives "whiskey", "bourbon", "sour", "mash", "sour-mash", \ "glass", "dr", "doctor", "vita-vim's", "broken", "bottle" initial_desc "Lying here is a broken bottle." long_desc "You can still read the label, which proclaims: \"Dr. Vita-Vim's Sour Mash.\"" } !---------------------------------------------------------------------------- ! LUCILLE'S GENERAL STORE !---------------------------------------------------------------------------- room generalstore "Lucille's General Store" { e_to mainstreet out_to mainstreet long_desc { "More clutter than any person in their right mind would know what to do with. Luckily Lucille has the right idea: \ put it all on shelves and call it a General Store. "; run shelves.long_desc } } scenery shelves "shelves" { in generalstore article "some" nouns "shelves", "shelf", "counter", "clutter" long_desc { local i, n if children(self) { "Among other things, the shelves contain "; for i in self { i is known Art(i) if i.price { print " ("; NumberWord(i.price); " dollar"; if i.price > 1: print "s"; print ")"; } n = n + 1 if n < children(self) and children(self) > 2 print ","; if sibling(i) print " "; if n = children(self) - 1 print "and "; } print "." } else "The shelves don't contain anything of interest." } list_contents 1 ! override normal listing is platform, shootable } property count_bullets ! just for boxes of ammo storeitem boxofbullets "box of bullets" { in shelves article "a" adjectives "box", "bullets" long_desc {"\"Millaney's Bullets--Good Bullets for Good Shooting.\" \ The box "; run self.count_bullets} count_bullets { if self is open { if self.misc { "contains "; print NumberWord(self.misc); " "; if self.misc > 1: print child(self).name; else: print child(self).name #2; print "." } else "is empty." } else "is closed." } misc 20 price 1 is openable, not open, container, readable } ammo_obj bullet { in boxofbullets name "bullets", "bullet" ! because name may have to be ! plural or singular nouns "bullet", "bullets" article "some" } boxofbullets boxofshells "box of shotgun shells" { in shelves adjectives "box", "shotgun", "shells", "shot", "gun" long_desc {"\"Tom Gold's Super Shotgun Shells--Tom says: 'Get outta the way!'\" The box is "; run self.count_bullets} misc 10 price 3 } ammo_obj shells { in boxofshells name "shotgun shells", "shotgun shell" article "some" nouns "shell", "shells" adjectives "shotgun", "shot", "gun" } object emptytaffybox "empty taffy box" { in shelves article "an" noun "box", "container" adjectives "empty", "taffy", "candy" long_desc { if not children(self) "Used to contain candy, by the looks of it. Of course now it's empty." } capacity 20 holding 0 is container, static } storeitem trailkit "trail kit" { in shelves article "a" nouns "kit", "set", "label" adjectives "trail", "camping", "camp", "tin", "box" price 1 capacity 10 holding 0 contains_desc {"The trail kit contains";} long_desc "A label reads: \"Everything you need to be prepared. If you don't get yourself one of these here kits, you're not prepared. If you're not prepared, you're dead, buddy. Get it?\" The hard sell, you might say." is container, openable, not open, readable } object matchbook "matchbook" { in trailkit article "a" nouns "matches", "matchbook" adjectives "book", "pack" list_contents 1 ! override listing contents long_desc { "A matchbook, "; if self.misc { "containing "; print number self.misc; " match"; if self.misc > 1: print "es"; print "." } else "which is empty." } size 1 misc 6 } object match "burning match" ! special when lit { in matchbook article "a" noun "match", "matchstick" adjective "lit", "burning", "flaming" long_desc { if self is special "The match is burning." else {"There "; if matchbook.misc = 1 "is "; else: "are "; print number matchbook.misc; " left."} } inv_desc "You are holding a burning match."; misc ! the extinguish routine; returns the match to { ! the matchbook unless none are left self is not special matchbook.misc = matchbook.misc - 1 if matchbook.misc move match to matchbook else remove match } before { object DoGet, DoBurn { if self in player {"You've already got one match going." return true} if Acquire(player, self) { "You strike a match." move self to player Activate(matchburning_fuse, 2) self is special } else "Your hands are too full to strike a match." } object DoDrop { if location = hayfield {pieceofcloth is special Perform(&DoDrop, pieceofcloth)} "You drop the match; the wind catches it and blows it out." run self.misc } object DoHit { if word[1] = "strike" Perform(&DoGet, self) else: return false } object DoExtinguish { "With a puff of breath you blow out the match." run self.misc } } } fuse matchburning_fuse {} event matchburning_fuse { if not self.tick { "\nThe match goes out. You drop it." run match.misc event_flag = true } } object tinfork "fork" { in trailkit article "a" nouns "fork", "cutlery", "utensil", "utensils" adjectives "tin", 0 ! may need this 2nd adj. size 3 long_desc {print "A tin "; self.noun; ". Don't bite down on it too hard, though--it doesn't look too strong."} } tinfork tinspoon "spoon" ! use tinfork as a class { in trailkit nouns "spoon", "cutlery", "utensil", "utensils" } object beefjerky "beef jerky" { in trailkit article "some" nouns "jerky", "snack", "food" adjectives "chunk", "beef" size 3 long_desc "A chunk of beef jerky. It doesn't look particularly appetizing, but what the hell: beef jerky rarely does." before { object DoEat {"You nibble at the beef jerky. And hey--that's not bad jerky."} } } storeitem pickaxe "pick-axe" { in shelves article "a" nouns "axe", "pick-axe", "pickaxe", "tool" adjectives "pick" long_desc "An axe. A tool. An implement. Something like this has gotta be useful. Doesn't it?" size 20 price 5 } !---------------------------------------------------------------------------- ! THE ALLEYWAY AND GRADY'S SHED !---------------------------------------------------------------------------- room alleyway "narrow alley" { long_desc { "Running along the north side of Grady's--the old wall of the building is directly behind you. Grady's storage shed is just to the north, and Main Street is back out to the west. You're well hidden by a stack of old, sun-bleached wooden barrels. "; if bedsheet.misc = drainpipe " Overhead, you can see your bedsheet, flapping in the wind from where it's still attached to the drainpipe." print newline shedkey is known } u_to { if bedsheet.misc = drainpipe and ladder in player "Not carrying that ladder, you won't." elseif yourwindow is not open "You scramble up the bedsheet to the window...only to find it closed. You slide back down to the ground." elseif bedsheet.misc = drainpipe { "You scramble back up the bedsheet to the open window." return yourroom } else: "There's no way to get up there." } in_to {"In where?"} w_to {"You find a foothold on the stack of barrels and clamber over"; if ladder in player ", dragging the ladder after you"; print "." return mainstreet_north} se_to 0 ! will change n_to {return sheddoor.door_to} e_to "You can only go east about five steps until you hit a dead end." cant_go "The alley is wedged between the hotel to the south and the shed to the north; it basically runs a short ways east-west." after { location DoShoot { if deputies_waiting is active and not xobject.just_clicked: {"\nAs the the report of your gunshot echoes its way out of the alleyway, the troupe of the sheriff's deputies who were waiting for you out in front of the hotel come 'round the corner to investigate all the racket. \ What they find, of course, is you: fugitive from justice, and armed and dangerous to boot. The only reasonable way to deal with the situation, from their point of view, is to bring you down in a hail of bullets.\n\n\ Which they do." endflag = 2} else: return false } } is outside } object pieceofcloth ! special when burning { article "a" noun "cloth", "rag" adjective "small", "piece", "scrap", "burning", "flaming", \ "charred", "scorched", "burned", "burnt" size 5 misc 15 ! amount of burning time left name { if self is special return "flaming scrap of cloth" elseif not self.misc return "scrap of charred cloth" else: return "scrap of cloth" } initial_desc { "The small piece of cloth from the bedsheet is lying on the ground." } long_desc { if not self.misc {"Burned to a crisp." return true} "The piece of cloth is about the size of a handkerchief."; if self is special " It's also on fire." print newline } short_desc { if self in bottle { CArt(self) " is stuffed in the mouth of the bottle."; } else: return false } before { object DoGet { if self is special "You snatch at the burning cloth, trying to grab hold of it, but it scorches your fingertips." else: return false } object DoDrop { if self is special { "Dropped.\n\n\It's important to note, however, that the cloth was alight when you did it. Now the hayfield is on fire. Come to think of it--now you're on fire." "\n\B*** YOU ARE COOKED ***\b" endflag = 3 } else: return false } object DoBurn { if not xobject or xobject = match { if self is special "The cloth is already burning." elseif not self.misc "The cloth is already burned to a crisp." elseif match not in player "Except that you don't have a match." else { "You touch the match to the cloth, and it begins to burn." Activate(clothburning_daemon) self is special if self in player {"\nOUCH!--The burning cloth sears your fingers, and you drop it." move self to location} } } else: "You can't burn the cloth with that." } object DoExtinguish { "You blow out the burning piece of cloth." self is not special Deactivate(clothburning_daemon) } } } daemon clothburning_daemon {} event clothburning_daemon { pieceofcloth.misc = pieceofcloth.misc - 1 if pieceofcloth.misc = 0 { pieceofcloth is not special if FindObject(pieceofcloth, location) {"\nThe flame flickering from the charred piece of cloth burns itself out." event_flag = 1} Deactivate(self) } } scenery gradyswall "old wooden wall" { in alleyway article "an" noun "building" adjective "old", "wall", "wooden", "hotel" long_desc "The hotel wall is made up of old wooden planks, which look like they might not be nailed in as securely as they used to be." is shootable } scenery woodenbarrels "wooden barrels" { in alleyway article "some" noun "barrels", "barrel" adjectives "stack", "wooden", "sun-bleached", "sun", "bleached" before { object {"Messing around the barrels will not get you anywhere. Honestly."} } is plural, shootable } object woodenplank "wooden plank" { in alleyway article "a" nouns "board", "plank", "boards", "planks" adjectives "wooden" size 20 long_desc { if self is moved "Once attached to the side of Grady's Saloon, Billiards, and Hotel." else: return false } before { object DoGet { if self is not moved "It's attached to the side of the saloon." else: return false } object DoPull, DoMove { if self is moved "That's not going to change anything." else {"With a grunt, you yank the board free from the side of the saloon. It falls to the ground with a dull clatter, revealing an opening leading southeast into the wall." location.se_to = liquorstash move opening to location self is moved self is not hidden} } } is shootable, hidden } object opening "opening in the wall" { article "a" noun "wall", "alley", "alleyway" adjectives "opening", "in", "hole" short_desc "You can squeeze through an opening between two boards in the side of the saloon." long_desc "The opening leads southeast into the darkness beyond the wall of the building." door_to liquorstash is static } scenery shedobject "Grady's storage shed" { in alleyway nouns "shed", "building" adjectives "grady's", "storage" long_desc { "Your basic slats-thrown-together storage shed. One door, which is "; if sheddoor is not open "closed."; else: "open."; " One window, which is "; if shedwindow is special "broken." else: "closed." } before { object DoUnlock, DoLock, DoOpen {Perform(verbroutine, sheddoor)} } door_to return sheddoor.door_to is shootable, lockable, openable } door sheddoor "shed door" { between alleyway, gradysshed article "a" noun "door" adjectives "chipped", "paint", "shed", "painted", "peeling" long_desc { "The chipped paint is peeling away from the door, which is "; if self is open "open." else: "closed." } key_object shedkey is openable, not open, lockable, locked, shootable } scenery shedwindow "shed window" ! special when broken { in alleyway article "a" noun "window" adjectives "glass", "shed", "broken", "pane" long_desc { "Through the "; if self is special "broken "; "window, you can see an assortment of tools and various other implements"; if ladder is not moved ", including a ten-foot ladder"; print "." ladder is known } before { object DoShoot { if self is special "Except that there's nothing left of the broken window." else: return false } object DoEnter, DoGo, DoClimb { "The window is just a little too small to fit through, not to mention the fact that "; if self is not special "there's a pane of glass in the way." else: "you'd probably hack yourself to death on the broken glass." } object DoHit { if self is special "Except that you've already smashed the glass." elseif not xobject "With what? Your hand? Not too damn likely." elseif xobject = yourgun or xobject = roysgun \ or xobject = woodenplank {self is special "The glass shatters with a crash." move brokenglass to gradysshed} else "Not with that, you won't." } } after { object DoShoot {"Glass shatters with a crash as you blow a nice, big hole in the middle of the window."} } is transparent, shootable } object brokenglass "broken glass" ! special after "...taking care not to cut yourself" is printed once { article "some" noun "glass" adjectives "sharp", "broken", "shard", "shards", "piece", "pieces" initial_desc "Some shards of glass from the broken window are lying on the floor here." short_desc "There's some broken glass here." after { object DoGet { if self is not special {"You pick up the glass, taking care not to cut yourself." self is special} return false } } } room gradysshed "Grady's storage shed" { long_desc { "It's dark in here. The only light bleeds in through the "; if shedwindow is special "broken "; "window"; if sheddoor is open " and the open door"; print ". Looks like this is where Grady keeps most of his junk." } s_to {return sheddoor.door_to} out_to {return sheddoor.door_to} } scenery shedjunk "junk" { in gradysshed article "some" nouns "tools", "implements", "junk", "stuff", "things" adjectives "various", "grady's", "his" long_desc "Most of the metal stuff is rusted. Most of the wooden stuff is termite-gnawed. None of it is of much use to you." before { object DoGet {"Wouldn't bother."} } } object ladder "ten-foot ladder" { in gradysshed article "a" noun "ladder" adjectives "ten-foot", "ten", "foot", "wooden" initial_desc "Resting on the ground against one wall is a ten-foot wooden ladder." short_desc { if self.misc {"The ten-foot ladder is leaning against "; print The(self.misc); "."} else return false } long_desc "Wooden, and--like the name says--ten feet long." misc 0 ! whatever it's leaning against before { object DoGet {self.misc = 0 return false} object DoClimb { if not self.misc { if self in location "What, with the ladder lying on the ground? And this a good eighty or so years before the Batman TV series. What insight." else "Try leaning the ladder against something for starters." } else { if self.misc = loftobject {word[1] = "up" words = 1 Perform(&DoGo)} elseif self.misc = stablewall "The window is too high up on this side." elseif self.misc = gradyswall "The window is too high up for the ladder to reach." } } } size 50 is shootable } !---------------------------------------------------------------------------- ! GRADY'S LIQUOR STASH !---------------------------------------------------------------------------- room liquorstash "Grady's liquor stash" { nw_to alleyway out_to alleyway long_desc "In the dim light from the alleyway, you can make out the outlines of several shelves of crates and bottles, as well as a heavy door which--you guess--leads out into the billiards room. Sitting in the shadows in the corner is a big wooden keg." } scenery to_alley "alleyway" { in liquorstash article "an" nouns "alleyway", "alley", "light", "outside" adjective "dim" long_desc "All you can see is the dim light seeping in from outside." door_to alleyway } scenery liquorstuff "crates and bottles" { in liquorstash article "some" nouns "bottles", "crates", "shelves" before { object {"The last thing you need right now is to be messing around with that stuff."} } is plural, shootable } scenery xxxkeg "big wooden keg" ! special if map of Paris is found { nearby article "a" nouns "keg", "barrel", "drum", "tap", "writing", "stenciling", \ "printing" adjectives "big", "wooden", "large", "huge", "grandma", \ "grady's", "xxx", "booze", "liquor", "whisky", "hootch", \ "crude" long_desc { if self is not moved "As you blow away the dust from the keg, you reveal some crude stenciling that reads: \"Grandma Grady's Wicked XXX.\" A tap is fixed to the side of it." else "The crude stenciling reads: \"Grandma Grady's Wicked XXX.\" A tap is fixed to the side." self is moved } before { object DoGet {"It's much too heavy to lift."} object DoOpen {"You can't open the keg. But there is a tap attached to it."} object DoPour {Perform(&DoPour, xxx)} object DoLookUnder { if self is not special { "You find a map of Paris. So that's where it was." self is special if not Acquire(player, parismap) move parismap to location } else: return false } } after { object DoShoot { "Looking down from the two miles you are blown in the air, you can see a colossal mushroom cloud rising out of the crater where Tumbleweed Flats used to be. If rocket fuel had been invented yet, whatever that keg was full of would've made it look like Kool-Aid (if it'd been invented yet). On the other hand, come to think of it, it is kinda peaceful up here. But the trip down is going to be a bummer." "\n\B*** YOU ARE FLAT ***\b" endflag = 3 } } is shootable } object parismap "map of Paris" { article "a" adjectives "map", "paris" size 5 long_desc "A map of Paris it is." is readable } object xxx "Grandma Grady's Wicked XXX" { nearby xxxkeg nouns "xxx", "whiskey", "booze", "hootch", "liquor" adjectives "grady's", "grandma", "wicked" misc 0 short_desc { "Some of Grandma Grady's Wicked XXX is sloshing around inside "; print The(parent(self)); "."; } before { object DoGet {Perform(&DoPour, xxx)} object DoPutIn { if self is special and location = liquorstash "The keg is empty." else: return false } object DoDrink { if sarah in location { "Sarah grabs your hand as you raise the bottle to your lips. \"Not so fast, cowbody. The last the I need right now is you shooting of your gun at a band of pink elephants.\"" return true } if self in bottle and pieceofcloth in bottle "Not with that rag plugging the bottle, you won't." elseif not self.misc {"It smells pretty damn strong. Are you sure you want to try it?" self.misc = 1} else { ! The binge routine--a terrible indulgence "You take a tiny sip of Grandma Grady's Wicked XXX, and the next thing you know..." while child(player) {if child(player) is worn child(player) is not worn move child(player) to location} local r r = random(2) select r case 0: MovePlayer(yourroom) case 1: MovePlayer(billiardsroom) case 2: MovePlayer(mainstreet_north) r = random(2) select r case 0: {Acquire(player, propellerbeanie) propellerbeanie is worn} case 1: Acquire(player, childsrattle) case 2: Acquire(player, holybible) counter = counter + 240 if counter > 1260 ! i.e. 9:00 p.m. counter = 1260 Activate(headache, 60) } } object DoSmell { while child(player) {if child(player) is worn child(player) is not worn move child(player) to location} counter = counter + 10 if counter> 1260 counter = 1260 "You take a sniff of the hootch...\n\n\ ...and wake up ten minutes later, lying on the ground, surrounded by your possessions. You wait for your head to clear, then stand up." } } is hidden } fuse headache {} event headache { if self.tick "\nYour head hurts like hell." } ! Random binge objects: object propellerbeanie "propeller beanie" { article "a" nouns "beanie", "hat" adjective "striped", "little", "propeller" long_desc { "Nice, striped little propeller beanie."; if self is worn " The propeller spins when you walk." print newline } is clothing } object childsrattle "child's rattle" { article "a" nouns "rattle", "toy" adjective "child's" long_desc "It is indeed a child's rattle. Thought you would've grown out of something like that by now." before { object DoWave {"Rattle, rattle."} } } object holybible "Holy Bible" { article "the" nouns "bible", "book", "scripture" adjective "holy" before { object DoLook {"You start to read the Bible. You stop when you start feeling guilty."} } is readable } !---------------------------------------------------------------------------- ! EMPTY LOT !---------------------------------------------------------------------------- room emptylot "empty lot" { long_desc "Standing where you are, in the middle of a thicket of weeds, you're faced by a wall of impenetrable brush to the north. Just to the right of the trees, to the northeast, is the entrance the local stable. Back east is Main Street." n_to { if topbranch is not visited "There's no way you'll be able to navigate your way through that thick brush." else: return hiddenmeadow } e_to mainstreet_north vehicle_path oldmare, redstallion is outside } scenery lottrees "impenetrable brush" { found_in emptylot, hiddenmeadow article "some" nouns "brush", "trees", "tree", "bushes", "bush" adjectives "thick", "impenetrable" long_desc "Very dense. If there's anything behind the trees, you'd have a heck of a time trying to fight your way through the brush to find it." } scenery lotweeds "thicket of weeds" ! special after a weed is picked { in emptylot article "a" nouns "weeds", "grass", "ground" adjectives "thicket", "patch", "weed" long_desc "They look kind of a mess. Someone really ought to get busy doing some weed-picking." before { object DoGet { if self is special "Probably not such a brilliant idea to keep digging around in the weeds while the world is passing you by." elseif not Acquire(player, weed) "Your hands are too full." else {"You pluck one of the weeds from the ground." self is special} } } } object weed "weed" ! special if Grady catches you doctoring it into a four-leaf clover { parse_rank 1 article "a" ! noun #5 becomes "clover" nouns "weed", "plant", "leaf", "leaves", 0 misc 6 long_desc { "Green. Weedish."; if not self.misc " You've plucked it bare of leaves." elseif self.misc = 1 " Only one leaf left, though." elseif self.misc ~= 6 { " There are "; NumberWord(self.misc) " leaves left that you haven't plucked."; " (Looks kinda like a "; if self.misc NumberWord(self.misc) else "no"; "-leaf clover.)" } else " Six leaves." } before { object DoGet { if self not in player return false elseif self.misc { "You pluck "; select self.misc case 1 "the last"; case 6 "a"; case else "another"; " leaf from the weed. It flutters away." self.misc = self.misc - 1 if self.misc = 4 self.noun #5 = "clover" if grady in location { weed is special ! Grady sees "\nGrady watches you, wondering the hell you're doing." } } else "You already plucked the weed bare." } } } !---------------------------------------------------------------------------- ! THE STABLE !---------------------------------------------------------------------------- room stable "stable" { long_desc "Smells musty, just like every other stable you've ever been in. There's a meager half-light drifting down from a window in the loft overhead, and the stable door leads back out onto Main Street to the southeast. If anybody in this town owned a horse, this is where they'd keep it." e_to {return stabledoor.door_to} se_to {return stabledoor.door_to} out_to {return stabledoor.door_to} n_to {return stalldoor.door_to} in_to {return stalldoor.door_to} u_to { if ladder in location and ladder.misc return loft else "You can't reach the loft from here. It's a good ten feet over your head." } vehicle_path oldmare, redstallion } door stabledoor "heavy stable door" { between stable, mainstreet_north article "a" noun "door" adjectives "heavy", "stable" after { object DoOpen, DoClose { "With a grunt, you heave the stable door "; if verbroutine = &DoOpen "open." else: "closed." } } is not open is shootable } door stalldoor "stall gate" { in stable between stable, stall article "a" nouns "door", "gate" adjectives "stall" short_desc { if self is open "The gate to the stall to the north is open." else "The gate to one of the stalls to the north is closed." } after { object DoOpen, DoClose { "The gate swings "; if verbroutine = &DoOpen "open"; else: "shut"; " with a creak." } } is not open is shootable } room stall "stall" { long_desc { "Any question as to where the musty odor of the stable is coming from is answered by coming in here--the pile of old hay on the ground was probably due for a changing a couple of weeks ago. A few long-since-used pieces of leather tack--a bridle and saddle among them--hang on the wall. \ The stall door to the south is "; if stalldoor is open "open." else: "closed." } s_to {return stalldoor.door_to} out_to {return stalldoor.door_to} vehicle_path oldmare, redstallion } scenery stallstuff "things in the stall" { in stall article "some" nouns "stall", "hay", "tack", "saddle", "bridle" adjectives "things", "in", "musty", "old", "cracked", "leather", \ "pile" before { object { "None of that stuff is likely to be of any use to you." } } } horse oldmare "old black mare" { in stall article "an" nouns "mare", "horse", "animal", "mount" adjective "old", "black", "female" initial_desc "Standing sullenly in the corner of the stall is an old black mare." long_desc "Built neither for comfort, nor for speed. This aging mount would probably be happiest if you just left it alone." vehicle_move 1 ! always ready to move vehicle_verbs "ride", "gallop", "trot", "canter" reach oldmare before { object DoEnter { if ladder in self "Not with that ladder, you won't." else: return false } } corpse oldmare_corpse } object oldmare_corpse "dead mare" { article "a" noun "horse", "corpse", "body" adjectives "dead", "old", "black", "mare" short_desc "There's a dead horse here--namely what's left of the old black mare." long_desc "The old black mare is dead. Nice move." is static, shootable } scenery loftobject "loft" { in stable article "a" nouns "loft", "window", "hayloft", "wall" adjective "hay" before { object DoGo, DoEnter {word[1] = "up" words = 1 Perform(&DoGo)} } long_desc "The hayloft is a good ten feet over your head." is platform } room loft "sitting in the hayloft" { long_desc "About ten or so feet off the stable floor. Too far to jump--better to make wise use of the ladder which is still leaning against the wall. Sunlight shines in through a small square window." d_to stable nw_to topbranch out_to topbranch } door loftwindow "window" { between loft, topbranch article "the" nouns "window", "tree" adjectives "small", "square", "branches", "branch", "massive", "oak" long_desc { if location = loft "Through the window you can see the branches of a massive oak tree." else "It's far, far overhead." } before { object DoClimb {Perform(&DoGo, self)} } is transparent, not openable, open } !---------------------------------------------------------------------------- ! IN AND ABOVE THE HIDDEN MEADOW !---------------------------------------------------------------------------- room topbranch "perched on the top branch of an oak tree" ! special once extra description is printed { long_desc { "In the manner of a crow or vulture or some other sort of top-branch-perching bird. The loft window is behind you, technically to the southeast, while the ground is perilously far below." } before { location DoJump { "Icarus-like, you leap outward from the branch. Your arms outstretched, your head thrown back, the wind rushing past you, the ground far, far below--\ you've never felt such a feeling. You've also never felt such a feeling as when you pancake onto that same ground, hammering the life out of yourself with a bone-crushing \IWHUMP\i." endflag = 2 } } after { location DoMove { if self is not special "\nInterestingly enough, from your bird's-\ eye view, you can map out a ragged, zig-\ zagging path through the thick brush below, leading south to the empty lot." self is special self is scored } location DoDrop { if object = bottle { "(The whiskey bottle falls to the ground below and smashes on a tree root sticking out of the earth.)" remove bottle move brokenbottle to hiddenmeadow } else { print "("; CThe(object); " falls to the ground below.)" move object to hiddenmeadow } } } misc 0 d_to { if not self.misc "Down, you say? Well, you begin to shimmy down the tree, precariously clutching onto branches and outcroppings of tough bark--whatever you can reach. \ Finally, scraped and bruised all to hell, you find yourself on firm ground." else "Once more you scramble painfully and precariously down the length of the tree to the ground." self.misc = 1 return hiddenmeadow } cant_go "You're in a tree. Think about it." in_to loft se_to loft is outside } room hiddenmeadow "hidden meadow" ! special once navigational message is printed (going s through bushes) { long_desc "Obviously not a popular picnic spot; in fact, if not for your vantage point perched atop the tree, you would never have known it was here, much less be able to blindly navigate your way through the thick of trees to the south. \ The meadow opens up to the west." u_to "You almost killed yourself getting down. There ain't much chance you're going to be able to climb back up again." w_to stratfordsporch sw_to 0 s_to { if self is not special {self is special "\nYour parched brain tries as hard as it possibly can to remember what the path through the trees looked like from above, and you start forging a path..."} return emptylot } after { location DoGo, DoMoveinVehicle { if stratford is not special and redstallion is moved {"\nOkay. Wait a second. Let's think about this just for a moment. You trick the guy, stuff him full of sticky taffy, and then you steal his horse. Seemed to work out okay. \ But then you come back? Are you out of your mind? Next time you'd better think a little harder. Except that there won't be a next time, because Stratford swings his shotgun up and unloads it right through you." endflag = 2} else: return false } } vehicle_path redstallion is outside } scenery oaktree "oak tree" { in hiddenmeadow article "an" nouns "tree" adjectives "oak", "towering" long_desc "The oak tree towers high overhead, its top branch reaching right up to the window of the stable." before { object DoClimb {return location.u_to} } is shootable } scenery stablewindow "stable window" { in hiddenmeadow article "the" noun "window" adjective "stable", "small", "loft" long_desc "It's far, far overhead." before { object DoGo, DoEnter {"You can't--it's too high up."} } is enterable, open } scenery stablewall "stable wall" { in hiddenmeadow article "the" noun "wall" adjective "stable" long_desc "All you can see is the back wall of the stable. The small window that you clambered out of is near the top." before { object DoClimb {"As luck would have it, you're out of pixie dust."} } is shootable } horse redstallion "fiery red stallion" ! special once warning message about Stratford is printed { in hiddenmeadow article "a" nouns "stallion", "horse", "animal", "mount" adjectives "fiery", "red", "male", "stratford's" initial_desc "Strutting proudly around the meadow is a fiery red stallion." short_desc "The fiery red stallion is standing patiently nearby." long_desc "A finer-looking animal you've never seen. You could probably ride forever on this horse, and it wouldn't even break a sweat." vehicle_move { if object ~= w_obj and object ~= s_obj {"You can't ride that way." return false} "You give the red stallion a couple of pokes in its sides with your spurs, and the animal breaks into a trot. A couple of seconds later, however, an old man in an ascot and a mop of gray hair "; if stratford is known "(John Stratford, that is) "; "comes chasing after you from the west." if stratford is not special { "\n\"Get off my blimey horse!\" he hollers at you in a proper British accent. Right before jamming a couple of shells into a double-barrelled shotgun and shooting you dead." endflag = 2 } elseif self is not special { "\nHe tries to shout something at you, but his mouth is gummed up with taffy. The same goes for his fingers, which are useless so far as pulling the trigger on the shotgun he is aiming at you." self is special Activate(stratfordtaffy_fuse, 5) self is scored stratford is unfriendly score = 2 } self.vehicle_move = 1 } reach redstallion before { object DoEnter { if ladder in self "Not with that ladder, you won't." else: return false } parent(player) DoMoveinVehicle { if location = endofroad and sarah in sarahshorse \ and bucky in sarahshorse and object = w_obj { "You dig in the spurs and gallop westward along the road back to Tumbleweed Flats. \ Sarah races after you, with Uncle Bucky, his hands still tied, bouncing helplessly on the saddle behind her. Looks like a rescue, cowboy.\n" "You pass across a wide mesa and slow to a stop. Time for a well-deserved rest. \ Sarah rides up behind you, and both she and Uncle Bucky dismount. You stand there sihouetted by the light of the Western sunset, the four of you: you, Sarah, Bucky, and a cactus." "\nSo, how did you do?"; DoScore(true) endflag = 1 } else: return false } } vehicle_verbs "ride", "gallop", "trot", "canter" corpse redstallion_corpse } object redstallion_corpse "dead stallion" { article "a" noun "horse", "corpse", "body" adjectives "dead", "fiery", "red", "stallion" short_desc "The body of the fiery red stallion is here." long_desc "You put a bullet in him, and now he's dead. A complete waste of an absolutely beautiful horse. Way to go." is static, shootable } !---------------------------------------------------------------------------- ! STRATFORD'S MANSION !---------------------------------------------------------------------------- room stratfordsporch { name { if parent(player) ~= location ! i.e. on a horse return "near the front porch" else: return "front porch" } long_desc { "Of a mansion, or what might be considered a mansion if it weren't quite so rustic looking. It's as if someone took a giant tub of Dr. Ricardo's Growth Tonic (which he peddles to the unsuspecting populace whenever he's in town, about every four months or so) and poured it over one of the ramshackle houses--albeit one of the nicer ones--scattered about Tumbleweed Flats. "; if parent(player) ~= location "If you weren't on a horse, you could "; else: "You can "; "enter the house to the west." } e_to hiddenmeadow w_to { "Stratford brandishes his shotgun in your general direction. \ \"Not so fast, tumbleweed,\" he mutters in his clipped British accent"; if stratford is special ", barely understandable through his mouthful of sticky taffy"; print "." } s_to { "As you wander off to the south and around the corner, Stratford loses sight of you. And interest." hiddenmeadow.sw_to = aroundcorner return aroundcorner } is outside } scenery mansion_object "Stratford mansion" { found_in stratfordsporch, hiddenmeadow, aroundcorner article "the" nouns "mansion", "house", "abode" adjective "stratford", "stratford's", "his" long_desc { select location case hiddenmeadow "You can see the Stratford mansion over to the west." case else "Quite a place, as far as these parts go. At least compared to the typical pile of slapped-\ together planks that passes for a house around here." } before { object DoEnter { if location = stratfordsporch return location.w_to else "You can't get into the mansion from here." } } is enterable } scenery stratfordsproperty "Stratford's property" { in stratford nouns "things", "stuff", "property", "possessions", "chair", "seat", \ "pipe" adjectives "rocking" before { object DoGet {"Wouldn't mess with Stratford's property if I was you."} } is known } scenery stratfordsshotgun "shotgun" { in stratford article "his" nouns "shotgun", "gun", "weapon" adjective "shot" is known } room aroundcorner "around the corner" { long_desc "From here, around the corner of the house from the front porch, you can peek out and see John Stratford sitting in his rocking chair, his pipe in one hand, his shotgun in the other." n_to { "Stratford looks up as you return. "; if stratford is special "Through a mouthful of taffy, he mutters something that sounds like: "; else "He says: "; "\"Oh. I almost forgot about you when you wandered off.\"" return stratfordsporch } e_to hiddenmeadow is outside } !---------------------------------------------------------------------------- ! THE ROAD OUT OF TOWN !---------------------------------------------------------------------------- room edgeoftown "edge of town" { long_desc "You can still see Tumbleweed Flats behind you where the road curves around from the south. A dead, rotted tree stands here, marking the memory of the last living thing between here and where the road disappears into the eastern distance." e_to dustyroad s_to mainstreet_north vehicle_path oldmare, redstallion is outside } scenery deadtree "dead, rotted tree" { in edgeoftown article "a" nouns "tree", "plant", "bush" adjectives "dead", "rotted", "gray" long_desc "The tree is now gray and rotted. It marks the point where the road comes up from the southwest and turns east." is shootable } room dustyroad "long and dusty road" ! special once warning message about continuing eastward is printed { misc 0 long_desc {"Brambles and cactuses all over the place. Some might call it the desert. Not all that lucky for you, seeing as you're wandering around in the middle of it."} extra_scenery "brambles", "cactuses", "cactus", "bramble", "desert" e_to { if sarah is not known { "There's nothing that way. Not that you know about, anyway. And even if you did or thought you did or just kinda had a hunch there might be, it would probably be best to find and talk to someone who knows a little more about it than you. This just may be a hint." return true } if player in self or player in oldmare { if player in oldmare { "The old black mare continues plodding eastward..."; if self is not special " (Now would be a good time to decide that a younger, stronger horse would be a good idea.)"; print newline } else { "You continue trudging eastward on foot..."; if self is not special " (Now would be a good time to go back, get yourself a horse, and do this right.)"; print newline } self is special self.misc = self.misc + 1 if self.misc = 5 or self.misc = 10 { if player in oldmare { move player to location remove oldmare move oldmare_corpse to location "In your wisdom, you have driven the old black mare past the point of exhaustion. To be a little more exact (and graphic), the poor horse suddenly collapses, moaning and wheezing, sending you tumbling to the ground. Then she coughs her last and dies." } else {"(Having vastly overestimated your own ability to make this little journey on your own, you collapse face-first onto the dirt road. And then you stop breathing.)" endflag = 2} } elseif self.misc = 2 { if player in oldmare "Common sense says this old mare ain't gonna make it. Common sense says go back." else "Common sense says you ain't gonna make it on foot. Common sense says go back." } elseif self.misc = 3 { if player in oldmare "The mare wheezes as she plods along." else "Something about being out in the middle of here, practically the desert, with no shade and no water, is making you awfully thirsty. Go figure." } ! Leave objects behind in the dust local i for i in self { if i ~= player and i ~= oldmare remove i } DescribePlace(self) } else { "The red stallion gallops along without faltering, eating up the distance, Tumbleweed Flats disappearing far behind you." counter = counter + 30 return endofroad } } w_to { if player in self or player in oldmare and self.misc { self.misc = self.misc - 1 if player in oldmare "The old black mare plods back in the direction of town..." else "You trudge back in the direction of town..." ! Leave objects behind in the dust local i for i in self { if i ~= player and i ~= oldmare remove i } DescribePlace(self) } else: return edgeoftown } vehicle_path oldmare, redstallion is outside } !---------------------------------------------------------------------------- ! THE END OF THE ROAD !---------------------------------------------------------------------------- room endofroad "end of the road" { long_desc "The dusty road stretches back to the west as far as the eye can see, and then some. A steep bank rises up to the southeast; you can't see what might be at the top of it." w_to { if player in self ! on foot "Now, come on...you know better than to try to make it on foot." else { "The red stallion gallops along, and before too long delivers you safely to the west end of the long, dusty road." counter = counter + 30 return edgeoftown } } vehicle_path redstallion u_to topofbank se_to topofbank is outside } vehicle sarahshorse "Sarah's horse" { in endofroad nouns "horse", "animal", "mount" adjectives "sarah's", "arabian", "beautiful" short_desc { if sarah in self and bucky in self "Sarah is on her horse, with Uncle Bucky perched precariously in the saddle behind her." elseif sarah in self "Sarah is here, sitting atop her beautiful Arabian horse." else "Sarah's Arabian is here, snacking contentedly on a small patch of grass." } list_contents 1 long_desc "A beautiful Arabian, perhaps two years old. The kind of horse you rarely had the chance to see for yourself--well, before you gummed up Stratford and swiped his stallion, that is." vehicle_move { if redstallion is shot "Sarah says, \"Hey, genius. You're the one who shot your horse. Don't go anywhere near mine.\"" else "Sarah asks: \"And why, if you don't mind me asking, don't you just ride your own horse?\"" return false } after { object DoShoot { "You take relatively good aim at Sarah's horse and pull the trigger. It rears up and lets out a frightened whinny before crumpling to the ground in a dying heap.\n\n\ Sarah stares at you like you're out of your mind. \ Which you probably are. \"You dumb, cactus-licking son of a bitch,\" she mutters. Right before shooting you." endflag = 2 } } vehicle_verbs "ride", "gallop", "trot", "canter" prep "on", "off" is shootable } !---------------------------------------------------------------------------- ! THE HEFFER HOUSE AND ENVIRONS !---------------------------------------------------------------------------- room topofbank "top of a steep bank" { long_desc { "From the top of this incline, you can look back to see the dusty road stretching out of sight to the west. Over the crest of the hill, you can see the Heffer ranch house to the south--quite an impressive sight, to be honest. A hayfield opens up to the east." if largeduane in frontofhouse "\_ Standing guarding the front of the house is Glen Heffer's mean-looking henchman Large Duane. \ Lucky for you he can't see you." elseif largeduane in hayfield "\_ Large Duane is off to the east, trying to put out the burning haystack!" largeduane is known } nw_to endofroad d_to endofroad e_to hayfield s_to frontofhouse se_to besidehouse is outside } scenery ranchhouseobject "ranch house" { found_in topofbank, hayfield, frontofhouse article "the" nouns "house", "ranchhouse", "building" adjective "ranch", "heffer", "family" long_desc { "The Heffer ranch house is a low, wide structure--only one floor but spread out over what seems like half an acre."; if location = topofbank " From here, you can see where you might actually be able to slip around the far side of the house to the southeast." print newline } door_to { if location = frontofhouse return ranchhousedoor.door_to else: return frontofhouse } } scenery hayfieldobject "hayfield" { found_in topofbank, hayfield, frontofhouse article "a" nouns "hayfield", "haystack", "haystacks", "stack", "stacks", \ "field", "earth", "fire", "blaze" adjective "hay", "golden", "scattered", "gold", "patches", "charred" \ "blackened" misc 0 ! 0 = normal, 1 = burning, 2 = burned long_desc { select self.misc case 0 "The hayfield is full of scattered golden haystacks drying in the hot sun." case 1 "Several of the haystacks are ablaze!" case 2 "The hayfield is peppered with patches of blackened earth and charred hay." } before { object DoBurn { if player not in hayfield "Not from here you won't." elseif not xobject or xobject = match { if match not in player "Except that you don't have a match." else {"The instant you touch the match to one of the haystacks, it seems like the whole field lights up like a bonfire. Must've been some really, really, really dry hay. At any rate, you were standing in the middle of it, and..." endflag = 2} } elseif xobject = bottle or xobject = pieceofcloth \ or xobject = xxx "Hmmm. Be a little more specific as to how you might go about that." else: "You can't start a fire with that." } object DoExtinguish { if self.misc = 1 "Not likely--the fire is a little bigger than that." else: return false } } door_to hayfield } room frontofhouse "front of the Heffer ranch house" { long_desc { "Nice building, no doubt the product of years of ill-gotten gains. Directly south of you is the front door, which is "; if ranchhousedoor is open "open wide"; else: "closed"; ". You can backtrack to the top of the steep bank to the north, or go northeast into the hayfield." } n_to topofbank ne_to hayfield s_to: return ranchhousedoor.door_to in_to: return ranchhousedoor.door_to is outside } door ranchhousedoor "ranch house door" { between frontofhouse, insidehouse article "the" noun "door" adjectives "front", "ranch", "house", "ranchhouse", "ranch-house" before { object DoLock, DoUnlock { if location ~= insidehouse "You can only lock or unlock the door from the inside." else: return false } } is lockable } room hayfield "hayfield" { long_desc { select hayfieldobject.misc case 0 "Standing amidst the scattered golden haystacks drying in the hot sun. In fact, the hay is so dry it crackles under your feet as you step on it. From here, you can either go back west where you came from, or southwest toward the Heffer ranch house." case 1 "\I--which is currently ablaze!\i" case 2 "All that's left of it, however, are the charred remains of the burned haystacks, recently torched by you." } w_to topofbank sw_to frontofhouse after { location DoGo { if hayfieldobject.misc = 2 { "\n(Here would perhaps be a good point to stop and point out the inherent danger in strolling into a burning hayfield. Perhaps, if said danger was not at this moment so painfully obvious to you, the way you're presently being roasted...)" endflag = 2 } else: return false } } is outside } room besidehouse "beside the house" { long_desc "Nestled between the house and the edge of the hayfield. \ There isn't much here except a window." nw_to topofbank out_to topofbank cant_go: "You can only go out back to the northwest." in_to: "Try using the door around front." is outside } scenery housewindow "window" { nouns "window", "windows" in besidehouse long_desc { "Through the window you can see the inside of the house"; if glenheffer in livingroom {", as well as two men. One of the men seems to be holding the other hostage--the giveaway being the gun he's holding on him.\n" "\"Uncle Bucky!\" exclaims Sarah. Then her eyes narrow. \"And that bastard Glen Heffer.\"" glenheffer is known bucky is known} else "; there's no one in sight." } before { object DoHit { "Your attempt to break the window attracts the attention of Glen Heffer, Large Duane, and the rest of Heffer's hired guns, who corner you against the house and proceed to do away with you turkey-shoot-\ style." endflag = 2 } } is transparent } !---------------------------------------------------------------------------- ! INSIDE THE HOUSE !---------------------------------------------------------------------------- room insidehouse "inside the house" { long_desc "This is the front hallway or foyer or entrance or whatever you want to call it. The front door is behind you to the north. The house opens up into the east wing to the east and the west wing to the west. (Mental note: you can hear voices coming from either wing). Going straight south will take you through to the living room, and it looks like the kitchen is off to the southwest--you can see pots, pans, and a cast-iron stove through the archway." n_to: return ranchhousedoor.door_to e_to eastwing w_to westwing sw_to kitchen s_to livingroom } room eastwing "east wing" { long_desc { "Walking east from the front entrance, you pass through Glen Heffer's game room, full of animals that made a stop at the taxidermist's on their way here from the wild. Lots of ivory, skins, furs--the marks of a big-game hunter. \ Also lots of weapons, which probably explains the preponderance in this room of guys with guns--Heffer's hired guns, to be exact--who sit around cleaning, reloading, and talking about cleaning and reloading and shooting." run self.misc } misc { "\nThe hired guns look up as you come in; hell, they're as surprised as you are. But they quickly get over it and respond with the clicking of pistol hammers, the whoosh-\ clack of shotgun loading, and the KABLAM! of several pounds of hot lead being sent in your direction. (Next time you make a mental note, try to remember where you put it.)" endflag = 2 } w_to insidehouse } room westwing "west wing" { long_desc { "This is the eating area of the kitchen to the south; from here you can go back to the front entrance to the east. \ This isn't the proper dining room, you guess, seeing as it doesn't seem quite fancy enough. Also seeing as it's currently populated by a host of less-\ than-immaculately-kept hired guns how are feasting on vittles consisting of tough grilled steak and lots of baked beans." run eastwing.misc } e_to insidehouse s_to kitchen } room kitchen "kitchen" { long_desc "It's a kitchen large enough to prepare grub for the Heffer family and all Glen Heffer's hired help--what most people in Tumbleweed Flats call hired guns. (And you might want to count the Heffer ranch-house cook among your supporters. After all, you did lighten his workload by one.) There's a big cast-iron stove over to one side, and a huge array of pots and pans and other dishes in various stages of use, being used, and getting ready to be used again. Walking north will take you straight into the west wing, while northeast leads back to the main entrance. \ South continues right on out the back door." n_to westwing ne_to insidehouse s_to backyard before { location DoSmell {"Yep--definitely steak and beans."} } } scenery stove "cast-iron stove" { in kitchen article "a" nouns "stove", "appliance", "oven" adjective "cast", "iron", "cast-iron" long_desc "It's a massive, bulky, cast-iron number, taking up most of one corner of the kitchen." before { object DoTouch {"It's warm, as if it's recently been used for cooking. Come to think of it, you sniff and notice the smell of steak and baked beans coming from somewhere."} } capacity 20 holding 0 is platform } scenery potsandpans "pots and pans" { in kitchen nouns "pots", "pans", "pot", "pan", "dishes", "dish" long_desc "Your basic pots and pans. Although there are a lot of them. Time to start putting two and two together, partner. Lots and lots of folks get fed here. How many of them you think are going to be your friend?" before { object DoGet {"The last thing you need right now is to start a-\ clatterin' away in here trying to make off with the Heffer family's collection of pots and pans."} } } room livingroom "living room" { long_desc { "A giant fireplace takes up most of the east wall. Typical living-room furniture and adornments decorate the room--\ although these are perhaps a little nicer than usual. The room opens up to the entrance hall to the north; going south will take you out the back door to the rear of the house." if glenheffer in location { "\nSitting in a chair is an old man, cheerful despite the fact that his hands are tied with coarse rope. He's having the business end of a pistol brandished at him by another man--Glen Heffer, by his resemblance to the late Roy." } } n_to insidehouse e_to fireplace s_to: return backdoor.door_to } object buckyrope { in bucky nouns "rope", "twine", "cord", "knot" adjectives "coarse" long_desc "The coarse rope is knotted tightly around Uncle Bucky's hands." before { object DoUntie, DoGet { "You'll never get the rope untied--it's knotted too tightly." } } is hidden } scenery fireplaceobject "fireplace" { in livingroom article "a" nouns "fireplace", "place", "hearth" adjectives "fire", "fieldstone", "field", "stone" long_desc "It's a large fieldstone fireplace with a wide hearth. It's big enough--to be quite honest--that a couple of adults could probably squeeze their way inside." door_to fireplace } room fireplace "hiding in the fireplace" { long_desc "Safely concealed from the rest of the living room, although you still have a pretty clear view. A pretty good hiding place, all things considered. So long as no one stokes up the fire." w_to livingroom out_to livingroom } scenery livingroomobject "living room" { in fireplace article "the" noun "room" adjective "living", "other", "rest" long_desc ! shares the actual room description run livingroom.long_desc door_to livingroom } !---------------------------------------------------------------------------- ! OUTSIDE THE HOUSE !---------------------------------------------------------------------------- door kitchendoor "kitchen door" { between backyard, kitchen article "the" noun "door" adjectives "kitchen" before { object DoLock, DoUnlock { if location ~= kitchen "You can only lock or unlock the door from the inside." else: return false } } is lockable } door backdoor "back door" { between backyard, livingroom article "the" noun "door" adjectives "back", "ranch", "house", "ranchhouse", "ranch-house" before { object DoLock, DoUnlock { if location ~= livingroom "You can only lock or unlock the door from the inside." else: return false } object DoOpen { if glenheffer in backyard { "As soon as you open the door, you are greeted by a flash of light followed by a loud \IBANG\i a split-second later. As your knees buckle and your eyes close, the last thing you see is Glen Heffer's smoking pistol. A rule of thumb for the next life: Never open a door behind which is waiting someone who wants to kill you." endflag = 2 } else: return false } } is lockable, locked } room backyard "behind the ranch house" { long_desc "The back door and the kitchen door lead back into the house to the north and northwest, respectively. From here, you can look out over the steep bank you originally came up--\ almost a cliff, really--at the bottom of which are two horses: yours and Sarah's." nw_to: return kitchendoor.door_to n_to: return backdoor.door_to d_to: "No, really: it's practically a cliff, and unless you feel like jumping, going down is pretty much out of the question." w_to: "No, really: it's practically a cliff, and unless you feel like jumping, going west is pretty much out of the question." before { location DoGo { if glenheffer in location { "Glen Heffer aims the barrel of his gun right between your shoulder blades and puts a pill in your back as you try to get away." endflag = 2 } else: return false } location DoJump { "You leap over the cliff and into the open air. \ Looking down, you can see your horse below you. \ You sight your target between your legs as you fall--" "\n--\IPLUNK!\i Right in the saddle." Deactivate(sarahfollow_daemon) Deactivate(duaneprowl_fuse) move player to redstallion location = endofroad DescribePlace(location, true) if sarah in sarahshorse "\nSarah gives you an approving nod. \"Nice one,\" she says." } } after { location DoGo { if glenheffer in location Activate(glenheffer_fuse, 2) } } is outside }