Include "declarations.h"; Object Transport "transportation tube" with name "transport" "transportation" "tube", description "This is one of those new fangled transportation tubes that use force fields to move people between decks. They can transport you a few metres, or half a K, distance is no object. You wonder what would happen if the power failed, but who's ever heard of the power failing in this day and age?", before [;enter: switch (Location) { Docking_port: print "Going down...^"; PlayerTo(Hall_m); rtrue; Hall_m: print "Going up...^"; PlayerTo(Docking_port); rtrue; Hall_n: print "Going down...^"; PlayerTo(Lounge); rtrue; Lounge: print "Going up...^"; PlayerTo(Hall_n); rtrue; } ], found_in Docking_port Hall_m Hall_n Lounge, has static concealed enterable; Steel Steel1; Steel Steel2; Room Sickbay "Sick Bay" with name "sick" "bay", description " Like the rest of the station, the medical facility is deserted. This is odd, for regulations require that the sick bay be staffed around the clock, ten chrons a day! The only exit is aft.", s_to Hall_n, in_to [; <>; ], out_to Hall_n, has enterable; Object -> Bars "intact cage bars" with name "intact" "bar" "bars", description "They all seem to be intact.", before [;Break: "They're too strong to break by hand."; Cut: if (Hacksaw in Player) { Second = Hacksaw; print "(with ", (the) Hacksaw, ")^"; <>; } if ( (hacksaw in Location) || ( (hacksaw in toolbox) && (toolbox has open) && ((toolbox in location) || (toolbox in player)) ) ) { Second = Hacksaw; move Hacksaw to Player; print "(first taking ", (the) Hacksaw, ")^"; <>; } else "You have nothing to cut with."; BreakWith, CutWith: if (second == Ram) "", (The) Ram, " can't get a grip on the bars as they are too far apart."; if (second == Hacksaw) switch (bars_cut) { 0: bars_cut++; move Steel1 to Location; bars.description = "One seems to have been cut."; if (Fussbudget has awake) "You cut through one of the bars, and place it on the deck. The Fussbudget sticks its head through the gap. ~Come on, cut some more! I'm almost out...do you think these edges where you cut the bars are sharp?~"; else "You cut through one of the bars, and place it on the deck."; 1: bars_cut++; move Steel2 to Location; bars.description = "Two seem to have been cut."; if (Fussbudget has awake) { print "You cut a second bar, and place it on the deck. The Fussbudget squeezes through and leaps to the floor. ~Thanks, Bud. By the way, I'm a Fussbudget.~ It hops across the room and pokes four or five eye stalks cautiously through the doorway. ~Where is everyone?"; free_fussbudget(); } else "You cut a second bar, and place it on the deck."; 2: "You've cut enough bars now."; } else "You can't cut with that."; ], has scenery pluralname; Object -> Cage "steel cage" with name "big" "steel" "cage", initial [;if (Fussbudget in Cage) { if (Fussbudget has awake) print "At the far end of the room, inside a steel cage, is a Thoosian Fussbudget, it seems to be awake."; else print "At the far end of the room, inside a steel cage, is a Thoosian Fussbudget, apparently asleep."; if (children(Cage) > 1) { print " Also "; move Fussbudget to Sickbay; ; move Fussbudget to Cage; rtrue; } else ""; } if (children(Cage) == 0) "At the far end of the room is an empty steel cage."; else { print "At the far end of the room is a steel cage. "; <>; } ], description [;print "Basically the cage is just a collection of bars welded together"; switch (bars_cut) { 0: print ". "; 1: print ", one bar has been cut. "; 2: print ", two bars have been cut. "; } <>; ], before [; Exit: "You're not in ", (the) Cage, "."; Enter: if (Fussbudget in Cage) "There isn't room in ", (the) Cage, " with ", (the) Fussbudget, " in there."; "Better not. You might hurt myself on those cut bars and it looks like ", (the) Cage, " is too tight a fit."; Break: "It's too strong to break by hand."; Cut: <>; CutWith, BreakWith: <>; Unlock: switch (second) { Key: print "This seems to be one of those new sophisticated all-purpose-key-proof locks.^"; if ((Fussbudget has awake) && (Fussbudget in Cage)) "~Break the bars! Get an acetylene torch! Find a teleporter! I've got an appointment with my lawyer in five minutes! I'm allergic to cages!~ The Fussbudget begins sneezing wildly."; rtrue; Hacksaw: "That doesn't seem to fit the lock. Perhaps you could use ", (the) Hacksaw, " in a different way to solve this problem."; Ram: "Not must point is there? ", (The) Fussbudget, " is free now."; } rfalse; Open: if ((Fussbudget has awake) && (Fussbudget in Cage)) "It seems to be locked.^ ~Open the cage!~ begs the Fussbudget, clawing at the bars. ~I'm claustrophobic! I'll starve to death! I wanna go jogging!~"; rfalse; Close: "That's already closed."; Receive: if ((noun has big) || (noun has huge)) { if (bars_cut == 0) "That's too big to fit through the bars."; else "That might get damaged on a cut bar."; } ], has static lockable locked open openable container transparent enterable; Include "Actors.h"; Room Control "Station Control" with description " This is the nerve center of the space station, where every system can be monitored. Several monitors are blinking amber. The only exit is fore.", n_to Hall_k, out_to Hall_k, has enterable; Room Briefing_Room "Briefing Room" with description " This is the Station Manager's conference room. There are a large conference table and about a dozen chairs here. On one wall is a photograph. The only exit is aft.", s_to Hall_k, out_to Hall_k, has enterable; Room Hall_k "Main Hallway, Sector K" with description " This is the station's main corridor, which continues to port and starboard. You detect a slight upward curve in the corridor. Rooms lie fore and aft.", n_to Briefing_Room, s_to Control, e_to Hall_l, w_to Hall_j; Room Hall_m "Main Hallway, Sector M" with description " This is the station's main corridor, which continues to port and starboard. You detect a slight upward curve in the corridor. A tube leads up toward the docking port.", e_to Hall_n, w_to Hall_l, u_to Docking_port; Room Hall_n "Main Hallway, Sector N" with description " This is the station's main corridor, which continues to port and starboard. You detect a slight upward curve in the corridor. A room lies to fore, and a tube leads down to the next level of the station.", n_to [;PlayerTo(Sickbay,2); if ((Fussbudget in Cage) && (Fussbudget has awake)) "~It's about time you got back. You think it's fun being locked in a cage? What if there was a fire?~"; rtrue; ], w_to Hall_m, e_to Hall_o, d_to Lounge; Object -> Key "key" with name "all-purpose" "key" "all-purpose-key", initial "Lying at the base of the wall is a key.", description "The key looks like one of those all-purpose keys that molds itself to any lock. A typical example of Garfoogian ingenuity.", before [; eat: "Who do you think you are, Houdini?"; ], has is_key; Room Lounge "Observation Lounge" with description [;print " This is where the station staff and visitors come to relax. There are a lot of tables and chairs here, a large observation window, and a plush carpet. In the corner you can see an AstroCola dispenser. A tube leads up to the station's main corridor.^"; if (children(Tray) ~= 0) { print "^"; <>; } ], u_to Hall_n, out_to Hall_n, has enterable general; Object -> Window "large observation window" with name "large" "observation" "window" "viewport" "ultra" "toughened" "ultra-toughened" "perspex", description [; "", (The) Window, " is made of ultra-toughened perspex."; ], before [;Search: "Through the large observation window, you see the Milky Way. Where ~the stars are scattered thinly, and the cold of space seeps in~. You can see a huge Gaia-Class planet below, which the space station is orbiting."; Take: "Sure, one little problem, that just might cause a hull breach."; Break, BreakWith: "No way am I doing that. They say Grues like the dark, and space is very VERY dark, not to mention extremely cold (-260 degrees centigrade), highly radiated, and rather low in the air department!"; ThrownAt: if (noun has worn) "You will have to remove ", (the) noun, " first."; move noun to Lounge; if ((noun has big) || (noun has huge)) "Luckily ", (the) Window, " is made of ultra-toughened perspex, so ", (the) noun, " has no effect and drops uselessly on the deck."; "", (The) noun, " is too small to have any effect, bounces off ", (the) Window, " and drops uselessly on the deck."; ], has scenery; Object -> Planet "huge gaia class planet" with name "huge" "gaia" "class" "planet", description "From its size, and mass of green colour, it appears to be perfectly suited to support life, and has a gravity significantly greater than terran class planets.", before [;Take, Push, Pull: "Who do you think you are? Atlas?"; Taste: "It's a bit far away for that!";], has concealed static; Object -> Tables "tables" with name "tables", description "Standard Patrol Issue.", before [;receive: if ((Player notin Lounge_Chair) && (Player notin Briefing_Room_Chair) && (Player notin Waiting_Room_Chair)) print "You pick the nearest one.^"; <>; ], has scenery supporter concealed pluralname; Class_Table -> Table "table"; Object ->-> LittleCoin "50 centimid coin" with name "50" "fifty" "coin" "cent" "centimid" "centimids", description "~FIFTY CENTIMIDS^ Third Galactic Union~", before [;insert: if ((second == Slot) || (second == Dispenser)) { if (self in pocket) print "(taking ", (the) Self, " from your ", (name) pocket, " first)^"; if (self in table) print "(taking ", (the) Self, " from your ", (name) table, " first)^"; if (self in tray) print "(taking ", (the) Self, " from your ", (name) tray, " first)^"; move Self to CoinStore; print "Click.^The dispenser display now reads "; <>; } ]; include "dispenser.h"; Room Office "Director's Office" with name "director" "director^s" "office", description " This is the office of the station manager. It is simply furnished, with a file cabinet and a desk. There's an electrical outlet on one wall. The only exit is fore.", n_to Hall_l, out_to Hall_l, has enterable; Object -> Outlet "electrical outlet" with name "electrical" "outlet" "socket" "electrical-outlet" "wall", description [;if ( (Adapter in Outlet) && (Cord in Adapter) ) "It's a five-prong electrical outlet. It contains ", (a) Adapter, ", which contains ", (a) Cord, "."; if (Adapter in Outlet) "It's a five-prong electrical outlet. It contains ", (a) Adapter, "."; else "It's a five-prong electrical outlet."; ], before [;Receive: <>; Tie: switch (second) { Adapter: <>; Cord, Computer: <>; Outlet: "Unless you have a time machine, take ", (the) Outlet, ", and go back to yesterday, I don't think your going to succeed. And then they'll probably be incompatible anyway!"; } ], has scenery transparent; Object -> Cabinet "file cabinet" with name "cabinet" "file" "filing" "file-cabinet" "filing-cabinet", before [;Unlock: if (self has open) "That's already open."; if (second == Ram) "You know how to get into ", (the) Cabinet, ", don't you?"; Break: "You try to break the lock but fail."; Cut: if (Hacksaw in Player) { Second = Hacksaw; print "(with ", (the) Hacksaw, ")^"; <>; } if ((Hacksaw in Toolbox) && (Toolbox has Open)) { Second = Hacksaw; move Hacksaw to Player; print "(first taking ", (the) Hacksaw, ")^"; <>; } else "You have nothing to cut with."; BreakWith, CutWith: if (Second == Hacksaw) "", (The) Cabinet, " is made of tritanium alloy making it invulnerable to a mere hacksaw."; else "You can't cut with that."; ], with_key key, has scenery lockable ~locked openable ~open container; Book ->-> Manual "computer technical manual" with name "computer" "technical" "manual", description "This appears to be a manual for the director's computer. I suppose you could read it if you wished but I'm sure you know the last place you're going to find any useful information is a product's manual.", before [;consult, read: "Blah, Blah, Blah... Yawn... Blah, Blah, Blah... Yawn... Arh, here's something interesting: This is a state of the art model using Zieman batteries which can go years between recharges. Thus the chances of your computer going down are too remote to even worry about. In the unlikely event of needing to recharge your computer simply plug the nine-prong plug into a nine-prong outlet. Unfortunately the power systems of Tremain and Gallium are different due a clause in their Treaty of Union that allowed both systems to continue, as neither wanted to foot the cost and effort of changing their system. So you may need an adapter to convert to the five-prong system. The manual continues but you find little more of interest."; ], has big; Book -> Desk "desk" with name "desk" "table", description "It's a polished dark oak desk with a cherry finish.", before [; Consult, Read: if (Slip in Desk) "~Buy milk. Dentist at 4300. New password is 133.~"; rfalse; Tear: if (Slip in Desk) { remove Slip; "You rip the slip of paper into tiny pieces."; } rfalse; ], has scenery transparent supporter; Object ->-> Computer "portable computer" with name "portable" "computer" "portable-computer", description [;print "The portable computer has a screen, a keyboard, and a power cord. "; if (self has power) "There's some writing on the screen."; else "The screen is blank."; ], daemon [;if ( ( ((Adapter in Player) && (Computer notin Player)) || ((Computer in Crate) && (Crate in Player) && (Adapter in Outlet)) ) && (Cord in Adapter) && (Location ~= lp_loc) ) { move Cord to Computer; print "You unplug ", (the) Cord, " from ", (the) Adapter, " before you leave.^"; } if (Computer has power) give Computer last_power; else give Computer ~last_power; if ( (Computer has on) && (Cord in Adapter) && (Adapter in Outlet) ) give Computer power; else give Computer ~power; if ( (Computer has last_power) && (Computer hasnt power) && (Outlet in Location) ) { Screen.description = "The screen is blank."; "The screen goes blank."; } if ( (Computer hasnt last_power) && (Computer has power) ) { give Computer ~logged_on; Screen.description = "~Please type password.~"; "The computer beeps and the screen lights up, saying, ~Please type password.~"; } lp_loc_but_one = lp_loc; lp_loc = Location; ], before [;Break, BreakWith: "Why bother, it's probably going to crash anyway."; Take, Remove: if ( (Cord in Adapter) && (Adapter in Outlet) ) { move Cord to Computer; print "You unplug ", (the) Cord, " from ", (the) Adapter, " first.^"; <>; } Plug: <>; Insert: if ((second == adapter) || (second == outlet)) <>; UnPlug: <>; Remove: if (second == Adapter) <>; Tie: <>; Type: <>; TypeOn: <>; SwitchOn: if (Computer has on) print "It's already switched on."; else if ( (Cord notin Adapter) || (Adapter notin Outlet) ) print "Nothing happens."; else print "You switch the computer on."; give Computer on; ""; SwitchOff: if (Computer has on) print "You switch the computer off."; else print "It's already switched off."; give Computer ~on; ""; ], has huge switchable transparent; Object ->->-> Screen "big screen" with name "big" "monitor" "display" "screen" "vdu", description "The screen is blank.", has scenery; Object ->->-> Kb "keyboard" with name "keyboard" "board", description "You can type things in on this.", before [;Type: <>; TypeOn: if ( (second == 133) && (Computer hasnt logged_on) && (Computer has Power) ) { give computer logged_on; Achieved(2); screen.description = "~Password accepted. Type 7 for memo file. Type 11 for correspondence file.~"; "The screen says ~Password accepted. Type 7 for memo file. Type 11 for correspondence file.~"; } if ( (second == 7) && (Computer has logged_on) && (Computer has power) ) { give computer read7; screen.description = "~22-Bozbar. All personnel have teleported down to the planet. I will be joining them in a chron or so, but I wanted to say goodbye to this old station; it's too bad we couldn't stop that reactor build-up. We lost the key to the Fussbudget's cage in Sickbay, so had to leave him behind. Doc gave him a shot, so he should sleep through the explosion. With the grace of the Galactic Spirit, he shouldn't feel a thing. By the way, the latest reading for meltdown is 6900.^ Type 7 for memo file. Type 11 for correspondence file.~"; print "The last page of the memo pad appears on the screen:^", (string) screen.description, "^"; if (computer hasnt read_meltdown) { give computer read_meltdown; print "^You wonder how a reactor can melt 'down' in space.^"; } rtrue; } if ( (second == 11) && (Computer has logged_on) && (Computer has power) ) { screen.description = "~22-Bozbar. For Attention of the Stellar Patrol High Command.^ DANGER! We have been unable to contact the visiting Cluster Admiral since we last communicated with him. There has been an accident with our reactor; all personnel have teleported down to the planet. I am taking all personnel files with me as dictated by regulations. The situation is now beyond our control. Inform him NOT to approach the station; the latest reading for meltdown is 6900.^ Type 7 for memo file. Type 11 for correspondence file.~"; print "The last page of the correspondence pad appears on the screen:^", (string) screen.description, "^"; if (computer hasnt read_meltdown) { give computer read_meltdown; print "^You wonder how a reactor can melt 'down' in space.^"; } rtrue; } "That has no effect."; ], has scenery; Object ->->-> Cord "power cord" with name "power" "cord" "power-cord" "cable", description [;if ((Adapter in Outlet) && (Cord in Adapter)) "The cord ends in a nine-prong plug. It is plugged into ", (the) Adapter, ", which is plugged into ", (the) Outlet, "."; if (Cord in Adapter) "The cord ends in a nine-prong plug. It is plugged into ", (the) Adapter, "."; else "The cord ends in a nine-prong plug."; ], before [;Plug, Insert: if (second == Outlet) { if ((Adapter in Outlet) && (Cord in Adapter)) "They're already connected."; if (Adapter in Outlet) { move Cord to Adapter; "", (The) Adapter, " is in ", (the) Outlet, ", so you plug ", (the) Cord, " in ", (the) Adapter, " instead."; } if (Cord in Adapter) { move Adapter to Outlet; "", (The) Cord, " is in ", (the) Adapter, ", so you plug ", (the) Adapter, " in ", (the) Outlet, " instead."; } "The cord ends in a nine-prong plug, but the outlet will only accept five-prong plugs."; } if (second == Adapter) { if (Cord in Adapter) "It's already plugged in."; move Cord to Adapter; "Done."; } Take, Remove: if (Cord in Adapter) { move Cord to Computer; "Unplugged."; } Tie: switch (second) { Outlet: <>; Adapter: <>; Cord, Computer: "Unless you have a time machine, take ", (the) Cord, ", and go back to yesterday, I don't think your going to succeed. And then they'll probably be incompatible anyway!"; } UnPlug: if (Cord in Adapter) { move Cord to Computer; "Done."; } "It's not plugged in."; Remove: if (second == Adapter) <>; ], has scenery; Book Slip "slip of paper" Desk with name "note" "slip" "paper", description "It's one of those 'Post-It' notes.", before [; Consult, Read: "~Buy milk. Dentist at 4300. New password is 133.~"; Tear: remove Slip; "You rip the slip of paper into tiny pieces."; ]; Include "Scooter"; Include "Toolbox"; Include "Barrier"; Object Adapter "adapter plug" Store with name "adapter" "plug" "adapter-plug", article "an", description [;if ( (Adapter in Outlet) && (Cord in Adapter) ) "The adapter seems designed to fit nine-prong plugs into five-prong outlets. It is plugged into ", (the) Outlet, ", and has ", (a) Cord, " plugged into it."; if (Cord in Adapter) "The adapter seems designed to fit nine-prong plugs into five-prong outlets. It has ", (a) Cord, " plugged into it."; if (Adapter in Outlet) "The adapter seems designed to fit nine-prong plugs into five-prong outlets. It is plugged into ", (the) Outlet, "."; else "The adapter seems designed to fit nine-prong plugs into five-prong outlets."; ], before [;Plug, Insert: if (second == Outlet) { if (Adapter in Player) { move Adapter to Outlet; "Done."; } if (Adapter in Outlet) "It's already plugged in."; else "You don't have the ", (string) Adapter, "."; } Tie: switch (second) { Outlet: <>; Cord, Computer: <>; Adapter: "Unless you have a time machine, take ", (the) Adapter, ", and go back to yesterday, I don't think your going to succeed. And then they'll probably be incompatible anyway!"; } Take, Remove: if (Adapter in Outlet) { move Adapter to Player; "Unplugged."; } UnPlug: if (Adapter in Outlet) { move Adapter to Player; "Done."; } "It's not plugged in."; Remove: if (second == Outlet) <>; Receive: <>; ], has transparent; Object Fruit "wooden crate of mondoweed fruits" Store with name "mondoweed" "mondoweeds" "crate" "fruit" "fruits" "mondoweed-fruit" "mondoweed-fruits" "wood" "wooden", description "It's a whole crate of mondoweed fruits.", before [;Take: if (Fruit hasnt General) { give Fruit General; give Crate General; print "You strain yourself expecting ", (the) Fruit, " to be extremely heavy. But to your surprise is is quite light if a bit bulky. It must be made from one of those genetically engineered woods that maximize strength while minimizing weight. Mondoweed Fruit of course is very light having a honeycomb structure which mostly contains air, allowing it to float long distances over water, which is vital in its reproductive cycle and probably the main reason why it is the dominant lifeform on its home planet.", (note) 6, "^"; if ( (Fussbudget in Location) || ((Location == Sickbay) && (Fussbudget in Cage)) ) { if ((Fussbudget has awake) && (Fruit notin Player)) print "~Aren't you going to share some of the food with me?~ says ", (the) Fussbudget, " innocently.^"; } } rfalse; Empty: "Best to leave the mondoweed fruits in the crate until you eat them."; Receive: "It's full of mondoweed fruits, there's no room for anything else."; Drink: "You can't drink ", (the) Fruit, ", but I bet you can eat it."; Eat: if (hungry == 0) "Thanks, but you're not hungry."; CutWith: if (second == hacksaw) <>; "You can't cut with that."; Break, BreakWith, Cut: "Better get rid of the mondoweed fruits first."; ], after [;Eat: hungry = 0; mt = spacetime + NEXT_MEAL; move Crate to Player; "Mmmm... one of your favourites... mondoweed fruits. You empty the entire crate, and your hunger dissipates."; ], has huge open edible; Object Crate "wooden crate" with name "wood" "wooden" "crate", description [;print "The crate's made from a number of wooden boards fixed together. "; <>; ], before [x; Take: if (Crate hasnt General) { give Crate General; print "You strain yourself expecting ", (the) Crate, " to be extremely heavy. But to your surprise is is quite light if a bit bulky. It must be made from one of those genetically engineered woods that maximize strength while minimizing weight.", (note) 6, "^"; } rfalse; Eat: "There are no mondoweed fruits left!"; BreakWith: if (second == hacksaw) <>; "You'll need a saw to do that."; CutWith: if (second == hacksaw) <>; "You can't cut with that."; Break, Cut: if (hacksaw notin player) if ( (hacksaw in Location) || ( (hacksaw in toolbox) && (toolbox has open) && ((toolbox in location) || (toolbox in player)) ) ) { move hacksaw to player; print "(first taking ", (the) hacksaw, ")^"; } else "You'll need a saw to do that."; move wood to player; achieved(4); if (children(crate) ~= 0) print "You deposit everything in ", (the) Crate, " on the floor, then, you cut the crate up into a number of boards, using ", (the) Hacksaw, ".^"; else print "You cut the crate up into a number of boards, using ", (the) Hacksaw, ".^"; objectloop(x) if (x in crate) move x to location; remove crate; rtrue; ], has huge container open; Object Wood "number of wooden boards" with name "wood" "number" "of" "wooden" "boards", has huge; Include "Map"; Include "Extended_Grammer"; Include "Footnote"; Include "Briefing_Room"; Include "Control"; Include "LockTest"; Include "SpaceWait";