!% -SD !========================================================================= ! Copyright (C) 2019, 2020, 2021 Jason Self ! ! This program is free software: you can redistribute it and/or modify ! it under the terms of the GNU Affero General Public License as ! published by the Free Software Foundation, either version 3 of the ! License, or (at your option) any later version. ! ! This program is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU Affero General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public ! License along with this program. If not, see ! . ! !This file incorporates work covered by the following copyright and !permission notice: ! ! Copyright (C) 2008 Daniel Bartholomew ! ! This program is free software: you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation, either version 3 of the License, or ! (at your option) any later version. ! ! This program is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. ! ! You should have received a copy of the GNU General Public License ! along with this program. If not, see ! . !========================================================================= Constant Story "The Server Room"; Constant Headline "^An Interactive Fiction by Daniel Bartholomew with modifications by Jason Self.^"; Release 1; Serial "210202"; Constant MAX_SCORE = 6; Include "parser"; Include "verblib"; Global beeping = 1; !========================================================================= ! The Game Objects Object break_room "Break Room" with description "This break room is a calm, quiet and peaceful place for people to unwind and eat. Well kept and organized, the area is clean and inviting. A large television is mounted to one of the walls, next to a refrigerator. Even though no one's around the smell of a pleasant coffee blend still hangs in the air. A cool-looking counter and white couch take up another wall. The remaining walls have posters of various sports teams of the previous four years. East is the outside world and west is the hallway to the server room.", w_to hallway, e_to "You take one look outside and think better of it. The daystar is too bright and terrible to face today. Besides, you have work to do.", has light; Object tv "television" break_room with description "It looks like a cheap, generic flat screen television with an edge-to-edge matte screen. You see no buttons on it. There should be a remote control somewhere.", name 'tv' 'television' 'telly', before [; SwitchOn: print_ret "The television can only be turned on using the remote."; ], has container openable scenery switchable; Object whitecouch "white couch" break_room with description "With a smooth and modern design, this looks to be a luxurious couch. It is extremely durable and easy to clean and maintain. Offering enough room to sit or lay, it looks very soft and comfortable.", name 'white' 'couch' 'sofa', before [; Take, Pull, Push, PushDir: print_ret (The) self, " is too heavy for that."; ], has scenery static supporter enterable; Object posters "posters" break_room with description "Fold outs from a japanese sport fanzine, the posters really show off the players and game.", name 'sport' 'sports' 'poster' 'posters', has scenery; Object fridge "refrigerator" break_room with description "This refrigerator makes a statement with a sleek, modern and minimal stainless steel design. Featuring large doors it seems quite an impressive refrigerator that can hold a lot.", name 'fridge' 'refrigerator', has container openable scenery; Object counter "long counter" break_room with description "It's a beautiful, stylish, and high-quality solid wood counter that runs the length of the wall. You can't quite determine the color of the sleek countertop, it's somewhere between green and brown. The design on the countertop consists of geometric patterns. It seems a sturdy, durable, and solid counter.", name 'counter', has static supporter scenery; Object microwave "microwave" counter with description "A combination of silver and black, this microwave looks like a real workhorse. It's compact, quiet, and works great.", name 'microwave' 'micro', before [; Receive: print "Put "; print (a) noun; print_ret " into the microwave? Maybe you should come with a warning label because you contain more than a trace amount of nut."; ], has container openable; Object table "table" break_room with description "The table is made of strong wood. It looks to be about 6 feet across and could probably sit 6 to 8 people. It's white, round and seems very functional as a table despite looking quite heavy.", name 'table', before [; Take: "Let me spell it out for you: it is a T A B L E and you are NOT Superman."; ], has scenery supporter; Object backpack "backpack" table with description "This backpack looks like a modern art piece that was made using brown and light blue-green watercolors. A black line was traced around to make the stitching lines. Well-worn and quite suitable for travel, it looks like it could carry a lot of belongings.", name 'pack' 'back' 'bag' 'backpack', article "your", before [; Open: if (backpack hasnt visited) { score = score + 2; give backpack visited; } ], has clothing container openable; Object disc "Trisquel CD" backpack with description "An automatic recovery CD, guaranteed to fix almost any server.^^Ok, it's just an install CD that auto-installs Trisquel, but hey, if it works, it works.", name 'disk' 'disc' 'Trisquel' 'cd', after [; Take: if (disc hasnt visited) { score = score + 2; give disc visited; } ], has ; Object hallway "Hallway" with description "The hallway is long and rectangular, and the walls are painted a cool blue and the floor is carpeted. One of the long walls is decorated with a few paintings, all of different scenes from around the city. The wall opposite the paintings has a glass display case. Doors lead east back to the break room, north to the server room, or west to the restrooms.", e_to break_room, n_to "You use your key card to open the server room door but instead of a beep of approval and an unlocked door you get a buzz of denial and the door remains locked. Plus: Through the window in the door you can see someone moving around inside but there shouldn't be anyone else here today.", w_to restroom, has light; Object carpet "carpet" hallway with description "The carpet is a deep red color and very well kept. It covers the floor of the entire hallway. It has an intricate pattern of woven vines, flowers and leaves.", name 'carpet' 'floor', has scenery; Object paintings "paintings" hallway with description "There's a painting of the city bridge with a young girl standing on it and looking out to the horizon, another of a large three-masted ship tied up at the docks with several people on the deck looking out over the water, one of an old style saloon with a bucking horse outside.", name 'paint' 'painting' 'paintings', before [; Take, Pull, Push, PushDir: print_ret (The) self, " are firmly attached to the wall."; ], has scenery pluralname; Object case "glass display case" hallway with description "The display case is large and made of glass.", name 'glass' 'display' 'case', before [; Take, Pull, Push, PushDir: print_ret (The) self, " is too heavy for that."; ], has container openable scenery transparent; Object award "crystal award" case with description "It's an award the company won. It's made of extremely ornate crystal, in fact more so than any other crystal award you've ever seen; this is probably because it's the only one you've ever seen up close. The bottom is a solid crystal octagon and there are actually eight more little crystals that act as legs supporting the main crystal octagon.", name 'crystal' 'award'; Object keycard "key card" break_room with description "The key card is thin and black with a magnetic strip down the middle. The card is slightly bendable and easy to grip.", name 'key' 'card' 'keycard', has ; Object restroom "Restroom" with description "This average-sized, square restroom has a sink set into a resin counter. The floor is tiled, the ceiling has removable tiles, and the walls are painted with a wallpapered dado. Light is provided by ceiling lights. The room is done in colors that remind you of the sky and overall looks very eclectic.", e_to hallway, has light; Object server_room "Server Room" with description "The fans, the lights, the chill . . . yep, it's a server room. Full of servers from a dozen different manufacturers, each with their own quirks.^^Your attention is immediately drawn to a server 2/3 of the way up rack 7. The little indicator light is blinking red, and it is beeping.", s_to hallway, each_turn [; beeping = random(7); switch (beeping) { 1: "^The beeping is driving you crazy."; 2: "^It's hard to think, with all of the beeping."; 3: "^The monotony of the beeping is maddening."; 4: "^You can't stand the beeping."; 5: "^The beeping reminds you of your alarm clock."; 6: "^beep . . . beep . . . beep . . . beep . . . beep . . . beep . . ."; 7: "^If you don't stop the beeping soon, you'll loose what little hair you have left."; } ], has light; Object server "server" server_room with description "The indicator light on this ancient server is blinking orange. The rest the front is featureless except for the CD tray. The beeping seems to emanate from somewhere inside the server.", name 'server' 'machine' 'computer' 'ancient' 'old', has scenery; Object tray "tray" server_room with description "It's a CD tray. Just like every other CD tray.", name 'cd' 'tray', before [; Receive: if (noun ~= disc) print_ret (The) noun, " is too big to fit."; Open: if (tray hasnt visited) { score = score + 2; give tray visited; } ], after [; Open: print_ret "You press the button and the CD tray pops out."; Close: if (disc in self) { deadflag = 5; print_ret "^With the CD in the tray, you quickly reboot the server.^^After the bios posts, your disc starts doing its thing and before you know it the server is happily running Trisquel, and even more than that, the beeping has stopped. Yay!"; } ], has container openable scenery; !========================================================================= ! Entry point routines [ Initialise; location = break_room; move keycard to player; "^^^^It's Saturday, a nice one at that, and you've been called in to fix a server that's on the blink. Again.^^You've had it. This server is going to run GNU/Linux from this day forward! The process will be easy - just put the disc into the server and away we go. Now where is that Trisquel CD?^"; ]; [ Deathmessage; if (deadflag == 5) print "You have won"; ]; !========================================================================= ! Standard and Extended Grammar Include "grammar"; !=========================================================================