!% -SD !========================================================================= ! 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 "080625"; !for keeping track of public releases 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 "Your standard break room. A fridge, and a long counter take up one wall. 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 "Your standard refrigerator.", 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 "Your standard microwave.", name 'microwave' 'micro', has container openable scenery; 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 "Your backpack.", name 'pack' 'back' 'bag' 'backpack', article "your", before [; Open: if (openedbackpack == 1) { score = score + 2; openedbackpack = 2; } ], has clothing container openable; Object disc "Ubuntu CD" backpack with description "An automatic recovery CD, guaranteed to fix almost any server.^^Ok, it's just an install CD that auto-installs Ubuntu, but hey, if it works, it works.", name 'disk' 'disc' 'Ubuntu' 'cd', after [; Take: if (takencd == 1) { score = score + 2; takencd = 2; print_ret "You pick up the Ubuntu 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 server_room, w_to "When nature calls, you'll know about it, but right now, it isn't calling.", before [; Go: if (noun == n_obj) { StartDaemon(server_room); print "^^You use your key card to open the server room door and step into your world.^"; } ], 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, daemon [; if (location ~= server_room) return; 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 [; 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 Ubuntu, 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 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 Ubuntu CD?^"; ]; [ Deathmessage; if (deadflag == 5) print "You have won"; ]; !========================================================================= ! Standard and Extended Grammar Include "Grammar"; !=========================================================================