Constant Story "Friar Bacon's Secret"; Constant Headline "^Or, The First Luddite^"; Include "Parser"; Constant TASKS_PROVIDED; Constant NUMBER_TASKS=5; Array task_scores -> 1 1 1 1 1; Constant MAX_SCORE=5; Global suspicion = 0; Global toaster_number = 0; ! used in parsing routine Object LibraryMessages with before [; Pray: switch (suspicion) { 0: "You utter words of thanks to God for the fine life He has provided you by way of the holy men you serve."; 1, 2: "You ask God to protect the friars from the wiles of the wicked spirits that infest their quarters."; default: "You beg God to grant you sanctuary from these devils in friar's habits, or at least to let your soul into heaven in the event that they hunt you down and eat you."; } Attack: "This place is devoted to the glory of God. You'd need a very good reason to harm anything here."; ]; Include "VerbLib"; [PrintTaskName ach; switch (ach) { 0: "casting out Lucifer"; 1: "vanquishing the Harpy"; 2: "extinguishing the Fires of Hell"; 3: "silencing forever the Phantasmal Voices"; 4: "ending the earthly reign of Baphomet"; } ]; [PrintRank; print ", earning you the rank of "; switch (score) { 0: "Unwitting Pawn of the Adversary."; 1: "Witchfinder."; 2: "Ghostbuster."; 3: "Vampire Slayer."; 4: "Schattenj@:ager."; 5: "Exorcist."; } ]; [DeathMessage; switch (deadflag) { 3: print " You have fled "; 4: print " You have made a difference "; 5: print " You have become profoundly lost "; } ]; [ReadSub; "There's nothing there for you to read even if you knew how."; ]; [PourSub; "You can't pour that."; ]; [KnockSub; if (ObjectIsUntouchable(noun)) return; "You rap on", (the)noun, " gently. There's no answer."; ]; [AboutSub; "This game was made for The Awesome Toaster Adventure Gaming Contest, a themed exhibition. One of the design goals behind the present work was to be the only game in the comp that complied with the rules but didn't actually recognize the word ~toaster~. ^^As with all ~mini-comps~, the time from announcement to deadline was rather short, which gives all the participants a nice excuse for any bugs or design flaws. This is a great way to encourage perfectionists like myself to actually release things that I otherwise wouldn't. In fact, as of this release, this game has received no playtesting whatsoever. Feedback can be sent to . While you're on the net, be sure to check out Baf's Guide to the Interactive Fiction Archive, http://www.wurb.com/if/. ^^The tasks in this game should be very easy. If you want a bit more challenge, see if you can perform each of the five tasks in a different way."; ]; Object Garden "The Scholars' Garden" with name "stake", description [; print "This plot of earth is where the friars grow their herbs. Back in town, it's whispered that they grow mandrake and nightshade and such vile things to use in sorcerous potions, "; switch (suspicion) { 0: print "but that's just talk. Some of the herbs are good to eat, and others make simples for the sick, and that's an end to it."; 1, 2: print "and you're starting to think it just may be."; default: print "and you're as certain as you are alive that every word is true."; } " A trail south leads back to town, and the friars' rooms are just inside the small stone house to north."; ], n_to Passage, s_to [; switch (suspicion) { 0: "But there's so much to be done! Friar Bungay's request, for starters."; 1, 2: deadflag = 3; "You've only seen a little of what goes on around here, but that little is enough. Home you go, and tomorrow you can try to find another master."; default: deadflag = 3; "You may not be a scholar like Bacon and Bungay, but you know enough to make yourself scarce when the minions of Satan show up in force. Time to head back to town, spend about a week in bed with the covers over your head, and then choose another country to live in."; } ] ; Object -> herbs "herbs" with name "herb" "herbs" "plant" "plants" , description "Litle green fellows with a strong smell to them. Friar Bacon once gave you all their names, but you couldn't keep them. Of course, it didn't help that he was talking Latin.", before [; Attack: if (suspicion > 2) "You wreck a few of the devil-driven friars' poisonous weeds, but there's many more."; rfalse; ], has scenery pluralname; Object -> bungay "Friar Bungay" with name "friar" "bungay", describe "Friar Bungay is here, patiently pounding a stake into the soil with a sturdy mallet.", description "A very learned man, with a very impressive beard. ^^Friar Bungay looks down his nose at you. ~If you're quite finished gawping,~ he says, ~you might perhaps consider actually trying to earn your pay.~ His finger springs towards the building to south. ~Go. Fetch. Bacon. NOW!", life [; Attack, ThrowAt: "Not a chance. Hurt one of the friars and you'd never hear the end of it. ~Miles, the fellow who picks on friars~, they'd call you."; Kiss: "Oh god. Don't even think it."; Give, Show: "Friar Bungay couldn't care less about anything you own."; Ask, Tell: "~I do not wish to waste my time on discourse with the uneducated. Now get a move on.~"; Answer: "He isn't paying attention to you any more."; Order: "~No no no. That's not how it works. You do not give me orders. I give you orders, and you obey them. Is that clear?"; ], orders [; Yes, No, Sorry, Strong, Mild: "He isn't paying attention to you any more."; ], each_turn [; switch (random(15)) { 1: "^Friar Bungay looks at you. ~Are you still here? Didn't I tell you to go fetch Friar Bacon? Is there something about the situation that I'm missing, or are you just being completely, intolerably incompetent again?"; 2: "^Friar Bungay eyes his herbs critically."; 3: "^Friar Bungay clucks to himself, shakes his head, uproots his stake, moves it a few feet, and starts pounding it again."; } ], has animate proper transparent; Object mallet "mallet" bungay with name "mallet" "hammer" "sturdy" "mighty", initial "Friar Bungay's gone, but he's left his mallet.", description "It's a stong one, with a handle as long as your forearm and a head that could break a man's bones."; Object Passage "Passageway" with description "The afternoon's light slanting through the windows almost gives the flagstones a homey look, but fails to warm them. You can get back into the sunshine to the south.", s_to Garden, e_to BaconDoor, w_to BungayDoor; Object -> BungayDoor "door to Firar Bungay's room", with article "the", name "door" "to" "friar" "bungay^s" "room" "west" "w", door_dir w_to, door_to 0, when_closed "The door to Friar Bungay's room lies to the west of here.", has static door openable lockable locked; Object -> BaconDoor "door to Firar Bacon's room", with article "the", name "door" "to" "friar" "bacon^s" "room" "east" "e", door_dir e_to, door_to Chamber, when_closed "Friar Bacon's room lies past the closed door to the east.", when_open "The door to the east stands open, showing Friar Bacon's room.", after [; Open: if (self hasnt general) { give self general; "At your touch, the door creaks open. Odd, Friar Bacon usually keeps his chamber locked."; } rfalse; ], before [; Touch, Knock, Push: if (self hasnt general) <>; rfalse; ], has static door openable lockable; Object Chamber "Friar Bacon's Chamber" with description "A bare and simple grey-stone cell, humble as befits a man of God. The passage outside is back to the west.", initial[; if (self has visited) return; remove bungay; move mallet to Garden; "As you enter, you hear a deep and distant voice distinctly say the cryptic words ~Time Was~ somewhere to north of here Is this place haunted?"; ], each_turn [; self.each_turn = NULL; "^^Well, Bacon doesn't seem to be here, but you haven't seem him leave the building. Where could he be?"; ], w_to Passage, n_to bookcase; Object -> poorbed "bed" with name "bed" "slab", describe "A bed lies to the side.", description "A simple slab that keeps the sleeper out of reach of rats and spiders.", after [; Receive: if (noun == player) print "It's cold and hard and gritty. Already you feel more virtuous."; ], has static supporter enterable; Object -> bookcase "bookcase" with name "bookcase" "bookshelf" "shelf" "bookshelves" "shelves", description "It's wide and tall and packed tight with learned writings.", door_to Secret, door_dir n_to, when_open "A bookcase stands ajar, showing a passage to north.", when_closed "A crammed-full bookcase stands against one wall.", after [; Open: if (self hasnt general) { give self general; "It swings noiselessly to one side, unhiding a secret passage beyond."; } ], before [; Push, Pull: if (self has open) <>; <>; ], has static door openable; Object -> books "books" with name "book" "books", description "They're packed in there so tight, you couldn't get a knife between them.", before [; Read: "Even if you could pry one loose, you couldn't read it."; Take: "They're wedged in too tight. How does Friar Bacon ever manage to get them out?"; ], has scenery; Object Secret "Secret Passage" with description "You've gone into a small, windowless chamber with walls of white. Friar Bacon's room is through a hole to south.", s_to Chamber, n_to 0; ! general: the player is aware of the lamp's demonism. Object -> lamp "lamp" with name "lamp" "light" "demon" "demonic" "bulb" "bottle", describe [; if (self has on) "An odd lamp hangs from the ceiling."; else "The demon lamp hangs over you, now dark."; ], description [; if (self has on) { print "A shining globe hangs from a thick cord. The light it sheds is bright enough to make you squint and shift your gaze. It's... unnatural. So small, and yet so bright, and yet so unwavering, unlike any flame you've seen before. There is devilry at work here, to be sure."; if (self hasnt general) { print "^^A suuden resolve strikes you. This demon lamp must be destroyed. Who knows what baleful effect its rays have had on Friar Bacon's soul already?"; give self general; suspicion++; } rtrue; } else "Now that it's dim, its form is clearer. It's a ball of greyish glass with a stem, like a rounded bottle with a metal cap."; ], before [; Attack: if (self hasnt general) rfalse; if (second == mallet) { give self ~on; remove self; print "You have at the demon lamp with a mighty swing of your mighty mallet. With a loud ~Crack!~, it flies into flinders. So much for that!"; Achieved(0); secret_door.reveal(); rtrue; } else if (second == nothing) "It's out of reach."; else "You can't reach it with that."; ], has static on; ! general: the cord is cut Object -> cord with name "cord" "wire", description [; print "It goes from "; if (lamp in Secret) print "the lamp"; else print "where the demon lamp was"; print " to the ceiling, which is plain enough. The odd thing is, it keeps on going across the ceiling into the corner, then down the wall and through the floor."; if (self has general) print " Just above the bookcase, it's slashed in two. Looking at the ends, you see bundles of tiny wires."; rtrue; ], before [; Cut: if (second == nothing) { if (knife in player) second = knife; else "You can't cut anything without your knife."; } if (second ~= knife) "It's not sharp enough."; if (lamp hasnt general) rfalse; if (lamp hasnt on) "The demon of the lamp is already dead. There's no point in further damage."; give lamp ~on; give self general; print "A shock of pain hits your hand! But the demon's sting is for naught; the cord is cut through, and the lamp goes dark."; Achieved(0); secret_door.reveal(); rtrue; ], has scenery; Object secret_door "secret door" with name "door" "secret", door_dir n_to, door_to Study, when_closed "In the dimness, you can make out light creeping through the outline of a door to north.", when_open "A door stands open to hidden chamber to north.", reveal [; move self to Secret; secret.n_to = self; ], has door static openable; Class Bread with description "Odd, it looks like it's been sliced from the loaf with a carving knife or somesuch, rather than broken off. Can it be that a learned man like Friar Bacon doesn't know how to serve bread properly?", name "bread" "of" "of" "piece" "slice" "of", short_name "piece of bread", plural "pieces of bread", toastedness 0, toast [; self.toastedness++; switch (self.toastedness) { 1: self.&name-->0 = 'toast'; self.&name-->1 = 'light'; self.short_name = "piece of light toast"; self.plural = "pieces of light toast"; self.description = "Just slightly crisped, the way you like it. If only you had some lard to spread on it!"; 2: self.&name-->1 = 'medium'; self.short_name = "piece of medium toast"; self.plural = "pieces of medium toast"; self.description = "Neatly browned on both sides."; 3: self.&name-->1 = 'dark'; self.short_name = "piece of dark toast"; self.plural = "pieces of dark toast"; self.description = "Darker than you like it, but to each his own."; 4: self.&name-->1 = 'dark'; self.&name-->2 = 'very'; self.short_name = "piece of very dark toast"; self.plural = "pieces of very dark toast"; self.description = "It's on the verge of burning, but can still be eaten."; 5: self.&name-->1 = 'burnt'; self.&name-->2 = 'of'; self.short_name = "piece of burnt toast"; self.plural = "pieces of burnt toast"; self.description = "It's mostly turned to charcoal. A dog might eat it, or a pig, but you wouldn't try serving it to the friars."; give self ~edible; default: remove(self); toaster.smoke(); } ], before [; Eat: if (toaster has general) "It's unwise to eat food roasted by hellfire."; rfalse; ], has edible; Class Paper (20) with description "It's a sheet of fine paper with writing on it.", name "piece" "sheet" "of" "paper", short_name "sheet of paper", plural "sheets of paper", toast [; Paper.destroy(self); toaster.smoke(); ], before [; Read: "Most of the fellows back home wouldn't make head or tail of it, but with all the time you've spent around men of learning, you know exactly what's on the paper. The little marks are called ~letters~, and they're grouped into things called ~words~."; ], ; Object Study "Hidden Study" with description "This must be the largest room in the building, and yet you've never seen it. It's so crammed full of stacks of books and papers and queer contrivances, you can harly see the floor. Your only escape is the secret passage to the south.", name "table" "quilt" "quilts" "canopy" "queer" "contrivanc" "book" "books", s_to Secret, initial [; if (self hasnt visited) startDaemon(phone); ], before [; Listen: if (noun ~= nothing) rfalse; switch (phone.state) { 1: "You cast your head about like a hunter tracking a deer, and find the sound is coming from one of the piles of papers near the bed."; default: rfalse; } ], ; Object -> richbed "bed" with name "bed", describe "Rising out of the mess in one corner is a bed fit for the King himself.", description "It's richly laid with quilts and a canopy.", after [; Receive: if (noun == player) print "The bed is softer than you though a bed could be. It's a temptation to sloth, and no mistake."; ], has static supporter enterable; Object -> flagon with name "flagon" "of" "water" "pewter" "cup" "mug", short_name "flagon of water", description [; print "It's made of pewter and "; if (self has general) "empty."; "half-full."; ], empty [; give self general; self.&name-->1 = 'empty'; self.&name-->2 = 'empty'; self.short_name = "empty flagon"; ], before [; Drink: if (self has general) "It's empty."; self.empty(); "You pour the whole thing down your poor dry throat."; Pour, Empty, EmptyT: if (self has general) "It's empty."; self.empty(); if (second == nothing) "The water puddles and seeps away."; if (second == toaster) toaster.shortout(); "The water splashes on it and seeps away."; ], ; Object -> dippybird "bird statue" with name "bird" "statue" "of" "a", description [; print "It's not a good likeness. The body's little more than a tube of glass with bulbs at either end, the only things suggesting birdness a beak on its felt-covered head and a curling feather glued onto the opposite end. Plus, you've never seen a bird wearing a hat. The body seems to have red water in it - perhaps to stand in for blood?"; if (self has general) print " Unsettlingly, it seems to be able to move of its own will, like a conjuror's honumculus."; rtrue; ], cycle -1, dry_dips 0, each_turn [; if (self has moved) { self.each_turn = NULL; return; } self.cycle++; switch (self.cycle) { 3: if (flagon has moved || flagon in player) { switch (self.dry_dips) { 0: print "^The bird statue bends down."; 1: print "^The bird statue bends a little less deeply than before."; 2: print "^The bird statue makes a half-bow."; 3: print "^The bird statue nods faintly."; 4: print "^The bird statue is still. It seems to have died of thirst."; Achieved(1); self.each_turn = NULL; } self.dry_dips++; } else print "^The bird statue bends to drink from drom the flagon."; if (self hasnt general) { print " What manner of devillish thing is this?"; give self general; suspicion++; } 4: self.cycle = 0; "^The bird statue straightens up."; } ], before [; Attack: if (second == nothing || second == mallet || second == knife) { remove(self); print "It shatters easily, leaving nothing but a red smear."; achieved(1); rtrue; } "That's not a good weapon."; Cut: <>; ], ; Object -> papers "stack of papers" with name "stack" "stacks" "pile" "piles" "of" "paper" "papers" "from", description "They're all over the place, and half of them have fallen over. Shows what a state the friars get into without you tidying up after them.", before [p; Take: p = Paper.create(); if (p == nothing) "It would take longer than all day to clean up all this mess. You've taken plenty, now leave the rest be."; move p to player; setPronoun('it', p); "You pick a sheet from one of the piles."; Search: if (phone.state ~= 1) rfalse; phone.state = 2; move phone to Study; suspicion++; "You trace the sound to a pile near the bed, which slumps apart at your touch. Hiding within is a peculiar device of plainly diabolical origin."; Listen: if (phone.state ~= 1) rfalse; "You're sure the sound is coming from a pile of paper near the bed."; ], has concealed; Bread ->; Bread ->; Bread ->; Object -> toaster "steel box" with name "metal" "steel" "box" "squat" "slots" "slot", describe "An squat steel box sits on a table.", description "It's shiny and a little rounded, with a pair of finger-thick slots on top. The smaller side sports a lever and a knob.", add_to_scope knob lever, capacity 2, shocked false, ! turns true when the toaster shocks the PC broken false, toastDuration 0, daemon [toastee1 toastee2; if (self has on) { self.toastDuration++; if (self.toastDuration > knob.setting) { give self ~on; stopDaemon(self); print "^A bell chimes from the steel box, and the lever slides upward."; if (child(self) == nothing) rtrue; print " The bread you put in pops up, turned to toast!"; if (self has general) " It's too bad it was done by dark magic, or you might enjoy it."; else " Yet neither fire nor toasting-fork is in sight. This is suspicious, but who ever heard of toast-by-sorcery? It needs more looking into."; } else { ! I really don't like the way I've implemented ! this part, but I don't see a better way. toastee1 = child(self); if (toastee1 ~= nothing) toastee2 = sibling(toastee1); if (toastee1 ~= nothing) toastee1.toast(); if (toastee2 ~= nothing) toastee2.toast(); } } ], shock [; if (self.shocked) "No. Not again. The demon in the box is too strong. You'll need another way to drive it out."; if (self hasnt general) suspicion++; give self general; self.shocked = true; "The pain sends you sprawling on the floor! Clearly, some demon dwells in the box, waiting to bite any who threatens. You'll need a better plan to drive it out."; ], smoke [; print "^Thick, tear-making smoke billows from the metal box."; if (self hasnt general) { suspicion++; give self general; " What manner of fiend lives in there, to so foul the air? Surely, it is your duty to chase it from the face of God's earth!"; } ], shortout [; print "The box sparks with fury, and gives much heat, and then lets out a noisome cloud. You fear to go near it again, but it quiets in what looks to be a final way. "; if (self has general) print "It seems you've drowned the fiend of the box."; else { give self general; suspicion++; print "You don't know what was in there, but you'd bet it wasn't good."; } self.broken = true; stopDaemon(self); Achieved(2); ], before [; Receive: if (noun ofclass Paper || noun ofclass Bread) rfalse; if (noun == knife) { if (self.broken) "You thrust your trusty blade into the slot, but feel nothing. The demon of the box is truly dead."; self.shock(); rtrue; } if (noun == phone) { if (self has general && ~self.broken) "It would be good indeed to watch the two demons fight, but the device is just a little to thick to fit in the slot."; "It's just a little to thick to fit in the slot."; } "It won't fit in the slot."; Attack: if (self hasnt general) rfalse; if (second == nothing) "You flail at it with your fists, but to no effect."; if (second == knife) "You give it a few new scratches, and dull your blade a little more. That's all."; if (second == mallet) { remove(self); print "A dozen blows are enough to split its metal hide and scatter its pieces."; if (~self.broken) print "His house destroyed, the demon inside must have fled unseen back to the Pit, for there's no trace of him here."; Achieved(2); rtrue; } print_ret "You flail at it with ", (the)second, " to no effect."; Cut: <>; Search: if (self has on && ~self.broken) { if (self hasnt general) suspicion++; give self general; print "Waves of heat make you blink as you hold your eye over the slot. Within is a dim red glow, like burning coals. Surely, these are the fires of Hell!^"; } rfalse; ], has container open static; Object knob "knob" with name "knob" "dial" "arrow", description [; print "It's a little twisty thing a wee arrow etched on it, set in a disk quartered into white, tan, brown, and black. Right now, the arrow points at "; switch (self.setting) { 1: "white."; 2: "tan."; 3: "brown."; 4: "black."; } ], setting 1, before [; SetTo: if (toaster_number == 0) "White, tan, brown, or black. Those are your choices."; self.setting = toaster_number; "Done."; ], has static; Object lever "lever" with name "lever", description [; print "A stubby black handle rests at the "; if (toaster has on) print "bottom"; else print "top"; print " of a slot."; if (toaster hasnt on) " It looks like you could push it down."; rtrue; ], before [; Push, PushDir: if (second ~= nothing && second ~= d_obj) rfalse; if (toaster has on) "It's still pressed down from your last push."; give toaster on; if (~toaster.broken) { toaster.toastDuration = 0; startDaemon(toaster); } "It slides to the bottom of its slot."; ], has static; ! Unlike the other diabolical items, this one is obviously evil. Object phone "peculiar device" with name "peculiar" "device", description "It's white, as big as your hand but a tad less broad, and seems to be made of some unknown sort of horn or bone. On one side, it's got a square of buttons that glow a dim green.", ! The states are as follows: ! State 0: Not yet ringing ! State 1: Ringing, but not found ! State 2: Found and still ringing ! State 3: Picked up and delivering message ! State 4: Silent again state 0, turnsLeft 8, daemon [; self.turnsLeft--; if (self.turnsLeft <= 0) switch (self.state) { 0: self.state = 1; self.turnsLeft = 10; 1, 2, 3: self.state = 4; } switch (self.state) { 1: if (player in Study) "^You faintly hear a sound a little like a cricket's call."; 2: if (testScope(self)) "^The peculiar device lets out an insistent chirrup."; 3: if (testScope(self)) "^Faint noises come from one end of the peculiar device."; 4: stopDaemon(self); } ], before [; Listen: switch (self.state) { 2: "~Brrt-Brrt! Brrt-Brrt!~"; 3: if (self in player) print "You hold the device to your ear"; else print "You put your ear to the device"; print " and can make out semblance of a human voice. However, the words is says make little sense: ^^~...finally got through to you. I was afraid I wouldn't reach you before you returned to our era. I sent that imbecile you hired to find you, but he's probably asleep in the stable by now. Anyway, urgent news. You have to stay for a few more days. I know how much you've been looking forward to getting back to civilization, but just now, travelling is a really really bad idea. I've detected an imminent temporal dysplosion, and judging by the strength of the antichronon pulse, we're right on the epicenter. This can't be coincidence. One of our determinals is malfunctioning, or is about to malfunction, in a big way. Fortunately, we know it's going to happen, so we can just sit tight until it does and then mop up the paradoxes as they come. But until then, NO TRAVELLING. I'm going to power up your determinal from the net in a few minutes in order to run some diagnostics; maybe we can minimize the damage. See you at dinner.~ ^^The device falls silent. It's funny how much the demented ramblings of spirits from beyond sound like Friar Bungay."; self.state = 4; StartTimer(determinal, 8); rtrue; } Attack: if (second ~= nothing && second ~= mallet && second ~= knife) "That's no good for killing this prey."; print "You smash it on the "; if (player in Garden) print "ground"; else print "floor"; if (second == mallet) print "and pound it to bits with your mighty mallet."; else if (second == knife) print " and hack at it vigorously with your trusty blade."; else print " and stomp on it a few times."; print " When it's utterly destroyed, you step back, winded but happy. Whatever it was, it won't be bothering God-fearing folk any more."; self.state = 4; remove(self); Achieved(3); rtrue; Cut: <>; ], after [; Take: if (self.state == 2) { self.state = 3; self.turnsLeft = 5; "As you pick it up, the cricket-chirping stops."; } ], has transparent; Object buttons "square of glowing buttons" phone with name "button" "buttons" "square" "of" "glowing" "green", description "Mysterious symbols stand out black against their dim light.", before [; Push: "The device chirps at you when you you poke its buttons. You wonder if it's chirping in complaint or enjoyment."; ], has static concealed; Object determinal "brazen head" with name "brazen" "brass" "head" "idol" "baphomet" "platform" "altar", describe "The center of the room is taken up by a platform bearing an enormous brazen head.", description "An inhuman face fully three feet high rests on an angled platform or altar of brass covered with flashing lights and glowing letters. The head is formed of a hollow cage of brazen wires. It's hard to say how, but its empty eyes seem to follow you. A big red button, the size of your palm, sits in the middle of the platform just in front of the head.", time_left 1, time_out [; if (player in Study) print "^^Your hackles rise. A low hum shakes the room and the air becomes hard to breathe for a moment as a waist-high platform of brass shimmers into view, like a ghost unvanishing. A number of wires quickly grow out of the center of the platform, spiralling upward and meshing to form the shape of a human head, a yard tall, with empty eyes. ^^The head intones the words ~Time Is~ and falls silent."; else if (player in Secret || player in Chamber) print "You clearly hear a deep voice saying ~Time Is~ to the north of here."; move self to Study; ], each_turn [; if (self hasnt general) { give self general; suspicion = suspicion + 3; } switch (random(20)) { 1: "^The brazen head smiles coldly, as if at some private joke, then returns to staring straight ahead."; 2: "^The brazen head opens its mouth as if to say something, but seems to think better of it."; 3: "^The brazen head briefly turns its hollow gaze to you and scowls."; 4: "^The wires of the brazen head reknit so that it's facing the opposite way."; } ], before [; Read: "You can't read, but you wouldn't read that even if you could. Anything written on an altar to Baphomet is bound to imperil your immortal soul just by your thinking it. In fact, it's a good idea to keep your eyes averted in case you somehow manage to read it anyway."; Touch: "Your hand goes right through the head, as if it wasn't there, the hairs on the back of your hand prickling all the while. You can grasp the pedestal firmly enough, though."; Attack: if (second ~= mallet) "Your blow passes right through the head."; print "You swing the mallet downward. It passes through the head, but puts a large dent in the platform. Encouraged, you keep on smashing it, even when it starts to spark and some of the papers nearby catch fire. The substance of the head begins to blink and flicker, and at last is whispers ~Time Is Past~ and blinks out. Sweating and sooty, you sag in your shoes, aglow with triumph. ^^Somewhere in the distance, you head Friar Bungay yelling. It's of no matter; whatever he thinks you've done, it'll be nothing to his gratitude when he finds you've rescued Friar Bacon's soul from mortal peril."; Achieved(4); deadflag = 4; rtrue; Cut: <>; ], has static transparent; Object brb "big red button" determinal with name "big" "red" "button", description "It's bright red, it's big as your palm, and it's in the center of the unholy head's platform, waiting for someone to press it.", before [; Push: print "The brazen head opens its massive mouth and intones, ~Time Was.~ Then the wires that compose the head unwind and retract into the pedestal. ^^You swear you feel your heart stop. After that, nothing makes sense. ^^The world contracts to a pinprick, and all around you is nothingness, which is stretched out of shape. Something jostles you in six directions at once, half of them opposite to the other half, the other half opposite to nothing at all. You cling to the pedestal, but you can't shake the feeling that you shouldn't be able to do so, that it's unimaginably distant. The nothingness slowly turns white. You wake up screaming. ^^You pick yourself up from the floor of a vast and spotless hall as the brazen head unfolds itself again and utters ~Time Is.~ Through windows the size of walls, you see a sparkling city, its towers dark against the redding sky. You're lost in revery for minutes, until you hear a voice call your name. ^^Turning startled to the speaker, you see your master, Friar Bacon - clad now not in Franciscan habit, but in long breeches, like a swordsman. ~What in hell are you doing here?~ he demands, and that one word explains exactly what happened to you, and where you are now. ^^This is Hell."; deadflag = 5; rtrue; ], has static concealed; Object knife "knife" with article "your", name "knife" "blade" "dagger" "trusty" "your" "my", description "Your trusty blade, the only tool you carry with you always. It's dulled a bit from daily use, but still sharp enough for you to give bandits a nasty surprise or two, if there were any bandits hereabouts."; [ Initialise; location = Garden; give player light; move knife to player; "^^^^~Ah, Miles. Good thing you showed up. I need to talk to Bacon rather urgently. Scholar business, you know; nothing that a boorish, uneducated sloven like yourself would be interested in. Go and fetch him, will you?~^^"; ]; Include "Grammar"; [ToasterSetting; toaster_number = 0; switch (NextWord()) { 'white': toaster_number = 1; 'tan' : toaster_number = 2; 'brown': toaster_number = 3; 'black': toaster_number = 4; default: return -1; } return 1; ]; Extend 'break' * noun 'with' held -> Attack; Extend 'cut' * noun 'with' held -> Cut; Extend 'read' replace * noun -> Read; extend 'set' first * noun 'to' ToasterSetting -> SetTo; Extend 'turn' * noun 'to' ToasterSetting -> SetTo * noun 'to' special -> SetTo; Verb 'point' * noun 'to'/'at' ToasterSetting -> SetTo * noun 'to'/'at' special -> SetTo; Verb 'slide' * noun -> Push * noun 'down' -> Push; Verb 'pour' * held -> Pour * held 'on'/'onto'/'in'/'into' noun -> Pour; Verb 'knock' 'rap' * noun -> Knock * 'on' noun -> Knock; verb 'about' 'help' 'info' * -> About;