!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! CIA Adventure - Original Author Unknown ! Ported from CPMNET BBS to GWBASIC by Pete Wohlmut in 1982 ! Ported to Inform by J. Kevin Thomas in 1996 (jkthomas@unity.ncsu.edu) ! ! See the end of this source for porter's notes. !______________________________________________________________________________ Switches xv5s; Constant Story "C.I.A. Adventure"; Constant Headline "^Original Author Unknown.^ Ported from TRS-80 version on CPMNET BBS to GWBASIC by Pete Wohlmut (1982)^ Ported to Inform by J. Kevin Thomas (jkthomas@@64unity.ncsu.edu)^"; Release 1; Serial "961218"; Constant MAX_CARRIED 5; ! Constant DEBUG; Include "Parser"; Include "VerbLib"; global elevator_at = 1; ! The floor that the elevator is located at. global combo; ! The combination number for the lock. global sleep_for; ! The guard will sleep for this many turns. Attribute hidden; ! Hide object from CiaRoom (like 'concealed'). Attribute poisoned; ! Guard drank from cup? On, yes. Off, no. !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! CiaRoom class, which was taken from Graham Nelson's ScottRoom class in his ! port of Adventureland, with some minor changes of my own. !______________________________________________________________________________ Class CiaRoom with initial [; give self ~visited; ], describe [ i c d; print (string) self.description; objectloop (i in self) if (i ~= player) { c++; give i concealed; } if (c~=0) { objectloop (i in self) if (i ~= player) { if (i hasnt hidden) print "^You can see ", (a) i, "."; } } c=0; d=0; print "^^Exits are: "; for (i=n_to: i<=d_to: i++) if (self.i ~= 0) c++; if (c==0) print "None!"; else { for (i=n_to: i<=d_to: i++) if (self.i ~= 0) { if (d++>0) print " "; if (i==n_to) print "North"; if (i==s_to) print "South"; if (i==e_to) print "East"; if (i==w_to) print "West"; if (i==u_to) print "Up"; if (i==d_to) print "Down"; } print "."; } new_line; ], each_turn [; if (turns==400) { deadflag = 1; "^Oh No! They've caught up to you! They pull out guns!"; } if (turns ~= 400 && turns >= 375) { print "^You think that they are on to you... You hear noises.^"; } ]; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Busy Street !______________________________________________________________________________ CiaRoom Busy_Street "Busy Street" with description "You are on a busy street.", s_to Building; Object -> Building "tall office building" with name "building" "office", door_to Lobby, door_dir s_to, has open door static; Object Badge "C.I.A identification badge" with name "badge", article "a"; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Lobby !______________________________________________________________________________ CiaRoom Lobby "Lobby" with description "You are in the lobby of the building.", after [; Go: if (badge in player) { ; print "^The door man looks at your badge and then throws you out.^"; PlayerTo(Busy_Street, 2); rtrue; } ], n_to Busy_Street, e_to Dingy, w_to Visitors, s_to Sliding_Doors; ! This /has/ to be the silliest puzzle of the game - giving you an object ! and forcing you to drop it on your first turn. Crazy. Object -> Sculpture "sculpture" with name "sculpture", before [; Open: if (self has openable && self hasnt general) { move Quarter to location; move Blank_Card to location; give self ~openable general; "^You open the sculpture, and two things fall out!"; } "^You try, but you can't."; ], has static; Object -> -> Quarter "quarter" with name "quarter", before [; Insert: if (second==Coffee_Maker && self in player) { move Cup to location; remove self; "^Pop! A cup of coffee comes out of the machine."; } ]; Object -> -> Blank_Card "blank credit card" with name "blank" "credit" "card", before [; Insert: if (Guard in location && guard hasnt general) { "^The guard won't let you!"; } if (Slit in location && second == Slit) { move Lock to location; remove Blank_Card; "^Pop! A section of the wall opens.... ^Revealing something very interesting."; } ]; Object -> Sliding_Doors "pair of sliding doors" with name "door" "doors", description "There's a button near the doors.", before [; Open: "^You can't."; ], door_to Elevator, door_dir s_to, has static door; Object -> Call_Button "call button" with name "button" "call", before [; Push: if (Sliding_Doors hasnt open) { give Sliding_Doors open; "^The doors slide open with a woosh!"; } "^The doors are already open."; ], has static scenery hidden; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Elevator !______________________________________________________________________________ CiaRoom Elevator "Small Room" with description "You are in a small room.", n_to [; if (elevator_at==1) return Lobby; if (elevator_at==2) return Hallway; if (elevator_at==3) return Short_Corridor; ]; Object -> Button_Panel "panel of buttons marked 'first', 'second' and 'third'" with name "panel", has static; Object -> Button_1 "first button" with name "button" "first", before [; Push: elevator_at = 1; "^The doors close and you feel as if the room is \ moving.^Suddenly the doors open again."; ], has static scenery hidden; Object -> Button_2 "second button" with name "button" "second", before [; Push: elevator_at = 2; "^The doors close and you feel as if the room is moving.^Suddenly the doors open again."; ], has static scenery hidden; Object -> Button_3 "third button" with name "button" "third", before [; Push: elevator_at = 3; "^The doors close and you feel as if the room is moving.^Suddenly the doors open again."; ], has static scenery hidden; Object -> Old_Key "olde fashioned key" with name "key" "olde", article "an"; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Visitor's Room !______________________________________________________________________________ CiaRoom Visitors "Visiting Room" with description "You are in a visitors room.", e_to Lobby; Object -> VCR "video cassette recorder" with name "recorder" "vcr", description [; if (Battery notin self) { "^There's no power for it."; } if (Battery in self && TV hasnt general) { "^There's no T.V. to watch on."; } ], has static; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Dingy Anteroom !______________________________________________________________________________ CiaRoom Dingy "Dingy Anteroom" with description "You are in a dingy anteroom.", w_to Lobby, e_to Dingy_Door; Object -> Dingy_Door "door" with name "door", door_dir e_to, door_to Pres_Office, before [; Unlock: <>; Open: if (Old_Key in player) { give Dingy_Door open; "^O.K. You've opened the door."; } "^Its locked!"; ], has static door; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! President's Office !______________________________________________________________________________ CiaRoom Pres_Office "President's Office" with description "You are in the president's office.", w_to Dingy; Object -> Desk "mahogany desk" with name "desk", description [; if (Drawer has static) "You can see it has a drawer in it."; ], has static; Object -> Drawer "drawer" with name "drawer", description "It looks fragile.", before [; Take, Push, Pull: "^It is in the desk and locked."; Attack: if (Weight in player && Drawer has static) { move Notebook to location; move Battery to location; give self ~static ~hidden; "^Its hard.. But you break it. Two things fall out."; } "^You try, but can't."; Open: if (self has hidden) { "^Its stuck!"; } ], has static hidden; Object -> Weight "heavy paper weight" with name "weight", description "It looks heavy."; Object -> -> Notebook "notebook" with name "notebook", description [; if (self hasnt general) give self general; "It says:^ We have discovered one of CHAOS' secret words.^ It is: BOND007. To be used in a -tasteful- situation."; ]; Object -> -> Battery "large battery" with name "battery" "large", before [; Insert: if (second==VCR && VCR in location) { move self to VCR; "^You put the battery into the VCR."; } ]; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Hallway !______________________________________________________________________________ CiaRoom Hallway "Hallway" with description "You are in a hallway.", e_to Elevator, w_to Security_Office, s_to Cafeteria; Object -> Coffee_Maker "coffee maker" with name "maker" "coffee", has static; Object -> -> Cup "cup of steaming hot coffee" with name "cup" "hot" "steaming" "coffee", description "It looks fragile.", before [; Drop: remove Cup; "^You drop the cup and it breaks into small pieces.^The coffee soaked into the ground."; ]; ! The cup originally had no description, but I added the 'fragile' part ! to make the 'dropping the cup' rule more fair. Always helpful to have ! hints. !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Security Office !______________________________________________________________________________ CiaRoom Security_Office "Security Office" with description "You are in a security office.", e_to Hallway; Object -> TV "portable television" with name "tv" "television" "portable" "telly", description [; if (self has general && Tape in VCR && Battery in VCR) { if (sculpture hasnt general) give sculpture openable; print "^The tape is playing a message:^^ We have uncovered a number that will help you. That number is: ", combo, ". Please watch out for hidden traps. Also, there is something in the sculpture.^"; rtrue; } "^The screen is dark."; ], before [; Tie: if (second==VCR && location == Visitors && self hasnt general) { give self general; print "^You connect the TV to the VCR"; if (self in player) { move self to location; print " and set it down."; rtrue; } else print "."; rtrue; } if (second == VCR && location == Visitors && self has general) { "^You already did that."; } "^You can't connect the TV to that."; Take: if (self has general) { give self ~general; print "^You disconnect the TV from the VCR.^"; } ]; Object -> Monitor1 "bank of monitors" with name "bank" "monitor" "monitors", description [; if (Large_Button hasnt general) { "^You see a metal pit 1000's of feet deep on one monitor. On the other side of the pit, you see a large hook."; } "^The screen is dark."; ], has static; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Cafeteria !______________________________________________________________________________ CiaRoom Cafeteria "Cafeteria" with description "You are in a cafeteria.", w_to Closet_Door, n_to Hallway; Object -> Closet_Door "closet door" with name "door", door_dir w_to, door_to Closet, before [; Unlock: <>; Open: if (Old_Key in player) { give self open; "^O.K. You've opened the door."; } else "^Its locked!"; ], has static door; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Closet !______________________________________________________________________________ CiaRoom Closet "Closet" with description "You are in a maintenance closet.", e_to Cafeteria; Object -> Bag "plastic bag" with name "plastic" "bag" "sack", description "Its a very strong bag.", before [; Cut: if (Razor in player) { move Tape to location; remove self; "^Rip! The bag goes to pieces, and something falls out!"; } "^There isn't anything sharp enough."; Open: "^You can't. It is too strong."; ]; Object -> -> Tape "video tape" with name "tape" "video", before [; Insert: if (second==VCR && VCR in location) { move Tape to VCR; "^You put the video tape into the recorder."; } ]; Object -> Broom "broom" with name "broom"; Object -> Dustpan "dustpan" with name "dustpan"; Object -> Gloves "pair of rubber gloves" with name "gloves" "rubber", has clothing; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Short Corridor !______________________________________________________________________________ CiaRoom Short_Corridor "Short Corridor" with description "You are in a short corridor.", after [; Go: if (Guard hasnt general && ID_Card notin player) { ; print "^The guard looks at you suspiciously and then throws you back.^"; PlayerTo(Elevator, 2); rtrue; } if (Guard hasnt general && Cup in player && Cup has general) { give Guard general poisoned; remove Cup; Guard.short_name = "sleeping guard"; StartDaemon(Guard); print "^The guard takes your coffee and drinks it. He falls asleep right away.^"; } ], w_to Elevator, s_to Side_Corridor, e_to Solid_Door; Object -> Solid_Door "solid-looking door" with name "solid" "door" "solid-looking", description "There is a small slit beside the door.", before [; Open: "^You can't. It doesn't work."; ], door_to Metal_Hall, door_dir e_to, has static door locked; Object -> Guard "security guard" with name "guard" "security", short_name "security guard", react_before [; if (self hasnt general && self has poisoned) { deadflag = 1; "^The guard draws his gun and shoots you!"; } ], daemon [ t ; t = sleep_for - 1; sleep_for = t; if (t==1 && location==Short_Corridor) { print "^You can hear someone yawning.^"; } if (t==0) { StopDaemon(self); give self ~general; Guard.short_name = "security guard"; if (location==Short_Corridor) {print "^The guard wakes up!^";} } ], has animate; Object -> Slit "slit" with name "slit" "slot", has static hidden; Object -> -> Lock "electronic lock with dial" with name "lock" "electronic" "dial", before [; SetTo: print "You set the dial to ", second, ".^"; if (second == combo) { remove Lock; give Solid_Door open ~locked; "^The door opens slowly.."; } "^You've got the combination wrong!"; ]; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Metal_Hall !______________________________________________________________________________ CiaRoom Metal_Hall "Metal Hall" with description "You are in a hallway made of metal.", after [; Go: if (Lever hasnt general) { ; deadflag = 1; "^The floor is wired with electricity! You're being electrocuted!^"; } ], e_to Plain, w_to Short_Corridor; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Plain Room !______________________________________________________________________________ CiaRoom Plain "Plain Room" with description "You are in a small plain room.", n_to Cubicle, w_to Metal_Hall; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Cubicle !______________________________________________________________________________ CiaRoom Cubicle "Cubicle" with description "You are in a small sound-proofed cubicle.", after [; Go: if (Large_Button hasnt general) { ; deadflag = 1; "^Sirens go off all around you! Guards run in and shoot you to death!"; } ; "A secret door slams shut behind you!"; ]; Object -> Case "glass case on pedastal" with name "glass" "case" "pedastal", before [; Cut: if (Razor in player && Ruby in self) { move Ruby to player; "^You cut the case and reach in to pull something out."; } "You try, but it doesn't work."; Look: if (Ruby in self) { "^You can see a gleaming stone inside."; } ], has static; Object -> -> Ruby "very large ruby" with name "large" "ruby"; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Side Corridor !______________________________________________________________________________ CiaRoom Side_Corridor "Side Corridor" with description "You are in a side corridor.", n_to Short_Corridor, e_to Gen_Room; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Gen_Room !______________________________________________________________________________ CiaRoom Gen_Room "Power Generator Room" with description "You are in the power generator room.", w_to Side_Corridor; Object -> Square "small metal square on wall" with name "square", before [; Push, Pull, Touch: if (Gloves hasnt worn && lever hasnt general) { deadflag = 1; "^There is electricity coursing through the square! You're being electrocuted!"; } ], has static; Object -> Lever "lever on the square" with name "lever", before [; Push, Pull: if (Gloves has worn && self hasnt general) { give self general; "^The lever goes all the way up and clicks.^ Something seems different now."; } if (self has general) { give self ~general; "^The lever goes all the way down and clicks.^ Something seems different now."; } deadflag = 1; "^The lever has electricty coursing through it! You're being electrocuted!"; ], has static; Object -> Square_Sign "sign on the square" with name "sign", description "It says: Watch out! Dangerous!", has static; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Basement !______________________________________________________________________________ CiaRoom Basement "Sub-Basement" with description "You are in a sub-basement below the chute.", e_to Complex; Object -> Rope "strong nylon rope" with name "rope" "nylon" "strong", before [; ThrowAt: if (second==Hook && location==Ledge) { move Rope to Ledge; give Rope door open; Ledge.in_to=Rope; self.door_dir=in_to; self.door_to=Other_Side; "^You throw the rope and it snags on the hook."; } Take: if (Rope has door) { give Rope ~door ~open; Rope.door_dir=0; self.door_to=0; Ledge.in_to=0; } Swing: if (Rope has door) <>; ], door_to 0, door_dir 0; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Complex !______________________________________________________________________________ CiaRoom Complex "Entrance to Secret Complex" with description "You are in the entrance to the secret complex.", w_to Basement, s_to Ledge, e_to Monitoring_Room; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Monitoring_Room !______________________________________________________________________________ CiaRoom Monitoring_Room "Monitoring Room" with description "You are in a secret monitoring room.", w_to Complex; Object -> Bank "bank of monitors" with name "bank" "monitor" "monitors", description "You see a room with a case on a pedestal in it.", has static; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Ledge !______________________________________________________________________________ CiaRoom Ledge "Ledge" with description "You are on a ledge in front of a metal pit 1000's of feet deep.", n_to Complex, in_to 0; Object -> Hook "hook" with name "hook", has static scenery hidden; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Other_Side of ledge. !______________________________________________________________________________ CiaRoom Other_Side "Other Side" with description "You are on the other side of the pit.", e_to Long_Corridor; Object -> Hook_Rope "large hook with rope hanging from it" with name "hook" "rope" "large", before [; Take, Go: "^You can't reach it."; ], has static scenery; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Long Corridor !______________________________________________________________________________ CiaRoom Long_Corridor "Long Corridor" with description "You are in a long corridor.", w_to Other_Side, s_to Narrow, e_to Large_Room; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Narrow !______________________________________________________________________________ CiaRoom Narrow "Narrow Cross Corridor" with description "You are in a narrow cross corridor.", n_to Long_Corridor, s_to Lab; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Lab !______________________________________________________________________________ CiaRoom Lab "Secret Laboratory" with description "You are in a secret laboratory.", e_to Narrow; Object -> Box "box with a small button on it" with name "box" "button" "small", before [; Push: print "^You push the button on the box and...^"; if (location == Cubicle || location == Control) { print "There is a blinding flash!^"; if (Ruby in Player) { deadflag = 2; PlayerTo(Busy_Street,2); "^Hooray! You've recovered the ruby!^You win!"; } PlayerTo(Busy_Street,2); rtrue; } "^Nothing Happens."; ]; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Large Room !______________________________________________________________________________ CiaRoom Large_Room "Large Room" with description "You are in a large room.", w_to Long_Corridor, s_to Cross_Exam; Object -> Painting "small painting" with name "small" "painting" "jackal", description "You see a picture of a grinning jackal.", after [; Take, Push: if (Pill in self) { move Pill to location; "^Something fell from the frame!"; } ]; Object -> -> Pill "small capsule" with name "capsule" "small" "pill", before [; Insert: if (second==Cup && Pill in player) { remove Pill; give Cup general; "^You put the small capsule into the cup of steaming hot coffee."; } Drop: if (Cup in player) { remove Pill; give Cup general; "^You try to drop it but if falls into the cup of coffee!"; } ]; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Cross_Exam !______________________________________________________________________________ CiaRoom Cross_Exam "Cross Examination Room" with description "You are in a cross-examination room.", n_to Large_Room, s_to Chief; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Chief !______________________________________________________________________________ CiaRoom Chief "Office" with description "You are in the office of the chief of CHAOS.", n_to Cross_Exam, s_to Near_End, w_to Bathroom; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Bathroom !______________________________________________________________________________ CiaRoom Bathroom "Bathroom" with description "You are in a small bathroom.", e_to Chief; Object -> Razor "razor blade" with name "razor" "blade"; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Control !______________________________________________________________________________ CiaRoom Control "Control Room", with description "You are in the CHAOS control room.", e_to Near_End; Object -> Large_Button "large button on the wall" with name "large" "button", before [; Push: if (self hasnt general) give self general; else give self ~general; "^The button on the wall goes in .....^Click! Something seems different now."; ], has static; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Near_End !______________________________________________________________________________ CiaRoom Near_End "Near the End" with description "You are near the end of the complex.", n_to Chief, w_to Control; Object -> ID_Card "CHAOS ID card" with name "chaos" "id" "card"; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Game Routines and such forth. !______________________________________________________________________________ [ Initialise; location=Busy_Street; move Badge to player; give player light; while (combo < 1000) combo=random(9999); sleep_for = 5 + random(10); "^^Writing on wall says:^ For instructions, type 'orders' please.^"; ]; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! GamePostRoutine - Also taken from Graham Nelson's port of Adventureland !______________________________________________________________________________ [ GamePostRoutine i; if (action==##Look) objectloop (i in location) if (i ~= player && i has concealed) give i ~concealed; rfalse; ]; [ MissionSub; "^Your mission is to recover a ruby that is being used in top secret government projects as a part in a laser projector.^^The ruby has been captured by a secret spy ring known as CHAOS. We suspect they are under cover somewhere in this neighborhood. Good luck!"; ]; [ Bond007Sub; if (player in Cafeteria && notebook has general) { print "^Whoops! A trap door opens underneath you and you find yourself falling!^"; PlayerTo(Basement, 2); elevator_at = 1; ! Tidy, tidy. rtrue; } "^Nothing happens."; ]; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Gramar and Verbs !______________________________________________________________________________ Include "Grammar"; Verb "bond007" * -> Bond007; Verb "orders" * -> Mission; Verb "connect" * noun -> Tie * noun "to" noun -> Tie; end; !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ! Porter's Notes: !------------------------------------------------------------------------------ ! I first came across this game on a BBS while looking for text adventure ! materials in 1994. It was written in GWBASIC by Pete Wohlmut. I originally ! ported it to MicroSoft's QuickBasic because of a personal loathing to the ! GWBASIC environment. A simple text game of approximately an hour's ! diversion, I believed it would help me learn more about Inform if I tried ! porting it. And it has. I'm now working on a game of my own. ! ! The game is originally a simple two word parser, and some of the more ! complex actions (such as inserting things) were achieved with a follow-up ! query. The text is simplistic, and originally was written in a first person ! point-of-view. I took the liberty of sprucing up the text as well as ! changing the point-of-view to second person. I tried to preserve the ! simplistic nature of the text, however. ! ! Special thanks to Graham Nelson for bringing us Inform, as well as for the ! use of his ScottRoom class. ! ! Also thanks to Gareth Rees for his fine tutorial and excellent examples ! (and the wonderful game of "Christminster"). ! ! J. Kevin Thomas ! email: jkthomas@unity.ncsu.edu !______________________________________________________________________________