Switches xv5s; !Constant DEBUG; Constant Story "NIGHT AT THE COMPUTER CENTER"; Constant Headline "^An Interactive Nocturnal Chase^\ Copyright (c) 1996 by bonni mierzejewska.^^"; Constant AMUSING_PROVIDED; Constant TASKS_PROVIDED; Constant NUMBER_TASKS 5; Constant MAX_SCORE 10; Global task_scores -> 2 2 2 2 2 ; Array quote_done -> 10; Global next_quote = -1; Replace LowKey_Menu; Replace DoMenu; Include "Parser"; Include "VerbLib2"; Include "NewMenu"; Attribute legible; Attribute followable; Attribute clickable; Attribute pressed; !************************************************************************** ! Third Floor * !************************************************************************** !******************************************* ! Computer Center and associated objects * !******************************************* Object Computer_Center "Computer Site" with description [; print "^This is the computer site. You know, half a dozen PCs, \ couple of Macs, a printer table, the desk at which you write \ that interactive fiction game instead of study. "; if (router has on) print "An internet router hums quietly in the corner.^^"; else if (router hasnt on) print "An internet router sits silent in the corner.^^"; print "The door is northeast.^"; if (self hasnt general) { give self general; "^ [ Type HELP for instructions ]"; } if (inform_manual in printer_table) { print "^A freshly-printed copy of ~The Inform Designer's Manual~ \ sits on the printer table beside the remaining printer.^"; } if (inform_manual in gnome && gnome_message notin desk_computer) { move gnome_message to desk_computer; print "^There's a message blinking on the computer screen at \ your desk.^"; } ], ne_to floor3north, out_to floor3north, has light; Nearby Macs "Macs" with name "Mac" "Macs", has scenery; Nearby PCs "PCs" with name "PCs" "workstations" "work" "stations", has scenery; Nearby router "internet router" with name "internet" "router", description [; if (self has on) "A box sitting in the corner, with status lights \ to show you that your network connection is currently fine."; else "A box sitting in the corner. All the status lights are off."; ], before [; SwitchOff : if (self hasnt on) "You've already turned the router off, \ remember?"; SwitchOn : if (self has on) "The router is already on."; ], after [; SwitchOff : if (self hasnt general) { give self general; "As the router's status lights fade and its humming \ ceases, you hear the most amazing sound from the depths of the \ building. It's like a scream... the sound of Ultimate Pain. \ It goes on and on, finally fading out after several minutes.^^\ Chills creep up your spine."; } else if (self has general) "You switch the router off again. (Are you a sadist, or \ have you already forgetten what happened the first time?)"; SwitchOn : "The router's status lights blink briefly red as power is \ restarted. Another brief flurry of blinking, and the router \ settles down. After a moment, the status lights indicate \ that your network connection is restored."; ], has scenery switchable on; Nearby desk "desk" with name "desk", description [; print "One of those huge old metal monstrosities you find in most \ universities. Sitting on this one you see "; WriteListFrom(child(desk),FULLINV_BIT + ENGLISH_BIT + RECURSE_BIT); "."; ], has static supporter concealed; Nearby printer_table "printer table" with name "table", description [; print "An ordinary table. There used to be two laser printers \ sitting on it; now there is only one."; if (inform_manual in self) " Sitting beside the remaining printer is a freshly-printed \ copy of ~The Inform Designer's Manual.~"; ], has static supporter concealed; Nearby sticker "sticker" with name "intel" "inside" "sticker", description "I'm sorry, but the comments are unprintable.", has scenery; Object printer_1 "laser printer" printer_table with name "laser" "printer", description "An Owlet-Picker V Laser Printer, sitting on an ordinary \ table.", before [; Take: "You don't really want to be accused of losing *two* laser \ printers, do you?"; ], has static concealed; Object desk_computer "computer" desk with name "computer" "pc" "puter" "machine" "monitor" "screen", description [; print "State-purchase, low-bid 386, with unprintable comments \ scrawled on the ~intel inside~ sticker. The monitor currently \ displays "; WriteListFrom(child(desk_computer), FULLINV_BIT + ENGLISH_BIT + RECURSE_BIT); "."; ], before [; Take: "It's bolted to the table. Wish they'd done that with the \ printer!"; ], has static transparent container concealed; !****************************** ! The icons on the computer * !****************************** Class IconClass with name "icon", plural "icons", description "It's an icon. You click on it.", before [; Take : "What an odd idea!"; ], has static concealed clickable; Nearby telnet "telnet icon" class IconClass with name "telnet", before [; Click, ClickOn : if (inform_manual in gnome) { "A message pops up:^^Too many connections, try again \ later."; } "You need to find a printer and you're logging on???"; ]; Nearby ftp "ftp icon" class IconClass with article "an", name "ftp", before [; Click, ClickOn : if (lair has visited) give self general; if (inform_manual in gnome) give self ~general; if (self has general) { move oak to desk_computer; move archive to desk_computer; move sunsite to desk_computer; move hobbes to desk_computer; "A menu of your favorite ftp sites pops up. You can click on:^\ The Oak^The IF-Archive^Sunsite^Hobbes"; } "A message pops up:^^Too many connections, try again later."; ]; Nearby lpr "lpr icon" class IconClass with article "an", name "lpr", before [; Click, ClickOn : if (dmicon has general && self hasnt general) { move inform_manual to printer_table; give self general; Achieved (3); "A dialog box pops up which reads:^^Printing...^^The \ remaining laser printer fires up and starts printing. It \ seems to take forever, but eventually a copy of ~The \ Inform Designer's Manual~ sits on the table beside the \ printer."; } "A message pops up:^^Nothing to print."; ]; Nearby game "compile-game icon" class IconClass with name "game" "compile-game" "compile", before [; Click, ClickOn : if (inform_manual in gnome) { "Hey! It compiled!"; } "You get 37 errors and 17 warnings. Still more work to do!"; ]; Object oak "Oak icon" class IconClass with article "an", name "Oak", before [; Click, ClickOn : "A message pops up:^^Too many connections, try \ again later."; ]; Object sunsite "Sunsite icon" class IconClass with name "Sunsite", before [; Click, ClickOn : "A message pops up:^^Too many connections, try \ again later."; ]; Object hobbes "Hobbes icon" class IconClass with name "Hobbes", before [; Click, ClickOn : "A message pops up:^^Too many connections, try \ again later."; ]; Object archive "IF-Archive icon" class IconClass with article "an", name "IF" "Archive" "IF-Archive", before [; Click, ClickOn : move dmicon to desk_computer; "Your ftp client is pointed at the \ programming/inform/manuals directory. Currently displayed on \ your screen is an icon labelled ~Designers_Manual~!"; ]; Object dmicon "Designers_Manual icon" class IconClass with article "the", name "designers_manual", before [; Click, ClickOn : if (self hasnt general) { give self general; remove archive; remove sunsite; remove hobbes; remove oak; "A message pops up:^^Download complete. Closing connection."; } else "Nothing happens"; ]; !*************************** ! Other objects * !*************************** Object computer_mouse "mouse" desk with name "mouse" "Microsoft", description "It looks like any other Microsoft mouse.", before [; Take : "It's attached to the back of the PC in such a way that \ you can't remove it."; ], has static concealed; Object book "UGGS Manual" desk with article "an", name "UGGS" "manual" "book", description "The book is a manual for a programming language called \ UGGS - Universal Game Generation System. You've been writing that \ interactive fiction game with UGGS.", before [; Read : "Actions, objects, rooms, directions, blah blah blah. \ An inelegant language (to put it nicely), but it's, uh, \ still there."; ], has legible openable concealed; !*************************************** ! The rest of the third floor * !*************************************** Object floor3north "Hall Outside Computer Site" with description "This is the north end of the third floor of Hodges \ Hall. To the southwest is the entrance to the Computer \ Site, and \ to the east are stairs up to the fourth floor. Stairs \ down to lower floors are to the west.", before [; Listen : "All you hear is the comfortable humming of the water \ fountain."; Drink : if (second=="fountain") "A surreal idea."; ], u_to "Let's not. Only astronomers live up there.", e_to "Let's not. Only astronomers live up there.", sw_to Computer_Center, s_to floor3mid, w_to nstairs3, d_to nstairs3, has light; Nearby fountain3 "water fountain" with name "water" "fountain", initial "To one side, a water fountain hums quietly.", description "It's an ordinary water fountain, such as is found in \ numberless institutions across the US.", before [; Drink: <>; ], has static; Object nstairs3 "Stairwell (Third Floor)" with description "You're in the north stairwell. Stairs lead down. \ There is a door to the east.", u_to "Let's not. Only astronomers live up there.", e_to floor3north, d_to nstairs2, has light; Object floor3mid "Hall" with description "You're in the middle of a long north-south hallway in \ Hodges Hall. You can go east here as well as north or south.", n_to floor3north, e_to floor3east, s_to floor3south, has light; Object floor3east "Hall Outside Elevator" with description "You're in a short east-west hall off the main hall. You \ can see an elevator here.", w_to floor3mid, has light; Nearby elevator3 "Elevator" with name "elevator" "lift", description "You know, ugly grey, doors meet in the middle, etc.", before [; Enter : "It won't open. Didn't you read the sign?"; Open : "You can't. Didn't you read the sign?"; ], has scenery container; Nearby sign3 "sign" with name "sign" "note" "notice", initial "There's a sign on the elevator.", description "The sign reads: OUT OF ORDER.", has static; Object box "large red metal box" floor3east with name "large" "red" "metal" "box", when_closed "You see a box mounted on the wall in one corner.", when_open "You see an open box mounted on the wall in one corner.", before [; Take : "It seems to be bolted down, as you wish the printer had \ been."; Search : if (self has open) { if (flashlight in waiting_room) { move flashlight to box; Achieved (2); give flashlight general; "Buried beneath the fire hose you find a flashlight!"; } if (flashlight in box) { print "You find "; WriteListFrom (child(self), ENGLISH_BIT); "."; } } "It's a red metal box. You might try opening it."; Examine : print "It's a large red metal box, labelled ~FOR USE IN \ CASE OF FIRE.~ It is currently "; if (box hasnt open) "closed."; else {print "open and contains "; WriteListFrom (child(box), ENGLISH_BIT); "."; } ], has static container openable; Object firehose "folded fire hose" box with name "folded" "fire" "hose" "firehose", description [; if (flashlight in waiting_room) "It's a large canvas fire hose. Something seems to be \ stuck behind it."; if (flashlight in box) "It's a large canvas fire hose. There's a flashlight stuck \ behind it."; ], before [; Take : "You don't particularly need to carry around a fire hose."; Search, LookUnder, LookBehind, Push, Pull, Unfold : if (flashlight in waiting_room) { move flashlight to box; Achieved (2); "Buried beneath the fire hose you find a flashlight!";} if (flashlight in box) "There's a flashlight stuck behind it."; if (flashlight notin box && flashlight notin waiting_room) "You find nothing more of interest."; ], has static; Object floor3south "Hall" with description "You're at the south end of a long north-south hallway in \ Hodges Hall. To the west you see stairs leading down.", n_to floor3mid, w_to s_stairs3, has light; Object s_stairs3 "Stairwell (Third Floor)" with description "You're in the south stairwell. Stairs lead up and down. \ There is a door to the east.", u_to "Let's not. Only astronomers live up there.", e_to floor3south, d_to s_stairs2, has light; !************************************************************************** ! Second Floor * !************************************************************************** Object nstairs2 "Stairwell (Second Floor)" with description "You're in the north stairwell. Stairs lead up and down. \ There is a door to the east.", u_to nstairs3, d_to nstairs1, e_to floor2north, has light; !********************** ! A diversion... * !********************** Object floor2north "Outside Physics Office" with description "You're at the north end of a long north/south hall, \ outside the Physics Office. You hear a faint humming. There are \ stairs to the west.", before [; Listen: if (noun==hum) "It's just what you'd expect humming to sound like."; "You hear a soft humming. It seems to be coming from the \ Physics Office doorknob."; Smell: "There is a slight and lingering smell of ozone."; Go: if (noun==e_obj) "The door to the Physics Department is closed."; ], w_to nstairs2, s_to floor2mid, e_to physics_door, has light; Nearby hum "hum" with name "hum" "humming", before [; Examine: "You can't examine a hum!"; ], has concealed scenery; Nearby physics_office "Physics Office" with name "physics" "office", description "There's really not much to be seen other than the door.", has scenery; Nearby physics_door "Physics Office door" with name "door", description "It has a sign, reading:^Radiation Hazard^Laser Light \ Hazard^Nuclear Fusion Hazard^Undergraduate advisor: 2nd door on \ right.^^Other than that, it's perfectly all right, except for the \ doorknob.", before [; Open : print "Just before you make contact with the doorknob, all \ the hairs on your body stand up, and then...^^\ ***CRACK***^^"; if (self hasnt general) { give self general; "When you pick yourself up off the floor, through the \ office window you notice the curved silver dome of a van de \ Graff generator, which some wag has connected to the \ doorknob... (wiseacre physics graduate students!)^^\ You can now carry fewer objects than before."; } else { deadflag = 1; "When you awaken in the hospital, every inch of you \ tingles and hurts at the same time. You belatedly remember \ what happened the first time you touched the doorknob, \ but it's too late now."; } ], has door openable scenery; Nearby doorknob "doorknob" with name "doorknob" "knob", description "It looks like a doorknob. It's humming softly.", before [; Turn, Touch, Taste, Push, Pull : print "Just before you make contact with the \ doorknob, all the hairs on your body stand up, and then...^^\ **CRACK***^^"; if (physics_door hasnt general) { give physics_door general; "When you pick yourself up off the floor, through the \ office window you notice the curved silver dome of a Van de \ Graff generator, which some wag has connected to the \ doorknob... (wiseacre physics graduate students!)^^\ You can now carry fewer objects than before."; } else { deadflag = 1; "When you awaken in the hospital, every inch of you \ tingles and hurts at the same time. You belatedly remember \ what happened the first time you touched the doorknob, but \ it's too late now."; } Examine: "It looks just like a doorknob. Fancy that!"; ], has concealed static; !******************************* ! Mid-hall and maze entrance * !******************************* Object floor2mid "Hall" with description "You're in the middle of a long north/south hall. You \ can go east here as well as north or south.", before [; Go, Enter : if ((noun==d_obj || noun==panel) && fountain2 hasnt general) "Riiiiiiiight. Through the floor?"; if ((noun==d_obj || noun==panel) && panel hasnt open) "You can't, since the panel is in the way."; if ((noun==d_obj || noun==panel) && self hasnt general && panel has open) { give self general; "You start to head into the hole and pause. You \ remember hearing rumors, to which you never gave any \ credence, of students simply vanishing in Hodges Hall late \ at night. Nobody can ever name anyone who's vanished, but \ professors with offices in Hodges *do* grow curiously quiet \ when the subject is brought up. You wonder if you really \ want to go into this hole."; } Listen : "All you can hear is the water fountain as it buzzes \ gratingly. It's really rather irritating."; Drink : if (second=="fountain") "A surreal idea."; ], n_to floor2north, e_to floor2east, d_to panel, s_to floor2south, has light; Nearby fountain2 "water fountain" with name "water" "fountain", initial [; if (fountain2 hasnt general) "To one side, a water fountain buzzes noisily."; else { print "To one side, a buzzing water fountain has been moved, \ revealing "; if (panel hasnt open) "a square metal panel."; else "an open panel and a dark, sinister hole leading down.";} ], description [; if (self hasnt general) "It's an ordinary water fountain, such as is found in \ numberless institutions across the US. This one's a little \ askew. Funny, that."; else print "The water fountain has been moved aside, revealing a \ square metal panel"; if (panel has open) ", which is open."; else "."; ], before [; Pull, Push : if (self hasnt general) { give self general; "You move the water fountain aside.^^There's a square \ metal panel behind it."; } else { give self ~general; if (panel has open) give panel ~open; "You move the water fountain back into place."; } Take : "Why would you want to take the water fountain?"; Drink : <>; LookBehind : "You see something that might be a panel behind \ the water fountain."; ], has static; Nearby panel "square metal panel" with name "square" "metal" "panel", description [; if (fountain2 hasnt general) "What panel?"; else if (panel hasnt open) "It's a square metal panel, hinged on the right \ side. You wonder what's on the other side of it."; "The panel opens to a dark, ominous hole leading down."; ], before [; Examine, Look, Touch, Taste, Push, Pull, Open, Close : if (fountain2 hasnt general) "What panel?"; LookBehind : if (fountain2 hasnt general) "What panel?"; if (panel hasnt open) "You'll have to open it first."; ], after [; Open : "You open the panel, revealing a dark, ominous hole \ leading down."; ], door_to maze1, door_dir d_to, has door openable scenery; !********************************* ! The rest of the second floor * !********************************* Object floor2east "Hall Outside Elevator" with description "You're in a short east-west hall off the main hall. You \ can see an elevator here. To the east, down the hall, you can \ see large double doors leading to the outside.", w_to floor2mid, e_to floor2_doors, has light; Nearby elevator2 "Elevator" with name "elevator" "lift", description "You know, ugly grey, doors meet in the middle, etc.", before [; Enter : "It won't open. Didn't you read the sign?"; Open : "You can't. Didn't you read the sign?"; ], has scenery container; Nearby sign2 "sign" with name "sign" "note" "notice", initial "There's a sign on the elevator.", description "The sign reads: OUT OF ORDER.", has static; Object floor2_doors "East End of Hall" with description "You're at the east end of a short east-west hall off the \ main hall. There are large double doors here, leading to the \ outside (locked, at this time of night).", w_to floor2east, has light; Nearby double_doors "large double doors" with name "large" "double" "doors", description "They look just like large double doors!", has scenery; Object floor2south "Hall" with description "You're at the south end of a long north-south hallway. \ To the west you see stairs leading up and down.", n_to floor2mid, w_to s_stairs2, has light; Object s_stairs2 "Stairwell (Second Floor)" with description "You're in the south stairwell. Stairs lead up and down. \ There is a door to the east.", u_to s_stairs3, d_to s_stairs1, e_to floor2south, has light; !************************************************************************** ! First Floor * !************************************************************************** Object nstairs1 "Stairwell (First Floor)" with description "You're in the north stairwell. Stairs lead up, and dark, \ foreboding stairs lead down. There is a door to the east.", u_to nstairs2, e_to floor1north, d_to "Let's not. Only geologists live down there.", has light; Object floor1north "Hall" with description "You're at the north end of a long hall on the first \ floor of Hodges. There are stairs to the west.", before [; Listen: "All you hear is the comfortable humming of the water \ fountain."; Drink: if (second=="fountain") "A surreal idea."; ], w_to nstairs1, s_to floor1mid, has light; Nearby fountain1 "water fountain" with name "water" "fountain", initial "To one side, a water fountain hums quietly.", description "It's an ordinary water fountain, such as is found in \ numberless institutions across the US.", before [; Drink: <>; ], has static; Object floor1mid "Hall" with description "You're in the middle of a long north/south hall. You \ can go east here as well as north or south.", n_to floor1north, e_to floor1east, s_to floor1south, has light; Object floor1east "Hall Outside Elevator" with description "You're in a short east-west hall off the main hall. You \ can see an elevator here. (They forgot the sign, but it's still \ out of order.)", w_to floor1mid, s_to closetdoor, in_to closet, has light; Nearby closetdoor "door" with name "door", description "It's just an ordinary door.", when_closed [; if (location==floor1east) "There is a door on the south wall."; "The door on the north wall is closed."; ], when_open [; if (location==floor1east) "The door on the south wall is open, leading to a janitor's \ closet."; "The door on the north wall is open."; ], door_to [; if (location==floor1east) return closet; return floor1east;], door_dir [; if (location==closet) return n_to; return s_to;], found_in floor1east closet, has static door openable; Nearby elevator1 "Elevator" with name "elevator" "lift", description "You know, ugly grey, doors meet in the middle, etc.", before [; Enter : "It won't open."; Open : "You can't."; ], has scenery container; Object closet "Janitor's Closet" with name "closet" "janitor^s", description "Boy, what a mess. Buckets, pails, gigantic mops, dust \ cloths, brooms, cleaning solutions, etc. etc. etc., are scattered \ about with no semblance of order. It rather resembles your \ apartment (the level of organization, not the contents). You \ manage to squeeze into it. After a few moments of looking, you \ think you hear something on the other side of the south wall.", before [; Listen : if (inform_manual notin gnome) { Achieved (0); "You manage (amazingly) to clear a piece of wall against \ which to put your ear. You hear a grumbling voice complaining \ that the Owlet-Picker V is truly the worst printer ever \ designed."; } else "You hear furious typing alternated with pauses of varying \ length."; Search : "This place is so full of junk, you could spend all night \ looking through it."; ], n_to closetdoor, out_to floor1east, has container light; Class ClosetStuff with before [; Take : "You don't have time to play this stuff!"; ]; Nearby bucket "buckets" class ClosetStuff with name "bucket" "buckets", has scenery; Nearby pail "pails" class ClosetStuff with name "pail" "pails", has scenery; Nearby mop "gigantic mops" class ClosetStuff with name "gigantic" "mop" "mops", has scenery; Nearby dust_cloth "dust cloths" class ClosetStuff with name "dust" "cloth" "cloths", has scenery; Nearby broom "brooms" class ClosetStuff with name "broom" "brooms" "handle" "broomstick" "stick", has scenery; Nearby cleaning_stuff "cleaning solutions" class ClosetStuff with name "cleaning" "solution" "solutions", has scenery; Object floor1south "Hall" with description "You're at the south end of a long north-south hallway. \ To the west you see stairs leading up and down. To the east is \ a door leading into a lab.", n_to floor1mid, w_to s_stairs1, e_to labdoor, has light; !======================== ! Another diversion... | !======================== Nearby labdoor "door to the lab" with name "door", description [; if (location==lab) "There's a sign on this side of the door."; "A non-descript institutional door."; ], when_open "The lab door is open.", when_closed "The lab door is closed.", door_dir [; if (location==floor1south) return lab; return floor1south; ], door_to [; if (location==lab) return floor1south; return lab; ], found_in floor1south lab, has static door openable; Object lab "Lab" with description "A sizeable room, with all the characteristics of a \ student lab. Long, waist-high tables with black tops and sinks, \ cupboards along the walls containing all manner of arcane bottles \ and jars, mysterious equipment on shelves around the perimeter of \ the room. Nearby you see a 55-gallon aquarium containing a large \ red fish. Next to the aquarium is one of those mysterious pieces \ of equipment, a black box with three buttons.", each_turn [; switch(random(6)) { 1 : "^The red fish glances at you in a bored fashion."; 2 : "^The red fish darts around furiously for a moment."; 3 : "^~Glub, glub.~"; 4 : "^The red fish swims lazily back and forth a few times."; 5 : "^The red fish picks at the gravel in the aquarium hopefully."; 6 : "^The red fish picks at some algae growing on the aquarium \ glass."; } ], before [; Insert: if (second==aquarium || second==blackbox) "Whatever for?"; Go: if (lab_sign has concealed) { if (noun==w_obj or out_obj) { give lab_sign ~concealed; "As you turn to head back into the hall, you notice there's a \ sign on this side of the door."; } } Listen: if (noun==lab_hum) "A quiet hum."; "All you hear is the low hum of the aquarium filter."; ], out_to floor1south, w_to labdoor, has light; Nearby lab_hum "filter" with name "hum" "humming" "filter", has scenery; Nearby lab_sign "sign" with name "sign" "writing", description "It says: Herring Aid Lab.", has scenery legible concealed; Nearby lab_stuff "stuff in the lab" with name "cupboards" "bottles" "jars" "shelves" "table" "tables" "sinks" "tops", has scenery; Nearby aquarium "aquarium" with name "aquarium", initial [; if ( (white_button has pressed) && (blue_button has pressed) && (green_button has pressed) ) { move aquarium_label to lab; "There's a small label on the base of the aquarium."; } ], description "A rectangle made of plexiglass, about a meter long and \ roughly less than half that thick. It contains a large red fish, \ as well as some sort of box-ish looking thing half buried in the \ gravel. Next to the aquarium lies a smallish black box with three \ buttons.", has static container transparent; Nearby gravel "gravel" with name "gravel", description "It's aquarium gravel.", has scenery; Nearby blackbox "black box" with name "black" "box", description "A smallish box, black in colour, with three buttons on \ top: white, blue, and green, from left to right.", has scenery container transparent; Object aquarium_label "label" with name "label", description "It reads: Acme Red Herring.", has scenery; Class ButtonClass with name "button", has scenery; Object white_button "white button" blackbox class ButtonClass, with name "white" "left", description "It's a small white button on the black box.", before [; Push: give self pressed; "You hear a click, and a small chunk of fish food floats \ up from box-ish looking thing in the aquarium. The fish sees \ it almost before you do and darts quickly to eat it."; ]; Object blue_button "blue button" blackbox class ButtonClass, with name "blue" "middle", description "It's a small blue button on the black box.", before [; Push: give self pressed; "You hear a click, and a small blue flag emerges from the \ box-ish looking thing and waves briefly before disappearing \ again. The fish turns in a circle twice."; ]; Object green_button "green button" blackbox class ButtonClass, with name "green" "right", description "It's a small green button on the black box.", before [; Push: give self pressed; "You hear a click, and a small green flag emerges from the \ box-ish looking thing and waves briefly before disappearing \ again. The fish races for the surface of the aquarium and \ actually clears the surface, re-entering the water with a \ small splash."; ]; Object fish "red fish" aquarium with name "red" "fish" "herring", description "At first glance, you thought it was a red oscar, but \ it's rather too red for that. What kind of fish it might be is tickling the back of your memory....", life [; Ask: "The fish doesn't answer."; Tell: "The fish has no interest in your sordid life."; Attack, ThrowAt: "You can't do that without getting soaked."; Kiss: "Surely, you jest?"; Show, Give: "The fish has no interest in your offering."; "The fish has little interest in anything but food."; ], orders [; default: "The fish ignores you."; ], has animate; Object s_stairs1 "Stairwell (First Floor)" with description "You're in the south stairwell. Stairs lead up, and dark, \ foreboding stairs lead down. There is a door to the east.", u_to s_stairs2, e_to floor1south, d_to "Let's not. Only geologists live down there.", has light; !************************************************************************** !* The Maze * !************************************************************************** Class MazeRoom with description [; if (location==maze1) { Quote(0);} "You are in a maze of twisty little passages, all alike."; ], each_turn [; if (random(3) == 1) print "^^Somewhere in the distance you hear \ an organ playing."; if (random(100) <= 30 && mouse in waiting_room ) { move mouse to self; mouse.number = 0; StartDaemon(mouse); } if (location==thedark ) { mouse.number = 0; move mouse to waiting_room; StopDaemon(mouse); } if (parent(mouse)~=parent(player) && location~=thedark) { mouse.number = 0; move mouse to waiting_room; StopDaemon(mouse); } ], before [; Listen : "Hmm. It's Bach. Toccata and Fugue in D Minor, if I'm not \ mistaken. Remembering the students who disappeared, you \ get chills up and down your spine."; Go : if (location==thedark && random(4)==1) { if (random(100) <= 50) { deadflag = 1; "Unable to avoid it in the creepy darkness, you find \ yourself falling down a rectangular chute, which finally \ dumps you out through the cold air and into a dumpster \ behind Hodges Hall. When you awaken, the sun is just \ coming up, you're thoroughly chilled, and you have a \ large lump on your head."; } else { deadflag = 3; "Now you know why students disappear! In the creepy \ darkness, you hear the approach of a sinister geologist. \ He (it?) grabs you and carries you off to a mine deep \ under the University, where you live out the rest of your \ days digging samples for the Geology Department."; } } else if (location==thedark) "You bump around in the creepy darkness for a while \ without any idea where you are."; ], out_to "Getting claustrophobic, are we?"; Object maze1 "Maze of Twisty Passages" class MazeRoom with before [; Go : if (noun==u_obj) { move mouse to waiting_room; mouse.number = 0; StopDaemon(mouse); } ], after [; Go: if (HasLightSource(player)==1) Achieved (1); ], u_to floor2mid, n_to maze1, e_to maze2, s_to maze6, w_to maze6; Object maze2 "Maze of Twisty Passages" class MazeRoom with w_to maze1, s_to maze3, e_to maze6; Object maze3 "Maze of Twisty Passages" class MazeRoom with e_to maze2, d_to maze6, s_to maze4, n_to maze6; Object maze4 "Maze of Twisty Passages" class MazeRoom with e_to maze3, w_to maze6, d_to maze6, s_to maze5; Object maze5 "Maze of Twisty Passages" class MazeRoom with w_to maze4, e_to maze6, s_to maze5, n_to maze7, u_to maze6, d_to maze6; Object maze6 "Dead End" with description "Dead end.", after [; Go : mouse.number = 0; move mouse to waiting_room; StopDaemon(mouse); ], n_to maze1, u_to maze1; Object maze7 "Maze of Twisty Passages" class MazeRoom with w_to maze5, n_to maze7, d_to maze6, e_to lair, before [; Go : if (noun==e_obj && router has on) { move mouse to waiting_room; mouse.number = 0; StopDaemon(mouse); print "As you leave the maze, you have a profound sense of relief.^"; } else if (noun==e_obj && router hasnt on) { deadflag = 1; "As you leave the maze, you have a profound sense of \ relief...^^...but as you enter the room, the gnome \ attacks you, pounding you unconscious as he screams \ about internet connections, printers, and the Inform \ Designer's Manual (2nd Edition). You wake up in the \ hospital."; } ]; Object lair "Gnome's Lair" with description "You are in a small room, lit only by a bare 40-watt \ light bulb hanging from the ceiling. The floor is littered with \ paper listings and several copies of ~Spelunker Today.~ \ On a table you see a very disreputable-looking IBM PC clone... \ and the missing Owlet-Picker V printer!", before [; Go : if (noun==w_obj && mapsign hasnt general) { move mapsign to self; give mapsign general; "As you start to leave, you notice a sign on the wall \ near the entrance."; } ], w_to maze7, has light; Nearby listings "paper listings" with description "On the listings you see intriguing bits of code, but the \ gnome won't let you close enough to them to make anything out.", name "listings" "paper", before [; Take : "~Here now, laddie, write your own game!~"; ], has scenery; Nearby magazines "copies of ~Spelunker Today~" with description "They look familiar somehow, like you've seen them before \ somewhere, but you're at your wits' end trying to decide \ where....", name "magazines" "Spelunker" "Today" "magazine" "copies", article "some", before [; Take : "The gnome glares at you until you put them down."; Read : "The gnome looks you up and down and drily remarks, ~You \ don't get out much, do you?~"; ], has scenery legible; Nearby lair_pc "PC clone" with description "It looks just like the one on your desk in the Computer \ Center. Hmm....", name "PC" "clone" "computer", before [; Take : "Surely you jest? It's been stolen once already!"; ], has scenery; Nearby lair_table "table" with description "It looks just like the printer table in the Computer \ Center. Hmm...", name "table", before [; Take : "Umm, no, I don't think so."; ], has scenery; Object boombox "boombox" lair with name "boom" "box" "boombox" "player" "tape" "recorder", initial "In a corner, there's a boombox playing the Toccata and \ Fugue in D Minor, by J.S. Bach.", description "It looks like a regular boombox, playing Bach.", before [; Take : "It's bolted down. The gnome must not want it to be stolen \ or something."; ], has static; !************************************************************************** ! Miscellaneous Objects * !************************************************************************** Object printer_2 "stolen laser printer" lair with article "the", name "stolen" "laser" "printer", description "An Owlet-Picker V laser printer.", before [; Take : if (inform_manual notin gnome) { "The geeky-looking gnome grabs the stolen printer, \ insisting that it's not going anywhere until he has the \ manual he needs."; } PutOn : if (second==printer_table || second==desk) { Achieved (4); deadflag = 2; } else "You want to put the printer *where*?"; Drop : score = score - 5; deadflag = 2; "The printer falls to the floor, smashing open. Oh \ well! A broken printer is better than a missing one!^^\ [Your score has just gone down by 5 points.]"; ], after [; Take : if (inform_manual in gnome) "The nerdy-looking gnome is so engrossed in his Inform \ Designer's Manual that he doesn't even notice you take the \ printer (not that he needs it now, anyway). Now! To get it \ back to the Computer Center!"; ], has concealed; Object waiting_room "Waiting Room" ! A place for the mouse out of maze with name "nowhere", description "nowhere", has light; Object flashlight "flashlight" waiting_room with name "flashlight" "light" "flash" "torch", before [; Examine : print "A good, heavy-duty halogen flashlight, "; if (self hasnt on) { "currently off."; } else print "currently emitting a bright beam of white light."; " It looks like it should last all night, if the \ batteries are good."; SwitchOff, Off : mouse.number = 0; move mouse to waiting_room; StopDaemon(mouse); ], after [; SwitchOn : give self light; SwitchOff : give self ~light; ], has switchable; Object mouse "little grey mouse" waiting_room with name "little" "grey" "mouse" "rodent", description "Mouse /mauz/ n, pl mice /mis/, any of many small, \ scampering rodents, particularly the house mouse (Mus \ musculus), family Muridae (order Rodentia).", life [; Answer, Ask, Tell : "The little grey mouse hasn't a clue what you're talking about."; Attack : remove self; "You advance menacingly upon the little grey mouse, who, \ sensing your intent, bolts for a hole and disappears.^^Good \ job! Now you'll have to find your way through the maze \ yourself."; ThrowAt : { remove self; print "Before ", (the) noun, " can hit the little grey \ mouse, it bolts for a hole and disappears.^^Good job! \ Now you'll have to find your way through the maze \ yourself."; } Show, Give : { print "The little grey mouse sniffs at ", (the) noun, " and \ twitches its whiskers quizzically."; } Kiss : "You give the little grey mouse a peck on the top of its \ little grey head. It twitches its whiskers at you \ affectionately."; Take : "The little grey mouse, sensing your intent, scampers out of \ reach and chitters at you, clearly scolding."; Touch : "Amazingly, the little grey mouse allows you to approach and \ stroke its soft fur."; ], number 0, daemon [ m ; if ( parent(player)==parent(self) ) { switch(self.number) { 0 : print "^A little grey mouse scurries into the room. It \ seems unusually friendly, and occasionally casts an \ expectant glance in your direction."; 1, 2, 3 : print "^The little grey mouse scurries about, occasionally \ casting an expectant glance in your direction."; 4 : print "^The little grey mouse is starting to look impatient."; 5 : print "^The little grey mouse is looking really very \ impatient."; 6 : print "^The little grey mouse, tired of waiting for you \ to follow, races off."; move self to waiting_room; } m = self.number + 1; self.number = m; } ], before [; Follow : if (location ~= maze7) { print "You follow the mouse..."; } self.number = 1; switch(location) { maze1 : { move self to maze2; PlayerTo(maze2); } maze2 : { move self to maze3; PlayerTo(maze3); } maze3 : { move self to maze4; PlayerTo(maze4); } maze4 : { move self to maze5; PlayerTo(maze5); } maze5 : { move self to maze7; PlayerTo(maze7); } maze7 : { print "^You follow the mouse out of the maze with a profound \ sense of relief...^"; move self to waiting_room; self.number = 0; StopDaemon(self); PlayerTo(lair); } } ], has animate followable concealed; Object mapsign "sign" with name "sign" "notice" "map" "directions", initial "There's a sign on the wall near the entrance.", description "It reads:^^W - W - W - E - E - W - U^^Perhaps the \ gnome is forgetful?", has static legible; Object gnome "geeky-looking gnome" lair with name "gnome" "geek" "geeky" "geeky-looking", description "A wizened brown figure, almost exactly unlike any \ you've ever seen in the movies. His button-down shirt sports a \ pocket protector holding a variety of pens, he has Coke-bottle \ glasses with thick black rims, and his eyes have the \ look only gained from consuming four liters of Jolt Cola.", initial [; if (inform_manual notin self) { "A geeky-looking gnome sits staring into the computer, \ muttering dire curses at his modem, the phone company, the \ author of the language he's writing a game in, the computer, \ the printer, and anything else he can think of."; } else "A geeky-looking gnome sits staring into the computer, \ thoroughly engrossed in writing his game."; ], life [; Answer : "The gnome grumbles something about deadlines and goes \ back to writing his game."; Ask : if (inform_manual notin self) { switch(second) { 'printer' : "The gnome looks a little uncomfortable.^^~I \ need to get an Inform manual. I'd've gotten the printer \ back to you by now, but I can't get this bleeping \ connection to hold long enough to download it. Then the \ printer driver keeps crashing. I'll get it to work, \ though, if it takes all night.~^^Carefully, you explain \ that you don't have all night, but the gnome won't let \ you near the printer. He obviously cares more about his \ game than your job."; 'deadline', 'deadlines': "Distractedly, the gnome tells you that \ entries \ in the 1996 IF Competition are due in at the beginning of \ October."; 'contest', 'competition' : "The gnome looks determined.^^\ ~It's an interactive fiction writing contest. I'm \ sure to win it if I can only get a bleeping Inform \ Manual.~"; 'manual' : "~Don't you know anything?~ the gnome grumbles. \ ~I'm writing this game in Inform. I need the manual. \ To get the manual, I gotta download it. I'm having \ trouble downloading it. Kapeesh? If you're so hot on \ getting the printer back, YOU bring me either Graham \ Nelson or a copy of the Inform Manual!~"; 'inform' : "~It's a far sight better than that awful UGGS \ you're using!~"; 'graham', 'nelson' : "The gnome gives you The Look. There's a \ tinge of disdain in his voice as he says, ~You really don't \ know? He's the author of Inform, laddie.~"; 'interactive', 'fiction', 'if' : "~Text adventures, laddie. \ Text adventures.~"; 'text', 'adventures', 'adventure' : print "The gnome looks "; style bold; print "really "; style roman; "disgusted. ~You \ type text into the game, you get text responses from the \ game. You sure you know what you're doing with UGGS?~"; 'music', 'bach' : "~It's music. I like it.~"; 'boom', 'box', 'boombox' : "~It's a boombox. So?~"; 'download', 'downloading': "The gnome eyes you as if you were \ from another planet. ~To transfer a file onto your computer \ from another computer. How'd you get this job, anyway?~"; 'modem': "The gnome looks nearly agog. ~How'd you get this \ job??? Modem. A device that allows a computer to use a \ phone line, usually to talk to other computers.~ He puts \ his face in his hands, shakes his head, then goes back to \ cursing at his computer."; default : "The gnome grumbles something about deadlines \ and goes back to writing his game."; } } "The gnome just grunts at you."; Tell : "~Yeah, yeah, yeah.~"; Show, Give : if (noun==inform_manual) { move inform_manual to self; "The gnome's bulgy eyes bug out a little farther. He \ whisks the manual out of your hands and onto the table, \ going straight for the index."; } else { if (inform_manual notin self) print_ret "He roughly hands ", (the) noun, " back to \ you, saying it's not what he needs."; else { move noun to lair_table; print_ret "The gnome absently lays ", (the) noun, " on \ his table without even looking at it."; } } ], orders [; default : "~Who died and left *you* in charge?~"; ], has animate; Object inform_manual "Inform Designer's Manual" with article "the", name "manual" "inform" "designer^s", description "~The Inform Designer's Manual~ by Graham Nelson, \ Second edition, 23 October 1995... The latest issue!", before [; Read : "Detailed contents, p. 2^Introduction, p. 7,^^ \ I Fundamentals, p. 10^II The Model World, p. 31...."; ], has legible; Object gnome_message "message" with name "message", initial [; if (self hasnt general) "There's a message blinking on the computer screen at your desk."; ], description "The message reads:^ ~Cute game. I fixed the errors on \ lines 23, 114, 304, 735 and 982. If you want my opinion, though, \ I'd say keep your day job.^ [signed] Polygrenthus Q. Gnome~", before [; Read, Examine : if (self hasnt general) give self general; ], has legible static; !**************************************************************************** ! Getting things started, Grammar additions, Various routines * * !**************************************************************************** [ Initialise; location = Computer_Center; thedark.description = "It is pitch black. You are likely to be eaten by a geologist."; thedark.short_name = "Sinister, foreboding darkness"; print "^^^^^This isn't happening, it really isn't. You were just about to \ finish up a two week probationary period as a site operator at the University \ computer center on the third floor of Hodges Hall. It was a quiet night, \ you were working on that interactive fiction game, nobody around...and \ then you saw a shadow out of the corner of your eye. And one of the laser \ printers is gone. Unless it's back before 7am, this job - the one you \ were "; style bold; print "counting on "; style roman; print "to pay your tuition next semester - is, shall we say, \ history. You sigh. It's not going to be just another...^^"; ]; [ DeathMessage; if (deadflag==3) print "You have failed"; ]; [ PrintTaskName ach; switch (ach) { 0 : "listening in the janitor's closet"; 1 : "finding the maze"; 2 : "finding the flashlight"; 3 : "printing off the Inform Designer's Manual"; 4 : "retrieving the stolen printer"; } ]; [ Quote i; if (quote_done->i==0) { quote_done->i = 1; next_quote = i; } ]; [ AfterPrompt2; switch(next_quote) { 0 : box "Relax. It's really not" "much of a maze."; } next_quote=-1; ]; [ Amusing; DoMenu("^For amusement, try any or all of the following: \ ^ Touch the Physics Office doorknob. \ ^ Touch it again. \ ^ Bump around in the maze without the flashlight. ^ Drop the stolen printer after retrieving it.^", #r$AmusingMenu, #r$AmusingInfo); ]; [ AmusingMenu; switch(menu_item) { 0 : { item_width=10; item_name="Amusing Things to Do"; return 4; } 1 : { item_width=17; item_name="Touch the Physics Office doorknob."; } 2 : { item_width=7; item_name="Touch it again."; } 3 : { item_width=12; item_name="Bump around in the maze"; } 4 : { item_width=8; item_name="Drop the printer"; } } ]; [ AmusingInfo; switch(menu_item) { 1 : print "The doorknob has an *electric* personality...^^"; 2 : print "You lose the game if you don't remember what happened the \ first time you touched it!^^"; 3 : print "There are two different ways to lose the game by bumping \ around in the maze without the flashlight (or with it turned off). \ It may take several tries to see both of them.^^"; 4 : print "This affects your score, but you still win the game.^^"; } ]; Constant SHOWSOLVEDTAG; Constant HINTDEBUGVERBS; Include "AdHints"; Include "Ah_Night"; Include "Grammar"; !************************************************************************** ! Miscellaneous Verbs * !************************************************************************** [ HelpSub; DoMenu("There is help available on the following:^\ ^ General Instructions\ ^ Hints\ ^ Acknowledgments^", #r$HelpMenu, #r$HelpInfo); ]; [ HelpMenu; switch(menu_item) { 0 : { item_width=16; item_name="About Night at the Computer Center"; return 3; } 1 : { item_width=10; item_name="General Instructions"; } 2 : { item_width=3; item_name="Hints"; } 3 : { item_width=8; item_name="Acknowledgments"; } } ]; [ HelpInfo; switch(menu_item) { 1 : { print "Text adventures are driven by commands from the player. Basic \ movement commands include EAST, WEST, NORTH, SOUTH, ENTER, UP, DOWN, \ etc. Objects can be manipulated with verbs such as TAKE, PUT, TURN, \ and so on. Usually you give a verb followed by an object; articles \ are generally ignored. DROP THE BALL is equivalent to DROP BALL.^^"; print "To see what you, the player character, may be carrying, type \ INVENTORY (which is short for TAKE INVENTORY). To end the game, type \ QUIT. To save your game so that you may resume it later, type SAVE, \ and to resume it later, type RESTORE. The score in this game is given \ on the status bar, at the top right, but if you'd like to see how your \ score is broken down, type FULL.^^"; print "Many commands can be abbreviated. INVENTORY is abbreviated to \ a simple I. The map directions also abbreviate to E, W, N, S, NE, NW, \ U, D, and so on. EXAMINE OBJECT can be typed X OBJECT.^^"; print "If you have trouble, try a few more commands, or see the online \ hints.^^"; "Good luck!^"; } 2 : { print "This game uses Adaptive Hints for Inform, by Michael \ S. Phillips. To activate the hint system, type HINT or HINTS.^^"; } 3 : { print "This game is my erstwhile entry in the 1996 IF Competition \ on rec.arts.int-fiction. It was never entered for various reasons. \ This is my first game. Tolerance is requested. Please send bug \ reports to me at u6ed4@wvnvm.wvnet.edu.^^"; print "Hodges Hall really exists, as does its computer site (or at least \ the computer site existed when I was a student there, more years ago \ than I care to admit), at West Virginia University in Morgantown, West \ Virginia. The map layout, sans maze, is fairly accurate, simplified \ for game purposes. The legend of students disappearing is entirely a \ product of my disordered imagination.^^"; print "The odd geography of Hodges Hall is due to the fact that it is \ built on a steep hill. It it possible to walk out of doors from the \ basement, ground floor, 1st floor, and 2nd floor and be on the street. \ The halls are very long, and there really are stairwells on both ends. \ Please don't blame me for this; I only went to school there. Also, \ please note that this is a real building at a real University in West \ Virginia, USA. The floor numbering is therefore American numbering, \ not European; the numbering is faithful to the actual building, and \ not an effort to annoy my friends across the pond.^^"; print "I owe much to my husband, Jeff Mierzejewski, for putting up \ with the many late nights I spent learning to program in Inform while \ writing this game. Second only to him is my \ dear friend Thomas R. Jackson, M.D., who took time out of his busy \ schedule to alpha-test the game. Thanks also to Michael S. Phillips, \ for his Adaptive Hints for Inform.^^"; print "Thanks also to the beta testers (most of whom were official \ Competition96 beta testers) who gave me some great feedback (much of \ which I incorporated into the game): Matthew Amster-Burton, Valerie \ Balavage, Charles Carr, Matthew Daly, Michael Kinyon, Michael S. \ Phillips, and Brendon Wyber.^^"; "Finally, I wish to give credit to Graham Nelson, author of Inform. \ About him, and his contribution to IF in general, nothing really \ need be said.^^"; } } ]; [ FollowSub; if (noun hasnt followable) print (The) noun," doesn't seem to be \ going anywhere"; ]; [ OnSub; if (flashlight notin player) "You're not carrying a light source."; << SwitchOn flashlight >>; ]; [ OffSub; if (flashlight notin player) "You're not carrying a light source."; << SwitchOff flashlight>>; ]; [ LookBehindSub; "You find nothing of interest."; ]; [ ClickSub; if (noun hasnt clickable) print_ret " How do you get the mouse cursor on ", (the) noun, ", precisely?"; ]; [ ClickOnSub; if (second hasnt clickable) print_ret " How do you get the mouse cursor on ", (the) noun, ", precisely?"; ]; [ ReadSub; << Examine noun >>; ]; [ DrinkFromSub; "You turn the little knob and bend over the fountain to take a drink. \ A second or so later, the cooler kicks in and the water becomes so cold \ that it makes your teeth hurt."; ]; [ UnfoldSub; "How?"; ]; [ XyzzySub; "Nothing happens."; ]; Verb "follow" "chase" "pursue" "trail" * noun -> Follow * "after" noun -> Follow; Verb "on" * -> On; Verb "off" * -> Off; Extend "read" first * legible -> Read; Extend "look" * "behind" noun -> LookBehind; Extend "drink" * "from" noun -> DrinkFrom * "at" noun -> DrinkFrom; Verb "click" * noun -> Click * "on" noun -> Click * noun "on" noun -> ClickOn; Verb "unfold" * noun -> Unfold; Verb "help" * -> Help; Verb "xyzzy" * -> Xyzzy; ! It's over now, we can all go home. end