+!% -SD\r
+\r
+!============================================================================\r
+Constant Story "Captain Fate";\r
+Constant Headline\r
+ "^A simple Inform example\r
+ ^by Roger Firth and Sonja Kesserich.^";\r
+!Release 1; Serial "020428"; ! IBG first edition (public beta)\r
+!Release 2; Serial "020827"; ! IBG second edition\r
+Release 3; Serial "040804"; ! for keeping track of public releases\r
+\r
+Constant MANUAL_PRONOUNS;\r
+Constant MAX_SCORE 2;\r
+Constant OBJECT_SCORE 1;\r
+Constant ROOM_SCORE 1;\r
+\r
+Replace MakeMatch; ! required by pname.h\r
+Replace Identical;\r
+Replace NounDomain;\r
+Replace TryGivenObject;\r
+\r
+Include "Parser";\r
+Include "pname"; ! pname.h is from the Archive\r
+\r
+Object LibraryMessages ! must be defined between Parser and VerbLib\r
+ with before [;\r
+ Buy: "Petty commerce interests you only on COUNTED occasions.";\r
+ Dig: "Your keen senses detect NOTHING underground worth your\r
+ immediate attention.";\r
+ Pray: "You won't need to bother almighty DIVINITIES to save\r
+ the day.";\r
+ Sing: "Alas! That is not one of your many superpowers.";\r
+ Sleep: "A hero is ALWAYS on the watch.";\r
+ Sorry: "Captain FATE prefers ACTION over apologies.";\r
+ Strong: "An unlikely vocabulary for a HERO like you.";\r
+ Swim: "You quickly turn all your ATTENTION towards locating a\r
+ suitable place to EXERCISE your superior strokes,\r
+ but alas! you find none.";\r
+ Miscellany:\r
+ if (lm_n == 19)\r
+ if (clothes has worn)\r
+ "In your secret identity's outfit, you manage most\r
+ efficaciously to look like a two-cent loser, a\r
+ good-for-nothing wimp.";\r
+ else\r
+ "Now that you are wearing your costume, you project\r
+ the image of power UNBOUND, of ballooned,\r
+ multicoloured MUSCLE, of DASHING yet MODEST chic.";\r
+ if (lm_n == 38)\r
+ "That's not a verb you need to SUCCESSFULLY save the day.";\r
+ if (lm_n == 39)\r
+ "That's not something you need to refer to in order to\r
+ SAVE the day.";\r
+ ];\r
+\r
+Include "VerbLib";\r
+\r
+!============================================================================\r
+! Object classes\r
+\r
+Class Room\r
+ with description "UNDER CONSTRUCTION",\r
+ has light;\r
+\r
+Class Appliance\r
+ with before [;\r
+ Take,Pull,Push,PushDir:\r
+ "Even though your SCULPTED adamantine muscles are up to the task,\r
+ you don't favour property damage.";\r
+ ],\r
+ has scenery;\r
+\r
+!============================================================================\r
+! The game objects\r
+\r
+Room street "On the street"\r
+ with name 'city' 'buildings' 'skyscrapers' 'shops' 'apartments' 'cars',\r
+ description [;\r
+ if (player in booth)\r
+ "From this VANTAGE point, you are rewarded with a broad view\r
+ of the sidewalk and the entrance to Benny's cafe.";\r
+ else\r
+ "On one side -- which your HEIGHTENED sense of direction\r
+ indicates is NORTH -- there's an open cafe now serving\r
+ lunch. To the south, you can see a phone booth.";\r
+ ],\r
+ before [;\r
+ Go:\r
+ if (player in booth && noun == n_obj) <<Exit booth>>;\r
+ ],\r
+ n_to [; <<Enter outside_of_cafe>>; ],\r
+ s_to [; <<Enter booth>>; ],\r
+ in_to "But which way?",\r
+ cant_go\r
+ "No time now for exploring! You'll move much faster in your\r
+ Captain FATE costume.";\r
+\r
+Object "pedestrians" street\r
+ with name 'passing' 'people' 'pedestrians',\r
+ description\r
+ "They're just PEOPLE going about their daily HONEST business.",\r
+ before [;\r
+ Examine:\r
+ return false;\r
+ default:\r
+ "The passing pedestrians are of NO concern to you.";\r
+ ],\r
+ has animate pluralname scenery;\r
+\r
+Appliance booth "phone booth" street\r
+ with name 'old' 'red' 'picturesque' 'phone' 'booth' 'cabin'\r
+ 'telephone' 'box',\r
+ description\r
+ "It's one of the old picturesque models, a red cabin with room\r
+ for one caller.",\r
+ before [;\r
+ Open:\r
+ "The booth is already open.";\r
+ Close:\r
+ "There's no way to close this booth.";\r
+ ],\r
+ after [;\r
+ Enter:\r
+ "With implausible celerity, you dive inside the phone booth.";\r
+ ],\r
+ has enterable container open;\r
+\r
+Appliance "sidewalk" street\r
+ with name 'sidewalk' 'pavement' 'street',\r
+ article "the",\r
+ description\r
+ "You make a quick surveillance of the sidewalk and discover much\r
+ to your surprise that it looks JUST like any other sidewalk in\r
+ the CITY!";\r
+\r
+Appliance outside_of_cafe "Benny's cafe" street\r
+ with name 'benny^s' 'cafe' 'entrance',\r
+ description\r
+ "The town's favourite for a quick snack, Benny's cafe has a 50's\r
+ ROCKETSHIP look.",\r
+ before [;\r
+ Enter:\r
+ print "With an impressive mixture of hurry and nonchalance you\r
+ step into the open cafe.^";\r
+ PlayerTo(cafe);\r
+ return true;\r
+ ],\r
+ has enterable proper;\r
+\r
+!----------------------------------------------------------------------------\r
+\r
+Room cafe "Inside Benny's cafe"\r
+ with description\r
+ "Benny's offers the FINEST selection of pastries and sandwiches.\r
+ Customers clog the counter, where Benny himself manages to\r
+ serve, cook and charge without missing a step. At the north side\r
+ of the cafe you can see a red door connecting with the toilet.",\r
+ before [;\r
+ Go: ! The player is about to depart. Is he making for the street?\r
+ if (noun ~= s_obj) return false;\r
+ if (benny.coffee_not_paid == true ||\r
+ benny.key_not_returned == true) {\r
+ print "Just as you are stepping into the street, the big hand\r
+ of Benny falls on your shoulder.";\r
+ if (benny.coffee_not_paid == true &&\r
+ benny.key_not_returned == true)\r
+ "^^~Hey! You've got my key and haven't paid for the\r
+ coffee. Do I look like a chump?~ You apologise as only a\r
+ HERO knows how to do and return inside.";\r
+ if (benny.coffee_not_paid == true)\r
+ "^^~Just waidda minute here, Mister,~ he says.\r
+ ~Sneaking out without paying, are you?~ You quickly\r
+ mumble an excuse and go back into the cafe. Benny\r
+ returns to his chores with a mistrusting eye.";\r
+ if (benny.key_not_returned == true)\r
+ "^^~Just where you think you're going with the toilet\r
+ key?~ he says. ~You a thief?~ As Benny forces you back\r
+ into the cafe, you quickly assure him that it was only\r
+ a STUPEFYING mistake.";\r
+ }\r
+ if (costume has worn) {\r
+ deadflag = 5; ! you win!\r
+ "You step onto the sidewalk, where the passing pedestrians\r
+ recognise the rainbow EXTRAVAGANZA of Captain FATE's costume\r
+ and cry your name in awe as you JUMP with sensational\r
+ momentum into the BLUE morning skies!";\r
+ }\r
+ ],\r
+ first_time_out false, ! Captain Fate's first appearance?\r
+ after [;\r
+ Go: ! The player has just arrived. Did he come from the toilet?\r
+ if (noun ~= s_obj) return false;\r
+ if (costume has worn && self.first_time_out == false) {\r
+ self.first_time_out = true;\r
+ StartDaemon(customers);\r
+ }\r
+ ],\r
+ s_to street,\r
+ n_to toilet_door;\r
+\r
+Appliance counter "counter" cafe\r
+ with name 'counter' 'bar',\r
+ article "the",\r
+ description\r
+ "The counter is made of an astonishing ALLOY of metals,\r
+ STAIN-PROOF, SPILL-RESISTANT and VERY EASY to clean. Customers\r
+ enjoy their snacks with UTTER tranquillity, safe in the notion\r
+ that the counter can take it all.",\r
+ before [;\r
+ Receive:\r
+ <<Give noun benny>>;\r
+ ],\r
+ has supporter;\r
+\r
+Object food "Benny's snacks" cafe\r
+ with name 'food' 'pastry' 'pastries' 'sandwich' 'sandwiches' 'snack'\r
+ 'snacks' 'doughnut',\r
+ before [; "There is no time for FOOD right now."; ],\r
+ has scenery proper;\r
+\r
+Object menu "menu" cafe\r
+ with name 'informative' 'menu' 'board' 'picture' 'writing',\r
+ description\r
+ "The menu board lists Benny's food and drinks, along with their\r
+ prices. Too bad you've never learnt how to read, but luckily\r
+ there is a picture of a big cup of coffee among the\r
+ incomprehensible writing.",\r
+ before [;\r
+ Take:\r
+ "The board is mounted on the wall behind Benny. Besides, it's\r
+ useless WRITING.";\r
+ ],\r
+ has scenery;\r
+\r
+Object customers "customers" cafe\r
+ with name 'customers' 'people' 'customer' 'men' 'women',\r
+ description [;\r
+ if (costume has worn)\r
+ "Most seem to be concentrating on their food, but some do\r
+ look at you quite blatantly. Must be the MIND-BEFUDDLING\r
+ colours of your costume.";\r
+ else\r
+ "A group of HELPLESS and UNSUSPECTING mortals, the kind\r
+ Captain FATE swore to DEFEND the day his parents choked on a\r
+ DEVIOUS slice of RASPBERRY PIE.";\r
+ ],\r
+ life [;\r
+ Ask,Tell,Answer:\r
+ if (costume has worn)\r
+ "People seem to MISTRUST the look of your FABULOUS costume.";\r
+ else\r
+ "As John Covarth, you attract LESS interest than Benny's\r
+ food.";\r
+ Kiss:\r
+ "There's no telling what sorts of MUTANT bacteria these\r
+ STRANGERS may be carrying around.";\r
+ Attack:\r
+ "Mindless massacre of civilians is the qualification for\r
+ VILLAINS. You are SUPPOSED to protect the likes of these\r
+ people.";\r
+ ],\r
+ orders [;\r
+ "These people don't appear to be of the cooperative sort.";\r
+ ],\r
+ number_of_comments 0, ! for counting the customer comments\r
+ daemon [;\r
+ if (location ~= cafe) return;\r
+ if (self.number_of_comments == 0) {\r
+ self.number_of_comments = 1;\r
+ print "^Nearby customers glance at your costume with open\r
+ curiosity.^";\r
+ }\r
+ if (random(2) == 1) { ! do this 50% of the time\r
+ self.number_of_comments = self.number_of_comments + 1;\r
+ switch (self.number_of_comments) {\r
+ 2: "^~Didn't know there was a circus in town,~ comments one\r
+ customer to another. ~Seems like the clowns have the\r
+ day off.~";\r
+ 3: "^~These fashion designers don't know what to do to show\r
+ off,~ snorts a fat gentleman, looking your way. Those\r
+ within earshot try to conceal their smiles.";\r
+ 4: "^~Must be carnival again,~ says a man to his wife, who\r
+ giggles, stealing a peek at you. ~Time sure flies.~";\r
+ 5: "^~Bad thing about big towns~, comments someone to his\r
+ table companion, ~is you get the damnedest bugs coming\r
+ out from toilets.~";\r
+ 6: "^~I sure WISH I could go to work in my pyjamas,~ says a\r
+ girl in an office suit to some colleagues. ~It looks SO\r
+ comfortable.~";\r
+ default: StopDaemon(self);\r
+ }\r
+ }\r
+ ],\r
+ has scenery animate pluralname;\r
+\r
+Object benny "Benny" cafe\r
+ with name 'benny',\r
+ description\r
+ "A deceptively FAT man of uncanny agility, Benny entertains his\r
+ customers crushing coconuts against his forehead when the mood\r
+ strikes him.",\r
+ coffee_asked_for false, ! has player asked for a coffee?\r
+ coffee_not_paid false, ! is Benny waiting to be paid?\r
+ key_not_returned false, ! is Benny waiting for the key?\r
+ life [;\r
+ Give:\r
+ switch (noun) {\r
+ clothes:\r
+ "You NEED your unpretentious John Covarth clothes.";\r
+ costume:\r
+ "You NEED your stupendous ACID-PROTECTIVE suit.";\r
+ toilet_key:\r
+ self.key_not_returned = false;\r
+ move toilet_key to benny;\r
+ "Benny nods as you ADMIRABLY return his key.";\r
+ coin:\r
+ remove coin;\r
+ self.coffee_not_paid = false;\r
+ print "With marvellous ILLUSIONIST gestures, you produce the\r
+ coin from the depths of your ";\r
+ if (costume has worn) print "BULLET-PROOF costume";\r
+ else print "ordinary street clothes";\r
+ " as if it had dropped on the counter from Benny's ear!\r
+ People around you clap politely. Benny takes the coin\r
+ and gives it a SUSPICIOUS bite. ~Thank you, sir. Come\r
+ back anytime,~ he says.";\r
+ }\r
+ Attack:\r
+ if (costume has worn) {\r
+ deadflag = 4;\r
+ print "Before the horror-stricken eyes of the surrounding\r
+ people, you MAGNIFICENTLY jump OVER the counter and\r
+ attack Benny with REMARKABLE, albeit NOT sufficient,\r
+ speed. Benny receives you with a TREACHEROUS upper-cut\r
+ that sends your GRANITE JAW flying through the cafe.^^\r
+ ~These guys in pyjamas think they can bully innocent\r
+ folk,~ snorts Benny, as the EERIE hands of DARKNESS\r
+ engulf your vision and you lose consciousness.";\r
+ }\r
+ else\r
+ "That would be an unlikely act for MEEK John Covarth.";\r
+ Kiss:\r
+ "This is no time for MINDLESS infatuation.";\r
+ Ask,Tell,Answer:\r
+ "Benny is too busy for idle chit-chat.";\r
+ ],\r
+ orders [; ! handles ASK BENNY FOR X and BENNY, GIVE ME XXX\r
+ Give:\r
+ if (second ~= player or nothing) "Benny looks at you strangely.";\r
+ switch (noun) {\r
+ toilet_key:\r
+ if (toilet_key in player) "But you DO have the key already.";\r
+ if (self.coffee_asked_for == true)\r
+ if (toilet_key in self) {\r
+ move toilet_key to player;\r
+ self.key_not_returned = true;\r
+ "Benny tosses the key to the rest rooms on the\r
+ counter, where you grab it with a dextrous and\r
+ precise movement of your HYPER-AGILE hand.";\r
+ }\r
+ else\r
+ "~Last place I saw that key, it was in YOUR\r
+ possession,~ grumbles Benny. ~Be sure to return it\r
+ before you leave.~";\r
+ else\r
+ "~Toilet is only fer customers,~ he grumbles, looking\r
+ pointedly at a menu board behind him.";\r
+ coffee:\r
+ if (self.coffee_asked_for == true)\r
+ "One coffee should be enough.";\r
+ move coffee to counter;\r
+ self.coffee_asked_for = self.coffee_not_paid = true;\r
+ "With two gracious steps, Benny places his world-famous\r
+ Cappuccino in front of you.";\r
+ food:\r
+ "Food will take too much time, and you must change NOW.";\r
+ menu:\r
+ "With only the smallest sigh, Benny nods towards the menu\r
+ on the wall behind him.";\r
+ default:\r
+ "~I don't think that's on the menu, sir.~";\r
+ }\r
+ ],\r
+ has scenery animate male proper transparent;\r
+\r
+Object coffee "cup of coffee" benny\r
+ with name 'cup' 'of' 'coffee' 'steaming' 'cappuccino'\r
+ 'cappucino' 'capuccino' 'capucino',\r
+ description [;\r
+ if (self in benny)\r
+ "The picture on the menu board SURE looks good.";\r
+ else\r
+ "It smells delicious.";\r
+ ],\r
+ before [;\r
+ Take,Drink,Taste:\r
+ if (self in benny) "You should ask Benny for one first.";\r
+ else {\r
+ move self to benny;\r
+ print "You pick up the cup and swallow a mouthful. Benny's\r
+ WORLDWIDE REPUTATION is well deserved. Just as you\r
+ finish, Benny takes away the empty cup.";\r
+ if (benny.coffee_not_paid == true)\r
+ " ~That will be one quidbuck, sir.~";\r
+ else\r
+ "";\r
+ }\r
+ Buy:\r
+ if (coin in player) <<Give coin benny>>;\r
+ else "You have no money.";\r
+ Smell:\r
+ "If your HYPERACTIVE pituitary glands are to be trusted,\r
+ it's Colombian.";\r
+ ];\r
+\r
+Object outside_of_toilet "toilet" cafe\r
+ with name 'toilet' 'bath' 'rest' 'room' 'bathroom' 'restroom',\r
+ before [;\r
+ Enter:\r
+ if (toilet_door has open) {\r
+ PlayerTo(toilet);\r
+ return true;\r
+ }\r
+ else\r
+ "Your SUPERB deductive mind detects that the DOOR is\r
+ CLOSED.";\r
+ Examine:\r
+ if (toilet_door has open)\r
+ "A brilliant thought flashes through your SUPERLATIVE\r
+ brain: detailed examination of the toilet would be\r
+ EXTREMELY facilitated if you entered it.";\r
+ else\r
+ "With a TREMENDOUS effort of will, you summon your\r
+ unfathomable ASTRAL VISION and project it FORWARD towards\r
+ the closed door... until you remember that it's\r
+ Dr Mystere who's the one with mystic powers.";\r
+ Open:\r
+ <<Open toilet_door>>;\r
+ Close:\r
+ <<Close toilet_door>>;\r
+ Take,Push,Pull:\r
+ "That would be PART of the building.";\r
+ ],\r
+ has scenery openable enterable;\r
+\r
+Object toilet_door\r
+ with pname '.x' 'red' '.x' 'toilet' 'door',\r
+ short_name [;\r
+ if (location == cafe) print "door to the toilet";\r
+ else print "door to the cafe";\r
+ return true;\r
+ ],\r
+ description [;\r
+ if (location == cafe)\r
+ "A red door with the unequivocal black man-woman silhouettes\r
+ marking the entrance to hygienic facilities. There is a\r
+ scribbled note stuck on its surface.";\r
+ else\r
+ "A red door with no OUTSTANDING features.";\r
+ ],\r
+ found_in cafe toilet,\r
+ before [ ks;\r
+ Open:\r
+ if (self hasnt locked || toilet_key notin player) return false;\r
+ ks = keep_silent; keep_silent = true;\r
+ <Unlock self toilet_key>; keep_silent = ks;\r
+ return true;\r
+ Lock:\r
+ if (self hasnt open) return false;\r
+ print "(first closing ", (the) self, ")^";\r
+ ks = keep_silent; keep_silent = true;\r
+ <Close self>; keep_silent = ks;\r
+ return false;\r
+ ],\r
+ after [ ks;\r
+ Unlock:\r
+ if (self has locked) return false;\r
+ print "You unlock ", (the) self, " and open it.^";\r
+ ks = keep_silent; keep_silent = true;\r
+ <Open self>; keep_silent = ks;\r
+ return true;\r
+ Open:\r
+ give toilet light;\r
+ Close:\r
+ give toilet ~light;\r
+ ],\r
+ door_dir [;\r
+ if (location == cafe) return n_to;\r
+ else return s_to;\r
+ ],\r
+ door_to [;\r
+ if (location == cafe) return toilet;\r
+ else return cafe;\r
+ ],\r
+ with_key toilet_key,\r
+ has scenery door openable lockable locked;\r
+\r
+Object toilet_key "toilet key" benny\r
+ with pname '.x' 'toilet' 'key',\r
+ article "the",\r
+ invent [;\r
+ if (clothes has worn) print "the CRUCIAL key";\r
+ else print "the used and IRRELEVANT key";\r
+ return true;\r
+ ],\r
+ description\r
+ "Your SUPRA PERCEPTIVE senses detect nothing of consequence\r
+ about the toilet key.",\r
+ before [;\r
+ if (self in benny)\r
+ "You SCAN your surroundings with ENHANCED AWARENESS,\r
+ but fail to detect any key.";\r
+ Drop:\r
+ "Benny is trusting you to look after that key.";\r
+ ];\r
+\r
+Object "scribbled note" cafe\r
+ with name 'scribbled' 'note',\r
+ description [;\r
+ if (self.read_once == false) {\r
+ self.read_once = true;\r
+ "You apply your ENHANCED ULTRAFREQUENCY vision to the note\r
+ and squint in concentration, giving up only when you see the\r
+ borders of the note begin to blacken under the incredible\r
+ intensity of your burning stare. You reflect once more how\r
+ helpful it would've been if you'd ever learnt to read.\r
+ ^^A kind old lady passes by and explains:\r
+ ~You have to ask Benny for the key, at the counter.~^^\r
+ You turn quickly and begin, ~Oh, I KNOW that, but...~^^\r
+ ~My pleasure, son,~ says the lady, as she exits the cafe.";\r
+ }\r
+ else\r
+ "The scorched undecipherable note holds no SECRETS from\r
+ you NOW! Ha!";\r
+ ],\r
+ read_once false, ! has the player read the note once?\r
+ before [;\r
+ Take:\r
+ "No reason to start collecting UNDECIPHERABLE notes.";\r
+ ],\r
+ has scenery;\r
+\r
+!----------------------------------------------------------------------------\r
+\r
+Room toilet "Unisex toilet"\r
+ with description\r
+ "A surprisingly CLEAN square room covered with glazed-ceramic\r
+ tiles, featuring little more than a lavatory and a light switch.\r
+ The only exit is south, through the door and into the cafe.",\r
+ s_to toilet_door,\r
+ has ~light scored;\r
+\r
+Appliance light_switch "light switch" toilet\r
+ with name 'light' 'switch',\r
+ description\r
+ "A notorious ACHIEVEMENT of technological SCIENCE, elegant yet\r
+ EASY to use.",\r
+ before [;\r
+ Push:\r
+ if (self has on) <<SwitchOff self>>;\r
+ else <<SwitchOn self>>;\r
+ ],\r
+ after [;\r
+ SwitchOn:\r
+ give self light;\r
+ "You turn on the light in the toilet.";\r
+ SwitchOff:\r
+ give self ~light;\r
+ "You turn off the light in the toilet.";\r
+ ],\r
+ has switchable ~on;\r
+\r
+Appliance lavatory "lavatory" toilet\r
+ with name 'lavatory' 'wc' 'toilet' 'loo' 'bowl' 'can' 'john' 'bog',\r
+ before [;\r
+ Examine,Search,LookUnder:\r
+ if (coin in self) {\r
+ move coin to parent(self);\r
+ "The latest user CIVILLY flushed it after use, but failed to\r
+ pick up the VALUABLE coin that fell from his pants.";\r
+ }\r
+ Receive:\r
+ "While any other MORTALS might unwittingly throw just about\r
+ ANYTHING into ", (the) self, ", you remember the WISE teachings\r
+ of your mentor, Duke ELEGANT, about elderly plumbing and rising\r
+ waters.";\r
+ ];\r
+\r
+Object coin "valuable coin" lavatory\r
+ with name 'valuable' 'coin' 'silver' 'quidbuck',\r
+ description "It's a genuine SILVER QUIDBUCK.",\r
+ before [;\r
+ Drop:\r
+ if (self notin player) return false;\r
+ "Such a valuable coin? Har, har! This must be a demonstration of\r
+ your ULTRA-FLIPPANT jesting!";\r
+ ],\r
+ after [;\r
+ Take:\r
+ "You crouch into the SLEEPING DRAGON position and deftly, with\r
+ PARAMOUNT STEALTH, you pocket the lost coin.";\r
+ ],\r
+ has scored;\r
+\r
+!============================================================================\r
+! The player's possessions\r
+\r
+Object clothes "your clothes"\r
+ with name 'ordinary' 'street' 'clothes' 'clothing',\r
+ description\r
+ "Perfectly ORDINARY-LOOKING street clothes for a NOBODY like\r
+ John Covarth.",\r
+ before [;\r
+ Wear:\r
+ if (self has worn)\r
+ "You are already dressed as John Covarth.";\r
+ else\r
+ "The town NEEDS the power of Captain FATE, not the anonymity\r
+ of John Covarth.";\r
+ Change,Disrobe:\r
+ if (self hasnt worn)\r
+ "Your KEEN eye detects that you're no longer wearing them.";\r
+ switch (location) {\r
+ street:\r
+ if (player in booth)\r
+ "Lacking Superman's super-speed, you realise that it\r
+ would be awkward to change in plain view of the passing\r
+ pedestrians.";\r
+ else\r
+ "In the middle of the street? That would be a PUBLIC\r
+ SCANDAL, to say nothing of revealing your secret\r
+ identity.";\r
+ cafe:\r
+ "Benny allows no monkey business in his establishment.";\r
+ toilet:\r
+ if (toilet_door has open)\r
+ "The door to the bar stands OPEN at tens of curious eyes.\r
+ You'd be forced to arrest yourself for LEWD conduct.";\r
+ print "You quickly remove your street clothes and bundle them\r
+ up together into an INFRA MINUSCULE pack ready for easy\r
+ transportation. ";\r
+ if (toilet_door has locked) {\r
+ give clothes ~worn; give costume worn;\r
+ "Then you unfold your INVULNERABLE-COTTON costume and\r
+ turn into Captain FATE, defender of free will, adversary\r
+ of tyranny!";\r
+ }\r
+ else {\r
+ deadflag = 3;\r
+ "Just as you are slipping into Captain FATE's costume,\r
+ the door opens and a young woman enters. She looks at\r
+ you and starts screaming, ~RAPIST! NAKED RAPIST IN THE\r
+ TOILET!!!~^^\r
+ Everybody in the cafe quickly comes to the rescue, only\r
+ to find you ridiculously jumping on one leg while trying\r
+ to get dressed. Their laughter brings a QUICK END to\r
+ your crime-fighting career!";\r
+ }\r
+ thedark:\r
+ "Last time you changed in the dark, you wore the suit inside\r
+ out!";\r
+ default: ! this _should_ never happen...\r
+ "There must be better places to change your clothes!";\r
+ }\r
+ ],\r
+ has clothing proper pluralname;\r
+\r
+Object costume "your costume"\r
+ with name 'captain' 'captain^s' 'fate' 'fate^s' 'costume' 'suit',\r
+ description\r
+ "STATE OF THE ART manufacture, from chemically reinforced 100%\r
+ COTTON-lastic(tm).",\r
+ before [;\r
+ Wear:\r
+ if (self has worn)\r
+ "You are already dressed as Captain FATE.";\r
+ else\r
+ "First you'd have to take off your commonplace unassuming\r
+ John Covarth INCOGNITO street clothes.";\r
+ Change,Disrobe:\r
+ if (self has worn)\r
+ "You need to wear your costume to FIGHT crime!";\r
+ else\r
+ "But you're not yet wearing it!";\r
+ Drop:\r
+ "Your UNIQUE Captain FATE multi-coloured costume? The most\r
+ coveted clothing ITEM in the whole city? Certainly NOT!";\r
+ ],\r
+ has clothing proper;\r
+\r
+!============================================================================\r
+! Entry point routines\r
+\r
+[ Initialise;\r
+ #Ifdef DEBUG; pname_verify(); #Endif; ! suggested by pname.h\r
+ location = street;\r
+ move costume to player;\r
+ move clothes to player; give clothes worn;\r
+ lookmode = 2;\r
+ "^^Impersonating mild mannered John Covarth, assistant help boy at an\r
+ insignificant drugstore, you suddenly STOP when your acute hearing\r
+ deciphers a stray radio call from the POLICE. There's some MADMAN\r
+ attacking the population in Granary Park! You must change into your\r
+ Captain FATE costume fast...!^^";\r
+];\r
+\r
+[ DeathMessage;\r
+ if (deadflag == 3) print "Your secret identity has been revealed";\r
+ if (deadflag == 4) print "You have been SHAMEFULLY defeated";\r
+ if (deadflag == 5) print "You fly away to SAVE the DAY";\r
+];\r
+\r
+[ InScope person item;\r
+ if (person == player && location == thedark && real_location == toilet) {\r
+ PlaceInScope(light_switch);\r
+ PlaceInScope(toilet_door);\r
+ }\r
+ if (person == player && location == thedark)\r
+ objectloop (item in parent(player))\r
+ if (item has moved) PlaceInScope(item);\r
+ return false;\r
+];\r
+\r
+!============================================================================\r
+! Standard and extended grammar\r
+\r
+Include "Grammar";\r
+\r
+[ ChangeSub;\r
+ if (noun has pluralname) print "They're";\r
+ else print "That's";\r
+ " not something you must change to save the day.";\r
+];\r
+\r
+Verb 'change' 'exchange' 'swap' 'swop'\r
+ * noun -> Change;\r
+\r
+Extend 'ask'\r
+ * creature 'for' topic -> AskFor;\r
+\r
+!============================================================================\r