!% -SD !========================================================================= ! Copyright (C) 2019 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.^"; Release 1; Serial "190908"; Constant MAX_SCORE = 6; Include "parser"; Include "verblib"; Global openedbackpack = 1; Global openedtray = 1; Global takencd = 1; Global beeping = 1; !========================================================================= ! The Game Objects Object break_room "Break Room" with description "This break room is a calm, quiet and peaceful 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 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 "A long counter. You can't quite determine the color, it's somewhere between green and brown. On the counter is a microwave.", 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', has container openable; Object table "table" break_room with description "It's a table. Were you expecting something else?", 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 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 (openedbackpack == 1) { score = score + 2; openedbackpack = 2; } ], 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 (takencd == 1) { score = score + 2; takencd = 2; print_ret "You pick up the Trisquel CD.^"; } ], has ; Object hallway "Hallway" with description "Bereft of features, adornment or even adequate lighting, this hallway is as plain as they come. 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 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 (openedtray == 1) { score = score + 2; openedtray = 2; } ], 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; "^^^^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"; !=========================================================================